diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000000..028642c6e9d Binary files /dev/null and b/.DS_Store differ diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000000..61b56f9e078 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,31 @@ +# This is a comment. +# Each line is a file pattern followed by one or more owners. + +# rules are explained here +# https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners + +# These owners will be the default owners for everything in the repo. +# Unless a later match takes precedence, # @Azure/sonic-fundamentals +# will be requested for review when someone opens a pull request. +# @Azure/sonic-fundamentals + +# Ansible + +# Documents + +# spytest +sonic-mgmt/spytest/tests/cisco @pevenkat @bhavani @rraguraj @jsanghra @akroy @savinaya @whitebox/cisco-spytest-reviewers + +# test reporting + +# tests + +# CICD-related +infra @whitebox/sonic-operations-team + +# General rules first +sonic-mgmt/ansible @pevenkat @bhavani +sonic-mgmt/tests @pevenkat @bhavani # Catch-all for tests/ + +# More specific rules last (these override the general ones) +sonic-mgmt/tests/cisco @pevenkat @bhavani @rraguraj @jsanghra @akroy @savinaya @whitebox/cisco-platform-test diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000000..20995e23808 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,62 @@ + + +**Description** + + + +**Steps to reproduce the issue:** +1. +2. +3. + +**Describe the results you received:** + + +**Describe the results you expected:** + + +**Additional information you deem important:** + + **Output of `show version`:** + + ``` + (paste your output here) + ``` + + **Attach debug file `sudo generate_dump`:** + + ``` + (paste your output here) + ``` diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c05019dac10..42ad0045770 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -24,19 +24,15 @@ Fixes # (issue) - [ ] Bug fix - [ ] Testbed and Framework(new/improvement) -- [ ] New Test case - - [ ] Skipped for non-supported platforms -- [ ] Test case improvement +- [ ] Test case(new/improvement) ### Back port request +- [ ] 201911 +- [ ] 202012 +- [ ] 202205 +- [ ] 202305 - [ ] 202311 -- [ ] 202405 -- [ ] 202411 -- [ ] 202505 -- [ ] 202511 -- [ ] 202512 -- [ ] 202605 ### Approach #### What is the motivation for this PR? diff --git a/.gitignore b/.gitignore index 181521bbb50..6a619f06054 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,135 @@ -# Compiled Python files -*.pyc -**/__pycache__/ -**/.pytest_cache/ - -# Ansible files -.ansible -ansible.log - -# Test generated files -tests/logs -tests/_cache -tests/metadata -ansible/plugins/*/*.pyc -# Temporary trimmed inventory file -ansible/*_tmp - -# Dev tools -.vscode/ -.idea/ -**/.venv/ +# Temporary generated files +/infra/testbed-t2-2lc-min-ports.yaml +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv .python-version -sonic-dump/ -**/common/sai_validation/generated/ -**/common/sai_validation/github.com/ -tests/pfc_headroom_test_params/*.json -tests/priority/*.json +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +infra/pyats +infra/vxr.out \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..df5c376443e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "infra/gnxi"] + path = infra/gnxi + url = https://github.com/google/gnxi.git diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..85631cc49aa --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/bin/python2" +} \ No newline at end of file diff --git a/Makefile b/Makefile index bb050f84581..a4f313554e1 100644 --- a/Makefile +++ b/Makefile @@ -1,75 +1,174 @@ -# Container -CONTAINER ?= sonic-mgmt -ANSIBLE_DIR := /data/sonic-mgmt/ansible -TESTS_DIR := /data/sonic-mgmt/tests - -# Testbed config -TOPO ?= vms-kvm-t0 -TESTBED ?= vtestbed.yaml -INVENTORY ?= veos_vtb -PASSFILE ?= password.txt -DUT ?= vlab-01 - -# Neighbor VM type (veos|ceos|vsonic) - simulated neighboring devices -NEIGHBOR ?= ceos - -# Test config -T ?= -EXTRA ?= -e "--skip_sanity --disable_loganalyzer" - -# TTY handling: use -t only if terminal is available (for CI compatibility) -TTY := $(shell test -t 0 && echo "-t") - -# Base exec -EXEC_ANSIBLE := docker exec $(TTY) -w $(ANSIBLE_DIR) $(CONTAINER) -EXEC_TESTS := docker exec $(TTY) -w $(TESTS_DIR) $(CONTAINER) - -.PHONY: help check-container shell add-topo remove-topo deploy-mg test - -help: - @echo "Usage: make [VARIABLE=value ...]" - @echo "" - @echo "Targets:" - @echo " shell - Enter sonic-mgmt container" - @echo " add-topo - Deploy topology" - @echo " remove-topo - Remove topology" - @echo " deploy-mg - Deploy minigraph to DUT" - @echo " test - Run tests (requires T=)" - @echo "" - @echo "Variables:" - @echo " TOPO - Topology name (default: vms-kvm-t0)" - @echo " TESTBED - Testbed file (default: vtestbed.yaml)" - @echo " INVENTORY - Inventory file (default: veos_vtb)" - @echo " DUT - DUT name (default: vlab-01)" - @echo " NEIGHBOR - Neighbor VM type: ceos|veos|vsonic (default: ceos)" - @echo " T - Test path for 'test' target" - @echo " EXTRA - Extra arguments for test (default: -e \"--skip_sanity --disable_loganalyzer\")" - @echo "" - @echo "Examples:" - @echo " make add-topo" - @echo " make add-topo TOPO=vms-kvm-t1" - @echo " make test T=bgp/test_bgp_fact.py" - @echo " make test T=bgp/test_bgp_fact.py EXTRA='-e \"--neighbor_type=sonic\"'" - -check-container: - @docker ps --format '{{.Names}}' | grep -q '^$(CONTAINER)$$' || \ - (echo "Error: Container '$(CONTAINER)' is not running." && \ - echo "Run: ./setup-container.sh -n $(CONTAINER) -d /data" && exit 1) - -shell: check-container - docker exec -it $(CONTAINER) bash - -add-topo: check-container - $(EXEC_ANSIBLE) ./testbed-cli.sh -t $(TESTBED) -m $(INVENTORY) -k $(NEIGHBOR) add-topo $(TOPO) $(PASSFILE) - -remove-topo: check-container - $(EXEC_ANSIBLE) ./testbed-cli.sh -t $(TESTBED) -m $(INVENTORY) -k $(NEIGHBOR) remove-topo $(TOPO) $(PASSFILE) - -deploy-mg: check-container - $(EXEC_ANSIBLE) ./testbed-cli.sh -t $(TESTBED) -m $(INVENTORY) deploy-mg $(TOPO) $(INVENTORY) $(PASSFILE) - -test: check-container -ifndef T - $(error T is required. Usage: make test T=bgp/test_bgp_fact.py) +PYTHON := python3 +BIN := pyats/bin +TESTFILE ?= sanity-scripts/sanity_scripts.txt +GOLDENBRANCH ?= 202012 +GOLDENCODE ?= http://172.29.93.10/sonic-images/golden-code/golden_code_$(GOLDENBRANCH).tar.gz +TEMP_TESTFILE := $(shell mktemp) +PIPELINE_TYPE ?= "manual_sanity" +BUILD_ID ?= "${USER}_$(date +%Y%m%d%H%M%S)" +REPORT_REPO ?= /auto/mb/sonic/workspace/sonic-cicd/sanity_logs/${PIPELINE_TYPE} +DUT_USERNAME ?= "admin" +DUT_PASSWORD ?= "password" + +DISABLE_ZTP ?= false + +ifeq ($(DISABLE_ZTP),true) + DISABLE_ZTP_COMMAND := --disable-ztp +else + DISABLE_ZTP_COMMAND := endif - $(EXEC_TESTS) ./run_tests.sh -u -n $(TOPO) -d $(DUT) -f $(TESTBED) -i ../ansible/$(INVENTORY) -c $(T) $(EXTRA) + +PTF_IMAGE_ARG := $(if $(PTF_IMAGE),--ptf-image=$(PTF_IMAGE),) + +.PHONY: init t0_run t1_run collect + +init: +ifeq (, $(shell which $(PYTHON))) + $(error $(PYTHON) is not present in $$PATH) +endif + cd infra && \ + $(PYTHON) -m venv pyats && \ + $(BIN)/pip install --upgrade pip && \ + $(BIN)/pip install -r requirements.txt --no-cache-dir + +create_sonic_topo: + echo "creating SIM sonic topology..." + bash -c "${PYTHON} update_topo.py -t ${TOPOLOGY} -p ${PLATFORM} --dut-username=${DUT_USERNAME} --goldencode=$(GOLDENCODE) --dut-password=${DUT_PASSWORD} $(PTF_IMAGE_ARG) ${DISABLE_ZTP_COMMAND}" + bash -c " \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} -u ./create_sonic_topo.py \ + --dut_uname ${DUT_USERNAME} \ + --dut_passwd ${DUT_PASSWORD} \ + --topo_type ${TOPOLOGY} \ + --device_type ${PLATFORM} \ + --script_file $(TESTFILE) \ + --tar_ball $(GOLDENCODE) \ + --clean_sim \ + --cicd \ + --test_tag '${TEST_TAG}' \ + --add_sim_patches \ + $(SIM_ADDITIONAL_PARAMS) \ + " + +clear_sim: + echo "clearing SIM sonic topology..." + bash -c " \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} /auto/vxr/pyvxr/pyvxr-latest/vxr.py clean" + +run_sanity_using_cfg_file: + echo "run sanity on HW..." + bash -c "cd infra; ${PYTHON} -u run_scripts_remote.py \ + --sim_config_file=${SIM_CONFIG_FILE} \ + --script_file=${TESTFILE} \ + --create_allure_report \ + --additional_tests="${ADDITIONAL_TESTS}" + +run_sanity: + echo "run sanity..." + bash -c " \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} -u run_scripts_remote.py \ + --script_file=${TESTFILE} \ + --device_type=${PLATFORM} \ + --topo_type=${TOPOLOGY} \ + --create_allure_report \ + --additional_tests='${ADDITIONAL_TESTS}' \ + --test_tag '${TEST_TAG}' \ + --add_sim_patches \ + $(SIM_ADDITIONAL_PARAMS) \ + " + +run_tortuga_controller_sanity: + echo "run spytest sanity..." + bash -c " \ + ${PYTHON} update_topo.py -t ${TOPOLOGY} -p ${PLATFORM} --dut-username=${DUT_USERNAME} --goldencode=$(GOLDENCODE) --dut-password=${DUT_PASSWORD} ${DISABLE_ZTP_COMMAND}; \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} ./create_tortuga_topo.py \ + --topo_type ${TOPOLOGY} \ + --device_type ${PLATFORM} \ + --tar_ball $(GOLDENCODE) \ + -c --fabric_name sonic-test-${PIPELINE_TYPE}-${BUILD_ID} \ + --cicd \ + " + +run_spytest: + echo "run spytest sanity..." + bash -c " \ + ${PYTHON} update_topo.py -t ${TOPOLOGY} -p ${PLATFORM} --dut-username=${DUT_USERNAME} --goldencode=$(GOLDENCODE) --dut-password=${DUT_PASSWORD} ${DISABLE_ZTP_COMMAND}; \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} -u run_spytest.py \ + --topology '${TOPOLOGY}' \ + --platform '${PLATFORM}' \ + --script_file '${TESTFILE}' \ + --tar_ball '$(GOLDENCODE)' \ + " + +run_spytest_hw: + echo "run spytest platform hardening..." + bash -c " \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} -u run_spytest.py \ + -m hw \ + --test_bed '${TEST_BED}' \ + --topology '${TOPOLOGY}' \ + --platform '${PLATFORM}' \ + --sonic_version '${SONIC_VERSION}' \ + --script_file '${TESTFILE}' \ + " + +# Files Needed: +# generate_spytest_html_report - infra/generate_spytest_html_report.py +# run parallel script - infra/run_spytest_parallel.py +# topology suite file - sonic-mgmt/spytest/reporting/suites/tortuga_parallel + +run_spytest_parallel: + echo "run spytest parallel sanity..." + bash -c " \ + ${PYTHON} update_topo.py -t ${TOPOLOGY} -p ${PLATFORM} \ + --onie-install ../../../sonic-cisco-8000.bin; \ + cd infra; \ + source pyats/bin/activate; \ + ${PYTHON} -u run_spytest_parallel.py \ + --topology '${TOPOLOGY}' \ + --platform '${PLATFORM}' \ + --script_file '${TESTFILE}' \ + --tar_ball '$(GOLDENCODE)' \ + --num_of_threads ${NUM_SIMS} \ + " +t0_run: + echo "run T0 testing..." + bash -c "${PYTHON} update_topo.py T0" + bash -c "cd infra; source pyats/bin/activate; ${PYTHON} -u ./create_sonic_topo.py -f ../pyvxr_yaml_files/mth64_sonic_t0-64_topo.yaml -u cisco -p cisco123 -t t0-64 -c -s $(TESTFILE) -b $(GOLDENCODE) --cicd --cicd_clean --create_allure_report --additional_tests $(ADDITIONAL_TESTS)" + +t1_run: + echo "run T1 testing..." + bash -c "${PYTHON} update_topo.py T1" + bash -c "cd infra; source pyats/bin/activate; ${PYTHON} -u ./create_sonic_topo.py -f ../pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml -u cisco -p cisco123 -t t1-64-lag -c -s $(TESTFILE) -b $(GOLDENCODE) --cicd --cicd_clean --create_allure_report --additional_tests --add_sim_patches $(ADDITIONAL_TESTS)" + +run_hw: + echo "run sanity on HW..." + bash -c "cd infra; ${PYTHON} -u run_scripts_remote.py \ + --host_address=${HOST_ADDRESS} \ + --username=${USERNAME} \ + --password=${PASSWORD} \ + --topo_name=${TOPO_NAME} \ + --script_file=${TESTFILE} \ + --device_type=${DEVICE_TYPE} \ + --docker_mgmt_container=${DOCKER_MGMT_CONTAINER} \ + --sonic_test_dir=${SONIC_TEST_DIR} \ + --create_allure_report \ + --additional_tests="${ADDITIONAL_TESTS}" + +collect_controller_logs: + echo "collect controller test result..." + pwd + cd infra; mkdir $(BUILD_ID) + cd infra; cp sanity_logs.tar.gz $(BUILD_ID)/ + cd infra; cp -r $(BUILD_ID) $(REPORT_REPO) | true diff --git a/README.md b/README.md index 042b0bdca92..e58428fcefa 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,97 @@ -# Software for Open Networking in the Cloud - SONiC +# Some Useful Links -# sonic-mgmt -[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3933/badge)](https://bestpractices.coreinfrastructure.org/projects/3933) -[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/sonic-net/sonic-mgmt.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/sonic-net/sonic-mgmt/context:python) + -- Sonic Test Pytest/Spytest/Sim based wiki -### Description -Management and automation code used for SONiC testbed deployment, tests and reporting. + - Helpful automation tips -# Contribution guide -Please read the [contributor guide](https://github.com/sonic-net/SONiC/wiki/Becoming-a-contributor) for more details on how to contribute. +## TB Reservation Link -All contributors must sign an [Individual Contributor License Agreement (ICLA)](https://docs.linuxfoundation.org/lfx/easycla/v2-current/contributors/individual-contributor) before contributions can be accepted. Visit [EasyCLA - Linux Foundation](https://docs.linuxfoundation.org/lfx/easycla) for more details. +[TB Reservation Link](https://cisco.sharepoint.com/:x:/r/sites/SONIC_on_SF/_layouts/15/doc2.aspx?sourcedoc=%7B535cf1e9-0fb7-4a26-b2aa-44a4d7d80c38%7D&action=edit&activeCell=%27Reservations%27!A5&wdinitialsession=4305bfce-d2c1-40c0-9d03-b1d9a5e908fc&wdrldsc=16&wdrldc=1&wdrldr=AccessTokenExpiredWarning%2CRefreshingExpiredAccessT) -### GitHub Workflow +## How to bring up a T0-64/T1-64-lag/T2 Sim based Sonic-mgmt setup -We're following basic GitHub Flow. If you have no idea what we're talking about, check out [GitHub's official guide](https://guides.github.com/introduction/flow/). Note that merge is only performed by the repository maintainer. +1. Pull sonic-test repo: [sonic-test repo](https://wwwin-github.cisco.com/gplatforms/sonic-test) +2. Navigate to the infra directory: -Guide for performing commits: + ```bash + cd sonic-test/infra + ``` -* Isolate each commit to one component/bugfix/issue/feature -* Use a standard commit message format: +3. Build the testbed: -> [component/folder touched]: Description intent of your changes -> -> [List of changes] -> -> Signed-off-by: Your Name your@email.com + ```bash + ./create_sonic_topo.py -f -c -u cisco -p cisco123 -t + ``` -For example: + - `-c`: clean any pre-existing sim + - `-u`: dut username + - `-p`: dut password + - `-f`: pyvxr yaml file describing the topology + - `-t`: topology type, For now we support t0 and t1 + - `-d`: device type, options are sherman, mth32 (default) + - `-b`: specify the location of your sonic-test tar ball. the tar ball will be pulled in and uploaded to the sonic-mgmt vm. -> swss-common: Stabilize the ConsumerTable -> -> * Fixing autoreconf -> * Fixing unit-tests by adding checkers and initialize the DB before start -> * Adding the ability to select from multiple channels -> * Health-Monitor - The idea of the patch is that if something went wrong with the notification channel, -> we will have the option to know about it (Query the LLEN table length). -> -> Signed-off-by: user@dev.null + Note that you should edit the yaml file to specify the SONiC image to load. If you are using DE workspace build, please see Troubleshooting #1 below. -* Each developer should fork this repository and [add the team as a Contributor](https://help.github.com/articles/adding-collaborators-to-a-personal-repository) -* Push your changes to your private fork and do "pull-request" to this repository -* Use a pull request to do code review -* Use issues to keep track of what is going on +4. For T1-64-lag: -# Documentation -For more details on each component and the directory structure, please read [docs/README.md](docs/README.md) + ```bash + ./create_sonic_topo.py -f ../pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml -c -u cisco -p cisco123 -t t1-64-lag + ``` + + - T1 YAML location: [mth64_sonic_t1_64_lag_topo.yaml](https://wwwin-github.cisco.com/gplatforms/sonic-test/blob/master/pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml) + +5. For T0-64: + + ```bash + ./create_sonic_topo.py -f ../pyvxr_yaml_files/mth32_sonic_t0_topo.yaml -c -u cisco -p cisco123 t t0 64 + ``` + + - T0 YAML location: mth64_sonic_t0-64_topo.yaml + +6. For T2 reduced topology: + + ```bash + ./create_sonic_topo.py -f ../pyvxr_yaml_files/sonic_t2_2lc_min_ports-masic.yaml -u cisco -p cisco123 -t t2-min -d sfd -c -b http://172.29.93.10/sonic-images/golden-code/golden_code_202205.tar.gz + ``` + +7. For running on 202205 Image: + + ```bash + ./create_sonic_topo.py -f ../pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml -c -u cisco -p cisco123 -t t1-64-lag -b http://172.29.93.10/sonic-images/golden-code/golden_code_202205.tar.gz + ``` + +8. For T2: + + ```bash + ./create_sonic_topo.py -f ../pyvxr_yaml_files/sonic_t2_2lc_min_ports-masic.yaml -u cisco -p cisco123 -t t2-min -d sfd -c -b http://172.29.93.10/sonic-images/golden-code/golden_code_202205.tar.gz -r -s sanity-scripts/sanity_scripts.txt + ``` + + Note: Only Gauntlet LC is supported. Work is in progress to support Vanguard. + + If you want to run sanity script while bringing up the testbed, use these additional options: + - `-s sanity_script.txt` + - `-r run sanity` + + Example: + + ```bash + ./create_sonic_topo.py -f -c -u cisco -p cisco123 -t -r -s sanity_script.txt + ``` + + At the end of the script, it will print the device details. + +9. Log into the sonic-mgmt vm using VXR machine address as `cisco` user and `cisco123` password. + + ```bash + ssh cisco@ + ``` + +10. Enter docker container: + + ```bash + docker exec -it docker-sonic-mgmt /bin/bash + ``` + +11. Testbed name: `docker-ptf` +12. DUT name: `sherman-01/mathilda-01` diff --git a/gitAutomation/githubautomation.py b/gitAutomation/githubautomation.py new file mode 100644 index 00000000000..e2061bdff68 --- /dev/null +++ b/gitAutomation/githubautomation.py @@ -0,0 +1,55 @@ +import requests +import csv +from pprint import pprint +import pandas as pd +import json +import sys + +data = list() +for i in range(1,50): + params = {"state": "all","page": i} + token = sys.argv[1] + url="https://wwwin-github.cisco.com/api/v3/repos/whitebox/sonic-buildimage/issues" + headers = {'Authorization': token} + r = requests.get(url, headers=headers, params=params) + if r.status_code != 200: + raise Exception(r.text) + for bug in r.json(): + with open('bugslist.csv', 'a') as bugslist: + if bug['assignee'] is not None: + AssignedTo = bug['assignee']['login'] + else: + AssignedTo = None + try: + fieldnames = ['Title', 'Created', 'Closed', 'State', 'BugID', 'RaisedBy', 'AssignedTo', 'Labels'] + writer = csv.DictWriter(bugslist, fieldnames=fieldnames) + writer.writerow({'Title': bug['title'], 'Created': bug['created_at'], 'Closed':bug['closed_at'],'State': bug['state'], + 'BugID': bug['number'], 'RaisedBy': bug['user']['login'], + 'AssignedTo': AssignedTo, 'Labels':[str(ele['name']) for ele in bug['labels']] }) + except Exception as e: + print(e) + + # Creating JSON File + try: + bugDict = {"BugID":bug['number'], 'Title': bug['title'], 'Created at': bug['created_at'], 'Closed at':bug['closed_at'],'State': bug['state'], + 'RaisedBy': bug['user']['login'], + 'AssignedTo': bug['assignee']['login'], 'Labels':[ele['name'] for ele in bug['labels']] } + data.append(bugDict) + except Exception as e: + print(e) + +with open('bugslist.json', 'w') as outfile: + json.dump(data, outfile) + + + + +#Creating Headers +file = pd.read_csv("bugslist.csv") +headerList=['Title', 'Created', 'Closed', 'State', 'BugID', 'RaisedBy', 'AssignedTo', 'Labels'] +file.to_csv("bugslist.csv", header=headerList, index=False) +file2 = pd.read_csv("bugslist.csv") +print(file2) + + + diff --git a/gitAutomation/readme.md b/gitAutomation/readme.md new file mode 100644 index 00000000000..aee9d0ea479 --- /dev/null +++ b/gitAutomation/readme.md @@ -0,0 +1,21 @@ +**Before running script:** +1. Please install dependencies in requirements.txt +2. You can use the command "pip install -r requirements.txt" +3. Fetch the personal access token from GitHub +https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token +Make sure to select all scopes while creating token. +TokenAPI has been deprecated hence this manual process. + +**How to run the script?** +python githubautomation.py put_the_token_here + +**After running script:** +You will find below files generated in the same directoy you ran script +1. bugslist.csv +2. bugslist.json + + +Note: +Running this too many times will lead to below error +**Exception**: {"message":"API rate limit exceeded for 172.27.147.152. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) +An alternate to increase the limit should be looked on. diff --git a/gitAutomation/requirements.txt b/gitAutomation/requirements.txt new file mode 100644 index 00000000000..a94cf69ecbe --- /dev/null +++ b/gitAutomation/requirements.txt @@ -0,0 +1,2 @@ +requests +pandas \ No newline at end of file diff --git a/infra/.DS_Store b/infra/.DS_Store new file mode 100644 index 00000000000..1a4148b1f15 Binary files /dev/null and b/infra/.DS_Store differ diff --git a/infra/Readme.md b/infra/Readme.md new file mode 100644 index 00000000000..aee2a8ff573 --- /dev/null +++ b/infra/Readme.md @@ -0,0 +1,43 @@ +**Steps to Bring up Tortuga Controller based Sim setup** +1. Add image information to pyvxr_yaml_files/tortuga_controller.yaml +2. Currently it will bring up a topology with 3 Leaf and 1 Spine, 9 Trex host. +3. Specify the fabric name. Fabric name has to be unique for each topology. +4. ./create_tortuga_topo.py --topo_type tortuga-controller -f ./../pyvxr_yaml_files/tortuga_controller.yaml -c --fabric_name lotr-1x3 +5. Above command will + 1. Bring up the sim based topology + 2. Gather the ip address and ports based information from sim + 3. Populate test.sh which will invoke controller to configure all the devices + 4. Run a traffic test to confirm that the topology has come up properly + 5. Based on the results, it will either print completed or will fail with error message. + + For e.g. + In case of a passed test + + --- 10.212.2.2 ping statistics --- + 5 packets transmitted, 5 received, 0% packet loss, time 4006ms + rtt min/avg/max/mdev = 24.495/28.886/31.556/2.771 ms + + PING 10.212.12.2 (10.212.12.2) 56(84) bytes of data. + 64 bytes from 10.212.12.2: icmp_seq=1 ttl=60 time=29.5 ms + 64 bytes from 10.212.12.2: icmp_seq=2 ttl=60 time=25.7 ms + 64 bytes from 10.212.12.2: icmp_seq=3 ttl=60 time=24.4 ms + 64 bytes from 10.212.12.2: icmp_seq=4 ttl=60 time=41.6 ms + 64 bytes from 10.212.12.2: icmp_seq=5 ttl=60 time=29.8 ms + + --- 10.212.12.2 ping statistics --- + 5 packets transmitted, 5 received, 0% packet loss, time 4006ms + rtt min/avg/max/mdev = 24.449/30.247/41.619/6.064 ms + + + Completed in 434s + + Successfully pushed configuration and Traffic Test passed + + In case of a failed test: + + --- 10.212.20.2 ping statistics --- + 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999ms + pipe 4 + + cannot ping host: kindly-1x3-host0 cannot ping 10.212.20.2 from 10.212.0.2 + Test Failed. Something went wrong, Please check the test logs diff --git a/infra/TestbedProcessing.py b/infra/TestbedProcessing.py new file mode 100755 index 00000000000..add2d52110e --- /dev/null +++ b/infra/TestbedProcessing.py @@ -0,0 +1,1205 @@ +#!/usr/bin/env python3 + +from shutil import copyfile +import yaml +import datetime +import os +import argparse +from collections import OrderedDict +import copy + +"""" +Testbed Processing + +Requirement: + python version: 2.X + python package: PyYAML 3.12 (or later) + +PyYaml Install Instructions: + [1] Download PyYAML from https://pyyaml.org/wiki/PyYAML + [2] Unpack the archive + [3] Install the package by executing (python setup.py install) + [4] Test if installation was successful (python setup.py test) + +Usage: + put TestbedProcessing.py and testbed.yaml under sonic-mgmt/ansible + python TestbedProcessing.py + python TestbedProcessing.py -i testbed.yaml + +Arguments: + -i : the testbed.yaml file to parse + -basedir : the basedir for the project + -backupdir : the backup directory for the files + +Script Procedure + [1] Backup the files we will be copying + [2] Load testbed.yaml into dictionaries for easy processing + [3] Generate the files via methods defined below +""" + +# ARGUMENTS TO PARSE +parser = argparse.ArgumentParser(description="Process testbed.yml file") +parser.add_argument('-i', help='a file for the testbed processing script', + nargs="?", default="testbed-new.yaml") +parser.add_argument( + '-basedir', help='base directory to find the files, points to /sonic-mgmt/ansible', default="") +parser.add_argument( + '-backupdir', + help='backup directory to store files, points to /sonic-mgmt/ansible/backup', nargs="?", default="backup") +parser.add_argument( + '-yaml', help='make lab and veos file in YAML format', action='store_true') +args = parser.parse_args() + +# FILES TO BACKUP +main_file = "group_vars/vm_host/main.yml" +vmHostCreds_file = "group_vars/vm_host/creds.yml" +labLinks_file = "files/sonic_lab_links.csv" +testbed_file = "testbed.yaml" +testbed_csv_file = "testbed.csv" +devices_file = "files/sonic_lab_devices.csv" +console_links_file = "files/sonic_lab_console_links.csv" +eosCred_file = "group_vars/eos/creds.yml" +fanoutSecrets_file = "group_vars/fanout/secrets.yml" +labSecrets_file = "group_vars/lab/secrets.yml" +lab_file = "lab" +inventory_file = "inventory" +dockerRegistry_file = "vars/docker_registry.yml" +veos_file = "veos" +# the number of host_var files vary. therefore, backup process creates a list of all files under host_vars folder, +# iterates through the list, and copies them to backup directory + +# Backup List +# backupList does not encompass host_var files because the number of host_var files vary. +# therefore, backup process creates a list of all files under host_vars folder, iterates through the list, +# and copies them to backup directory +backupList = [] +backupList.append(main_file) +backupList.append(vmHostCreds_file) +backupList.append(labLinks_file) +backupList.append(testbed_file) +backupList.append(testbed_csv_file) +backupList.append(devices_file) +backupList.append(console_links_file) +backupList.append(eosCred_file) +backupList.append(fanoutSecrets_file) +backupList.append(labSecrets_file) +backupList.append(lab_file) +backupList.append(inventory_file) +backupList.append(dockerRegistry_file) +backupList.append(veos_file) + +# Backup Directories +now = datetime.datetime.now() +timestamp = str(now.month) + "_" + str(now.day) + "_" + str(now.year) + \ + "_" + str(now.hour) + str(now.minute) + "_" + str(now.second) +# create folder in backup directory labeled with the current timestamp +os.makedirs(args.backupdir + "/" + timestamp) +# create files folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/files") +# create host_vars folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/host_vars") +# create group_vars folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/group_vars") +# create group_vars/eos folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/group_vars/eos") +# create group_vars/fanout folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/group_vars/fanout") +# create group_vars/lab folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/group_vars/lab") +# create group_vars/vm_host folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/group_vars/vm_host") +# create vars folder under the timestamped folder +os.makedirs(args.backupdir + "/" + timestamp + "/vars") + +""" +represent_none(self, _) +modifies yaml to replace null values with blanks +SOURCE: https://stackoverflow.com/questions/37200150/can-i-dump-blank-instead-of-null-in-yaml-pyyaml/37201633#3720163 +""" + + +def represent_none(self, _): + return self.represent_scalar('tag:yaml.org,2002:null', '') + + +yaml.add_representer(type(None), represent_none) + + +""" +generateDictionary(data, result, category) +@:parameter data - the dictionary to iterate through +@:parameter result - the resulting dictionary +Generates the dictionaries that are used when creating csv, yml, or text files +""" + + +def generateDictionary(data, result, category): + for key, value in data[category].items(): + result.update({key: value}) + + +""" +makeMain(data, outfile) +@:parameter data - the dictionary to look through +@:parameter outfile - the file to write to +makeMain generates the vm_host/main.yml file +it pulls two sets of information; dictionary data and proxy data +""" + + +def makeMain(data, outfile): + veos = data + dictData = { + "root_path": veos.get("root_path"), + "vm_images_url": veos.get("vm_images_url"), + "cd_image_filename": veos.get("cd_image_filename"), + "hdd_image_filename": veos.get("hdd_image_filename"), + "skip_image_downloading": veos.get("skip_image_downloading"), + "vm_console_base": veos.get("vm_console_base"), + "memory": veos.get("memory"), + "max_fp_num": veos.get("max_fp_num"), + "ptf_bp_ip": veos.get("ptf_bp_ip"), + "ptf_bp_ipv6": veos.get("ptf_bp_ipv6") + } + proxy = { + "proxy_env": { + "http_proxy": veos.get("proxy_env").get("http_proxy"), + "https_proxy": veos.get("proxy_env").get("https_proxy") + } + } + with open(outfile, "w") as toWrite: + toWrite.write("supported_vm_types: [ 'veos', 'ceos', 'vsonic' ]\n"), + yaml.dump(dictData, stream=toWrite, default_flow_style=False) + toWrite.write("# proxy\n") + yaml.dump(proxy, stream=toWrite, default_flow_style=False) + + +""" +makeVMHost_cred(data, outfile) +@:parameter data - the dictionary to look for (in this case: veos) +@:parameter outfile - the file to write to +generates /group_vars/vm_host/creds.yml +pulls ansible_user, ansible_password, ansible_become_pass from vm_host_ansible into a dictionary +""" + + +def makeVMHostCreds(data, outfile): + veos = data + result = { + "ansible_user": veos.get("vm_host_ansible").get("ansible_user"), + "ansible_password": veos.get("vm_host_ansible").get("ansible_password"), + "ansible_become_pass": veos.get("vm_host_ansible").get("ansible_become_pass"), + "vm_host_user": veos.get("vm_host_ansible").get("ansible_user"), + "vm_host_password": veos.get("vm_host_ansible").get("ansible_password"), + "vm_host_become_password": veos.get("vm_host_ansible").get("ansible_become_pass") + } + with open(outfile, "w") as toWrite: + toWrite.write("---\n") + yaml.dump(result, stream=toWrite, default_flow_style=False) + + +""" +makeSonicLabDevices(data, outfile) +@:parameter data - the dictionary to look through (devices dictionary) +@:parameter outfile - the file to write to +generates files/sonic_lab_devices.csv by pulling hostname, managementIP, hwsku, and type +error handling: checks if attribute values are None type or string "None" +""" + + +def makeSonicLabDevices(data, outfile): + csv_columns = "Hostname,ManagementIp,HwSku,Type,CardType" + topology = data + csv_file = outfile + + try: + with open(csv_file, "w") as f: + f.write(csv_columns + "\n") + for device, deviceDetails in topology.items(): + hostname = device + managementIP = str(deviceDetails.get( + "ansible").get("ansible_host")) + hwsku = deviceDetails.get("hwsku") + # DevSonic, server, FanoutRoot etc + devType = deviceDetails.get("device_type") + # supervisor, Linecard etc + cardType = deviceDetails.get("card_type") + # catch empty values + if not managementIP: + managementIP = "" + if not hwsku: + hwsku = "" + if not devType: + devType = "" + if not cardType: + cardType = "" + + row = hostname + "," + managementIP + "," + \ + hwsku + "," + devType + "," + cardType + f.write(row + "\n") + except IOError: + print("I/O error: makeSonicLabDevices") + + +""" +makeSonicLabConsoleLinks(data, outfile) +@:parameter data - the dictionary to look through (devices dictionary) +@:parameter outfile - the file to write to +generates files/sonic_lab_console_links.csv +""" + + +def makeSonicLabConsoleLinks(data, outfile): + def fill_missing_fields(data, template): + """Returns a copy of `data` with missing fields from `template` \ + filled with empty strings.""" + filled_data = copy.deepcopy(OrderedDict(template)) # Preserve the order + + for key in template: + filled_data[key] = str(data.get(key)) if data.get(key) is not None else '' + + return filled_data + + devices = data + csv_file = outfile + # folding this line inserts unwanted spaces + csv_columns = "StartDevice,StartPort,EndDevice,Console_type,Console_menu_type,Proxy,BaudRate" + console_info_template = OrderedDict({ + "start_device": "", + "start_port": "", + "end_device": "", + "console_type": "", + "console_menu_type": "", + "proxy": "", + "baud_rate": ""}) + try: + with open(csv_file, "w") as f: + f.write(csv_columns + "\n") + for device, deviceDetails in devices.items(): + console_info = deviceDetails.get("console_info") + if not console_info: + continue + + result = fill_missing_fields(console_info, console_info_template) + + row = ','.join(list(result.values())) + f.write(row + "\n") + except IOError: + print("I/O error: makeSonicLabConsoleLinks") + + +""" +makeTestbed(data, outfile) +@:parameter data - the dictionary to look through (devices dictionary) +@:parameter outfile - the file to write to +generates /testbed.yaml by pulling confName, groupName, topo, ptf_image_name, + ptf_ip, ptf_ipv6, server, vm_base, dut, and comment +error handling: checks if attribute values are None type or string "None" +""" + + +def makeTestbed(data, outfile): + csv_columns = "# conf-name,group-name,topo,ptf_image_name,ptf,ptf_ip,ptf_ipv6,server,vm_base,dut,inv_name,auto_recover,comment" + topology = data + csv_file = outfile + + try: + with open(csv_file, "w") as f: + f.write(csv_columns + "\n") + for group, groupDetails in topology.items(): + confName = group + groupName = groupDetails.get("group-name") + topo = groupDetails.get("topo") + ptf_image_name = groupDetails.get("ptf_image_name") + ptf_ip = groupDetails.get("ptf_ip") + ptf_ipv6 = groupDetails.get("ptf_ipv6") + server = groupDetails.get("server") + vm_base = groupDetails.get("vm_base") + dut = groupDetails.get("dut") + ptf = groupDetails.get("ptf") + comment = groupDetails.get("comment") + + # catch empty types + if not groupName: + groupName = "" + if not topo: + topo = "" + if not ptf_image_name: + ptf_image_name = "" + if not ptf_ip: + ptf_ip = "" + if not ptf_ipv6: + ptf_ipv6 = "" + if not server: + server = "" + if not vm_base: + vm_base = "" + if not dut: + dut = "" + if not ptf: + ptf = "" + if not comment: + comment = "" + # dut is a list for multi-dut testbed, convert it to string + if type(dut) is not str: + dut = dut.__str__() + dut = dut.replace(",", ";") + dut = dut.replace(" ", "") + dut = dut.replace("'", "") + + row = confName + "," + groupName + "," + topo + "," + ptf_image_name + "," + ptf + "," + ptf_ip + "," + ptf_ipv6 + ","+ server + "," + vm_base + "," + dut + ",lab,True," + comment + f.write(row + "\n") + except IOError: + print("I/O error: issue creating testbed.yaml") + +def makeTestbedYaml(data, outfile): + topology = data + csv_file = outfile + result = dict() + resultList = list() + + for group, groupDetails in topology.items(): + confName = group + groupName = groupDetails.get("group-name") + topo = groupDetails.get("topo") + ptf_image_name = groupDetails.get("ptf_image_name") + ptf_ip = groupDetails.get("ptf_ip") + ptf_ipv6 = groupDetails.get("ptf_ipv6") + server = groupDetails.get("server") + vm_base = groupDetails.get("vm_base") + dut = groupDetails.get("dut") + ptf = groupDetails.get("ptf") + comment = groupDetails.get("comment") + + # catch empty types + if not groupName: + groupName = "" + if not topo: + topo = "" + if not ptf_image_name: + ptf_image_name = "" + if not ptf_ip: + ptf_ip = "" + if not ptf_ipv6: + ptf_ipv6 = "" + if not server: + server = "" + if not vm_base: + vm_base = "" + if not dut: + dut = "" + if not ptf: + ptf = "" + if not comment: + comment = "" + if not isinstance(dut, list): + dut = [dut] + + result.update({'conf-name': confName, + 'group-name': groupName, + "topo": topo, + "ptf_image_name": ptf_image_name, + "ptf": ptf, + "ptf_ip": ptf_ip, + "ptf_ipv6": ptf_ipv6, + "server": server, + "vm_base": vm_base, + "dut": dut, + "inv_name": 'lab', + "auto_recover": 'True', + "comment": comment}) + resultList.append(result) + with open(outfile, "w") as toWrite: + yaml.dump(resultList, stream=toWrite, default_flow_style=False, sort_keys=False) + + +""" +makeSonicLabLinks(data, outfile) +@:parameter data - the dictionary to look through (devices dictionary) +@:parameter outfile - the file to write to +generates /files/sonic_lab_links.csv by pulling startPort, endPort, bandWidth, vlanID, vlanMode +error handling: checks if attribute values are None type or string "None" +""" + + +def makeSonicLabLinks(data, outfile): + csv_columns = "StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode,AutoNeg,SlotId" + topology = data + csv_file = outfile + + try: + with open(csv_file, "w") as f: + f.write(csv_columns + "\n") + for key, item in topology.items(): + startDevice = key + interfacesDetails = item.get("interfaces") + if not interfacesDetails: + continue + + for startPort, element in interfacesDetails.items(): + startPort = startPort + endDevice = element.get("EndDevice") + endPort = element.get("EndPort") + bandWidth = element.get("Bandwidth") + vlanID = element.get("VlanID") + vlanMode = element.get("VlanMode") + AutoNeg = element.get("AutoNeg") + slotId = element.get("SlotId") + + # catch empty values + if not endDevice: + endDevice = "" + if not endPort: + endPort = "" + if not bandWidth: + bandWidth = "" + if not vlanID: + vlanID = "" + if not vlanMode: + vlanMode = "" + if not slotId: + slotId = "" + if not AutoNeg: + AutoNeg = "" + + row = startDevice + "," + startPort + "," + endDevice + "," + \ + endPort + "," + str(bandWidth) + \ + "," + str(vlanID) + "," + vlanMode + \ + "," + str(AutoNeg) + \ + "," + str(slotId) + f.write(row + "\n") + except IOError: + print("I/O error: issue creating sonic_lab_links.csv") + + +""" +makeEOS_creds(data, outfile) +@:parameter data - the dictionary to look through +@:parameter outfile - the file to write to +Generate /group_vars/eos/creds.yml +Works by looking through veos dictionary and pulling ansible_user and ansible_password under eos_ansible +""" + + +def makeEOSCreds(data, outfile): + veos = data + result = { + "ansible_user": veos.get("eos_ansible").get("ansible_user"), + "ansible_password": veos.get("eos_ansible").get("ansible_password") + } + with open(outfile, "w") as toWrite: + toWrite.write("---\n") + yaml.dump(result, stream=toWrite, default_flow_style=False) + + +""" +makeFanout_secrets(data, outfile) +@:parameter data - reads from devices dictionary +@:parameter outfile - the file to write to +Makes /group_vars/fanout/secrets.yml +Finds the fanout secret credentials by using "fanout" as the value to search for under device_type +Under github and personal topology configuration, there is only one designated fanout switch credential +""" + + +def makeFanoutSecrets(data, outfile): + devices = data + result = dict() + + for key, value in devices.items(): + if "fanout" in value.get("device_type").lower(): + result.update({"ansible_ssh_user": value.get("ansible").get("ansible_ssh_user")}) + result.update({"ansible_ssh_pass": value.get("ansible").get("ansible_ssh_pass")}) + result.update({"fanout_network_user": value.get("ansible").get("fanout_network_user")}) + result.update({"fanout_network_password": value.get("ansible").get("fanout_network_password")}) + result.update({"fanout_shell_user": value.get("ansible").get("ansible_ssh_user")}) + result.update({"fanout_shell_password": value.get("ansible").get("ansible_ssh_pass")}) + + with open(outfile, "w") as toWrite: + yaml.dump(result, stream=toWrite, default_flow_style=False) + + +""" +makeLab_secrets(data, outfile) +@:parameter data - reads from devices dictionary +@:parameter outfile - the file to write to +Makes /group_vars/lab/secrets.yml +Finds the lab device to generate the secret.yml file using "server" as the value to search for under device_type +Under github and personal topology configuration, there is only one designated lab server +""" + + +def makeLabSecrets(data, outfile): + devices = data + result = dict() + + for key, value in devices.items(): + if "server" in value.get("device_type").lower(): + result.update({"ansible_ssh_pass": value.get( + "ansible").get("ansible_ssh_pass")}) + result.update({"ansible_become_pass": value.get( + "ansible").get("ansible_become_pass")}) + result.update({"sonicadmin_user": value.get( + "ansible").get("sonicadmin_user")}) + result.update({"sonicadmin_password": value.get( + "ansible").get("sonicadmin_password")}) + result.update({"sonicadmin_initial_password": value.get( + "ansible").get("sonicadmin_initial_password")}) + + if "serialconsole" in str(value.get("device_type")).lower(): + result["console_login"] = value.get("console_login") + + with open(outfile, "w") as toWrite: + yaml.dump(result, stream=toWrite, default_flow_style=False) + + +""" +makeLab(data, veos, devices, outfile) +@:parameter data - reads from devices-groups, this helps separate the function into 3 components; children, host, vars +@:parameter devices - reads from devices +@:parameter testbed - reads from testbed (to accomodate for PTF container(s)) +@:parameter outfile - writes to lab +""" + + +def makeLab(data, devices, testbed, outfile): + deviceGroup = data + start_switchid = 0 + with open(outfile, "w") as toWrite: + for key, value in deviceGroup.items(): + # children section + if "children" in value: + toWrite.write("[" + key + ":children]\n") + for child in value.get("children"): + toWrite.write(child + "\n") + toWrite.write("\n") + + # host section + if "host" in value: + toWrite.write("[" + key + "]\n") + for host in value.get("host"): + entry = host + + if host.lower() in devices: + dev = devices.get(host.lower()) + elif host.lower() in testbed: + dev = testbed.get(host.lower()) + else: + dev = None + + try: + ansible_hostv6 = dev.get( + "ansible").get("ansible_hostv6") + entry += "\tansible_hostv6=" + \ + ansible_hostv6.split("/")[0] + except Exception: + print("\t\t" + host + ": ansible_hostv6 not found") + + if "ptf" in key: + try: # get ansible host + ansible_host = dev.get( + "ansible").get("ansible_host") + entry += "\tansible_host=" + \ + ansible_host.split("/")[0] + except Exception: + print("\t\t" + host + ": ansible_host not found") + + if ansible_host: + try: # get ansible ssh username + ansible_ssh_user = dev.get( + "ansible").get("ansible_ssh_user") + entry += "\tansible_ssh_user=" + ansible_ssh_user + except Exception: + print("\t\t" + host + + ": ansible_ssh_user not found") + + try: # get ansible ssh pass + ansible_ssh_pass = dev.get( + "ansible").get("ansible_ssh_pass") + entry += "\tansible_ssh_pass=" + ansible_ssh_pass + except Exception: + print("\t\t" + host + + ": ansible_ssh_pass not found") + else: # not ptf container + try: # get ansible host + ansible_host = dev.get( + "ansible").get("ansible_host") + entry += "\tansible_host=" + \ + ansible_host.split("/")[0] + except Exception: + print("\t\t" + host + ": ansible_host not found") + + if ansible_host: + try: # get ansible ssh username + ansible_ssh_user = dev.get( + "ansible").get("ansible_ssh_user") + entry += "\tansible_ssh_user=" + ansible_ssh_user + except Exception: + print("\t\t" + host + + ": ansible_ssh_user not found") + + try: # get ansible ssh pass + ansible_ssh_pass = dev.get( + "ansible").get("ansible_ssh_pass") + entry += "\tansible_ssh_pass=" + ansible_ssh_pass + except Exception: + print("\t\t" + host + + ": ansible_ssh_pass not found") + try: # get hwsku + hwsku = dev.get("hwsku") + if hwsku is not None: + entry += "\thwsku=" + hwsku + except AttributeError: + print("\t\t" + host + ": hwsku not found") + + try: # get card_type + card_type = dev.get("card_type") + if card_type is not None: + entry += "\tcard_type=" + card_type + except AttributeError: + print("\t\t" + host + ": card_type not found") + + try: # get num_fabric_asics + num_fabric_asics = dev.get("num_fabric_asics") + if num_fabric_asics is not None: + entry += "\tnum_fabric_asics=" + \ + str(num_fabric_asics) + except AttributeError: + print("\t\t" + host + " num_fabric_asics not found") + + try: # get num_asics + num_asics = dev.get("num_asics") + if num_asics is not None: + num_asics = int(num_asics) + entry += "\tnum_asics=" + str(num_asics) + except AttributeError: + print("\t\t" + host + " num_asics not found") + + if card_type != 'supervisor': + entry += "\tstart_switchid=" + str(start_switchid) + if num_asics is not None: + start_switchid += int(num_asics) + else: + start_switchid += 1 + + try: # get frontend_asics + frontend_asics = dev.get("frontend_asics") + if frontend_asics is not None: + entry += "\tfrontend_asics=\"" + frontend_asics.__str__() + "\"" + except AttributeError: + print("\t\t" + host + ": frontend_asics not found") + + try: # get asics_host_ip + asics_host_ip = dev.get("asics_host_ip") + if asics_host_ip is not None: + entry += " \tasics_host_ip=" + \ + str(asics_host_ip) + except AttributeError: + print("\t\t" + host + " asics_host_ip not found") + + try: # get asics_host_ipv6 + asics_host_ipv6 = dev.get("asics_host_ipv6") + if asics_host_ipv6 is not None: + entry += "\tasics_host_ipv6=" + \ + str(asics_host_ipv6) + except AttributeError: + print("\t\t" + host + " asics_host_ipv6 not found") + + try: # get switch_type + switch_type = dev.get("switch_type") + if switch_type is not None: + entry += "\tswitch_type=" + str(switch_type) + if switch_type == 'fabric' and card_type == 'supervisor': + # Add switchids for fabric asics + # switchids, single asic example "[4]", 3 asic example "[4,6,8]" + switchids = dev.get("switchids") + if switchids: + entry += "\tswitchids=\"" + str(switchids) + "\"" + + if switch_type == 'voq' and card_type != 'supervisor': + if num_asics is None: + num_asics = 1 + + # All fields are a list. For single asic the list is of size 1. + # switchids, single asic example "[4]", 3 asic example "[4,6,8]" + switchids = dev.get("switchids") + # voq_inband_ip + voq_inband_ip = dev.get("voq_inband_ip") + voq_inband_ipv6 = dev.get( + "voq_inband_ipv6") # voq_inband_ipv6 + voq_inband_intf = dev.get( + "voq_inband_intf") # voq_inband_intf + voq_inband_type = dev.get( + "voq_inband_type") # voq_inband_type + # max cores + max_cores = dev.get("max_cores") + # loopback4096_ip + lo4096_ip = dev.get("loopback4096_ip") + # loopback4096_ipv6 + lo4096_ipv6 = dev.get("loopback4096_ipv6") + # number of cores per asic - to be used in calculating the switchids, + # assuming to be the same for all linecards + num_cores_per_asic = dev.get( + "num_cores_per_asic", 1) + + # Add fields + if switchids is None: + switchids = [ + start_switchid + + (asic_id * num_cores_per_asic) for asic_id in range(num_asics)] + entry += "\tswitchids=\"" + str(switchids) + "\"" + + if voq_inband_ip is None: + voq_inband_ip = [ + "1.1.1.{}/32" + .format(start_switchid + asic_id) for asic_id in range(num_asics)] + entry += "\tvoq_inband_ip=\"" + \ + str(voq_inband_ip) + "\"" + + if voq_inband_ipv6 is None: + voq_inband_ipv6 = [ + "1111::1:{}/128" + .format(start_switchid + asic_id) for asic_id in range(num_asics)] + entry += "\tvoq_inband_ipv6=\"" + \ + str(voq_inband_ipv6) + "\"" + + if voq_inband_intf is None: + voq_inband_intf = [ + "Ethernet-IB{}" + .format(asic_id) for asic_id in range(num_asics)] + entry += "\tvoq_inband_intf=\"" + \ + str(voq_inband_intf) + "\"" + + if voq_inband_type is None: + voq_inband_type = "port" + entry += "\tvoq_inband_type=" + voq_inband_type + + if max_cores is None: + max_cores = 48 + entry += "\tmax_cores=" + str(max_cores) + + if lo4096_ip is None: + lo4096_ip = [ + "8.0.0.{}/32" + .format(start_switchid + asic_id) for asic_id in range(num_asics)] + entry += "\tloopback4096_ip=\"" + str(lo4096_ip) + "\"" + + if lo4096_ipv6 is None: + lo4096_ipv6 = [ + "2603:10e2:400::{}/128" + .format(start_switchid + asic_id) for asic_id in range(num_asics)] + entry += "\tloopback4096_ipv6=\"" + str(lo4096_ipv6) + "\"" + + start_switchid += (num_asics * + num_cores_per_asic) + + except AttributeError: + print("\t\t" + host + " switch_type not found") + + try: # get slot_num + slot_num = dev.get("slot_num") + if slot_num is not None: + entry += "\tslot_num=" + str(slot_num) + except AttributeError: + print("\t\t" + host + " slot_num not found") + + try: # get os + os = dev.get("os") + if os is not None: + entry += "\tos=" + str(os) + except AttributeError: + print("\t\t" + host + " os not found") + + try: # get model + model = dev.get("model") + if model is not None: + entry += "\tmodel=" + str(model) + except AttributeError: + print("\t\t" + host + " model not found") + + try: # get base_mac + base_mac = dev.get("base_mac") + if base_mac is not None: + entry += "\tbase_mac=" + str(base_mac) + except AttributeError: + print("\t\t" + host + " base_mac not found") + + try: # get serial + serial = dev.get("serial") + if serial is not None: + entry += "\tserial=" + str(serial) + except AttributeError: + print("\t\t" + host + " serial not found") + + try: # get asic_type + asic_type = dev.get("asic_type") + if asic_type is not None: + entry += "\tasic_type=" + str(asic_type) + except AttributeError: + print("\t\t" + host + " asic_type not found") + + toWrite.write(entry + "\n") + toWrite.write("\n") + + # vars section + if "vars" in value: + toWrite.write("[" + key + ":vars]\n") + for key2, val2 in value.get("vars").items(): + if isinstance(val2, list) or isinstance(val2, dict): + toWrite.write(key2 + "=[" + ', '.join(val2) + "]\n") + else: + toWrite.write(key2 + "=" + val2 + "\n") + toWrite.write("\n") + + +def makeLabYAML(data, devices, testbed, outfile): + """ + Generates /lab file in YAML format based on parsed dictionaries from testbed file. + + Args: + data: reads from devices-groups, this helps separate the function into 3 components; sonic, fanout, ptf + devices: reads from devices + testbed: reads from testbed (to accomodate for PTF container(s)) + outfile: writes to lab in YAML file format + + """ + deviceGroup = data + result = dict() + sonicDict = dict() + fanoutDict = dict() + ptfDict = dict() + dutDict = dict() + serverDict = dict() + + if "sonic" in deviceGroup['lab']['children']: + for group in deviceGroup['sonic']['children']: + sonicDict[group] = {'vars': {'iface_speed': deviceGroup[group].get( + "vars").get("iface_speed")}, 'hosts': {}} + for dut in deviceGroup[group]['host']: + if dut in devices: + dutDict.update({dut: + {'ansible_host': devices[dut].get("ansible").get("ansible_host"), + 'ansible_hostv6': devices[dut].get("ansible").get("ansible_hostv6"), + 'ansible_ssh_user': devices[dut].get("ansible").get("ansible_ssh_user"), + 'ansible_ssh_pass': devices[dut].get("ansible").get("ansible_ssh_pass"), + 'hwsku': devices[dut].get("hwsku"), + 'snmp_rocommunity': devices[dut].get("snmp_rocommunity"), + 'sonic_version': devices[dut].get("sonic_version"), + 'sonic_hwsku': devices[dut].get("sonic_hwsku"), + 'base_mac': devices[dut].get("base_mac"), + 'device_type': devices[dut].get("device_type"), + 'ptf_host': devices[dut].get("ptf_host"), + 'serial': devices[dut].get("serial"), + 'os': devices[dut].get("os"), + 'model': devices[dut].get("model"), + 'asic_type': devices[dut].get("asic_type") + } + }) + if devices[dut].get("syseeprom_info"): + dutDict[dut].update({'syseeprom_info': {field: devices[dut]["syseeprom_info"][field] + for field in devices[dut]["syseeprom_info"]}}) + sonicDict[group]['hosts'].update(dutDict) + if "fanout" in deviceGroup['lab']['children']: + for fanoutType in deviceGroup['fanout']['children']: + for fanout in deviceGroup[fanoutType]['host']: + if fanout in devices: + fanoutDict.update({fanout: + {'ansible_host': devices[fanout].get("ansible").get("ansible_host"), + 'ansible_ssh_user': devices[fanout].get("ansible").get("ansible_ssh_user"), + 'ansible_ssh_pass': devices[fanout].get("ansible").get("ansible_ssh_pass"), + 'os': devices[fanout].get("os"), + 'device_type': devices[fanout].get("device_type") + } + }) + for server in deviceGroup['servers']['host']: + if server in devices: + serverDict.update({server: + {'ansible_host': devices[server].get("ansible").get("ansible_host"), + 'ansible_ssh_user': devices[server].get("ansible").get("ansible_ssh_user"), + 'ansible_ssh_pass': devices[server].get("ansible").get("ansible_ssh_pass"), + 'device_type': devices[server].get("device_type") + }}) + if 'ptf' in deviceGroup: + for ptfhost in deviceGroup['ptf']['host']: + if ptfhost in testbed: + ptfDict.update({ptfhost: + {'ansible_host': testbed[ptfhost].get("ansible").get("ansible_host"), + 'ansible_hostv6': testbed[ptfhost].get("ansible").get("ansible_hostv6"), + 'ansible_ssh_user': testbed[ptfhost].get("ansible").get("ansible_ssh_user"), + 'ansible_ssh_pass': testbed[ptfhost].get("ansible").get("ansible_ssh_pass") + } + }) + result.update({'all': + {'children': + {'lab': + {'vars': deviceGroup['lab']['vars'], + 'children': + {'sonic': {'children': sonicDict}, + 'fanout': {'hosts': fanoutDict} + } + }, + 'ptf': {'hosts': ptfDict}, + 'server': {'hosts': serverDict} + } + } + }) + + with open(outfile, "w") as toWrite: + yaml.dump(result, stream=toWrite, default_flow_style=False) + + +""" +makeVeos(data, veos, devices, outfile) +@:parameter data - reads from either veos-groups, this helps separate the function into 3 components; + children, host, vars +@:parameter veos - reads from either veos +@:parameter devices - reads from devices +@:parameter outfile - writes to veos +""" + + +def makeVeos(data, veos, devices, outfile): + group = data + with open(outfile, "w") as toWrite: + for key, value in group.items(): + # children section + if "children" in value: + toWrite.write("[" + key + ":children]\n") + for child in value.get("children"): + toWrite.write(child + "\n") + toWrite.write("\n") + + # host section + if "host" in value: + toWrite.write("[" + key + "]\n") + for host in value.get("host"): + entry = host + + try: + dev = devices.get(host.lower()) + ansible_host = dev.get("ansible").get("ansible_host") + entry += "\tansible_host=" + ansible_host.split("/")[0] + if dev.get("device_type") == "DevSonic": + entry += "\ttype=" + dev.get("type") + entry += "\thwsku=" + dev.get("hwsku") + entry += "\tcard_type=" + dev.get("card_type") + entry += "\tmodel=" + dev.get("model") + entry += "\tserial=" + dev.get("serial") + entry += "\tbase_mac=" + dev.get("base_mac") + except Exception: + try: + ansible_host = veos.get(key).get( + host).get("ansible_host") + entry += "\tansible_host=" + \ + ansible_host.split("/")[0] + except Exception: + print("\t\t" + host + ": ansible_host not found") + toWrite.write(entry + "\n") + + toWrite.write("\n") + + # var section + if "vars" in value: + toWrite.write("[" + key + ":vars]\n") + for key2, val2 in value.get("vars").items(): + if isinstance(val2, list) or isinstance(val2, dict): + toWrite.write(key2 + "=[" + ', '.join(val2) + "]\n") + else: + toWrite.write(key2 + "=" + val2 + "\n") + toWrite.write("\n") + + +def makeVeosYAML(data, veos, devices, outfile): + """ + Generates /veos file in YAML format based on parsed dictionaries from testbed file. + + Args: + data: reads from either veos-groups, this helps separate the function into 3 components; vm_host, eos, servers + veos: reads from either veos + devices: reads from devices + outfile: writes to veos in YAML file format + + """ + group = data + result = dict() + vmDict = dict() + eosDict = dict() + serversDict = dict() + + if 'vm_host' in group: + for vm_host in group['vm_host']['children']: + vmDict.update({vm_host: None}) + server = group[vm_host]['host'][0] + result.update({vm_host: + {'hosts': + {server: {'ansible_host': devices[server.lower()].get( + "ansible").get("ansible_host")}} + } + }) + if 'eos' in group: + for eos in group['eos']['children']: + eosDict.update({eos: None}) + result.update({eos: {'hosts': veos[eos]}}) + if 'servers' in group: + serversDict.update( + {'vars': group['servers'].get("vars"), 'children': {}}) + for server in group['servers']['children']: + serversDict['children'].update({server: None}) + result.update({server: {'children': {group[server]['children'][0]: None, + group[server]['children'][1]: None}, + 'vars': group[server]['vars'] + } + }) + result.update({'all': + {'children': + {'vm_host': {'children': vmDict}, + 'eos': {'children': eosDict}, + 'servers': serversDict + } + } + }) + + with open(outfile, "w") as toWrite: + yaml.dump(result, stream=toWrite, default_flow_style=False) + + +""" +makeHost_var(data) +@:parameter data - reads from host_vars dictionary +Creates host variable files for each device +""" + + +def makeHostVar(data): + host_vars = data + for key, value in host_vars.items(): # iterate through all devices in host_vars dictionary + # create (or overwrite) a file named .yml + with open(args.basedir + "host_vars/" + key + ".yml", "w") as toWrite: + for attribute, attribute_data in value.items(): # for each element in device's dictionary + # write the attribute and the attribute value to .yml + toWrite.write(str(attribute) + ": " + + str(attribute_data) + "\n") + + +""" +updateDockerRegistry +@:parameter outfile - the file to write to +hard codes the docker registry to search locally rather than externally +""" + + +def updateDockerRegistry(docker_registry, outfile): + if not docker_registry.get("docker_registry_host"): + print("\t\tREGISTRY FIELD BLANK - SKIPPING THIS STEP") + else: + with open(outfile, "w") as toWrite: + toWrite.write("docker_registry_host: " + + docker_registry.get("docker_registry_host")) + toWrite.write("\n\n") + + +def main(): + print("PROCESS STARTED") + ############################################################## + print("BACKUP PROCESS STARTED") # Backup data + for file in backupList: + try: + copyfile(args.basedir + file, args.backupdir + + "/" + timestamp + "/" + file) + except IOError: # filenotfound + print("Error: could not back up " + args.basedir + file) + + host_var_files = os.listdir(args.basedir + "host_vars") + for file_name in host_var_files: + copyfile(args.basedir + "host_vars/" + file_name, + args.backupdir + "/" + timestamp + "/host_vars/" + file_name) + + print("BACKUP PROCESS COMPLETED") + + ############################################################## + # Load Data + print("LOADING PROCESS STARTED") + print("LOADING: " + args.i) + doc = yaml.load(open(args.i, 'r'), Loader=yaml.FullLoader) + # dictionary contains information about devices + devices = dict() + generateDictionary(doc, devices, "devices") # load devices + # dictionary contains information about veos + veos = dict() + generateDictionary(doc, veos, "veos") # load veos + # dictionary contains information about testbed (ptf) + testbed = dict() + generateDictionary(doc, testbed, "testbed") # load testbed + # dictionary contains information about toplogy + topology = dict() + generateDictionary(doc, topology, "topology") # load topology + # dictionary contains information about host_vars + host_vars = dict() + generateDictionary(doc, host_vars, "host_vars") # load host_vars + # dictionary contains information about veos_groups + veos_groups = dict() + generateDictionary(doc, veos_groups, "veos_groups") # load veos_groups + # dictionary contains information about device_groups + device_groups = dict() + # load device_groups + generateDictionary(doc, device_groups, "device_groups") + # dictionary contains information about docker_registry + docker_registry = dict() + # load docker_registry + generateDictionary(doc, docker_registry, "docker_registry") + print("LOADING PROCESS COMPLETED") + + ############################################################## + # Generate files + print("GENERATING FILES FROM CONFIG FILE") + print("\tCREATING SONIC LAB LINKS: " + args.basedir + labLinks_file) + # Generate sonic_lab_links.csv (TOPOLOGY) + makeSonicLabLinks(topology, args.basedir + labLinks_file) + print("\tCREATING SONIC LAB DEVICES: " + args.basedir + devices_file) + # Generate sonic_lab_devices.csv (DEVICES) + makeSonicLabDevices(devices, args.basedir + devices_file) + print("\tCREATING SONIC LAB CONSOLE LINKS: " + args.basedir + console_links_file) + # Generate sonic_lab_console_links.csv (DEVICES) + makeSonicLabConsoleLinks(devices, args.basedir + console_links_file) + print("\tCREATING TEST BED: " + args.basedir + testbed_file) + # Generate testbed.yaml (TESTBED) + makeTestbed(testbed, args.basedir + testbed_csv_file) + makeTestbedYaml(testbed, args.basedir + testbed_file) + print("\tCREATING VM_HOST/CREDS: " + args.basedir + vmHostCreds_file) + # Generate vm_host\creds.yml (CREDS) + makeVMHostCreds(veos, args.basedir + vmHostCreds_file) + print("\tCREATING EOS/CREDS: " + args.basedir + eosCred_file) + # Generate eos\creds.yml (CREDS) + makeEOSCreds(veos, args.basedir + eosCred_file) + print("\tCREATING FANOUT/SECRETS: " + args.basedir + fanoutSecrets_file) + # Generate fanout\secrets.yml (SECRETS) + makeFanoutSecrets(devices, args.basedir + fanoutSecrets_file) + print("\tCREATING LAB SECRETS: " + args.basedir + labSecrets_file) + # Generate lab\secrets.yml (SECRETS) + makeLabSecrets(devices, args.basedir + labSecrets_file) + print("\tCREATING MAIN.YML: " + args.basedir + main_file) + makeMain(veos, args.basedir + main_file) # Generate main.yml (MAIN) + print("\tCREATING LAB FILE: " + args.basedir + lab_file) + if args.yaml: + # Generate lab in YAML file format (LAB) + makeLab(device_groups, devices, testbed, args.basedir + lab_file) + else: + makeLab(device_groups, devices, testbed, args.basedir + + lab_file) # Generate lab in INI file format (LAB) + print("\tCREATING VEOS FILE: " + args.basedir + veos_file) + if args.yaml: + # Generate veos in YAML file format(VEOS) + makeVeosYAML(veos_groups, veos, devices, args.basedir + veos_file) + else: + # Generate veos in INI file format(VEOS) + makeVeos(veos_groups, veos, devices, args.basedir + veos_file) + print("\tCREATING HOST VARS FILE(S): one or more files generated") + makeHostVar(host_vars) # Generate host_vars (HOST_VARS) + print("UPDATING FILES FROM CONFIG FILE") + print("\tUPDATING DOCKER REGISTRY") + updateDockerRegistry(docker_registry, args.basedir + dockerRegistry_file) + print("PROCESS COMPLETED") + + +if __name__ == '__main__': + main() diff --git a/infra/add_new_platform.py b/infra/add_new_platform.py new file mode 100644 index 00000000000..d240a40b950 --- /dev/null +++ b/infra/add_new_platform.py @@ -0,0 +1,1529 @@ +#!/usr/bin/env python3 + +""" +Script to add a new platform to the sonic test infrastructure. + +Usage: python3 add_new_platform.py +Example: python3 add_new_platform.py titan Cisco-8223-64E-MO t0,t1 +""" + +import argparse +import os +import sys +import re +import shutil +from pathlib import Path + +def update_create_sonic_topo(new_platform, topology_list): + """Update create_sonic_topo.py to add support for the new platform.""" + script_path = "create_sonic_topo.py" + + if not os.path.exists(script_path): + print("Error: {} not found!".format(script_path)) + return False + + # Read the file + with open(script_path, 'r') as f: + content = f.read() + + # 1. Update argument parser help text and choices + # Find the device_type help text and add new platform + help_pattern = r"(help='options are [^']+)'" + help_match = re.search(help_pattern, content) + if help_match: + current_help = help_match.group(1) + new_help = "{}, {}".format(current_help, new_platform) + content = content.replace(help_match.group(0), "{}'".format(new_help)) + + # Find device_type choices list and add new platform (look for the specific device_type argument) + device_type_pattern = r"(parser\.add_argument\('-d', '--device_type'[^]]+choices=\[[^\]]+)(\])" + device_type_match = re.search(device_type_pattern, content, re.DOTALL) + if device_type_match: + current_choices = device_type_match.group(1) + new_choices = "{}, '{}']".format(current_choices, new_platform) + content = content.replace(device_type_match.group(0), new_choices) + + # 2. Add device type return function + return_pattern = r"( elif device_type == '[^']+':[\s\S]*?return '[^']+')" + return_matches = list(re.finditer(return_pattern, content)) + if return_matches: + last_match = return_matches[-1] + new_return = "\n elif device_type == '{}':\n return '{}'".format(new_platform, new_platform) + insertion_point = last_match.end() + content = content[:insertion_point] + new_return + content[insertion_point:] + + # 3. Add base topology file selection for t0 (only if t0 is requested) + if 't0' in topology_list: + # Look for the specific t0 section, not t0-64 or other variants + t0_section_pattern = r"elif topo_type == 't0':([\s\S]*?)(?=elif topo_type == 't1':|$)" + t0_section_match = re.search(t0_section_pattern, content) + if t0_section_match: + t0_section = t0_section_match.group(1) + t0_section_start = t0_section_match.start(1) + + # Find the last elif device_type in the t0 section only + t0_pattern = r"( elif device_type == '[^']+':[\s\S]*?base_topo_file = 'testbed-[^']+-t0\.yaml')" + t0_matches = list(re.finditer(t0_pattern, t0_section)) + if t0_matches: + last_match = t0_matches[-1] + new_t0 = "\n elif device_type == '{}':\n base_topo_file = 'testbed-{}-t0.yaml'".format(new_platform, new_platform) + # Calculate the absolute position in the full content + insertion_point = t0_section_start + last_match.end() + content = content[:insertion_point] + new_t0 + content[insertion_point:] + + # 4. Add base topology file selection for t1 (only if t1 is requested) + if 't1' in topology_list: + # Look for the main t1 section, not t1-lag or other variants + t1_section_pattern = r"elif topo_type == 't1':([\s\S]*?)(?=elif topo_type == 'dualtor':|$)" + t1_section_match = re.search(t1_section_pattern, content) + if t1_section_match: + t1_section = t1_section_match.group(1) + t1_section_start = t1_section_match.start(1) + + # Find the last elif device_type in the t1 section only + t1_pattern = r"( elif device_type == '[^']+':[\s\S]*?base_topo_file = 'testbed-[^']+-t1\.yaml')" + t1_matches = list(re.finditer(t1_pattern, t1_section)) + if t1_matches: + last_match = t1_matches[-1] + new_t1 = "\n elif device_type == '{}':\n base_topo_file = 'testbed-{}-t1.yaml'".format(new_platform, new_platform) + # Calculate the absolute position in the full content + insertion_point = t1_section_start + last_match.end() + content = content[:insertion_point] + new_t1 + content[insertion_point:] + + # 5. Add logging information section + log_pattern = r"( elif device_type == '[^']+':[\s\S]*?logging\.info\(\"[^\"]*bgp_fact\.log[^\"]*\"\))" + log_matches = list(re.finditer(log_pattern, content)) + if log_matches: + last_match = log_matches[-1] + new_log = "\n elif device_type == '{}':\n logging.info(\"Device name is {}. To execute a pytest script:\\\\n\")\n logging.info(\"./run_tests.sh -n docker-ptf -d {}-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\\\\n\")".format(new_platform, new_platform, new_platform) + insertion_point = last_match.end() + content = content[:insertion_point] + new_log + content[insertion_point:] + + # Write the updated content back to the file + with open(script_path, 'w') as f: + f.write(content) + + print("✓ Updated {} with {} platform support".format(script_path, new_platform)) + return True + +def create_testbed_file(new_platform, topology_type, hwsku): + """Create a new testbed YAML file with a generic template.""" + new_file = "testbed-{}-{}.yaml".format(new_platform, topology_type) + + # Create a generic template based on the topology type + if topology_type == "t0": + template_content = """device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - {}-01 + vars: + hwsku: {} + iface_speed: '400000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.64/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: cisco123 + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: cisco123 + ansible_ssh_user: vxr + sonicadmin_initial_password: cisco123 + sonicadmin_password: cisco123 + sonicadmin_user: cisco + credentials: + password: cisco123 + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + {}-01: + alias: null + ansible: + ansible_host: 192.168.122.220 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: {} + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.64/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf {} + credentials: + password: root + username: root + dut: {}-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-{} + ptf_ip: 192.168.122.64/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t0 + vm_base: VM0100 +testbed_config: + alias: {}topologyTestbed + name: testbed-{}-t0 + type: Physical +topology: + {}-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet128: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/32 + VlanID: 2032 + VlanMode: Access + Ethernet132: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/33 + VlanID: 2033 + VlanMode: Access + Ethernet136: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/34 + VlanID: 2034 + VlanMode: Access + Ethernet140: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/35 + VlanID: 2035 + VlanMode: Access + Ethernet144: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/36 + VlanID: 2036 + VlanMode: Access + Ethernet148: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/37 + VlanID: 2037 + VlanMode: Access + Ethernet152: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/38 + VlanID: 2038 + VlanMode: Access + Ethernet156: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/39 + VlanID: 2039 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/40 + VlanID: 2040 + VlanMode: Access + Ethernet164: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/41 + VlanID: 2041 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/42 + VlanID: 2042 + VlanMode: Access + Ethernet172: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/43 + VlanID: 2043 + VlanMode: Access + Ethernet176: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/44 + VlanID: 2044 + VlanMode: Access + Ethernet180: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/45 + VlanID: 2045 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/46 + VlanID: 2046 + VlanMode: Access + Ethernet188: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/47 + VlanID: 2047 + VlanMode: Access + Ethernet192: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/48 + VlanID: 2048 + VlanMode: Access + Ethernet196: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/49 + VlanID: 2049 + VlanMode: Access + Ethernet20: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/50 + VlanID: 2050 + VlanMode: Access + Ethernet204: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/51 + VlanID: 2051 + VlanMode: Access + Ethernet208: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/52 + VlanID: 2052 + VlanMode: Access + Ethernet212: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/53 + VlanID: 2053 + VlanMode: Access + Ethernet216: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/54 + VlanID: 2054 + VlanMode: Access + Ethernet220: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/55 + VlanID: 2055 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/56 + VlanID: 2056 + VlanMode: Access + Ethernet228: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/57 + VlanID: 2057 + VlanMode: Access + Ethernet232: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/58 + VlanID: 2058 + VlanMode: Access + Ethernet236: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/59 + VlanID: 2059 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet240: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/60 + VlanID: 2060 + VlanMode: Access + Ethernet244: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/61 + VlanID: 2061 + VlanMode: Access + Ethernet248: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/62 + VlanID: 2062 + VlanMode: Access + Ethernet252: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/63 + VlanID: 2063 + VlanMode: Access + Ethernet28: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.88.23.66 + vm_host_ansible: + ansible_password: cisco123 + ansible_sudo_pass: cisco123 + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.38 + VM0101: + ansible_host: 192.168.122.134 + VM0102: + ansible_host: 192.168.122.135 + VM0103: + ansible_host: 192.168.122.167 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 +""".format(new_platform, hwsku, new_platform, hwsku, new_platform, new_platform, new_platform, new_platform, new_platform, new_platform) + else: # t1 + template_content = """device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - {}-01 + vars: + hwsku: {} + iface_speed: '400000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.183/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: cisco123 + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: cisco123 + ansible_ssh_user: vxr + sonicadmin_initial_password: cisco123 + sonicadmin_password: cisco123 + sonicadmin_user: cisco + credentials: + password: cisco123 + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + {}-01: + alias: null + ansible: + ansible_host: 192.168.122.33 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: {} + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.183/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf {} + credentials: + password: root + username: root + dut: {}-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-{} + ptf_ip: 192.168.122.183/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t1 + vm_base: VM0100 +testbed_config: + alias: {}Testbed + name: testbed-{}-t1 + type: Physical +topology: + {}-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.172.177 + vm_host_ansible: + ansible_password: cisco123 + ansible_sudo_pass: cisco123 + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.244 + VM0101: + ansible_host: 192.168.122.178 + VM0102: + ansible_host: 192.168.122.158 + VM0103: + ansible_host: 192.168.122.117 + VM0104: + ansible_host: 192.168.122.144 + VM0105: + ansible_host: 192.168.122.47 + VM0106: + ansible_host: 192.168.122.110 + VM0107: + ansible_host: 192.168.122.25 + VM0108: + ansible_host: 192.168.122.44 + VM0109: + ansible_host: 192.168.122.236 + VM0110: + ansible_host: 192.168.122.247 + VM0111: + ansible_host: 192.168.122.148 + VM0112: + ansible_host: 192.168.122.34 + VM0113: + ansible_host: 192.168.122.184 + VM0114: + ansible_host: 192.168.122.241 + VM0115: + ansible_host: 192.168.122.66 + VM0116: + ansible_host: 192.168.122.50 + VM0117: + ansible_host: 192.168.122.6 + VM0118: + ansible_host: 192.168.122.60 + VM0119: + ansible_host: 192.168.122.12 + VM0120: + ansible_host: 192.168.122.161 + VM0121: + ansible_host: 192.168.122.26 + VM0122: + ansible_host: 192.168.122.32 + VM0123: + ansible_host: 192.168.122.61 + VM0124: + ansible_host: 192.168.122.90 + VM0125: + ansible_host: 192.168.122.196 + VM0126: + ansible_host: 192.168.122.46 + VM0127: + ansible_host: 192.168.122.89 + VM0128: + ansible_host: 192.168.122.97 + VM0129: + ansible_host: 192.168.122.173 + VM0130: + ansible_host: 192.168.122.45 + VM0131: + ansible_host: 192.168.122.35 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 +""".format(new_platform, hwsku, new_platform, hwsku, new_platform, new_platform, new_platform, new_platform, new_platform, new_platform) + + # Write the new file + with open(new_file, 'w') as f: + f.write(template_content) + + print("✓ Created {}".format(new_file)) + return True + +def create_vxr_topo_file(new_platform, topology_type, hwsku): + """Create a new VXR topology YAML file based on the topology type.""" + new_file = "../pyvxr_yaml_files/{}_sonic_{}_topo.yaml".format(new_platform, topology_type) + + # Remove "Cisco" keyword from hwsku for linecard_types + linecard_type = hwsku + if hwsku.startswith("Cisco-"): + linecard_type = hwsku[6:] # Remove "Cisco-" prefix + elif "Cisco" in hwsku: + linecard_type = hwsku.replace("Cisco-", "").replace("Cisco", "") + + # Determine the number of veos devices based on topology + if topology_type == "t0": + veos_range = "1..4" + veos_count = 4 + else: # t1 + veos_range = "1..32" + veos_count = 32 + + template_content = """simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['{}'] + npu_asic_versions: [A0] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/aaktiwar/sonic-cisco-8000_31324.bin + port_breakout: + lc0: + 0..63: 2x400 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[{}]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections:""".format(linecard_type, veos_range) + + if topology_type == "t0": + # Add t0 specific connections (hubs + custom) + template_content += """ + hubs: + hub0_0: + - docker_ptf.eth[0..1] + - sonic_dut.Ethernet0/[0..1] + hub0_1: + - docker_ptf.eth[2..3] + - sonic_dut.Ethernet1/[0..1] + hub0_2: + - docker_ptf.eth[4..5] + - sonic_dut.Ethernet2/[0..1] + hub0_3: + - docker_ptf.eth[6..7] + - sonic_dut.Ethernet3/[0..1] + hub0_4: + - docker_ptf.eth[8..9] + - sonic_dut.Ethernet4/[0..1] + hub0_5: + - docker_ptf.eth[10..11] + - sonic_dut.Ethernet5/[0..1] + hub0_6: + - docker_ptf.eth[12..13] + - sonic_dut.Ethernet6/[0..1] + hub0_7: + - docker_ptf.eth[14..15] + - sonic_dut.Ethernet7/[0..1] + hub0_8: + - docker_ptf.eth[16..17] + - sonic_dut.Ethernet8/[0..1] + hub0_9: + - docker_ptf.eth[18..19] + - sonic_dut.Ethernet9/[0..1] + hub0_10: + - docker_ptf.eth[20..21] + - sonic_dut.Ethernet10/[0..1] + hub0_11: + - docker_ptf.eth[22..23] + - sonic_dut.Ethernet11/[0..1] + hub0_12: + - docker_ptf.eth[24..25] + - sonic_dut.Ethernet12/[0..1] + hub0_13: + - docker_ptf.eth[26..27] + - sonic_dut.Ethernet13/[0..1] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet14/0 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet14/1 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet15/0 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet15/1 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane +""" + else: # t1 + # Add t1 specific connections (only custom, no hubs) + template_content += """ + custom:""" + + # Generate 32 ptf_injected connections for t1 + for i in range(1, 33): + eth_num = i - 1 + ethernet_port = (i - 1) // 2 + sub_port = (i - 1) % 2 + template_content += """ + ptf_injected{}: + ports: + - docker_ptf.eth{} + - sonic_dut.Ethernet{}/{} + - veos{}.Ethernet1""".format(i, eth_num, ethernet_port, sub_port, i) + + template_content += """ + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane +""" + + # Write the new file + with open(new_file, 'w') as f: + f.write(template_content) + + print("✓ Created {}".format(new_file)) + return True + +def validate_topology(topology_str): + """Validate that the topology parameter is valid.""" + if not topology_str: + return False, "Topology cannot be empty" + + # Split by comma and strip whitespace + topologies = [t.strip() for t in topology_str.split(',')] + + # Check for valid topology types + valid_topologies = ['t0', 't1'] + for topo in topologies: + if topo not in valid_topologies: + return False, "Invalid topology '{}'. Valid options are: {}".format(topo, ', '.join(valid_topologies)) + + # Check for duplicates + if len(topologies) != len(set(topologies)): + return False, "Duplicate topology types are not allowed" + + if len(topologies) == 0: + return False, "At least one topology type must be specified" + + return True, "" + +def validate_platform_name(platform_name): + """Validate that the platform name is valid.""" + if not platform_name: + return False, "Platform name cannot be empty" + + if not re.match(r'^[a-zA-Z][a-zA-Z0-9_-]*$', platform_name): + return False, "Platform name must start with a letter and contain only letters, numbers, hyphens, and underscores" + + if len(platform_name) > 50: + return False, "Platform name must be 50 characters or less" + + return True, "" + +def check_platform_exists(platform_name): + """Check if the platform already exists in the system.""" + script_path = "create_sonic_topo.py" + + if not os.path.exists(script_path): + return False + + with open(script_path, 'r') as f: + content = f.read() + + # Check if platform is already in choices + choices_pattern = r"choices=\[[^\]]*'" + re.escape(platform_name) + r"'[^\]]*\]" + if re.search(choices_pattern, content): + return True + + return False + +def main(): + parser = argparse.ArgumentParser( + description="Add a new platform to the sonic test infrastructure", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + python3 add_new_platform.py titan Cisco-8223-64E-MO t0 + python3 add_new_platform.py titan Cisco-8223-64E-MO t1 + python3 add_new_platform.py titan Cisco-8223-64E-MO t0,t1 + """ + ) + + parser.add_argument( + 'platform_name', + help='Name of the new platform to add' + ) + + parser.add_argument( + 'hwsku', + help='Hardware SKU for the platform (e.g., Cisco-8223-64EF-MO, Cisco-8000-Series)' + ) + + parser.add_argument( + 'topology', + help='Topology type(s) to create: t0, t1, or t0,t1 (comma-separated for multiple)' + ) + + args = parser.parse_args() + + # Validate platform name + is_valid, error_msg = validate_platform_name(args.platform_name) + if not is_valid: + print("Error: {}".format(error_msg)) + sys.exit(1) + + # Validate topology + is_valid, error_msg = validate_topology(args.topology) + if not is_valid: + print("Error: {}".format(error_msg)) + sys.exit(1) + + # Parse topology list + topology_list = [t.strip() for t in args.topology.split(',')] + + # Check if platform already exists + if check_platform_exists(args.platform_name): + print("Error: Platform '{}' already exists.".format(args.platform_name)) + sys.exit(1) + + print("Adding new platform: {}".format(args.platform_name)) + print("Hardware SKU: {}".format(args.hwsku)) + print("Topology: {}".format(args.topology)) + print("-" * 50) + + success = True + created_files = [] + + # 1. Update create_sonic_topo.py + try: + if not update_create_sonic_topo(args.platform_name, topology_list): + success = False + except Exception as e: + print("✗ Failed to update create_sonic_topo.py: {}".format(e)) + success = False + else: + created_files.append("create_sonic_topo.py (modified)") + + # 2. Create testbed files based on topology parameter + if 't0' in topology_list: + try: + if not create_testbed_file(args.platform_name, "t0", args.hwsku): + success = False + except Exception as e: + print("✗ Failed to create t0 testbed file: {}".format(e)) + success = False + else: + created_files.append("testbed-{}-t0.yaml (created)".format(args.platform_name)) + + if 't1' in topology_list: + try: + if not create_testbed_file(args.platform_name, "t1", args.hwsku): + success = False + except Exception as e: + print("✗ Failed to create t1 testbed file: {}".format(e)) + success = False + else: + created_files.append("testbed-{}-t1.yaml (created)".format(args.platform_name)) + + # 3. Create VXR topology files based on topology parameter + if 't0' in topology_list: + try: + if not create_vxr_topo_file(args.platform_name, "t0", args.hwsku): + success = False + except Exception as e: + print("✗ Failed to create t0 VXR topology file: {}".format(e)) + success = False + else: + created_files.append("{}_sonic_t0_topo.yaml (created)".format(args.platform_name)) + + if 't1' in topology_list: + try: + if not create_vxr_topo_file(args.platform_name, "t1", args.hwsku): + success = False + except Exception as e: + print("✗ Failed to create t1 VXR topology file: {}".format(e)) + success = False + else: + created_files.append("{}_sonic_t1_topo.yaml (created)".format(args.platform_name)) + + print("-" * 50) + if success: + print("✓ Successfully added platform '{}'!".format(args.platform_name)) + print("\nFiles created/modified:") + for file_info in created_files: + print(" - {}".format(file_info)) + print("\nNote: The generated testbed files contain basic templates.") + print("You may need to customize them based on your specific hardware configuration.") + else: + print("✗ Some operations failed. Please check the errors above.") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/infra/allure_ops.py b/infra/allure_ops.py new file mode 100755 index 00000000000..359ef2f6138 --- /dev/null +++ b/infra/allure_ops.py @@ -0,0 +1,248 @@ +#!/usr/bin/python + +import argparse +import json +import os +import shlex +import sys +import paramiko +import yaml + +from urllib import parse +from hw_setup_utils import getSonicMgmtContainterName + + +# Path to config file +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + + +def _run_cmd_in_ssh(ssh, cmd, timeout=180): + """ + Run a command in remote host + """ + + # run command inside the container + stdin, stdout, stderr = ssh.exec_command(cmd, timeout=timeout) + + # to prevent buffer blockage + cmd_output = stdout.read().decode() + cmd_error = stderr.read().decode() + + # get the exit status + exit_status = stdout.channel.recv_exit_status() + + print(f"Output for command '{cmd}': exit_status:{exit_status}\nstdout: {cmd_output}\nstderr: {cmd_error}") + return cmd_output, cmd_error, exit_status + +def _run_cmd_in_ssh_container(ssh, container_name, cmd, timeout=180): + """ + Run a command in container + """ + + # run command inside the container + docker_exec_cmd = f'docker exec {container_name} sh -c "{cmd}"' + return _run_cmd_in_ssh(ssh, docker_exec_cmd, timeout) + +def _create_parser(): + parser = argparse.ArgumentParser(description='Execute commands inside a docker container in a remote server') + parser.add_argument('--username', type=str, help='ssh username', + required=True) + parser.add_argument('--password', type=str, help='ssh password', + required=True) + parser.add_argument('--host-address', type=str, help='Host address of remote server', + required=True) + parser.add_argument('--ssh-port', type=str, help='optional: ssh port, if applicable', + required=False, default='22') + parser.add_argument('--stream', type=str, help='stream of the image', + required=True) + parser.add_argument('--testbed', type=str, help='testbed', + required=True) + + parser.add_argument('--install-allure', action='store_true', help='install allure inside container') + + parser.add_argument('--generate-report', action='store_true', + help='generate report inside container, export it and create URL') + parser.add_argument('--report-name', required='--generate-report' in sys.argv, type=str, + help='name of the report to be generated - required if --generate-report is specified') + + + return parser + +def get_container_local_mount_dir(ssh, container_name, destination_path): + cmd = f"docker inspect `docker ps -aq --filter name=^/{container_name}$`" + + _, stdout, stderr = ssh.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + err = "failed to run {}: {}".format(cmd, stderr.read().decode("ascii").strip()) + print(err) + raise Exception(err) + + container_metadata = json.loads(stdout.read().decode("ascii").strip()) + + # Sort by "Created" timestamp and get the latest entry + latest_metadata = max(container_metadata, key=lambda x: x["Created"]) + + lastest_mounts = latest_metadata["Mounts"] + testbed_mount_dir = "" + for mount in lastest_mounts: + if mount["Destination"] == destination_path: + testbed_mount_dir = mount["Source"] + break + + if testbed_mount_dir == "" : + err = f"No mount point found for Destination path '{destination_path}' in container {container_name}" + print(err) + raise Exception(err) + + return testbed_mount_dir + + +def install_allure_on_remote_container(ssh, hostname, container_name): + + # Get docker mount directory on the testbed server + destination_path = "/data" + print("determine local mount dir for container path {}:{}".format(container_name, destination_path)) + testbed_mount_dir = get_container_local_mount_dir(ssh, container_name, destination_path) + print("mount dir of container {}:{} on the testbed {}:{}".format(container_name, destination_path, hostname, testbed_mount_dir)) + + # Download allure debian package + allure_debian_url = allure_config['allure']['debian-url'] + if allure_debian_url is None or allure_debian_url == "": + raise Exception("allure debian package URL is not provided") + alure_package_name = os.path.basename(parse.urlparse(allure_debian_url).path) + + print("remove existing allure*.deb* under mount dir if any: {}".format(testbed_mount_dir)) + clear_debs = "cd {} && rm -f allure*.deb*".format(shlex.quote(testbed_mount_dir)) + _, _, clear_status = _run_cmd_in_ssh(ssh, clear_debs) + if clear_status != 0: + raise Exception("Failed to clear existing Allure .deb files under {}".format(testbed_mount_dir)) + + print("download allure debian package from {} to {}:{}".format(allure_debian_url, hostname, testbed_mount_dir)) + wget_cmd = "wget {} -P {}".format(shlex.quote(allure_debian_url), shlex.quote(testbed_mount_dir)) + stdout, stderr, status_code = _run_cmd_in_ssh(ssh, wget_cmd) + if status_code != 0: + raise Exception(f'Failed to download the allure package: stdout: {stdout}, stderr: {stderr}') + + # Install the allure package in the sonic-mgmt container + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, f'sudo dpkg -i /data/{alure_package_name}') + if status_code != 0: + raise Exception(f'Failed to install the allure package: stdout: {stdout}, stderr: {stderr}') + + # Verify the allure installation in the sonic-mgmt container + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, 'allure --version') + if status_code != 0: + raise Exception(f'Failed to verify the allure installation: stdout: {stdout}, stderr: {stderr}') + + # After successful install, remove downloaded Allure .deb(s) from the mount (same as /data in container). + print("remove Allure .deb package(s) from mount dir after successful install: {}".format(testbed_mount_dir)) + cleanup_debs = "cd {} && rm -f allure*.deb*".format(shlex.quote(testbed_mount_dir)) + _, _, cleanup_status = _run_cmd_in_ssh(ssh, cleanup_debs) + if cleanup_status != 0: + raise Exception("Failed to remove Allure .deb after install under {}".format(testbed_mount_dir)) + + return 0 + +def generate_allure_report_and_copy_to_remote(ssh, hostname, container_name, report_name): + # Check if allure is installed + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, 'allure --version') + if status_code != 0: + err = f'Allure is not installed in the container {container_name}: stdout: {stdout}, stderr: {stderr}' + print(err) + raise Exception(err) + + # Get docker mount directory on the testbed server + destination_path = "/data" + print("determine local mount dir for container path {}:{}".format(container_name, destination_path)) + testbed_mount_dir = get_container_local_mount_dir(ssh, container_name, destination_path) + print("mount dir of container {}:{} on the testbed {}:{}".format(container_name, destination_path, hostname, testbed_mount_dir)) + + # Generate allure report + local_report_dir = allure_config['allure']['local-report-dir'] + if local_report_dir is None or local_report_dir == "": + raise Exception("local report directory is not provided") + allure_report_directory_name = "allure-report-{}".format(report_name) + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, 'allure generate --name {} -o /tmp/{} {}'.format(report_name, allure_report_directory_name, local_report_dir)) + if status_code != 0: + raise Exception(f'Failed to generate allure report: stdout: {stdout}, stderr: {stderr}') + + # tar the allure report directory + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, 'tar -cvzf {}/{}.tar.gz /tmp/{}'.format(destination_path, allure_report_directory_name, allure_report_directory_name)) + if status_code != 0: + raise Exception(f'Failed to archive allure report: stdout: {stdout}, stderr: {stderr}') + + # remove the allure report directory + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, 'rm -rf /tmp/{}'.format(allure_report_directory_name)) + if status_code != 0: + raise Exception(f'Failed to clean allure report archive from /tmp/{allure_report_directory_name}: stdout: {stdout}, stderr: {stderr}') + + # Copy the allure report tarball to local + print("Copying allure report tarball to local") + ftp_client = ssh.open_sftp() + ftp_client.get('{}/{}.tar.gz'.format(testbed_mount_dir, allure_report_directory_name), '/tmp/{}.tar.gz'.format(allure_report_directory_name)) + + # remove the allure report tarball on remote + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, 'rm -rf {}/{}.tar.gz'.format(destination_path, allure_report_directory_name)) + if status_code != 0: + raise Exception(f'Failed to clean allure report archive from {destination_path}/{allure_report_directory_name}.tar.gz: stdout: {stdout}, stderr: {stderr}') + + # extract the allure report tarball on local + result = os.system('tar -xvzf /tmp/{}.tar.gz -C /'.format(allure_report_directory_name)) + if result != 0: + raise Exception(f'Failed to extract the allure report tarball') + + # copy the allure report to remote + remote_report_dir = allure_config['allure']['remote-report-dir'] + if remote_report_dir is None or remote_report_dir == "": + raise Exception("remote report directory is not provided") + remote_report_dir = remote_report_dir if remote_report_dir.endswith('/') else remote_report_dir + '/' + result = os.system('cp -R /tmp/{} {}/'.format(allure_report_directory_name, remote_report_dir)) + if result != 0: + raise Exception(f'Failed to copy the allure report to remote') + + # remove the allure report on local + os.system('rm -rf /tmp/{}'.format(allure_report_directory_name)) + os.system('rm -rf /tmp/{}.tar.gz'.format(allure_report_directory_name)) + + # create report URL + allure_base_url = allure_config['allure']['server-base-url'] + if allure_base_url is None or allure_base_url == "": + raise Exception("allure base URL is not provided") + allure_report_url = "{}/{}/{}".format(allure_base_url, remote_report_dir, allure_report_directory_name) + + ftp_client.close() + + print("Allure report generated and copied to remote. Report URL: {}".format(allure_report_url)) + return 0, allure_report_url + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + + username = args['username'] + password = args['password'] + host_address = args['host_address'] + ssh_port = args['ssh_port'] + install_allure = args['install_allure'] + generate_report = args['generate_report'] + report_name = args['report_name'] if generate_report else "" + stream = args['stream'] + testbed = args['testbed'] + docker_container_name = getSonicMgmtContainterName(stream, testbed) + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=host_address, port=ssh_port, username=username, password=password, timeout=120, banner_timeout=120) + + if install_allure: + install_allure_on_remote_container(ssh, host_address, docker_container_name) + if generate_report: + generate_allure_report_and_copy_to_remote(ssh, host_address, docker_container_name, report_name) + return + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/infra/cmono_wa_cmd_list b/infra/cmono_wa_cmd_list new file mode 100755 index 00000000000..0f291a393dd --- /dev/null +++ b/infra/cmono_wa_cmd_list @@ -0,0 +1 @@ +echo "CMONO SIM workaround command list" diff --git a/infra/config/allure-config.yaml b/infra/config/allure-config.yaml new file mode 100644 index 00000000000..a55acd7c536 --- /dev/null +++ b/infra/config/allure-config.yaml @@ -0,0 +1,6 @@ +allure: + debian-url: http://172.29.93.10/sonic-images/sonicci/allure_2.34.0-1_all.deb + local-report-dir: /tmp/allure_results + report-url-file-path: allure_report_url.log + remote-report-dir: /auto/sonic/allure/reports + server-base-url: https://allure.cisco.com \ No newline at end of file diff --git a/infra/config/hw_cfg.json b/infra/config/hw_cfg.json new file mode 100644 index 00000000000..b44f79290f5 --- /dev/null +++ b/infra/config/hw_cfg.json @@ -0,0 +1,3382 @@ +{ + "default-info": + { + "sonic_installer_commands": [ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ] + }, + "testbed-info": + { + "t1-m6-22-m64":{ + "ucs_host_name":"sonic-ucs-m6-22", + "ucs_host": "172.27.146.243", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "m64-zz-2", + "ucs_tb": "m64-t1-lag", + "telnet_host": ["172.27.146.33"], + "telnet_port": ["2008"], + "telnet_details": ["172.27.146.33 2008"], + "dut_ssh": ["1.72.33.5"], + "admin_cmd_prompt": "admin@m64-zz-2:", + "pre_selection": "root@m64-zz-2:/home/cisco# ", + "dut_ssh_prompt": "admin@1.72.33.5", + "ucs_ssh_prompt": "sonic@172.27.146.243", + "power_cycle": "./psu_outlet_action.py 172.27.146.34 11,12 cycle", + "grub_selection": "The highlighted entry will be executed automatically in 4s.", + "docker_prompt":"@sonic-ucs-m6-22", + "topology": "t1", + "telnet_flag": "False", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo m64-t1-lag ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo m64-t1-lag ./lab", + "mtu_hack": { + "vms_count": 24 + } +}, + "t1-m6-37-tornado":{ + "ucs_host_name":"sonic-ucs-m6-37", + "ucs_host": "172.26.235.93", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "tornado-t1-dut", + "ucs_tb": "trndo-t1", + "telnet_host": ["172.26.235.90"], + "telnet_port": ["2031"], + "telnet_details": ["172.26.235.90 2031"], + "dut_ssh": ["9.9.11.3"], + "admin_cmd_prompt": "admin@tornado-t1-dut:", + "pre_selection": "root@tornado-t1-dut:/home/admin#", + "dut_ssh_prompt": "admin@9.9.11.3", + "ucs_ssh_prompt": "sonic@172.26.235.93", + "power_cycle": "./psu_outlet_action.py 10.28.105.118 15 cycle", + "grub_selection": "The highlighted entry will be executed automatically in 4s.", + "docker_prompt":"@sonic-ucs-m6-37", + "topology": "t1", + "telnet_flag": "False", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "sonic_mgmt_container_c-master": "cicd_prod_c-master", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_202605": "cicd_prod_202605", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo trndo-t1 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo trndo-t1 ./lab", + "mtu_hack": { + "vms_count": 24 + } + }, + "t0-m6-47-tornado":{ + "ucs_host_name":"sonic-ucs-m6-47", + "ucs_host": "10.28.109.77", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "tornado-a-t0-dut", + "ucs_tb": "tndadut", + "telnet_host": ["10.28.109.5"], + "telnet_port": ["2026"], + "telnet_details": ["10.28.109.5 2026"], + "dut_ssh": ["9.9.12.10"], + "admin_cmd_prompt": "admin@tornado-a-t0-dut:", + "pre_selection": "root@tornado-a-t0-dut:/home/admin#", + "dut_ssh_prompt": "admin@9.9.12.10", + "ucs_ssh_prompt": "sonic@10.28.109.77", + "power_cycle": "./psu_outlet_action.py 10.28.105.134 16 cycle", + "grub_selection": "The highlighted entry will be executed automatically in 4s.", + "docker_prompt":"@sonic-ucs-m6-47", + "topology": "t0", + "telnet_flag": "False", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "sonic_mgmt_container_c-master": "cicd_prod_c-master", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_202605": "cicd_prod_202605", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo tndadut ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo tndadut ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t1-m3-4-cmono": { + "ucs_host_name":"sonic-ucs-m3-4", + "ucs_host": "172.27.147.237", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "chu-dut", + "scp_ip": "1.74.25.13", + "installer_mode":"sonic", + "ucs_tb": "chu-t1-56-lag", + "telnet_host": ["172.27.147.153"], + "telnet_port": ["2005"], + "telnet_details": ["172.27.147.153 2005"], + "dut_ssh": ["1.74.25.72"], + "topology": "t1", + "telnet_flag": "False", + "docker_prompt":"@sonic-ucs-m3-4", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_master": "cicd_prod_master ", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo chu-t1-56-lag password.txt", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo chu-t1-56-lag password.txt", + "mtu_hack": { + "vms_count": 24 + } + }, + "t1-m6-26-cmono": { + "ucs_host_name":"sonic-ucs-m6-26", + "ucs_host": "172.26.235.74", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "chu-dut", + "scp_ip": "9.9.1.7", + "installer_mode":"sonic", + "ucs_tb": "chu-t1-56-lag", + "telnet_host": ["172.26.235.71"], + "telnet_port": ["2005"], + "telnet_details": ["172.26.235.71 2005"], + "dut_ssh": ["9.9.1.101"], + "topology": "t1", + "telnet_flag": "False", + "docker_prompt":"@sonic-ucs-m6-26", + "docker_count": "14", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo chu-t1-56-lag password.txt", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo chu-t1-56-lag password.txt", + "mtu_hack": { + "vms_count": 24 + } + }, + "t0-m6-33-laguna": { + "ucs_host_name": "sonic-ucs-m6-33", + "ucs_host": "172.26.235.84", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "laguna-t0-1-dut", + "scp_ip":"9.9.3.51", + "installer_mode":"sonic", + "ucs_tb": "super-t0", + "telnet_host": ["172.26.235.90"], + "telnet_port": ["2004"], + "telnet_details": ["172.26.235.90 2004"], + "dut_ssh": ["9.9.3.36"], + "topology": "t0", + "docker_prompt":"@sonic-ucs-m6-33", + "sonic_mgmt_container_202405": "202405-sonic-mgmt", + "sonic_mgmt_container_202411": "202411-sonic-mgmt", + "sonic_mgmt_container_202405c": "202405c-sonic-mgmt", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo super-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo super-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t1-m5-5-cmono": { + "ucs_host_name":"sonic-ucs-m5-5", + "ucs_host": "172.27.147.43", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "dut-400g", + "ucs_tb": "400g-t1", + "telnet_host": ["172.27.147.44"], + "telnet_port": ["2015"], + "telnet_details": ["172.27.147.44 2015"], + "dut_ssh": ["1.75.44.101"], + "admin_cmd_prompt": "admin@dut-400g:", + "pre_selection": "root@dut-400g:/home/admin# ", + "dut_ssh_prompt": "admin@1.75.44.101", + "ucs_ssh_prompt": "sonic@172.27.147.43", + "grub_selection": "Use the ^ and v keys to select which entry is highlighted.", + "docker_prompt":"@sonic-ucs-m5-5", + "topology": "t1", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "telnet_flag": "False", + "run_type_check": "run_tests", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo 400g-t1 ./lab -e 'root_fanout_connect=false'", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo 400g-t1 ./lab -e 'root_fanout_connect=false'", + "mtu_hack": { + "vms_count": 24 + } + }, + "t0-m5-3-m64": { + "ucs_host_name":"sonic-ucs-m5-3", + "ucs_host": "172.27.147.151", + "ucs_username": "ubuntu", + "ucs_password": "cicd_sonic", + "mth_tb": "mth-t0-64", + "ucs_tb": "mth-t0-64", + "telnet_host": ["172.27.147.157"], + "telnet_port": ["2016"], + "telnet_details": ["172.27.147.157 2016"], + "dut_ssh": ["1.74.23.33"], + "admin_cmd_prompt": "admin@mth-t0-64:", + "pre_selection": "root@mth-t0-64:/home/cisco# ", + "dut_ssh_prompt": "admin@1.74.23.33", + "ucs_ssh_prompt": "sonic@172.27.147.151", + "installer_mode":"sonic", + "grub_selection": "Use the ^ and v keys to select which entry is highlighted.", + "power_cycle": "./psu_outlet_action.py 172.27.147.219 8,18 cycle", + "docker_prompt":"@sonic-ucs-m5-3", + "topology": "t0", + "sonic_mgmt_container_202205": "cicd_prod_202205", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202405", + "sonic_mgmt_container_202012": "cicd_prod_202012", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202405":"cicd_prod_202405", + "sonic_mgmt_container_202405c":"cicd_prod_202405c", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "added_folders": "", + "run_type_check": "run_tests", + "add_folders": "generic_config_updater ip dualtor cisco/snmp tacacs iface_namingmode everflow platform_tests.api fdb dut_console telemetry lldp arp show_techsupport pfcwd mvrf gnmi platform_tests vlan", + "telnet_flag": "False", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose git@wwwin-github.cisco.com:whitebox/sonic-cicd.git ./", + "git checkout $GIT_BRANCH", + "python3 ./script/do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./script/do_hw_setup.py onie -i $BUILD_ID -t $TEST_BED --stream $STREAM", + "python3 ./script/do_hw_setup.py deploy -t $TEST_BED --stream $STREAM" + ] + } + }, + "aaa14-t2": { + "ucs_host_name": "sonic-ucs-m5-10", + "ucs_host": "172.27.145.101", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "aaa14-t2", + "ucs_tb": "aaa14-t2", + "docker_prompt": "@sonic-ucs-m5-10", + "topology":"t2", + "skip_tests":"", + "skip_folder" : "", + "dut_ssh":["1.71.55.109", "1.71.55.110", "1.71.55.111", "1.71.55.113"], + "skip_dut_flag": true, + "run_type_check": "run_tests.sh -n aaa14-t2", + "sonic_mgmt_container_202205": "cicd_prod_202205", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202405": "msft-021925-202405", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_master": "cicd_prod_master", + "testbed-setup": { + "cmd": [ + "git clone git@wwwin-github.cisco.com:whitebox/sonic-test.git -b master ./", + "python3 sonic-mgmt/tests/run_commands_in_docker.py --username sonic --password roZes@123 --host-address 172.27.145.101 --docker-container-name $DOCKER_MGMT_CONTAINER --command 'cd /data/tests/; ./run_tests.sh -n aaa14-t2 -u -l info -e -s -e --disable_loganalyzer -e --skip_sanity -m individual -e -rapP -c cisco/install_image/install_image.py -e --image_loc=$P2_BUILD_IMAGE_URL -e --build_id=$P2_BUILD_JOB_ID'" + ] + } + }, + "t1-topo5": { + "ucs_host_name":"sonic-ucs-m6-19", + "ucs_host":"sonic-ucs-m6-19", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "MtFuji-dut", + "ucs_tb": "cmono_t1", + "telnet_host": ["10.194.89.28"], + "telnet_port": ["2008"], + "telnet_details": ["10.194.89.28 2008"], + "dut_ssh":["7.7.7.3"], + "admin_cmd_prompt": "admin@MtFuji-dut", + "pre_selection": "root@MtFuji-dut:/home/cisco# ", + "dut_ssh_prompt": "admin@7.7.7.3", + "ucs_ssh_prompt": "sonic@sonic-ucs-m6-19", + "docker_prompt":"sonic@", + "topology": "t1", + "telnet_flag": "False", + "run_type_check": "run_tests", + "sonic_mgmt_container_202311": "202311-sonic-mgmt", + "sonic_mgmt_container_202405": "202405-sonic-mgmt", + "sonic_mgmt_container_master": "202311-sonic-mgmt", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo cmono_t1 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo cmono_t1 ./lab", + "mtu_hack": { + "vms_count": 24 + }, + "skip_folder":"cisco acl autorestart arp bgp acl.custom_acl_table acl.null_route bfd cacl clock configlet console container_checker container_hardening crm dash dash.crm database decap dhcp_relay dhcp_server disk dns dns.static_dns drop_packets dualtor dualtor_io dualtor_mgmt dut_console ecmp ecmp.inner_hashing everflow fdb fib generic_config_updater gnmi golden_config_infra http iface_loopback_action iface_namingmode ip ipfwd ixia ixia.ecn ixia.ixanvl ixia.pfc ixia.pfcwd lldp", + "skip_tests": "qos/test_qos_sai.py route/test_static_route.py copp/test_copp.py memory_checker/test_memory_checker.py platform_tests/test_advanced_reboot.py", + "testbed-setup": { + "cmd": [ + "git clone git@wwwin-github.cisco.com:whitebox/sonic-test.git -b master ./", + "python3 sonic-mgmt/tests/run_commands_in_docker.py --username sonic --password roZes@123 --host-address 172.27.145.101 --docker-container-name $DOCKER_MGMT_CONTAINER --command 'cd /data/tests/; ./run_tests.sh -n aaa14-t2 -u -l info -e -s -e --disable_loganalyzer -e --skip_sanity -m individual -e -rapP -c cisco/install_image/install_image.py -e --image_loc=$P2_BUILD_IMAGE_URL -e --build_id=$P2_BUILD_JOB_ID'" + ] + } + }, + "t1-m6-18-MtFuji": { + "_comment": "topo4", + "ucs_host_name":"sonic-ucs-m6-18", + "ucs_host":"10.194.89.129", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "MtFuji-dut", + "ucs_tb": "cmono_t1", + "scp_ip": "1.2.25.10", + "onie_ip": "1.2.24.135", + "telnet_host": ["10.194.89.27"], + "telnet_port": ["2023"], + "telnet_details": ["10.194.89.27 2023"], + "dut_ssh": ["1.2.25.10"], + "installer_mode": "sonic", + "admin_cmd_prompt": "admin@MtFuji-dut:", + "pre_selection": "root@MtFuji-dut:/home/admin# ", + "dut_ssh_prompt": "admin@1.2.25.10", + "ucs_ssh_prompt": "sonic@sonic-ucs-m6-18", + "docker_prompt":"sonic@", + "topology": "t1", + "telnet_flag": "True", + "sonic_mgmt_container_202505": "cicd_prod_202505_new", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_master": "cicd_prod_master", + "skip_folder": "cisco ixia mvrf pfc_asym vrf qos", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo cmono_t1 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo cmono_t1 ./lab", + "mtu_hack": { + "vms_count": 24 + }, + "testbed-setup": { + "cmd": [ + "git clone git@wwwin-github.cisco.com:whitebox/sonic-test.git -b master ./", + "python3 sonic-mgmt/tests/run_commands_in_docker.py --username sonic --password roZes@123 --host-address 172.27.145.101 --docker-container-name $DOCKER_MGMT_CONTAINER --command 'cd /data/tests/; ./run_tests.sh -n aaa14-t2 -u -l info -e -s -e --disable_loganalyzer -e --skip_sanity -m individual -e -rapP -c cisco/install_image/install_image.py -e --image_loc=$P2_BUILD_IMAGE_URL -e --build_id=$P2_BUILD_JOB_ID'" + ] + } + }, + "t0-m6-16-MtFuji": { + "_comment": "topo2", + "ucs_host_name":"sonic-ucs-m6-16", + "ucs_host":"10.194.89.125", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "MtFuji-dut", + "ucs_tb": "cmono_t1", + "scp_ip": "1.2.24.104", + "onie_ip": "1.2.24.104", + "telnet_host": ["10.194.89.57"], + "telnet_port": ["2023"], + "telnet_details": ["10.194.89.57 2021"], + "dut_ssh": ["1.2.24.105"], + "installer_mode": "sonic", + "admin_cmd_prompt": "admin@MtFuji-dut:", + "pre_selection": "root@MtFuji-dut:/home/admin# ", + "dut_ssh_prompt": "admin@1.2.24.105", + "ucs_ssh_prompt": "sonic@sonic-ucs-m6-16", + "docker_prompt":"@sonic-ucs-m6-16", + "topology": "t0", + "telnet_flag": "True", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_master": "cicd_prod_master", + "skip_folder": "cisco mvrf vrf dash", + "run_type_check": "run_tests", + "skip_tests": "snappi_tests/cisco/test_ecn_marking_cisco8000.py qos/test_qos_sai.py acl/test_acl.py", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo cmono_t1 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo cmono_t1 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t1-dsf": { + "ucs_host_name":"sonic-ucs-m6-5", + "ucs_host": "172.27.147.210", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "ucs_ssh_prompt": "sonic@sonic-ucs-m6-5", + "docker_prompt":"AzDevOps@c3c3f6fc3fa4:", + "sonic_mgmt_container_202311": "docker-sonic-mgmt", + "sonic_mgmt_container_master": "cicd_prod_master", + "skip_tests": "", + "skip_folder":"" + }, + "t0-m6-29-tornado": { + "ucs_host_name": "sonic-ucs-m6-29", + "ucs_host": "172.26.235.78", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "trndo-t0-dut", + "scp_ip":"9.9.1.6", + "installer_mode":"sonic", + "ucs_tb": "trndo-t0", + "telnet_host": ["172.26.235.71"], + "telnet_port": ["2011"], + "telnet_details": ["172.26.235.71 2011"], + "dut_ssh": ["9.9.2.110"], + "topology": "t0", + "telnet_flag": "False", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "admin_cmd_prompt": "admin@mth-t0-64:", + "dut_ssh_prompt": "admin@9.9.2.110", + "ucs_ssh_prompt": "sonic@172.26.235.78", + "grub_selection": "Use the ^ and v keys to select which entry is highlighted.", + "power_cycle": "", + "run_type_check": "run_tests", + "docker_prompt":"@sonic-ucs-m6-29", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo trndo-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo trndo-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t0-m6-2-m64": { + "ucs_host_name": "sonic-ucs-m6-2", + "ucs_host": "172.27.147.206", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "mth-t0-64", + "scp_ip":"1.75.47.1", + "installer_mode":"sonic", + "ucs_tb": "t0-64-2", + "telnet_host": ["172.27.147.45"], + "telnet_port": ["2008"], + "telnet_details": ["172.27.147.45 2008"], + "dut_ssh": ["1.75.47.20"], + "topology": "t0", + "telnet_flag": "False", + "docker_count": "14", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "admin_cmd_prompt": "admin@mth-t0-64:", + "pre_selection": "root@mth-t0-64:/home/cisco# ", + "dut_ssh_prompt": "admin@1.75.47.20", + "ucs_ssh_prompt": "sonic@172.27.147.206", + "grub_selection": "Use the ^ and v keys to select which entry is highlighted.", + "power_cycle": "", + "run_type_check": "run_tests", + "docker_prompt":"@sonic-ucs-m6-2", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo t0-64-2 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo t0-64-2 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t0-m6-3-m64": { + "ucs_host_name": "sonic-ucs-m6-3", + "ucs_host": "172.27.147.208", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "t0-yy38", + "scp_ip":"1.75.44.32", + "installer_mode":"sonic", + "ucs_tb": "t0-64-3", + "telnet_host": ["172.27.147.45"], + "telnet_port": ["2001"], + "telnet_details": ["172.27.147.45 2001"], + "dut_ssh": ["1.75.44.30"], + "topology": "t0", + "telnet_flag": "False", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "run_type_check": "run_tests", + "docker_prompt":"@sonic-ucs-m6-3", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo t0-64-3 password.txt", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo t0-64-3 password.txt", + "mtu_hack": { + "vms_count": 4 + } + }, + "b2b-tu-2-siren-optics": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.4", "10.29.158.4"], + "telnet_port": ["2036", "2037"], + "telnet_details": ["10.29.158.4 2036", "10.29.158.4 2037"], + "dut_ssh": ["10.29.158.73", "10.29.158.74"], + "topology": "b2b", + "installer_mode": "sonic", + "ucs_ssh_prompt": "sonic@tu2", + "hw_type":"siren", + "docker_prompt":"root@tu2", + "run_type_check": "siren-b2b-full.yaml", + "git_update_flag": "true", + "sonic_test_dir": "/home/sonic/test_logs/tortuga", + "sonic_mgmt_container_202305": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202405": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202311": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_master": "cicd_prod_master_ixia_v9_20", + "skip_tests": "", + "allure_flag": "false", + "skip_folder":"", + "external_ucs": "none", + "lldp_count": 62, + "collect_spytest_flag":"true", + "testbed_yaml": "/data/spytest_tb_files/siren-b2b-full.yaml", + "tests_list": ["/data/sonic-mgmt/spytest/tests/optics/test_optics_pdb.py", "/data/sonic-mgmt/spytest/tests/optics/test_optics.py"], + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest/", + "mkdir /run_logs/tortuga_optics/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $test_name --logs-path /run_logs/tortuga_optics/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ], + "extra_onie_check": [ + "show lldp table" + ], + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ] + }, + "apple-ipfabric-m64": { + "ucs_host_name":"sonic-ucs-m6-49", + "ucs_host": "172.25.168.23", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "dut_ssh": ["10.29.158.176", "10.29.158.175", "10.29.158.181"], + "topology": "apple-solution-ipfabric", + "installer_mode": "sonic", + "ucs_ssh_prompt": "sonic@sonic-ucs-m6-49", + "hw_type":"mathilda-64", + "docker_prompt":"root@sonic-ucs-m6-49", + "run_type_check": "ip_fabric_topo2.yaml", + "collect_spytest_flag": "true", + "sonic_test_dir": "/home/sonic/test_logs/apple_ipfabric", + "sonic_mgmt_container_202405c": "cicd_apple_ipfabric_ixia_10", + "testbed_yaml": "/data/spytest_tb_files/ip_fabric_topo2.yaml", + "tests_list": [ + "/data/sonic-mgmt/spytest/tests/cisco/apple_cvt/test_packet_capture.py" + ], + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest/" , + "mkdir -p /run_logs/apple_ipfabric/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $test_name --logs-path /run_logs/apple_ipfabric/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ], + "sonic_installer_commands":[ + "sudo show boot", + "sudo ip vrf exec mgmt sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ] + }, + "b2b-tu-2-carib": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18"], + "telnet_port": ["2014"], + "telnet_details": ["10.29.158.18 2014"], + "dut_ssh":["10.29.158.157"], + "ucs_ssh_prompt": "sonic@tu2", + "docker_prompt":"root@tu2", + "dut_ssh_prompt": "admin@10.29.158.157", + "sonic_mgmt_container_202305": "tortuga_cicd2", + "sonic_test_dir": "/home/sonic/cicd2/run_logs", + "installer_mode": "sonic", + "skip_tests": "", + "skip_folder":"", + "git_update_flag": "true", + "tests_list": ["cisco/test_platform.py", "cisco/tortuga/security/cisco-security-uefi.py", "cisco/tortuga/security/cisco-security-test.py"], + "hw_type":"carib", + "run_type_check": "spytest_topo_carib_only", + "allure_flag": "false", + "collect_spytest_flag":"true", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ], + "optional_run_params": { + "optional_params":{ + "default": "", + "cisco/test_platform.py": "-m alpha" + }, + "testbed_yaml": { + "default": "/data/spytest_tb_files/tortuga_spytest_topo_carib_only_HW.yaml", + "forwarding": "/data/spytest_tb_files/cicd2_topo.yaml", + "reporting/suites/tortuga-mh": "/data/spytest_tb_files/cicd2_mh_topo.yaml", + "reporting/suites/tortuga": "/data/spytest_tb_files/cicd2_topo.yaml", + "reporting/suites/tortuga_parallel": "/data/spytest_tb_files/cicd2_topo.yaml" + } + }, + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest", + "./bin/spytest --testbed $testbed_yaml $optional_params --device-feature-group master --module-init-max-timeout=7200 --tc-max-timeout=7200 /data/sonic-mgmt/spytest/tests/$test_name --logs-path /run_logs/$image_folder", + "ls -l" + ], + "special_imfs_run_commands": [ + "cd /home/sonic/cicd2/sonic-test/sonic-mgmt/spytest/tests/cisco/tortuga/image_mgmt", + "python3 image_mgmt_test.py 10.29.158.157 http://10.29.158.30/IMAGES/$image_id/sonic-cisco-8000.bin | tee output.log", + "python3 count_test.py > imfs_result.txt", + "cd /var/www/html/imfs_results/", + "mkdir -p $image_id", + "cd $image_id", + "cp /home/sonic/cicd2/sonic-test/sonic-mgmt/spytest/tests/cisco/tortuga/image_mgmt/imfs_result.txt /var/www/html/imfs_results/$image_id", + "ls -l" + ] + }, + "b2b-tu-2-siren": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18"], + "telnet_port": ["2017"], + "telnet_details": ["10.29.158.18 2017"], + "dut_ssh": ["10.29.158.161"], + "ucs_ssh_prompt": "sonic@tu2", + "docker_prompt":"root@tu2", + "dut_ssh_prompt": "admin@10.29.158.161", + "sonic_mgmt_container_202305": "tortuga_cicd2", + "sonic_mgmt_container_202405c": "tortuga_cicd2", + "sonic_test_dir": "/home/sonic/cicd2/run_logs", + "installer_mode": "sonic", + "skip_tests": "", + "skip_folder":"", + "git_update_flag": "true", + "tests_list": ["cisco/test_platform.py", "cisco/tortuga/security/cisco-security-uefi.py", "cisco/tortuga/security/cisco-security-test.py"], + "hw_type":"siren", + "run_type_check": "spytest_topo_siren_only", + "allure_flag": "false", + "collect_spytest_flag":"true", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ], + "optional_run_params": { + "optional_params":{ + "default": "", + "cisco/tortuga/security/cisco-security-uefi-key-plugin.py": "--skip-init-checks", + "cisco/test_platform.py": "-m alpha" + }, + "testbed_yaml": { + "default": "/data/spytest_tb_files/tortuga_spytest_topo_siren_only_HW.yaml", + "forwarding": "/data/spytest_tb_files/cicd2_topo.yaml", + "reporting/suites/tortuga-mh": "/data/spytest_tb_files/cicd2_mh_topo.yaml", + "reporting/suites/tortuga": "/data/spytest_tb_files/cicd2_topo.yaml", + "reporting/suites/tortuga_parallel": "/data/spytest_tb_files/cicd2_topo.yaml" + } + }, + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $optional_params --module-init-max-timeout=7200 --tc-max-timeout=7200 /data/sonic-mgmt/spytest/tests/$test_name --logs-path /run_logs/$image_folder", + "ls -l" + ], + "special_imfs_run_commands": [ + "cd /home/sonic/cicd2/sonic-test/sonic-mgmt/spytest/tests/cisco/tortuga/image_mgmt", + "python3 image_mgmt_test.py 10.29.158.161 http://10.29.158.30/IMAGES/$image_id/sonic-cisco-8000.bin | tee output.log", + "python3 count_test.py > imfs_result.txt", + "cd /var/www/html/imfs_results/", + "mkdir -p $image_id", + "cd $image_id", + "cp /home/sonic/cicd2/sonic-test/sonic-mgmt/spytest/tests/cisco/tortuga/image_mgmt/imfs_result.txt /var/www/html/imfs_results/$image_id", + "ls -l" + ] + + }, + "b2b-tu-2-siren2": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18"], + "telnet_port": ["2008"], + "telnet_details": ["10.29.158.18 2008"], + "dut_ssh": ["10.29.158.160"], + "ucs_ssh_prompt": "sonic@tu2", + "docker_prompt":"root@tu2", + "dut_ssh_prompt": "admin@10.29.158.160", + "sonic_mgmt_container_202305": "tortuga_cicd2", + "installer_mode": "sonic", + "hw_type":"siren", + "git_update_flag": "false", + "run_type_check": "spytest", + "allure_flag": "false", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ] + }, + "b2b-tu-2-siren3": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18"], + "telnet_port": ["2022"], + "telnet_details": ["10.29.158.18 2022"], + "dut_ssh": ["10.29.158.162"], + "ucs_ssh_prompt": "sonic@tu2", + "docker_prompt":"root@tu2", + "dut_ssh_prompt": "admin@10.29.158.162", + "sonic_mgmt_container_202305": "tortuga_cicd2", + "installer_mode": "sonic", + "hw_type":"siren", + "git_update_flag": "false", + "run_type_check": "spytest", + "allure_flag": "false", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ] + }, + "b2b-tu-2-carib2": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18"], + "telnet_port": ["2015"], + "telnet_details": ["10.29.158.18 2015"], + "dut_ssh": ["10.29.158.158"], + "ucs_ssh_prompt": "sonic@tu2", + "docker_prompt":"root@tu2", + "dut_ssh_prompt": "admin@10.29.158.158", + "sonic_mgmt_container_202305": "tortuga_cicd2", + "installer_mode": "sonic", + "hw_type":"carib", + "git_update_flag": "false", + "run_type_check": "spytest", + "allure_flag": "false", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ] + }, + "b2b-ucs-l9-gamut0": { + "ucs_host_name":"gamut-ucs-l9", + "ucs_host": "172.25.168.181", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.25.168.65"], + "telnet_port": ["2003"], + "telnet_details": ["172.25.168.65 2003"], + "dut_ssh": ["172.25.168.170"], + "ucs_ssh_prompt": "sonic@gamut-ucs-l9", + "docker_prompt":"root@gamut-ucs-l9", + "dut_ssh_prompt": "admin@172.25.168.170", + "sonic_mgmt_container_202505": "ixia_sonic_mgmt_gamut", + "sonic_test_dir": "/home/sonic/cicd2/run_logs", + "installer_mode": "sonic", + "skip_tests": "", + "skip_folder":"", + "git_update_flag": "true", + "tests_list": ["cisco/test_platform.py", "cisco/tortuga/security/cisco-security-uefi.py", "cisco/tortuga/security/cisco-security-test.py"], + "hw_type":"gamut", + "run_type_check": "spytest", + "allure_flag": "false", + "collect_spytest_flag":"true", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ], + "optional_run_params": { + "optional_params":{ + "default": "", + "cisco/tortuga/security/cisco-security-uefi-key-plugin.py": "--skip-init-checks", + "cisco/test_platform.py": "-m alpha" + }, + "testbed_yaml": { + "default": "/data/spytest_tb_files/gamut_topo.yaml", + "forwarding": "/data/spytest_tb_files/gamut_topo.yaml", + "reporting/suites/tortuga_gamut": "/data/spytest_tb_files/gamut_topo.yaml" + } + }, + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $optional_params --module-init-max-timeout=7200 --tc-max-timeout=7200 /data/sonic-mgmt/spytest/tests/$test_name --logs-path /run_logs/$image_folder", + "ls -l" + ] + }, + "b2b-ucs-l9-gamut1": { + "ucs_host_name":"gamut-ucs-l9", + "ucs_host": "172.25.168.181", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.25.168.71"], + "telnet_port": ["2007"], + "telnet_details": ["172.25.168.71 2007"], + "dut_ssh": ["172.25.168.166"], + "ucs_ssh_prompt": "sonic@gamut-ucs-l9", + "docker_prompt":"root@gamut-ucs-l9", + "dut_ssh_prompt": "admin@172.25.168.166", + "sonic_mgmt_container_202505": "ixia_sonic_mgmt_gamut", + "installer_mode": "sonic", + "hw_type":"gamut", + "git_update_flag": "false", + "run_type_check": "spytest", + "allure_flag": "false", + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ] + }, + "b2b-ucs-l9-gamut2": { + "ucs_host_name":"gamut-ucs-l9", + "ucs_host": "172.25.168.181", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.25.168.71"], + "telnet_port": ["2006"], + "telnet_details": ["172.25.168.71 2006"], + "dut_ssh": ["172.25.168.167"], + "ucs_ssh_prompt": "sonic@gamut-ucs-l9", + "docker_prompt":"root@gamut-ucs-l9", + "dut_ssh_prompt": "admin@172.25.168.167", + "sonic_mgmt_container_202505": "ixia_sonic_mgmt_gamut", + "installer_mode": "sonic", + "hw_type":"gamut", + "git_update_flag": "false", + "run_type_check": "spytest", + "allure_flag": "false", + "docker_count": "17", + "extra_sonic_commands": [ + "", + "sudo config interface breakout Ethernet1_14 '2x400G' -yf", + "sudo config int startup Ethernet1_14_1", + "sudo config int startup Ethernet1_14_2", + "sudo config interface breakout Ethernet1_15 '2x400G' -yf", + "sudo config int startup Ethernet1_15_1", + "sudo config int startup Ethernet1_15_2" + ], + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ] + }, + "b2b-ucs-l9-gamut3": { + "ucs_host_name":"gamut-ucs-l9", + "ucs_host": "172.25.168.181", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.25.168.71"], + "telnet_port": ["2005"], + "telnet_details": ["172.25.168.71 2005"], + "dut_ssh": ["172.25.168.168"], + "ucs_ssh_prompt": "sonic@gamut-ucs-l9", + "docker_prompt":"root@gamut-ucs-l9", + "dut_ssh_prompt": "admin@172.25.168.168", + "sonic_mgmt_container_202505": "ixia_sonic_mgmt_gamut", + "installer_mode": "sonic", + "hw_type":"gamut", + "git_update_flag": "false", + "run_type_check": "spytest", + "allure_flag": "false", + "docker_count": "17", + "extra_sonic_commands": [ + "", + "sudo config interface breakout Ethernet1_14 '2x400G' -yf", + "sudo config int startup Ethernet1_14_1", + "sudo config int startup Ethernet1_14_2", + "sudo config interface breakout Ethernet1_15 '2x400G' -yf", + "sudo config int startup Ethernet1_15_1", + "sudo config int startup Ethernet1_15_2" + ], + "sonic_installer_commands":[ + "sudo rm /image-*/old_config/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/config_db.json || true", + "sudo rm /image-*/image-*/persistent_data/etc_sonic/old_config/config_db.json || true", + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/config_db.json || true" + ] + }, + "b2b-m3-2-m64": { + "ucs_host_name":"sonic-ucs-m3-2", + "ucs_host": "172.27.146.35", + "ucs_username": "rraghav", + "ucs_password": "roZes@123", + "telnet_host": ["172.27.146.33"], + "telnet_port": ["2009", "2011"], + "telnet_details": ["172.27.146.33 2009", "172.27.146.33 2011"], + "dut_ssh": ["1.72.33.151", "1.72.33.152"], + "topology": "b2b", + "installer_mode": "sonic", + "pre_selection": ":/home/cisco", + "allure_flag": "false", + "docker_prompt":"root@sonic-ucs-m3-2", + "sonic_mgmt_container_202305": "cicd_prod_master", + "sonic_mgmt_container_202405": "cicd_prod_master", + "sonic_mgmt_container_202505": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_master", + "sonic_mgmt_container_202501": "cicd_prod_master", + "sonic_mgmt_container_202311": "cicd_prod_master", + "sonic_mgmt_container_202411": "cicd_prod_master", + "sonic_mgmt_container_master": "cicd_prod_master", + "skip_tests": "", + "docker_count":"14 ", + "skip_folder":"", + "custom_result_url":"http://172.27.146.35/run_logs/cicd_runs/", + "external_ucs": "none", + "run_type_check": "/data/spytest_tb_files/combined_m64_optics.yaml", + "extra_onie_check": [ + "show lldp table" + ], + "optional_run_params": { + "testbed_yaml": { + "default": "/data/spytest_tb_files/combined_m64_optics.yaml" + } + }, + "special_run_commands": [ + "unset http_proxy https_proxy", + "cd /data/sonic-mgmt/spytest", + "mkdir /run_logs/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master /data/sonic-mgmt/spytest/tests/optics/test_optics.py --logs-path /run_logs/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ] + }, + "b2b-m3-2-croc": { + "ucs_host_name":"sonic-ucs-m3-2", + "ucs_host": "172.27.146.35", + "ucs_username": "rraghav", + "ucs_password": "roZes@123", + "telnet_host": ["172.27.147.157"], + "telnet_port": ["2007", "2008"], + "telnet_details": ["172.27.147.157 2007", "172.27.147.157 2008"], + "dut_ssh": ["1.74.25.70", "1.74.25.71"], + "topology": "b2b", + "installer_mode": "sonic", + "onie_ip": "1.74.25.7", + "pre_selection": ":/home/cisco", + "allure_flag": "false", + "docker_prompt":"root@sonic-ucs-m3-2", + "sonic_mgmt_container_202411": "cicd_prod_master", + "sonic_mgmt_container_202305": "cicd_prod_master", + "sonic_mgmt_container_202405": "cicd_prod_master", + "sonic_mgmt_container_202505": "cicd_prod_master", + "sonic_mgmt_container_202501": "cicd_prod_master", + "sonic_mgmt_container_202311": "cicd_prod_master", + "sonic_mgmt_container_master": "cicd_prod_master", + "skip_tests": "", + "docker_count": "14 ", + "skip_folder":"", + "lldp_count": 10, + "tests_list": ["/data/sonic-mgmt/spytest/tests/optics/test_optics.py"], + "custom_result_url": "http://172.27.146.35/run_logs/cicd_runs/", + "external_ucs": "none", + "run_type_check": "/data/spytest_tb_files/crocodile_b2b.yaml", + "extra_onie_check": [ + "show lldp table" + ], + "extra_onie_commands": [[ + "sudo config interface speed Ethernet0 100000", + "sudo config interface speed Ethernet4 100000", + "sudo config save -y" + ], + [ + "sudo config interface speed Ethernet0 100000", + "sudo config interface speed Ethernet4 100000", + "sudo config save -y" + ] + ], + "optional_run_params": { + "testbed_yaml": { + "default": "/data/spytest_tb_files/crocodile_b2b.yaml" + } + }, + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest", + "mkdir /run_logs/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master /data/sonic-mgmt/spytest/tests/optics/test_optics.py --logs-path /run_logs/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ] + }, + "mathilda-dualtor-m5-6" : { + "ucs_host_name": "sonic-ucs-m5-6", + "ucs_host": "172.27.147.173", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "tor40-1,tor40-2", + "installer_mode":"sonic", + "ucs_tb": "tor40", + "telnet_host": ["172.27.147.44"], + "telnet_port": [ "2012", "2011"], + "telnet_details": ["172.27.147.44 2012", "172.27.147.44 2011"], + "dut_ssh": ["1.75.43.52", "1.75.43.51"], + "topology": "dualtor", + "telnet_flag": "True", + "docker_count": "14", + "docker_prompt":"@sonic-ucs-m5-6", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_master": "cicd_prod_master", + "run_type_check": "run_tests", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo tor40 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo tor40 ./lab", + "mtu_hack": { + "vms_count": 4 + }, + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym" + }, + "dualtor-m6-30-tornado" : { + "ucs_host_name": "sonic-ucs-m6-30", + "ucs_host": "172.26.235.80", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "tor-dut-0,tor-dut-1", + "installer_mode":"sonic", + "ucs_tb": "tornado-dualtor", + "telnet_host": ["172.26.235.71"], + "telnet_port": [ "2015", "2017"], + "telnet_details": ["172.26.235.71 2015", "172.26.235.71 2017"], + "dut_ssh": ["9.9.2.161", "9.9.2.163"], + "topology": "dualtor", + "telnet_flag": "True", + "docker_count": "14", + "docker_prompt":"@sonic-ucs-m6-30", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_master": "cicd_prod_master", + "run_type_check": "run_tests", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "mtu_hack": { + "vms_count": 4 + }, + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo tornado-dualtor ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo tornado-dualtor ./lab", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym" + }, + "dualtor-m6-31-tornado" : { + "ucs_host_name": "sonic-ucs-m6-31", + "ucs_host": "172.26.235.82", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "tor-dut-0,tor-dut-1", + "installer_mode":"sonic", + "ucs_tb": "tornado-dualtor", + "telnet_host": ["172.26.235.71"], + "telnet_port": [ "2027", "2029"], + "telnet_details": ["172.26.235.71 2027", "172.26.235.71 2029"], + "dut_ssh": ["9.9.2.201", "9.9.2.203"], + "topology": "dualtor", + "telnet_flag": "True", + "docker_count": "14", + "docker_prompt":"@sonic-ucs-m6-31", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_master": "cicd_prod_master", + "run_type_check": "run_tests", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "mtu_hack": { + "vms_count": 4 + }, + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo tornado-dualtor ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo tornado-dualtor ./lab", + "skip_tests": "platform_tests/test_advanced_reboot.py platform_tests/test_sim_reboot.py", + "skip_folder": "ixia pfc_asym mvrf vrf" + }, + "dualtor-m6-42-tornado" : { + "ucs_host_name": "sonic-ucs-m6-42", + "ucs_host": "172.26.235.190", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "dtor3-dut0,dtor3-dut1", + "installer_mode":"sonic", + "ucs_tb": "tor-dualtor3", + "telnet_host": ["172.26.235.71"], + "telnet_port": [ "2036", "2040"], + "telnet_details": ["172.26.235.71 2036", "172.26.235.71 2040"], + "dut_ssh": ["9.9.6.2", "9.9.6.4"], + "topology": "dualtor", + "telnet_flag": "True", + "docker_count": "14", + "docker_prompt":"@sonic-ucs-m6-42", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_master": "cicd_prod_master", + "run_type_check": "run_tests", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo tor-dualtor3 ./lab -e 'root_fanout_connect=false' -vvv", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo tor-dualtor3 ./lab -e 'root_fanout_connect=false' -vvv", + "skip_tests": "platform_tests/test_advanced_reboot.py platform_tests/test_sim_reboot.py", + "skip_folder": "ixia pfc_asym mvrf vrf" + }, + "t0-m6-13-cmono" : { + "ucs_host_name": "sonic-ucs-m6-13", + "ucs_host": "172.27.145.103", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "cmono-t0-dut", + "installer_mode":"sonic", + "ucs_tb": "cmono_t0", + "telnet_host": ["172.27.145.53"], + "telnet_port": ["2006"], + "telnet_details": ["172.27.145.53 2006"], + "dut_ssh": ["1.71.53.195"], + "topology": "t0", + "telnet_flag": "False", + "docker_count": "14", + "docker_prompt":"@sonic-ucs-m6-13", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "run_type_check": "run_tests", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo cmono_t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo cmono_t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t1-m5-11-hbm": { + "ucs_host_name":"sonic-ucs-m5-11", + "ucs_host": "172.27.145.105", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "ucs_key": "ssh-keygen -f \"/users/sonicci/.ssh/known_hosts\" -R \"172.27.145.105\"", + "mth_tb": "C-HBM-dut", + "scp_ip": "1.71.53.71", + "installer_mode":"sonic", + "ucs_tb": "chbm-t1", + "telnet_host": ["172.27.145.53"], + "telnet_port": ["2008"], + "telnet_details": ["172.27.145.53 2008"], + "dut_ssh": ["1.71.53.72"], + "topology": "t1", + "telnet_flag": "False", + "docker_count": "14", + "docker_prompt":"@sonic-ucs-m5-11", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo chbm-t1 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo chbm-t1 ./lab" + }, + "b2b-m3-2-cmono" : { + "ucs_host_name":"sonic-ucs-m3-2", + "ucs_host": "172.27.146.35", + "ucs_username": "rraghav", + "ucs_password": "roZes@123", + "telnet_host": ["172.27.147.50", "172.27.147.157"], + "telnet_port": ["2007", "2010"], + "telnet_details": ["172.27.147.50 2007", "172.27.147.157 2010"], + "dut_ssh": ["1.74.23.223", "1.74.23.32"], + "need_ucs_mount": "True", + "topology": "b2b", + "installer_mode": "sonic", + "onie_ip": "1.74.23.250", + "scp_ip": "1.74.23.250", + "max_timeout": 30, + "extra_timeout": 600, + "allure_flag": "false", + "docker_prompt":"@sonic-ucs-m3-2:", + "sonic_mgmt_container_202305": "cicd_prod_master", + "sonic_mgmt_container_202405": "cicd_prod_master", + "sonic_mgmt_container_202311": "cicd_prod_master", + "sonic_mgmt_container_202411": "cicd_prod_master", + "sonic_mgmt_container_202505": "cicd_prod_master", + "sonic_mgmt_container_202511": "cicd_prod_master", + "sonic_mgmt_container_202501": "cicd_prod_master", + "sonic_mgmt_container_master": "cicd_prod_master", + "skip_tests": "", + "skip_folder":"", + "custom_result_url":"http://172.27.146.35/run_logs/cicd_runs/", + "lldp_count": 7, + "external_ucs": "none", + "run_type_check": "/data/spytest_tb_files/comcast_cmono_b2b.yaml", + "optional_run_params": { + "testbed_yaml": { + "default": "/data/spytest_tb_files/comcast_cmono_b2b.yaml" + } + }, + "extra_onie_check": [ + "show lldp table" + ], + "extra_onie_commands": [ + [ + "sudo bash", + "cd /usr/share/sonic/device/x86_64-8101_32fh_o-r0/Cisco-8101-32FH-O/", + "scp rraghav@1.74.23.7:/var/www/html/ztp/platform_cisco_cfg.yaml .", + "rm /etc/sonic/config_db.json", + "reboot" + ], + [ + "sudo bash", + "cd /usr/share/sonic/device/x86_64-8201_32fh_o-r0/Cisco-8201-32FH-O/", + "scp rraghav@1.74.23.7:/var/www/html/ztp-B2/platform_cisco_cfg.yaml .", + "rm /etc/sonic/config_db.json", + "reboot", + "show lldp table" + ] + ], + "special_run_commands": [ + "unset http_proxy https_proxy", + "cd /data/sonic-mgmt/spytest", + "mkdir /run_logs/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master /data/sonic-mgmt/spytest/tests/optics/test_optics.py --logs-path /run_logs/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ] + }, + + "b2b-tu-2-carib-optics": { + "ucs_host_name":"tu2", + "ucs_host": "10.29.158.30", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.4", "10.29.158.4"], + "telnet_port": ["2035", "2034"], + "telnet_details": ["10.29.158.4 2035", "10.29.158.4 2034"], + "dut_ssh": ["10.29.158.71", "10.29.158.72"], + "topology": "b2b", + "installer_mode": "sonic", + "ucs_ssh_prompt": "sonic@tu2", + "hw_type":"carib", + "run_type_check": "carib-b2b-full.yaml", + "git_update_flag": "true", + "docker_prompt":"root@tu2", + "sonic_mgmt_container_202205": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202305": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202405": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202505": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202501": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_202311": "cicd_prod_master_ixia_v9_20", + "sonic_mgmt_container_master": "cicd_prod_master_ixia_v9_20", + "skip_tests": "", + "skip_folder":"", + "external_ucs": "none", + "lldp_count": 41, + "testbed_yaml": "/data/spytest_tb_files/carib-b2b-full.yaml", + "tests_list": ["/data/sonic-mgmt/spytest/tests/optics/test_optics_pdb.py", "/data/sonic-mgmt/spytest/tests/optics/test_optics.py"], + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest/", + "mkdir /run_logs/$image_folder/carib", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $test_name --logs-path /run_logs/$image_folder/carib --skip-load-config base --skip-init-config --tc-max-timeout=86400 --module-init-max-timeout=86400", + "ls -l" + ], + "extra_onie_check": [ + "show lldp table" + ], + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ] + }, + "t0-m6-8-croc": { + "ucs_host_name": "sonic-ucs-m6-8", + "ucs_host": "172.27.148.250", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "croc-xx36-dut", + "ucs_tb": "croc-t0", + "telnet_host": ["172.27.148.26"], + "telnet_port": ["2014"], + "telnet_details": ["172.27.148.26 2014"], + "dut_ssh": ["1.76.26.51"], + "topology": "t0", + "telnet_flag": "False", + "docker_prompt":"@sonic-ucs-m6-8", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo croc-t0 ./password.txt", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo croc-t0 ./password.txt", + "mtu_hack": { + "vms_count": 4 + } + }, + "rdma-m3-2-m64": { + "ucs_host_name": "sonic-ucs-m3-2", + "ucs_host": "172.27.146.35", + "ucs_username": "rraghav", + "ucs_password": "roZes@123", + "mth_tb": "rdma-m64", + "ucs_tb": "ixia-sonic2", + "telnet_host": ["172.27.146.33"], + "telnet_port": ["2014"], + "telnet_details": ["172.27.146.33 2014"], + "dut_ssh": ["1.72.33.250"], + "topology": "ptf32", + "deploy_flag": "False", + "extra_sonic_commands": ["scp /home/sonic/$sonic-mgmt-folder/sonic-test/tbfiles_ixia/$topology/config_db.json admin@1.72.33.250:~/", "sudo mv config_db.json /etc/sonic/", "sudo config reload -y"], + "docker_prompt":"sonic@", + "tests_list": ["snappi_tests"], + "extra_run_params": "-e -rA -O -l error -e -s", + "sonic_mgmt_folders": { + "202405": "cicd_prod_202405", + "202411": "cicd_prod_202411", + "default": "cicd_prod_202405" + }, + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202305": "snappi-202305-sonic-mgmt", + "sonic_mgmt_container_202311": "snappi-202311-sonic-mgmt-rdma-m64", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "skip_tests": "", + "skip_folder": "snappi_tests/cisco snappi_tests/multidut", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ] + }, + "ixia-m5-14-lighting": { + "ucs_host_name": "sonic-ucs-m5-14", + "dut_host_name": "ixia-light-dut", + "ucs_host": "172.26.235.44", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "ixia_light_dut", + "ucs_tb": "sjc4_light_ixia", + "telnet_host": ["172.26.235.13"], + "telnet_port": ["2004"], + "telnet_details": ["172.26.235.13 2004"], + "dut_ssh": ["1.3.103.51"], + "topology": "tgen", + "deploy_flag": "False", + "extra_sonic_commands": [ + "scp /home/sonic/$sonic-mgmt-folder/sonic-test/tbfiles_ixia/$topology/config_db.json admin@1.3.103.51:~/", + "sudo mv config_db.json /etc/sonic/", + "scp /home/sonic/$sonic-mgmt-folder/sonic-test/tbfiles_ixia/$topology/minigraph.xml admin@.3.103.51:~/", + "sudo mv minigraph.xml /etc/sonic/", + "sudo rm /etc/sonic/running_golden_config.json", + "sudo config reload -y"], + "docker_prompt":"sonic@", + "extra_run_params": "-e -rA -O -l error -e -s", + "sonic_mgmt_container_202411": "cicd_prod_202411_lighting", + "sonic_mgmt_container_202405": "cicd_prod_202405_lighting", + "sonic_mgmt_container_202305": "snappi-202305-sonic-mgmt", + "sonic_mgmt_container_202311": "snappi-202311-sonic-mgmt-rdma-m64", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "sonic_mgmt_folders": { + "202405": "cicd_prod_202405_Lighting", + "202411": "cicd_prod_202411_Lighting", + "default": "cicd_prod_202405_Lighting" + }, + "tests_list": ["snappi_tests"], + "skip_tests": "snappi_tests/bgp/test_bgp_remote_link_failover.py", + "skip_folder": "snappi_tests/cisco snappi_tests/multidut", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ] + }, + "ixia-m5-14-churchill": { + "ucs_host_name": "sonic-ucs-m5-14", + "ucs_host": "172.26.235.44", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "Chur-ve-b2b-2", + "ucs_tb": "sjc20_chur_ve_ixia", + "telnet_host": ["172.26.235.41"], + "telnet_port": ["2040"], + "telnet_details": ["172.26.235.41 2040"], + "dut_ssh": ["1.3.103.31"], + "topology": "tgen", + "deploy_flag": "False", + "docker_prompt":"sonic@", + "extra_run_params": "-e -rA -O -l error -e -s", + "sonic_mgmt_folders": { + "202405": "cicd_prod_202405_churchill", + "202411": "cicd_prod_202411_churchill", + "default": "cicd_prod_202405_churchill" + }, + "sonic_mgmt_container_202411": "cicd_prod_202411_churchill", + "sonic_mgmt_container_202405": "cicd_prod_202405_churchill", + "sonic_mgmt_container_202305": "snappi-202305-sonic-mgmt", + "sonic_mgmt_container_202311": "snappi-202311-sonic-mgmt-rdma-m64", + "extra_sonic_commands": [ + "scp /home/sonic/$sonic-mgmt-folder/sonic-test/tbfiles_ixia/$topology/config_db.json admin@1.3.103.31:~/", + "scp /home/sonic/$sonic-mgmt-folder/sonic-test/tbfiles_ixia/$topology/minigraph.xml admin@1.3.103.31:~/", + "sudo mv minigraph.xml /etc/sonic/", + "sudo mv config_db.json /etc/sonic/", + "sudo rm /etc/sonic/running_golden_config.json", + "sudo config reload -y"], + "installer_mode":"sonic", + "run_type_check": "run_tests", + "tests_list": ["snappi_tests"], + "skip_tests": "snappi_tests/bgp/test_bgp_remote_link_failover.py", + "skip_folder": "snappi_tests/cisco snappi_tests/multidut", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ] + }, + "t1-m4-3-croc": { + "ucs_host_name": "sonic-ucs-m4-3", + "ucs_host": "172.27.147.253", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "croc-t1-dut", + "ucs_tb": "croc-t1", + "telnet_host": ["172.27.147.44"], + "telnet_port": ["2004"], + "telnet_details": ["172.27.147.44 2004"], + "dut_ssh": ["1.75.44.251"], + "topology": "t1", + "telnet_flag": "True", + "docker_prompt":"@sonic-ucs-m4-3", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "installer_mode":"sonic", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo croc-t1 ./password.txt", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo croc-t1 ./password.txt", + "mtu_hack": { + "vms_count": 24 + } + }, + "t1-m5-2-m64": { + "ucs_host_name": "sonic-ucs-m5-2", + "ucs_host": "172.27.147.154", + "ucs_username": "lab", + "ucs_password": "roZes@123", + "ucs_key": "ssh-keygen -f \"/users/sonicci/.ssh/known_hosts\" -R \"172.27.147.154\"", + "mth_tb": "mth64-m5-2", + "scp_ip":"1.74.23.14", + "installer_mode":"sonic", + "ucs_tb": "ucs-m5-2", + "telnet_host": ["172.27.147.153"], + "telnet_port": ["2004"], + "telnet_details": ["172.27.147.153 2004"], + "dut_ssh": ["1.74.23.17"], + "topology": "t1", + "telnet_flag": "True", + "docker_prompt":"@sonic-ucs-m5-2", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202305": "cicd_prod_202305", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_mgmt_container_c-master": "cicd_prod_c-master", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo ucs-m5-2 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo ucs-m5-2 ./lab", + "mtu_hack": { + "vms_count": 24 + } + }, + "t1-m6-27-m64": { + "ucs_host_name": "sonic-ucs-m6-27", + "ucs_host": "172.26.235.76", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "ucs_key": "ssh-keygen -f \"/users/sonicci/.ssh/known_hosts\" -R \"172.26.235.76\"", + "mth_tb": "mth-f41-dut", + "scp_ip": "9.9.1.8", + "installer_mode":"sonic", + "ucs_tb": "t1-64-4", + "telnet_host": ["172.26.235.71"], + "telnet_port": ["2008"], + "telnet_details": ["172.26.235.71 2008"], + "dut_ssh": ["9.9.2.3"], + "topology": "t1", + "telnet_flag": "True", + "docker_prompt":"@sonic-ucs-m6-27", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202405_int": "cicd_prod_202405_int", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo t1-64-4 password.txt", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo t1-64-4 password.txt" + }, + "t0-m6-28-superbolt": { + "ucs_host_name": "sonic-ucs-m6-28", + "ucs_host": "172.26.235.47", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "sup-t0-dut", + "installer_mode":"sonic", + "ucs_tb": "super-t0", + "telnet_host": ["172.26.235.13"], + "telnet_port": ["2026"], + "telnet_details": ["172.26.235.13 2026"], + "dut_ssh": ["4.164.1.242"], + "topology": "t0", + "telnet_flag": "False", + "scp_ip": "4.164.1.220", + "docker_prompt":"@sonic-ucs-m6-28", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202311": "202311-whitebox-sonic-mgmt", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo super-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo super-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t0-m6-24-lightning": { + "ucs_host_name": "sonic-ucs-m6-24", + "ucs_host": "172.26.235.38", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "m624-dut", + "installer_mode":"sonic", + "ucs_tb": "light-t0", + "telnet_host": ["172.26.235.13"], + "telnet_port": ["2035"], + "telnet_details": ["172.26.235.13 2035"], + "dut_ssh": ["4.164.1.175"], + "topology": "t0", + "telnet_flag": "False", + "scp_ip": "4.164.1.221", + "docker_prompt":"@sonic-ucs-m6-24", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo light-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo light-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t1-m6-23-superbolt": { + "ucs_host_name": "sonic-ucs-m6-23", + "ucs_host": "172.26.235.40", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "m623-dut", + "scp_ip":"4.164.1.220", + "installer_mode":"sonic", + "ucs_tb": "super-t1", + "telnet_host": ["172.26.235.13"], + "telnet_port": ["2030"], + "telnet_details": ["172.26.235.13 2030"], + "dut_ssh": ["4.164.1.192"], + "topology": "t1", + "docker_prompt":"@sonic-ucs-m6-23", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "202505-sonic-mgmt", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo super-t1 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo super-t1 ./lab", + "mtu_hack": { + "vms_count": 24 + } + }, + "b2b-m5-14-superbolt": { + "ucs_host_name":"sonic-ucs-m5-14", + "ucs_host": "172.26.235.44", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.26.235.13"], + "telnet_port": ["2007", "2008"], + "telnet_details": ["172.26.235.13 2007", "172.26.235.13 2008"], + "dut_ssh": ["1.3.103.50", "1.3.103.51"], + "need_ucs_mount": "True", + "topology": "b2b", + "installer_mode": "onie", + "onie_ip": "1.3.103.20", + "scp_ip": "1.3.103.20", + "max_timeout": 30, + "extra_timeout": 600, + "allure_flag": "false", + "docker_prompt":"@sonic-ucs-m5-14:", + "sonic_mgmt_container_202405": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202501": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202505": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202511": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202411": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_master": "cicd_prod_master_ixia_v10_0", + "skip_tests": "", + "skip_folder":"", + "custom_result_url":"http://172.26.235.44/ixia_v10_cicd_logs/", + "lldp_count": 6, + "external_ucs": "none", + "tests_list": ["/data/sonic-mgmt/spytest/tests/optics/test_optics.py"], + "run_type_check": "/data/sonic-mgmt/spytest/tests/optics/test_optics.py", + "optional_run_params": { + "testbed_yaml": { + "default": "/data/spytest_tb_files/superbolt-b2b.yaml" + } + }, + "extra_onie_check": "none", + "extra_onie_commands": "none", + "special_run_commands": [ + "unset http_proxy https_proxy", + "cd /data/sonic-mgmt/spytest/", + "mkdir /run_logs/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master /data/sonic-mgmt/spytest/tests/optics/test_optics.py --logs-path /run_logs/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=86400 --module-init-max-timeout=86400", + "ls -l" + ] + }, + "b2b-m5-14-lightning" : { + "ucs_host_name":"sonic-ucs-m5-14", + "ucs_host": "172.26.235.44", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.26.235.13","172.26.235.41"], + "telnet_port": ["2009", "2037"], + "telnet_details": ["172.26.235.13 2009", "172.26.235.41 2037"], + "dut_ssh": ["1.3.103.35", "1.3.103.37"], + "need_ucs_mount": "True", + "topology": "b2b", + "installer_mode": "sonic", + "onie_ip": "1.3.103.20", + "scp_ip": "1.3.103.20", + "max_timeout": 30, + "extra_timeout": 600, + "allure_flag": "false", + "docker_prompt":"@sonic-ucs-m5-14:", + "sonic_mgmt_container_202305": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202405": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202311": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202411": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202505": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202511": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_202501": "cicd_prod_master_ixia_v10_0", + "sonic_mgmt_container_master": "cicd_prod_master_ixia_v10_0", + "skip_tests": "", + "skip_folder":"", + "custom_result_url":"http://172.26.235.44/ixia_v10_cicd_logs", + "lldp_count": 13, + "external_ucs": "none", + "run_type_check": "/data/sonic-mgmt/spytest/tests/optics/test_optics.py", + "optional_run_params": { + "testbed_yaml": { + "default": "/data/spytest_tb_files/lightning-b2b.yaml" + } + }, + "extra_onie_check": [ + "show lldp table" + ], + "extra_onie_commands": [ + [ + "sudo bash", + "cd /usr/share/sonic/device/x86_64-8122_64eh_o-r0/Cisco-8122-O128S2", + "sudo scp sonic@1.3.103.20:~/tools/lightning-b2b-1-platform_cisco_cfg.yaml platform_cisco_cfg.yaml", + "sudo rm /etc/sonic/config_db.json", + "sudo reboot" + ], + [ + "sudo bash", + "cd /usr/share/sonic/device/x86_64-8122_64eh_o-r0/Cisco-8122-O128S2", + "sudo scp sonic@1.3.103.20:~/tools/lightning-b2b-2-platform_cisco_cfg.yaml platform_cisco_cfg.yaml", + "sudo rm /etc/sonic/config_db.json", + "sudo reboot" + ] + ], + "special_run_commands": [ + "unset http_proxy https_proxy", + "cd /data/sonic-mgmt/spytest", + "mkdir /run_logs/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master /data/sonic-mgmt/spytest/tests/optics/test_optics.py --logs-path /run_logs/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ] + }, + "b2b-m5-16-tornado" : { + "ucs_host_name":"sonic-ucs-m5-16", + "ucs_host": "172.26.235.12", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["172.26.235.15"], + "telnet_port": ["2032", "2033"], + "telnet_details": ["172.26.235.15 2032", "172.26.235.15 2033"], + "dut_ssh": ["4.164.1.252", "4.164.1.253"], + "need_ucs_mount": "True", + "topology": "b2b", + "installer_mode": "sonic", + "onie_ip": "4.164.1.220", + "scp_ip": "4.164.1.220", + "max_timeout": 30, + "extra_timeout": 600, + "allure_flag": "false", + "docker_prompt":"@sonic-ucs-m5-16:", + "sonic_mgmt_container_202305": "spytest-tornado-b2b", + "sonic_mgmt_container_202405": "spytest-tornado-b2b", + "sonic_mgmt_container_202311": "spytest-tornado-b2b", + "sonic_mgmt_container_202411": "spytest-tornado-b2b", + "sonic_mgmt_container_202505": "spytest-tornado-b2b", + "sonic_mgmt_container_202501": "spytest-tornado-b2b", + "sonic_mgmt_container_202511": "spytest-tornado-b2b", + "sonic_mgmt_container_master": "spytest-tornado-b2b", + "skip_tests": "", + "skip_folder":"", + "custom_result_url":"http://172.26.235.12/test_logs/spytest-b2b/", + "lldp_count": 12, + "external_ucs": "none", + "run_type_check": "/data/sonic-mgmt/spytest/tests/optics/test_optics.py", + "optional_run_params": { + "testbed_yaml": { + "default": "/data/spytest_tb_files/tornado-b2b.yaml" + } + }, + "extra_onie_check": [ + "show lldp table" + ], + "extra_onie_commands": [ + [ + "sudo bash", + "cd /usr/share/sonic/device/x86_64-8101_32fh_o_c01-r0/Cisco-8101C01-C32", + "sudo scp sonic@4.164.1.220:/var/www/html/tornado-b2b-cfg/tornado_b2b_dut1_platform_cisco_cfg.yaml platform_cisco_cfg.yaml", + "sudo rm /etc/sonic/config_db.json", + "sudo reboot" + ], + [ + "sudo bash", + "cd /usr/share/sonic/device/x86_64-8101_32fh_o_c01-r0/Cisco-8101C01-C32", + "sudo scp sonic@4.164.1.220:/var/www/html/tornado-b2b-cfg/tornado_b2b_dut2_platform_cisco_cfg.yaml platform_cisco_cfg.yaml", + "sudo rm /etc/sonic/config_db.json", + "sudo reboot" + ] + ], + "special_run_commands": [ + "unset http_proxy https_proxy", + "export SCID_TGEN_PATH=/data/projects/scid/tgen", + "export SCID_TCL85_BIN=/data/projects/scid/tcl/bin/tclsh8.5", + "cd /data/sonic-mgmt/spytest", + "mkdir /run_logs/$image_folder", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master /data/sonic-mgmt/spytest/tests/optics/test_optics.py --logs-path /run_logs/$image_folder --skip-load-config base --skip-init-config --tc-max-timeout=36000 --module-init-max-timeout=36000", + "ls -l" + ] + }, + "t0-m6-20-lightning" : { + "ucs_host_name": "sonic-ucs-m6-20", + "ucs_host": "172.26.235.20", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "light-dut", + "installer_mode":"sonic", + "ucs_tb": "light-t0", + "telnet_host": ["172.26.235.15"], + "telnet_port": ["2008"], + "telnet_details": ["172.26.235.15 2008"], + "dut_ssh": ["4.164.1.121"], + "topology": "t0", + "telnet_flag": "False", + "docker_count": "13", + "scp_ip": "4.164.1.220", + "docker_prompt":"@sonic-ucs-m6-20", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202405c":"202405c_whitebox", + "sonic_mgmt_container_202311": "202311_prod_repo_whitebox", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo light-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo light-t0 ./lab" + }, + "sol-tu-4-siren": { + "ucs_host_name":"tu4", + "ucs_host": "10.29.158.34", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18", "10.29.158.18", "10.29.158.18", "10.29.158.18"], + "telnet_port": ["2018", "2019", "2020", "2021"], + "dut_ssh": ["10.29.158.209", "10.29.158.210", "10.29.158.211", "10.29.158.212"], + "ucs_ssh_prompt": "sonic@tu4", + "docker_prompt":"root@tu4", + "sonic_mgmt_container_202305": "tortuga_sol3_cicd", + "sonic_test_dir": "/var/www/html/run_logs/sol3_cicd", + "installer_mode": "sonic", + "skip_tests": "", + "skip_folder":"", + "git_update_flag": "true", + "tests_list": ["cisco/test_vxlan_multi_homing.py"], + "hw_type":"siren", + "run_type_check": "spytest_topo_siren_only", + "allure_flag": "false", + "collect_spytest_flag":"true", + "sonic_installer_commands":[ + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/frr/frr.conf", + "sudo rm /etc/sonic/config_db.json" + ], + "optional_run_params": { + "optional_params":{ + "default": "" + }, + "testbed_yaml": { + "default": "/data/spytest_tb_files/sol3_testbed.yaml", + "forwarding": "/data/spytest_tb_files/sol3_testbed.yaml", + "reporting/suites/tortuga-mh": "/data/spytest_tb_files/cicd2_mh_topo.yaml", + "reporting/suites/tortuga": "/data/spytest_tb_files/cicd2_topo.yaml" + } + }, + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $optional_params --module-init-max-timeout=36000 --tc-max-timeout=36000 /data/sonic-mgmt/spytest/tests/$test_name --logs-path run_logs/$image_folder", + "ls -l" + ] + + }, + "sol-tu-4-carib": { + "ucs_host_name":"tu4", + "ucs_host": "10.29.158.34", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "telnet_host": ["10.29.158.18", "10.29.158.18", "10.29.158.18", "10.29.158.18"], + "telnet_port": ["2035", "2037", "2048", "2049"], + "dut_ssh": ["10.29.158.205", "10.29.158.206", "10.29.158.207", "10.29.158.208"], + "ucs_ssh_prompt": "sonic@tu4", + "docker_prompt":"root@tu4", + "sonic_mgmt_container_202305": "tortuga_sol3_cicd", + "sonic_test_dir": "/var/www/html/run_logs/sol3_cicd", + "installer_mode": "sonic", + "skip_tests": "", + "skip_folder":"", + "git_update_flag": "true", + "tests_list": ["cisco/test_vxlan_multi_homing.py"], + "hw_type":"carib", + "run_type_check": "spytest_topo_siren_only", + "allure_flag": "false", + "collect_spytest_flag":"true", + "sonic_installer_commands":[ + "sudo sonic-installer install $image_url -y", + "sudo sonic-installer list", + "sudo sonic-installer set-next-boot", + "sudo rm /etc/sonic/frr/frr.conf", + "sudo rm /etc/sonic/config_db.json" + ], + "optional_run_params": { + "optional_params":{ + "default": "" + }, + "testbed_yaml": { + "default": "/data/spytest_tb_files/sol3_testbed.yaml", + "forwarding": "/data/spytest_tb_files/sol3_testbed.yaml", + "reporting/suites/tortuga-mh": "/data/spytest_tb_files/cicd2_mh_topo.yaml", + "reporting/suites/tortuga": "/data/spytest_tb_files/cicd2_topo.yaml" + } + }, + "special_run_commands": [ + "cd /data/sonic-mgmt/spytest", + "./bin/spytest --testbed $testbed_yaml --device-feature-group master $optional_params --module-init-max-timeout=36000 --tc-max-timeout=36000 /data/sonic-mgmt/spytest/tests/$test_name --logs-path run_logs/$image_folder", + "ls -l" + ] + + }, + "t1-m5-16-lightning" : { + "ucs_host_name": "sonic-ucs-m5-16", + "ucs_host": "172.26.235.12", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "light-dut", + "installer_mode":"sonic", + "ucs_tb": "light-tb", + "telnet_host": ["172.26.235.15"], + "telnet_port": ["2003"], + "telnet_details": ["172.26.235.15 2003"], + "dut_ssh": ["4.164.1.20"], + "topology": "t1", + "telnet_flag": "False", + "docker_count": "13", + "scp_ip": "4.164.1.220", + "docker_prompt":"@sonic-ucs-m5-16", + "sonic_mgmt_container_master": "cicd_prod_master", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202405c":"cicd_prod_202405c", + "sonic_mgmt_container_202311": "cicd_prod_202311", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "run_type_check": "run_tests", + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo light-tb ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo light-tb ./lab", + "mtu_hack": { + "vms_count": 24 + } + }, + "t0-m6-1-m64": { + "ucs_host_name": "sonic-ucs-m6-1", + "ucs_host": "172.27.147.204", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "m6-1-dut", + "scp_ip":"1.75.44.20", + "installer_mode":"sonic", + "ucs_tb": "m64-dtor-yy41", + "telnet_host": ["172.27.147.47"], + "telnet_port": ["2004"], + "telnet_details": ["172.27.147.47 2004"], + "dut_ssh": ["1.75.47.10"], + "topology": "t0", + "telnet_flag": "False", + "docker_count": "14", + "docker_prompt": "@sonic-ucs-m6-1", + "run_type_check": "run_tests", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo m64-dtor-yy41 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo m64-dtor-yy41 ./lab" + }, + "mathilda-dualtor-t0-1": { + "ucs_host_name": "sonic-ucs-m6-5", + "ucs_host": "172.27.147.210", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "m64-tor-0,m64-tor-1", + "scp_ip":"1.74.23.137", + "installer_mode":"sonic", + "ucs_tb": "m64-dtor", + "telnet_host": ["172.27.147.153", "172.27.147.50"], + "telnet_port": ["2002", "2012"], + "telnet_details": ["172.27.147.153 2002", "172.27.147.50 2012"], + "dut_ssh": ["1.74.23.15", "1.74.23.16"], + "topology": "dualtor", + "telnet_flag": "False", + "docker_prompt": "@sonic-ucs-m6-5", + "run_type_check": "run_tests", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "cisco ixia mvrf pfc_asym vrf", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo m64-dtor ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo m64-dtor ./lab" + }, + "cmono-t0-2": { + "ucs_host_name": "sonic-ucs-m6-25", + "ucs_host": "172.26.235.72", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "cmono-t0-2-dut", + "scp_ip":"9.9.1.6", + "installer_mode":"sonic", + "ucs_tb": "cmono_t0", + "telnet_host": ["172.26.235.71"], + "telnet_port": ["2003"], + "telnet_details": ["172.26.235.71 2003"], + "dut_ssh": ["9.9.1.11"], + "topology": "t0", + "telnet_flag": "False", + "docker_prompt": "@sonic-ucs-m6-25", + "run_type_check": "run_tests", + "sonic_mgmt_container_202405": "cicd_prod_202405", + "sonic_mgmt_container_202405c": "cicd_prod_202405c", + "sonic_mgmt_container_202411": "cicd_prod_202411", + "sonic_mgmt_container_202501": "cicd_prod_202411", + "sonic_mgmt_container_202505": "cicd_prod_202505", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo cmono_t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo cmono_t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "mtfuji-spytest-plat": { + "ucs_host_name": "sonic-m6-platform", + "ucs_host": "172.25.168.41", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "platform-hardening-mtfuji-hw-dut", + "scp_ip":"172.25.168.41", + "installer_mode":"onie", + "ucs_tb": "plat_hard", + "telnet_host": ["172.25.40.43"], + "telnet_port": ["2043"], + "telnet_details": ["172.25.40.43 2043"], + "dut_ssh": ["172.25.43.89"], + "topology": "dev-cicd-b2b", + "telnet_flag": "False", + "docker_prompt": "@sonic-m6-platform", + "run_type_check": "mtfuji-spytest-plat_dev-cicd-b2b", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "onie_pre_install_commands": [[ + "ifconfig eth0 172.25.43.89 netmask 255.255.255.0", + "route add default gw 172.25.43.1" + ]], + "extra_onie_commands": [[ + "sudo config interface ip add eth0 172.25.43.89/24 172.25.43.1", + "sudo config save -y" + ]], + "skip_tests": "", + "skip_folder":"", + "allure_flag": "false", + "external_ucs": "none", + "collect_spytest_flag":"true", + "testbed_yaml": "/data/spytest_tb_files/spytest_fuji_1d_tgen.yaml", + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose --recursive $SANITY_SUITE_REPO -b $SANITY_SUITE_BRANCH ./", + "cd ./infra", + "python3 ./do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./do_hw_setup.py onie -i $BUILD_ID -t $TEST_BED" + ] + } + }, + "arctos-spytest-plat": { + "ucs_host_name": "sj04-sonic-ucs", + "ucs_host": "172.26.235.248", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "platform-hardening-arctos-hw-dut", + "scp_ip":"172.26.235.248", + "installer_mode":"sonic", + "ucs_tb": "plat_hard", + "telnet_host": ["172.26.235.71"], + "telnet_port": ["2039"], + "telnet_details": ["172.26.235.71 2039"], + "dut_ssh": ["172.26.235.238"], + "topology": "dev-cicd-b2b", + "telnet_flag": "False", + "docker_prompt": "@sj04-sonic-ucs", + "run_type_check": "arctos-spytest-plat_dev-cicd-b2b", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "sonic_pre_install_commands": [[ + "ifconfig eth0 172.26.235.238 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ]], + "sonic_post_install_commands": [[ + "ifconfig eth0 172.26.235.238 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ]], + "onie_pre_install_commands": [[ + "ifconfig eth0 172.26.235.238 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ]], + "extra_onie_commands": [[ + "sudo config interface ip add eth0 172.26.235.238/24 172.26.235.1", + "sudo config save -y" + ]], + + "skip_tests": "", + "skip_folder":"", + "allure_flag": "false", + "external_ucs": "none", + "collect_spytest_flag":"true", + "testbed_yaml": "/data/spytest_tb_files/arctos_dut.yaml", + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose --recursive $SANITY_SUITE_REPO -b $SANITY_SUITE_BRANCH ./", + "cd ./infra", + "python3 ./do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./do_hw_setup.py onie -i sonic -t $TEST_BED" + ] + } + }, + "lightning-spytest-plat": { + "ucs_host_name": "sonic-m6-platform", + "ucs_host": "172.25.168.41", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "platform-hardening-lightning-hw-dut", + "scp_ip":"172.25.168.41", + "installer_mode":"onie", + "ucs_tb": "plat_hard", + "telnet_host": ["172.26.235.90", "172.26.235.90"], + "telnet_port": ["2011", "2023"], + "telnet_details": ["172.26.235.90 2011", "172.26.235.90 2023"], + "dut_ssh": ["172.26.235.56", "172.26.235.57"], + "topology": "dev-cicd-b2b", + "telnet_flag": "False", + "docker_prompt": "@sonic-m6-platform", + "run_type_check": "lightning-spytest-plat_dev-cicd-b2b", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "onie_pre_install_commands": [[ + "ifconfig eth0 172.26.235.56 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ], + [ + "ifconfig eth0 172.26.235.57 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ]], + "extra_onie_commands": [[ + "sudo config interface ip add eth0 172.26.235.56/24 172.26.235.1", + "sudo config feature state lldp disabled", + "sudo config save -y" + ], + [ + "sudo config interface ip add eth0 172.26.235.57/24 172.26.235.1", + "sudo config feature state lldp disabled", + "sudo config save -y" + ]], + "skip_tests": "", + "skip_folder":"", + "allure_flag": "false", + "external_ucs": "none", + "collect_spytest_flag":"true", + "testbed_yaml": "/data/spytest_tb_files/lightning_lightning_b2b_platform_hardening.yaml", + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose --recursive $SANITY_SUITE_REPO -b $SANITY_SUITE_BRANCH ./", + "cd ./infra", + "python3 ./do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./do_hw_setup.py onie -i $BUILD_ID -t $TEST_BED" + ] + }, + "spytest_container_202511": "spytest-platform-hardening-202511", + "spytest_file_base_202511": "202511", + "spytest_container_202605": "spytest-platform-hardening-202605", + "spytest_file_base_202605": "202605" + }, + "t2-m6-30-titan": { + "ucs_host_name": "sonic-TTAN-ucs-m6-30", + "ucs_host": "172.23.107.5", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "titan-t2-1-dut", + "scp_ip":"8.8.2.10", + "installer_mode":"sonic", + "ucs_tb": "ttn-t2", + "telnet_host": ["172.23.107.3"], + "telnet_port": ["2004"], + "telnet_details": ["172.23.107.3 2004"], + "dut_ssh": ["8.8.2.10"], + "topology": "t2", + "telnet_flag": "False", + "docker_prompt": "@sonic-ttan-ucs-m6-30", + "run_type_check": "run_tests", + "sonic_mgmt_container_202505": "cicd-prod-2025", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "", + "skip_folder": "", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo ttn-t2 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo ttn-t2 ./lab", + "mtu_hack": { + "vms_count": 72 + } + }, + + "t0-m6-17-1-titan": { + "ucs_host_name": "sonic-m6-17-1", + "ucs_host": "172.27.179.18", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "titan-t0-dut", + "scp_ip":"3.3.1.23", + "installer_mode":"sonic", + "ucs_tb": "titan-t0", + "telnet_host": ["172.27.179.12"], + "telnet_port": ["2003"], + "telnet_details": ["172.27.179.12 2003"], + "dut_ssh": ["3.3.1.23"], + "topology": "t0", + "telnet_flag": "False", + "docker_prompt": "@titan-ucs-m6-17-1", + "run_type_check": "run_tests", + "sonic_mgmt_container_202505": "cicd-prod-2025", + "sonic_mgmt_container_202511": "cicd_prod_202511_latest", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "skip_tests": "platform_tests/test_advanced_reboot.py snappi_tests/cisco/test_ecn_marking_cisco8000.py", + "skip_folder": "ixia pfc_asym", + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "", + "skip_folder": "", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo titan-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo titan-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "superbolt-t0-m6-2-10": { + "ucs_host_name": "sonic-m6-02-10", + "ucs_host": "172.25.168.48", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "bolt-t0-dut", + "scp_ip":"5.5.5.2", + "installer_mode":"sonic", + "ucs_tb": "bolt-t0", + "telnet_host": ["172.25.168.52"], + "telnet_port": ["2004"], + "telnet_details": ["172.25.168.52 2004"], + "dut_ssh": ["5.5.5.3"], + "topology": "t0", + "telnet_flag": "False", + "docker_prompt": "@sonic-m6-02-10", + "run_type_check": "run_tests", + "sonic_mgmt_container_202511": "cicd_prod_202511", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "", + "skip_folder": "", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo bolt-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo bolt-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "t0-m6-41-titan": { + "ucs_host_name": "sonic-TTAN-ucs-m6-41", + "ucs_host": "172.23.107.7", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "titan-t0-dut", + "scp_ip":"8.8.2.162", + "installer_mode":"sonic", + "ucs_tb": "ttan-t0", + "telnet_host": ["172.23.107.3"], + "telnet_port": ["2009"], + "telnet_details": ["172.23.107.3 2009"], + "dut_ssh": ["8.8.2.162"], + "topology": "t0", + "telnet_flag": "False", + "docker_prompt": "@sonic-ttan-ucs-m6-41", + "run_type_check": "run_tests", + "sonic_mgmt_container_202505": "cicd-202505-sonic-mgmt", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y --skip-package-migration", + "sudo show boot" + ], + "extra_sonic_commands": ["" ,"sudo sonic-installer cleanup -y"], + "skip_tests": "", + "skip_folder": "", + "remove_topo_cmd": "./testbed-cli.sh -k ceos remove-topo ttan-t0 ./lab", + "add_topo_cmd": "./testbed-cli.sh -k ceos add-topo ttan-t0 ./lab", + "mtu_hack": { + "vms_count": 4 + } + }, + "superbolt-titan-spytest-plat": { + "ucs_host_name": "sonic-m6-platform", + "ucs_host": "172.25.168.41", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "platform-hardening-superbolt-hw-dut", + "scp_ip":"172.25.168.41", + "installer_mode":"onie", + "ucs_tb": "plat_hard", + "telnet_host": ["172.25.168.52", "172.25.168.52"], + "telnet_port": ["2003", "2002"], + "telnet_details": ["172.25.168.52 2003", "172.25.168.52 2002"], + "dut_ssh": ["172.25.168.104", "172.25.168.105"], + "topology": "dev-cicd-b2b", + "telnet_flag": "False", + "docker_prompt": "@sonic-m6-platform", + "run_type_check": "superbolt-titan-spytest-plat_dev-cicd-b2b", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "onie_pre_install_commands": [[ + "ifconfig eth0 172.25.168.104 netmask 255.255.255.0", + "route add default gw 172.25.168.1" + ], + [ + "ifconfig eth0 172.25.168.105 netmask 255.255.255.0", + "route add default gw 172.25.168.1" + ]], + "extra_onie_commands": [[ + "sudo rm /usr/share/sonic/device/x86_64-8122_64ehf_o-r0/default_sku", + "sudo bash -c 'echo \"Cisco-8122-64x800GS2 l1\" > /usr/share/sonic/device/x86_64-8122_64ehf_o-r0/default_sku'", + "sudo bash -c 'sonic-cfggen -H -k Cisco-8122-64x800GS2 --preset l1 > /etc/sonic/config_db.json'", + "sudo config reload -fy", + "sleep 90", + "sudo config interface ip add eth0 172.25.168.104/24 172.25.168.1", + "sudo config feature state lldp disabled", + "sudo config save -y" + ], + [ + "sudo config interface ip add eth0 172.25.168.105/24 172.25.168.1", + "sudo config feature state lldp disabled", + "sudo config save -y" + ]], + "skip_tests": "", + "skip_folder":"", + "allure_flag": "false", + "external_ucs": "none", + "collect_spytest_flag":"true", + "testbed_yaml": "/data/spytest_tb_files/lightning_lightning_b2b_platform_hardening.yaml", + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose --recursive $SANITY_SUITE_REPO -b $SANITY_SUITE_BRANCH ./", + "cd ./infra", + "python3 ./do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./do_hw_setup.py onie -i $BUILD_ID -t $TEST_BED" + ] + } + }, + "mtfuji-cmono-spytest-plat": { + "ucs_host_name": "sonic-m6-platform", + "ucs_host": "172.25.168.41", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "platform-hardening-fuji-cmono-hw-dut", + "scp_ip":"172.25.168.41", + "installer_mode":"onie", + "ucs_tb": "plat_hard", + "telnet_host": ["172.26.235.90", "172.26.235.90"], + "telnet_port": ["2020", "2016"], + "telnet_details": ["172.26.235.90 2020", "172.26.235.90 2016"], + "dut_ssh": ["172.26.235.155", "172.26.235.59"], + "topology": "dev-cicd-b2b", + "telnet_flag": "False", + "docker_prompt": "@sonic-m6-platform", + "run_type_check": "mtfuji-cmono-spytest-plat_dev-cicd-b2b", + "sonic_installer_commands":[ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "onie_pre_install_commands": [[ + "ifconfig eth0 172.26.235.155 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ], + [ + "ifconfig eth0 172.26.235.59 netmask 255.255.255.0", + "route add default gw 172.26.235.1" + ]], + "extra_onie_commands": [[ + "sudo config interface ip add eth0 172.26.235.155/24 172.26.235.1", + "sudo config feature state lldp disabled", + "sudo config save -y" + ], + [ + "sudo config interface ip add eth0 172.26.235.59/24 172.26.235.1", + "sudo config feature state lldp disabled", + "sudo config save -y" + ]], + "skip_tests": "", + "skip_folder":"", + "allure_flag": "false", + "external_ucs": "none", + "collect_spytest_flag":"true", + "testbed_yaml": "/data/spytest_tb_files/mtfuji_cmono_b2b_platform_hardening.yaml", + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose --recursive $SANITY_SUITE_REPO -b $SANITY_SUITE_BRANCH ./", + "cd ./infra", + "python3 ./do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./do_hw_setup.py onie -i $BUILD_ID -t $TEST_BED" + ] + }, + "spytest_container_202511": "spytest-platform-hardening-202511", + "spytest_file_base_202511": "202511", + "spytest_container_202605": "spytest-platform-hardening-202605", + "spytest_file_base_202605": "202605" + }, + "titan-2leaf-2spine-spytest": { + "ucs_host_name": "sonic-ucs-m7-f8", + "ucs_host": "172.25.164.55", + "ucs_username": "sonic", + "ucs_password": "roZes@123", + "mth_tb": "titan-2by2-hw-dut", + "scp_ip": "172.25.164.55", + "installer_mode": "sonic", + "ucs_tb": "titan-2by2", + "deploy_flag": "False", + "telnet_host": ["172.25.164.31", "172.25.164.31"], + "telnet_port": ["2011", "2010"], + "telnet_details": ["172.25.164.31 2011", "172.25.164.31 2010"], + "dut_ssh": ["172.25.164.42", "172.25.164.43"], + "topology": "dev-cicd-b2b", + "telnet_flag": "False", + "docker_prompt": "@sonic-ucs-m7-f8", + "run_type_check": "titan-2leaf-2spine-spytest_dev-cicd-b2b", + "sonic_installer_commands": [ + "sudo show boot", + "sudo sonic-installer install $image_url -y", + "sudo show boot" + ], + "skip_tests": "", + "skip_folder": "", + "allure_flag": "false", + "external_ucs": "none", + "collect_spytest_flag": "true", + "testbed_yaml": "/data/spytest_tb_files/titan_2by2_spytest.yaml", + "testbed-setup": { + "cmd": [ + "set -e", + "git clone --progress --verbose --recursive $SANITY_SUITE_REPO -b $SANITY_SUITE_BRANCH ./", + "cd ./infra", + "python3 ./do_hw_setup.py fetch-pipeline -t $TEST_BED", + "python3 ./do_hw_setup.py onie -i sonic -t $TEST_BED" + ] + }, + "spytest_container_202511": "spytest-platform-hardening-202511", + "spytest_file_base_202511": "spytest/macsec-platform-hardening-202511" + } + }, + "testbed-streams" : { + "t1-m6-22-m64": "None", + "t1-m6-37-tornado": "None", + "t0-m6-47-tornado": "None", + "t1-m5-5-cmono": "None", + "t0-m6-16-MtFuji": "None", + "t1-m6-18-MtFuji": [ + "azure.202311.smartswitch", + "cisco.202311.smartswitch", + "cisco.master.signed", + "cisco.202505.1.signed" + ], + "t1-topo5": [ + "azure.202311.smartswitch", + "cisco.202311.smartswitch", + "cisco.master.smartswitch", + "cisco.202405.signed.smartswitch" + ], + "t0-m5-3-m64": [ + "cisco.202205.2", + "cisco.202205.3", + "cisco.202205.2.T0", + "cisco.202205.main", + "cisco.202205.main.tortuga", + "cisco.202305.manageability", + "cisco.202305.1.tortuga", + "cisco.202305.1.0.tortuga", + "cisco.202305.1", + "cisco.202305.1.signed", + "cisco.202405.signed", + "cisco.202311.1", + "cisco.202311.2", + "cisco.202305.1.tortuga.v4", + "cisco.202405cz.1.1.release", + "cisco.202305.1.tortuga.mfg.v4" + ], + "t0-m6-2-m64": [ + "cisco.202405.signed", + "cisco.202405.unsigned", + "cisco.202405.1.unsigned", + "cisco.202405.1.signed", + "cisco.202405.1.msft.signed", + "cisco.202405.2.signed", + "azure.202411.1.signed", + "azure.202411.signed", + "cisco.202411.1.1.release", + "cisco.202411.1.1.ztp.release", + "cisco.202411.1.signed", + "cisco.202411.1.unsigned", + "cisco.202411.signed", + "cisco.202501.msft.signed", + "azure.202501.1.0.release", + "azure.202501.msft.signed", + "cisco.202505.1.signed", + "cisco.202505.signed", + "azure.202505.1.0.release", + "azure.202505.1.1.release", + "azure.202505.1.1.ztp.release", + "azure.202505.1.signed", + "azure.202505.signed", + "azure.master.1.1.release", + "azure.master.signed", + "cisco.master.1.1.release", + "cisco.master.signed", + "cisco.202405cz.2.1.ztp.release", + "cisco.202405c.2", + "c-master.ztp" + ], + "t0-m6-3-m64": "None", + "b2b-tu-2-carib": [ + "cisco.202405c.2.tortuga.carib.no-agents" + ], + "b2b-tu-2-siren": [ + "cisco.202405c.2.tortuga.siren.no-agents" + ], + "b2b-tu-2-carib2": [ + "cisco.202405c.2.tortuga.carib.no-agents" + ], + "b2b-tu-2-siren2": [ + "cisco.202405c.2.tortuga.siren.no-agents" + ], + "b2b-tu-2-siren3": [ + "cisco.202405c.2.tortuga.siren.no-agents" + ], + "apple-ipfabric-m64": [ + "cisco.202405c.ztp", + "c-master.ztp", + "cisco.202405c.2.2.5.ztp.apple", + "cisco.202405cz.2.2.ztp.release" + ], + "b2b-ucs-l9-gamut0": [ + "cisco.202505c.tortuga.gamut.no-agents" + ], + "b2b-ucs-l9-gamut1": [ + "cisco.202505c.tortuga.gamut.no-agents" + ], + "b2b-ucs-l9-gamut2": [ + "cisco.202505c.tortuga.gamut.no-agents" + ], + "b2b-ucs-l9-gamut3": [ + "cisco.202505c.tortuga.gamut.no-agents" + ], + "b2b-tu-2-siren-optics": [ + "cisco.202305.1.tortuga.siren.no-agents", + "cisco.202305.1.tortuga.siren.no-agents.v4", + "cisco.202305.1.tortuga.siren", + "cisco.202305.1.tortuga.siren.v4", + "cisco.202305.1.tortuga.siren.mfg.v4" + ], + "b2b-tu-2-carib-optics":[ + "cisco.202305.1.tortuga.carib.no-agents", + "cisco.202305.1.tortuga.carib.no-agents.v4", + "cisco.202305.1.tortuga.carib" + ], + "forwarding": [ + "cisco.202405c.2.tortuga.carib.no-agents", + "cisco.202405c.2.tortuga.siren.no-agents" + ], + "mathilda-dualtor-m5-6": "None", + "dualtor-m6-30-tornado": "None", + "dualtor-m6-31-tornado": "None", + "dualtor-m6-42-tornado": "None", + "b2b-m3-2-m64": "None", + "b2b-m3-2-croc": "None", + "b2b-m3-2-cmono": "None", + "t0-m6-8-croc": "None", + "t1-m4-3-croc": "None", + "rdma-m3-2-m64": "None", + "ixia-m5-14-lighting": "None", + "ixia-m5-14-churchill": "None", + "t0-m6-13-cmono": "None", + "t1-m5-11-hbm": "None", + "superbolt-t0-m6-2-10": "None", + "t1-m5-2-m64": "None", + "t1-m6-27-m64": "None", + "t1-m6-26-cmono": "None", + "t1-m3-4-cmono": "None", + "t0-m6-28-superbolt": "None", + "t0-m6-24-lightning": "None", + "t0-m6-20-lightning": "None", + "t1-m5-16-lightning": [ + "cisco.202405.signed", + "cisco.202405.unsigned", + "cisco.202405.1.unsigned", + "cisco.202405.1.signed", + "cisco.202405.1.msft.signed", + "cisco.202405.2.signed", + "azure.202411.1.signed", + "azure.202411.signed", + "cisco.202411.1.1.release", + "cisco.202411.1.1.ztp.release", + "cisco.202411.1.signed", + "cisco.202411.1.unsigned", + "cisco.202411.signed", + "cisco.202501.msft.signed", + "azure.202501.1.0.release", + "azure.202501.msft.signed", + "cisco.202505.1.signed", + "cisco.202505.signed", + "azure.202505.1.0.release", + "azure.202505.1.1.release", + "azure.202505.1.1.ztp.release", + "azure.202505.1.signed", + "azure.202505.signed", + "azure.master.1.1.release", + "azure.master.signed", + "cisco.master.1.1.release", + "cisco.master.signed", + "cisco.202405cz.2.1.ztp.release", + "cisco.202405c.2", + "cisco.202505.oci.unsigned" + ], + "t1-m6-23-superbolt": "None", + "b2b-m5-14-superbolt": "None", + "b2b-m5-14-lightning": "None", + "b2b-m5-16-tornado": "None", + "t0-m6-1-m64": "None", + "t0-m6-33-laguna": [ + "cisco.202405c.2.tortuga.laguna.no-agents", + "cisco.202405c.2.tortuga.laguna", + "cisco.202405c.2.tortuga.laguna.hwqual" + ], + "aaa14-t2": "None", + "mathilda-dualtor-t0-1": "None", + "cmono-t0-2": "None", + "mtfuji-spytest-plat": [ + "cisco.202505.1.signed" + ], + "lightning-spytest-plat": [ + "cisco.202505.1.signed", + "cisco.202511.1.signed", + "cisco.202605.signed" + ], + "arctos-spytest-plat": [ + "cisco.202505.1.signed" + ], + "t2-m6-30-titan": "None", + "t0-m6-41-titan": "None", + "t0-m6-17-1-titan": "None", + "superbolt-titan-spytest-plat": [ + "cisco.202511.signed" + ], + "mtfuji-cmono-spytest-plat": [ + "cisco.202505.1.signed", + "cisco.202511.1.signed", + "cisco.202605.signed" + ], + "titan-2leaf-2spine-spytest": [ + "cisco.202511.2.signed" + ] + }, + "testbeds": { + "t0" : ["t0-m5-3-m64", "t0-m6-13-cmono", "t0-m6-8-croc", "t0-m6-16-MtFuji", "t0-m6-28-superbolt", "t0-m6-20-lightning", "t0-m6-1-m64", "t0-m6-33-laguna", "cmono-t0-2", "t0-m6-41-titan", "t0-m6-17-1-titan", "superbolt-t0-m6-2-10", "t0-m6-47-tornado"], + "t1" : ["t1-m6-22-m64", "t1-m5-5-cmono", "t1-topo5", "t1-m6-18-MtFuji", "t1-m6-27-m64", "t1-m4-3-croc", "t1-m5-2-m64", "t1-m3-4-cmono", "t1-m6-23-superbolt", "t1-m5-16-lightning", "t1-m5-11-hbm", "t1-m6-26-cmono", "t1-m6-37-tornado"], + "t2" : ["aaa14-t2", "t2-m6-30-titan"], + "dualtor" : ["dualtor-m6-30-tornado", "dualtor-m6-31-tornado", "dualtor-m6-42-tornado", "mathilda-dualtor-t0-1", "mathilda-dualtor-m5-6"], + "dev-cicd-b2b": ["mtfuji-spytest-plat", "lightning-spytest-plat", "arctos-spytest-plat", "superbolt-titan-spytest-plat", "mtfuji-cmono-spytest-plat", "apple-ipfabric-m64", "titan-2leaf-2spine-spytest"] + }, + "testbed_image_ucs_map" : { + "t1-m6-22-m64":"ucs_m6_22", + "t1-m6-37-tornado":"ucs_m6_37", + "t0-m6-47-tornado":"ucs_m6_47", + "t0-m5-3-m64":"ucs_m3_1", + "t1-m5-5-cmono":"ucs_m5_5", + "t0-m6-16-MtFuji":"ucs_m6_16", + "t1-m6-18-MtFuji":"ucs_m6_18", + "t1-topo5":"ucs_m6_19", + "t0-m6-2-m64": "ucs_m6_2", + "t0-m6-3-m64": "ucs_m6_3", + "b2b-tu-2-carib":"tu2-carib-siren", + "b2b-tu-2-carib2":"tu2-carib-siren", + "b2b-tu-2-siren":"tu2-carib-siren", + "b2b-tu-2-siren2":"tu2-carib-siren", + "b2b-tu-2-siren3":"tu2-carib-siren", + "b2b-ucs-l9-gamut0":"ucs-l9", + "b2b-ucs-l9-gamut1":"ucs-l9", + "b2b-ucs-l9-gamut2":"ucs-l9", + "b2b-ucs-l9-gamut3":"ucs-l9", + "b2b-tu-2-siren-optics": "tu2-carib-siren", + "b2b-tu-2-carib-optics": "tu2-carib-siren", + "apple-ipfabric-m64": "ucs_m6_49", + "b2b-m3-2-m64": "ucs_m3_2", + "b2b-m3-2-croc": "ucs_m3_2", + "b2b-m3-2-cmono": "ucs_m3_2_sonic", + "rdma-m3-2-m64": "ucs_m3_2", + "ixia-m5-14-lighting": "ucs_m5_14", + "ixia-m5-14-churchill": "ucs_m5_14", + "t0-m6-13-cmono":"ucs_m6_13", + "t1-m5-11-hbm":"ucs_m5_11", + "t0-m6-8-croc": "ucs_m6_8", + "t1-m4-3-croc": "ucs_m4_3", + "t1-m5-2-m64": "ucs_m5_2", + "t1-m6-27-m64": "ucs_m6_27", + "t1-m3-4-cmono": "ucs_m3_4", + "t1-m6-26-cmono": "ucs_m6_26", + "t0-m6-28-superbolt": "ucs_m5_16", + "t1-m6-23-superbolt": "ucs_m5_16", + "t0-m6-20-lightning": "ucs_m5_16", + "t1-m5-16-lightning": "ucs_m5_16", + "b2b-m5-14-superbolt": "ucs_m5_14", + "b2b-m5-14-lightning": "ucs_m5_14", + "b2b-m5-16-tornado": "ucs_m5_16", + "t0-m6-33-laguna": "ucs_m6_33", + "t0-m6-1-m64": "ucs_m4_3", + "aaa14-t2": "ucs_m5_10", + "mathilda-dualtor-m5-6": "ucs_m6_30", + "dualtor-m6-30-tornado": "ucs_m6_30", + "dualtor-m6-31-tornado": "ucs_m6_30", + "dualtor-m6-42-tornado": "ucs_m6_30", + "mathilda-dualtor-t0-1": "ucs_m6_5", + "cmono-t0-2":"ucs_m6_25", + "t0-m6-29-tornado": "ucs_m6_25", + "t0-m6-24-lightning": "ucs_m5_16", + "mtfuji-spytest-plat": "m6_platform", + "lightning-spytest-plat": "m6_platform", + "arctos-spytest-plat": "ucs_arctos", + "t2-m6-30-titan": "ucs_ttan_m6_30", + "t0-m6-41-titan": "ucs_ttan_m6_41", + "t0-m6-17-1-titan":"ucs_m6_17_1_titan", + "superbolt-titan-spytest-plat": "m6_platform", + "mtfuji-cmono-spytest-plat": "m6_platform", + "superbolt-t0-m6-2-10": "ucs_m6_02_bolt", + "titan-2leaf-2spine-spytest": "ucs_titan_2by2" + }, + "file_server_dict" : { + "ucs_m3_1" : { + "host" : "sonic-ucs-m3-1", + "username" : "rraghav", + "password" : "roZes@123", + "ip" : "172.27.147.152", + "scp_prompt" : "rraghav@1.74.23.7:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_22": { + "host" : "sonic-ucs-m6-22", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.72.33.6", + "scp_prompt" : "sonic@1.72.33.6:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_37": { + "host" : "sonic-ucs-m6-37", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "9.9.3.29", + "scp_prompt" : "sonic@9.9.3.29:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_47": { + "host" : "sonic-ucs-m6-47", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "9.9.12.1", + "scp_prompt" : "sonic@9.9.12.1:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m3_2": { + "host" : "sonic-ucs-m3-2", + "username" : "rraghav", + "password" : "roZes@123", + "ip" : "1.72.33.2", + "scp_prompt" : "rraghav@1.72.33.2:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m3_2_sonic": { + "host" : "sonic-ucs-m3-2", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.74.23.250", + "scp_prompt" : "sonic@1.74.23.250:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m4_2": { + "host" : "sonic-ucs-m4-2", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.75.44.10", + "scp_prompt" : "sonic@1.75.44.10:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m5_5": { + "host" : "sonic-ucs-m5-5", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.75.44.102", + "scp_prompt" : "sonic@1.75.44.102:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_19": { + "host" : "sonic-ucs-m6-19", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "7.7.7.2", + "scp_prompt" : "sonic@7.7.7.2:/home/sonic/images/", + "images_folder" : "/home/sonic/images", + "wget" : "wget" + }, + "ucs_m6_16": { + "host" : "sonic-ucs-m6-16", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.2.24.104", + "scp_prompt" : "sonic@1.2.24.104:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_18": { + "host" : "sonic-ucs-m6-18", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.2.22.10", + "scp_prompt" : "sonic@1.2.24.135:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_2": { + "host" : "sonic-ucs-m6-2", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.75.47.1", + "scp_prompt" : "sonic@1.75.47.1:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_3": { + "host" : "sonic-ucs-m6-3", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.75.44.32", + "scp_prompt" : "sonic@1.75.44.32:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_13": { + "host" : "sonic-ucs-m6-13", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.71.53.193", + "scp_prompt" : "sonic@1.71.53.193:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m5_11": { + "host" : "sonic-ucs-m5-11", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.71.53.71", + "scp_prompt" : "sonic@1.71.53.71:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_30": { + "host" : "sonic-ucs-m6-30", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "9.9.2.160", + "scp_prompt" : "sonic@9.9.2.160:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "tu2-carib-siren": { + "host" : "tu2", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "10.29.158.30", + "scp_prompt" : "sonic@tu2:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs-l9": { + "host" : "gamut-ucs-l9", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "172.25.168.181", + "scp_prompt" : "sonic@gamut-ucs-l9:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_8": { + "host" : "sonic-ucs-m6-8", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.76.26.50", + "scp_prompt" : "sonic@1.76.26.50:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m4_3": { + "host" : "sonic-ucs-m4-3", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.75.44.20", + "scp_prompt" : "sonic@1.75.44.20:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m5_2": { + "host" : "sonic-ucs-m5-2", + "username" : "lab", + "password" : "roZes@123", + "ip" : "1.74.23.14", + "scp_prompt" : "lab@1.74.23.14:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_27": { + "host" : "sonic-ucs-m6-27", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "9.9.1.8", + "scp_prompt" : "sonic@9.9.1.8:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m3_4": { + "host" : "sonic-ucs-m3-4", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.74.25.13", + "scp_prompt" : "sonic@1.74.25.13:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m6_26": { + "host" : "sonic-ucs-m6-26", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "9.9.1.7", + "scp_prompt" : "sonic@9.9.1.7:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m5_16": { + "host" : "sonic-ucs-m5-16", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "4.164.1.220", + "scp_prompt" : "sonic@4.164.1.220:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "wget" + }, + "ucs_m5_14": { + "host" : "sonic-ucs-m5-14", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "1.3.103.20", + "scp_prompt" : "sonic@1.3.103.20:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_33": { + "host" : "sonic-ucs-m6-33", + "username" : "sonic", + "password" : "roZes@123", + "ip" : "9.9.3.51", + "scp_prompt" : "sonic@9.9.3.51:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m5_10": { + "host": "sonic-ucs-m5-10", + "ip": "172.27.145.101", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.27.145.101:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_5": { + "host": "sonic-ucs-m6-5", + "ip": "1.74.23.137", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@1.74.23.137:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_25": { + "host": "sonic-ucs-m6-25", + "ip": "9.9.1.6", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@9.9.1.6:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "m6_platform": { + "host": "sonic-m6-platform", + "ip": "172.25.168.41", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.25.168.41:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_ttan_m6_30": { + "host": "sonic-TTAN-ucs-m6-30", + "ip": "172.23.107.5", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.23.107.5:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_ttan_m6_41": { + "host": "sonic-TTAN-ucs-m6-41", + "ip": "172.23.107.7", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.23.107.7:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_17_1_titan": { + "host": "sonic-m6-17-1", + "ip": "172.27.179.18", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.27.179.18:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_arctos": { + "host": "sj04-sonic-ucs", + "ip": "172.26.235.248", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.26.235.248:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_02_bolt": { + "host": "sonic-m6-02-10", + "ip": "5.5.5.2", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@5.5.5.2:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_m6_49": { + "host": "sonic-ucs-m6-49", + "ip": "172.25.168.23", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@sonic-ucs-m6-49:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + }, + "ucs_titan_2by2": { + "host": "sonic-ucs-m7-f8", + "ip": "172.25.164.55", + "username": "sonic", + "password": "roZes@123", + "scp_prompt" : "sonic@172.25.164.55:/var/www/html/IMAGES", + "images_folder" : "/var/www/html/IMAGES", + "wget" : "http_proxy= https_proxy= wget" + } + } +} diff --git a/infra/create_sonic_t1_ads.py b/infra/create_sonic_t1_ads.py new file mode 100755 index 00000000000..7db5e95cd19 --- /dev/null +++ b/infra/create_sonic_t1_ads.py @@ -0,0 +1,553 @@ +#!/router/bin/python3.8.2_mcpre-v1 + +# Creates the t1 topology using vxr.py +# Create admin user in vEOS vm +# Create testbed file based on vxr_ports +# Upload t1 specific files to sonic mgmt container +# Change DUT password and set mgmt ip address +# Start docker container, deploy DUT minigraph +# Replace DUT Mgmt Address +# Reload DUT config +# Add vEOS config +# +# Usage: ./create_sonic_t1_ads.py -t sonic_t1_topo.yaml -c +# -t Topology file for PyVxr +# -c Clean pre-existing sim +# +# After the script is run – you can log into the sonic dut (admin/cisco123 – I change the password to cisco123) and check for bgp summary – both v4 and v6. +# + +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-i', '--input_file', type=str, help='Input port file', + required=False,default=None) + parser.add_argument('-f', '--topo_yaml', type=str, help='topo yaml file', + required=True,default=None) + parser.add_argument('-t', '--topo_type', type=str, help='topo type', + required=True,default='t1') + parser.add_argument('-p', '--dut_passwd', type=str, help='Dut password, when it is different from YourPaSsWoRd', + required=False,default="YourPaSsWoRd") + parser.add_argument('-u', '--dut_uname', type=str, help='Dut username, when it is different from admin', + required=False,default="admin") + parser.add_argument('-c', '--clean_sim', action='store_true', help='Clean simulation', + default=False) + return parser + +def git_update(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("sudo ip -6 address add fc0b::2/64 dev eth0 \n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("cd sonic-test \n") + buff = '' + while not buff.endswith(':~/sonic-test$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("git config --global user.email 'sonic-test@cisco.com'; git config --global user.name 'Sonic Test'; git stash; git pull; git checkout move-master-ahead-011321; git stash apply\n") + buff = '' + while not buff.endswith(':~/sonic-test$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(20) + + ssh.close() + +def deploy_mg(data,base_topo_file): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("docker container start docker-sonic-mgmt \n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('python TestbedProcessing.py -i {} \n'.format(base_topo_file)) + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv gen-mg docker-ptf lab group_vars/lab/secrets.yml\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + finally: + print(buff) + + ssh.close() + +def vEOS_inital_cfg(data,vEOS_count): + # Specify the connection timeout in seconds for blocking operations, like connection attempt + connection_timeout = 5 + + # Specify a timeout in seconds. Read until the string is found or until the timeout has passed + reading_timeout = 5 + base = 100 + + for i in range (1,vEOS_count+1): + veos1_host = data['veos'+ str(i)]['HostAgent'] + veos1_port = data['veos'+str(i)]['serial0'] + + print('Adding admin password for VM0{}:'.format(str(base))) + base += 1 + add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout) + + +def create_testbed_file(data,base_topo_file,vEOS_count): + input_file = base_topo_file + with open(input_file) as f: + tdata = yaml.load(f, Loader=yaml.FullLoader) + f.close() + + tdata['devices']['sherman-01']['ansible']['ansible_host'] = data['sonic_dut']['xr_mgmt_ip'] + tdata['devices']['sherman-01']['ansible']['ansible_ssh_user'] = data['sonic_dut']['uname'] + tdata['testbed']['docker-ptf']['ansible']['ansible_host'] = data['ptf']['xr_mgmt_ip'] + '/24' + tdata['testbed']['docker-ptf']['ptf_ip'] = data['ptf']['xr_mgmt_ip'] + '/24' + base = 100 + + for i in range (1,vEOS_count+1): + tdata['veos']['vms_1']['VM0' + str(base)]['ansible_host'] = data['veos'+str(i)]['xr_mgmt_ip'] + base +=1 + + with open(input_file,'w') as f: + yaml.dump(tdata,f) + f.close() + +def change_dut_passwd(data): + host = data['sonic_dut']['HostAgent'] + port = data['sonic_dut']['xr_redir22'] + user = data['sonic_dut']['uname'] + passwd = data['sonic_dut']['passwd'] + #passwd = "cisco123" + new_passwd = "cisco123" + mgmt_ip = data['sonic_dut']['xr_mgmt_ip'] + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + try: + ssh.connect(host, port, user, passwd) + except paramiko.ssh_exception.AuthenticationException: + ssh.connect(host, port, user, new_passwd) + + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp) + + # Ssh and wait for the password prompt. + chan.send('sudo passwd {}\n'.format(user)) + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while buff.find(' successfully') < 0 : + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + if (' successfully') in buff: + print("Password change successful") + else: + print("Password change failed") + + time.sleep(3) + chan.send('sudo config interface ip add eth0 {}/24 192.168.122.1\n'.format(mgmt_ip)) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config interface ip add eth0 FC00:2::32/64 fc00:2::1\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config save -y\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo cp /etc/sonic/config_db.json /tmp/config_db.json\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + ssh.close() + +def run_python_script(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, port, user, passwd) + chan = ssh.invoke_shell() + for cmd in cmd_list: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + print("Response : %s" % resp.decode("ascii")) + + ssh.close() + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + for cmd in cmd_list: + ssh.connect(host, port, user, passwd) + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("ascii").strip() + error = stderr.read().decode("ascii") + print(out) + if error: + print('There was an error pulling the runtime: {}'.format(error)) + ssh.close() + +def add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout): + tn = telnetlib.Telnet(veos1_host,veos1_port, connection_timeout) + + # tn.read_until(b"Username: ") + # tn.write(user.encode('ascii') + b"\n") + # if password: + # tn.read_until(b"Password: ") + # tn.write(password.encode('ascii') + b"\n") + + tn.write(b"enable\n") + time.sleep(1) + tn.write(b"conf t\n") + time.sleep(1) + tn.write(b"username admin secret 123456\n") + time.sleep(1) + tn.write(b"aaa root secret 123456\n") + time.sleep(1) + tn.write(b"end\n") + time.sleep(1) + tn.write(b"copy running-config startup-config\n") + time.sleep(1) + tn.close() + +def download_mg(data,topo_type): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.get('/home/vxr/sonic-test/sonic-mgmt/ansible/minigraph/sherman-01.{}.xml'.format(topo_type), 'minigraph.xml') + ftp_client.close() + ssh.close() + +def upload_tb_files(data,topo_type,base_topo_file): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + if topo_type == 't0': + ftp_client.put('testbed_add_vm_topology.yml','sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('veos.yml','sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + ftp_client.put(base_topo_file,'sonic-test/sonic-mgmt/ansible/{}'.format(base_topo_file)) + ftp_client.put('t0-leaf.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t0-leaf.j2') + else: + ftp_client.put('testbed_add_vm_topology.yml','sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('t1-spine.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2') + ftp_client.put('t1-tor.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2') + ftp_client.put('veos.yml','sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + ftp_client.put(base_topo_file,'sonic-test/sonic-mgmt/ansible/{}'.format(base_topo_file)) + ftp_client.put('topo_t1.yml', 'sonic-test/sonic-mgmt/ansible/vars/topo_t1.yml') + ftp_client.close() + +def replace_dut_mgmt_address(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd']) + ftp_client=ssh.open_sftp() + ftp_client.get('/tmp/config_db.json','config_db_current.json') + ftp_client.close() + ssh.close() + + with open('config_db_current.json') as cfg_file: + cfg_data = json.load(cfg_file) + current_mgm_intf = cfg_data["MGMT_INTERFACE"] + current_mac = cfg_data["DEVICE_METADATA"]["localhost"]["mac"] + print(cfg_data["MGMT_INTERFACE"]) + cfg_file.close() + + with open('config_db.json') as cfg_file: + cfg_data = json.load(cfg_file) + cfg_file.close() + + with open('config_db.json','w') as cfg_file: + cfg_data["MGMT_INTERFACE"] = current_mgm_intf + cfg_data["DEVICE_METADATA"]["localhost"]["mac"] = current_mac + json.dump(cfg_data, cfg_file, indent=4) + cfg_file.close() + + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd']) + ftp_client=ssh.open_sftp() + ftp_client.put('config_db.json','/tmp/config_db_new.json') + ftp_client.put('minigraph.xml', '/tmp/minigraph.xml') + ftp_client.close() + ssh.close() + +def reload_dut_with_newCFG(data): + cmd_list = list() + cmd_list.append('sudo cp /tmp/config_db_new.json /etc/sonic/config_db.json\n') + cmd_list.append('sudo cp /tmp/minigraph.xml /etc/sonic/minigraph.xml\n') + cmd_list.append('sudo reboot\n') + run_exec_cmds(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd'], cmd_list) + +def add_ptf_backplane_addr(data): + cmd_list = list() + cmd_list.append('ip address add 10.10.246.254/24 dev eth32') + cmd_list.append('ip -6 address add fc0a::ff/64 dev eth32') + cmd_list.append('ip -6 address add fc0b::1/64 dev mgmt') + cmd_list.append('for i in {0..32}; do /sbin/ifconfig eth$i mtu 9216 up; done') + run_exec_cmds(data['ptf']['HostAgent'], data['ptf']['xr_redir22'], 'root', 'root', cmd_list) + +def add_vEOS_cfg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv -m veos add-topo docker-ptf password.txt\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + print(resp.decode("ascii")) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + #finally: + # print(buff) + + ssh.close() + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] + clean_sim = args['clean_sim'] + dut_passwd = args['dut_passwd'] + dut_uname = args['dut_uname'] + topo_type = args['topo_type'] + if topo_type == 't0': + base_topo_file = 'testbed-sherman-t0.yaml' + os.system("cp sonic_t0_topo/* .") + vEOS_count = 4 + else: + base_topo_file = 'testbed-sherman-t1.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 32 + + if clean_sim: + os.system("/auto/vxr/pyvxr/pyvxr-1.0.4/vxr.py clean") + + os.system("/auto/vxr/pyvxr/pyvxr-1.0.4/vxr.py start {}".format(topo_yaml)) + os.system("/auto/vxr/pyvxr/pyvxr-1.0.4/vxr.py ports > vxr_ports.yaml") + input_file = args['input_file'] + + if input_file is None: + input_file = "vxr_ports.yaml" + + with open(input_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + + data['sonic_dut']['uname'] = dut_uname + data['sonic_dut']['passwd'] = dut_passwd + + # Create admin user in vEOS vm + print("****** Create admin user in vEOS vm *******") + vEOS_inital_cfg(data,vEOS_count) + + print("********** Do a Git Update **********") + git_update(data) + + # Create testbed file based on vxr_ports + print("****** Create testbed file based on vxr_ports *******") + create_testbed_file(data,base_topo_file,vEOS_count) + + # Upload t1 specific files to sonic mgmt container + print("********** Upload testbed specific files to sonic mgmt container ***********") + upload_tb_files(data,topo_type,base_topo_file) + + # Change DUT password and set mgmt ip address + print("********** Change DUT password and set mgmt ip address ***********") + change_dut_passwd(data) + + # Start docker container, deploy DUT minigraph + print("********** Start docker container, deploy DUT minigraph ***********") + deploy_mg(data,base_topo_file) + + # Start docker container, deploy DUT minigraph + print("********** Download DUT minigraph ***********") + download_mg(data,topo_type) + + # Replace DUT Mgmt Address + print("********** Replace DUT Mgmt Address ***********") + replace_dut_mgmt_address(data) + + # Reload DUT config + print("********** Reload DUT config ***********") + reload_dut_with_newCFG(data) + + # Add vEOS config + print("********** Add vEOS config ***********") + add_vEOS_cfg(data) + + print("********** Configure PTF backplane ip address **********") + add_ptf_backplane_addr(data) + + + print("Sonic DUT: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_dut']['HostAgent'], data['sonic_dut']['serial0'], data['sonic_dut']['xr_mgmt_ip'], data['sonic_dut']['xr_redir22'])) + + print("Sonic Mgmt: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['serial0'], data['sonic_mgmt']['xr_mgmt_ip'], data['sonic_mgmt']['xr_redir22'])) + + print("PTF: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['ptf']['HostAgent'], data['ptf']['serial0'], data['ptf']['xr_mgmt_ip'], data['ptf']['xr_redir22'])) + + for i in range (1,vEOS_count+1): + print("VEOS{}: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(str(i-1), data['veos'+ str(i)]['HostAgent'], data['veos'+ str(i)]['serial0'], data['veos'+ str(i)]['xr_mgmt_ip'], data['veos'+ str(i)]['xr_redir22'] )) + + +if __name__ == '__main__': + main() diff --git a/infra/create_sonic_t1_xr_ads.py b/infra/create_sonic_t1_xr_ads.py new file mode 100644 index 00000000000..877c1fd0cdb --- /dev/null +++ b/infra/create_sonic_t1_xr_ads.py @@ -0,0 +1,434 @@ +#!/router/bin/python3.8.2_mcpre-v1 + +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-i', '--input_file', type=str, help='Input port file', + required=False,default=None) + parser.add_argument('-t', '--topo_yaml', type=str, help='topo yaml file', + required=False,default=None) + parser.add_argument('-n', '--vEOS_count', type=int, help='Number of vEOS vm', + required=False,default=32) + parser.add_argument('-c', '--clean_sim', action='store_true', help='Clean simulation', + default=False) + return parser + +def deploy_mg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("docker container start e9c2a75d5aa7 \n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('python TestbedProcessing.py -i testbed-sherman-t1.yaml \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv gen-mg docker-ptf lab group_vars/lab/secrets.yml\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + finally: + print(buff) + + ssh.close() + +def iosxr_inital_cfg(data,vEOS_count): + # Specify the connection timeout in seconds for blocking operations, like connection attempt + connection_timeout = 5 + + # Specify a timeout in seconds. Read until the string is found or until the timeout has passed + reading_timeout = 5 + base = 100 + + for i in range (1,vEOS_count+1): + veos1_host = data['veos'+ str(i)]['HostAgent'] + veos1_port = data['veos'+str(i)]['serial0'] + + print('Adding admin password for VM0{}:'.format(str(base))) + base += 1 + add_iosxr_ssh_access(veos1_host,veos1_port, connection_timeout) + + +def create_testbed_file(data): + input_file = "testbed-sherman-t1.yaml" + with open(input_file) as f: + tdata = yaml.load(f, Loader=yaml.FullLoader) + f.close() + + tdata['devices']['sherman-01']['ansible']['ansible_host'] = data['sonic_dut']['xr_mgmt_ip'] + tdata['devices']['docker-ptf']['ansible']['ansible_host'] = data['ptf']['xr_mgmt_ip'] + '/24' + tdata['testbed']['docker-ptf']['ptf_ip'] = data['ptf']['xr_mgmt_ip'] + '/24' + base = 100 + for i in range (1,33): + tdata['veos']['vms_1']['VM0' + str(base)]['ansible_host'] = data['veos'+str(i)]['xr_mgmt_ip'] + base +=1 + + with open(input_file,'w') as f: + yaml.dump(tdata,f) + f.close() + +def change_dut_passwd(data): + host = data['sonic_dut']['HostAgent'] + port = data['sonic_dut']['xr_redir22'] + user = "admin" + passwd = "YourPaSsWoRd" + #passwd = "cisco123" + new_passwd = "cisco123" + mgmt_ip = data['sonic_dut']['xr_mgmt_ip'] + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + try: + ssh.connect(host, port, user, passwd) + except paramiko.ssh_exception.AuthenticationException: + ssh.connect(host, port, user, new_passwd) + + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp) + + # Ssh and wait for the password prompt. + chan.send('sudo passwd admin\n') + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while buff.find(' successfully') < 0 : + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + if (' successfully') in buff: + print("Password change successful") + else: + print("Password change failed") + + time.sleep(3) + chan.send('sudo config interface ip add eth0 {}/24 192.168.122.1\n'.format(mgmt_ip)) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config interface ip add eth0 FC00:2::32/64 fc00:2::1\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config save -y\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo cp /etc/sonic/config_db.json /tmp/config_db.json\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + ssh.close() + +def run_python_script(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, port, user, passwd) + chan = ssh.invoke_shell() + for cmd in cmd_list: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + print("Response : %s" % resp.decode("ascii")) + + ssh.close() + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + for cmd in cmd_list: + ssh.connect(host, port, user, passwd) + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("ascii").strip() + error = stderr.read().decode("ascii") + print(out) + if error: + print('There was an error pulling the runtime: {}'.format(error)) + ssh.close() + +def add_iosxr_ssh_access(veos1_host,veos1_port, connection_timeout): + tn = telnetlib.Telnet(veos1_host,veos1_port, connection_timeout) + + # tn.read_until(b"Username: ") + # tn.write(user.encode('ascii') + b"\n") + # if password: + # tn.read_until(b"Password: ") + # tn.write(password.encode('ascii') + b"\n") + + tn.write(b"enable\n") + time.sleep(1) + tn.write(b"conf t\n") + time.sleep(1) + tn.write(b"ssh server v2\n") + time.sleep(1) + tn.write(b"commit\n") + time.sleep(1) + tn.write(b"end\n") + time.sleep(1) + tn.close() + +def upload_t1_files(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.put('testbed_add_vm_topology.yml','sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','sonic-mgmt/ansible/password.txt') + ftp_client.put('testbed-sherman-t1.yaml','sonic-mgmt/ansible/testbed-sherman-t1.yaml') + ftp_client.put('topo_t1.yml', 'sonic-mgmt/ansible/vars/topo_t1.yml') + ftp_client.close() + +def replace_dut_mgmt_address(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], "admin", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.get('/tmp/config_db.json','config_db_current.json') + ftp_client.close() + ssh.close() + + with open('config_db_current.json') as cfg_file: + cfg_data = json.load(cfg_file) + current_mgm_intf = cfg_data["MGMT_INTERFACE"] + print(cfg_data["MGMT_INTERFACE"]) + cfg_file.close() + + with open('config_db.json') as cfg_file: + cfg_data = json.load(cfg_file) + cfg_file.close() + + with open('config_db.json','w') as cfg_file: + cfg_data["MGMT_INTERFACE"] = current_mgm_intf + json.dump(cfg_data, cfg_file, indent=4) + cfg_file.close() + + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], "admin", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.put('config_db.json','/tmp/config_db_new.json') + ftp_client.close() + ssh.close() + +def reload_dut_with_newCFG(data): + cmd_list = list() + cmd_list.append('sudo cp /tmp/config_db_new.json /etc/sonic/config_db.json\n') + cmd_list.append('sudo reboot\n') + run_exec_cmds(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], "admin", "cisco123", cmd_list) + +def add_iosxr_cfg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv -m veos -k iosxr add-topo docker-ptf password.txt\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + print(resp.decode("ascii")) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + #finally: + # print(buff) + + ssh.close() + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] + clean_sim = args['clean_sim'] + if clean_sim: + os.system("/auto/vxr/pyvxr/pyvxr-0.6.2/vxr.py --cmd clean") + os.system("cp /ws/pevenkat-sjc/sonic/sonic_t1_topo/* .") + os.system("/auto/vxr/pyvxr/pyvxr-0.6.2/vxr.py --cmd start {}".format(topo_yaml)) + os.system("/auto/vxr/pyvxr/pyvxr-0.6.2/vxr.py --cmd ports > vxr_ports.yaml") + #os.system("scp pevenkat-sjc:/ws/pevenkat-sjc/sonic/vxr_ports.yaml .") + input_file = args['input_file'] + vEOS_count = args['vEOS_count'] + + if input_file is None: + input_file = "vxr_ports.yaml" + + with open(input_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + + # Create ssh access to iosxr + print("****** Create admin user in vEOS vm *******") + iosxr_inital_cfg(data,vEOS_count) + + # Create testbed file based on vxr_ports + print("****** Create testbed file based on vxr_ports *******") + create_testbed_file(data) + + # Upload t1 specific files to sonic mgmt container + print("********** Upload t1 specific files to sonic mgmt container ***********") + upload_t1_files(data) + + # Change DUT password and set mgmt ip address + print("********** Change DUT password and set mgmt ip address ***********") + change_dut_passwd(data) + + # Start docker container, deploy DUT minigraph + print("********** Start docker container, deploy DUT minigraph ***********") + deploy_mg(data) + + # Replace DUT Mgmt Address + print("********** Replace DUT Mgmt Address ***********") + replace_dut_mgmt_address(data) + + # Reload DUT config + print("********** Reload DUT config ***********") + reload_dut_with_newCFG(data) + + # Add vEOS config + print("********** Add iosxr config ***********") + add_iosxr_cfg(data) + + print("Sonic DUT: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_dut']['HostAgent'], data['sonic_dut']['serial0'], data['sonic_dut']['xr_mgmt_ip'], data['sonic_dut']['xr_redir22'])) + + print("Sonic Mgmt: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['serial0'], data['sonic_mgmt']['xr_mgmt_ip'], data['sonic_mgmt']['xr_redir22'])) + + print("PTF: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['ptf']['HostAgent'], data['ptf']['serial0'], data['ptf']['xr_mgmt_ip'], data['ptf']['xr_redir22'])) + + for i in range (1,vEOS_count+1): + print("XRV9k{}: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(str(i-1), data['xrv9k'+ str(i)]['HostAgent'], data['xrv9k'+ str(i)]['serial0'], data['xrv9k'+ str(i)]['xr_mgmt_ip'], data['xrv9k'+ str(i)]['xr_redir22'] )) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/infra/create_sonic_topo.py b/infra/create_sonic_topo.py new file mode 100755 index 00000000000..917adfe48fb --- /dev/null +++ b/infra/create_sonic_topo.py @@ -0,0 +1,1553 @@ +# Creates the t1 topology using vxr.py +# Create admin user in vEOS vm +# Create testbed file based on vxr_ports +# Upload t1 specific files to sonic mgmt container +# Change DUT password and set mgmt ip address +# Start docker container, deploy DUT minigraph +# Replace DUT Mgmt Address +# Reload DUT config +# Add vEOS config +# +# Usage: ./create_sonic_t1_ads.py -t sonic_t1_topo.yaml -c +# -t Topology file for PyVxr +# -c Clean pre-existing sim +# +# + +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time +import datetime +import subprocess +import sys +import re +import urllib.parse +from utils import _run_cmd_in_ssh, _run_cmd_in_ssh_container +from jinja2 import Environment, FileSystemLoader +from run_scripts_remote import run_scripts_remote, upload_log_files_to_log_server, SUCCESS_STATUS, FAILURE_STATUS, FAILURE_RESONS + +##DEBUG is falg to control traces are generated for untaring/listing files that fill out the logs and make the debugging difficult +## use this flag to enable it when it is needed +DEBUG = False +# Configure logging +logging.basicConfig( + format='%(asctime)s - %(levelname)s - %(message)s', + level=logging.INFO +) + +TOPO_PLATFORM_FILE_MAP = 'topo_and_platform_to_filename_map.json' + +# SFD T2 MIN MAX LC supported for SIM +SFD_SUPPORTED_NUM_LC = 2 + +# LC combinations supported for SFD T2 min topology +SFD_SUPPORTED_LC_TOPO = {'GG', 'VG', 'VL', 'LL'} + +# LC type and code mapping for SFD LCs +SFD_LC_TOPO_CODE = { + "vanguard" : "V", + "gauntlet" : "G", + "lancer" : "L" + } + +# Path to config file +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +# SIM workaround command files for Sonic master bringup. +wa_file_map = { "sfd": "sfd_wa_cmd_list", + "sfd_202505": "sfd_202505_wa_cmd_list", + "churchill-mono": "cmono_wa_cmd_list" + } + +VXR_OUT_TAR_GZ = "vxr.out.tar.gz" +VXR_OUT = "vxr.out" + +DEFAULT_SONIC_MGMT_DOCKER_CONTAINER_NAME = "docker-sonic-mgmt" + +def connect_with_retries( + client: paramiko.SSHClient, + hostname: str, + port: int, + username: str, + password: str, + **connect_kwargs +) -> None: + """ + Attempts to connect via SSH up to `retries` times before giving up. + + Args: + client: an instance of paramiko.SSHClient (with host keys policy set). + hostname: target host IP or name. + port: SSH port + username: SSH user + password: SSH password or None if using key auth. + connect_kwargs: additional kwargs for client.connect + e.g. timeout, banner_timeout, allow_agent, look_for_keys. + + Raises: + Exception: the last exception encountered if all retries fail. + """ + retries = 5 + delay = 30 + last_exc = None + for attempt in range(1, retries + 1): + try: + client.connect( + hostname=hostname, + port=port, + username=username, + password=password, + **connect_kwargs + ) + return # success! + except Exception as e: + last_exc = e + logging.info(f"[Attempt {attempt}/{retries}] Connection failed: {e}") + if attempt < retries: + logging.info(f"Retrying in {delay} seconds…") + time.sleep(delay) + # if we reach here, all attempts failed + logging.info("All connection attempts failed; raising exception.") + raise last_exc + +# Return a list of device names beginning with "sonic_dut_", for use with the data[] dictionary +# For example: ['sonic_dut_1', 'sonic_dut_2'] +def get_dut_names(data): + return [key for key in data if key.startswith('sonic_dut')] + +# Converts a DUT device name from a VXR topology into the proper non-VXR topology name +# For example: +# - Use legacy "platform-01" format for older VXR toplogies with just a single DUT +# ('sonic_dut', 'sherman') -> 'sherman-01' +# +# - For VXR topologies with multiple DUT, use 0-indexed single digit +# ('sonic_dut_0', 'mathilda') -> 'mathilda-0' +# ('sonic_dut_0', 'crocodile') -> 'crocodile-0' +# ('sonic_dut_1', 'sherman') -> 'sherman-1' +def get_tdata_dut_name(vxr_dut_name, dut_platform): + assert vxr_dut_name.startswith('sonic_dut') + + if vxr_dut_name == 'sonic_dut': + return "{}-01".format(dut_platform) + else: + dut_id = vxr_dut_name.split('_')[-1] + return "{}-{}".format(dut_platform, dut_id) + + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-i', '--input_file', type=str, help='Input port file', + required=False,default=None) + parser.add_argument('-b', '--tar_ball', type=str, help='Specify tar ball location', + required=False,default="http://172.29.93.10/sonic-images/golden-code/golden_code_202012.tar.gz") + parser.add_argument('-f', '--topo_yaml', type=str, help='topo yaml file', + required=False,default=None) + parser.add_argument('-t', '--topo_type', type=str, help='topo type', + required=True,default='t1-64-lag', choices=['dualtor-56', 'dualtor-56-4', 't1-64-lag', 't1-28-lag', 't1-lag-dash-4', 't0-64', "t1-8-lag", "t2-vs", "t2-min", "t2-min-VG", "t2-min-VL", "t2-min-LL", "t0", "t1"]) + parser.add_argument('-g', '--topo_name', type=str, help='Topo name specified to run tests', + required=False,default='docker-ptf') + parser.add_argument('-p', '--dut_passwd', type=str, help='Dut password, when it is different from YourPaSsWoRd', + required=False,default="password") + parser.add_argument('-u', '--dut_uname', type=str, help='Dut username, when it is different from admin', + required=False,default="admin") + parser.add_argument('-c', '--clean_sim', action='store_true', help='Clean simulation', + default=False) + parser.add_argument('-d', '--device_type', type=str, help='options are sherman, mth32, crocodile, sfd, churchill-mono, carib, mustang, titan', + required=False,default="mth64", choices=['sherman', 'mth32', 'mth64', 'crocodile', 'lightning','superbolt', 'siren','sfd', 'churchill-mono', 'carib', 'mustang', 'titan']) + parser.add_argument('-s', '--script_file', type=str, help='Input test script file', + required=False,default='sanity-scripts/sanity_scripts.txt') + parser.add_argument('-v', '--drop_version', type=str, help='specify drop version', + required=False,default='DT') + parser.add_argument('-l', '--log_dir', type=str, help='Log dir', + required=False,default='DT') + parser.add_argument('-r', '--run_sanity', action='store_true', help='Run Sanity', + default=False), + parser.add_argument('--additional_tests', type=str, help='Additional Testscases to test', + required=False, default='') + parser.add_argument('--cicd', action='store_true', help='Use CICD related parameters', + default=False) + parser.add_argument('--cicd_clean', action='store_true', help='Clean at the end of CICD run', + default=False) + parser.add_argument('--create_allure_report', action='store_true', help='When testing, specify if allure report to be created at the end of test', + default=False) + parser.add_argument('-k', '--skip_sanity', action='store_true', help='Skip sanity test', + default=False) + parser.add_argument('--sim_attach', action='store_true', help='Use the existing SIM', + default=False) + parser.add_argument('--test_file', type=str, help='Input test case file', + required=False,default=None) + parser.add_argument('--apply_wa', action='store_true', help='Use workaround command list for SIM', + default=False) + parser.add_argument('--bgp_hold_time_patch', action='store_true', help='Change the minigraph to use hold time of 60, this is required with nsim/sdk 24.x to pass bgp basic tests consistently', + default=False) + parser.add_argument('--add_sim_patches', action='store_true', help='Add patches to SIM to handle eth4 for route_check and shutdown', + default=False) + parser.add_argument('-y', '--test_tag', type=str, help='tag to get tests to run from sanity file. Comma seperated \ + For e.g.fwd,plt', required=False,default=None) + return parser + +def repo_update(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) + chan = ssh.invoke_shell() + buff = '' + + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("ls \n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + if DEBUG: + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + if 'golden-code' in buff: + chan.send("rm -rf golden-code\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("docker container stop docker-sonic-mgmt\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("docker container rm docker-sonic-mgmt\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("mkdir golden-code\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("cd golden-code\n") + buff = '' + while not buff.endswith(':~/golden-code$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("wget {}\n".format(data['tar_ball'])) + buff = '' + while not buff.endswith(':~/golden-code$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + time.sleep(3) + + tar_ball = data['tar_ball'].split('/')[-1] + chan.send("tar -xf {}\n".format(tar_ball)) + buff = '' + while not buff.endswith(':~/golden-code$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + if DEBUG: + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("cd sonic-test/sonic-mgmt\n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("echo __SONIC_MGMT_COMMIT__$(git rev-parse HEAD 2>/dev/null || echo unknown)\n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + commit_match = re.search(r'__SONIC_MGMT_COMMIT__([a-fA-F0-9]{40}|unknown)', buff) + sonic_mgmt_commit = commit_match.group(1) if commit_match else "unknown" + time.sleep(3) + + chan.send("echo __SONIC_MGMT_BRANCH__$(git symbolic-ref --short -q HEAD 2>/dev/null || git rev-parse --abbrev-ref HEAD 2>/dev/null || echo unknown)\n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + branch_match = re.search(r'__SONIC_MGMT_BRANCH__([a-zA-Z0-9_./-]+)', buff) + sonic_mgmt_branch = branch_match.group(1).strip() if branch_match else "unknown" + time.sleep(3) + + golden_code_info = { + "sonic_mgmt_git_commit": sonic_mgmt_commit, + "sonic_mgmt_git_branch": sonic_mgmt_branch, + } + data['golden_code_info'] = golden_code_info + logging.info( + f"sonic-mgmt git info -- branch: {sonic_mgmt_branch}, commit: {sonic_mgmt_commit}" + ) + + chan.send("mkdir ansible/vars/docker-ptf\n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + chan.send("docker run -v $PWD:/data --privileged --network host --name 'docker-sonic-mgmt' -itd docker-sonic-mgmt-vxr bash \n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + time.sleep(3) + + + ssh.close() + +def deploy_mg(data, topo_type, base_topo_file, lc_topo_code): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) + + pre_processing_cmds = [] + + if topo_type in ['dualtor-56', 'dualtor-56-4']: + pre_processing_cmds.append("echo ' docker-ptf: 8080'>>/data/ansible/group_vars/all/mux_simulator_http_port_map.yml") + + if topo_type == 'dualtor-56-4': + pre_processing_cmds.append('cp /data/ansible/vars/topo_dualtor-56-4.yml /data/ansible/vars/topo_dualtor-56.yml') + + + if len(pre_processing_cmds) != 0: + logging.info("Pre-precseeing Testbed") + _run_cmd_in_ssh_container(ssh, DEFAULT_SONIC_MGMT_DOCKER_CONTAINER_NAME, pre_processing_cmds) + logging.info("Pre-processing done") + + logging.info("Processing Testbed") + testbed_processing_cmd = f"cd /data/ansible; python TestbedProcessing.py -i {base_topo_file} -y" + _run_cmd_in_ssh_container(ssh, DEFAULT_SONIC_MGMT_DOCKER_CONTAINER_NAME, testbed_processing_cmd) + logging.info("Processing Testbed is finished") + + if topo_type in ['t2-min', 't2-vs']: + overwrite_lab_file(data, lc_topo_code) + logging.info("Overwrote lab file for T2 specific oddities") + + logging.info("Deploying MG") + deploy_mg_cmd = "cd /data/ansible; ./testbed-cli.sh -t testbed.csv deploy-mg docker-ptf lab group_vars/lab/secrets.yml > deploy-mg.log" + # deploy-mg can take several minutes (minigraph load, config push); use 10 min timeout to avoid Paramiko timeout + _run_cmd_in_ssh_container(ssh, DEFAULT_SONIC_MGMT_DOCKER_CONTAINER_NAME, deploy_mg_cmd, timeout=600) + logging.info("Deploying MG is finished") + ssh.close() + +# def untar_cisco_dir(data): +# ssh = paramiko.SSHClient() +# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +# connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) +# chan = ssh.invoke_shell() +# buff = '' +# while not buff.endswith(':~$ '): +# resp = chan.recv(9999) +# buff += resp.decode("utf-8", errors="replace") +# logging.info(resp.decode("utf-8", errors="replace")) +# time.sleep(3) + +# chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') +# buff = '' +# while not buff.endswith(':~$ '): +# resp = chan.recv(9999) +# buff += resp.decode("utf-8", errors="replace") +# logging.info(resp.decode("utf-8", errors="replace")) +# time.sleep(3) + +# chan.send('cd /data/tests \n') +# time.sleep(3) +# resp = chan.recv(9999) +# logging.info(resp.decode("utf-8", errors="replace")) + +# chan.send('tar -xf cisco.tar\n') +# time.sleep(3) +# resp = chan.recv(9999) +# if DEBUG: +# logging.info(resp.decode("utf-8", errors="replace")) + +# ssh.close() + +def vEOS_inital_cfg(data,vEOS_count): + # Specify the connection timeout in seconds for blocking operations, like connection attempt + connection_timeout = 5 + + # Specify a timeout in seconds. Read until the string is found or until the timeout has passed + reading_timeout = 5 + base = 100 + + for i in range (1,vEOS_count+1): + veos1_host = data['veos'+ str(i)]['HostAgent'] + veos1_port = data['veos'+str(i)]['serial0'] + + logging.info('Adding admin password for VM0{}:'.format(str(base))) + base += 1 + add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout) + + +def create_testbed_file(data,base_topo_file,vEOS_count, dut_platform, device_type): + input_file = base_topo_file + with open(input_file) as f: + tdata = yaml.load(f, Loader=yaml.FullLoader) + f.close() + + # Find each device listed in the VXR topology that starts with "sonic_dut_" + for vxr_device_name in get_dut_names(data): + tdata_dut_name = get_tdata_dut_name(vxr_device_name, dut_platform) + tdata['devices'][tdata_dut_name]['ansible']['ansible_host'] = data[vxr_device_name]['xr_mgmt_ip'] + tdata['devices'][tdata_dut_name]['ansible']['ansible_ssh_user'] = data[vxr_device_name]['uname'] + tdata['devices'][tdata_dut_name]['ansible']['ansible_ssh_pass'] = data[vxr_device_name]['passwd'] + + tdata['testbed']['docker-ptf']['ansible']['ansible_host'] = data['docker_ptf']['xr_mgmt_ip'] + '/24' + tdata['testbed']['docker-ptf']['ptf_ip'] = data['docker_ptf']['xr_mgmt_ip'] + '/24' + tdata['devices']['docker-ptf']['ansible']['ansible_host'] = data['docker_ptf']['xr_mgmt_ip'] + '/24' + + if 'dualtor' in device_type: + tdata['devices']['str-acs-serv-01']['ansible']['ansible_host'] = data['mux_sim']['xr_mgmt_ip'] + '/24' + tdata['host_vars']['str-acs-serv-01']['mgmt_gw'] = data['mux_sim']['xr_mgmt_ip'] + tdata['testbed']['docker-ptf']['group-name'] = 'vms_1' + + base = 100 + tdata['veos']['vm_host_1']['STR-ACS-SERV-01']['ansible_host'] = data['sonic_mgmt']['HostAgent'] + for i in range (1,vEOS_count+1): + tdata['veos']['vms_1']['VM0' + str(base)]['ansible_host'] = data['veos'+str(i)]['xr_mgmt_ip'] + base +=1 + + with open(input_file,'w') as f: + yaml.dump(tdata,f) + f.close() + +# Invoked on each DUT device found in topology +def change_dut_passwd(device): + host = device['HostAgent'] + port = device['xr_redir22'] + user = device['uname'] + passwd = device['passwd'] + #passwd = "cisco123" + new_passwd = "password" + mgmt_ip = device['xr_mgmt_ip'] + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + try: + connect_with_retries(ssh, host, port, user, passwd, timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + except paramiko.ssh_exception.AuthenticationException: + connect_with_retries(ssh, host, port, user, new_passwd, timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + + logging.info(f"configured credentials for this device is {user}/{passwd}") + if user != 'admin': + time.sleep(3) + logging.info(f"Admin user not found, creating admin user and setting password to: {new_passwd}") + stdout, stderr, status_code = _run_cmd_in_ssh(ssh, "sudo useradd -m -d /home/admin -s /bin/bash admin && sudo usermod -aG admin,sudo,docker,redis admin && echo 'admin:password' | sudo chpasswd\n") + if status_code != 0: + raise Exception(f"Failed to add admin user: stdout: {stdout}, stderr: {stderr}") + return + + logging.info(f"Changing credentials to {user}/{new_passwd}") + + + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp) + + # Ssh and wait for the password prompt. + chan.send('sudo passwd {}\n'.format(user)) + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while buff.find(' successfully') < 0 : + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + if (' successfully') in buff: + logging.info("Password change successful") + else: + logging.info("Password change failed") + + time.sleep(3) + chan.send('sudo config interface ip add eth0 {}/24 192.168.122.1\n'.format(mgmt_ip)) + time.sleep(1) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + time.sleep(3) + chan.send('sudo config interface ip add eth0 FC00:2::32/64 fc00:2::1\n') + time.sleep(1) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + time.sleep(3) + chan.send('sudo config save -y\n') + time.sleep(1) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + time.sleep(3) + chan.send('sudo cp /etc/sonic/config_db.json /tmp/config_db.json\n') + time.sleep(1) + + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8", errors="replace") + logging.info(resp.decode("utf-8", errors="replace")) + + ssh.close() + + +MGMT_PREFIX_LEN = 24 + + +def get_mgmt_gwaddr(mgmt_ip): + octets = mgmt_ip.split('.') + octets[-1] = '1' + return '.'.join(octets) + + +def build_config_mgmt_ip_json(mgmt_ip, prefix_len=MGMT_PREFIX_LEN): + gwaddr = get_mgmt_gwaddr(mgmt_ip) + return { + "MGMT_INTERFACE": { + f"eth0|{mgmt_ip}/{prefix_len}": { + "gwaddr": gwaddr + } + } + } + + +def apply_config_mgmt_ip(device): + host = device['HostAgent'] + port = device['xr_redir22'] + user = device['uname'] + passwd = device['passwd'] + mgmt_ip = device['xr_mgmt_ip'] + config_json = build_config_mgmt_ip_json(mgmt_ip) + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries( + ssh, host, port, user, passwd, timeout=120, banner_timeout=120, + look_for_keys=False, allow_agent=False + ) + + with ssh.open_sftp() as ftp_client: + with ftp_client.file('/tmp/config_mgmt_ip.json', 'w') as remote_file: + remote_file.write(json.dumps(config_json, indent=4)) + + stdin, stdout, stderr = ssh.exec_command( + 'sudo sonic-cfggen -j /tmp/config_mgmt_ip.json -w && sudo config save -y' + ) + exit_status = stdout.channel.recv_exit_status() + out = stdout.read().decode("utf-8", errors="replace").strip() + error = stderr.read().decode("utf-8", errors="replace").strip() + ssh.close() + + logging.info(f"Applied config_mgmt_ip on {mgmt_ip}: {out}") + if error: + logging.info(f"config_mgmt_ip stderr on {mgmt_ip}: {error}") + if exit_status != 0: + raise Exception( + f"Failed to apply config_mgmt_ip on {mgmt_ip}: exit_status={exit_status}, stderr={error}" + ) + + +def configure_dut_mgmt_ip(data, device_type): + if device_type != 'sfd': + return + + for dut_name in get_dut_names(data): + logging.info(f"********** Configure static mgmt IP for DUT {dut_name} ***********") + apply_config_mgmt_ip(data[dut_name]) + logging.info(f"********** Configure static mgmt IP for DUT {dut_name} is finished ***********") + + +def run_python_script(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, host, port, user, passwd, timeout=120, banner_timeout=120) + chan = ssh.invoke_shell() + for cmd in cmd_list: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + logging.info("Response : %s" % resp.decode("utf-8", errors="replace")) + + ssh.close() + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + out = "" + for cmd in cmd_list: + connect_with_retries(ssh, host, port, user, passwd, timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("utf-8", errors="replace").strip() + error = stderr.read().decode("utf-8", errors="replace") + logging.info(out) + if error: + logging.info('There was an error pulling the runtime: {}'.format(error)) + ssh.close() + return out + +def add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout): + tn = telnetlib.Telnet(veos1_host,veos1_port, connection_timeout) + + # tn.read_until(b"Username: ") + # tn.write(user.encode('utf-8') + b"\n") + # if password: + # tn.read_until(b"Password: ") + # tn.write(password.encode('utf-8') + b"\n") + + tn.write(b"enable\n") + time.sleep(1) + tn.write(b"conf t\n") + time.sleep(1) + tn.write(b"username admin secret 123456\n") + time.sleep(1) + tn.write(b"aaa root secret 123456\n") + time.sleep(1) + tn.write(b"end\n") + time.sleep(1) + tn.write(b"copy running-config startup-config\n") + time.sleep(1) + tn.close() + +def download_mg(data,topo_type,dut_name): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) + ftp_client=ssh.open_sftp() + ftp_client.get('/home/vxr/sonic-test/sonic-mgmt/ansible/minigraph/{}.{}.xml'.format(dut_name,topo_type), 'minigraph.xml') + ftp_client.close() + ssh.close() + +# Write a buffer to a remote file on the sonic-mgmt VM +# Allows us to upload a generated file without creating a local temporary copy of it +def upload_file_stream(data, stream, dest): + with paramiko.SSHClient() as ssh: + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) + with ssh.open_sftp() as ftp_client: + with ftp_client.file(dest, 'w') as fd: + fd.write(stream) + + +def upload_tb_files(data,topo_type,base_topo_file,device_type, lc_topo_code='GG', add_sim_patches=False, bgp_hold_time_patch=False): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) + ftp_client=ssh.open_sftp() + ftp_client.put('run_scripts.py','golden-code/sonic-test/sonic-mgmt/tests/run_scripts.py') + ftp_client.chmod('golden-code/sonic-test/sonic-mgmt/tests/run_scripts.py', 0o755) + ftp_client.put('utils.py','golden-code/sonic-test/sonic-mgmt/tests/utils.py') + ftp_client.put('TestbedProcessing.py','golden-code/sonic-test/sonic-mgmt/ansible/TestbedProcessing.py') + ftp_client.put('../sonic-mgmt/tests/allure_server.py','golden-code/sonic-test/sonic-mgmt/tests/allure_server.py') + #os.system("tar -cvf cisco.tar -C ./../sonic-mgmt/tests cisco") + #ftp_client.put('cisco.tar', 'golden-code/sonic-test/sonic-mgmt/tests/cisco.tar') + #ftp_client.put('sanity_scripts.txt','sonic-test/sonic-mgmt/tests/sanity_scripts.txt') + ftp_client.put(base_topo_file,'golden-code/sonic-test/sonic-mgmt/ansible/{}'.format(base_topo_file)) + ftp_client.put('testbed_add_vm_topology.yml','golden-code/sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','golden-code/sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('veos.yml','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + + ftp_client.mkdir('golden-code/sonic-test/sonic-mgmt/tests/config') + ftp_client.put(ALLURE_CONFIG_FILE_NAME, 'golden-code/sonic-test/sonic-mgmt/tests/{}'.format(ALLURE_CONFIG_FILE_NAME)) + + if add_sim_patches: + #ftp_client.put('run_scripts_remote.py','golden-code/sonic-test/sonic-mgmt/tests/run_scripts_remote.py') + ftp_client.put('sim_patches/add_sim_hooks.py','golden-code/sonic-test/sonic-mgmt/tests/add_sim_hooks.py') + ftp_client.put('sim_patches/tests_mark_conditions_cisco_sim.yaml','golden-code/sonic-test/sonic-mgmt/tests/common/plugins/conditional_mark/tests_mark_conditions_cisco_sim.yaml') + ftp_client.put('sim_patches/cisco_sim.py','golden-code/sonic-test/sonic-mgmt/tests/common/devices/cisco_sim.py') + ftp_client.put('sim_patches/cisco_sim_apis_hook.py','golden-code/sonic-test/sonic-mgmt/tests/common/cisco_sim_apis_hook.py') + # Static route wait helper – must sit alongside add_sim_hooks.py so that + # patch_static_route_wait() can find it via os.path.dirname(__file__) + ftp_client.put('sim_patches/test_static_route_wait.py','golden-code/sonic-test/sonic-mgmt/tests/test_static_route_wait.py') + if bgp_hold_time_patch: + ftp_client.put('sim_patches/minigraph_cpg.j2','golden-code/sonic-test/sonic-mgmt/ansible/templates/minigraph_cpg.j2') + + if device_type == 'mth32': + ftp_client.put('lab_connection_graph_mth32.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_mth32.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_mth32.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + if device_type == 'siren': + ftp_client.put('lab_connection_graph_siren.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_siren.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_siren.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + ftp_client.put('../sonic-mgmt/ansible/module_utils/port_utils.py','golden-code/sonic-test/sonic-mgmt/ansible/module_utils/port_utils.py') + + elif device_type == 'crocodile': + ftp_client.put('lab_connection_graph_crocodile.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_crocodile.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_crocodile.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'lightning': + ftp_client.put('lab_connection_graph_lightning.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_lightning.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_lightning.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + ftp_client.put('../sonic-mgmt/ansible/module_utils/port_utils.py','golden-code/sonic-test/sonic-mgmt/ansible/module_utils/port_utils.py') + elif device_type == 'superbolt': + ftp_client.put('../sonic-mgmt/ansible/module_utils/port_utils.py','golden-code/sonic-test/sonic-mgmt/ansible/module_utils/port_utils.py') + elif device_type == 'titan': + ftp_client.put('../sonic-mgmt/ansible/module_utils/port_utils.py','golden-code/sonic-test/sonic-mgmt/ansible/module_utils/port_utils.py') + elif device_type == 'dualtor_mth64': + ftp_client.put('lab_connection_graph_dualtor_mth64.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + elif device_type == 'churchill-mono': + ftp_client.put('lab_connection_graph_churchill_mono.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'carib': + ftp_client.put('lab_connection_graph_churchill_mono.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'sfd' and topo_type == 't2-min': + ftp_client.put(f'sonic_t2/topo_8800-LC-{lc_topo_code}.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/docker-ptf/topo_Cisco-8800-LC-48H-C48.yml') + ftp_client.put(f'sonic_t2/topo_8800-LC-{lc_topo_code}.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/docker-ptf/topo_Cisco-88-LC0-36FH-M-O36.yml') + ftp_client.put(f'sonic_t2/topo_8800-LC-{lc_topo_code}.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/docker-ptf/topo_Cisco-88-LC0-36FH-O36.yml') + ftp_client.put(f'sonic_t2/topo_8800-RP-{lc_topo_code}.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/docker-ptf/topo_Cisco-8800-RP.yml') + if lc_topo_code == 'VL': + ftp_client.put('lab_connection_graph_t2_2lc_vl_min.xml', 'golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_t2/topo_t2_2lc_min_ports-vl.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t2_2lc_min_ports-masic.yml') + elif lc_topo_code == 'LL': + ftp_client.put('lab_connection_graph_t2_2lc_ll_min.xml', 'golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_t2/topo_t2_2lc_min_ports-ll.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t2_2lc_min_ports-masic.yml') + else: + ftp_client.put('lab_connection_graph_t2_2lc_min.xml', 'golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_t2/topo_t2_2lc_min_ports-masic.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t2_2lc_min_ports-masic.yml') + if topo_type in ['t0', 'dualtor-56']: + ftp_client.put('t0-leaf.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t0-leaf.j2') + elif topo_type == 't1': + ftp_client.put('t1-spine.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2') + ftp_client.put('t1-tor.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2') + ftp_client.put('topo_t1.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t1.yml') + elif topo_type == 't1-28-lag': + ftp_client.put('t1-28-lag-spine.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-spine.j2') + ftp_client.put('t1-28-lag-tor.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-tor.j2') + ftp_client.put('topo_t1-28-lag.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t1-28-lag.yml') + elif topo_type == 't1-lag-dash-4': + ftp_client.put('t1-28-lag-spine.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-lag-dash-4-spine.j2') + ftp_client.put('t1-28-lag-tor.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-lag-dash-4-tor.j2') + ftp_client.put('topo_t1-lag-dash-4.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t1-lag-dash-4.yml') + ftp_client.close() + +def replace_dut_mgmt_address(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + for dut_name in get_dut_names(data): + connect_with_retries(ssh, data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + ftp_client=ssh.open_sftp() + ftp_client.get('/tmp/config_db.json','config_db_current.json') + ftp_client.close() + ssh.close() + + with open('config_db_current.json') as cfg_file: + cfg_data = json.load(cfg_file) + current_mgm_intf = cfg_data["MGMT_INTERFACE"] + current_mac = cfg_data["DEVICE_METADATA"]["localhost"]["mac"] + logging.info(cfg_data["MGMT_INTERFACE"]) + cfg_file.close() + + with open('config_db.json') as cfg_file: + cfg_data = json.load(cfg_file) + cfg_file.close() + + with open('config_db.json','w') as cfg_file: + cfg_data["MGMT_INTERFACE"] = current_mgm_intf + cfg_data["DEVICE_METADATA"]["localhost"]["mac"] = current_mac + json.dump(cfg_data, cfg_file, indent=4) + cfg_file.close() + + connect_with_retries(ssh, data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + ftp_client=ssh.open_sftp() + ftp_client.put('config_db.json','/tmp/config_db_new.json') + ftp_client.put('minigraph.xml', '/tmp/minigraph.xml') + ftp_client.close() + ssh.close() + +def reload_dut_with_newCFG(data): + for dut_name in get_dut_names(data): + cmd_list = list() + cmd_list.append('sudo cp /tmp/config_db_new.json /etc/sonic/config_db.json\n') + cmd_list.append('sudo cp /tmp/minigraph.xml /etc/sonic/minigraph.xml\n') + cmd_list.append('sudo reboot\n') + run_exec_cmds(data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], cmd_list) + +# apply sim patches to handle eth4 for route_check and fast and warm reboot. +# note that eth4 is added as the simulation interface, however, in sonic only eth0 is used for mgmt and eth4 is considered as data port that lead to issues. +# these are temporary patches to handle the issues. Evetually, the sonic coode should be updated to treat eth4 as managment interfce. +def add_sim_patches(data): + for dut_name in get_dut_names(data): + logging.info(f"****** Applying simulation patches for eth4 on {dut_name} ******") + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + + ftp_client=ssh.open_sftp() + ftp_client.get('/usr/local/bin/fast-reboot','fast-reboot') + ftp_client.get('/usr/local/bin/warm-reboot','warm-reboot') + ftp_client.get('/usr/local/bin/route_check.py','route_check.py') + + route_check_lines = [] + with open('route_check.py', 'r') as file: + for line in file.readlines(): + route_check_lines.append(line) + if re.search(r"\s*local_if_lst\s*=\s*\{.*\}\s*", line): + indent_count = len(re.match(r'^(\s*)', line).group(1)) + route_check_lines.append(' ' * indent_count+"local_if_lst.add('eth4')\n") + with open('route_check.py', 'w') as file: + file.writelines(route_check_lines) + + fast_reboot_lines = [] + ## adding -s to orchagent_restart_check command since the orchagent_restart_check check for eth4 which is not the data port for the DUT + with open('fast-reboot', 'r') as file: + for line in file.readlines(): + if re.search(r'\s*docker exec -i swss \/usr\/bin\/orchagent_restart_check -w 2000 -r 5 .*', line): + indent_count = len(re.match(r'^(\s*)', line).group(1)) + fast_reboot_lines.append(' ' *indent_count +"docker exec -i swss /usr/bin/orchagent_restart_check -s -w 2000 -r 5 > /dev/null || RESTARTCHECK_RC=$?\n") + else: + fast_reboot_lines.append(line) + with open('fast-reboot', 'w') as file: + file.writelines(fast_reboot_lines) + + warm_reboot_lines = [] + ## adding -s to orchagent_restart_check command since the orchagent_restart_check check for eth4 which is not the data port for the DUT + with open('warm-reboot', 'r') as file: + for line in file.readlines(): + if re.search(r'\s*docker exec -i swss \/usr\/bin\/orchagent_restart_check -w 2000 -r 5 .*', line): + indent_count = len(re.match(r'^(\s*)', line).group(1)) + warm_reboot_lines.append(' ' * indent_count+"docker exec -i swss /usr/bin/orchagent_restart_check -s -w 2000 -r 5 > /dev/null || RESTARTCHECK_RC=$?\n") + else: + warm_reboot_lines.append(line) + with open('warm-reboot', 'w') as file: + file.writelines(warm_reboot_lines) + + ftp_client.put('./route_check.py', '/tmp/route_check.py') + ftp_client.put('./fast-reboot', '/tmp/fast-reboot') + ftp_client.put('./warm-reboot', '/tmp/warm-reboot') + ftp_client.close() + ssh.close() + cmd_list = list() + cmd_list.append('sudo cp /tmp/route_check.py /usr/local/bin/route_check.py\n') + cmd_list.append('sudo cp /tmp/fast-reboot /usr/local/bin/fast-reboot\n') + cmd_list.append('sudo cp /tmp/warm-reboot /usr/local/bin/warm-reboot\n') + run_exec_cmds(data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], cmd_list) + logging.info(f"****** Finished applying simulation patches for eth4 on {dut_name} ******") + + + +def run_sim_workaround(data, filename): + ssh = paramiko.SSHClient() + for dut_name in get_dut_names(data): + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], timeout=120, banner_timeout=120, look_for_keys=False, allow_agent=False) + ftp_client=ssh.open_sftp() + ftp_client.put(filename, f'/tmp/{filename}') + ftp_client.close() + ssh.close() + + cmd_list = list() + cmd_list.append(f'sudo bash /tmp/{filename} > /tmp/wa.log 2>&1\n') + run_exec_cmds(data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], cmd_list) + logging.info(f"***** copied {filename} to {dut_name} ******") + +def run_config_reload(data): + ssh = paramiko.SSHClient() + for dut_name in get_dut_names(data): + cmd_list = list() + cmd_list.append(f'sudo config reload -fy\n') + run_exec_cmds(data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], cmd_list) + logging.info(f"****** Executed config reload on {dut_name} ******") + +def add_ptf_backplane_addr(data): + cmd_list = list() + cmd_list.append('ip address add 10.10.246.254/24 dev backplane') + cmd_list.append('ip -6 address add fc0a::ff/64 dev backplane') + cmd_list.append('for i in {0..%s}; do /sbin/ifconfig eth$i mtu 9216 up; done' % data['ptf_intf_count']) + run_exec_cmds(data['docker_ptf']['HostAgent'], data['docker_ptf']['xr_redir22'], 'root', 'root', cmd_list) + +def add_vEOS_cfg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123", timeout=120, banner_timeout=120) + + add_veos_cmd = [ + 'cd /data/ansible', + 'env', + 'unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy', + './testbed-cli.sh -t testbed.csv -k veos -m veos add-topo docker-ptf password.txt', + './testbed-cli.sh -t testbed.csv -k veos -m veos announce-routes docker-ptf password.txt', + 'ansible-playbook -i lab run_start_tacacs_daily_daemon.yml -e testbed_name=docker-ptf -e ptf_ip={}/24 -vvvv'.format(data['docker_ptf']['xr_mgmt_ip']) + ] + _run_cmd_in_ssh_container(ssh, DEFAULT_SONIC_MGMT_DOCKER_CONTAINER_NAME, add_veos_cmd) + + ssh.close() + +def install_allure(data): + """ + Install the allure package in the sonic-mgmt container + """ + start_time = time.time() + + # ssh into the VM + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries(ssh, hostname=data['sonic_mgmt']['HostAgent'], port=data['sonic_mgmt']['xr_redir22'], username="vxr", password="cisco123", timeout=120, banner_timeout=120) + + sonic_mgmt_container_name='docker-sonic-mgmt' + sonic_mgmt_dir = '/home/vxr/golden-code/sonic-test/sonic-mgmt/' + + # Fetch the allure package details from config + allure_package_url = allure_config['allure']['debian-url'] + alure_package_name = os.path.basename(urllib.parse.urlparse(allure_package_url).path) + + # Download the allure package on the VM + stdout, stderr, status_code = _run_cmd_in_ssh(ssh, f'wget -q {allure_package_url} -P {sonic_mgmt_dir}') + if status_code != 0: + raise Exception(f'Failed to download the allure package: stdout: {stdout}, stderr: {stderr}') + + # Install the allure package in the sonic-mgmt container + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, sonic_mgmt_container_name, f'sudo dpkg -i /data/{alure_package_name}') + if status_code != 0: + raise Exception(f'Failed to install the allure package: stdout: {stdout}, stderr: {stderr}') + + # Verify the allure installation in the sonic-mgmt container + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, sonic_mgmt_container_name, 'allure --version') + if status_code != 0: + raise Exception(f'Failed to verify the allure installation: stdout: {stdout}, stderr: {stderr}') + + # Cleanup the downloaded package from the sonic-mgmt container (and the VM) + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, sonic_mgmt_container_name, f'rm /data/{alure_package_name}') + if status_code != 0: + raise Exception(f'Failed to cleanup the downloaded package: stdout: {stdout}, stderr: {stderr}') + + ssh.close() + + end_time = time.time() + logging.info(f'Allure installation took {end_time - start_time} seconds') + + return 0 + +# The lab file generated by TestbedProcessing.py does not work well for T2-2lc-min topology +# We still run TestbedProcessing.py to generate other important output files +# But then we overwrite the lab file with our own (in YAML instead of ini, for readability) +def overwrite_lab_file(vxr_ports, lc_topo_code): + environment = Environment(loader=FileSystemLoader("lab-templates")) + template = environment.get_template(f"t2-2lc-min-ports-{lc_topo_code}.yaml.j2") + upload_file_stream( + vxr_ports, + template.render(vxr_ports=vxr_ports), + "/home/vxr/golden-code/sonic-test/sonic-mgmt/ansible/lab" + ) + +def get_dut_platform(device_type): + if device_type == 'sherman': + return "sherman" + elif device_type == 'sfd': + return 'sfd' + elif device_type == 'crocodile': + return 'crocodile' + elif device_type == 'lightning': + return 'lightning' + elif device_type == 'superbolt': + return 'superbolt' + elif device_type == 'siren': + return 'siren' + elif device_type == 'churchill-mono': + return 'churchill-mono' + elif device_type == 'carib': + return 'carib' + elif device_type == 'mustang': + return 'mustang' + elif device_type == 'titan': + return 'titan' + else: + return "mathilda" + +def determine_base_topo(topo_type, device_type, original_topo_type=None): + ptf_intfcount = 32 + if topo_type in ['t2-vs', 't2-min']: + assert device_type == 'sfd', "Only SF-D is currently supported with T2 topologies" + os.system("cp sonic_t2/* .") + if topo_type == 't2-vs': + base_topo_file = 'testbed-t2-vs.yaml' + vEOS_count = 4 + elif topo_type == 't2-min': + # t2-min-VL and t2-min-LL use same testbed with VL/LL port set (LC0/LC1 400G ports) + if original_topo_type == 't2-min-VL': + base_topo_file = 'testbed-t2-2lc-min-ports-gb-lc-VL.yaml' + elif original_topo_type == 't2-min-LL': + base_topo_file = 'testbed-t2-2lc-min-ports-gb-lc-LL.yaml' + else: + base_topo_file = 'testbed-t2-2lc-min-ports.yaml' + vEOS_count = 8 + elif topo_type == 't0': + os.system("cp sonic_t0_topo/* .") + vEOS_count = 4 + ptf_intfcount = 32 + if device_type == 'sherman': + base_topo_file = 'testbed-sherman-t0.yaml' + elif device_type == 'lightning': + base_topo_file = 'testbed-lightning-t0.yaml' + elif device_type == 'superbolt': + base_topo_file = 'testbed-superbolt-t0.yaml' + elif device_type == 'siren': + base_topo_file = 'testbed-siren-t0.yaml' + elif device_type == 'crocodile': + base_topo_file = 'testbed-crocodile-t0.yaml' + elif device_type in ['churchill-mono','carib']: + base_topo_file = 'testbed-churchill-mono-t0.yaml' + elif device_type == 'mustang': + base_topo_file = 'testbed-mustang-t0.yaml' + elif device_type == 'titan': + base_topo_file = 'testbed-titan-t0.yaml' + else: + base_topo_file = 'testbed-mth32-t0.yaml' + elif topo_type == 't1': + if device_type == 'sherman': + base_topo_file = 'testbed-sherman-t1.yaml' + elif device_type in ['churchill-mono','carib']: + base_topo_file = 'testbed-churchill-mono-t1.yaml' + elif device_type == 'lightning': + base_topo_file = 'testbed-lightning-t1.yaml' + elif device_type == 'superbolt': + base_topo_file = 'testbed-superbolt-t1.yaml' + elif device_type == 'siren': + base_topo_file = 'testbed-siren-t1.yaml' + elif device_type == 'mustang': + base_topo_file = 'testbed-mustang-t1.yaml' + elif device_type == 'titan': + base_topo_file = 'testbed-titan-t1.yaml' + else: + base_topo_file = 'testbed-mth32-t1.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 32 + ptf_intfcount = 32 + elif topo_type == 'dualtor-56': + os.system("cp sonic_dualtor_56/* .") + vEOS_count = 4 + base_topo_file = 'testbed-mth64-t0-dualtor.yaml' + elif topo_type == 'dualtor-56-4': + os.system("cp sonic_dualtor_56/* .") + vEOS_count = 4 + base_topo_file = 'testbed-mth64-t0-dualtor-4.yaml' + elif topo_type == 't1-64-lag': + if device_type == 'sherman': + base_topo_file = 'testbed-sherman-t1-64-lag.yaml' + else: + base_topo_file = 'testbed-mth64-t1-64-lag.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 24 + ptf_intfcount = 64 + elif topo_type == 't1-28-lag': + base_topo_file = 'testbed-mth32-t1-28-lag.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 21 + ptf_intfcount = 32 + elif topo_type == 't1-lag-dash-4': + base_topo_file = 'testbed-mth32-t1-lag-dash-4.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 21 + ptf_intfcount = 32 + elif topo_type == 't1-8-lag': + if device_type == 'sherman': + base_topo_file = 'testbed-sherman-t1-8-lag.yaml' + else: + base_topo_file = 'testbed-t1-8-lag.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 6 + ptf_intfcount = 8 + elif topo_type == 't0-64': + os.system("cp sonic_t0_topo/* .") + vEOS_count = 4 + ptf_intfcount = 64 + if device_type == 'sherman': + base_topo_file = 'testbed-sherman-t0.yaml' + elif device_type in ['churchill-mono','carib']: + ptf_intfcount = 32 + base_topo_file = 'testbed-churchill-mono-t0.yaml' + else: + base_topo_file = 'testbed-mth64-t0-64.yaml' + + return base_topo_file, vEOS_count, ptf_intfcount + +def create_vxr_log_tarball(vxr_path): + os.system(f"bash -c '{vxr_path} logs'") + os.system(f"tar -czvf vxr.out.tar.gz vxr.out") + +def generate_results_json(run_result, failure_reason): + # Path to config file + SUMMARY_REPORT_FILENAME = "results.json" + SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) + + sum = { + "total": 0, + "failed": 0, + "passed": 0, + "skipped": 0, + "success_rate": 0.0, + "status" : run_result, + "failure_reason": failure_reason + } + + sum_f = open(SUMMARY_REPORT_PATH, "w") + + # List of files to copy into the build directory + files_to_copy = [VXR_OUT_TAR_GZ, VXR_OUT] + log_url = upload_log_files_to_log_server(files_to_copy) + + sum["log_tarball_link"] = log_url + + logging.info(f"Result summary: {sum}") + + json.dump(sum, sum_f) + sum_f.close() + +def start_vxr(input_file, cicd, clean_sim, topo_yaml): + vxr_path = "/auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + if input_file: + return vxr_path, input_file + + if clean_sim: + os.system("{} clean".format(vxr_path)) + + if cicd: + vxr_path = "python3 /auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + os.system("bash -c '{} start {} |& tee sim_op.log'".format(vxr_path, topo_yaml)) + + sim_output = subprocess.check_output("grep -i 'sim up' sim_op.log | wc -l", shell=True).strip() + + # Populate results file with failure data + if not int(sim_output): + create_vxr_log_tarball(vxr_path) + generate_results_json(FAILURE_STATUS, FAILURE_RESONS.SIM_BRINGUP_FAIL) + sys.exit("Sim is not up. Exiting now") + + os.system("{} ports > vxr_ports.yaml".format(vxr_path)) + return vxr_path, "vxr_ports.yaml" + +def attach_vxr(): + vxr_path = "/auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + os.system("{} ports > vxr_ports.yaml".format(vxr_path)) + return vxr_path, "vxr_ports.yaml" + +def configure_vxr(data, topo_type, base_topo_file, vEOS_count, dut_platform, device_type, lc_topo_code, apply_wa=False, add_sim_patch=False, bgp_hold_time_patch=False): + # Create admin user in vEOS vm + logging.info("****** Create admin user in vEOS vm *******") + vEOS_inital_cfg(data,vEOS_count) + logging.info("****** Create admin user in vEOS vm is finished *******") + + logging.info("****** Update repo for sonic-mgmt *******") + repo_update(data) + logging.info("****** Update repo for sonic-mgmt is finished *******") + + # Create testbed file based on vxr_ports + logging.info("****** Create testbed file based on vxr_ports *******") + create_testbed_file(data,base_topo_file,vEOS_count,dut_platform,device_type) + logging.info("****** Create testbed file based on vxr_ports is finished *******") + + # Upload t1 specific files to sonic mgmt container + logging.info("********** Upload testbed specific files to sonic mgmt container ***********") + upload_tb_files(data,topo_type,base_topo_file,device_type, lc_topo_code,add_sim_patches, bgp_hold_time_patch) + logging.info("********** Upload testbed specific files to sonic mgmt container is finished ***********") + + # # Untar cisco directory + # logging.info("********** Untar the uploaded cisco directory **********") + # untar_cisco_dir(data) + # logging.info("********** Untar the uploaded cisco directory is finished ********") + + # Change DUT password and set mgmt ip address + + if device_type != 'sfd': + for dut_name in get_dut_names(data): + logging.info("********** Change DUT password for DUT #{} and set mgmt ip address ***********".format(dut_name)) + change_dut_passwd(data[dut_name]) + logging.info("********** Change DUT password for DUT #{} and set mgmt ip address is finished ***********".format(dut_name)) + + if add_sim_patch: + logging.info("********** Add simulation patches to handle eth4 **********") + add_sim_patches(data) + logging.info("********** Add simulation patches to handle eth4 is finished **********") + + # Pin static mgmt IP in config DB before deploy-mg restarts interfaces-config/dhclient + if device_type == 'sfd': + logging.info("********** Configure static mgmt IP on DUT(s) before deploy-mg ***********") + configure_dut_mgmt_ip(data, device_type) + logging.info("********** Configure static mgmt IP on DUT(s) before deploy-mg is finished ***********") + + # Start docker container, deploy DUT minigraph + logging.info("********** Deploying DUT minigraph ***********") + deploy_mg(data,topo_type,base_topo_file, lc_topo_code) + logging.info("********** Deploying DUT minigraph is finished ***********") + + if apply_wa and device_type in wa_file_map: + #sleep sometime to let deploy-mg load_minigraph complete + logging.info("********** run_sim_workaround ***********") + time.sleep(180) + if device_type == "sfd" and "golden_code_202505" in data["tar_ball"]: #apply 202505 sfd specific patches + run_sim_workaround(data, wa_file_map["sfd_202505"]) + else: + run_sim_workaround(data, wa_file_map[device_type]) + run_config_reload(data) + logging.info("********** run_sim_workaround is finished ***********") + + # Add vEOS config + logging.info("********** Add vEOS config ***********") + add_vEOS_cfg(data) + logging.info("********** Add vEOS config is finished ***********") + + logging.info("********** Configure PTF backplane ip address **********") + add_ptf_backplane_addr(data) + logging.info("********** Configure PTF backplane ip address is finished ********") + + logging.info("********** Install Allure package **********") + install_allure(data) + logging.info("********** Install Allure package is finished ********") + + +def print_env_info(data, device_type, vEOS_count): + for dut_name in get_dut_names(data): + device = data[dut_name] + logging.info("Sonic DUT '{}' (admin/password): SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(dut_name, device['HostAgent'], device['serial0'], device['xr_mgmt_ip'], device['xr_redir22'])) + + logging.info("Sonic Mgmt (vxr/cisco123) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['serial0'], data['sonic_mgmt']['xr_mgmt_ip'], data['sonic_mgmt']['xr_redir22'])) + + logging.info("PTF (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['docker_ptf']['HostAgent'], data['docker_ptf']['serial0'], data['docker_ptf']['xr_mgmt_ip'], data['docker_ptf']['xr_redir22'])) + if 'dualtor' in device_type: + logging.info("MUX SIM (vxr/cisco123) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['mux_sim']['HostAgent'], data['mux_sim']['serial0'], data['mux_sim']['xr_mgmt_ip'], data['mux_sim']['xr_redir22'])) + + logging.info("VEOS (admin/123456): ") + for i in range (1,vEOS_count+1): + logging.info("VEOS{}: SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(str(i-1), data['veos'+ str(i)]['HostAgent'], data['veos'+ str(i)]['serial0'], data['veos'+ str(i)]['xr_mgmt_ip'], data['veos'+ str(i)]['xr_redir22'] )) + + logging.info("******************************************************************************************************************************************************************************\n") + if device_type == 'sherman': + logging.info("Device name is sherman. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d sherman-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_fact.py |& tee bgp_fact.log\n") + elif device_type == 'crocodile': + logging.info("Device name is crocodile. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d crocodile-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\n") + elif device_type == 'lightning': + logging.info("Device name is lightning. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d lightning-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\n") + elif device_type == 'superbolt': + logging.info("Device name is superbolt. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d superbolt-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\n") + elif device_type == 'siren': + logging.info("Device name is siren. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d siren-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\n") + elif device_type in ['churchill-mono','carib']: + logging.info("Device name is churchill-mono. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d churchill-mono-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\n") + elif device_type == 'sfd': + logging.info("Device name is sfd. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -O -u -l debug -e -s -e --skip_sanity -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_fact.py |& tee bgp_fact.log\n") + elif device_type == 'mustang': + logging.info("Device name is mustang. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d mustang-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\n") + elif device_type == 'titan': + logging.info("Device name is titan. To execute a pytest script:\\n") + logging.info("./run_tests.sh -n docker-ptf -d titan-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_facts.py |& tee bgp_fact.log\\n") + else: + logging.info("Device name is mth32 or m64. To execute a pytest script:\n") + logging.info("./run_tests.sh -n docker-ptf -d mathilda-01 -O -u -l debug -e -s -e --disable_loganalyzer -m individual -p /data/tests/logs -c bgp/test_bgp_fact.py |& tee bgp_fact.log\n") + logging.info("******************************************************************************************************************************************************************************\n") + +def export_sim_cfg_to_file(data, topo_name, device_type, docker_mgmt_container): + sim_cfg_filename = "sim_env.sh" + sim_cfg = {} + + file_contents = "" + + for dut_name in get_dut_names(data): + device = data[dut_name] + dut_host = "{}_HOST".format(dut_name.upper().replace(" ", "_")) + dut_username = "{}_USERNAME".format(dut_name.upper().replace(" ", "_")) + dut_pass = "{}_PASSWORD".format(dut_name.upper().replace(" ", "_")) + dur_ssh_port = "{}_SSH_PORT".format(dut_name.upper().replace(" ", "_")) + + file_contents += f"export {dut_host}={device['HostAgent']}\n" + file_contents += f"export {dut_username}=admin\n" + file_contents += f"export {dut_pass}=password\n" + file_contents += f"export {dur_ssh_port}={device['xr_redir22']}\n" + + file_contents += f"export SONIC_MGMT_HOST={data['sonic_mgmt']['HostAgent']}\n" + file_contents += f"export SONIC_MGMT_USERNAME=vxr\n" + file_contents += f"export SONIC_MGMT_PASSWORD=cisco123\n" + file_contents += f"export SONIC_MGMT_SSH_PORT={data['sonic_mgmt']['xr_redir22']}\n" + file_contents += f"export PTF_HOST={data['docker_ptf']['HostAgent']}\n" + file_contents += f"export PTF_USERNAME=root\n" + file_contents += f"export PTF_PASSWORD=root\n" + file_contents += f"export PTF_SSH_PORT={data['docker_ptf']['xr_redir22']}\n" + file_contents += f"export TOPO_NAME={topo_name}\n" + file_contents += f"export DEVICE_TYPE={device_type}\n" + file_contents += f"export DOCKER_MGMT_CONTAINER={docker_mgmt_container}\n" + + logging.info("Exporting sim credentials to file: {}".format(sim_cfg_filename)) + logging.info("Contents: \n{}".format(sim_cfg)) + + with open(sim_cfg_filename,'w') as cfg_file: + cfg_file.write(file_contents) + +def check_dut_reachable(dut_name, data): + logging.info(f"Checking ssh connectivity for DUT '{dut_name}'") + sonic_mgmt_ip = data['sonic_mgmt']['HostAgent'] + sonic_mgmt_username = 'vxr' + sonic_mgmt_password = 'cisco123' + sonic_mgmt_ssh_port = data['sonic_mgmt']['xr_redir22'] + xr_mgmt_ip = data[dut_name]['xr_mgmt_ip'] + + max_num_attempts = 15 + wait_time_seconds = 60 + + #ssh into sonic-mgmt first + try: + sonic_mgmt_client = paramiko.SSHClient() + sonic_mgmt_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + connect_with_retries( + sonic_mgmt_client, + hostname=sonic_mgmt_ip, + port=sonic_mgmt_ssh_port, + username=sonic_mgmt_username, + password=sonic_mgmt_password, + timeout=30 + ) + except Exception as e: + logging.info(f"Connetion to sonic-mgmt VM failed! e:{e}") + sonic_mgmt_client.close() + return -1 + + + #try pinging the DUT from sonic-mgmt container + dut_ping_cmd = f"ping -c 5 {xr_mgmt_ip}" + for attempt in range(1, max_num_attempts+1): + _, _, exit_status = _run_cmd_in_ssh(sonic_mgmt_client, dut_ping_cmd) + if exit_status == 0: + logging.info("DUT reachable via ssh") + sonic_mgmt_client.close() + return 0 + else: + logging.info(f"DUT ping failed for attempt {attempt}/{max_num_attempts}") + time.sleep(wait_time_seconds) + + logging.info(f"All {max_num_attempts} attempts failed; host is unreachable via SSH.") + sonic_mgmt_client.close() + return -1 + +def get_lc_topo_type(topo_yaml): + """ Generates LC topology code based on LC types used in Chassis topology. + V - Vanguard + G - Gauntlet + L - Lancer + e.g.: VG - Vangauard - LC0, Gauntlet - LC1 + """ + with open(topo_yaml) as f: + topo_data = yaml.load(f, Loader=yaml.FullLoader) + lc_list = topo_data['devices']['sonic_dut']['linecard_types'] + if len(lc_list) != SFD_SUPPORTED_NUM_LC: + sys.exit(f"Only {SFD_SUPPORTED_NUM_LC} LC config is supported. Provided list {lc_list}. Exiting now") + lc_topo_code = '' + for lc in lc_list: + lc_topo_code = lc_topo_code + SFD_LC_TOPO_CODE[lc] + logging.info(f'LC topo code: {lc_topo_code}') + return lc_topo_code + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] + clean_sim = args['clean_sim'] + run_sanity = args['run_sanity'] + dut_passwd = args['dut_passwd'] + dut_uname = args['dut_uname'] + topo_type = args['topo_type'] + device_type = args['device_type'] + script_file = args['script_file'] + test_file = args['test_file'] + drop_version = args['drop_version'] + log_dir = args['log_dir'] + tar_ball = args['tar_ball'] + cicd = args['cicd'] + cicd_clean = args['cicd_clean'] + additional_tests = args['additional_tests'] + create_allure_report = args['create_allure_report'] + skip_sanity = args['skip_sanity'] + sim_attach = args['sim_attach'] + apply_wa = args['apply_wa'] + add_sim_patches = args['add_sim_patches'] + bgp_hold_time_patch = args['bgp_hold_time_patch'] + test_tag = args['test_tag'] + logging.info("using topo & platform to filename mapping in '{}'".format(TOPO_PLATFORM_FILE_MAP)) + with open(TOPO_PLATFORM_FILE_MAP) as cfg_file: + TOPO_PLATFORM_FILE_DICT = json.load(cfg_file) + + logging.info("Topo & platform to filename mapping dict: '{}'".format(TOPO_PLATFORM_FILE_DICT)) + + #get topo_yaml from topo_type + if not topo_yaml and topo_type in TOPO_PLATFORM_FILE_DICT: + if device_type in TOPO_PLATFORM_FILE_DICT[topo_type]: + topo_yaml = TOPO_PLATFORM_FILE_DICT[topo_type][device_type]["pyvxr_yaml_file"] + + ptf_intfcount = 32 + + dut_platform = get_dut_platform(device_type) + + original_topo_type = topo_type + if topo_type in ('t2-min-VG', 't2-min-VL', 't2-min-LL'): + # All LC combinations for SFD T2 min topology use same Sonic-mgmt SIM topology + topo_type = 't2-min' + + base_topo_file, vEOS_count, ptf_intfcount = determine_base_topo(topo_type, device_type, original_topo_type) + + logging.info("USING BASE TOPO {}".format(base_topo_file)) + + vxr_start_begin = datetime.datetime.now() + + if sim_attach: + logging.info("Attaching to existing sim") + vxr_path, input_file = attach_vxr() + logging.info("Attaching to existing sim done") + + else: + logging.info("Starting new sim") + vxr_path, input_file = start_vxr(args['input_file'], cicd, clean_sim, topo_yaml) + logging.info("Starting new sim done") + + vxr_start_end = datetime.datetime.now() + + with open(input_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + + for dut_name in get_dut_names(data): + data[dut_name]['uname'] = dut_uname + data[dut_name]['passwd'] = dut_passwd + + data['tar_ball'] = tar_ball + data['ptf_intf_count'] = ptf_intfcount + + # For SFD, generate the LC topology Code. Topology code is based on + # LC types used in teh chassis for this topology instance bringup + if device_type == 'sfd' and topo_type == 't2-min': + lc_topo_code = get_lc_topo_type(topo_yaml) + else: + lc_topo_code = None + + for dut_name in get_dut_names(data): + ret = check_dut_reachable(dut_name, data) + if ret != 0: + logging.info(f"ERROR: DUT {dut_name} cannot be reached! Exit.") + return -1 + + logging.info("Configuring sim for sonic-mgmt") + configure_vxr(data, topo_type, base_topo_file, vEOS_count, dut_platform, device_type, lc_topo_code, apply_wa, add_sim_patches,bgp_hold_time_patch) + logging.info("Configuring sim for sonic-mgmt is done") + + print_env_info(data, device_type, vEOS_count) + + vcr_configure_end = datetime.datetime.now() + + export_sim_cfg_to_file(data, "docker-ptf", device_type, "docker-sonic-mgmt") + create_vxr_log_tarball(vxr_path) + upload_log_files_to_log_server([VXR_OUT, VXR_OUT_TAR_GZ]) + + ret = 0 + if run_sanity: + ret = run_scripts_remote( + data['sonic_mgmt']['HostAgent'], + "vxr", + "cisco123", + script_file, + drop_version, + log_dir, + device_type, + topo_type, + create_allure_report, + ssh_port=data['sonic_mgmt']['xr_redir22'], + additional_tests=additional_tests, + skip_sanity=skip_sanity, + dut_data_file=input_file, + add_sim_patches=add_sim_patches, + test_tag=test_tag + ) + + sim_time_delta = (vxr_start_end - vxr_start_begin).total_seconds() + profile_time_delta = (vcr_configure_end - vxr_start_end).total_seconds() + + logging.info("******************************************************************************************************************************************************************************\n") + logging.info("Time taken for the sim to come up: {} mins".format(sim_time_delta/60)) + logging.info("Time taken for the profile to come up: {} mins".format(profile_time_delta/60)) + logging.info("******************************************************************************************************************************************************************************\n") + + print_env_info(data, device_type, vEOS_count) + + if cicd_clean: + logging.info("****** Clearing SIM at the end of CICD run ******** ") + os.system("{} clean".format(vxr_path)) + + return ret + + +if __name__ == '__main__': + ret = main() + sys.exit(ret) diff --git a/infra/create_spytest_simtb.py b/infra/create_spytest_simtb.py new file mode 100644 index 00000000000..0c1da55317c --- /dev/null +++ b/infra/create_spytest_simtb.py @@ -0,0 +1,465 @@ +#!/router/bin/python3.8.2_mcpre-v1 + +# Creates the t1 topology using vxr.py +# Create admin user in vEOS vm +# Create testbed file based on vxr_ports +# Upload t1 specific files to sonic mgmt container +# Change DUT password and set mgmt ip address +# Start docker container, deploy DUT minigraph +# Replace DUT Mgmt Address +# Reload DUT config +# Add vEOS config +# +# Usage: ./create_sonic_t1_ads.py -t sonic_t1_topo.yaml -c +# -t Topology file for PyVxr +# -c Clean pre-existing sim +# +# After the script is run – you can log into the sonic dut (admin/cisco123 – I change the password to cisco123) and check for bgp summary – both v4 and v6. +# + +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-i', '--input_file', type=str, help='Input port file', + required=False,default=None) + parser.add_argument('-t', '--topo_yaml', type=str, help='topo yaml file', + required=True,default=None) + parser.add_argument('-p', '--dut_passwd', type=str, help='Dut password, when it is different from YourPaSsWoRd', + required=False,default="YourPaSsWoRd") + parser.add_argument('-u', '--dut_uname', type=str, help='Dut username, when it is different from admin', + required=False,default="admin") + parser.add_argument('-n', '--vEOS_count', type=int, help='Number of vEOS vm', + required=False,default=32) + parser.add_argument('-c', '--clean_sim', action='store_true', help='Clean simulation', + default=False) + return parser + +def deploy_mg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("docker container start docker-sonic-mgmt \n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('python TestbedProcessing.py -i testbed-sherman-t1.yaml \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv gen-mg docker-ptf lab group_vars/lab/secrets.yml\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + finally: + print(buff) + + ssh.close() + +def vEOS_inital_cfg(data,vEOS_count): + # Specify the connection timeout in seconds for blocking operations, like connection attempt + connection_timeout = 5 + + # Specify a timeout in seconds. Read until the string is found or until the timeout has passed + reading_timeout = 5 + base = 100 + + for i in range (1,vEOS_count+1): + veos1_host = data['veos'+ str(i)]['HostAgent'] + veos1_port = data['veos'+str(i)]['serial0'] + + print('Adding admin password for VM0{}:'.format(str(base))) + base += 1 + add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout) + + +def create_testbed_file(data): + input_file = "testbed-sherman-t1.yaml" + with open(input_file) as f: + tdata = yaml.load(f, Loader=yaml.FullLoader) + f.close() + + tdata['devices']['sherman-01']['ansible']['ansible_host'] = data['sonic_dut']['xr_mgmt_ip'] + tdata['devices']['sherman-01']['ansible']['ansible_ssh_user'] = data['sonic_dut']['uname'] + #tdata['devices']['docker-ptf']['ansible']['ansible_host'] = data['ptf']['xr_mgmt_ip'] + '/24' + tdata['testbed']['docker-ptf']['ptf_ip'] = data['ptf']['xr_mgmt_ip'] + '/24' + base = 100 + for i in range (1,33): + tdata['veos']['vms_1']['VM0' + str(base)]['ansible_host'] = data['veos'+str(i)]['xr_mgmt_ip'] + base +=1 + + with open(input_file,'w') as f: + yaml.dump(tdata,f) + f.close() + +def change_dut_passwd(data): + host = data['sonic_dut']['HostAgent'] + port = data['sonic_dut']['xr_redir22'] + user = data['sonic_dut']['uname'] + passwd = data['sonic_dut']['passwd'] + #passwd = "cisco123" + new_passwd = "cisco123" + mgmt_ip = data['sonic_dut']['xr_mgmt_ip'] + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + try: + ssh.connect(host, port, user, passwd) + except paramiko.ssh_exception.AuthenticationException: + ssh.connect(host, port, user, new_passwd) + + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp) + + # Ssh and wait for the password prompt. + chan.send('sudo passwd {}\n'.format(user)) + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while buff.find(' successfully') < 0 : + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + if (' successfully') in buff: + print("Password change successful") + else: + print("Password change failed") + + time.sleep(3) + chan.send('sudo config interface ip add eth0 {}/24 192.168.122.1\n'.format(mgmt_ip)) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config interface ip add eth0 FC00:2::32/64 fc00:2::1\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config save -y\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo cp /etc/sonic/config_db.json /tmp/config_db.json\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + ssh.close() + +def run_python_script(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, port, user, passwd) + chan = ssh.invoke_shell() + for cmd in cmd_list: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + print("Response : %s" % resp.decode("ascii")) + + ssh.close() + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + for cmd in cmd_list: + ssh.connect(host, port, user, passwd) + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("ascii").strip() + error = stderr.read().decode("ascii") + print(out) + if error: + print('There was an error pulling the runtime: {}'.format(error)) + ssh.close() + +def add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout): + tn = telnetlib.Telnet(veos1_host,veos1_port, connection_timeout) + + # tn.read_until(b"Username: ") + # tn.write(user.encode('ascii') + b"\n") + # if password: + # tn.read_until(b"Password: ") + # tn.write(password.encode('ascii') + b"\n") + + tn.write(b"enable\n") + time.sleep(1) + tn.write(b"conf t\n") + time.sleep(1) + tn.write(b"username admin secret 123456\n") + time.sleep(1) + tn.write(b"aaa root secret 123456\n") + time.sleep(1) + tn.write(b"end\n") + time.sleep(1) + tn.write(b"copy running-config startup-config\n") + time.sleep(1) + tn.close() + +def upload_t1_files(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.put('testbed_add_vm_topology.yml','sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('t1-spine.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2') + ftp_client.put('t1-tor.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2') + ftp_client.put('veos.yml','sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + ftp_client.put('testbed-sherman-t1.yaml','sonic-test/sonic-mgmt/ansible/testbed-sherman-t1.yaml') + ftp_client.put('topo_t1.yml', 'sonic-test/sonic-mgmt/ansible/vars/topo_t1.yml') + ftp_client.close() + +def replace_dut_mgmt_address(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd']) + ftp_client=ssh.open_sftp() + ftp_client.get('/tmp/config_db.json','config_db_current.json') + ftp_client.close() + ssh.close() + + with open('config_db_current.json') as cfg_file: + cfg_data = json.load(cfg_file) + current_mgm_intf = cfg_data["MGMT_INTERFACE"] + print(cfg_data["MGMT_INTERFACE"]) + cfg_file.close() + + with open('config_db.json') as cfg_file: + cfg_data = json.load(cfg_file) + cfg_file.close() + + with open('config_db.json','w') as cfg_file: + cfg_data["MGMT_INTERFACE"] = current_mgm_intf + json.dump(cfg_data, cfg_file, indent=4) + cfg_file.close() + + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd']) + ftp_client=ssh.open_sftp() + ftp_client.put('config_db.json','/tmp/config_db_new.json') + ftp_client.close() + ssh.close() + +def reload_dut_with_newCFG(data): + cmd_list = list() + cmd_list.append('sudo cp /tmp/config_db_new.json /etc/sonic/config_db.json\n') + cmd_list.append('sudo reboot\n') + run_exec_cmds(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd'], cmd_list) + +def add_vEOS_cfg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv -m veos add-topo docker-ptf password.txt\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + print(resp.decode("ascii")) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + #finally: + # print(buff) + + ssh.close() + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] + clean_sim = args['clean_sim'] + dut_passwd = args['dut_passwd'] + dut_uname = args['dut_uname'] + if clean_sim: + os.system("/auto/vxr/pyvxr/pyvxr-0.6.2/vxr.py --cmd clean") + os.system("cp sonic_t1_topo/* .") + os.system("/auto/vxr/pyvxr/pyvxr-0.6.2/vxr.py --cmd start {}".format(topo_yaml)) + os.system("/auto/vxr/pyvxr/pyvxr-0.6.2/vxr.py --cmd ports > vxr_ports.yaml") + input_file = args['input_file'] + vEOS_count = args['vEOS_count'] + + if input_file is None: + input_file = "vxr_ports.yaml" + + with open(input_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + + data['sonic_dut']['uname'] = dut_uname + data['sonic_dut']['passwd'] = dut_passwd + + # Create admin user in vEOS vm + print("****** Create admin user in vEOS vm *******") + vEOS_inital_cfg(data,vEOS_count) + + # Create testbed file based on vxr_ports + print("****** Create testbed file based on vxr_ports *******") + create_testbed_file(data) + + # Upload t1 specific files to sonic mgmt container + print("********** Upload t1 specific files to sonic mgmt container ***********") + upload_t1_files(data) + + # Change DUT password and set mgmt ip address + print("********** Change DUT password and set mgmt ip address ***********") + change_dut_passwd(data) + + # Start docker container, deploy DUT minigraph + print("********** Start docker container, deploy DUT minigraph ***********") + deploy_mg(data) + + # Replace DUT Mgmt Address + print("********** Replace DUT Mgmt Address ***********") + replace_dut_mgmt_address(data) + + # Reload DUT config + print("********** Reload DUT config ***********") + reload_dut_with_newCFG(data) + + # Add vEOS config + print("********** Add vEOS config ***********") + add_vEOS_cfg(data) + + print("Sonic DUT: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_dut']['HostAgent'], data['sonic_dut']['serial0'], data['sonic_dut']['xr_mgmt_ip'], data['sonic_dut']['xr_redir22'])) + + print("Sonic Mgmt: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['serial0'], data['sonic_mgmt']['xr_mgmt_ip'], data['sonic_mgmt']['xr_redir22'])) + + print("PTF: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['ptf']['HostAgent'], data['ptf']['serial0'], data['ptf']['xr_mgmt_ip'], data['ptf']['xr_redir22'])) + + for i in range (1,vEOS_count+1): + print("VEOS{}: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(str(i-1), data['veos'+ str(i)]['HostAgent'], data['veos'+ str(i)]['serial0'], data['veos'+ str(i)]['xr_mgmt_ip'], data['veos'+ str(i)]['xr_redir22'] )) + +if __name__ == '__main__': + main() diff --git a/infra/create_tortuga_topo.py b/infra/create_tortuga_topo.py new file mode 100755 index 00000000000..880794e586b --- /dev/null +++ b/infra/create_tortuga_topo.py @@ -0,0 +1,838 @@ +#!/router/bin/python3.8.2_mcpre-v1 + +# Creates the t1 topology using vxr.py +# Create admin user in vEOS vm +# Create testbed file based on vxr_ports +# Upload t1 specific files to sonic mgmt container +# Change DUT password and set mgmt ip address +# Start docker container, deploy DUT minigraph +# Replace DUT Mgmt Address +# Reload DUT config +# Add vEOS config +# +# Usage: ./create_sonic_t1_ads.py -t sonic_t1_topo.yaml -c +# -t Topology file for PyVxr +# -c Clean pre-existing sim +# +# + +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time +import datetime +import subprocess +import sys +from jinja2 import Environment, FileSystemLoader +import re +from run_scripts_remote import run_scripts_remote, handle_sim_failure, FAILURE_RESONS + +SUMMARY_REPORT_FILENAME = "results.json" +COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" +TOPO_PLATFORM_FILE_MAP = 'topo_and_platform_to_filename_map.json' +SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) +COMMON_REPORT_PATH = "../../{}".format(COMMON_REPORT_FILENAME) + +# Return a list of device names beginning with "sonic_dut_", for use with the data[] dictionary +# For example: ['sonic_dut_1', 'sonic_dut_2'] +def get_dut_names(data): + return [key for key in data if key.startswith('sonic_dut')] + +# Converts a DUT device name from a VXR topology into the proper non-VXR topology name +# For example: +# - Use legacy "platform-01" format for older VXR toplogies with just a single DUT +# ('sonic_dut', 'sherman') -> 'sherman-01' +# +# - For VXR topologies with multiple DUT, use 0-indexed single digit +# ('sonic_dut_0', 'mathilda') -> 'mathilda-0' +# ('sonic_dut_0', 'crocodile') -> 'crocodile-0' +# ('sonic_dut_1', 'sherman') -> 'sherman-1' +def get_tdata_dut_name(vxr_dut_name, dut_platform): + assert vxr_dut_name.startswith('sonic_dut') + + if vxr_dut_name == 'sonic_dut': + return "{}-01".format(dut_platform) + else: + dut_id = vxr_dut_name.split('_')[-1] + return "{}-{}".format(dut_platform, dut_id) + + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-i', '--input_file', type=str, help='Input port file', + required=False,default=None) + parser.add_argument('-b', '--tar_ball', type=str, help='Specify tar ball location', + required=False,default="http://172.29.93.10/sonic-images/golden-code/golden_code_202012.tar.gz") + parser.add_argument('-f', '--topo_yaml', type=str, help='topo yaml file', + required=False,default=None) + parser.add_argument('-t', '--topo_type', type=str, help='topo type', + required=False,default='sol-tb-l2vni', choices=['sol-tb-l2vni', 'sol-tb-l3vni', 'tortuga-controller-2x2', 'tortuga-controller-2x3', 'tortuga-controller-1x3', 'tortuga-controller-dci1x2-2', 'tortuga-controller-dci2x2-2', 'tortuga-controller-dci1x2-3']) + parser.add_argument('-g', '--topo_name', type=str, help='Topo name specified to run tests', + required=False,default='docker-ptf') + parser.add_argument('-p', '--dut_passwd', type=str, help='Dut password, when it is different from YourPaSsWoRd', + required=False,default="password") + parser.add_argument('-u', '--dut_uname', type=str, help='Dut username, when it is different from admin', + required=False,default="admin") + parser.add_argument('-c', '--clean_sim', action='store_true', help='Clean simulation', + default=False) + parser.add_argument('-d', '--device_type', type=str, help='options are sherman, mth32, crocodile, sfd, churchill-mono, carib, laguna', + required=False,default="mth64", choices=['sherman', 'mth32', 'mth64', 'crocodile', 'sfd', 'churchill-mono','carib', 'laguna']) + parser.add_argument('-s', '--script_file', type=str, help='Input test script file', + required=False,default='sanity-scripts/sanity_scripts.txt') + parser.add_argument('-v', '--drop_version', type=str, help='specify drop version', + required=False,default='DT') + parser.add_argument('-l', '--log_dir', type=str, help='Log dir', + required=False,default='DT') + parser.add_argument('-r', '--run_sanity', action='store_true', help='Run Sanity', + default=False), + parser.add_argument('--additional_tests', type=str, help='Additional Testscases to test', + required=False, default='') + parser.add_argument('--cicd', action='store_true', help='Use CICD related parameters', + default=False) + parser.add_argument('--cicd_clean', action='store_true', help='Clean at the end of CICD run', + default=False) + parser.add_argument('--create_allure_report', action='store_true', help='When testing, specify if allure report to be created at the end of test', + default=False) + parser.add_argument('-k', '--skip_sanity', action='store_true', help='Skip sanity test', + default=False) + parser.add_argument('--sim_attach', action='store_true', help='Use the existing SIM', + default=False) + parser.add_argument('--fabric_name', type=str, help='Fabric Name should match the name that is part of your tortuga controller yaml name - it should match your hostname', + required=False,default="kindly-1x3") + return parser + +def repo_update(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("ls \n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + if 'golden-code' in buff: + chan.send("rm -rf golden-code\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("docker container stop docker-sonic-mgmt\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("docker container rm docker-sonic-mgmt\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("mkdir golden-code\n") + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("cd golden-code\n") + buff = '' + while not buff.endswith(':~/golden-code$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("wget {}\n".format(data['tar_ball'])) + buff = '' + while not buff.endswith(':~/golden-code$ '): + resp = chan.recv(9999) + buff += resp.decode("utf-8") + time.sleep(3) + + tar_ball = data['tar_ball'].split('/')[-1] + chan.send("tar -xvf {}\n".format(tar_ball)) + buff = '' + while not buff.endswith(':~/golden-code$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("cd sonic-test/sonic-mgmt\n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("mkdir ansible/vars/docker-ptf\n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send("docker run -v $PWD:/data --privileged --network host --name 'docker-sonic-mgmt' -itd docker-sonic-mgmt-vxr bash \n") + buff = '' + while not buff.endswith(':~/golden-code/sonic-test/sonic-mgmt$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + + ssh.close() + +def create_testbed_file(data,base_topo_file,vEOS_count, dut_platform, device_type): + input_file = base_topo_file + with open(input_file) as f: + tdata = yaml.load(f, Loader=yaml.FullLoader) + f.close() + + # Find each device listed in the VXR topology that starts with "sonic_dut_" + for vxr_device_name in get_dut_names(data): + tdata_dut_name = get_tdata_dut_name(vxr_device_name, dut_platform) + tdata['devices'][tdata_dut_name]['ansible']['ansible_host'] = data[vxr_device_name]['xr_mgmt_ip'] + tdata['devices'][tdata_dut_name]['ansible']['ansible_ssh_user'] = data[vxr_device_name]['uname'] + + tdata['testbed']['docker-ptf']['ansible']['ansible_host'] = data['docker_ptf']['xr_mgmt_ip'] + '/24' + tdata['testbed']['docker-ptf']['ptf_ip'] = data['docker_ptf']['xr_mgmt_ip'] + '/24' + tdata['devices']['docker-ptf']['ansible']['ansible_host'] = data['docker_ptf']['xr_mgmt_ip'] + '/24' + + if 'dualtor' in device_type: + tdata['devices']['str-acs-serv-01']['ansible']['ansible_host'] = data['mux_sim']['xr_mgmt_ip'] + '/24' + tdata['host_vars']['str-acs-serv-01']['mgmt_gw'] = data['mux_sim']['xr_mgmt_ip'] + tdata['testbed']['docker-ptf']['group-name'] = 'vms_1' + + base = 100 + tdata['veos']['vm_host_1']['STR-ACS-SERV-01']['ansible_host'] = data['sonic_mgmt']['HostAgent'] + for i in range (1,vEOS_count+1): + tdata['veos']['vms_1']['VM0' + str(base)]['ansible_host'] = data['veos'+str(i)]['xr_mgmt_ip'] + base +=1 + + with open(input_file,'w') as f: + yaml.dump(tdata,f) + f.close() + +def run_python_script(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, port, user, passwd) + chan = ssh.invoke_shell() + for cmd in cmd_list: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + print("Response : %s" % resp.decode("ascii")) + + ssh.close() + +def apply_config(host,port,user,passwd,filepath): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, port, user, passwd) + chan = ssh.invoke_shell() + cfg_file = open(filepath, 'r') + configs = cfg_file.readlines() + for cmd in configs: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + print("Response : %s" % resp.decode("ascii")) + + ssh.close() + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + out = "" + for cmd in cmd_list: + ssh.connect(host, port, user, passwd) + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("utf-8").strip() + error = stderr.read().decode("utf-8") + print(out) + if error: + print('There was an error pulling the runtime: {}'.format(error)) + ssh.close() + return out + +# Write a buffer to a remote file on the sonic-mgmt VM +# Allows us to upload a generated file without creating a local temporary copy of it +def upload_file_stream(data, stream, dest): + with paramiko.SSHClient() as ssh: + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + with ssh.open_sftp() as ftp_client: + with ftp_client.file(dest, 'w') as fd: + fd.write(stream) + + +def upload_tb_files(data,topo_type,base_topo_file,device_type): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.put('run_scripts.py','golden-code/sonic-test/sonic-mgmt/tests/run_scripts.py') + ftp_client.put('../sonic-mgmt/tests/allure_server.py','golden-code/sonic-test/sonic-mgmt/tests/allure_server.py') + #ftp_client.put('sanity_scripts.txt','sonic-test/sonic-mgmt/tests/sanity_scripts.txt') + ftp_client.put(base_topo_file,'golden-code/sonic-test/sonic-mgmt/ansible/{}'.format(base_topo_file)) + ftp_client.put('testbed_add_vm_topology.yml','golden-code/sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','golden-code/sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('veos.yml','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + if device_type == 'mth32': + ftp_client.put('lab_connection_graph_mth32.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_mth32.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_mth32.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'crocodile': + ftp_client.put('lab_connection_graph_crocodile.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_crocodile.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_crocodile.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'dualtor_mth64': + ftp_client.put('lab_connection_graph_dualtor_mth64.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + elif device_type == 'churchill-mono': + ftp_client.put('lab_connection_graph_churchill_mono.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'carib': + ftp_client.put('lab_connection_graph_churchill_mono.xml','golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('sonic_lab_links_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_links.csv') + ftp_client.put('sonic_lab_devices_churchill_mono.csv','golden-code/sonic-test/sonic-mgmt/ansible/files/sonic_lab_devices.csv') + elif device_type == 'sfd' and topo_type == 't2-min': + ftp_client.put('lab_connection_graph_t2_2lc_min.xml', 'golden-code/sonic-test/sonic-mgmt/ansible/files/lab_connection_graph.xml') + ftp_client.put('topo_Cisco-8800-LC-48H-C48.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/docker-ptf/topo_Cisco-8800-LC-48H-C48.yml') + ftp_client.put('topo_Cisco-8800-RP.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/docker-ptf/topo_Cisco-8800-RP.yml') + ftp_client.put('topo_t2_2lc_min_ports-masic.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t2_2lc_min_ports-masic.yml') + if topo_type in ['t0', 'dualtor-56']: + ftp_client.put('t0-leaf.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t0-leaf.j2') + elif topo_type == 't1': + ftp_client.put('t1-spine.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2') + ftp_client.put('t1-tor.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2') + ftp_client.put('topo_t1.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t1.yml') + elif topo_type == 't1-28-lag': + ftp_client.put('t1-28-lag-spine.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-spine.j2') + ftp_client.put('t1-28-lag-tor.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-tor.j2') + ftp_client.put('topo_t1-28-lag.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t1-28-lag.yml') + elif topo_type == 't1-lag-dash-4': + ftp_client.put('t1-28-lag-spine.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-lag-dash-4-spine.j2') + ftp_client.put('t1-28-lag-tor.j2','golden-code/sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-lag-dash-4-tor.j2') + ftp_client.put('topo_t1-lag-dash-4.yml', 'golden-code/sonic-test/sonic-mgmt/ansible/vars/topo_t1-lag-dash-4.yml') + ftp_client.close() + +def reload_dut_with_newCFG(data): + for dut_name in get_dut_names(data): + cmd_list = list() + cmd_list.append('sudo cp /tmp/config_db_new.json /etc/sonic/config_db.json\n') + cmd_list.append('sudo cp /tmp/minigraph.xml /etc/sonic/minigraph.xml\n') + cmd_list.append('sudo reboot\n') + run_exec_cmds(data[dut_name]['HostAgent'], data[dut_name]['xr_redir22'], data[dut_name]['uname'], data[dut_name]['passwd'], cmd_list) + + +def get_dut_platform(device_type): + if device_type == 'sherman': + return "sherman" + elif device_type == 'sfd': + return 'sfd' + elif device_type == 'crocodile': + return 'crocodile' + elif device_type == 'churchill-mono': + return 'churchill-mono' + elif device_type == 'carib': + return 'carib' + elif device_type == 'laguna': + return 'laguna' + else: + return "mathilda" + +def start_vxr(input_file, cicd, clean_sim, topo_yaml): + vxr_path = "/auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + if input_file: + return vxr_path, input_file + + if cicd: + vxr_path = "python3 /auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + if clean_sim: + os.system("{} clean".format(vxr_path)) + + os.system("bash -c '{} start {} |& tee sim_op.log'".format(vxr_path, topo_yaml)) + + sim_output = subprocess.check_output("grep -i 'sim up' sim_op.log | wc -l", shell=True).strip() + + # Populate results file with failure data + if not int(sim_output): + handle_sim_failure(FAILURE_RESONS.SIM_BRINGUP_FAIL) + sys.exit("Sim is not up. Exiting now") + + os.system("{} ports > vxr_ports.yaml".format(vxr_path)) + return vxr_path, "vxr_ports.yaml" + +def attach_vxr(): + vxr_path = "/auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + os.system("{} ports > vxr_ports.yaml".format(vxr_path)) + return vxr_path, "vxr_ports.yaml" + + +def print_env_info(data, device_type): + if 'tortuga-controller' not in data['topo_type']: + print("Sonic Mgmt (vxr/cisco123) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['serial0'], data['sonic_mgmt']['xr_mgmt_ip'], data['sonic_mgmt']['xr_redir22'])) + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['leaf0']['HostAgent'], data['leaf0']['serial0'], data['leaf0']['xr_mgmt_ip'], data['leaf0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['leaf1']['HostAgent'], data['leaf1']['serial0'], data['leaf1']['xr_mgmt_ip'], data['leaf1']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['spine0']['HostAgent'], data['spine0']['serial0'], data['spine0']['xr_mgmt_ip'], data['spine0']['xr_redir22'])) + print("Spine1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['spine1']['HostAgent'], data['spine1']['serial0'], data['spine1']['xr_mgmt_ip'], data['spine1']['xr_redir22'])) + print("Ixia Chassis (ixia-pc/<>) : SlurmHost: {} Tlnt Port: {} ".format(data['ixia_chassis']['HostAgent'], data['ixia_chassis']['serial0'])) + print("Ixia Gui (ixia-pc/<>) : SlurmHost: {} Tlnt Port: {} redir3389: {}".format(data['ixia_gui']['HostAgent'], data['ixia_gui']['serial0'], data['ixia_gui']['redir3389'])) + print("Ixia (ixia-pc/<>) : SlurmHost: {} Tlnt Port: {}".format(data['ixia']['HostAgent'], data['ixia']['serial0'])) + elif 'tortuga-controller-2x2' in data['topo_type']: + leaf_ports = [data['L0']['xr_redir22'],data['L1']['xr_redir22']] + spine_ports = [data['S0']['xr_redir22'],data['S1']['xr_redir22']] + host_ports = list() + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L0']['HostAgent'], data['L0']['serial0'], data['L0']['xr_mgmt_ip'], data['L0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L1']['HostAgent'], data['L1']['serial0'], data['L1']['xr_mgmt_ip'], data['L1']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S0']['HostAgent'], data['S0']['serial0'], data['S0']['xr_mgmt_ip'], data['S0']['xr_redir22'])) + print("Spine1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S1']['HostAgent'], data['S1']['serial0'], data['S1']['xr_mgmt_ip'], data['S1']['xr_redir22'])) + for i in range(1,8): + print("trex{} (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(i, data['trex' + str(i)]['HostAgent'], data['trex' + str(i)]['serial0'], data['trex' + str(i)]['xr_mgmt_ip'], data['trex' + str(i)]['xr_redir22'])) + host_ports.append(data['trex' + str(i)]['xr_redir22']) + return leaf_ports, host_ports, spine_ports + elif 'tortuga-controller-2x3' in data['topo_type']: + leaf_ports = [data['L0']['xr_redir22'],data['L1']['xr_redir22'],data['L2']['xr_redir22']] + spine_ports = [data['S0']['xr_redir22'],data['S1']['xr_redir22']] + host_ports = list() + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L0']['HostAgent'], data['L0']['serial0'], data['L0']['xr_mgmt_ip'], data['L0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L1']['HostAgent'], data['L1']['serial0'], data['L1']['xr_mgmt_ip'], data['L1']['xr_redir22'])) + print("Leaf2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L2']['HostAgent'], data['L2']['serial0'], data['L2']['xr_mgmt_ip'], data['L2']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S0']['HostAgent'], data['S0']['serial0'], data['S0']['xr_mgmt_ip'], data['S0']['xr_redir22'])) + print("Spine1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S1']['HostAgent'], data['S1']['serial0'], data['S1']['xr_mgmt_ip'], data['S1']['xr_redir22'])) + for i in range(1,11): + print("trex{} (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(i, data['trex' + str(i)]['HostAgent'], data['trex' + str(i)]['serial0'], data['trex' + str(i)]['xr_mgmt_ip'], data['trex' + str(i)]['xr_redir22'])) + host_ports.append(data['trex' + str(i)]['xr_redir22']) + return leaf_ports, host_ports, spine_ports + elif 'tortuga-controller-dci1x2-2' in data['topo_type']: + leaf_ports = [data['L0']['xr_redir22'],data['L1']['xr_redir22'],data['L2']['xr_redir22'],data['L3']['xr_redir22']] + spine_ports = [data['S0']['xr_redir22'],data['S1']['xr_redir22']] + host_ports = list() + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L0']['HostAgent'], data['L0']['serial0'], data['L0']['xr_mgmt_ip'], data['L0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L1']['HostAgent'], data['L1']['serial0'], data['L1']['xr_mgmt_ip'], data['L1']['xr_redir22'])) + print("Leaf2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L2']['HostAgent'], data['L2']['serial0'], data['L2']['xr_mgmt_ip'], data['L2']['xr_redir22'])) + print("Leaf3 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L3']['HostAgent'], data['L3']['serial0'], data['L3']['xr_mgmt_ip'], data['L3']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S0']['HostAgent'], data['S0']['serial0'], data['S0']['xr_mgmt_ip'], data['S0']['xr_redir22'])) + print("Spine1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S1']['HostAgent'], data['S1']['serial0'], data['S1']['xr_mgmt_ip'], data['S1']['xr_redir22'])) + for i in range(1,15): + print("trex{} (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(i, data['trex' + str(i)]['HostAgent'], data['trex' + str(i)]['serial0'], data['trex' + str(i)]['xr_mgmt_ip'], data['trex' + str(i)]['xr_redir22'])) + host_ports.append(data['trex' + str(i)]['xr_redir22']) + return leaf_ports, host_ports, spine_ports + elif 'tortuga-controller-dci2x2-2' in data['topo_type']: + leaf_ports = [data['L0']['xr_redir22'],data['L1']['xr_redir22'],data['L2']['xr_redir22'],data['L3']['xr_redir22']] + spine_ports = [data['S0']['xr_redir22'],data['S1']['xr_redir22'],data['S2']['xr_redir22'],data['S3']['xr_redir22']] + host_ports = list() + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L0']['HostAgent'], data['L0']['serial0'], data['L0']['xr_mgmt_ip'], data['L0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L1']['HostAgent'], data['L1']['serial0'], data['L1']['xr_mgmt_ip'], data['L1']['xr_redir22'])) + print("Leaf2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L2']['HostAgent'], data['L2']['serial0'], data['L2']['xr_mgmt_ip'], data['L2']['xr_redir22'])) + print("Leaf3 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L3']['HostAgent'], data['L3']['serial0'], data['L3']['xr_mgmt_ip'], data['L3']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S0']['HostAgent'], data['S0']['serial0'], data['S0']['xr_mgmt_ip'], data['S0']['xr_redir22'])) + print("Spine1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S1']['HostAgent'], data['S1']['serial0'], data['S1']['xr_mgmt_ip'], data['S1']['xr_redir22'])) + print("Spine2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S2']['HostAgent'], data['S2']['serial0'], data['S2']['xr_mgmt_ip'], data['S2']['xr_redir22'])) + print("Spine3 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S3']['HostAgent'], data['S3']['serial0'], data['S3']['xr_mgmt_ip'], data['S3']['xr_redir22'])) + for i in range(1,15): + print("trex{} (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(i, data['trex' + str(i)]['HostAgent'], data['trex' + str(i)]['serial0'], data['trex' + str(i)]['xr_mgmt_ip'], data['trex' + str(i)]['xr_redir22'])) + host_ports.append(data['trex' + str(i)]['xr_redir22']) + return leaf_ports, host_ports, spine_ports + elif 'tortuga-controller-dci1x2-3' in data['topo_type']: + leaf_ports = [data['L0']['xr_redir22'],data['L1']['xr_redir22'],data['L2']['xr_redir22'],data['L3']['xr_redir22'],data['L4']['xr_redir22'],data['L5']['xr_redir22']] + spine_ports = [data['S0']['xr_redir22'],data['S1']['xr_redir22'],data['S2']['xr_redir22']] + host_ports = list() + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L0']['HostAgent'], data['L0']['serial0'], data['L0']['xr_mgmt_ip'], data['L0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L1']['HostAgent'], data['L1']['serial0'], data['L1']['xr_mgmt_ip'], data['L1']['xr_redir22'])) + print("Leaf2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L2']['HostAgent'], data['L2']['serial0'], data['L2']['xr_mgmt_ip'], data['L2']['xr_redir22'])) + print("Leaf3 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L3']['HostAgent'], data['L3']['serial0'], data['L3']['xr_mgmt_ip'], data['L3']['xr_redir22'])) + print("Leaf4 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L4']['HostAgent'], data['L4']['serial0'], data['L4']['xr_mgmt_ip'], data['L4']['xr_redir22'])) + print("Leaf5 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L5']['HostAgent'], data['L5']['serial0'], data['L5']['xr_mgmt_ip'], data['L5']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S0']['HostAgent'], data['S0']['serial0'], data['S0']['xr_mgmt_ip'], data['S0']['xr_redir22'])) + print("Spine1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S1']['HostAgent'], data['S1']['serial0'], data['S1']['xr_mgmt_ip'], data['S1']['xr_redir22'])) + print("Spine2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S2']['HostAgent'], data['S2']['serial0'], data['S2']['xr_mgmt_ip'], data['S2']['xr_redir22'])) + for i in range(1,22): + print("trex{} (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(i, data['trex' + str(i)]['HostAgent'], data['trex' + str(i)]['serial0'], data['trex' + str(i)]['xr_mgmt_ip'], data['trex' + str(i)]['xr_redir22'])) + host_ports.append(data['trex' + str(i)]['xr_redir22']) + return leaf_ports, host_ports, spine_ports + else: + leaf_ports = [data['L0']['xr_redir22'],data['L1']['xr_redir22'],data['L2']['xr_redir22']] + spine_ports = [data['S0']['xr_redir22']] + host_ports = list() + print("Leaf0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L0']['HostAgent'], data['L0']['serial0'], data['L0']['xr_mgmt_ip'], data['L0']['xr_redir22'])) + print("Leaf1 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L1']['HostAgent'], data['L1']['serial0'], data['L1']['xr_mgmt_ip'], data['L1']['xr_redir22'])) + print("Leaf2 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['L2']['HostAgent'], data['L2']['serial0'], data['L2']['xr_mgmt_ip'], data['L2']['xr_redir22'])) + print("Spine0 (admin/password) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['S0']['HostAgent'], data['S0']['serial0'], data['S0']['xr_mgmt_ip'], data['S0']['xr_redir22'])) + for i in range(1,11): + print("trex{} (root/root) : SlurmHost: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(i, data['trex' + str(i)]['HostAgent'], data['trex' + str(i)]['serial0'], data['trex' + str(i)]['xr_mgmt_ip'], data['trex' + str(i)]['xr_redir22'])) + host_ports.append(data['trex' + str(i)]['xr_redir22']) + return leaf_ports, host_ports, spine_ports + +def update_controller_test(data, spine_ports, leaf_ports, host_ports): + + fabric_str = "FABRIC_NAME={}".format(data['fabric_name']) + pyvxr_str = "PYVXR_HOST={}".format(data['L0']['HostAgent']) + host_str = "HOST_PORTS={}".format(format(','.join(str(item) for item in host_ports))) + leaf_str = "LEAF_PORTS={}".format(format(','.join(str(item) for item in leaf_ports))) + spine_str = "SPINE_PORTS={}".format(format(','.join(str(item) for item in spine_ports))) + print(fabric_str) + print(pyvxr_str) + print(host_str) + print(leaf_str) + os.system("sed -i '0,/FABRIC_NAME=/{{s/.*FABRIC_NAME=.*/{}/}}' ./tortuga_controller/test.sh".format(fabric_str)) + os.system("sed -i '0,/PYVXR_HOST=/{{s/.*PYVXR_HOST\=.*/{}/}}' ./tortuga_controller/test.sh".format(pyvxr_str)) + os.system("sed -i '0,/HOST_PORTS=/{{s/.*HOST_PORTS\=.*/{}/}}' ./tortuga_controller/test.sh".format(host_str)) + os.system("sed -i '0,/LEAF_PORTS=/{{s/.*LEAF_PORTS\=.*/{}/}}' ./tortuga_controller/test.sh".format(leaf_str)) + os.system("sed -i '0,/SPINE_PORTS=/{{s/.*SPINE_PORTS\=.*/{}/}}' ./tortuga_controller/test.sh".format(spine_str)) + +def start_controller(device_type, fabric_num): + cwd = os.getcwd() + os.chdir('./tortuga_controller') + + if device_type == 'laguna': + os.system("bash -c './test.sh -c {} -no-stp -dup-ok |& tee test_op.log'".format(fabric_num)) + else: + os.system("bash -c './test.sh -c {} |& tee test_op.log'".format(fabric_num)) + + test_output = subprocess.check_output("grep -i 'Completed in' test_op.log | wc -l", shell=True).strip() + + os.chdir(cwd) + + # Populate results file with failure data + if not int(test_output): + return False + else: + return True + +def export_sim_cfg_to_file(data, topo_name, device_type, docker_mgmt_container): + sim_cfg_filename = "sim_credentials.json" + sim_cfg = {} + + for dut_name in get_dut_names(data): + device = data[dut_name] + dut_host = "{}_HOST".format(dut_name.upper().replace(" ", "_")) + dut_username = "{}_USERNAME".format(dut_name.upper().replace(" ", "_")) + dut_pass = "{}_PASSWORD".format(dut_name.upper().replace(" ", "_")) + dur_ssh_port = "{}_SSH_PORT".format(dut_name.upper().replace(" ", "_")) + + sim_cfg[dut_host] = device['HostAgent'] + sim_cfg[dut_username] = "admin" + sim_cfg[dut_pass] = "password" + sim_cfg[dur_ssh_port] = device['xr_redir22'] + + sim_cfg["SONIC_MGMT_HOST"] = data['sonic_mgmt']['HostAgent'] + sim_cfg["SONIC_MGMT_USERNAME"] = "vxr" + sim_cfg["SONIC_MGMT_PASSWORD"] = "cisco123" + sim_cfg["SONIC_MGMT_SSH_PORT"] = data['sonic_mgmt']['xr_redir22'] + + sim_cfg["PTF_HOST"] = data['docker_ptf']['HostAgent'] + sim_cfg["PTF_USERNAME"] = "root" + sim_cfg["PTF_PASSWORD"] = "root" + sim_cfg["PTF_SSH_PORT"] = data['docker_ptf']['xr_redir22'] + + sim_cfg['TOPO_NAME'] = topo_name + sim_cfg['DEVICE_TYPE'] = device_type + sim_cfg['DOCKER_MGMT_CONTAINER'] = docker_mgmt_container + + print("Exporting sim credentials to file: {}".format(sim_cfg_filename)) + print("Contents: \n{}".format(sim_cfg)) + + with open(sim_cfg_filename,'w') as cfg_file: + json.dump(sim_cfg, cfg_file, indent=4) + +def replace_fabric_name(topo_type, topo_yaml,fabric_name): + if 'tortuga-controller-2x2' in topo_type: + num_leaf = 2 + num_spine = 2 + elif 'tortuga-controller-2x3' in topo_type: + num_leaf = 3 + num_spine = 2 + elif 'tortuga-controller-dci1x2-2' in topo_type: + num_leaf = 4 + num_spine = 2 + elif 'tortuga-controller-dci2x2-2' in topo_type: + num_leaf = 4 + num_spine = 4 + elif 'tortuga-controller-dci1x2-3' in topo_type: + num_leaf = 6 + num_spine = 3 + else: + num_leaf = 3 + num_spine = 1 + + with open(topo_yaml) as f: + vxr_data = yaml.load(f, Loader=yaml.FullLoader) + + # Special handling for DCI topologies with multiple data centers + if 'tortuga-controller-dci1x2-2' in topo_type or 'tortuga-controller-dci2x2-2' in topo_type or 'tortuga-controller-dci1x2-3' in topo_type: + # For dci1x2-2 and dci2x2-2: L0, L1 belong to fabric1; L2, L3 belong to fabric2 + # For dci1x2-3: L0, L1 belong to fabric1; L2, L3 belong to fabric2; L4, L5 belong to fabric3 + for i in range(0, num_leaf): + dc_num = (i // 2) + 1 + leaf_num = i % 2 + for line in vxr_data['devices']['L{}'.format(i)]['cli_commands'].splitlines(): + if 'config hostname' in line: + newline = "sudo config hostname {}{}-leaf{}".format(fabric_name, dc_num, leaf_num) + os.system("sed -i 's/{}/{}/' {}".format(line,newline,topo_yaml)) + for i in range(0, num_spine): + if 'tortuga-controller-dci1x2-3' in topo_type: + # For dci1x2-3: one spine per DC + dc_num = i + 1 + spine_num = 0 + elif 'tortuga-controller-dci2x2-2' in topo_type: + # For dci2x2-2: two spines per DC + dc_num = (i // 2) + 1 + spine_num = i % 2 + else: + # For dci1x2-2: one spine per DC + dc_num = i + 1 + spine_num = 0 + for line in vxr_data['devices']['S{}'.format(i)]['cli_commands'].splitlines(): + if 'config hostname' in line: + newline = "sudo config hostname {}{}-spine{}".format(fabric_name, dc_num, spine_num) + os.system("sed -i 's/{}/{}/' {}".format(line,newline,topo_yaml)) + else: + # Standard handling for non-DCI topologies + for i in range(0, num_leaf): + for line in vxr_data['devices']['L{}'.format(i)]['cli_commands'].splitlines(): + if 'config hostname' in line: + newline = "sudo config hostname {}-leaf{}".format(fabric_name,i) + os.system("sed -i 's/{}/{}/' {}".format(line,newline,topo_yaml)) + for i in range(0, num_spine): + for line in vxr_data['devices']['S{}'.format(i)]['cli_commands'].splitlines(): + if 'config hostname' in line: + newline = "sudo config hostname {}-spine{}".format(fabric_name,i) + os.system("sed -i 's/{}/{}/' {}".format(line,newline,topo_yaml)) + +def collect_showtechsupport(data, dut_ports): + files_downloaded = [] + for port in dut_ports: + tar_file_output = run_exec_cmds(data['L0']['HostAgent'], port, "admin", "password", ["show techsupport"]) + print(tar_file_output) + tar_file = [j for j in tar_file_output.split('\n') if j != ''][-1] + ret = get_showtechsupport(data, port, tar_file) + if ret == 0: + files_downloaded.append(os.path.basename(tar_file)) + + return files_downloaded + +def create_sanity_log_tarball(data, dut_ports): + showtechsupport_files = collect_showtechsupport(data, dut_ports) + sanity_logs_dir = 'sanity_logs' + os.makedirs(sanity_logs_dir, exist_ok=True) + files_to_move = showtechsupport_files + ["vxr.out"] + for file_name in files_to_move: + if os.path.exists(file_name): + os.rename(file_name, os.path.join(sanity_logs_dir, file_name)) + print(f"Moved {file_name} to {sanity_logs_dir}") + else: + print(f"{file_name} does not exist and will not be moved.") + try: + subprocess.run(['tar', '-czf', 'sanity_logs.tar.gz', sanity_logs_dir], check=True) + print("Created tarball sanity_logs.tar.gz") + except subprocess.CalledProcessError as e: + print(f"Error creating tarball: {e}") + +def get_showtechsupport(data, port, tar_file): + print(f"Getting report file {tar_file}") + try: + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['L0']['HostAgent'], port, "admin", "password") + ftp_client=ssh.open_sftp() + ftp_client.get(tar_file,os.path.basename(tar_file)) + except Exception as e: + print(f"failed to get file {tar_file}! Error: {e}") + return -1 + finally: + ftp_client.close() + return 0 + +def create_report_json(sanity_success): + sum = {"total": 1, "failed": 0, "passed": 0, "status" : "", "success_rate": 0} + + if sanity_success: + sum["passed"] = 1 + sum["status"] = "success" + sum["failure_reason"] = None + sum["success_rate"] = 100 + else: + sum["failed"] = 1 + sum["status"] = "failure" + sum["failure_reason"] = FAILURE_RESONS.TEST_CASES_FAILED + sum["success_rate"] = 0 + + sum_f = open(SUMMARY_REPORT_PATH, "w") + com_f = open(COMMON_REPORT_PATH, "w") + + print(f"result summary is: {sum}") + + json.dump(sum, sum_f) + json.dump(sum, com_f) + + sum_f.close() + com_f.close() + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] + clean_sim = args['clean_sim'] + run_sanity = args['run_sanity'] + dut_passwd = args['dut_passwd'] + dut_uname = args['dut_uname'] + topo_type = args['topo_type'] + device_type = args['device_type'] + script_file = args['script_file'] + drop_version = args['drop_version'] + log_dir = args['log_dir'] + tar_ball = args['tar_ball'] + cicd = args['cicd'] + cicd_clean = args['cicd_clean'] + additional_tests = args['additional_tests'] + create_allure_report = args['create_allure_report'] + skip_sanity = args['skip_sanity'] + sim_attach = args['sim_attach'] + fabric_name = args['fabric_name'] + fabric_num = 1 + + print("using topo & platform to filename mapping in '{}'".format(TOPO_PLATFORM_FILE_MAP)) + with open(TOPO_PLATFORM_FILE_MAP) as cfg_file: + TOPO_PLATFORM_FILE_DICT = json.load(cfg_file) + + #print("Topo & platform to filename mapping dict: '{}'".format(TOPO_PLATFORM_FILE_DICT)) + + #get topo_yaml from topo_type + if not topo_yaml and topo_type in TOPO_PLATFORM_FILE_DICT: + if device_type in TOPO_PLATFORM_FILE_DICT[topo_type]: + topo_yaml = TOPO_PLATFORM_FILE_DICT[topo_type][device_type]["pyvxr_yaml_file"] + + if 'tortuga-controller' in topo_type: + replace_fabric_name(topo_type,topo_yaml,fabric_name) + + if 'tortuga-controller-dci1x2-2' in topo_type: + fabric_num = 2 + elif 'tortuga-controller-dci2x2-2' in topo_type: + fabric_num = 2 + elif 'tortuga-controller-dci1x2-3' in topo_type: + fabric_num = 3 + else: + fabric_num = 1 + + dut_platform = get_dut_platform(device_type) + + vxr_start_begin = datetime.datetime.now() + + if sim_attach: + vxr_path, input_file = attach_vxr() + else: + vxr_path, input_file = start_vxr(args['input_file'], cicd, clean_sim, topo_yaml) + + vxr_start_end = datetime.datetime.now() + + with open(input_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + + for dut_name in get_dut_names(data): + data[dut_name]['uname'] = dut_uname + data[dut_name]['passwd'] = dut_passwd + + data['tar_ball'] = tar_ball + data['topo_type'] = topo_type + data['fabric_name'] = fabric_name + + #print_env_info(data, device_type) + + vcr_configure_end = datetime.datetime.now() + + sim_time_delta = (vxr_start_end - vxr_start_begin).total_seconds() + + if topo_type == 'sol-tb-l2vni': + leaf0_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l2vni/l2vni_leaf0.cfg' + apply_config(data['leaf0']['HostAgent'],data['leaf0']['xr_redir22'],dut_uname,dut_passwd,leaf0_filepath) + leaf1_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l2vni/l2vni_leaf1.cfg' + apply_config(data['leaf1']['HostAgent'],data['leaf1']['xr_redir22'],dut_uname,dut_passwd,leaf1_filepath) + spine0_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l2vni/spine0.cfg' + apply_config(data['spine0']['HostAgent'],data['spine0']['xr_redir22'],dut_uname,dut_passwd,spine0_filepath) + spine1_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l2vni/spine1.cfg' + apply_config(data['spine1']['HostAgent'],data['spine1']['xr_redir22'],dut_uname,dut_passwd,spine1_filepath) + elif topo_type == 'sol-tb-l3vni': + leaf0_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l3vni/l3vni_leaf0.cfg' + apply_config(data['leaf0']['HostAgent'],data['leaf0']['xr_redir22'],dut_uname,dut_passwd,leaf0_filepath) + leaf1_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l3vni/l3vni_leaf1.cfg' + apply_config(data['leaf1']['HostAgent'],data['leaf1']['xr_redir22'],dut_uname,dut_passwd,leaf1_filepath) + spine0_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l3vni/spine0.cfg' + apply_config(data['spine0']['HostAgent'],data['spine0']['xr_redir22'],dut_uname,dut_passwd,spine0_filepath) + spine1_filepath = './../sonic-mgmt/spytest/tests/cisco/tortuga/solution/validated_configs/base_l3vni/spine1.cfg' + apply_config(data['spine1']['HostAgent'],data['spine1']['xr_redir22'],dut_uname,dut_passwd,spine1_filepath) + + profile_time_delta = (vcr_configure_end - vxr_start_end).total_seconds() + + ret = 0 + + if 'tortuga-controller' not in data['topo_type']: + print("******************************************************************************************************************************************************************************\n") + print("Time taken for the sim to come up: {} mins".format(sim_time_delta/60)) + #print("Time taken for the profile to come up: {} mins".format(profile_time_delta/60)) + print("Ixia (1/1-1/4) ----> Leaf0(Ethernet16..40)") + print("Ixia (1/5-1/8) ----> Leaf1(Ethernet16..40)") + print("Leaf0 Ethernet0 ----> Spine0 Ethernet0") + print("Leaf0 Ethernet8 ----> Spine1 Ethernet8") + print("Leaf1 Ethernet0 ----> Spine1 Ethernet0") + print("Leaf1 Ethernet8 ----> Spine0 Ethernet8") + print("Sonic-Mgmt eth1 ----> Leaf0 Ethernet48") + print("Sonic-Mgmt eth2 ----> Leaf1 Ethernet48") + print("******************************************************************************************************************************************************************************\n") + print_env_info(data, device_type) + else: + leaf_ports, host_ports, spine_ports = print_env_info(data, device_type) + update_controller_test(data, spine_ports, leaf_ports, host_ports) + sanity_success = start_controller(device_type, fabric_num) + if sanity_success: + print("Successfully pushed configuration and Traffic Test passed") + ret = 0 + else: + print("Test Failed. Something went wrong, Please check the test logs") + ret = 1 + create_sanity_log_tarball(data, leaf_ports + spine_ports) + create_report_json(sanity_success) + + if cicd_clean: + print("****** Clearing SIM at the end of CICD run ******** ") + os.system("{} clean".format(vxr_path)) + + return ret + +if __name__ == '__main__': + ret = main() + sys.exit(ret) diff --git a/infra/dashboard/dashboard_utils.py b/infra/dashboard/dashboard_utils.py new file mode 100644 index 00000000000..4f4f5306110 --- /dev/null +++ b/infra/dashboard/dashboard_utils.py @@ -0,0 +1,324 @@ +import os +import re +import shutil +import json +import logging +import logging.config +import paramiko +import requests +import subprocess +import time +import smtplib +import ssl +import traceback +import urllib +import jenkins + +from urllib.parse import urlencode +from urllib.request import urlopen +from functools import wraps, reduce +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from typing import Tuple +from jinja2 import Environment, FileSystemLoader +from enum import Enum + + + +def singleton(cls): + """ + This fucntion is used as a decorator pattern, which limit the object only + one instance + """ + instances = {} + + @wraps(cls) + def _wrapper(*args, **kwargs): + if cls not in instances: + instances[cls] = cls(*args, **kwargs) + return instances[cls] + + return _wrapper + + +class SysTools(object): + """ + The SysTools class is used to get or set current system enviroment info + """ + + @staticmethod + def get_current_env_type(): + """ + Check the env if it is a integrated flag + :return: + """ + pipeline_type = os.getenv(ENV_TYPE_ENV, PipelineEnvType.PROD.name).upper() + + if pipeline_type == PipelineEnvType.DEV.name: + log.info("Current env is development") + return PipelineEnvType.DEV.name + + # default is production + log.info("Current env is production") + return PipelineEnvType.PROD.name + + @staticmethod + def is_dev_env(): + """ + Check if dev env + """ + return SysTools.get_current_env_type() == PipelineEnvType.DEV.name + + @staticmethod + def get_pipe_name(): + """ + :return: + """ + job = os.getenv("JOB_BASE_NAME", "NA").replace("/", "_") + return job + + @staticmethod + def get_manage_branch_collection_name(): + """ + get branch collection name + :return: + """ + return "BranchMgr" + + @staticmethod + def get_env_value(env_name): + return os.getenv(env_name, '') + + @staticmethod + def get_key_env_info(): + """ + Get all current Cookies info, like build_id, pip_name, hash_value, + repo name, branch name + :return: + """ + cookies_dic = dict() + for env_name in EnvParamsList: + if env_name != JOB_BASE_NAME: + cookies_dic[env_name] = SysTools.get_env_value(env_name) + if env_name == BUILD_URL: + cookies_dic[env_name]=re.sub(r'http:', 'https:', cookies_dic[env_name]) + else: + cookies_dic[env_name] = SysTools.get_pipe_name() + # log.debug("current env info is: %s" % cookies_dic) + return cookies_dic + + @staticmethod + def get_env_infos(env_params): + cookies_dic = dict() + values = SysTools.get_key_env_info() + for param in env_params: + if param in values: + cookies_dic[param] = values[param] + else: + cookies_dic[param] = SysTools.get_env_value(param) + + return cookies_dic + + @staticmethod + def run_shell_cmd(cmd_str, timeout=60): + log.debug("run_shell_cmd:%s" % str(cmd_str)) + ret = 0 + out = None + proc = subprocess.Popen(cmd_str, shell=True, + stderr=subprocess.STDOUT, + close_fds=True, + stdout=subprocess.PIPE, + universal_newlines=True) + endtime = time.monotonic() + timeout + out = "" + while proc.poll() is None: + line = proc.stdout.readline() + out += line + print(line.strip()) + if time.monotonic() > endtime: + proc.kill() + proc.stdout.close() + ret = -1 + out = "%d seconds Timeout" % timeout + return ret, out + lines = proc.stdout.read() + out += lines + proc.stdout.close() + proc.wait() + ret = proc.returncode + + return ret, out + + @staticmethod + def ExecuteCmdWithRetry(cmd_str, timeout=60): + cnt = 0 + stime = 10 + while cnt < 5: + code, output = SysTools.run_shell_cmd(cmd_str, timeout) + if code == 0: + break + cnt += 1 + stime *= 2 + log.error('cmd %s fails because of %s. Will start No.%d try.' % (cmd_str, output, cnt)) + time.sleep(stime) + if code == 0: + return code, output + else: + return code, "Max retry failure for cmd: %s"%cmd_str + + @staticmethod + def clear_http_proxy(): + if os.getenv('http_proxy'): + del os.environ['http_proxy'] + + @staticmethod + def strtobool(value): + if value.lower() in ['y', 'yes', 't', 'true', 'on', '1']: + return True + + if value.lower() in ['n', 'no', 'f', 'false', 'off', '0']: + return False + + raise ValueError() + + @staticmethod + def post_webex_space(job_type, msg): + log.info("============ Post to webex space ============") + url = 'https://webexapis.com/v1/messages' + config = FileHandler.read_cfg() + webex_cfg = config["webex"] + headers = { + 'Authorization': 'Bearer %s' % webex_cfg['access-token'], + 'Content-Type': 'application/json' + } + body = { + "roomId": webex_cfg['spaces'][job_type]['room-id'], + "text": msg + } + json_body = json.dumps(body) + cnt = 0 + while cnt < 5: + r = requests.post(url, headers=headers, data=json_body) + if r.status_code == 200: + log.debug('post %s return code %d' % (url, r.status_code)) + break + cnt += 1 + log.error('post %s return code %d. Start No.%d retry.' % (url, r.status_code, cnt)) + + @staticmethod + def send_webex_message(username, msg): + log.info("============ Post to webex space ============") + url = 'https://webexapis.com/v1/messages' + config = FileHandler.read_cfg() + webex_cfg = config["webex"] + headers = { + 'Authorization': 'Bearer %s' % webex_cfg['access-token'], + 'Content-Type': 'application/json' + } + body = { + "toPersonEmail": f"{username}@cisco.com", + "text": msg + } + json_body = json.dumps(body) + cnt = 0 + while cnt < 5: + r = requests.post(url, headers=headers, data=json_body) + if r.status_code == 200: + log.debug('post %s return code %d' % (url, r.status_code)) + break + cnt += 1 + log.error('post %s return code %d. Start No.%d retry.' % (url, r.status_code, cnt)) + + @staticmethod + def is_remotepath_present(ip, username, remotepath, ssh_private_key=None): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + if ssh_private_key: + ssh.connect(ip, 22, username, key_filename=ssh_private_key) + else: + ssh.connect(ip, 22, username) + + sftp = ssh.open_sftp() + try: + sftp.stat(remotepath) + log.info("remotepath %s exists" % remotepath) + except IOError: + ssh.close() + return False + + ssh.close() + return True + + @staticmethod + def compare_version(a, b): + """ + compare version string + :param a: str, e.g. '1.47.11.3' + :param b: str, e.g. '1.47.11.10', '1.50.0.4rp04' + :return: 1 if a > b, 0 if a == b, -1 if a < b + """ + if a == b: + return 0 + segs_a = a.split('.') + segs_b = b.split('.') + for i in range(len(segs_a)): + if i < len(segs_b): + if segs_a[i] == segs_b[i]: + continue + match_a = re.match(r"(\d*)([a-z\d]*)", segs_a[i]) + digit_a = match_a.group(1) + str_a = match_a.group(2) + match_b = re.match(r"(\d*)([a-z\d]*)", segs_b[i]) + digit_b = match_b.group(1) + str_b = match_b.group(2) + if not digit_a or not digit_b: + if segs_a[i] > segs_b[i]: + return 1 + else: + return -1 + if int(digit_a) > int(digit_b): + return 1 + elif int(digit_a) < int(digit_b): + return -1 + elif str_a > str_b: + return 1 + else: + return -1 + else: + return 1 + return -1 + + + @staticmethod + def get_latest_commit_hash(url, branch): + """ + Get latest commit hash + :param url: repo url, e.g. git@wwwin-github.cisco.com:whitebox/cisco-wb-pkg.git + :param branch: branch name, e.g. master + :return: commit hash + """ + code, output = SysTools.ExecuteCmdWithRetry("git ls-remote --heads %s heads/%s | cut -f 1" % (url, branch)) + if re.search("Max retry failure", output): + log.debug("git command hit max retry failure, Github may have issues now.") + return "N/A due to Github issue." + s = output.strip() + if '\n' in s: + for line in s.split('\n'): + # skip the Warning line if it exists + if 'Warning' in line: continue + # return the first hash + return line + return s + + @staticmethod + def resolve_string(input_str): + """ + If input_str starts with '$', interpret everything after the '$' as an environment variable name. + Return the environment variable's value if found, otherwise None. + If input_str does not start with '$', return input_str as is. + """ + if input_str.startswith("$"): + env_var_name = input_str[1:] # everything after '$' + return os.environ.get(env_var_name) + else: + return input_str \ No newline at end of file diff --git a/infra/dashboard/db_tool_sonicsol.py b/infra/dashboard/db_tool_sonicsol.py new file mode 100644 index 00000000000..4e6c1bbc5ee --- /dev/null +++ b/infra/dashboard/db_tool_sonicsol.py @@ -0,0 +1,579 @@ +#!/usr/bin/python3 +import re +import time +from collections import OrderedDict +from dashboard_utils import singleton, SysTools +import psycopg2 +from psycopg2 import extras +import json +import os + +NOT_NULL = "not_null" +PG_CONN_RETRY_LIMIT = int(os.getenv('PG_CONN_RETRY_LIMIT', '10')) + +# table name +Management_full_run_test = 'management_full_run_test' +Pipeline_tester = 'pipeline-tester' +tables = [Management_full_run_test] + +class CollKeyErrorSonicSol(KeyError): + pass + +class PostgresDBConnectionSonicSol(object): + """ + This class is used to connect DB + """ + + def __init__(self, use_backup): + """ + Connect to db + :return: + """ + self.conn, self.cur = self._connect_postgres_db(use_backup) + self._create_tables() + + def __del__(self): + self.cur.close() + self.conn.close() + + @staticmethod + def _connect_postgres_db(use_backup=False): + """ + Create a connection to postgres db + :param: + :return: + """ + user = SysTools.resolve_string("sonicci") + password = os.getenv("WHITEBOX_POSTGRES_DB_PROD_PASSWORD") + host = SysTools.resolve_string("whitbx-pgdb.cisco.com") + port = SysTools.resolve_string("9538") + database = SysTools.resolve_string("sonicci_prod") + if use_backup: + database = SysTools.resolve_string("sonicci_dev") + retries = 0 + + while retries < PG_CONN_RETRY_LIMIT: + try: + conn = psycopg2.connect(database=database,user=user,password=password,host=host,port=port, connect_timeout=30) + cur = conn.cursor() + print("======= Connected to DB successfully ======= {} {}".format(cur, conn)) + return conn, cur + except(Exception, psycopg2.DatabaseError) as err: + print(err) + retries += 1 + print("======= Attempt {} to connect to DB =======".format(retries)) + if retries >= PG_CONN_RETRY_LIMIT: + raise err + + time.sleep(10) + + def _create_tables(self): + create_table_cmds = [ + "CREATE TABLE " + Management_full_run_test + "(job_base_name VARCHAR(32), build_id INT,\ + stream VARCHAR(64), build_start TIMESTAMP NOT NULL, build_end TIMESTAMP,\ + build_state VARCHAR(32), build_url VARCHAR(128), sonic_image_link VARCHAR(256),\ + result_sum jsonb, result_url VARCHAR(128), p2build_job_id INT, sanity_type VARCHAR(32),\ + report_link VARCHAR(128), log_tarball_link VARCHAR(128), sku VARCHAR(32)\ + PRIMARY KEY(job_base_name, build_id))", + ] + try: + for table_name, create_table_cmd in zip(tables, create_table_cmds): + # create table one by one + find_table_cmd = "select count(*) from pg_class where relname = '" + table_name + "'" + self.cur.execute(find_table_cmd) + results=self.cur.fetchone() + if results[0] == 0: + self.cur.execute(create_table_cmd) + except(Exception, psycopg2.DatabaseError) as err: + self.conn.rollback() + return -1 + self.conn.commit() + return 0 + + def execute_values(self, sql, values): + #print("------ in execute_values function ------") + if not self.conn or self.conn.closed: + print(f"Connection is not active. Reconnecting...") + self.connect() + if not self.conn: + return None + + attempt = 0 + while attempt < 2: + try: + extras.execute_values(self.cur, sql, values) + break + except(Exception, psycopg2.DatabaseError) as err: + if re.search("server closed the connection", str(err)): + self.conn, self.cur = self._connect_postgres_db() + attempt += 1 + continue + else: + self.conn.rollback() + print("======= ROLLEDBACK =======") + print(err) + return -1 + + self.conn.commit() + #print("======= Connected to DB successfully =======") + return 0 + + def execute(self, sql, params=None): + if not self.conn or self.conn.closed: + print(f"Connection is not active. Reconnecting...") + self.connect() + if not self.conn: + return None + + attempt = 0 + #print("------ in execute function ------") + while attempt < 2: + try: + if params: + self.cur.execute(sql, params) + else: + self.cur.execute(sql) + break + except(Exception, psycopg2.DatabaseError) as err: + if re.search("server closed the connection", str(err)): + self.conn, self.cur = self._connect_postgres_db() + attempt += 1 + continue + else: + self.conn.rollback() + #print("======= ROLLEDBACK =======") + print(err) + return -1 + + if not sql.strip().lower().startswith("select"): + self.conn.commit() + #print("======= Connected to DB successfully =======") + return 0 + + def insert(self, table_name, key_data): + """ + Insert a new row to table + :param + table_name: + key_data: dict + :return: 0 if success, -1 if failure + """ + column_str = "" + value_str = "" + for key, value in key_data.items(): + column_str = column_str + str(key) + "," + value_str = value_str + "'" + str(value) + "'," + column_str = column_str.strip(',') + value_str = value_str.strip(',') + sql = "INSERT INTO " + table_name + "(" + column_str + ") VALUES(" + value_str + ")" + print("======= SQL QUERY: {}".format(sql)) + return self.execute(sql) + + def update(self, table_name, key_data, updated_data): + """ + Update rows in table + :param + table_name: + key_data: dict, search condition + updated_data: dict + :return: 0 if success, -1 if failure + """ + sql = "UPDATE " + table_name + " SET " + for column, value in updated_data.items(): + if isinstance(value, list): + sql = "%s %s = ARRAY %s," % (sql, column, value) + else: + if isinstance(value,dict): + value = json.dumps(value) + sql = "%s %s = '%s'," % (sql, column, value) + sql = sql.strip(',') + sql = sql + " WHERE " + conjunction = "" + for key, value in key_data.items(): + sql = "%s%s%s = '%s'" % (sql, conjunction, key, value) + conjunction = " and " + + print("======= UPDATED SQL QUERY: {}".format(sql)) + return self.execute(sql) + + + def update_many(self, table_name, updates, key_column="id"): + """ + Batch update multiple rows efficiently using CASE WHEN. + Example of updates: + [{"id": 1, "analysis": "A"}, {"id": 2, "analysis": "B"}] + """ + if not updates: + return + + update_columns = list(updates[0].keys()) + update_columns.remove(key_column) + + ids = [upd[key_column] for upd in updates] + + # Build CASE expressions and parameter list + set_clauses = [] + params = [] + + for col in update_columns: + case_sql = "CASE" + for upd in updates: + case_sql += " WHEN {} = %s THEN %s".format(key_column) + params.append(upd[key_column]) + params.append(upd[col]) + case_sql += f" ELSE {col} END" + set_clauses.append(f"{col} = {case_sql}") + + # WHERE clause parameters (for IN) + where_placeholders = ", ".join(["%s"] * len(ids)) + params.extend(ids) + + sql = f"UPDATE {table_name} SET {', '.join(set_clauses)} WHERE {key_column} IN ({where_placeholders})" + + #print("\nUPDATE QUERY:") + #print(sql) + #print("PARAMS:", params) + + return self.execute(sql, params) + + + def update_many_by_key(self, table_name, updates, key_column): + """ + Batch update multiple rows efficiently using CASE WHEN. + + Example: + updates = [ + {"jira_id": "MIGSOFTWAR-123", "jira_status": "Done", "title": "Fixed bug"}, + {"jira_id": "MIGSOFTWAR-456", "jira_status": "Blocked", "title": "Need input"}, + ] + + key_column: + "jira_id" + """ + if not updates: + return + + update_columns = list(updates[0].keys()) + if key_column not in update_columns: + raise ValueError(f"Key column '{key_column}' missing from updates") + + update_columns.remove(key_column) + + if not update_columns: + raise ValueError("No columns to update") + + keys = [upd[key_column] for upd in updates] + + set_clauses = [] + params = [] + + for col in update_columns: + case_sql = "CASE" + for upd in updates: + case_sql += f" WHEN {key_column} = %s THEN %s" + params.append(upd[key_column]) + params.append(upd[col]) + case_sql += f" ELSE {col} END" + set_clauses.append(f"{col} = {case_sql}") + + where_placeholders = ", ".join(["%s"] * len(keys)) + params.extend(keys) + + sql = f""" + UPDATE {table_name} + SET {', '.join(set_clauses)} + WHERE {key_column} IN ({where_placeholders}) + """ + + return self.execute(sql, params) + + + def delete(self, table_name, key_data): + """ + Delete rows in table + :param + table_name: + key_data: dict, search condition + :return: 0 if success, -1 if failure + """ + sql = "DELETE FROM " + table_name + " WHERE " + conjunction = "" + for key, value in key_data.items(): + sql = "%s%s%s = '%s'" % (sql, conjunction, key, value) + conjunction = " and " + return self.execute(sql) + + + def find(self, table_name, key_data=None, column_list=None, sort_column_list=None, sort_rule="DESC"): + """ + Query db data, return rows which match the query condition + :param + table_name: + key_data: dict, query condition + sort: list, e.g. [('build_id', DESC)] + :return: query results, None if query fails + """ + column_str = "*" + if column_list != None: + column_str = ",".join(column_list) + sql = "SELECT " + column_str + " FROM " + table_name + " " + if key_data: + sql = "%sWHERE " % sql + conjunction = "" + for key, value in key_data.items(): + if value == None: + sql = "%s%s%s IS NULL" % (sql, conjunction, key) + conjunction = " and " + elif value == NOT_NULL: + sql = "%s%s%s IS not NULL" % (sql, conjunction, key) + conjunction = " and " + else: + sql = "%s%s%s = '%s'" % (sql, conjunction, key, value) + conjunction = " and " + if sort_column_list != None: + sql = sql + " ORDER BY " + for sort_column in sort_column_list: + sql = sql + sort_column + "," + sql = sql.strip(',') + sql = sql + " " + sort_rule + + rt = self.execute(sql) + if rt != 0: + return None + return self.cur.fetchall() + + + def find_one(self, table_name, key_data=None, column_list=None, sort_column_list=None, sort_rule="DESC"): + """ + Query db data, return the first record which matches the query condition + :param + table_name: + key_data: dict, query condition + sort_column_list: e.g. ['build_id'] + :return: one row as tuple, None if query fails + """ + results = self.find(table_name, key_data, column_list, sort_column_list, sort_rule) + if results != None and len(results) != 0: + print(f"SQL FIND_ONE RESULT ====== {results[0]}") + return results[0] + return None + + + def find_many(self, table_name, key_data=None, column_list=None, sort_column_list=None, sort_rule="DESC"): + """ + Query db data and return multiple rows that match the condition. + Supports IN filters and parameterized queries for safety. + """ + column_str = "*" + if column_list: + column_str = ", ".join(column_list) + + sql = f"SELECT {column_str} FROM {table_name}" + params = [] + clauses = [] + + # --- WHERE filters --- + if key_data: + for key, value in key_data.items(): + if value is None: + clauses.append(f"{key} IS NULL") + elif isinstance(value, (list, tuple, set)): + placeholders = ", ".join(["%s"] * len(value)) + clauses.append(f"{key} IN ({placeholders})") + params.extend(list(value)) + elif isinstance(value, dict) and "$in" in value: + placeholders = ", ".join(["%s"] * len(value["$in"])) + clauses.append(f"{key} IN ({placeholders})") + params.extend(value["$in"]) + else: + clauses.append(f"{key} = %s") + params.append(value) + + if clauses: + sql += " WHERE " + " AND ".join(clauses) + + # --- ORDER BY --- + if sort_column_list: + sql += " ORDER BY " + ", ".join(sort_column_list) + f" {sort_rule}" + + # --- Execute safely --- + rt = self.execute(sql, params) + if rt != 0: + return None + return self.cur.fetchall() + + + + def get_next_sequence_value(self, seq_name): + # Execute the SQL query to get the next value from the sequence + # We use SELECT nextval() to retrieve the value + rt = self.execute(f"SELECT nextval('{seq_name}');") + if rt != 0: + return None + return self.cur.fetchall() + + + def get_images(self, stream, npu, platform, p2build_job_id): + sql = "SELECT DISTINCT p2build_job_id FROM management_full_run_test WHERE stream = '" + stream + "' AND project = '" + npu + "' AND platform = '" + platform + "' AND p2build_job_id < " + str(p2build_job_id) + ";" + + print(f"QUERY FOR FINDING IF IMAGES EXIST FOR THIS STREAM+PROJECT+PLATFORM: {sql}") + rt = self.execute(sql) + if rt != 0: + return None + return self.cur.fetchall() + + + def get_closest_image_id(self, stream, project, platform, image_id, than_type="lesser"): + # Execute the SQL query to get the closest value (lesser and greater) than the given image_id + sql = "SELECT p2build_job_id FROM management_full_run_test WHERE p2build_job_id " + + if than_type == "greater": + sql += "> " + else: + sql += "< " + + sql += str(image_id) + " AND stream = '" + stream + "' AND project = '" + project + "' AND platform = '" + platform + "' ORDER BY p2build_job_id " + + if than_type == "greater": + sql += "ASC " + else: + sql += "DESC " + + sql += "LIMIT 1;" + + print(f"QUERY FOR FINDING CLOSEST IMAGE: {sql}") + rt = self.execute(sql) + if rt != 0: + return None + return self.cur.fetchall() + + + def close_connection(self): + if self.cur: + self.cur.close() + if self.conn: + self.conn.close() + + +class PostgresTableSonicSol(object): + """ + This class is a basic Postgresdb table operation sets. + Basic table functions like update, query_one + """ + + def __init__(self, table_name, use_backup=False): + """ + Get the db connect info + :param: + :return: + """ + if not table_name: + raise TableKeyError("Table Name can't be null") + self.dbConn = PostgresDBConnectionSonicSol(use_backup) + self.table_name = table_name + #log.debug("PostgresTable Table Name is %s", self.table_name) + + def update(self, key_data, updated_data): + """ + Update the db data, if key_data not exist in table, insert new row + :param key_data: + :param updated_data: + :return: + """ + if not updated_data: + raise ValueError( + "Updating table with invalid update data: %s" % self.table_name) + + if not key_data: + raise CollKeyErrorSonicSol( + "Updating table with invalid key data: %s" % self.table_name) + + num_match = 0 + rows = self.dbConn.find(self.table_name, key_data) + if rows != None: + num_match = len(rows) + # #log.debug("get current row num_match %d", num_match) + + if num_match == 0: + #log.debug("Match 0 row, insert a new one") + res = self.dbConn.insert(self.table_name, updated_data) + #res2 = self.dbConn.update(self.table_name, key_data, updated_data) + + if res != 0: + return res + elif num_match > 1: + #log.error("Match %d rows, duplicate records in table %s" % (num_match, self.table_name)) + return -1 + + res = self.dbConn.update(self.table_name, key_data, updated_data) + return res + + def delete(self, key_data): + """ + Delete the db data row if key_data matches + :param key_data: + :return: + """ + if not key_data: + raise CollKeyErrorSonicSol( + "Delete entry from table %s with invalid key data: %s" % (self.table_name, key_data)) + + res = self.dbConn.delete(self.table_name, key_data) + return res + + def query(self, key_data=None, column_list=None, sort_column_list=None, sort_rule="DESC"): + """ + Query db records, return all records which match the query condition + :param key_data: dict, query condition + :param column_list: query columns + :return: tuple + """ + # Check if we have to restrict the query to only consider staging records + if SysTools.is_dev_env(): + if not key_data: + key_data = {} + if key_data.get('env_type') is None: + key_data['env_type'] = SysTools.get_current_env_type() + else: + if key_data and 'env_type' in key_data: + key_data.pop('env_type') + + if not sort_column_list: + rows = self.dbConn.find(self.table_name, key_data, column_list) + else: + rows = self.dbConn.find(self.table_name, key_data, column_list, sort_column_list, sort_rule) + + #log.debug("query result:") + #log.debug(rows) + + return rows + + def query_one(self, key_data=None, column_list=None, sort_column_list=None, sort_rule="DESC"): + """ + Query a db record, return the latest record which matches the query condition + :param key_data: dict, query condition + :param column_list: query columns + :return: tuple + """ + + if not sort_column_list: + row = self.dbConn.find_one(self.table_name, key_data, column_list) + else: + # #log.debug("query one record with sort_list %s" % sort_column_list) + row = self.dbConn.find_one(self.table_name, key_data, column_list, sort_column_list, sort_rule) + + # #log.debug("query one %s" % type(row)) + #log.debug("query result:") + #log.debug(row) + + return row + """ + set aborted job's end time + """ + key_data = { + self.BUILD_ID: build_id + } + changed_data = { + self.BUILD_STATE: state + } + self.update(key_data, changed_data) \ No newline at end of file diff --git a/infra/dashboard/jiralib_sonicsol.py b/infra/dashboard/jiralib_sonicsol.py new file mode 100644 index 00000000000..6ba2554a563 --- /dev/null +++ b/infra/dashboard/jiralib_sonicsol.py @@ -0,0 +1,292 @@ +import json +import requests +import sys +import re +from dashboard_utils import singleton +from db_tool_sonicsol import PostgresDBConnectionSonicSol +from requests.auth import HTTPBasicAuth +from datetime import datetime +import os + +JIRA_USERNAME = 'ayushisr@cisco.com' +JIRA_API_URL = 'https://miggbo.atlassian.net/rest/api/3/' +JIRA_DATA_URL = JIRA_API_URL + 'myself' +JIRA_ISSUES_URL = JIRA_API_URL + "issue/" +JIRA_CUSTOM_FIELD_URL = JIRA_API_URL + "field" +JIRA_SEARCH_URL = JIRA_API_URL + "search/jql?" +SONIC_SOL_JIRA_TOKEN = os.getenv("DASHBOARD_JENKINS_API_TOKEN") +JIRA_AUTH = ( + JIRA_USERNAME, + SONIC_SOL_JIRA_TOKEN +) + +HEADERS = { + "Accept": "application/json", + "Content-Type": "application/json" +} + +TEST_RUN_LABEL_RE = re.compile(r"^TestRunID:(.+)$") + +def normalize_title(title): + if not title: + return "" + return title.replace("n't", " not").replace("'ed", " ed") + + +def parse_jira_datetime(created): + return datetime.strptime(created, "%Y-%m-%dT%H:%M:%S.%f%z") + +@singleton +class Jira: + + def __init__(self, auth=None): + jira_token = SONIC_SOL_JIRA_TOKEN + self.jira_auth = JIRA_AUTH + #if auth: + '''elif jira_token_env: + print("JIRA API token not specified exiplicitly, checking env variable") + self.jira_auth = jira_token_env + else: + print("Token not specifed during initialization, and couldn't find it in env variable as well! Please set jira token to use Jira class.") + exit(1) + + ''' + if not self._verify_jira_auth(self.jira_auth): + exit(1) + + @staticmethod + def _verify_jira_auth(jira_auth): + response = requests.get(JIRA_DATA_URL, auth=jira_auth, headers=HEADERS, timeout=15) + + if "expand" in response.text: + print("Your token is good") + return True + else: + print("Your token is BAD") + #log.debug(response.text) + return False + + def get_issue(self, issue): + response = requests.get(JIRA_ISSUES_URL + str(issue), auth=self.jira_auth, timeout=10) + json_r = json.loads(response.text) + #print("Issue %s: %s" % (issue, json_r)) + return json_r + + def get_issues_from_epic(self, epic_field, blocked): + """ + blocked=False: fetch non-blocked issues in epic + blocked=True: fetch blocked issues in epic + """ + all_issues = [] + max_results = 100 + more_pages = False + token = "" + + while True: + jql_parts = [ + f"parentEpic='{epic_field}'", + "type IN (Bug, Improvement, Story, Task)" + ] + + if blocked: + jql_parts.append("status = Blocked") + + jql = " AND ".join(jql_parts) + + url = f"{JIRA_SEARCH_URL}jql={jql}&maxResults={max_results}&fields=summary,created,status,labels" + + if more_pages: + url += f"&nextPageToken={token}" + + print(f"Fetching JIRA issues with URL: {url}\nIssues gone through: {len(all_issues)}") + + try: + response = requests.get(url, auth=self.jira_auth, headers=HEADERS, timeout=20) + response.raise_for_status() + except requests.exceptions.RequestException as e: + print(f"Error fetching JIRA issues from {url}: {e}") + return [] + + try: + json_r = response.json() + except json.JSONDecodeError as e: + print(f"Error decoding JSON response from {url}: {e}. Response text: {response.text}") + return [] + + if 'issues' not in json_r: + print(f"No 'issues' key found in response for URL: {url}. Response: {json_r}") + break + + all_issues.extend(json_r['issues']) + + if json_r.get('isLast') is False: + more_pages = True + token = json_r.get('nextPageToken', "") + else: + break + + return all_issues + + def extract_new_rows_from_issues(self, issues): + """ + Convert Jira issues into DB rows: + (test_case_id, jira_id, jira_status, title, start_time) + + Only labels matching TestRunID: are used. + """ + rows = [] + seen = set() + + for issue in issues: + issue_key = issue.get('key') + fields = issue.get('fields', {}) + + labels = fields.get('labels', []) or [] + jira_status = fields.get('status', {}).get('name', 'N/A') + title = normalize_title(fields.get('summary', '')) + created = fields.get('created') + + if not issue_key or not created: + continue + + try: + start_time = parse_jira_datetime(created) + except ValueError: + print(f"Skipping issue {issue_key}: invalid created date {created}") + continue + + for label in labels: + match = TEST_RUN_LABEL_RE.match(label) + if not match: + continue + + test_case_id = match.group(1).strip() + if not test_case_id: + continue + + # Store the full Jira key, not just the numeric suffix + jira_id = issue_key + + dedupe_key = (test_case_id, jira_id) + if dedupe_key in seen: + continue + + seen.add(dedupe_key) + + rows.append(( + test_case_id, + jira_id, + jira_status, + title, + start_time + )) + + return rows + + def insert_new_rows(self, rows, db): + """ + Insert only new Jira + test_case combinations. + Existing rows are ignored. + """ + if not rows: + print("No discovered rows to insert") + return + + sql = "INSERT INTO jira_ids (test_case_id, jira_id, jira_status, title, start_time)" + sql += " VALUES %s" + sql += " ON CONFLICT (test_case_id, jira_id) DO NOTHING" + + ret = db.execute_values(sql, rows) + return ret + + def get_tracked_rows_from_db(self, db): + """ + Returns all tracked rows from jira_ids. + """ + jiras = db.find("jira_ids", column_list=["test_case_id", "jira_id", "jira_status", "title", "start_time"]) + + return jiras + + def refresh_existing_rows(self, db): + """ + Go through all Jira IDs currently stored in jira_ids + and update status/title for all matching rows. + """ + tracked_rows = self.get_tracked_rows_from_db(db) + + if not tracked_rows: + print("No tracked rows found in jira_ids") + return + + unique_jira_ids = sorted({row[1] for row in tracked_rows}) + print(f"Refreshing {len(unique_jira_ids)} unique Jira issues from jira_ids") + + update_rows = [] + + for jira_id in unique_jira_ids: + try: + issue = self.get_issue(jira_id) + except requests.exceptions.RequestException as e: + print(f"Failed to fetch Jira {jira_id}: {e}") + continue + + fields = issue.get('fields', {}) + jira_status = fields.get('status', {}).get('name', '') + title = normalize_title(fields.get('summary', '')) + + update_rows.append({ + "jira_status": jira_status, + "title": title, + "jira_id": jira_id + }) + + if not update_rows: + print("No Jira issues were successfully fetched for refresh") + return + + db.update_many_by_key("jira_ids", update_rows, key_column="jira_id") + + print(f"Refreshed {len(update_rows)} Jira issues in jira_ids") + + + +if __name__ == '__main__': + jira = Jira() + + db = PostgresDBConnectionSonicSol(use_backup=False) + + epic_names = [ + 'MIGSOFTWAR-22954', + 'MIGSOFTWAR-25462', + 'MIGSOFTWAR-12014', + 'MIGSOFTWAR-25469', + 'MIGSOFTWAR-26045', + 'MIGSOFTWAR-30485', + 'MIGSOFTWAR-29043', + 'MIGSOFTWAR-31386' + ] + + all_candidate_rows = [] + seen_global = set() + + for epic in epic_names: + non_blocked_issues = jira.get_issues_from_epic(epic, blocked=False) + blocked_issues = jira.get_issues_from_epic(epic, blocked=True) + + combined_issues = non_blocked_issues + blocked_issues + candidate_rows = jira.extract_new_rows_from_issues(combined_issues) + + for row in candidate_rows: + dedupe_key = (row[0], row[1]) # (test_case_id, jira_id) + if dedupe_key in seen_global: + continue + seen_global.add(dedupe_key) + all_candidate_rows.append(row) + + ret1 = jira.insert_new_rows(all_candidate_rows, db) + jira.refresh_existing_rows(db) + + sys.exit(ret1) + + db.close_connection() + \ No newline at end of file diff --git a/infra/dashboard/populate_pipeline2_sanity_table_sonicsol.py b/infra/dashboard/populate_pipeline2_sanity_table_sonicsol.py new file mode 100644 index 00000000000..090168f0661 --- /dev/null +++ b/infra/dashboard/populate_pipeline2_sanity_table_sonicsol.py @@ -0,0 +1,187 @@ +#import psycopg2 +#from psycopg2.extras import execute_values +import sys +import argparse +import os +import re +import json +import tarfile +import yaml +import requests +import time +from datetime import datetime +from db_tool_sonicsol import PostgresDBConnectionSonicSol +import soltest_upload_dashboard +from scale_upload_dashboard import add_scale_params, write_scale_test_case_params_into_db, write_scale_run_urls +from populate_test_case_table_sonicsol import populate_test_case_table + +""" +Set up for when Jenkins is done + +PLATFORM = os.environ['PLATFORM'] +TOPOLOGY = os.environ['TOPOLOGY'] +PIPELINE_TYPE = (os.environ["PIPELINE_TYPE"]).lower() +SANITY_TYPE = os.environ['SANITY_TYPE'] +RUN_HW = os.environ["RUN_HW"] == 'true' +""" + + +if __name__ == '__main__': + + argparser = soltest_upload_dashboard._create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] # Not used by us! + topology = args['topology'] + platform = args['platform'] + script_file = args['script_file'] # Would ONLY be used if no logs_path argument given! + run_label = args['run_label'] + run_desc = args['run_desc'] + logs_path = args['logs_path'] + dev = args['dev'] + npu = args['npu'] + curr_server = args['curr_server'] + + dir_path, p2build_job_id, stream, release, contains_pns = soltest_upload_dashboard.main(curr_server, topo_yaml, topology, platform, script_file, run_label, logs_path, run_desc, dev) + + error = False + # initializing the variables + directory_name = "" + try: + directory_name = dir_path.split('/')[-1] + except Exception: + raise Exception("Spytest Result Directory already exists!") + error = True + + if error == False: + use_backup = False + if '_dev' in dir_path.split('/')[-2]: + use_backup = True + tarball_link = "" + result_sum = {} + report_link = "" + platform = "" + topology = "" + build_start = "" + build_end = "" + status = "" + label = "" + description = "" + + result_sum_path = os.path.join(dir_path, "results.json") + + # Read the results.json file + with open(result_sum_path, "r") as file: + result_sum = json.load(file) + # Assuming the JSON contains a field named 'report_link' + report_link = result_sum.get("report_link", "N/A") + tarball_link = result_sum.get("log_tarball_link", "N/A") + platform = result_sum.get("platform", "N/A") + topology = result_sum.get("topology", "N/A") + build_start = result_sum.get("build_start", "N/A") + build_end = result_sum.get("build_end", "N/A") + status = result_sum.get("status", "N/A") + label = result_sum.get("run_label", "N/A") + description = result_sum.get("run_desc", "N/A") + + # Remove unwanted fields from the summary + for key in ["sonic_image_link", "log_tarball_link", "platform", "topology", "build_start", "build_end", "status", "run_label", "run_desc"]: + if key in result_sum: + del result_sum[key] + + # Get Image Created Column Data (Possibly Join together) + db_image = PostgresDBConnectionSonicSol(use_backup=False) + result = db_image.find_one("pipeline2_build", key_data={"build_id": p2build_job_id}, column_list=["repo_info", "deb_version", "build_start"]) + + repo = result[0] + + sonic_hash = repo['sonic-buildimage']['hash'] + platform_hash = repo['platform-cisco-8000']['hash'] + + deb_version = result[1] + + image_created = result[2].date() + + db_image.close_connection() + + # Populating Management Full Run Test Table + db = PostgresDBConnectionSonicSol(use_backup) + + # Getting Build id to use for populating test_case and result_sum + build_id_result = db.get_next_sequence_value("mgmt_full_run_test_build_id_seq") + build_id = 0 + + if build_id_result == None: + raise Exception("Issue with build_id creation!!!") + else: + build_id = build_id_result[0][0] + + # See if previous images are even possible + image_record = db.get_images(stream, npu, platform, p2build_job_id) + #print(image_record) + + key_data = { + "build_id": build_id, + "job_base_name": "soltest_upload_to_dashboard", + "build_start": build_start, + "platform": platform, + "platform_name": platform, + "topology": topology, + "sanity_type": "solution-test", + "stream": stream, + "p2build_job_id": p2build_job_id, + "build_end": build_end, + "build_state": status, + "report_link": report_link, + "log_tarball_link": tarball_link, + "label": label, + "description": description, + "release": release, + "project": npu, + "image_created": image_created + # build_url: jenkins_url, + } + + db.insert("management_full_run_test", key_data) + + # updating the result_sum separately since is dict type + db.update("management_full_run_test", key_data = {"build_id": build_id}, updated_data = {"result_sum":result_sum}) + + # Get closest previous image + lt_image = 0 + if len(image_record) > 0: + less_than_image = db.get_closest_image_id(stream, npu, platform, p2build_job_id) + if less_than_image == None: + raise Exception(f"Was not able to find an image id less than {image_id}!!") + else: + lt_image = less_than_image[0][0] + + if lt_image == 0: + lt_image = None + + # Get closest next image (IF POSSIBLE) + gt_image = 0 + great_than_image = db.get_closest_image_id(stream, npu, platform, p2build_job_id, than_type="greater") + if len(great_than_image) > 0: + gt_image = great_than_image[0][0] + + if gt_image == 0: + gt_image = None + + # Populating Test Case Table + print("POPULATING TEST CASE TABLE!! ------- ") + populate_test_case_table(build_id, directory_name, p2build_job_id, lt_image, db, gt_image, use_backup) # Adding image id to test_case as well - to make dashboard queries easier. + print("populate_pipeline2_sanity_table_sonicsol.py completed! Successfully populated database and dashboard!!") + + db.close_connection() + + if contains_pns: + print("Adding Scale test parameters!") + test_cases, run_urls = add_scale_params(build_id, directory_name, platform, p2build_job_id, image_created, npu) + # print(test_cases) + ret1 = write_scale_test_case_params_into_db(test_cases) + ret2 = write_scale_run_urls(run_urls) + sys.exit(ret1) + sys.exit(ret2) + + + diff --git a/infra/dashboard/populate_test_case_table_sonicsol.py b/infra/dashboard/populate_test_case_table_sonicsol.py new file mode 100644 index 00000000000..f2089c11357 --- /dev/null +++ b/infra/dashboard/populate_test_case_table_sonicsol.py @@ -0,0 +1,544 @@ +import psycopg2 +from psycopg2.extras import execute_values +import sys +import argparse +import requests +import logging +import json +from datetime import datetime +import yaml +from db_tool_sonicsol import PostgresDBConnectionSonicSol +import os + +def _convert_keys_to_strings_and_lower(d): + """Recursively convert all keys in a dictionary to lowercase strings.""" + if isinstance(d, dict): + return {str(key).lower(): _convert_keys_to_strings_and_lower(value) for key, value in d.items()} + elif isinstance(d, list): + return [_convert_keys_to_strings_and_lower(item) for item in d] + else: + return d + +def _get_test_categories(file_path): + """ + Retrieves and organizes test categories from a YAML file located in a specified workspace directory. + + Functionality: + - reads the file specified in TESTFILE + - if yaml, then go through each test category specified in yaml to identify which test belongs to which category + + Returns: + - A dictionary (`test_categories_all`) where each key is a test tag, and each value is a list of + formatted test category strings. + + Example Output: + + baseline: + - test_pre-test + - fib.test_fib + ... + fwd: + - everflow.test_everflow_testbed + - route.test_default_route + ... + plt: + - platform_tests.test_reboot + - platform_tests.api.test_chassis + - platform_tests.test_cpu_memory_usage + ... + """ + + with open(file_path) as f: + test_cases_yaml = yaml.safe_load(f) + + test_cases_yaml = _convert_keys_to_strings_and_lower(test_cases_yaml) + + test_categories_all = {} + for test_tag in test_cases_yaml: + test_categories = set() + for topo in test_cases_yaml[test_tag]: + for platform in test_cases_yaml[test_tag][topo]: + for test_case in test_cases_yaml[test_tag][topo][platform]: + test_category_snippet = test_case.split('.py')[0] + test_category_snippet = test_category_snippet.replace('/', '.') + test_categories.add(test_category_snippet) + test_categories_all[test_tag] = test_categories + + return test_categories_all + + +def _add_additional_info(test_cases, report_link): + new_test_cases = [] + + for test_case in test_cases: + new_test_case = test_case + new_test_case['pipeline_type'] = None + new_test_case['pr_repo_name'] = None + new_test_case['pr_id'] = None + new_test_case['pr_link'] = None + new_test_case['report_link'] = report_link + + new_test_cases.append(new_test_case) + + return new_test_cases + +def _get_spytest_test_cases_json(spytest_report_url, directory_name, use_backup=False): + test_cases_info_json = "/var/www/html/logs/solution_test/" + directory_name + "/test_cases_info.json" + if use_backup: + test_cases_info_json = "/var/www/html/logs/solution_test_dev/" + directory_name + "/test_cases_info.json" + res_json = "" + + with open(test_cases_info_json, 'r') as f: + res_json = json.load(f) + + print(res_json["script_data"][0]["SCRIPT_NAME"]) + + return res_json + +#spytest has many failure types, consolidate into one +def _spytest_parse_state(raw_state): + if raw_state == "Pass": + return "Passed" + elif raw_state in ["Skip", "TGenFail", "ScriptError"]: + return "Skipped" + + return raw_state + +def analyze_test_case(test_case_full_name, state, p2_results, sanity_type, image_id, db, sku=None, next_image=None): + + curr_state = state[0] + if isinstance(state, str): + curr_state = state + + key_cond = { + "stream": p2_results[2], + #"project": p2_results[3], <-- Is not in test_case table. Should I include? + "platform": p2_results[0], + "test_case_full_name": test_case_full_name, + "sanity_type": sanity_type, + "image_id": image_id + } + if sanity_type == 'sonic-mgmt': + key_cond["sku"] = sku + + test_case = db.find_one("test_case", key_data=key_cond, column_list=["state", "id"], sort_column_list=["start_time"]) + + if next_image != None: + key_cond["image_id"] = next_image + curr_state = db.find_one("test_case", key_data=key_cond, column_list=["state", "id"], sort_column_list=["start_time"]) + curr_state = curr_state[0][0] + + analysis = "No Difference" # Default value + + if test_case is not None: + if curr_state == "Passed" and test_case[0] != "Passed": # Failed after passing + analysis = "New Pass" + elif curr_state != "Passed": + has_jira = db.find_one("jira_ids", {"test_case_id": test_case[1]}, column_list=["jira_id", "jira_status"]) + if has_jira is not None and len(has_jira) > 0 and has_jira[1] not in ("Resolved", "Closed", "PR Raised"): + analysis = "Maybe: JIRA " + has_jira[0] + elif test_case[0] == "Error" and curr_state == "Failed": + analysis = "Prev Run: Error" + elif test_case[0] == "Failed" and curr_state == "Error": + analysis = "Prev Run: Failed" + elif test_case[0] == "Passed": + analysis = "Regression" + else: + analysis = "New Test Case" + + if next_image != None: + key_cond["id"] = curr_state[0][1] + db.update("test_case", key_data=key_cond, updated_data={"analysis": analysis}) + + return analysis + +def analyze_all_test_cases(build_id, test_case_names, test_state_map, p2_results, sanity_type, lt_image, image_id, db, sku=None, gt_image=None): + """ + Batch-optimized test case analysis. + Fetches all test_case and jira data at once, performs in-memory analysis, + and then updates results in bulk. + """ + + stream = p2_results[2] + platform = p2_results[0] + project = p2_results[3] + + image_arr = [image_id] + if lt_image: + image_arr.append(lt_image) + if gt_image: + image_arr.append(gt_image) + + try: + db.conn.commit() + print("Forced DB commit before analysis to ensure visibility.") + except Exception as e: + print(f"Commit failed before analysis: {e}") + + sanity_rows = db.find_many( + "management_full_run_test", + key_data={ + "p2build_job_id": {"$in": image_arr}, + "platform": platform, + "stream": stream, + "sanity_type": sanity_type + }, + column_list=["build_id", "p2build_job_id"] + ) + + image_to_sanity = {r[1]: r[0] for r in sanity_rows} + sanity_ids = list(image_to_sanity.values()) + + # -------------------------- + # 1. Prefetch all relevant data + # -------------------------- + + key_filter = { + "test_case_full_name": {"$in": test_case_names}, + "image_id": {"$in": image_arr}, + "platform": platform, + "stream": stream, + "sanity_type": sanity_type + } + + if sanity_type in ['sonic-mgmt-hw', 'spytest-hw']: + key_filter["sku"] = sku + key_filter["parent_sanity_id"] = {"$in": sanity_ids} + + all_cases = db.find_many( + "test_case", + key_data=key_filter, + column_list=["id", "image_id", "test_case_full_name", "state", "start_time"], + sort_column_list=["start_time"], + sort_rule="DESC NULLS LAST" + ) + + print(f"Found {len(all_cases)} test_case rows matching key_filters") + print(f"Expected {len(test_case_names)} test names x {len(image_arr)} images = ~{len(test_case_names) * len(image_arr)} possible matches") + ids = [c[0] for c in all_cases] + print(len(ids), len(set(ids))) + + # Keep only the most recent per (test_name, image) + cases = {} + for c in all_cases: + key = (c[2], c[1]) # (test_case_full_name, image_id) + if key not in cases or not cases[key]["start_time"]: # first one is most recent due to start_time DESC and makes sure start_time is not NULL + cases[key] = {"id": c[0], "state": c[3], "start_time": c[4]} + + # Prefetch JIRA info once + all_jiras = db.find_many("jira_ids", {}, column_list=["test_case_id", "jira_id", "jira_status"]) + jira_lookup = {j[0]: {"jira_id": j[1], "jira_status": j[2]} for j in all_jiras} + + # Collect only tests that need last-passed, with their per-test cutoff (current start_time) + need_last_passed = {} + for test_name in test_case_names: + curr_state = test_state_map[test_name][0].lower() if not isinstance(test_state_map[test_name], str) else test_state_map[test_name].lower() + curr_case = cases.get((test_name, image_id)) + if curr_case and curr_case.get("start_time") and curr_state != 'passed': + need_last_passed[test_name] = curr_case["start_time"] + + last_passed_map = {} + if need_last_passed: + max_cutoff = max(need_last_passed.values()) + + # Pull only "Passed" rows for the subset of tests that need it, + # and only rows strictly before the latest cutoff among them. + # Sorted DESC so the first row we see per test is the answer. + passed_rows = db.find_many( + "test_case", + key_data={ + "platform": platform, + "stream": stream, + "sanity_type": sanity_type, + "test_case_full_name": {"$in": list(need_last_passed.keys())}, + "state": "Passed" + }, + column_list=["test_case_full_name", "image_id", "start_time"], + sort_column_list=["start_time"], + sort_rule="DESC NULLS LAST" + ) + + # First seen (DESC) per test_name that is < its own cutoff wins + for tname, img, st in passed_rows: + if st is None: + continue + cutoff = need_last_passed.get(tname) + if cutoff and tname not in last_passed_map and st < cutoff: + last_passed_map[tname] = img + + # -------------------------- + # 2. In-memory analysis + # -------------------------- + updates = [] # for bulk DB update + results_out = {} + + for test_name in test_case_names: + curr_state = test_state_map[test_name][0].lower() if not isinstance(test_state_map[test_name], str) else test_state_map[test_name].lower() + + curr_case = cases.get((test_name, image_id)) + lt_case = {} + gt_case = {} + + if lt_image: + lt_case = cases.get((test_name, lt_image), {}) + if gt_image: + gt_case = cases.get((test_name, gt_image), {}) + + # ---- Analyze lt_image (current) ---- + analysis = "No Difference" + + # CASE 1: missing or invalid current case + if not curr_case or curr_case.get("start_time") is None: + analysis = "N/A" + results_out[test_name] = analysis + continue + + # CASE 2: skipped or invalid current state + if curr_state in (None, "skipped"): + analysis = "N/A" + + # CASE 3: has lt_case (compare to previous) + elif len(lt_case) > 0: + prev_state = lt_case["state"].lower() + + # Skip cases with bad data + if prev_state in (None, "skipped"): + analysis = "N/A" + elif curr_state == "passed" and prev_state != "passed": + analysis = "New Pass" + elif curr_state != "passed": + jira_info = jira_lookup.get(lt_case["id"]) + if jira_info and jira_info["jira_status"] not in ("Resolved", "Closed", "PR Raised"): + analysis = "Maybe: JIRA " + jira_info["jira_id"] + elif prev_state == "error" and "fail" in curr_state: + analysis = "Prev Run: Error" + elif "fail" in prev_state and curr_state == "error": + analysis = "Prev Run: Failed" + elif prev_state == "passed": + analysis = "Regression" + # CASE 4: new test (no lt_case) + else: + if curr_state == "passed": + analysis = "New Test Case" + else: + analysis = "New Test Case - No Previous Data" + + # ---- Append last passed image id (or "Never Passed") for Failed/Skipped/Error ---- + suffix = " - Never Passed" + if curr_state.lower() != "passed" and "-" not in analysis: + lp = last_passed_map.get(test_name) + if lp: + suffix = f" - {lp}" + + analysis = f"{analysis}{suffix}" + + # ---- Store results safely (avoid duplicates) ---- + if curr_case.get("id") not in {u["id"] for u in updates}: + updates.append({"id": curr_case["id"], "analysis": analysis}) + results_out[test_name] = analysis + + # ---- Re-analyze gt_image if exists ---- + if len(gt_case) > 0: + next_state = gt_case["state"].lower() + next_analysis = "No Difference" + + if next_state in (None, "skipped"): + next_analysis = f"N/A{suffix}" + elif curr_state == "passed" and next_state != "passed": + next_analysis = f"Regression - {image_id}" + elif curr_state != "passed" and next_state == "passed": + next_analysis = "New Pass" + elif "fail" in next_state and curr_state == "Error": + next_analysis = f"Prev Run: Error{suffix}" + elif next_state == "error" and "fail" in curr_state: + next_analysis = f"Prev Run: Failed{suffix}" + + updates.append({"id": gt_case["id"], "analysis": next_analysis}) + + # ---- Final safety guard: no null analyses ---- + updated_ids = {u["id"] for u in updates} + + missing_in_updates = [ + c for (tcf, key_image_id), c in cases.items() + if c["id"] not in updated_ids and key_image_id == image_id + ] + + if missing_in_updates: + print(f"⚠️ Found {len(missing_in_updates)} current test_case rows with no updates. Setting analysis='N/A'.") + for m in missing_in_updates: + updates.append({"id": m["id"], "analysis": "N/A"}) + + print(f"Total updates prepared: {len(updates)} | Unique IDs: {len({u['id'] for u in updates})}") + + # -------------------------- + # 3. Bulk update in DB + # -------------------------- + if updates: + db.update_many("test_case", updates) + + return results_out + + +def _traverse_through_spytest_test_cases_json(spytest_test_cases_json, p2_results, image_id, lt_image, db, gt_image=None): + test_cases = [] + test_names = [] + test_state_map = {} + + for curr_test_cases_obj in spytest_test_cases_json["script_data"]: + for test_suite in curr_test_cases_obj["TC_INFO"]: + state = _spytest_parse_state(test_suite["state"]) + + """ + analysis = "" + if gt_image == None: + analysis = analyze_test_case(test_suite["test_case_full_name"], state, p2_results, "solution-test", lt_image, db) + else: # Re-check analysis for next image if new image is being inserted in between + rewrite_analysis = analyze_test_case(test_suite["test_case_full_name"], state, p2_results, "solution-test", image_id, db, gt_image) + """ + + if isinstance(state, str): + curr_state = state + else: + curr_state = state[0] + + test_names.append(test_suite["test_case_full_name"]) + test_state_map[test_suite["test_case_full_name"]] = curr_state + + test_case_info = { + "start_time": test_suite["start_time"], + "end_time": test_suite["end_time"], + "state": state, + "test_category": test_suite["test_category"], + "test_case_name": test_suite["test_case_name"], + "test_case_full_name": test_suite["test_case_full_name"], + "test_tag": "unknown", + "test_script_name": test_suite["test_script_name"], + "test_script_full_name": test_suite["test_script_full_name"] + } + test_cases.append(test_case_info) + + return test_cases, test_names, test_state_map + +def retrieve_spytest_test_cases(spytest_report_url, directory_name, p2_results, image_id, lt_image, db, gt_image=None, use_backup=False): + spytest_test_cases_json = _get_spytest_test_cases_json(spytest_report_url, directory_name, use_backup) + + print("IN RETRIEVE SPYTEST TEST CASES FUNCTION ") + + test_cases, test_names, test_state_map = _traverse_through_spytest_test_cases_json(spytest_test_cases_json, p2_results, image_id, lt_image, db, gt_image) + if not test_cases: + return 1, None + + report_link = "http://10.28.109.58/logs/solution_test//"+directory_name+"/dashboard.html" + test_cases = _add_additional_info(test_cases, report_link) + + return 0, test_cases, test_names, test_state_map + +def write_test_cases_into_db(test_cases, sanity_id, image_id, p2_results, db): + job_base_name = "soltest_upload_to_dashboard" #os.environ["JOB_BASE_NAME"] + + sql = """ + INSERT INTO test_case + ( + parent_sanity_id, + parent_job_base_name, + start_time, + end_time, + state, + test_category, + test_case_name, + test_case_full_name, + test_tag, + platform, + topology, + pipeline_type, + sanity_type, + stream, + pr_repo_name, + pr_id, + pr_link, + report_link, + run_hw, + image_id, + test_script_name, + test_script_full_name + ) + VALUES %s + """ + + #create values list: + values = [] + + for test_case in test_cases: + values.append( + ( + sanity_id, + job_base_name, + test_case['start_time'], + test_case['end_time'], + test_case['state'], + test_case['test_category'], + test_case['test_case_name'], + test_case['test_case_full_name'], + test_case.get('test_tag'), + p2_results[0], + p2_results[1], + test_case.get('pipeline_type'), + "solution-test", + p2_results[2], + test_case.get('pr_repo_name'), + test_case.get('pr_id'), + test_case.get('pr_link'), + test_case.get('report_link'), + "True", + image_id, + test_case.get('test_script_name'), + test_case.get('test_script_full_name') + ) + ) + + for test_case in test_cases: + test_case_name_trunc = test_case['test_case_name'] + if len(test_case_name_trunc) > 50: + test_case_name_trunc = '...' + test_case_name_trunc[-50:] + + ret = db.execute_values(sql, values) + + return ret + +def get_report_link(key_data, db): + result_sum = db.find_one("management_full_run_test", key_data, column_list=["result_sum"]) + print("result_sum: {}".format(result_sum[0])) + if 'report_link' not in result_sum[0]: + return None + + report_link = result_sum[0]['report_link'] + return report_link + + + +def populate_test_case_table(parent_sanity_id, directory_name, image_id, lt_image, db, gt_image=None, use_backup=False): + + key_data = { + "build_id": parent_sanity_id + } + + p2_results = db.find_one("management_full_run_test", key_data, column_list=["platform", "topology", "stream", "project"]) + + spytest_report_url = get_report_link(key_data, db) + print("spytest_report_url: {}".format(spytest_report_url)) + if not spytest_report_url: + print("Failed at step: get_report_link! report link is empty") + sys.exit(1) + + ret, test_cases, test_names, test_state_map = retrieve_spytest_test_cases(spytest_report_url, directory_name, p2_results, image_id, lt_image, db, gt_image, use_backup) + print("ret: {}".format(ret)) + if ret != 0: + print("Failed at step: retrieve_spytest_test_cases!") + sys.exit(ret) + + ret = write_test_cases_into_db(test_cases, parent_sanity_id, image_id, p2_results, db) + + sanity_type = 'solution-test' + sku = None + + analyze_all_test_cases(parent_sanity_id, test_names, test_state_map, p2_results, sanity_type, lt_image, image_id, db, sku, gt_image) \ No newline at end of file diff --git a/infra/dashboard/scale_upload_dashboard.py b/infra/dashboard/scale_upload_dashboard.py new file mode 100644 index 00000000000..47f0e4ac7cf --- /dev/null +++ b/infra/dashboard/scale_upload_dashboard.py @@ -0,0 +1,150 @@ +import psycopg2 +from psycopg2.extras import execute_values +import sys +import argparse +import requests +import logging +import json +from datetime import datetime +import yaml +import os +from db_tool_sonicsol import PostgresDBConnectionSonicSol +sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/..") + + +def add_scale_params(build_id, directory_name, platform, p2build_job_id, image_created, npu): + + scale_json_file = "/var/www/html/logs/solution_test/"+directory_name+"/perf_and_scale.json" + + try: + with open(scale_json_file, 'r') as file: + # Load the JSON data into a Python dictionary + data = json.load(file) + + db = PostgresDBConnectionSonicSol(False) + + test_cases = data.keys() + test_cases_data = [] + + project = data.pop('project', None) + + run_urls = [] + run_dict = {} + run_dict["build_id"] = build_id + run_dict["result_url_array"] = {} + run_dict["result_url_array"]["append"] = [] + run_dict["result_url_array"]["append"].append(f"https://sonic-grafana.cisco.com/d/ef43a9bf-9a9e-4437-946c-3c00a651bf77/perf-and-scale-dashboard?orgId=1&from=now-30d&to=now&timezone=browser&var-platform={platform}&var-image_id={p2build_job_id}&var-project={project}") + run_dict["result_url_array"]["append"].append(f"https://sonic-grafana.cisco.com/d/02fc6a49-ba76-4132-a329-ace5a46aedc7/solution-test-results?var-project={npu}&var-build_job_date={image_created}&var-platform=$__all") + run_urls.append(run_dict) + + for tc in test_cases: + tc_old = tc + tc_new = tc.replace("::", ".") + + tc_id = db.find_one("test_case", key_data={"parent_sanity_id": build_id, "test_case_name": tc_new}, column_list=["id"]) + scenario_name = data[tc_old]["scenario_name"] + scenario_type = data[tc_old]["scenario_type"] + scenario_desc = data[tc_old]["scenario_desc"] + + for test_type in data[tc_old].keys(): + if test_type == "scale" or test_type == "performance": + for feature in data[tc_old][test_type]: + test_case_info = { + "test_case_id": tc_id[0], + "type": 1, # checks if type is being properly assigned + "scenario_name": scenario_name, + "scenario_type": scenario_type, + "scenario_desc": scenario_desc, + "feature": feature, + "actual": data[tc_old][test_type][feature]["actual"], + "expected": data[tc_old][test_type][feature]["expected"], + "feature_result": None, + "feat_traffic_result": None, + "failure_reason": data[tc_old][test_type][feature]["failure_reason"], + "project": project + } + + if test_case_info["actual"] is None: + test_case_info["actual"] = 0 + + if data[tc_old][test_type][feature]["traffic_result"] == "Pass": + test_case_info["feat_traffic_result"] = True + else: + test_case_info["feat_traffic_result"] = False + + if test_type == "scale": + test_case_info["feature_result"] = data[tc_old][test_type][feature]["result"] + + elif test_type == "performance": + test_case_info["type"] = 0 + + test_cases_data.append(test_case_info) + + db.close_connection() + return test_cases_data, run_urls + + except FileNotFoundError: + print(f"Error: The file {scale_json_file} was not found.") + + +def write_scale_test_case_params_into_db(test_cases): + + db = PostgresDBConnectionSonicSol(False) + + sql = """ + INSERT INTO scale_tc_params + ( + test_case_id, + type, + scenario_name, + scenario_type, + scenario_desc, + feature, + actual, + expected, + feature_result, + feat_traffic_result, + failure_reason, + project + ) + VALUES %s + """ + + #create values list: + values = [] + + for test_case in test_cases: + values.append( + ( + test_case['test_case_id'], + test_case['type'], + test_case['scenario_name'], + test_case['scenario_type'], + test_case['scenario_desc'], + test_case['feature'], + test_case['actual'], + test_case['expected'], + test_case['feature_result'], + test_case['feat_traffic_result'], + test_case['failure_reason'], + test_case['project'] + ) + ) + + ret = db.execute_values(sql, values) + + db.close_connection() + + return ret + + +def write_scale_run_urls(run_urls): + + db = PostgresDBConnectionSonicSol(False) + + ret = db.update_many_varchar_array_ops("management_full_run_test", run_urls, key_column="build_id") + + db.close_connection() + + return ret + diff --git a/infra/dashboard/server_creds.json b/infra/dashboard/server_creds.json new file mode 100644 index 00000000000..3efbabcf990 --- /dev/null +++ b/infra/dashboard/server_creds.json @@ -0,0 +1,179 @@ +{ + "tu2": { + "host": "10.29.158.30", + "user": "sonic", + "password": "roZes@123" + }, + "tu4": { + "host": "10.29.158.34", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m3-2": { + "host": "172.27.146.35", + "user": "rraghav", + "password": "roZes@123" + }, + "sonic-ucs-m3-4": { + "host": "172.27.147.237", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m4-3": { + "host": "172.27.147.253", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m5-2": { + "host": "172.27.147.154", + "user": "lab", + "password": "roZes@123" + }, + "sonic-ucs-m5-3": { + "host": "172.27.147.151", + "user": "ubuntu", + "password": "cicd_sonic" + }, + "sonic-ucs-m5-5": { + "host": "172.27.147.43", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m5-10": { + "host": "172.27.145.101", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m5-11": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m5-14": { + "host": "172.26.235.44", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m5-16": { + "host": "172.26.235.12", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-1": { + "host": "172.27.147.204", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-2": { + "host": "172.27.147.206", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-3": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-4": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-5": { + "host": "172.27.147.210", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-8": { + "host": "172.27.148.250", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-13": { + "host": "172.27.145.103", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-16": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-18": { + "host": "10.194.89.129", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-19": { + "host": "sonic-ucs-m6-19", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-20": { + "host": "172.26.235.20", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-22": { + "host": "sonic-ucs-m6-22", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-23": { + "host": "172.26.235.40", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-26": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-28": { + "host": "172.26.235.47", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-29": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-31": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-33": { + "host": "172.26.235.84", + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-42": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m6-44": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m7-42": { + "user": "sonic", + "password": "roZes@123" + }, + "sonic-ucs-m7-43": { + "user": "sonic", + "password": "roZes@123" + }, + "light13": { + "host": "10.28.109.54", + "user": "sonic", + "password": "roZes@123" + }, + "light14": { + "host": "10.28.109.58", + "user": "sonic", + "password": "roZes@123" + }, + "light15": { + "user": "sonic", + "password": "roZes@123" + }, + "10.81.124.127": { + "user": "cisco", + "password": "cisco.123" + } +} \ No newline at end of file diff --git a/infra/dashboard/soltest_upload_dashboard.py b/infra/dashboard/soltest_upload_dashboard.py new file mode 100755 index 00000000000..4a91d97ce22 --- /dev/null +++ b/infra/dashboard/soltest_upload_dashboard.py @@ -0,0 +1,760 @@ +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time +import datetime +import subprocess +import sys +import re +from pathlib import Path +import shlex +import tarfile +from db_tool_sonicsol import PostgresDBConnectionSonicSol +sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/..") +from run_scripts_remote import SUCCESS_STATUS, FAILURE_STATUS, FAILURE_RESONS +import pexpect +import csv + +NODE_NAME = os.getenv("NODE_NAME", "unknown") + +VXR_PORTS_FILENAME = "vxr_ports.yaml" +RESULT_FOLDER_PATH = "/home/sonic/solution_test/sonic-test/sonic-mgmt/spytest/spytest_results" +LOG_SERVER_IP = "10.28.109.58" ;# light14 server +LOG_SERVER_USERNAME = "sonic" +LOG_SERVER_PASSWORD = "roZes@123" +LOG_PATH = "/var/www/html/logs/solution_test" +LOG_HTTP_PATH = f"http://{LOG_SERVER_IP}:/logs/solution_test" + +SUMMARY_REPORT_FILENAME = "results.json" +NEW_SUMMARY_REPORT_FILENAME = "test_cases_info.json" +COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" +#TOPO_PLATFORM_FILE_MAP = os.path.dirname(os.path.realpath(__file__)) + '/topo_and_platform_to_filename_map.json' +SERVER_CREDS_MAP = os.path.dirname(os.path.realpath(__file__)) + '/server_creds.json' +SUMMARY_REPORT_PATH = "../../../{}".format(SUMMARY_REPORT_FILENAME) +NEW_SUMMARY_REPORT_PATH = "../../../{}".format(NEW_SUMMARY_REPORT_FILENAME) +COMMON_REPORT_PATH = "../../../{}".format(COMMON_REPORT_FILENAME) + + +pattern = r'_mh' +flag = False +for item in sys.argv: + match = re.search(pattern, item) + if match: + flag = True + break +if flag: + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "spine0": "SD1", + "leaf0": "SD2", + "leaf1": "SD3", + "leaf2": "SD4", + "leaf3": "SD5" + } +else: + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "spine0": "SD1", + "spine1": "SD2", + "leaf0": "SD3", + "leaf1": "SD4", + "leaf2": "SD5" + } + +device_ip_and_ports = [] + +def _create_parser(): + parser = argparse.ArgumentParser(description='Uploading Solution Test run logs to Dashboard.') + parser.add_argument('-f', '--topo_yaml', type=str, help='topo yaml file', + required=False) + parser.add_argument('--curr_server', type=str, help='current server where the run is stored', + required=True) + parser.add_argument('-t', '--topology', type=str, help='location of DUT in topo', + required=True) + parser.add_argument('-p', '--platform', type=str, help='platform type of the DUT', + required=True) + parser.add_argument('-s', '--script_file', type=str, help='Input test script file', + required=False, default="") + parser.add_argument('-r', '--run_label', type=str, help='Label for test run. ' + 'Example: ipv4, ipv6', + required=True, default="") + parser.add_argument('-d', '--run_desc', type=str, help='Description for test run. ' + 'Example: "rerun tgfailed TCs ', + required=False, default="") + parser.add_argument('-l', '--logs_path', type=str, help='Do data collect and upload for ' + 'existing run logs', required=True, default='') + parser.add_argument('-x', '--dev', action='store_true', + help='Run in dev mode. Data written to dev dir') + parser.add_argument('-n', '--npu', type=str, help='NPU ID OR Project Name', + required=True) + return parser + + +def get_ports_config(port_file=VXR_PORTS_FILENAME): + with open(port_file) as f: + ports_config = yaml.load(f, Loader=yaml.FullLoader) + + return ports_config + +def get_spirent_ip(): + ports_config = get_ports_config() + + telnet_host = ports_config["spt"]["HostAgent"] + telnet_port = ports_config["spt"]["serial0"] + + p = pexpect.spawn(f'telnet {telnet_host} {telnet_port}') + p.sendline() + p.expect('login') + ret = str(p.before) + ret = ret.split("STCv-")[1].split("/dev")[0].replace("-", ".") + + return ret.strip() + +""" +def determine_spt_or_ixia(topology, platform): + print("determine_spt_or_ixia") + pyvxr_yaml_file = import_pyvxr_yaml_file(topology, platform) + with open(pyvxr_yaml_file, "r") as f: + pyvxr_topo = yaml.load(f, Loader=yaml.BaseLoader) + + if "ixia" in pyvxr_topo["devices"]: + return "ixia" + elif "spt" in pyvxr_topo["devices"]: + return "spt" + else: + print("ERROR! Could not find ixia or spt in pyvxr yaml file!") + return None +""" + +def find_devices(topo_file_str): + regex = r'^([ ]{0}|[ ]{4}|\t)(\w+):' + keys = re.findall(regex, topo_file_str, re.MULTILINE) + + is_device = False + devices = [] + + for i, reg_match in enumerate(keys): + #got to devices key + if reg_match[1] == "devices": + is_device = True + continue + + #reached end of devices list + if is_device and len(reg_match[0]) == 0: + break + + if is_device: + devices.append(reg_match[1]) + + return devices + +# Define a function to perform the replacement +def replace_device_ip_and_port_helper(match): + global device_ip_and_ports + curr_device = device_ip_and_ports.pop(0) + print(curr_device) + return match.group(1) + curr_device["ip"] + match.group(2) + curr_device["port"] + match.group(3) + +def replace_device_ip_and_port(topo_file_str): + regex = r'(\W+access:\s*\{.*?ip:\s*)\S+(,\s*port:\s*)\S+(}\n)' #match 'access' portion of devices config + data_replaced = re.sub(regex, replace_device_ip_and_port_helper, topo_file_str, flags=re.DOTALL) + return data_replaced + +def update_device_ip_and_ports(topo_file_str): + global device_ip_and_ports + devices = find_devices(topo_file_str) + + ports_config = get_ports_config() + + for device_name in devices: + device_access_info = {} + if "SD" in device_name: + device_access_info["ip"] = ports_config[device_name]["HostAgent"] + device_access_info["port"] = str(ports_config[device_name]["xr_redir22"]) + elif device_name in TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING: + device_name_in_pyvxr_topo = TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING[device_name] + device_access_info["ip"] = ports_config[device_name_in_pyvxr_topo]["HostAgent"] + device_access_info["port"] = str(ports_config[device_name_in_pyvxr_topo]["xr_redir22"]) + else: + continue + + device_ip_and_ports.append(device_access_info) + + new_topo_file_str = replace_device_ip_and_port(topo_file_str) + return new_topo_file_str + +def exec_command_raise_error(client, cmd): + print(f"executing command: '{cmd}'") + stdin, stdout, stderr = client.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + print(f"Encountered error while executing '{cmd}', stdout: {stdout.readlines()}, stderr: {stderr.readlines()}") + raise Exception(stdout.channel.recv_exit_status(), stderr.readlines()) + + return stdin, stdout, stderr + +def execute_command_on_chan(chan, command='', show_output=False): + print(f"executing command: {command}") + termination_command = "\necho \"Command Completed, exit code is: $?\"\n" + termination_str = "Command Completed, exit code is:" + chan.send(command+termination_command) + while True: + resp = chan.recv(9999).decode('utf-8') + if show_output: + print("resp: ", resp) + if termination_str in resp: + #the termination command command will show up initially in resp, ignore + if resp.count(termination_str) == 1 and "$?" in resp.split(termination_str)[1]: + continue + exit_code = resp.split(termination_str)[1] + print(f"Exit code for command {command} is: {exit_code}") + break + +def run_sanity(topology, platform, script_file): + print("Starting step: run_sanity") + ports_config = get_ports_config() + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(ports_config['sonic_mgmt']['HostAgent'], ports_config['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + + chan = client.invoke_shell() + execute_command_on_chan(chan) + + spt_or_ixia = determine_spt_or_ixia(topology, platform) + + if spt_or_ixia == "spt": + cmd = "docker exec -it docker-sonic-mgmt /bin/bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "sudo su\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "cd /data; cp -r projects /; /data/bin/tools_install.sh; export SPIRENTD_LICENSE_FILE=10.22.181.32\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "mkdir spytest_results; chmod 777 spytest_results; cd spytest_results\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"env; /data/bin/spytest --testbed /data/topo --test-suite /data/{script_file}\n" + execute_command_on_chan(chan, cmd, show_output=True) + + elif spt_or_ixia == "ixia": + cmd = "docker exec -it ixia_sonic_mgmt bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "cd /data; pip install monotonic\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install retry\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "unset https_proxy http_proxy\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "mkdir spytest_results; chmod 777 spytest_results; cd spytest_results\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"env; /data/bin/spytest --testbed /data/topo --test-suite /data/{script_file}\n" + execute_command_on_chan(chan, cmd, show_output=True) + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + time.sleep(120) + + return 0, "" + +def extract_test_start_time(spytest_results_files): + for file in spytest_results_files: + if "stats.txt" in file: + return "_".join(file.split("_")[1:-1]) + +def pull_dir_via_sftp(host, user, password, remote_dir, local_dest, port=22, keep_remote_tar=False): + print(f"Tarring path {user}@{host}:{remote_dir} and storing to local directory: '{local_dest}'") + remote_dir = str(remote_dir) + local_dest = Path(local_dest) / host + local_dest.mkdir(parents=True, exist_ok=True) + + tarball_name = f"{remote_dir.replace('/', '_')}.tar.gz" + remote_tar = f"/tmp/{tarball_name}" + local_tar = local_dest / tarball_name + tar_cmd = f"set -euo pipefail; tar -czf {shlex.quote(remote_tar)} {remote_dir}" + + if local_tar.exists() and local_tar.is_file(): + msg = f"Tarball '{tarball_name}' already exists in local directory '{local_dest}'! Exit." + #raise ValueError(msg) + print(msg) + return + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=host, username=user, password=password, port=port) + + # Tar the directory on the remote host + print(f"tar cmd: {tar_cmd}") + _, stdout, stderr = ssh.exec_command(tar_cmd) + rc = stdout.channel.recv_exit_status() + if rc != 0: + msg = stderr.read().decode() + ssh.close() + raise RuntimeError(f"Remote tar failed (rc={rc}): {msg}") + + # Download the tarball via SFTP + sftp = ssh.open_sftp() + try: + sftp.get(remote_tar, str(local_tar)) + finally: + sftp.close() + print(f"From {host}, Downloaded {remote_tar} to local: '{local_tar}'") + + # Optionally remove the tarball on the remote + if not keep_remote_tar: + ssh.exec_command(f"rm -f {shlex.quote(remote_tar)}") + ssh.close() + + # Extract locally + with tarfile.open(local_tar, mode="r:gz") as tf: + tf.extractall(path=local_dest) + + # Clean up local tar + try: + os.remove(str(local_tar)) + except OSError: + raise Exception("Unable to clean up local tar file") + + relative_path = Path(remote_dir.lstrip('/')) + final_path = local_dest / relative_path + print(f"Destination of directory now! {final_path}") + return final_path + +def open_leaf0_log_file(directory_path, topology): + """ + Opens the first file ending with 'leaf0.log' found in the specified directory. + + Args: + directory_path (str): The path to the directory to search. + + Returns: + str: The content of the file if found, otherwise an error message. + """ + try: + # Check if the directory exists + if not os.path.isdir(directory_path): + return f"Error: Directory '{directory_path}' does not exist." + + image_id = 0 + stream = "" + release = "" + + CONDITIONAL_LOGS = { + 'leaf1.log': 'cnest', + 'T2LC0.log': 't2', + 'SD1.log': 'oci', + 'leaf0_dc1.log': 'dci' + } + + found = False + + # List all files and directories in the given path + for filename in os.listdir(directory_path): + # Check if the item is a file and ends with 'leaf0.log' + if os.path.isfile(os.path.join(directory_path, filename)): + if filename.endswith('leaf0.log') or any(filename.endswith(sfx) and key in topology + for sfx, key in CONDITIONAL_LOGS.items()): + found = True + file_path = os.path.join(directory_path, filename) + print(f"Found and opening file: {file_path}") + try: + with open(file_path, 'r') as f: + lines = f.readlines() + i = 0 + while "SONiC Software Version" not in lines[i]: + i += 1 + + if i < len(lines): + sh_ver_img_pattern1 = r"-([0-9]+)-" #SONiC.202405c.2.1.0-81I-28928-20250807.235033 + sh_ver_img_pattern2 = r".([0-9]+)-" #SONiC.202405c.28930-int-20250807.201428 + + info = lines[i][lines[i].index("Version:"):] + match1 = re.search(sh_ver_img_pattern1, info) + match2 = re.search(sh_ver_img_pattern2, info) + + if match1: # Check if match1 is not None + if len(match1.group()) > 4: + image_id = match1.group()[1:-1] + elif match2: # Check if match2 is not None + if len(match2.group()) > 4: + image_id = match2.group()[1:-1] + else: + print("No Match found!") + + db_stream = PostgresDBConnectionSonicSol(use_backup=False) + stream_tup = db_stream.find_one("pipeline2_build", key_data={"build_id": image_id}, column_list=["stream"]) + db_stream.close_connection() + stream = stream_tup[0] + + pattern = r"^[^.]+\.((?:\d{6}[a-zA-Z]*)(?:\.(?:\d+|[a-zA-Z]{1,4}))?)" + ##if '202405c.2.tortuga.2.2' in stream: + ## pattern = r"^[^.]+\.(\d{6}[a-z]\.\d+\.[^.]+\.\d+\.\d+)" + + match = re.search(pattern, stream) + if match: + release = match.group(1) + + if release == "": + release = stream.split('.', 1)[0] # to look for the correct release in streams like 'c-master.tortuga.....' + + print("About to be done with function!") + return int(image_id), stream, release + + else: + print("SONiC Software Version information NOT found!!") + + except IOError as e: + return f"Error opening file '{file_path}': {e}" + + if found == False: + print(f'Leaf0.log type file not found for {topology}') + + + except Exception as e: + return f"An unexpected error occurred: {e}" + +def collect_result(curr_server, logs_path, topology, platform, run_label, run_desc): + print("Collecting result") + # TODO + #ports_config = get_ports_config() + final_path = logs_path + + with open(SERVER_CREDS_MAP) as server_creds: + SERVER_CREDS_MAP_DICT = json.load(server_creds) + + host = curr_server + if host not in SERVER_CREDS_MAP_DICT: + raise Exception("Do not have information for this particular host in mapping!") + + user = SERVER_CREDS_MAP_DICT[host]["user"] + password = SERVER_CREDS_MAP_DICT[host]["password"] + + local_dest = "/var/www/html/logs/" + + final_path = pull_dir_via_sftp(host, user, password, logs_path, local_dest) + + if os.path.exists(final_path) == False: + raise Exception("Log Path is incorrect / Does not exist!!") + rc, msg = cleanup() + return None + + logs_path = final_path + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + # TODO + #client.connect(ports_config['sonic_mgmt']['HostAgent'], ports_config['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + client.connect('10.28.109.58', port=22, username="sonic", password="roZes@123") + + ftp_client=client.open_sftp() + spytest_results_files = ftp_client.listdir(str(logs_path)) + + global test_start_time + test_start_time = extract_test_start_time(spytest_results_files) + exec_command_raise_error(client, f"cd {logs_path}; echo cisco123 | sudo -S chmod -R 644 tmp* | true") + + exec_command_raise_error(client, f"cd {logs_path}; tar -czvf spytest_result.tar.gz *") + ftp_client.get(f"{logs_path}/spytest_result.tar.gz","./spytest_result.tar.gz") + exec_command_raise_error(client, f"cd {logs_path}; rm spytest_result.tar.gz") + + os.system(f"mkdir spytest_result_{test_start_time}") + os.system(f"tar -xvf spytest_result.tar.gz -C spytest_result_{test_start_time}") + os.system(f"tar -czvf vxr.out.tar.gz vxr.out") + + #generate report files for pipeline + sum_f = open(SUMMARY_REPORT_PATH, "w") + com_f = open(COMMON_REPORT_PATH, "w") + tc_f = open(NEW_SUMMARY_REPORT_PATH, 'w') + + sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "failure_reason": None, + 'build_start' : "", 'build_end' : "", "platform" : platform, "topology" : topology, + "run_label" : run_label, "run_desc" : run_desc} + tc_details = {} + + ret = 0 + msg = "" + + image_id = 0 + stream = "" + release = "" + + contains_pns = False + try: + scale_json = open(f"./spytest_result_{test_start_time}/perf_and_scale.json", "r") + scale_json.close() + contains_pns = True + except FileNotFoundError: + contains_pns = False + + try: + image_id, stream, release = open_leaf0_log_file(f"./spytest_result_{test_start_time}", topology) + + time_log_file = open(f"./spytest_result_{test_start_time}/results_{test_start_time}_time.log", 'r') + lines = time_log_file.readlines() + time_log_file.close() + + first_line = lines[0].strip() + last_line = lines[-1].strip() + + sum['build_start'] = first_line[:first_line.index(".")] + sum['build_end'] = last_line[:last_line.index(".")] + + stats_txt_file = open(f"./spytest_result_{test_start_time}/results_{test_start_time}_stats.txt", 'r') + stats_txt = stats_txt_file.readlines() + stats_txt_file.close() + + sum['total'] = 0 + sum['passed'] = 0 + sum['failed'] = 0 + sum['skipped'] = 0 + + i = 0 + while i < len(stats_txt): + if "STATS" in stats_txt[i]: + # Skip module configuration blocks + #print(f"\n🟢 Found STATS block at line {i}: {stats_txt[i].strip()}") + lookahead = "".join(stats_txt[i:i+5]) + if "Module Configuration" in lookahead: + print("Skipping Module Configuration block — moving to next STATS.\n") + i += 1 + # Move i forward until the next STATS block or end of file + while i < len(stats_txt) and "STATS" not in stats_txt[i]: + i += 1 + + if i >= len(stats_txt): + print("Reached EOF without finding new STATS BLOCK!") + break + + line = stats_txt[i] + sum["total"] += 1 + case_summary = {} + + # parse module name + parts = line.split(":") + module = parts[1].strip() if len(parts) > 1 else "unknown" + script_full_name = module + script_name = os.path.basename(module) + case_summary["test_script_full_name"] = script_full_name + case_summary["test_script_name"] = script_name + + dir_name = os.path.dirname(module) + test_category = os.path.split(dir_name)[1] if dir_name else "unknown" + case_summary['test_category'] = test_category + + if len(parts) > 4: + case_summary['test_case_name'] = parts[-3] + '.' + parts[-1].split(' ')[0] + case_summary['test_case_full_name'] = module.split(".py")[0].replace('/', '.') + "#" + parts[-3] + '.' + parts[-1].split(' ')[0] + else: + case_summary['test_case_name'] = parts[-1].split(' ')[0] + case_summary['test_case_full_name'] = module.split(".py")[0].replace('/', '.') + "#" + parts[-1].split(' ')[0] + + # find RESULT line robustly + state = "Unknown" + while i + 1 < len(stats_txt): + i += 1 + if "RESULT" in stats_txt[i]: + parts = stats_txt[i].split("=") + if len(parts) > 1: + state = parts[1].strip() + break + case_summary['state'] = state + + if "pass" in state.lower(): + sum['passed'] += 1 + elif state.lower() in ["TGenFail", "ScriptError"] or "skip" in state.lower(): + sum['skipped'] += 1 + else: + sum['failed'] += 1 + + # find TECH SUPPORT line safely + while i < len(stats_txt) and "TECH SUPPORT" not in stats_txt[i]: + i += 1 + if i < len(stats_txt) - 1: + i += 1 + + # extract timestamps if present + start_time = None + end_time = None + if i < len(stats_txt) and "," in stats_txt[i]: + start_time = stats_txt[i].split(",")[0] + j = i + 1 + while j < len(stats_txt) and "====" not in stats_txt[j]: + j += 1 + if j - 1 > i and "," in stats_txt[j - 1]: + end_time = stats_txt[j - 1].split(",")[0] + + case_summary['start_time'] = start_time + case_summary['end_time'] = end_time + + if script_name not in tc_details: + tc_details[script_name] = {"SCRIPT_NAME": script_name, "TC_INFO": []} + tc_details[script_name]['TC_INFO'].append(case_summary) + + while i < len(stats_txt) and "STATS" not in stats_txt[i]: + i += 1 + else: + i += 1 # no STATS in this line, move forward + + if sum["total"] > sum["skipped"]: + sum["success_rate"] = round(sum["passed"] / (sum["total"] - sum["skipped"]) * 100, 2) + elif sum["total"] == sum["skipped"]: + sum["success_rate"] = 0 + + if sum["success_rate"] == 100: + sum["status"] = SUCCESS_STATUS + else: + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.TEST_CASES_FAILED + + except Exception as e: + msg = "Exception! Failed to open stats.txt file!" + print(msg) + sum["status"] = "failure" + sum["failure_reason"] = FAILURE_RESONS.NO_REPORT_FILE + ret = 1 + + print(f"result summary is: {sum}") + + test_data = {'script_data': list(tc_details.values())} + + json.dump(sum, sum_f) + json.dump(sum, com_f) + json.dump(test_data, tc_f, indent=2) + + sum_f.close() + com_f.close() + tc_f.close() + + return ret, msg, sum, image_id, stream, release, contains_pns + +def upload_result(): + print("Uploading result to server") + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(LOG_SERVER_IP, username = LOG_SERVER_USERNAME, password = LOG_SERVER_PASSWORD) + + ftp_client=client.open_sftp() + spytest_results_files = os.listdir(f"spytest_result_{test_start_time}") + dest_path = f"{LOG_PATH}/spytest_result_{test_start_time}" + http_path = f"{LOG_HTTP_PATH}/spytest_result_{test_start_time}" + + if os.path.exists(dest_path): + raise Exception(f"Directory spytest_result_{test_start_time} already exists!!") + return None + + ftp_client.mkdir(dest_path) + + ftp_client.put(f"./spytest_result.tar.gz", f"{dest_path}/spytest_result.tar.gz") + ftp_client.put(f"./vxr.out.tar.gz", f"{dest_path}/vxr.out.tar.gz") + ftp_client.put(NEW_SUMMARY_REPORT_PATH, f"{dest_path}/{NEW_SUMMARY_REPORT_FILENAME}") + exec_command_raise_error(client,f"cd {dest_path}; tar -xvf spytest_result.tar.gz") + + with open(SUMMARY_REPORT_PATH, "r") as f: + sum = json.load(f) + + com_f = open(COMMON_REPORT_PATH, "w") + sum_f = open(SUMMARY_REPORT_PATH, "w") + + sum["report_link"] = f"{http_path}/results_{test_start_time}_logs.log" + sum["log_tarball_link"] = f"{http_path}/spytest_result.tar.gz" + + json.dump(sum, sum_f) + json.dump(sum, com_f) + + sum_f.close() + com_f.close() + ftp_client.put(SUMMARY_REPORT_PATH, f"{dest_path}/{SUMMARY_REPORT_FILENAME}") + + print(f"Successfully uploaded test result, url is: {sum['report_link']}") + return 0, "", dest_path + +def cleanup(): + os.system(f"rm -rf spytest_result_{test_start_time}") + os.system(f"rm -rf spytest_result.tar.gz") + os.system(f"rm -rf vxr.out.tar.gz") + return 0, "" + +def main(curr_server, topo_yaml, topology, platform, script_file, run_label, logs_path, run_desc=None, dev=False): + + global LOG_PATH , LOG_HTTP_PATH , LOG_SERVER_IP, test_start_time + + #### ERROR CHECKS + if run_label.strip() == "": + raise Exception("Please add run label for this run. It is a REQUIRED Parameter!") + rc, msg = cleanup() + return None + elif logs_path[0] != "/": + raise Exception("Please put a forward slash at the beginning of the logs path!") + rc, msg = cleanup() + return None + ############ + + if dev: + LOG_PATH += "_dev" + LOG_HTTP_PATH += "_dev" + + try: + if not logs_path: + # if not logs_path provided then need to run script + if not script_file: + print("error! script_file not provided!") + raise Exception("error! script_file not provided!") + + rc, msg = run_sanity(topology, platform, script_file) + if rc != 0: + print(f"error at run_sanity! msg: {msg}") + raise Exception(msg) + logs_path = RESULT_FOLDER_PATH + + rc, msg, result_sum, image_id, stream, release, contains_pns = collect_result(curr_server, logs_path, topology, platform, run_label, run_desc) + if rc != 0: + raise Exception(f"error at collect_result! msg: {msg}") + + rc, msg, dest_path = upload_result() + print(f"IN MAIN ---- {dest_path}") + if rc != 0: + raise Exception(f"error at upload_result! msg: {msg}") + + if result_sum["status"] == FAILURE_STATUS: + print(f"failures detected in run logs! Please check logs. Result summary: {result_sum}") + + print(f"run_spytest completed successfully : logs @ {LOG_SERVER_IP} : {LOG_PATH} :: spytest_result_{test_start_time}") + print(f"DIR_PATH ======= {dest_path}") + return dest_path, image_id, stream, release, contains_pns + + except Exception as e: + print(f"An error occurred: {e.args}") + raise + finally: + rc, msg = cleanup() + +if __name__ == '__main__': + + """ + Uncomment these lines when running JUST this script! + + argparser = _create_parser() + args = vars(argparser.parse_args()) + tar_ball = args['tar_ball'] + topo_yaml = args['topo_yaml'] + topology = args['topology'] + platform = args['platform'] + script_file = args['script_file'] + run_label = args['run_label'] + run_desc = args['run_desc'] + logs_path = args['logs_path'] + dev = False + + if args['dev']: + dev = True + """ + + main(curr_server, topo_yaml, topology, platform, script_file, run_label, logs_path, run_desc, dev) diff --git a/infra/dashboard/sonic_mgmt_platform_to_npu.json b/infra/dashboard/sonic_mgmt_platform_to_npu.json new file mode 100644 index 00000000000..00b84f814c7 --- /dev/null +++ b/infra/dashboard/sonic_mgmt_platform_to_npu.json @@ -0,0 +1,30 @@ +{ + "x86_64-8102_64h_o-r0": { + "platform_name": "mth-64", + "project": "Q200" + }, + "x86_64-8101_32fh_o-r0" : { + "platform_name": "churchill-mono", + "project": "Q200" + }, + "x86_64-8101_32fh_o_c01-r0": { + "platform_name": "Tornado", + "project": "Q200" + }, + "x86_64-8102_28fh_dpu_o-r0": { + "platform_name": "MtFuji", + "project": "Q200" + }, + "x86_64-8201_32fh_o-r0": { + "platform_name": "churchill-hbm", + "project": "Q200" + }, + "x86_64-8122_64eh_o-r0": { + "platform_name": "lightning", + "project": "G200" + }, + "x86_64-8122_64ehf_o-r0": { + "platform_name": "superbolt", + "project": ["G200", "OCI"] + } +} \ No newline at end of file diff --git a/infra/dashboard/sonic_mgmt_upload_dashboard.py b/infra/dashboard/sonic_mgmt_upload_dashboard.py new file mode 100644 index 00000000000..4a1e3a356e0 --- /dev/null +++ b/infra/dashboard/sonic_mgmt_upload_dashboard.py @@ -0,0 +1,1050 @@ +#!/usr/bin/env python3 +import argparse +import glob +import json +import sys +import os +import time +import requests +import tarfile +from pathlib import Path +import paramiko +import shlex +import re +from requests.auth import HTTPBasicAuth +from urllib.request import urlopen +from collections import defaultdict +from datetime import datetime, timedelta, timezone +from db_tool_sonicsol import PostgresDBConnectionSonicSol +from populate_test_case_table_sonicsol import analyze_all_test_cases +import defusedxml.ElementTree as ET + +NODE_NAME = os.getenv("NODE_NAME", "unknown") +JENKINS_JOB_BASE_NAME = os.getenv("JOB_BASE_NAME") +RING_4_JOB_BASE_NAME = "management_full_run_test" + +PLATFORM_NPU_FILE_MAP = os.path.dirname(os.path.realpath(__file__)) + '/sonic_mgmt_platform_to_npu.json' +SERVER_CREDS_MAP = os.path.dirname(os.path.realpath(__file__)) + '/server_creds.json' + +TEST_REPORT_CLIENT_VERSION = (1, 1, 0) + +MAXIMUM_XML_SIZE = 20e7 # 20MB +MAXIMUM_SUMMARY_SIZE = 1024 # 1MB + +# Fields found in the testsuite/root section of the JUnit XML file. +TESTSUITES_TAG = "testsuites" +TESTSUITE_TAG = "testsuite" +REQUIRED_TESTSUITE_ATTRIBUTES = { + ("time", float), + ("tests", int), + ("skipped", int), + ("failures", int), + ("errors", int), + ("timestamp", str) +} +EXTRA_XML_SUMMARY_ATTRIBUTES = { + ("xfails", int) +} +# Fields found in the metadata/properties section of the JUnit XML file. +# FIXME: These are specific to pytest, needs to be extended to support spytest. +PROPERTIES_TAG = "properties" +PROPERTY_TAG = "property" +REQUIRED_METADATA_PROPERTIES = [ + "topology", + "testbed", + "timestamp", + "host", + "asic", + "platform", + "hwsku", + "os_version", +] + +# Fields found in the testcase sections of the JUnit XML file. +TESTCASE_TAG = "testcase" +REQUIRED_TESTCASE_ATTRIBUTES = [ + "classname", + "file", + "line", + "name", + "time", +] + +# Fields found in the testcase/properties section of the JUnit XML file. +# FIXME: These are specific to pytest, needs to be extended to support spytest. +TESTCASE_PROPERTIES_TAG = "properties" +TESTCASE_PROPERTY_TAG = "property" +REQUIRED_TESTCASE_PROPERTIES = [ + "start", + "end", + "CustomMsg" +] + +REQUIRED_TESTCASE_JSON_FIELDS = ["result", "error", "summary"] + + +class JUnitXMLValidationError(Exception): + """Expected errors that are thrown while validating the contents of the JUnit XML file.""" + +class TestResultJSONValidationError(Exception): + """Expected errors that are thrown while validating the contents of the Test Result JSON file.""" + + +def validate_json_file(path): + if not os.path.exists(path): + print(f"{path} not found") + return + if not os.path.isfile(path): + print(f"{path} is not a JSON file") + return + try: + with open(path) as f: + test_result_json = json.load(f) + except Exception as e: + raise TestResultJSONValidationError(f"Could not load JSON file {path}: {e}") from e + + return test_result_json + + +def validate_junit_xml_file(document_name): + """Validate that an XML file is valid JUnit XML. + + Args: + document_name: The name of the document. + + Returns: + The root of the validated XML document. + + Raises: + JUnitXMLValidationError: if any of the following are true: + - The provided file doesn't exist + - The provided file exceeds 10MB + - The provided file is unparseable + - The provided file is missing required fields + """ + if not os.path.exists(document_name) or not os.path.isfile(document_name): + raise JUnitXMLValidationError("file not found") + + if os.path.getsize(document_name) > MAXIMUM_XML_SIZE: + raise JUnitXMLValidationError("provided file is too large") + + try: + tree = ET.parse(document_name, forbid_dtd=True) + except Exception as e: + raise JUnitXMLValidationError(f"could not parse {document_name}: {e}") from e + + return _validate_junit_xml(tree.getroot()) + + +def validate_junit_xml_archive(directory_name, strict=False): + """Validate that an XML archive contains valid JUnit XML. + + Args: + directory_name: The name of the directory containing XML documents. + + Returns: + A list of roots of validated XML documents. + + Raises: + JUnitXMLValidationError: if any of the following are true: + - The provided directory doesn't exist + - The provided files exceed 10MB + - Any of the provided files are unparseable + - Any of the provided files are missing required fields + """ + if not os.path.exists(directory_name) or not os.path.isdir(directory_name): + print("directory {} not found".format(directory_name)) + return + + roots = [] + metadata_source = None + metadata = {} + doc_list = glob.glob(os.path.join(directory_name, "tr.xml")) + doc_list += glob.glob(os.path.join(directory_name, "*test*.xml")) + doc_list += glob.glob(os.path.join(directory_name, "**", "*test*.xml"), recursive=True) + doc_list = set(doc_list) + + total_size = 0 + for document in doc_list: + total_size += os.path.getsize(document) + + if total_size > MAXIMUM_XML_SIZE: + raise JUnitXMLValidationError("provided directory is too large") + + for document in doc_list: + try: + root = validate_junit_xml_file(document) + root_metadata = {k: v for k, v in _parse_test_metadata(root).items() + if k in REQUIRED_METADATA_PROPERTIES and k != "timestamp"} + + if root_metadata: + # All metadata from a single test run should be identical, so we + # just use the first one we see to validate the rest. + if not metadata_source: + metadata_source = document + metadata = root_metadata + + if root_metadata != metadata: + raise JUnitXMLValidationError(f"{document} metadata differs from {metadata_source}\n" + f"{document}: {root_metadata}\n" + f"{metadata_source}: {metadata}") + + roots.append(root) + except Exception as e: + if strict: + raise JUnitXMLValidationError(f"could not parse {document}: {e}") from e + + print(f"could not parse {document}: {e} - skipping") + + if not roots: + print("provided directory {} does not contain any valid XML files".format(directory_name)) + return roots + +def _validate_junit_xml(root): + _validate_test_summary(root) + _validate_test_metadata(root) + _validate_test_cases(root) + + return root + + +def _validate_test_summary(root): + if root.tag == TESTSUITES_TAG: + testsuit_element = root.find(TESTSUITE_TAG) + if not testsuit_element: + raise JUnitXMLValidationError(f"{TESTSUITE_TAG} tag not found") + elif root.tag == TESTSUITE_TAG: + testsuit_element = root + else: + raise JUnitXMLValidationError(f"Either {TESTSUITES_TAG} or {TESTSUITE_TAG} tag are not found on root element") + + for xml_field, expected_type in REQUIRED_TESTSUITE_ATTRIBUTES: + if xml_field not in testsuit_element.keys(): + raise JUnitXMLValidationError(f"{xml_field} not found in <{TESTSUITE_TAG}> element") + + try: + expected_type(testsuit_element.get(xml_field)) + except Exception as e: + raise JUnitXMLValidationError( + f"invalid type for {xml_field} in {TESTSUITE_TAG}> element: " + f"expected a number, received " + f'"{testsuit_element.get(xml_field)}"' + ) from e + + +def _validate_test_metadata(root): + properties_element = root.find(PROPERTIES_TAG) + + if not properties_element: + return + + seen_properties = [] + for prop in properties_element.iterfind(PROPERTY_TAG): + property_name = prop.get("name", None) + + if not property_name: + continue + + if property_name not in REQUIRED_METADATA_PROPERTIES: + continue + + if property_name in seen_properties: + raise JUnitXMLValidationError( + f"duplicate metadata element: {property_name} seen more than once" + ) + + property_value = prop.get("value", None) + + if property_value is None: # Some fields may be empty + raise JUnitXMLValidationError( + f'invalid metadata element: no "value" field provided for {property_name}' + ) + + seen_properties.append(property_name) + + if set(seen_properties) < set(REQUIRED_METADATA_PROPERTIES): + raise JUnitXMLValidationError("missing metadata element(s)") + + +def _validate_test_case_properties(root): + testcase_properties_element = root.find(TESTCASE_PROPERTIES_TAG) + + if not testcase_properties_element: + return + + seen_testcase_properties = [] + for testcase_prop in testcase_properties_element.iterfind(TESTCASE_PROPERTY_TAG): + testcase_property_name = testcase_prop.get("name", None) + + if not testcase_property_name: + continue + + if testcase_property_name not in REQUIRED_TESTCASE_PROPERTIES: + continue + + if testcase_property_name in seen_testcase_properties: + raise JUnitXMLValidationError( + f"duplicate metadata element: {testcase_property_name} seen more than once" + ) + + testcase_property_value = testcase_prop.get("value", None) + + if testcase_property_value is None: # Some fields may be empty + raise JUnitXMLValidationError( + f'invalid metadata element: no "value" field provided for {testcase_property_name}' + ) + + seen_testcase_properties.append(testcase_property_name) + + missing_testcase_property = set(REQUIRED_TESTCASE_PROPERTIES) - set(seen_testcase_properties) + if missing_testcase_property: + print("missing testcase property: {}".format(list(missing_testcase_property))) + + +def _validate_test_cases(root): + def _validate_test_case(test_case): + for attribute in REQUIRED_TESTCASE_ATTRIBUTES: + if attribute not in test_case.keys(): + raise JUnitXMLValidationError( + f'"{attribute}" not found in test case ' + f"\"{test_case.get('name', 'Name Not Found')}\"" + ) + _validate_test_case_properties(test_case) + + cases = root.findall(TESTCASE_TAG) + + for test_case in cases: + _validate_test_case(test_case) + +def _convert_to_num(num_str): + try: + return int(num_str) + except: + return float(num_str) + +def get_platform_name_npu(platform): + with open(PLATFORM_NPU_FILE_MAP) as cfg_file: + PLATFORM_NPU_FILE_MAP_DICT = json.load(cfg_file) + + if platform in PLATFORM_NPU_FILE_MAP_DICT: + return PLATFORM_NPU_FILE_MAP_DICT[platform]["platform_name"], PLATFORM_NPU_FILE_MAP_DICT[platform]["project"] + else: + raise Exception(f"Platform mapping for {platform} DOES NOT EXIST!!") + +def parse_test_result(roots, build_id, log_link, metadata, sanity_type, image_id, lt_image, result, platform_name, project, sql, gt_image, allure, use_backup): + """Parse a given XML document into JSON. + + Args: + root: The root of the XML document to parse. + + Returns: + A dict containing the parsed test result. + """ + if not roots: + print("No XML file needs to be parsed or the file is empty.") + return + + db = PostgresDBConnectionSonicSol(use_backup) + + + build_start_all = None + build_end_all = None + + result_sum = {} + values = [] + + job_base_name = RING_4_JOB_BASE_NAME + + if JENKINS_JOB_BASE_NAME != RING_4_JOB_BASE_NAME and build_id is None: + # Getting Build id to use for populating test_case and result_sum + build_id_result = db.get_next_sequence_value("mgmt_full_run_test_build_id_seq") + build_id = 0 + + job_base_name = "sonic_mgmt_upload" + + if build_id == None: + raise Exception("Issue with build_id creation!!!") + else: + build_id = build_id_result[0][0] + print(f"BUILD ID FOR THIS RUN: {build_id}") + + # Variables needed for test_case analysis + run_results = [metadata["platform"], metadata["topology"], result[0], project] + test_names = [] + test_state_map = {} + + for root in roots: + if root.tag == TESTSUITES_TAG: + root = root.find(TESTSUITE_TAG) + + + test_cases = _parse_test_cases(root) + root_metadata = _parse_test_summary(root) + test_summary = _extract_test_summary(test_cases) # Getting test case summary + if test_cases == {}: + continue + + main_key = list(test_cases.keys())[0] + + if len(test_cases[main_key][0]["name"]) == 0 and test_cases[main_key][0]["file"] is None: + continue + + test_script_full_name = test_cases[main_key][0]["file"] + + test_category = test_cases[main_key][0]["classname"].split(".")[0] + test_script_name = "No_Name.py" + + if test_script_full_name is not None: + test_category = test_script_full_name.split("/")[0] + test_script_name = os.path.basename(test_script_full_name) + elif test_script_full_name is None: + test_script_full_name = test_category + "/" + test_script_name + + for key, value in test_summary.items(): + if key not in result_sum: + result_sum[key] = _convert_to_num(value) + else: + result_sum[key] += _convert_to_num(value) + + # Uploading root results to DB! + build_start = None + build_end = None + + dt = datetime.fromisoformat(root_metadata['timestamp']) + + if dt.tzinfo: + dt = dt.astimezone(timezone.utc) + + build_start = dt.replace(tzinfo=None) + + if not build_start_all: + build_start_all = build_start + else: + build_start_all = min(build_start_all, build_start) + + tot_time = float(root_metadata["time"]) + + build_end = build_start + timedelta(seconds=tot_time) + build_end = build_end.strftime("%Y-%m-%d %H:%M:%S.%f") + + if not build_end_all: + build_end_all = build_end + else: + build_end_all = max(build_end_all, build_end) + + for i in range(len(test_cases[main_key])): + + test_state = "Passed" + if test_cases[main_key][i]['result'] == 'skipped': + test_state = 'Skipped' + elif test_cases[main_key][i]['result'] == 'failure': + test_state = 'Failed' + elif test_cases[main_key][i]['result'] == 'error': + test_state = 'Error' + elif "xfail" in test_cases[main_key][i]['result']: + test_state = 'XFail' + + start_time = None + end_time = None + if 'start' in test_cases[main_key][i]: + start_time = test_cases[main_key][i]['start'] + if 'end' in test_cases[main_key][i]: + end_time = test_cases[main_key][i]['end'] + + test_names.append(test_cases[main_key][i]['classname'] + "." + test_cases[main_key][i]['name']) + test_state_map[test_cases[main_key][i]['classname'] + "." + test_cases[main_key][i]['name']] = test_state + + values.append( + ( + build_id, + job_base_name, + start_time, + end_time, + test_state, + test_category, + test_cases[main_key][i]['name'], + test_cases[main_key][i]['classname'] + "." + test_cases[main_key][i]['name'], + None, + metadata["platform"], + metadata["topology"], + None, + sanity_type, + result[0], + None, + None, + None, + allure, + "True", + image_id, + test_cases[main_key][i]['summary'][:512], + metadata["hwsku"], + test_script_name, + test_script_full_name + ) + ) + + #print(values) <-- prints out ALL Test cases + ret = db.execute_values(sql, values) + db.conn.commit() + + total = result_sum["total"] = result_sum["tests"] + del result_sum["tests"] + passed = result_sum["passed"] + skipped = result_sum["skipped"] + + success_rate = round(100*passed/(total-skipped), 2) + if success_rate == 100: + state = 'pass' + failure_reason = None + else: + state = 'fail' + failure_reason = "test_cases_failed" + + result_sum["success_rate"] = success_rate + result_sum["state"] = state + result_sum["failure_reason"] = failure_reason + + state = state.capitalize() + + stream = result[0] + release = ".".join(result[0].split('.')[1:-1]) + + if release == "": + release = stream.split('.', 1)[0] # to look for the correct release in streams like 'c-master.ztp.....' + + #populate p2 sanity table + key_data = { + "build_id": build_id, + "job_base_name": job_base_name, + "sonic_image_link": result[1], + "platform": metadata["platform"], + "topology": metadata["topology"], + "run_hw": "True", + "sku": metadata["hwsku"], + "sanity_type": sanity_type, + "stream": stream, + "p2build_job_id": image_id, + "release": release, + "build_state": state, + "build_start": str(build_start_all), + "build_end": build_end_all, + "platform_name": platform_name, + "project": project, + "report_link": allure + } + + if job_base_name == "sonic_mgmt_upload": + key_data["log_tarball_link"] = log_link + db.insert("management_full_run_test", key_data) + + elif job_base_name == RING_4_JOB_BASE_NAME: + del key_data["build_id"] + db.update("management_full_run_test", key_data = {"build_id": build_id}, updated_data = key_data) + + # updating the result_sum separately since is dict type + db.update("management_full_run_test", key_data = {"build_id": build_id}, updated_data = {"result_sum": json.dumps(result_sum)}) + + analyze_all_test_cases(build_id, test_names, test_state_map, run_results, sanity_type, lt_image, image_id, db, metadata["hwsku"], gt_image) + + db.close_connection() + +def _parse_test_summary(root): + test_result_summary = {} + for attribute, _ in REQUIRED_TESTSUITE_ATTRIBUTES: + test_result_summary[attribute] = root.get(attribute) + + return test_result_summary + +def _extract_test_summary(test_cases): + test_result_summary = defaultdict(int) + test_result_summary = {"tests": 0, "failed": 0, "passed": 0, "skipped": 0, "errors": 0, "xfails": 0, "time": 0.0} + + case = None + for _, cases in test_cases.items(): + for case in cases: + # Error may occur along with other test results, to count error separately. + # The result field is unique per test case, either error or failure. + # xfails is the counter for all kinds of xfail results (include success/failure/error/skipped) + test_result_summary["tests"] += 1 + test_result_summary["failed"] += case["result"] == "failure" + test_result_summary["skipped"] += case["result"] == "skipped" + test_result_summary["errors"] += case["error"] + test_result_summary["time"] += float(case["time"]) + test_result_summary["xfails"] += \ + case["result"] == "xfail_failure" or case["result"] == \ + "xfail_error" or case["result"] == "xfail_skipped" or case["result"] == "xfail_success" + + test_result_summary = {k: str(v) for k, v in test_result_summary.items()} + total = int(test_result_summary["failed"]) + int(test_result_summary["skipped"]) \ + + int(test_result_summary["errors"]) + int(test_result_summary["xfails"]) + passed = int(test_result_summary["tests"]) - int(total) + passed = max(0, passed) + test_result_summary["passed"] = str(passed) + if case is None: + return test_result_summary + name = case['file'] + return test_result_summary + +def _parse_test_metadata(root): + properties_element = root.find(PROPERTIES_TAG) + + if not properties_element: + return {} + + test_result_metadata = {} + for prop in properties_element.iterfind(PROPERTY_TAG): + if prop.get("value"): + test_result_metadata[prop.get("name")] = prop.get("value") + + return test_result_metadata + + +def _parse_testcase_properties(root): + testcase_properties_element = root.find(TESTCASE_PROPERTIES_TAG) + + if not testcase_properties_element: + return {} + + testcase_properties = {} + for testcase_prop in testcase_properties_element.iterfind(TESTCASE_PROPERTY_TAG): + if testcase_prop.get("value"): + if testcase_prop.get("name") == "CustomMsg": + if not testcase_properties.get(testcase_prop.get("name")): + testcase_properties[testcase_prop.get("name")] = testcase_prop.get("value") + else: + testcase_properties[testcase_prop.get("name")] = testcase_prop.get("value") + ", " + \ + testcase_properties[testcase_prop.get("name")] + else: + testcase_properties[testcase_prop.get("name")] = testcase_prop.get("value") + + return testcase_properties + + +def _parse_test_cases(root): + test_case_results = defaultdict(list) + + def _parse_test_case(test_case): + result = {} + + # FIXME: This is specific to pytest, needs to be extended to support spytest. + + if test_case.get("classname") is None and test_case.get("name") is None: + return None, None + + test_class_tokens = test_case.get("classname").split(".") + feature = test_class_tokens[0] + + for attribute in REQUIRED_TESTCASE_ATTRIBUTES: + result[attribute] = test_case.get(attribute) + for attribute in REQUIRED_TESTCASE_PROPERTIES: + testcase_properties = _parse_testcase_properties(test_case) + if attribute in testcase_properties: + result[attribute] = testcase_properties[attribute] + + # NOTE: "if failure" and "if error" does not work with the ETree library. + failure = test_case.find("failure") + error = test_case.find("error") + skipped = test_case.find("skipped") + + # Any test which marked as xfail will drop out a property to the report xml file. + # Add prefix "xfail_" to tests which are marked with xfail + properties_element = test_case.find(PROPERTIES_TAG) + xfail_case = "" + if properties_element: + for prop in properties_element.iterfind(PROPERTY_TAG): + if prop.get("name") == "xfail": + xfail_case = "xfail_" + break + + # NOTE: "error" is unique in that it can occur alongside a succesful, failed, or skipped test result. + # Because of this, we track errors separately so that the error can be correlated with the stage it + # occurred. + # By looking into test results from past 300 days, error only occur with skipped test result. + # + # If there is *only* an error tag we note that as well, as this indicates that the framework + # errored out during setup or teardown. + if failure is not None: + result["result"] = "{}failure".format(xfail_case) + summary = failure.get("message", "") + elif skipped is not None: + result["result"] = "{}skipped".format(xfail_case) + summary = skipped.get("message", "") + elif error is not None: + result["result"] = "{}error".format(xfail_case) + summary = error.get("message", "") + else: + result["result"] = "{}success".format(xfail_case) + summary = "" + + result["summary"] = summary[:min(len(summary), MAXIMUM_SUMMARY_SIZE)] + result["error"] = error is not None + + return feature, result + + incomplete_test = 0 + for test_case in root.findall("testcase"): + feature, result = _parse_test_case(test_case) + if feature is None and result is None: + incomplete_test += 1 + else: + test_case_results[feature].append(result) + + if incomplete_test > 0: + print(f"# of Possible Test Cases with INCOMPLETE Data: {incomplete_test}") + + return dict(test_case_results) + + +def _update_test_metadata(current, update): + # Case 1: On the very first update, current will be empty since we haven't seen any results yet. + if not current: + return update.copy() + + # Case 2: For test cases that are 100% skipped there will be no metadata added, so we need to + # default to current. + if not update: + return current.copy() + + +def validate_junit_json_file(path): + """Validate that a JSON file is a valid test report. + + Args: + path: The path to the JSON file. + + Returns: + The validated JSON file. + + Raises: + TestResultJSONValidationError: if any of the following are true: + - The provided file doesn't exist + - The provided file is unparseable + - The provided file is missing required fields + """ + test_result_json = validate_json_file(path) + if not test_result_json: + return + _validate_json_metadata(test_result_json) + _validate_json_summary(test_result_json) + _validate_json_cases(test_result_json) + + return test_result_json + + +def _validate_json_metadata(test_result_json): + if "test_metadata" not in test_result_json: + raise TestResultJSONValidationError("test_metadata section not found in provided JSON file") + + seen_properties = [] + for prop, value in test_result_json["test_metadata"].items(): + if prop not in REQUIRED_METADATA_PROPERTIES: + continue + + if prop in seen_properties: + raise TestResultJSONValidationError( + f"duplicate metadata element: {prop} seen more than once" + ) + + if value is None: # Some fields may be empty + raise TestResultJSONValidationError( + f'invalid metadata element: no "value" field provided for {prop}' + ) + + seen_properties.append(prop) + + if set(seen_properties) < set(REQUIRED_METADATA_PROPERTIES): + raise TestResultJSONValidationError("missing metadata element(s)") + + +def _validate_json_summary(test_result_json): + if "test_summary" not in test_result_json: + raise TestResultJSONValidationError("test_summary section not found in provided JSON file") + + summary = test_result_json["test_summary"] + + for field, expected_type in REQUIRED_TESTSUITE_ATTRIBUTES: + if field not in summary: + raise TestResultJSONValidationError(f"{field} not found in test_summary section") + + try: + expected_type(summary[field]) + except Exception as e: + raise TestResultJSONValidationError( + f"invalid type for {field} in test_summary section: " + f"expected a number, received " + f'"{summary[field]}"' + ) from e + + +def _validate_json_cases(test_result_json): + if "test_cases" not in test_result_json: + raise TestResultJSONValidationError("test_cases section not found in provided JSON file") + + def _validate_test_case(test_case): + for attribute in REQUIRED_TESTCASE_ATTRIBUTES + REQUIRED_TESTCASE_JSON_FIELDS: + if attribute not in test_case: + raise TestResultJSONValidationError( + f'"{attribute}" not found in test case ' + f"\"{test_case.get('name', 'Name Not Found')}\"" + ) + for attribute in REQUIRED_TESTCASE_PROPERTIES: + if attribute not in test_case: + print("missing testcase property {} in testcase {}".format(attribute, test_case["classname"])) + + for _, feature in test_result_json["test_cases"].items(): + for test_case in feature: + _validate_test_case(test_case) + + +def pull_dir_via_sftp(host, user, password, remote_dir, local_dest, port=22, keep_remote_tar=False): + print(f"Tarring path {user}@{host}:{remote_dir} and storing to local directory: '{local_dest}'") + remote_dir = str(remote_dir) + local_dest = Path(local_dest) / host + local_dest.mkdir(parents=True, exist_ok=True) + + tarball_name = f"{remote_dir.replace('/', '_')}.tar.gz" + remote_tar = f"/tmp/{tarball_name}" + local_tar = local_dest / tarball_name + tar_cmd = f"set -euo pipefail; tar -czf {shlex.quote(remote_tar)} {remote_dir}" + + if local_tar.exists() and local_tar.is_file(): + msg = f"Tarball '{tarball_name}' already exists in local directory '{local_dest}'! Exit." + #raise ValueError(msg) + print(msg) + return + + """ + relative_path = Path(remote_dir.lstrip('/')) + possible_path = local_dest / relative_path + + if possible_path.exists(): + print(f"{possible_path} already exists. Using previous run directory data Skipping.") + return possible_path + """ + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=host, username=user, password=password, port=port) + + # Tar the directory on the remote host + print(f"tar cmd: {tar_cmd}") + _, stdout, stderr = ssh.exec_command(tar_cmd) + rc = stdout.channel.recv_exit_status() + if rc != 0: + msg = stderr.read().decode() + ssh.close() + raise RuntimeError(f"Remote tar failed (rc={rc}): {msg}") + + # Download the tarball via SFTP + sftp = ssh.open_sftp() + try: + sftp.get(remote_tar, str(local_tar)) + finally: + sftp.close() + print(f"From {host}, Downloaded {remote_tar} to local: '{local_tar}'") + + # Optionally remove the tarball on the remote + if not keep_remote_tar: + ssh.exec_command(f"rm -f {shlex.quote(remote_tar)}") + ssh.close() + + # Extract locally + with tarfile.open(local_tar, mode="r:gz") as tf: + tf.extractall(path=local_dest) + + # Clean up local tar + try: + os.remove(str(local_tar)) + except OSError: + raise Exception("Unable to clean up local tar file") + + relative_path = Path(remote_dir.lstrip('/')) + final_path = local_dest / relative_path + print(f"Destination of directory now! {final_path}") + return final_path + +def _run_script(): + parser = argparse.ArgumentParser( + description="Upload SONiC Mgmt Run Logs to Dashboard/DB.", + formatter_class=argparse.RawTextHelpFormatter, + epilog=""" + Examples: + python3 sonic_mgmt_upload_dashboard.py tests/files/directory/ -d --curr_server xxxx --sanity_type xxxxxx --image_id xxxxx --allure https://.... --desc 'ava' + """, + ) + parser.add_argument("file_name", metavar="file", type=str, help="A file to validate/parse.") + parser.add_argument( + "--directory", "-d", action="store_true", help="Provide a directory instead of a single file.", required=True + ) + parser.add_argument( + "--curr_server", type=str, help="Provide the current server of the result run directory.", required=True + ) + parser.add_argument( + "--sanity_type", type=str, help="Please provide the sanity_type", required=True + ) + parser.add_argument( + "--image_id", type=int, help="Please provide the Image ID.", required=True + ) + parser.add_argument( + "--allure", type=str, help="For Manual runs, we need this argument to be provided", required=True + ) + parser.add_argument( + "--desc", type=str, help="Provide a description for the run.", required=False + ) + parser.add_argument( + "--strict", + "-s", + action="store_true", + help="Fail validation checks if ANY file in a given directory is not parseable." + ) + parser.add_argument( + "--validate-only", action="store_true", help="Validate without parsing the file.", + ) + parser.add_argument( + "--run_id", type=int, help="Please provide the Build ID of the run", required=False + ) + parser.add_argument( + "--project", type=str, help="Please provide the NPU ID of the run", required=False, default=None + ) + parser.add_argument( + "--dev", action="store_true", help='Run in dev mode. Data written to dev dir', + ) + + args = parser.parse_args() + + if JENKINS_JOB_BASE_NAME == RING_4_JOB_BASE_NAME and args.run_id is None: # NEED TO ADD AUTOMATED RUN INFO!! + raise Exception("Need Build ID for this Job!") + + host = args.curr_server + + with open(SERVER_CREDS_MAP) as server_creds: + SERVER_CREDS_MAP_DICT = json.load(server_creds) + + if host not in SERVER_CREDS_MAP_DICT: + raise Exception("Do not have information for this particular host in mapping!") + + user = SERVER_CREDS_MAP_DICT[host]["user"] + password = SERVER_CREDS_MAP_DICT[host]["password"] + + local_dest = "/var/www/html/logs/sonic_mgmt/" + + file_name = pull_dir_via_sftp(host, user, password, args.file_name, local_dest) + log_file = str(file_name) + + prefix_to_remove = '/var/www/html' + regex_pattern = '^' + re.escape(prefix_to_remove) + + log_link = re.sub(regex_pattern, '', log_file) + + if NODE_NAME not in SERVER_CREDS_MAP_DICT: + raise Exception(f"Do not have information for node {NODE_NAME} in mapping!") + + node_host = SERVER_CREDS_MAP_DICT[NODE_NAME]["host"] + + log_link = "http://" + node_host + log_link + "/" + + try: + if args.directory: + roots = validate_junit_xml_archive(file_name, args.strict) + except JUnitXMLValidationError as e: + print(f"XML validation failed: {e}") + sys.exit(1) + except Exception as e: + print(f"Unexpected error occured during validation: {e}") + sys.exit(2) + + metadata = None # Get build info + for root in roots: + root = _validate_junit_xml(root) + + if root.tag == TESTSUITES_TAG: + root = root.find(TESTSUITE_TAG) + + metadata = _update_test_metadata(metadata, _parse_test_metadata(root)) + if metadata != {}: + break + + image_id = args.image_id + + db = PostgresDBConnectionSonicSol(use_backup=False) + result = db.find_one("pipeline2_build", key_data={"build_id": image_id}, column_list=["stream", "sonic_image_link"]) + + if result == None or "https:" in result[0]: + raise Exception("This image ID does not exist") + else: + platform_name, project = get_platform_name_npu(metadata["platform"]) + + if args.project: + if type(project) == str and project != args.project: + raise Exception(f"Gave wrong NPU ID for platform: {platform_name}") + elif type(project) == list and args.project not in project: + raise Exception(f"Gave wrong NPU ID for platform: {platform_name}") + else: + project = args.project + + if type(project) == list and args.project == None: + project = "G200" + + # See if previous images are even possible + image_record = db.get_images(result[0], project, metadata["platform"], image_id) + + # Get closest previous image + lt_image = 0 + if len(image_record) > 0: + less_than_image = db.get_closest_image_id(result[0], project, metadata["platform"], image_id) + if less_than_image == None: + raise Exception(f"Was not able to find an image id less than {image_id}!!") + else: + lt_image = less_than_image[0][0] + + if lt_image == 0: + lt_image = None + + # Get closest next image (IF POSSIBLE) + gt_image = 0 + great_than_image = db.get_closest_image_id(result[0], project, metadata["platform"], image_id, than_type="greater") + if len(great_than_image) > 0: + gt_image = great_than_image[0][0] + + if gt_image == 0: + gt_image = None + + db.close_connection() + + sql = """ + INSERT INTO test_case + ( + parent_sanity_id, + parent_job_base_name, + start_time, + end_time, + state, + test_category, + test_case_name, + test_case_full_name, + test_tag, + platform, + topology, + pipeline_type, + sanity_type, + stream, + pr_repo_name, + pr_id, + pr_link, + report_link, + run_hw, + image_id, + comments, + sku, + test_script_name, + test_script_full_name + ) + VALUES %s + """ + build_id = args.run_id + + parse_test_result(roots, build_id, log_link, metadata, args.sanity_type, image_id, lt_image, result, platform_name, project, sql, gt_image, args.allure, args.dev) + + +if __name__ == "__main__": + _run_script() diff --git a/infra/demyst/README.md b/infra/demyst/README.md new file mode 100644 index 00000000000..45db13d681f --- /dev/null +++ b/infra/demyst/README.md @@ -0,0 +1,127 @@ +# Demyst Notification Module - Design Document + +## Overview + +Sends test run information to the Demyst server for automated AI-based test failure analysis. Called after ring4 test completion from `do_full_run.py`. + +## Module Structure + +``` +infra/demyst/ +├── notify_demyst.py # Main orchestration - validates inputs, builds payload, sends to server +└── utils.py # Reusable utilities - validation, SSH, URL checks, HTTP communication +``` + +## notify_demyst.py + +**Purpose**: Main entry point that orchestrates the notification workflow. + +**Function**: `notify_demyst(testbed, build_id, jenkins_build_id, stream, allure_report_url, syslogs_url, testbed_info_dict, container_name, pipeline_type) -> Tuple[bool, Optional[str]]` + +**Flow**: +1. Receives `pipeline_type` as parameter (caller reads from environment) +2. Validates it's a ring4 pipeline +3. Validates required input fields (jenkins_build_id, allure_report_url, syslogs_url) +4. Checks syslogs URL exists +5. Validates testbed configuration (topology, UCS credentials) +6. Fetches sonic_test commit from UCS container via SSH +7. Builds payload with all required fields +8. Sends POST request to demyst server +9. Returns success status and results URL + +**Configuration**: +- `DEMYST_SERVER_URL`: `https://demyst.cisco.com:10003/api/v1/analysis/offline` + +**Return Values**: +- `(True, url)` - Successfully sent, demyst URL returned +- `(True, None)` - Skipped (not ring4 pipeline) +- `(False, None)` - Validation failed or network/server error occurred + +## utils.py + +**Purpose**: Reusable utility functions organized by category. + +### Validation Functions + +**`is_ring4_pipeline(pipeline_type: str) -> bool`** +- Checks if pipeline type equals "ring4" (case-insensitive) + +**`validate_demyst_inputs(jenkins_build_id, allure_report_url, syslogs_url) -> bool`** +- Validates required input fields are present +- Logs missing fields at INFO level +- Returns False if any field is missing + +**`validate_testbed_config(testbed_info_dict, testbed_name) -> dict | None`** +- Validates testbed configuration by checking hw_cfg.json (required fields: topology, ucs_host, ucs_username, ucs_password) +- Returns dict with validated fields if valid, None otherwise +- Logs specific missing fields for debugging + +### SSH Functions + +**`run_ssh_cmd(client, cmd) -> tuple[str, str, int]`** +- Executes SSH command and returns (stdout, stderr, return_code) + +**`get_sonic_test_commit(ucs_host, ucs_username, ucs_password, container_name) -> str`** +- Connects to UCS server via SSH +- Inspects sonic-mgmt container to find sonic-test mount path +- Runs `git rev-parse HEAD` to get commit hash +- Returns commit hash or empty string if failed + +### URL Functions + +**`get_syslogs_url(base_url) -> str | None`** +- Appends `sanity_logs.tar.gz` to base URL +- Makes HEAD request to verify file exists +- Returns full URL if found, None otherwise +- Suppresses SSL warnings for internal servers + +### Server Communication + +**`send_to_demyst(payload, server_url) -> tuple[bool, str | None]`** +- Sends POST request to demyst server with JSON payload +- Tries with system proxy first, falls back to no proxy +- Handles server responses: + - 200/202: Success, returns (True, results_url) + - 400 with status="not_supported": Skipped by server, returns (True, None) + - Other errors: Returns (False, None) +- Suppresses SSL warnings for internal servers + +## Payload Structure + +The client builds and sends this JSON payload to the demyst server: + +```json +{ + "build_id": "12345", + "submitter_cec_id": "cicd_t1-m3-4-cmono", + "run_id": "t1-m3-4-cmono_67890", + "sonic_test_commit_id": "abc123...", + "log_source": "allure_url", + "allure_report_url": "https://allure.cisco.com/.../allure-report/", + "syslogs_url": "https://logs.cisco.com/.../sanity_logs.tar.gz", + "testbed": "t1-m3-4-cmono", + "stream": "cisco.202511.1.signed", + "topo_type": "t1", + "run_type": "hardware", + "sonic_test_repo_url": "sonic-test", + "require_approval": false +} +``` + +### Field Descriptions + +| Field | Value | Description | +|-------|-------|-------------| +| `build_id` | From parameter | Sonic buildimage build ID | +| `submitter_cec_id` | `cicd_{testbed}` | Identifies CICD submission | +| `run_id` | `{testbed}_{jenkins_build_id}` | Unique identifier for this run | +| `sonic_test_commit_id` | From UCS SSH | Git commit hash from sonic-test repo | +| `log_source` | `"allure_url"` | Indicates logs are from Allure URL | +| `allure_report_url` | From parameter | URL to Allure report | +| `syslogs_url` | Validated URL | Full path to sanity_logs.tar.gz | +| `testbed` | From parameter | Testbed name (server resolves to platform) | +| `stream` | From parameter | Stream name (server validates against allowlist) | +| `topo_type` | From testbed_info_dict | Topology type (t0, t1, etc.) | +| `run_type` | `"hardware"` | Always hardware for ring4 | +| `sonic_test_repo_url` | `"sonic-test"` | Repo identifier | +| `require_approval` | `false` | Auto-approved for CICD | diff --git a/infra/demyst/notify_demyst.py b/infra/demyst/notify_demyst.py new file mode 100644 index 00000000000..0eaccfb0997 --- /dev/null +++ b/infra/demyst/notify_demyst.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +""" +Notify demyst server with run information after ring4 test completion. +Called from do_full_run.py collect_results() function. +""" +import os +import sys +import logging +from typing import Tuple, Optional + +# Add demyst directory to path for utils import +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from demyst.utils import ( + is_ring4_pipeline, + validate_demyst_inputs, + validate_testbed_config, + get_sonic_test_commit, + get_syslogs_url, + send_to_demyst +) + +DEMYST_SERVER_URL = "https://demyst.cisco.com:10003/api/v1/analysis/offline" + +log = logging.getLogger("HW_SANITY_LOGS.NOTIFY_DEMYST") + + +def notify_demyst( + testbed: str, + build_id: str, + jenkins_build_id: str, + stream: str, + allure_report_url: str, + syslogs_url: str, + testbed_info_dict: dict, + container_name: str, + pipeline_type: str +) -> Tuple[bool, Optional[str]]: + """ + Send notification to demyst server. + + Args: + testbed: Testbed name (e.g., t1-m3-4-cmono) + build_id: Sonic buildimage build ID (p2build_job_id) + jenkins_build_id: Jenkins job build ID + stream: Stream name (e.g., cisco.202511.signed) + allure_report_url: URL to allure report + syslogs_url: Base URL for syslogs (sanity_logs.tar.gz will be appended) + testbed_info_dict: Testbed info dictionary from hw_cfg.json + container_name: sonic-mgmt container name + pipeline_type: Pipeline type (e.g., 'ring4') + + Returns: + tuple: (success: bool, results_url: str or None) + - success=True, results_url=URL: Successfully sent, demyst URL returned + - success=True, results_url=None: Skipped (not ring4 pipeline) + - success=False, results_url=None: Validation failed or error occurred + """ + log.info(f"Demyst notification: testbed={testbed}, stream={stream}, build_id={build_id}, jenkins_build_id={jenkins_build_id}") + + # Check if ring4 pipeline + if not is_ring4_pipeline(pipeline_type): + log.info(f"Skipping - pipeline type is '{pipeline_type}', not 'ring4'") + return True, None + + # Validate required fields + if not validate_demyst_inputs(jenkins_build_id, allure_report_url, syslogs_url): + log.error("Validation failed: missing required fields") + return False, None + + full_syslogs_url = get_syslogs_url(syslogs_url) + if not full_syslogs_url: + log.error("Validation failed: syslogs not found") + return False, None + + # Validate testbed configuration + testbed_config = validate_testbed_config(testbed_info_dict, testbed) + if not testbed_config: + log.error("Validation failed: invalid testbed configuration") + return False, None + + # Get sonic_test commit from UCS + sonic_test_commit = get_sonic_test_commit( + testbed_config["ucs_host"], + testbed_config["ucs_username"], + testbed_config["ucs_password"], + container_name + ) + + # Build and send payload + return send_to_demyst({ + "build_id": build_id, + "submitter_cec_id": f"cicd_{testbed}", + "run_id": f"{testbed}_{jenkins_build_id}", + "sonic_test_commit_id": sonic_test_commit, + "log_source": "allure_url", + "allure_report_url": allure_report_url, + "syslogs_url": full_syslogs_url, + "testbed": testbed, + "stream": stream, + "topo_type": testbed_config["topology"], + "run_type": "hardware", + "sonic_test_repo_url": "sonic-test", + "require_approval": False, + }, DEMYST_SERVER_URL) diff --git a/infra/demyst/utils.py b/infra/demyst/utils.py new file mode 100644 index 00000000000..e51d975be86 --- /dev/null +++ b/infra/demyst/utils.py @@ -0,0 +1,244 @@ +#!/usr/bin/env python3 +""" +Utility functions for demyst notification. + +Includes validation, SSH operations, URL checking, and server communication. +Stream and testbed validation is now handled by demyst server. +""" +import os +import json +import logging +import paramiko +import requests +import urllib3 + +# Disable SSL warnings for internal servers with self-signed certificates +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + +log = logging.getLogger("HW_SANITY_LOGS.NOTIFY_DEMYST") + + +# ============================================================================= +# Validation Utilities +# ============================================================================= + +def is_ring4_pipeline(pipeline_type): + """Check if pipeline type is ring4. + + Args: + pipeline_type: Pipeline type string from environment + + Returns: + bool: True if ring4 (case-insensitive), False otherwise + """ + return pipeline_type.lower() == "ring4" + + +def validate_demyst_inputs(run_id, allure_report_url, syslogs_url): + """Validate required fields for demyst notification. + + Args: + run_id: Jenkins job build ID + allure_report_url: URL to allure report + syslogs_url: Base URL for syslogs + + Returns: + bool: True if all fields are present, False otherwise + """ + missing = [] + if not run_id: + missing.append("run_id") + if not allure_report_url: + missing.append("allure_report_url") + if not syslogs_url: + missing.append("syslogs_url") + + if missing: + log.info(f"Missing required fields: {', '.join(missing)}") + return False + + return True + + +def validate_testbed_config(testbed_info_dict, testbed_name): + """Validate testbed configuration has required fields. + + Args: + testbed_info_dict: Testbed configuration dictionary from hw_cfg.json + testbed_name: Testbed name for logging + + Returns: + dict | None: Dictionary with topology and UCS credentials if valid, None otherwise + Returns: {"topology": str, "ucs_host": str, "ucs_username": str, "ucs_password": str} + """ + topology = testbed_info_dict.get("topology", "") + ucs_host = testbed_info_dict.get("ucs_host", "") + ucs_username = testbed_info_dict.get("ucs_username", "") + ucs_password = testbed_info_dict.get("ucs_password", "") + + if not topology: + log.info(f"Missing topology in testbed config for {testbed_name}") + return None + + if not all([ucs_host, ucs_username, ucs_password]): + log.info(f"Missing UCS credentials in testbed config for {testbed_name}") + return None + + return { + "topology": topology, + "ucs_host": ucs_host, + "ucs_username": ucs_username, + "ucs_password": ucs_password + } + + +# ============================================================================= +# SSH Utilities +# ============================================================================= + +def run_ssh_cmd(client, cmd): + """Run command over SSH and return (stdout, stderr, return_code).""" + stdin, stdout, stderr = client.exec_command(cmd) + rc = stdout.channel.recv_exit_status() + return stdout.read().decode('utf-8'), stderr.read().decode('utf-8'), rc + + +def get_sonic_test_commit(ucs_host, ucs_username, ucs_password, container_name): + """Get sonic-test repo commit ID from the UCS container. + + Args: + ucs_host: UCS server hostname/IP + ucs_username: SSH username for UCS + ucs_password: SSH password for UCS + container_name: sonic-mgmt container name + + Returns: + str: Commit hash or empty string if failed + """ + try: + # AutoAddPolicy for internal UCS infrastructure (consistent with sonic-test pattern) + with paramiko.SSHClient() as client: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname=ucs_host, username=ucs_username, password=ucs_password) + + # Get sonic-test mount path from container + cmd = f"docker inspect {container_name} --format '{{{{range .Mounts}}}}{{{{.Source}}}} {{{{end}}}}' | tr ' ' '\\n' | grep sonic-test | head -1" + out, _, rc = run_ssh_cmd(client, cmd) + + if rc == 0 and out.strip(): + sonic_test_path = out.strip().split('\n')[0] + sonic_test_dir = os.path.dirname(sonic_test_path) + git_cmd = f"cd {sonic_test_dir} && git rev-parse HEAD" + commit_out, _, rc_git = run_ssh_cmd(client, git_cmd) + if rc_git == 0 and commit_out.strip(): + commit = commit_out.strip() + log.debug(f"sonic_test commit: {commit}") + return commit + except Exception as e: + log.debug(f"Could not get sonic_test commit: {e}") + + return "" + + +# ============================================================================= +# URL Utilities +# ============================================================================= + +def get_syslogs_url(base_url): + """Check if sanity_logs.tar.gz exists at the URL and return full URL. + + Args: + base_url: Base URL where syslogs should be located + + Returns: + str | None: Full URL to sanity_logs.tar.gz or None if not found + """ + if not base_url: + return None + + if base_url.endswith('/'): + full_url = base_url + "sanity_logs.tar.gz" + else: + full_url = base_url + "/sanity_logs.tar.gz" + + try: + # verify=False for internal log server with self-signed cert + response = requests.head(full_url, timeout=10, verify=False) + if response.status_code == 200: + log.debug(f"Found syslogs: {full_url}") + return full_url + log.info(f"Syslogs not found, skipping demyst notification") + return None + except Exception as e: + log.debug(f"Could not check syslogs URL: {e}") + return None + + +# ============================================================================= +# Server Communication +# ============================================================================= + +def send_to_demyst(payload, server_url): + """Send payload to demyst server and return (success, results_url). + + Args: + payload: Dictionary containing request data + server_url: Demyst server URL endpoint + + Returns: + tuple: (success: bool, results_url: str | None) + - (True, URL): Successfully sent, demyst URL returned + - (True, None): Skipped by server (not supported) or no URL in response + - (False, None): Error occurred + """ + log.debug(f"Sending to {server_url}") + log.debug(f"Payload: {json.dumps(payload, indent=2)}") + + headers = {"Content-Type": "application/json"} + response = None + + # Try with system proxy first (verify=False for self-signed cert) + try: + response = requests.post(server_url, json=payload, headers=headers, timeout=30, verify=False) + if response.status_code in [200, 202]: + log.debug(f"Request sent: {response.status_code}") + except Exception as e: + log.debug(f"System proxy failed, trying without proxy: {e}") + response = None + + # Fallback: no proxy + if response is None or response.status_code not in [200, 202]: + try: + response = requests.post( + server_url, json=payload, headers=headers, timeout=30, + proxies={"http": None, "https": None}, verify=False + ) + except Exception as e: + log.error(f"Failed to send to demyst: {e}") + return False, None + + if response.status_code in [200, 202]: + try: + resp_data = response.json() + results_url = resp_data.get("results_url") + request_id = resp_data.get("request_id") + log.info(f"Queued: request_id={request_id}") + return True, results_url + except Exception as e: + log.debug(f"Could not parse response: {e}") + return True, None + + # Handle allowlist rejection (not_supported) + elif response.status_code == 400: + try: + resp_data = response.json() + if resp_data.get("status") == "not_supported": + log.info(f"Skipped: {resp_data.get('error')}") + return True, None + except: + pass + log.error(f"Bad request: {response.text}") + return False, None + + log.error(f"Server error {response.status_code}: {response.text}") + return False, None diff --git a/infra/do_full_run.py b/infra/do_full_run.py new file mode 100644 index 00000000000..14b0d639666 --- /dev/null +++ b/infra/do_full_run.py @@ -0,0 +1,668 @@ +#!/usr/bin/python3 +import sys +import time +import argparse +from run_scripts_remote import FAILURE_RESONS, SUCCESS_STATUS, FAILURE_STATUS +from run_scripts import get_testcases, get_test_tag_map +import yaml +import os +import json +import paramiko +from datetime import timedelta +import re +import shlex +from hw_setup_utils import log, extractFromImageName, getTestbedInfoDict, getDockerExecCommand, \ + prep_special_run_commands, \ + run_scripts, sshUtil, allure_directory, allure_results_dir_for_build_id, allure_run_dir_for_build_id, UNSET_PROXY, runIndividualTests, \ + getLatestValidAllureReport, fetch_allure_report_summary, \ + checkForExistingRuns, SSH_PORT, collect_spytest_results, upload_result, ALLURE_CONFIG_FILE_NAME, \ + getSonicMgmtContainterName, getTechSupport, \ + nested_ssh_connection, DUT_USERNAME, DUT_PASSWORD, WORKSPACE, SANITY_LOGS_PATH, getLogsPath +from utils import _run_cmd_in_ssh, _run_cmd_in_ssh_container, upload_log_files_to_log_server, create_sanity_log_tarball, \ + SANITY_LOG_TARBALL, print_folder_contents +from do_hw_setup import (precheck, remove_topo, add_topo, deploy_mg, extra_configuration_steps, cisco_system_health, + reboot_all_DUTs) +from demyst.notify_demyst import notify_demyst + +MAX_AUTORECOVERY_AND_RERUN_COUNT = 5 +REGRESSION_FAIL_MARKER = "Skip rest of the scripts if there is any" # run_tests.sh produces this + +def should_notify_demyst(enable_demyst, env_type): + """Return True when demyst notification should run.""" + log.debug(enable_demyst) + log.debug(not enable_demyst) + if not enable_demyst: + log.info("Skipping demyst notification: ENABLE_DEMYST is false") + return False + if env_type == "DEV": + log.info("Skipping demyst notification: ENABLE_DEMYST is true but dev pipeline not allowed (ENV_TYPE=DEV)") + return False + return True + +# Parse config file +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +def cleanup_logs_on_dut(p1, prompt): + """ + Removes old logs and compressed files from /var/log and /var/log/swss. + """ + commands = [ + "sudo rm -rf /var/log/faulthandler.log", + "sudo rm -rf /var/log/*.gz", + "sudo rm -rf /var/log/swss/*.gz" + ] + + for cmd in commands: + try: + p1.sendline(cmd) + p1.expect(prompt, timeout=60) + except Exception as e: + log.error(f"Error executing {cmd}: {e}") + +def parse_show_boot(output): + """ + Parse the output of 'show boot' to extract current, next, and available images. + """ + current_image = None + next_image = None + available_images = [] + + capture_available = False + + for line in output.splitlines(): + line = line.strip() + if not line or line.startswith('$') or line.startswith('show boot'): + continue + + if line.startswith("Current:"): + current_image = line.replace("Current:", "").strip() + elif line.startswith("Next:"): + next_image = line.replace("Next:", "").strip() + elif line.startswith("Available:"): + capture_available = True + elif capture_available and line: + available_images.append(line) + + return current_image, next_image, available_images + +def cleanup_old_images_on_dut(p1, prompt): + """ + Identifies and removes unused SONiC images, preserving the current and next boot images. + """ + # Get current and next boot images + try: + p1.sendline("show boot") + p1.expect(prompt, timeout=60) + output = p1.before + + current_image, next_image, available_images = parse_show_boot(output) + if not current_image or not next_image: + log.error("Failed to retrieve boot images. Skipping cleanup.") + return + + log.info(f"Current Image: {current_image}") + log.info(f"Next Image: {next_image}") + log.info(f"Available Images: {available_images}") + + # Identify images to remove (preserve current only) + images_to_remove = [img for img in available_images if img != current_image] + log.info(f"Images to be removed: {images_to_remove}") + + for image in images_to_remove: + remove_cmd = f"sudo sonic-installer remove -y {image}" + try: + log.info(f"Executing: {remove_cmd}") + p1.sendline(remove_cmd) + p1.expect(prompt, timeout=300) + except Exception as e: + log.error(f"Error removing {image}: {e}") + except Exception as e: + log.error(f"Error during image cleanup: {e}") + +def run_test(args): + log.info("run_test") + log.debug("run_tests args:\n{args}") + full_link = args.full_link + [image, image_id, stream] = extractFromImageName(full_link) + testbed = args.testbed + test_suites_arg = args.test_suites + build_id = args.build_id + skip_folders = args.skip_folders + skip_tests = args.skip_tests + testfile = args.testfile + test_tag = args.test_tag + topology = args.topology + platform = args.platform + if skip_folders=="null" or skip_folders==None: + skip_folders = "" + if skip_tests=="null" or skip_tests==None: + skip_tests = "" + rerun = args.rerun + + # Allure raw results root is scoped by sonic image_id (not Jenkins build_id). Keep in sync + # with hw_setup_utils.generate_allure_report_and_copy_to_remote (same allure_results_dir_for_build_id arg). + try: + build_scoped_allure = allure_results_dir_for_build_id(allure_directory, image_id) + except ValueError as e: + log.error(str(e)) + return -1 + # Reruns append under this tree; a fresh non-rerun clears this path. Never write to bare local-report-dir. + testbed_info_dict = getTestbedInfoDict(testbed) + + # temporary fix to running spytest 2 extra times because this + # gets explicitly called for test_pretest.py and test_posttest.py + # https://miggbo.atlassian.net/browse/MIGSOFTWAR-34018?focusedCommentId=7547659 + if "spytest" in testbed_info_dict.get("run_type_check"): # this is a spytest tb = pre/posttest are not relevant + if test_suites_arg == 'test_pretest.py' or test_suites_arg == 'test_posttest.py': + log.warning("`run_test` called with test_pretest.py or test_posttest.py on a b2b/spytest testbed.\n" + "This call will be skipped.") + return 0 + + local_ucs = testbed_info_dict['ucs_host_name'] + local_log_dir = os.path.join(WORKSPACE, 'sanity/infra/', SANITY_LOGS_PATH) + local_log_parent_dir = os.path.join(WORKSPACE, 'sanity/infra/') + os.makedirs(local_log_dir, exist_ok=True) + + ucs_ssh = testbed_info_dict["ucs_username"]+"@"+testbed_info_dict['ucs_host_name'] + container_name = getSonicMgmtContainterName(stream, testbed) + docker_exec_cmd = getDockerExecCommand(stream, testbed) + + if testfile: + testfile_full_path = os.path.dirname(os.path.abspath(__file__)) + testfile_full_path = os.path.join(testfile_full_path, testfile) + + exit_code = None + docker_prompt = testbed_info_dict['docker_prompt'] + log.info("start running tests") + # p2 = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], None) + # p2.expect(local_ucs) + # for ssh in testbed_info_dict['dut_ssh']: + # [p1, prompt] = sshDUTUtil(p2, ssh) + # p1.expect(prompt) + # log.info("Starting pre-run cleanup on DUT") + # cleanup_logs_on_dut(p1, prompt) + # cleanup_old_images_on_dut(p1, prompt) + # log.info("Pre-run cleanup completed on DUT") + # p1.close() + # p2.close() + + if 'special_run_commands' in testbed_info_dict or 'special_imfs_run_commands' in testbed_info_dict: + testbed_info_dict = getTestbedInfoDict(testbed) + if testfile and test_tag: + test_suites_array = get_testcases(testfile_full_path, test_tag, topo_type=topology, additional_tests='', device_type=platform, hw_or_sim='hw') + elif test_suites_arg == 'All' and "tests_list" in testbed_info_dict: + test_suites_array = testbed_info_dict["tests_list"] + elif test_suites_arg: + test_suites_array = [test_suites_arg] + else: + log.error(f"No tests fund! TEST_SUITES: {test_suites_arg}, TESTFILE: {testfile}, TEST_TAG: {test_tag}") + return -1 + + log.debug(test_suites_array) + for test_suites in test_suites_array: + log.debug(f' Running tests for {test_suites}') + prompt = docker_prompt + if "image_mgmt_test.py" in test_suites and 'special_imfs_run_commands' in testbed_info_dict: + run_commands = testbed_info_dict['special_imfs_run_commands'] + docker = 'False' + prompt = testbed_info_dict['ucs_ssh_prompt'] + elif "image_mgmt_test.py" in test_suites and 'special_imfs_run_commands' not in testbed_info_dict: + log.error("IMFS run commands not available") + return -1 + else: + run_commands = testbed_info_dict['special_run_commands'] + docker = 'True' + cmd_list = prep_special_run_commands(testbed, test_suites_arg, test_suites, image_id, build_id, docker_exec_cmd, run_commands, docker) + log.debug(cmd_list) + update_flag = ('git_update_flag' in testbed_info_dict and testbed_info_dict['git_update_flag']=="true") + rc = run_scripts(testbed_info_dict['ucs_host'], testbed_info_dict['ucs_username'], testbed_info_dict['ucs_password'], cmd_list, prompt, SSH_PORT, update_flag) + if rc!=0: + return -1 + log.debug("time to close all threads after running scripts") + time.sleep(100) + return exit_code + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + stdout, stderr, status_code = _run_cmd_in_ssh(client, "docker ps -a") + log.debug(f"'docker ps -a' output:\n{stdout}") + log.debug(rerun) + # Fresh run (non-rerun): clear this image_id's Allure results root only; other image_ids untouched. + if rerun!="true": + stdout, stderr, status_code = _run_cmd_in_ssh_container( + client, container_name, f"rm -rf {shlex.quote(build_scoped_allure)}" + ) + else: + log.info("Rerun mode: appending Allure results under %s", build_scoped_allure) + + try: + effective_allure_dir = allure_run_dir_for_build_id(build_scoped_allure, build_id) + except ValueError as e: + log.error(str(e)) + client.close() + return -1 + _run_cmd_in_ssh_container( + client, + container_name, + f"mkdir -p {shlex.quote(effective_allure_dir)}", + ) + log.info("Using Allure run directory: %s", effective_allure_dir) + + dut_run_log_folder = f'{image_id}_jenkins_logs_{build_id}_{testbed}' + dut_log_dir = f'/run_logs/{dut_run_log_folder}' + # Create skip test/folders string, add in the pre-defined skips from testbed config + skip_tests_final = testbed_info_dict['skip_tests']+" "+skip_tests.replace(",", " ") if 'skip_tests' in testbed_info_dict else skip_tests.replace(",", " ") + skip_folders_final = testbed_info_dict['skip_folder']+" "+skip_folders.replace(",", " ") if 'skip_folder' in testbed_info_dict else skip_folders.replace(",", " ") + if testfile and test_tag: + sftp = client.open_sftp() + remote_file_path = f"/home/sonic/ring3-time-{build_id}.txt" + test_suites_array = get_testcases(testfile_full_path, test_tag, topo_type=topology, additional_tests='', device_type=platform, hw_or_sim='hw') + with sftp.file(remote_file_path, mode='a') as remote_file: + for test_suite in test_suites_array: + exit_code, _ = runIndividualTests(image_id, build_id, testbed, dut_log_dir, client, container_name, test_suite, test_suite, "", "", local_log_dir, testbed_info_dict, allure_results_dir=effective_allure_dir, remote_file=remote_file) + if exit_code!=0: + time.sleep(30) + client.close() + return exit_code + test_tag_dict = get_test_tag_map(testfile_full_path, test_tag, topology=topology, device_type=platform, hw_or_sim='hw') + log.debug(f"Output of the test_tag_dict - {test_tag_dict}") + time_tag_dict = {} + # Output contents of the file + log.debug(f"Output contents of the file - {remote_file_path}") + try: + with sftp.open(remote_file_path, mode='r') as remote_file: + for line in remote_file: + content = line.strip() + log.debug(f"Output of the line - {content}") + if 'Time elapsed' in content: + parts = content.split('-') + log.debug(parts) + if len(parts) == 3: + testcase = parts[1].strip() + time_taken = parts[2].strip() + test_tag = "" + for tag, testcase_array in test_tag_dict.items(): + if testcase in testcase_array[0]: + test_tag = tag + break + time_tag_dict.setdefault(test_tag, 0) + time_taken_parsed = parse_result_time(time_taken) + time_tag_dict[test_tag] += int(time_taken_parsed.total_seconds() // 60) + log.debug(f"Output of the time taken for test_tag - {test_tag}, time taken - {time_tag_dict[test_tag]} minutes") + except IOError as e: + log.error(f"Error opening or reading file: {e}") + log.debug(f"Output of the time taken per test_tag - {time_tag_dict} minutes") + sftp.close() + + elif test_suites_arg and "," in test_suites_arg: # multiple test suites passed as parameters + test_suites_array = test_suites_arg.split(",") # ['bgp', 'monit'] + for test_suite in test_suites_array: + exit_code, _ = runIndividualTests(image_id, build_id, testbed, dut_log_dir, client, container_name, test_suite, test_suite, skip_folders_final, skip_tests_final, local_log_dir, testbed_info_dict, allure_results_dir=effective_allure_dir) + if exit_code!=0: + time.sleep(30) + client.close() + return exit_code + + elif test_suites_arg == 'All': + + exit_code, results = runIndividualTests(image_id, build_id, testbed, dut_log_dir, client, container_name, + test_suites_arg, test_suites_arg, skip_folders_final, skip_tests_final, + local_log_dir, testbed_info_dict, allure_results_dir=effective_allure_dir) + + log_file_contents, _, _ = _run_cmd_in_ssh_container(client, + container_name, + f"tail -n 50 /data/tests/{results.run_tests_log_file}") + + # if there's "add_topo_cmd" -> we support topo redeploy for this testbed -> autorecovery is possible + # b2b testbeds, for example, do not use/support topo redeploy from cicd, so we won't attempt to autorecover + # those testbeds in an event of regression failure + if REGRESSION_FAIL_MARKER in log_file_contents and testbed_info_dict.get("add_topo_cmd"): + + for autorecovery_and_rerun_attempt in range(1, MAX_AUTORECOVERY_AND_RERUN_COUNT + 1): + log.error(f"Regression fail marker found in test logs, resorting to testbed autorecovery. " + f"Attempt number {autorecovery_and_rerun_attempt}.") + + autorecovery_args = argparse.Namespace(testbed=testbed, + full_link=full_link, + install_mode='default', + ) + + log.info("Autorecovery: check cisco_system_health before recovery") + cisco_system_health_results = cisco_system_health(testbed) + if any([x.return_code for x in cisco_system_health_results.values()]): + log.info(f"cisco_system_health doesn't pass for all DuTs. " + f"Will execute full autorecovery sequence" + ) + log.info('Autorecovery started') + rc = precheck(autorecovery_args) + log.info(f"Autorecovery: precheck return code:{rc}; Continue.") + rc = remove_topo(autorecovery_args) + log.info(f"Autorecovery: remove-topo return code:{rc}; Continue.") + rc = add_topo(autorecovery_args) + log.info(f"Autorecovery: add-topo return code:{rc}; Continue.") + + rc = reboot_all_DUTs(testbed) + if rc: + raise Exception(f"DUT reboot unsuccessful. Autorecovery cannot continue.") + else: + log.info(f"Autorecovery: reboot_all_DUTs return code:{rc}; Continue") + + rc = deploy_mg(autorecovery_args) + log.info(f"Autorecovery: deploy-mg return code:{rc}; Continue.") + rc = extra_configuration_steps(autorecovery_args) + log.info(f"Autorecovery: extra configuration steps return code:{rc}; Continue.") + else: + log.info(f"cisco_system_health passed for all DuTs" + f"Will execute light autorecovery: deploy-mg and continue testing.") + rc = deploy_mg(autorecovery_args) + log.info(f"Autorecovery: deploy-mg return code:{rc}; Continue.") + + # expand skip list to avoid rerunning the same tests + xml_files_in_test_logs_dir_output, _, _ = _run_cmd_in_ssh_container( + client, + container_name, + # fr'find {dut_log_dir} -type f -name "*.xml" -printf "%P\n"') + f'find {dut_log_dir} -type f -name "*.xml" -printf "%T@ %P\\n" | sort -n | cut -d \' \' -f2-') + pattern = r'(^.*)_\d{4}-.*' + pattern_matches = re.findall(pattern, + xml_files_in_test_logs_dir_output, + re.MULTILINE) + pattern_matches = list(pattern_matches)[:-1] + # ^ ordered by last modified date so that when we slice [:-1] we skip all executed tests but the last + # the assumption is, test[-2] is the one that breaks the setup and test[-1] fails as a result of that + # but test[-1] is actually fine in isolation + exclusions = {"test_pretest", "test_posttest"} + filtered_pattern_matches = [m for m in pattern_matches if m not in exclusions] + py_test_files = [f"{x}.py" for x in filtered_pattern_matches] + extra_skip_tests_str = ' '.join(py_test_files) + log.info(f"extra_skip_tests_str defined: '{extra_skip_tests_str}'") + + log.info("Autorecovery: check cisco_system_health after recovery") + cisco_system_health_results = cisco_system_health(testbed) + if any([x.return_code for x in cisco_system_health_results.values()]): + log.error(f"cisco_system_health failed") + log.error(f"{cisco_system_health_results}") + else: + log.info(f"cisco_system_health passed for all DuTs") + + log.info(f'Additional run of runIndividualTests: starting...') + exit_code, results = runIndividualTests(image_id, build_id, testbed, dut_log_dir, client, + container_name, test_suites_arg, test_suites_arg, + skip_folders_final, + skip_tests_final + " " + extra_skip_tests_str, + local_log_dir, testbed_info_dict, allure_results_dir=effective_allure_dir) + log_file_contents, _, _ = _run_cmd_in_ssh_container(client, + container_name, + f"tail -n 50 /data/tests/{results.run_tests_log_file}") + still_failing = REGRESSION_FAIL_MARKER in log_file_contents + if not still_failing: + log.info("Tests completed successfully after autorecovery.") + break + else: + log.error("Regression still failing after autorecovery and subsequent test execution. " + "If retry count allows, will do another attempt.") + else: + log.info("Autorecovery not needed: either regression finished normally or " + "the testbed doesn't support add-topo.") + + elif test_suites_arg: # test_suites provided, other than "All" + exit_code, results = runIndividualTests(image_id, build_id, testbed, dut_log_dir, client, container_name, + test_suites_arg, test_suites_arg, skip_folders_final, skip_tests_final, + local_log_dir, testbed_info_dict, allure_results_dir=effective_allure_dir) + + else: + log.error(f"No tests found! TEST_SUITES: {test_suites_arg}, TESTFILE: {testfile}, TEST_TAG: {test_tag}") + return -1 + + log.debug("Timeout for 2 minutes to let the run finish") + time.sleep(120) + client.close() + + # `show techsupport` is not relevant for artificial pre- and posttest calls + if test_suites_arg not in ['test_pretest.py', 'test_posttest.py']: + for dut in testbed_info_dict['dut_ssh']: + log.debug(f"Collect show tech logs for dut: {dut}") + target_client, bastion_client = nested_ssh_connection(testbed_info_dict["ucs_host_name"], testbed_info_dict["ucs_username"], testbed_info_dict["ucs_password"], dut, DUT_USERNAME, DUT_PASSWORD, True) + getTechSupport(target_client, local_log_dir) + target_client.close() + bastion_client.close() + else: + log.debug(f"Techsupport collection skipped because test_suites_arg={test_suites_arg}.") + + # Bundle the log files into one location + os.chdir(local_log_parent_dir) + log.debug("Bundle the log files into one location") + create_sanity_log_tarball(local_log_parent_dir) + print_folder_contents(local_log_parent_dir) + return exit_code + +def parse_result_time(x): + # Already timedelta → return as-is + if isinstance(x, timedelta): + return x + + # Numeric seconds → convert to timedelta + if isinstance(x, (int, float)): + return timedelta(seconds=float(x)) + + # String format "H:MM:SS.micro" + if isinstance(x, str): + h, m, s = x.split(":") + return timedelta(hours=int(h), minutes=int(m), seconds=float(s)) + + raise TypeError(f"Unsupported type: {type(x)}") + +def collect_results(args): + enable_demyst = str(getattr(args, "enable_demyst", os.getenv("ENABLE_DEMYST", "true"))).lower() not in ("0", "false", "no", "off", "n", "f") + env_type = getattr(args, "env_type", os.getenv("ENV_TYPE", "PROD")) + full_link = args.full_link + build_id = args.build_id + testbed = args.testbed + [image, image_id, stream] = extractFromImageName(full_link) + testbed_info_dict = getTestbedInfoDict(testbed) + user = args.user + rc = 0 + + SUMMARY_REPORT_FILENAME = "results.json" + WORKSPACE = os.getenv("WORKSPACE") + test_suites_arg = os.getenv("TEST_SUITES") + results_path = os.path.join(WORKSPACE, SUMMARY_REPORT_FILENAME) + dut_run_log_folder = f'{image_id}_jenkins_logs_{build_id}_{testbed}' + logs_path = getLogsPath(stream, testbed) + log.debug(f"logs_path: {logs_path}") + + #default results json + result = { + "total" : 0, + "failed" : 0, + "passed" : 0, + "aborted" : 0, + "errored" : 0, + "skipped" : 0, + "success_rate" : 0, + "status": FAILURE_STATUS, + "ucs_server": testbed_info_dict["ucs_host_name"], + "log_path": os.path.join(logs_path, dut_run_log_folder), + } + + log.debug(f"Entered collect_results, dut_run_log_folder: {dut_run_log_folder}, results_path: {results_path}, logs_path: {logs_path}") + + if 'custom_result_url' in testbed_info_dict: + testbed_type = testbed.split("-")[-1] + image_folder = 'ring4'+'-'+image_id+'-'+build_id+'-'+testbed_type + result_url = testbed_info_dict["custom_result_url"]+image_folder+"/dashboard.html" + # target_url = extract_file_contents_url(result_url) + # target_url = "http://172.27.146.35/run_logs/cicd_runs/ring4-17467-3293/results_2024_10_25_15_49_40_summary.txt" + # result_sum = extract_result_sum(urllib.request.urlopen(target_url), True + result["report_link"] = result_url + elif 'collect_spytest_flag' in testbed_info_dict and testbed_info_dict['collect_spytest_flag']: + testbed_info_dict = getTestbedInfoDict(testbed) + if test_suites_arg == 'cisco/tortuga/image_mgmt/image_mgmt_test.py': + result["report_link"] = f'http://10.29.158.30/imfs_results/{image_id}/imfs_result.txt' + else: + test_suites_array = testbed_info_dict["tests_list"] if (test_suites_arg == 'All' and "tests_list" in testbed_info_dict) else [test_suites_arg] + for test_suite in test_suites_array: + log.debug(f"Collect results for test: {test_suite}") + rc, msg, test_start_time, result_sum = collect_spytest_results(testbed, test_suite, image_id, build_id) + if rc!=0: + print(f"error at collect_result! msg: {msg}") + + log.debug(f"Upload results for test: {test_suite}") + rc, msg, result_url, log_tarball_link = upload_result(testbed, test_start_time) + if rc != 0: + print(f"error at upload_result! msg: {msg}") + + result_sum["report_link"] = result_url + result_sum["log_tarball_link"] = log_tarball_link + result = result_sum + log.debug(f"result sum for test_suites: '{test_suite}', {result}") + else: + [allure_link, allure_link_combined] = getLatestValidAllureReport( + build_id, image_id, testbed, stream + ) + if not allure_link: + log.error("Allure link not found!") + return -1 + + published_allure_link = allure_link_combined or allure_link + log.info("Allure report (this run / primary): %s", allure_link) + log.info("Allure report (combined all run_* under image): %s", allure_link_combined) + log.info("Allure report (published): %s", published_allure_link) + + report_data = fetch_allure_report_summary(published_allure_link) + if not report_data: + log.error("Report Data not found!") + return -1 + + log.debug(f"report_data:{report_data}") + stats = report_data["statistic"] + if stats["total"] == 0: + result["report_link"] = None + result["status"] = FAILURE_STATUS + else: + if (stats["total"] - stats["skipped"]) == 0: + percent = 0 + else: + percent = 100 * (stats["passed"] / float(stats["total"]-stats["skipped"])) + result = { + "passx" : 0, + "total" : stats["total"], + "failed" : stats["failed"], + "passed" : stats["passed"], + "aborted" : stats["unknown"], + "errored" : stats["broken"], + "skipped" : stats["skipped"], + "success_rate" : round(percent, 2), + "report_link": published_allure_link, + "status": SUCCESS_STATUS if round(percent, 2) == 100.0 else FAILURE_STATUS, + "log_path": os.path.join(logs_path, dut_run_log_folder), + "ucs_server": testbed_info_dict["ucs_host_name"] + } + + if result["success_rate"] == 100.0: + result["status"] = SUCCESS_STATUS + else: + result["status"] = FAILURE_STATUS + result["failure_reason"] = FAILURE_RESONS.TEST_CASES_FAILED + rc = 2 # test cases failed, but we were able to collect results and generate report successfully + files_to_move = [SANITY_LOG_TARBALL] + log_url = upload_log_files_to_log_server(files_to_move) + log.debug(log_url) + result["log_tarball_link"] = log_url + + if should_notify_demyst(enable_demyst, env_type): + log.debug("Demyst to be triggered") + try: + # jenkins_build_id is the jenkins job id which is always unique + jenkins_build_id = os.getenv("BUILD_ID", "") + pipeline_type = os.getenv("PIPELINE_TYPE", "") + success, demyst_url = notify_demyst( + testbed=testbed, + build_id=image_id, # image_id is the p2build_job_id extracted from image name + jenkins_build_id=jenkins_build_id, + stream=stream, + allure_report_url=result.get("report_link"), + syslogs_url=log_url, + testbed_info_dict=testbed_info_dict, + container_name=getSonicMgmtContainterName(stream, testbed), + pipeline_type=pipeline_type + ) + if success and demyst_url: + result["demyst_results_url"] = demyst_url + log.info(f"Demyst results URL: {demyst_url}") + except Exception as e: + log.warning(f"Demyst notification failed: {e}") + + # Write results.json once at the end + with open(results_path, "w") as results_file: + json.dump(result, results_file, indent=2) + log.info(f"Saved results.json at: {results_path}") + + return rc + +def kill_run(args, test_string="run_tests"): + testbed = args.testbed + testbed_info_dict = getTestbedInfoDict(testbed) + local_ucs = testbed_info_dict['ucs_host_name'] + + p = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], None) + p.expect(local_ucs) + if checkForExistingRuns(p, test_string, local_ucs)>=1: + log.info("Many runs to kill!") + return -1 + log.info(f"No of lines: {len(y)}") + #sample array for y: [, , , ] + pid = y[1] + pid2 = y[2] + log.info("Pid: '{0}, Pid2: '{1}".format(pid.strip(), pid2.strip())) + p.sendline(f"kill -9 {pid}") + p.expect(local_ucs) + p.sendline(f"kill -9 {pid2}") + p.expect(local_ucs) + else: + log.info("No runs to kill!") + return + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Management full run.') + subparser = parser.add_subparsers(help = "available subcommand:") + + run_parser = subparser.add_parser("run", help = "run tests on image") + run_parser.add_argument("-f", "--full_link", help = "full link", required=True) + run_parser.add_argument("-b", "--build_id", help = "build id", required=True) + run_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + run_parser.add_argument("-s", "--test_suites", help = "test suites", default = '', nargs='?') + run_parser.add_argument("--rerun", help = "rerun", default=False) + run_parser.add_argument("--skip-folders", help = "skip folders", default = '', nargs='?') + run_parser.add_argument("--skip-tests", help = "skip tests", default = '', nargs='?') + run_parser.add_argument("--testfile", help = "test file", default = '', nargs='?') + run_parser.add_argument("--test-tag", help = "test tag", default = '', nargs='?') + run_parser.add_argument("--platform", help = "platform of the DUT", default = '', nargs='?') + run_parser.add_argument("--topology", help = "topology of the DUT", default = '', nargs='?') + run_parser.set_defaults(func=run_test) + + collect_parser = subparser.add_parser("collect-results", help = "collect data") + collect_parser.add_argument("-f", "--full_link", help = "full link", required=True) + collect_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + collect_parser.add_argument("-b", "--build_id", help = "build id", required=True) + collect_parser.add_argument("--enable-demyst", help = "enable demyst analysis", default = os.getenv("ENABLE_DEMYST", "true")) + collect_parser.add_argument("--user", help = "user who triggered the run") + collect_parser.set_defaults(func=collect_results) + + kill_parser = subparser.add_parser("kill", help = "kill runs") + kill_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + kill_parser.set_defaults(func=kill_run) + + args = parser.parse_args() + + res = args.func(args) + sys.exit(res) \ No newline at end of file diff --git a/infra/do_hw_setup.py b/infra/do_hw_setup.py new file mode 100644 index 00000000000..9af9bbf155e --- /dev/null +++ b/infra/do_hw_setup.py @@ -0,0 +1,1414 @@ +#!/usr/bin/python3 +import pexpect +import sys +import time +import argparse +import logging +import paramiko +import os +import yaml +import urllib.parse +import posixpath +import shlex +from collections import namedtuple +from hw_setup_utils import log, lower_pass_prompt, sshUtil, sshDUTUtil, extractFromImageName, getImageUCS, \ + cleanUpImageFolder, removeImageDir, checkSpace, getTestbedInfoDict, telnetConnection, telnetLoginUtil, checklldpCount, \ + login_prompt, passwd_prompt, cisco_prompt, pre_sonic_prompt, sonic_login_prompt, admin_prompt, pre_admin_prompt, first_login, onie_prompt, \ + DUT_PASSWORD, DUT_USERNAME, BIN_FILE, telnet_escape_prompt, grub_selection, KEY_DOWN, newline_prompt, KEY_UP, checkForDockers, \ + scpUtil, sonic_prompt, getDockerExecCommand, copyDockerFileToDut, getSonicMgmtContainterName, get_container_local_mount_dir, \ + default_info, getSonicMgmtFolder, MAX_RETRIES, MAX_RETRIES_TIMEOUT, ALLURE_CONFIG_FILE_NAME, checkStreamCompatibility, checkTestbedAvailability, \ + channelConnection, checkTortugaImage, CISCO_PASSWORD, CISCO_USERNAME, getBranchFromStream, nested_ssh_connection +from utils import _run_cmd_in_ssh + + +UNSET_HTTP_PROXY = "unset https_proxy http_proxy HTTPS_PROXY HTTP_PROXY" +DEFAULT_DOCKER_COUNT = 13 +DEFAULT_IMAGES_FOLDER = "IMAGES/" + +REMOVE_TOPO_TIMEOUT_SEC = 60*20 +ADD_TOPO_TIMEOUT_SEC = 60*20 +DEPLOY_MG_TIMEOUT = 60*20 + +DATA_ANSIBLE_PROMPT = r".*\:\/data\/ansible\$" + +MTU_HACK_SCRIPT_URL = "http://172.26.235.76/MISC/port_channel_mtu.yml" +MTU_HACK_TIMEOUT = 60*10 +MTU_HACK_PATTERN = \ + "for i in {{0..{}}}; do ansible-playbook -i veos -b -e current_hostname=VM0$(($i+100)) -e ansible_network_os=eos -e ansible_ssh_user=admin -e ansible_ssh_pass=123456 ./port_channel_mtu.yml -vvv ; done" + +# Parse config file +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +def precheck(args): + testbed = args.testbed + full_link = args.full_link + [image, image_id, stream] = extractFromImageName(full_link) + + # check git state + try: + testbed_info_dict = getTestbedInfoDict(testbed) + hostname = testbed_info_dict.get('ucs_host') + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=hostname, + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password']) + + container_name = getSonicMgmtContainterName(stream, testbed) + destination_path = "/data" + # log.info("determine local mount dir for container path {}:{}".format(container_name, destination_path)) + testbed_mount_dir = get_container_local_mount_dir(ssh, container_name, destination_path) + log.info("mount dir of container {}:{} on the testbed {}:{}".format(container_name, destination_path, hostname, testbed_mount_dir)) + + log.info("Getting `git status` output for sonic-mgmt") + git_status, _, _ = _run_cmd_in_ssh(ssh, f"cd {testbed_mount_dir}; git status") + log.info("Getting `git diff` output for sonic-mgmt") + git_diff, _, _ = _run_cmd_in_ssh(ssh, f"cd {testbed_mount_dir}; git diff") + log.info("Getting `git log` output for sonic-mgmt") + git_diff, _, _ = _run_cmd_in_ssh(ssh, f"cd {testbed_mount_dir}; git log --oneline | head -n 20") + except Exception as e: + log.error("Something went wrong while trying to check git state of sonic-mgmt") + log.error(e) + + if checkStreamCompatibility(testbed, stream) and checkTestbedAvailability(testbed): + log.debug("Prechecks passed for %s" % full_link) + return 0 + else: + log.error("Precheck failed") + return -1 + +def add_user(child, username, password, prompt): + try: + while True: + i = child.expect(["The user `cisco' already exists.", lower_pass_prompt, "Adding user `cisco' to group `users' ...", "Is the information correct", "Full Name", "Room Number", "Work Phone", "Home Phone", "Other"]) + log.debug(f"Selected prompt --> {i}") + if i==0: + # Delete existing user and add again + child.sendline("sudo deluser cisco") + child.expect("Done.") #reset adding user + child.sendline("sudo adduser cisco") + elif i==1: + # Expect the password prompt for the new user + child.sendline(password) + elif i==2: + log.debug("Added user `cisco' to group `users'") + child.sendline() + break + elif i==3: + child.sendline("Y") + else: + child.sendline("") # Leave blank and press Enter for any other optional field + # Print the output for debugging + log.debug(child.before) + # Check the return status + if child: + log.debug(f"User '{username}' added successfully.") + else: + log.error(f"Failed to add user '{username}'.") + except pexpect.exceptions.EOF: + log.error("Unexpected end of output. Command might have failed.") + except pexpect.exceptions.TIMEOUT: + log.error("Operation timed out. Check your inputs or system load.") + return child + + +def fetch_image_pipeline(args): + testbed = args.testbed.strip() + image_ucs = getImageUCS(testbed) + log.info("Start login") + log.info(image_ucs) + log.info(image_ucs['username']) + user = image_ucs['username'] + host = image_ucs['host'] + pswd = image_ucs['password'] + image_folder = image_ucs['images_folder'] + + + workspace_root = os.getenv("WORKSPACE") + build_id = os.getenv('BUILD_ID') + + sonic_image_location = workspace_root+"/build/"+build_id + + + # ssh to server + log.info(f"SSH to server {host}, {user}/{pswd}") + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, 22, user, pswd) + + sftp = ssh.open_sftp() + + print("sftp put file "+sonic_image_location+"/sonic-cisco-8000.bin") + try: + sftp.put(sonic_image_location+"/sonic-cisco-8000.bin", f"{image_folder}/{build_id}/sonic-cisco-8000.bin") + sftp.put(sonic_image_location+"/docker-syncd-cisco-rpc.gz", f"{image_folder}/{build_id}/docker-syncd-cisco-rpc.gz") + except FileNotFoundError: + log.info(f"Path {image_folder}/{build_id} does not exist in server, create one") + sftp.mkdir(f"{image_folder}/{build_id}") + sftp.put(sonic_image_location+"/sonic-cisco-8000.bin", f"{image_folder}/{build_id}/sonic-cisco-8000.bin") + sftp.put(sonic_image_location+"/docker-syncd-cisco-rpc.gz", f"{image_folder}/{build_id}/docker-syncd-cisco-rpc.gz") + + sftp.close() + ssh.close() + + +def fetch_image(args): + full_link = args.full_link.strip() + testbed = args.testbed.strip() + [image, image_id, stream] = extractFromImageName(full_link) + image_ucs = getImageUCS(testbed) + log.debug("Fetch image") + log.info("Start login") + log.info(image_ucs) + log.info(image_ucs['username']) + user = image_ucs['username'] + host = image_ucs['host'] + pswd = image_ucs['password'] + p = sshUtil(user, host, pswd, 10000) + cmd = image_ucs['username']+"@"+image_ucs["host"] + p.expect(cmd) + p.sendline(f"cd {image_ucs['images_folder']}") + p.expect(cmd) + p = cleanUpImageFolder(p, cmd) + image_folder = f'{image_id}' + p.sendline(f'cd {image_folder}') + + i = p.expect([cmd, "No such file or directory"]) + if i == 0: + log.debug("Image folder already exists") + rc = removeImageDir(p, cmd, image_folder, pswd) + if rc!=0: + return -1 + + p.sendline(f'mkdir {image_folder}') + rc = checkSpace(p, testbed) + if rc == -1: + p.close() + return -1 + p.sendline(f'cd {image_folder}') + p.expect(cmd) + log.debug("downloading") + p.sendline(UNSET_HTTP_PROXY) + p.expect(cmd) + wget = image_ucs['wget'] + p.sendline(f'{wget} {full_link}') + p.expect(".tar.gz’ saved") + p.expect(cmd) + time.sleep(20) + untar = f'tar -xvf {image}' + p.sendline(untar) + checkSpace(p, testbed) + copy = f'cp sonic*/sonic-cisco-8000.bin .' + p.sendline(copy) + checkSpace(p, testbed) + docker = f'cp sonic*/docker-syncd-cisco-rpc.gz .' + p.sendline(docker) + checkSpace(p, testbed) + p.close() + return + +def image_install(args): + global testbed_info_dict + full_link = args.full_link.strip() + testbed = args.testbed.strip() + [image, image_id, stream] = extractFromImageName(full_link) + testbed_info_dict = getTestbedInfoDict(testbed) + install_mode = args.install_mode.strip() + + image_ucs = getImageUCS(testbed) + host = image_ucs['host'] + image_folder = image_ucs['images_folder'] + build_id = os.getenv('BUILD_ID') + + if install_mode == "default" or install_mode == None: + install_mode = testbed_info_dict["installer_mode"] if "installer_mode" in testbed_info_dict else "sonic" + if len(testbed_info_dict['dut_ssh']) >= 1: + i = 0 + while i '{expected_prompts[i]}'") + if i == 0 or i == 4: + # send user name + p.sendline(username) + elif i == 1: + # send password + p.sendline(password) + elif i == 2 or i == 5: + # setup for onie install + time.sleep(3) + p.sendline('sudo su') + elif i == 3 or i == 6: + # select onie install + p.sendline('sudo reboot') + time.sleep(3) + break + elif i == 7: + p.sendline("yes") + elif i == 8: + #Handle onie aborts + time.sleep(60) + # Execute pre-install commands before onie-nos-install + run_onie_pre_install_commands(p, testbed_info_dict, index) + p.send("onie-nos-install ") + image_folder = f'{image_id}' + ip = testbed_info_dict['onie_ip'] if "onie_ip" in testbed_info_dict else image_ucs['ip'] + onie_path = testbed_info_dict['onie_path'] if "onie_path" in testbed_info_dict else DEFAULT_IMAGES_FOLDER + p.send(f'http://{ip}/{onie_path}{image_folder}/{BIN_FILE}') + p.sendline() + log.info(p.after) + skip_onie = "True" + elif i == 9: + time.sleep(1) + if retry_count == 3: # retry 3 times + log.error("Login not successful into DUT") + return -1 + else: + retry_count = retry_count+1 + else: + log.error("unexpected prompt, exiting telnet") + p.sendline(telnet_escape_prompt) + p.expect('>telnet') + p.sendline('quit') + break + + log.info("Reboot done. Waiting for GRUB ONIE selection menu") + if skip_onie != "True": + p.expect(grub_selection) + log.info("Got GRUB menu, selecting ONIE instead of default image") + p.send(KEY_DOWN) + p.send(KEY_DOWN) + p.send(KEY_DOWN) + p.send(KEY_DOWN) + p.sendline(newline_prompt) + p.expect("Loading ONIE") + log.info("Got 'Loading ONIE', waiting for GRUB menu") + time.sleep(1) + p.expect(["ONIE: Install OS", "ONIE: Rescue"]) + log.info("Got GRUB menu, ONIE Install Mode by seinding KEY_UP and enter, allow for ONIE Rescue Mode") + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(KEY_UP) + p.sendline(newline_prompt) + p.sendline(newline_prompt) + p.sendline(newline_prompt) + p.sendline(newline_prompt) + + log.info("Waiting for prompt: 'ONIE: OS Install Mode ...'") + p.expect(["ONIE: OS Install Mode ...", "ONIE: Rescue Mode ..."]) + log.info("Got prompt: 'ONIE: OS Install/Rescue Mode ...'") + log.info("Waiting for prompt: 'Please press Enter to activate this console.'") + log.debug(p.after) + p.expect('Please press Enter to activate this console.') + log.info("Got prompt: 'Please press Enter to activate this console.'") + p.sendline(newline_prompt) + p.sendline(newline_prompt) + p.sendline(newline_prompt) + p.sendline('onie-stop') + p.expect(["Stopping: discover...", "Rescue mode detected. No discover stopped."]) + p.expect(onie_prompt) + # without DHCP, need to wait for ONIE to try and finish its DHCP flow before setting up the image + time.sleep(60) + # Execute pre-install commands before onie-nos-install + run_onie_pre_install_commands(p, testbed_info_dict, index) + p.send("onie-nos-install ") + image_folder = f'{image_id}' + ip = testbed_info_dict['onie_ip'] if "onie_ip" in testbed_info_dict else image_ucs['ip'] + onie_path = testbed_info_dict['onie_path'] if "onie_path" in testbed_info_dict else DEFAULT_IMAGES_FOLDER + p.send(f'http://{ip}/{onie_path}{image_folder}/{BIN_FILE}') + p.sendline() + + p.expect("Loading SONiC-OS OS initial ramdisk ...") + # p.expect("+ exit 0") + p.sendline(newline_prompt) + p.sendline(newline_prompt) + if telnetLoginUtil(p, stream) == -1: + return -1 + + log.info('Install process completed!') + + p.close() + # Wait for 10 minutes before checking + log.debug("Timeout for 10 minutes to let everything come up") + time.sleep(600) + + if 'extra_timeout' in testbed_info_dict: + # Wait for extra 10 minutes before checking + log.debug(f"Extra timeout of {testbed_info_dict['extra_timeout']} seconds") + time.sleep(testbed_info_dict['extra_timeout']) + + p = telnetConnection(host, port, None, sys.stdout, 'latin-1', False, testbed_info_dict) + if telnetLoginUtil(p, stream) == -1: + return -1 + checkForDockers(p) + p.sendline(newline_prompt) + p.expect(admin_prompt) + + log.debug("check for extra onie commands") + # Send extra commands after loading image, map of what commands to run on which telnet connection + if 'extra_onie_commands' in testbed_info_dict: + cmds_list = testbed_info_dict['extra_onie_commands'][index] + log.debug(cmds_list) + for cmd in cmds_list: + log.debug(f"Executing extra ONIE command: {cmd}") + time.sleep(2) + if cmd.startswith("scp") or cmd.startswith("sudo scp"): + scpUtil(p, cmd, testbed_info_dict["ucs_password"]) + p.expect(sonic_prompt) + elif cmd == "show lldp table": + log.debug("timeout for 5 mins before checking for lldp") + time.sleep(300) + checklldpCount(p, testbed_info_dict) + elif "reboot" in cmd: + p.sendline(cmd) + if telnetLoginUtil(p, stream) == -1: + return -1 + elif "config reload" in cmd: + log.debug(f"Executing config reload, command: {cmd}") + time.sleep(30) #give time for reload commands to run before continuing + p.sendline('\n') + p.expect(sonic_prompt) + else: + p.sendline(cmd) + p.expect(sonic_prompt) + p.close() + + log.info(f"ONIE install completed successfully for testbed {testbed}, DUT index {index} (telnet host {host}, port {port})") + return + +def remove_topo(args): + testbed = args.testbed.strip() + full_link = args.full_link.strip() + [_, _, stream] = extractFromImageName(full_link) + testbed_info_dict = getTestbedInfoDict(testbed) + + remove_topo_cmd = testbed_info_dict.get('remove_topo_cmd') + if remove_topo_cmd is None: + log.warning(f"cannot get cmd for remove_topo from testbed_info_dict for testbed {testbed}") + log.warning(f"Will continue the execution skipping remove-topo step entirely. Make sure it is intended (e.g. " + f"b2b testbed is used), otherwise update the info in hw_cfg.json") + return 0 + else: + log.debug(f'got cmd for remove_topo: "{remove_topo_cmd}"') + + with paramiko.SSHClient() as client: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + + remove_topo_outside_docker_cmd = getDockerExecCommand(stream, + testbed, + flags='', + suffix=f'-c "cd /data/ansible; {remove_topo_cmd}"') + log.info(f"One-liner to remove topo from outside sonic-mgmt docker container:\n{remove_topo_outside_docker_cmd}") + _, _, rc = _run_cmd_in_ssh(client, remove_topo_outside_docker_cmd, timeout=REMOVE_TOPO_TIMEOUT_SEC) + if rc: + raise RuntimeError("remove-topo returned non-zero return code. Please check logs.") + + return 0 + +def load_docker_ptf_image(stream, docker_ptf_url=None): + log.info('start load_docker_ptf_image') + global testbed_info_dict # assuming it's set in add_topo + STREAM_TO_DOCKER_PTF_MAP = { + '202405': 'http://172.26.235.76/MISC/docker-ptf_anukverm-202405-27Jun2025-mix.gz', + '202405c': 'http://172.26.235.76/MISC/docker-ptf_anukverm-202405-27Jun2025-mix.gz', + '202411': 'http://172.26.235.76/MISC/docker-ptf_anukverm-202411-27Jun2025-mix.gz', + '202501': 'http://172.26.235.76/MISC/docker-ptf_anukverm-202411-27Jun2025-mix.gz', + '202505': 'http://172.26.235.76/MISC/docker_ptf_202505_8Oct_azure_tagged_latest.tar', + '202506': 'http://172.26.235.76/MISC/docker_ptf_202505_8Oct_azure_tagged_latest.tar', + '202511': 'http://172.26.235.76/MISC/docker_ptf_202511_May4_azure_tagged_latest.tar', + '202605': 'http://172.26.235.76/MISC/docker_ptf_master_08Jun_azure_tagged_latest.tar', + 'c-master': 'http://172.26.235.76/MISC/docker_ptf_cmaster_8Oct_azure_tagged_latest_gnmiFix.tar', + 'master': 'http://172.26.235.76/MISC/docker-ptf_master_28Jan2026_tagged_latest.tar' + } + + ptf_docker_image_link = docker_ptf_url if docker_ptf_url \ + else STREAM_TO_DOCKER_PTF_MAP.get(stream) + if not ptf_docker_image_link: + log.error(f"unable to find matching docker ptf link for {stream}.") + return 1 + log.debug(f'ptf_docker_image_link set to {ptf_docker_image_link}') + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + + # Step 1: download the right docker on UCS + # todo `unset` workaround is needed for this to work on testbeds w/ proxies set, + # remove later when proxies are standardized on all testbeds, this works for now + image_filename = ptf_docker_image_link.split('/')[-1] + _, _, _ = _run_cmd_in_ssh(client, f"rm {image_filename}") + stdout, stderr, status_code = _run_cmd_in_ssh(client, f'{UNSET_HTTP_PROXY}; wget -ncv {ptf_docker_image_link}', timeout=60 * 30) + log.debug(f"download docker ptf output:\n{stdout}") + if status_code: + raise Exception(f"download docker ptf failed: \n{stderr}") + + # Step 2: Load docker ptf + stdout, stderr, status_code = _run_cmd_in_ssh(client, f"docker load -i {image_filename}") + log.debug(f"load docker ptf output:\n{stdout}") + _, _, _ = _run_cmd_in_ssh(client, f"rm {image_filename}") + if status_code != 0: + raise Exception(f"load docker ptf failed: \n{stderr}") + + log.info('finish load_docker_ptf_image') + return + +def add_topo(args): + global testbed_info_dict + testbed = args.testbed.strip() + full_link = args.full_link.strip() + [_, _, stream] = extractFromImageName(full_link) + testbed_info_dict = getTestbedInfoDict(testbed) + + add_topo_cmd = testbed_info_dict.get('add_topo_cmd') + if add_topo_cmd is None: + log.warning(f"Cannot get cmd for add_topo from testbed_info_dict for testbed {testbed}") + log.warning(f"Will continue the execution skipping add-topo step entirely. Make sure it is intended (e.g. " + f"b2b testbed is used), otherwise update the info in hw_cfg.json") + return 0 + else: + log.debug(f'got cmd for add_topo: "{add_topo_cmd}"') + + load_docker_ptf_image(getBranchFromStream(stream), os.getenv("DOCKER_PTF_IMAGE_OVERRIDE")) + + with paramiko.SSHClient() as client: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + + add_topo_outside_docker_cmd = getDockerExecCommand(stream, + testbed, + flags='', + suffix=f'-c "cd /data/ansible; {add_topo_cmd}"') + log.info(f"One-liner to add topo from outside sonic-mgmt docker container:\n{add_topo_outside_docker_cmd}") + _, _, rc = _run_cmd_in_ssh(client, add_topo_outside_docker_cmd, timeout=ADD_TOPO_TIMEOUT_SEC) + if rc: + raise RuntimeError("add-topo returned non-zero return code. Please check logs.") + + # install python-saithrift_1.13.0_amd64.deb inside docker ptf container + SAITHRIFT_DEB_FILENAME = "python-saithrift_1.13.0_amd64.deb" + SAITHRIFT_DEB_URL = f"http://172.26.235.76/MISC/{SAITHRIFT_DEB_FILENAME}" + SAITHRIFT_WHEEL_FILENAME = f"switch_sai_thrift-1.13.0-py3-none-any.whl" + SAITHRIFT_WHEEL_URL = f"http://172.26.235.76/MISC/{SAITHRIFT_WHEEL_FILENAME}" + + with paramiko.SSHClient() as client: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + + container_name = getSonicMgmtContainterName(stream, testbed) + destination_path = "/data" + testbed_mount_dir = get_container_local_mount_dir(client, container_name, destination_path) + + # grep 'group-name:' ansible/testbed.yaml | awk -F': ' '{print $2}' + group_name, _, _ = _run_cmd_in_ssh(client, cmd=f"grep 'group-name:' {testbed_mount_dir}/ansible/testbed.yaml | awk -F': ' '{{print $2}}'") + group_name = group_name.strip() + docker_ptf_container_name = f"ptf_{group_name}" + + # + # install using .deb file -- this is the go-to method before 202511 + # + log.info(f"Installing {SAITHRIFT_DEB_FILENAME} inside {docker_ptf_container_name} container") + stdout, stderr, status_code = _run_cmd_in_ssh(client, f'{UNSET_HTTP_PROXY}; wget -nc {SAITHRIFT_DEB_URL}', timeout=60 * 5) + if status_code: + raise Exception(f"Download {SAITHRIFT_DEB_FILENAME} failed: \n{stderr}") + stdout, stderr, status_code = _run_cmd_in_ssh(client, f"docker cp {SAITHRIFT_DEB_FILENAME} {docker_ptf_container_name}:/root") + if status_code != 0: + raise Exception(f"Copy {SAITHRIFT_DEB_FILENAME} to {docker_ptf_container_name} failed: \n{stderr}") + stdout, stderr, status_code = _run_cmd_in_ssh(client, f"docker exec {docker_ptf_container_name} bash -c 'dpkg -i {SAITHRIFT_DEB_FILENAME}'") + if status_code != 0: + raise Exception(f"Install {SAITHRIFT_DEB_FILENAME} in {docker_ptf_container_name} failed: \n{stderr}") + _, _, _ = _run_cmd_in_ssh(client, f"rm {SAITHRIFT_DEB_FILENAME}") + stdout, stderr, status_code = _run_cmd_in_ssh(client, f"docker exec {docker_ptf_container_name} bash -c 'dpkg --list | grep saithrift'") + log.debug(f"Verify {SAITHRIFT_DEB_FILENAME} installation output:\n{stdout}") + log.info(f"{SAITHRIFT_DEB_FILENAME} installed successfully inside {docker_ptf_container_name} container") + + # + # install using python wheel -- needed for 202511 (and onward?) MIGSOFTWAR-33560 + # + log.info(f"Installing {SAITHRIFT_WHEEL_FILENAME} using pip") + # download the file + _, _, status_code = _run_cmd_in_ssh(client, + f'{UNSET_HTTP_PROXY}; wget -nc {SAITHRIFT_WHEEL_URL}', + timeout=60 * 5) + if status_code: + log.warning(f"Unable to download {SAITHRIFT_WHEEL_FILENAME}") + # copy into docker-ptf + _, _, status_code = _run_cmd_in_ssh(client, + f"docker cp {SAITHRIFT_WHEEL_FILENAME} {docker_ptf_container_name}:/root") + if status_code: + log.warning(f"Error trying to copy {SAITHRIFT_WHEEL_FILENAME} into {docker_ptf_container_name}") + # install the package + _, _, status_code = _run_cmd_in_ssh(client, + f"docker exec {docker_ptf_container_name} bash -c 'pip install {SAITHRIFT_WHEEL_FILENAME}'") + if status_code: + log.warning(f"Error attempting to pip install {SAITHRIFT_WHEEL_FILENAME}") + + # install the package via pip3 in venv -- fixes the issue for 202605 + _, _, status_code = _run_cmd_in_ssh(client, + f"docker exec {docker_ptf_container_name} bash -c './env-python3/bin/pip3 install {SAITHRIFT_WHEEL_FILENAME}'") + if status_code: + log.warning(f"Error attempting to pip install via venv: {SAITHRIFT_WHEEL_FILENAME}") + + # verify through import + verify_saithrift_package_oneliner = f"""docker exec {docker_ptf_container_name} bash -c 'source env-python3/bin/activate; python3 -c "import switch_sai_thrift; print(switch_sai_thrift)"'""" + _, _, status_code = _run_cmd_in_ssh(client, + verify_saithrift_package_oneliner) + if status_code: + log.warning(f"venv-python3 switch_sai_thrift check failed. It might be intended depending on sonic version. Continue.") + + return 0 + +def deploy_mg(args): + testbed = args.testbed.strip() + full_link = args.full_link.strip() + [image, image_id, stream] = extractFromImageName(full_link) + testbed_info_dict = getTestbedInfoDict(testbed) + install_mode = args.install_mode.strip() + if "ucs_tb" not in testbed_info_dict or 'deploy_flag' in testbed_info_dict and testbed_info_dict['deploy_flag'] == 'False': + log.debug("Deploy minigraph not needed or parameter missing.") + return + if install_mode == "default" or install_mode == None: + install_mode = testbed_info_dict["installer_mode"] if "installer_mode" in testbed_info_dict else "sonic" + + deploy_mg_cmd = f'./testbed-cli.sh deploy-mg {testbed_info_dict["ucs_tb"]} ./lab ./password.txt' + + with paramiko.SSHClient() as client: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + deploy_mg_outside_docker_cmd = getDockerExecCommand(stream, + testbed, + flags='', + suffix=f'-c "cd /data/ansible; {deploy_mg_cmd}"') + log.info(f"One-liner to deploy-mg from outside sonic-mgmt docker container:\n{deploy_mg_outside_docker_cmd}") + _, _, rc = _run_cmd_in_ssh(client, deploy_mg_outside_docker_cmd, timeout=DEPLOY_MG_TIMEOUT) + if rc: + raise RuntimeError("deploy-mg returned non-zero return code. Please check logs.") + + log.debug("Timeout after deploy_mg") + time.sleep(200) + if 'superbolt' in testbed: + log.debug("Additional 60s timeout for superbolt") + time.sleep(60) + + if ('telnet_flag' in testbed_info_dict and testbed_info_dict['telnet_flag'] == "True") or install_mode == "onie": + log.debug("check for docker using telnet") + for telnet in testbed_info_dict['telnet_details']: + [host, port] = telnet.split(" ") + p = telnetConnection(host, port, 50000, sys.stdout, 'utf-8', False, testbed_info_dict) + telnetLoginUtil(p, stream, True) + if checkforInterfaces("telnet", p) == -1: + return -1 + p.sendline("show ip bgp summary") + p.expect(admin_prompt) + p.close() + elif install_mode == "sonic": + if len(testbed_info_dict['dut_ssh']) >= 1: + i = 0 + while i 1: + cmd_list = testbed_info_dict['extra_sonic_commands'][1:] + rc = nested_ssh(testbed_info_dict["ucs_host_name"], testbed_info_dict["ucs_username"], testbed_info_dict["ucs_password"], ssh, username, password, cmd_list, True) + if rc!=0: + log.error("Execution failed in extra_sonic_commands") + + # wipe residual files from the previous image(s) + log.info("Manually removing logs and dumps that aren't relevant for the current image") + cleanup_commands = [ # taken from cisco/install_image/install_image.py + "df -h", + "sudo rm -v /var/dump/*", + "sudo rm -v /var/core/*", + "sudo rm -v /var/log/syslog.*", + "sudo rm -v /var/log/auth.log.*", + "sudo rm -v /var/log/stpd.log.*", + "sudo rm -v /var/log/otel.log.*", + "sudo rm -v /var/log/gnmi.log.*", + "sudo rm -v /var/log/telemetry.log.*", + "sudo rm -v /var/log/cron.log.*", + "sudo rm -v /var/log/teamd.log.*", + "sudo rm -v /var/log/swss/sairedis*rec.*", + "sudo rm -v /var/log/swss/swss*rec.*", + "df -h", + ] + for dut_ssh in testbed_info_dict['dut_ssh']: + log.info(f"Processing cleanup for dut {dut_ssh}") + target_client, bastion_client = nested_ssh_connection( + testbed_info_dict["ucs_host_name"], + testbed_info_dict["ucs_username"], + testbed_info_dict["ucs_password"], + dut_ssh, + DUT_USERNAME, + DUT_PASSWORD, + retry=True, + ) + for cleanup_command in cleanup_commands: + out, err, rc = _run_cmd_in_ssh(target_client, cleanup_command) + target_client.close() + bastion_client.close() + log.info(f"Done processing cleanup for {dut_ssh}") + + checkForDockersSonic(testbed, stream, index) + +def telnet_run_sonic_pre_post_commands(args, index, pre_sonic=True): + log.debug("Entered telnet_run_sonic_pre_post_commands function") + global testbed_info_dict + full_link = args.full_link.strip() + [image, image_id, stream] = extractFromImageName(full_link) + testbed = args.testbed.strip() + testbed_info_dict = getTestbedInfoDict(testbed) + + username = DUT_USERNAME + password = DUT_PASSWORD + + [host, port] = testbed_info_dict['telnet_details'][index].split(" ") + p = telnetConnection(host, port, None, sys.stdout, 'latin-1', False, testbed_info_dict) + expected_prompts = [ + login_prompt, #0 + passwd_prompt, #1 + cisco_prompt, #2 + pre_sonic_prompt, #3 + sonic_login_prompt, #4 + admin_prompt, #5 + pre_admin_prompt, #6 + first_login, #7 + onie_prompt, #8 + 'Login incorrect' #9 + ] + + # login or sudo or onie install or run pre sonic config commands + prompt = admin_prompt + retry_count = 0 + while True: + time.sleep(2) + log.info("Getting prompt") + i = p.expect(expected_prompts) + log.info(f"got prompt #{i} --> '{expected_prompts[i]}'") + if i == 0 or i == 4: + # send user name + log.info("Sending Username") + p.sendline(username) + elif i == 1: + # send password + log.info("Sending Password") + p.sendline(password) + elif i == 2 or i == 5: + time.sleep(3) + log.info("Sending sudo su") + p.sendline('sudo su') + elif i == 3 or i == 6: + log.info("Executing installation commands before sonic installer") + + if pre_sonic: + run_sonic_pre_install_commands(p, testbed_info_dict, index) + else: + run_sonic_post_install_commands(p, testbed_info_dict, index) + + time.sleep(3) + p.close() + break + elif i == 7: + p.sendline("yes") + elif i == 8: + p.close() + onie_install(args, index) + + elif i == 9: + time.sleep(1) + p.sendline("") + if retry_count == 3: # retry 3 times + log.error("Login not successful into DUT") + p.close() + return -1 + else: + retry_count = retry_count+1 + else: + log.error("unexpected prompt, exiting telnet") + p.sendline(telnet_escape_prompt) + p.expect('>telnet') + p.sendline('quit') + p.close() + break + return 0 + +def checkForDockersSonic(testbed, stream, index=0): + cmd_list = list() + cmd_list.append('docker ps -a | wc') + testbed_info_dict = getTestbedInfoDict(testbed) + docker_count = testbed_info_dict['docker_count'] if 'docker_count' in testbed_info_dict else DEFAULT_DOCKER_COUNT + # connection gets lost after loading new image, reconnect with retry + username = DUT_USERNAME + password = DUT_PASSWORD + + return nested_ssh(testbed_info_dict["ucs_host_name"], testbed_info_dict["ucs_username"], testbed_info_dict["ucs_password"], testbed_info_dict["dut_ssh"][index], username, password, cmd_list, True, docker_count) + +def nested_ssh(bastion_host, bastion_user, bastion_key, target_host, target_user, target_key, cmd_list, retry, docker_count=None): + """Connect to a target host via a bastion host using Paramiko.""" + + # Connect to the bastion host + bastion_client = paramiko.SSHClient() + bastion_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + bastion_client.connect(bastion_host, username=bastion_user, password=bastion_key) + log.debug("First ssh done") + [target_client, sock_channel] = channelConnection(bastion_client, target_host, target_user, target_key) + log.debug(f"target_client: {target_client}") + if target_client == None and retry==True: + log.debug("Entered retry loop") + retries = MAX_RETRIES + while target_client == None and retries!=0: + log.debug("target_client is None, retry after timeout") + time.sleep(100) + [target_client, sock_channel] = channelConnection(bastion_client, target_host, target_user, target_key) + log.debug(target_client) + retries = retries-1 + if retries==0: + log.error("Reached max retries, Second ssh failed!") + return -1 + elif target_client == None: + log.error("Second ssh failed!") + return -1 + log.debug("Second ssh done. Executing commands...") + log.debug(f"Command list to execute via nested_ssh: {cmd_list}") + + # Execute commands on the target host + + image = "" + for cmd in cmd_list: + log.debug(f"Processing command: `{cmd}`") + if cmd == 'sudo sonic-installer set-next-boot': + cmd = f'sudo sonic-installer set-next-boot {image}' + # channel = target_client.get_transport().open_session() + stdin, stdout, stderr = target_client.exec_command(cmd) + if cmd == 'sudo sonic-installer list': + index = 0 + for line in iter(stdout.readline, ""): + index = index+1 + log.debug(index) + log.debug(line) + if index==2: + image_type = line.strip().split("-")[1] + log.debug(image_type) + if (index==5 and image_type == "B") or (index==6 and image_type == "A"): + image = line + log.debug(image) + rc = stdout.channel.recv_exit_status() + error = stderr.read() + if error: + log.error('There was an error pulling the runtime: {}'.format(error)) + return rc + elif cmd == 'docker ps -a | wc': + docker_count = int(docker_count) if docker_count is not None else DEFAULT_DOCKER_COUNT + for line in iter(stdout.readline, ""): + log.debug(f'line: {line}') + line_docker_count = line.split(" ")[1].replace(" ", "") + # Timeout to 10 mins - each retry for 30 seconds + retries = 1 + while int(line_docker_count)=MAX_RETRIES_TIMEOUT: + log.error("Timeout exceeded - not all dockers are up.") + return -1 + log.debug(int(line_docker_count)) + log.debug(int(docker_count)) + log.debug("All dockers are up.") + rc = stdout.channel.recv_exit_status() + error = stderr.read() + if error: + log.error('There was an error pulling the runtime: {}'.format(error)) + return rc + elif cmd == "show int po": + int_down = "LACP(A)(Dw)" + for line in iter(stdout.readline, ""): + log.debug(line) + if int_down in line: + log.error(f"Some interfaces are down: {line}") + target_client.close() + bastion_client.close() + return -1 + log.debug("All port channels are up.") + rc = stdout.channel.recv_exit_status() + error = stderr.read() + if error: + log.error('There was an error pulling the runtime: {}'.format(error)) + return rc + else: + stdout.channel.settimeout(60) + rc = stdout.channel.recv_exit_status() + output = stdout.read().decode('utf-8').strip() + error = stderr.read().decode('utf-8').strip() + if output: + log.debug(f"STDOUT: {output}") + if error: + log.warning(f"STDERR: {error}") + if rc: + log.error(f"Error during cmd execution `{cmd}`") + return rc + + # Close the connections + closeConnections(bastion_client, target_client, sock_channel) + return 0 + +def execute_cmd_on_dut(bastion_host, bastion_user, bastion_key, + dut_mgmt_ip, dut_username, dut_ssh_password, + cmd, timeout=60): + """ + ssh into the dut using mgmt-ip through the testbed server used as a bastion host, + then execute the cmd and return (stdout_read, stderr_read, return_code) + """ + with paramiko.SSHClient() as bastion_client: + bastion_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + bastion_client.connect(bastion_host, username=bastion_user, password=bastion_key) + log.debug("First ssh done") + [target_client, sock_channel] = channelConnection(bastion_client, dut_mgmt_ip, dut_username, dut_ssh_password) + log.debug(f"target_client: {target_client}") + _, stdout, stderr = target_client.exec_command(command=cmd, + timeout=timeout + ) + stdout_read = stdout.read().decode('utf-8') + stderr_read = stderr.read().decode('utf-8') + return_code = stdout.channel.recv_exit_status() + target_client.close() + sock_channel.close() + return stdout_read, stderr_read, return_code + +def reboot_all_DUTs(testbed, username=DUT_USERNAME, password=DUT_PASSWORD, wait_seconds_for_reboot=60*5): + """ + send `sudo reboot` on all DuTs in parallel then sleep some time (5 min by default) + """ + log.info(f"Entered reboot_all_DUTs function for testbed '{testbed}'") + testbed_info_dict = getTestbedInfoDict(testbed) + + from functools import partial + from time import sleep + from concurrent.futures import as_completed + from concurrent.futures import ThreadPoolExecutor + + static_params = { + "bastion_host": testbed_info_dict["ucs_host_name"], + "bastion_user": testbed_info_dict["ucs_username"], + "bastion_key": testbed_info_dict["ucs_password"], + "dut_username": username, + "dut_ssh_password": password, + "cmd": "nohup sudo -n reboot >/dev/null 2>&1 &", + "timeout": 60, + } + reboot_dut = partial(execute_cmd_on_dut, **static_params) + + success = True + with ThreadPoolExecutor(max_workers=len(testbed_info_dict["dut_ssh"])) as pool: + futures = [pool.submit(reboot_dut, dut_mgmt_ip=dut_mgmt_ip_addr) + for dut_mgmt_ip_addr in testbed_info_dict["dut_ssh"]] + + log.debug(f"Sleeping for {wait_seconds_for_reboot}...") + sleep(wait_seconds_for_reboot) + + for future in as_completed(futures): + try: + log.info(future.result()) + except Exception as e: + log.error(f"Exception {e} while trying to reboot a DUT") + success = False + + if not success: + log.error(f"Couldn't reboot all DUTs successfully. ") + return 1 + else: + log.info(f"Rebooted all DUTs successfully.") + return 0 + + +def cisco_system_health(testbed): + """ + run cisco_system_health.py on each dut in the setup + + param: testbed - str identifier of the testbed in hw_cfg.json + + return dict{dut_mgmt_ip: namedtuple(stdout, stderr, return_code)} + """ + run_cisco_system_health_cmd = "python3 /opt/cisco/tools/bin/cisco_system_health.py" + log.info('Starting cisco_system_health. ' + f'Will run `{run_cisco_system_health_cmd}` ' + 'on the DuT.') + + testbed_info_dict = getTestbedInfoDict(testbed) + results = {} + for dut_mgmt_ip_addr in testbed_info_dict["dut_ssh"]: + log.debug(f'Now attempting cisco_system_health for dut with mgmt_ip {dut_mgmt_ip_addr}') + stdout, stderr, rc = execute_cmd_on_dut(testbed_info_dict["ucs_host_name"], + testbed_info_dict["ucs_username"], + testbed_info_dict["ucs_password"], + dut_mgmt_ip_addr, + DUT_USERNAME, + DUT_PASSWORD, + run_cisco_system_health_cmd, + timeout=60 * 5) + CiscoSystemHealthResults = namedtuple('CiscoSystemHealthResults', ['stdout', 'stderr', 'return_code']) + results[dut_mgmt_ip_addr] = CiscoSystemHealthResults(stdout=stdout, + stderr=stderr, + return_code=rc) + log.debug(f'Parsed results for cisco system health for dut {dut_mgmt_ip_addr}:' + f'{results[dut_mgmt_ip_addr]}') + return results + +def read_stream(stream, name): + for line in iter(stream.readline, b''): + log.debug(f"{name}: {line.strip()}") + +def closeConnections(bastion_client, target_client, sock_channel): + target_client.close() # Close target host client + sock_channel.close() # Close the transport channel + bastion_client.close() + return + +def checkforInterfaces(type, arg, index = 0): + log.info("Check if interfaces are up") + time.sleep(10) + if type == "telnet": + arg.sendline("show int po") + i = arg.expect(["LACP(A)(Dw)", admin_prompt]) + if i == 0: + log.error("All Interfaces are not up.") + return -1 + else: + log.info("All interfaces are up and running") + return + else: + cmd_list = list() + cmd_list.append("show int po") + cmd_list.append("show ip bgp summary") + # connection gets lost after loading new image, reconnect + rc = nested_ssh(arg["ucs_host_name"], arg["ucs_username"], arg["ucs_password"], arg["dut_ssh"][index], DUT_USERNAME, DUT_PASSWORD, cmd_list, True) + return rc + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Management full run.') + subparser = parser.add_subparsers(help = "available subcommand:") + + pre_parser = subparser.add_parser("precheck", help = "precheck image") + pre_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + pre_parser.add_argument("-f", "--full_link", help = "full link", required=True) + pre_parser.set_defaults(func=precheck) + + fetch_parser = subparser.add_parser("fetch", help = "fetch image") + fetch_parser.add_argument("-f", "--full_link", help = "full link", required=True) + fetch_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + fetch_parser.set_defaults(func=fetch_image) + + onie_parser = subparser.add_parser("onie", help = "onie install on image") + onie_parser.add_argument("-f", "--full_link", help = "full link", required=True) + onie_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + onie_parser.add_argument("-i", "--install_mode", help = "install_mode") + onie_parser.add_argument("--topology", help = "Topology type") + onie_parser.set_defaults(func=image_install) + + remove_topo_parser = subparser.add_parser("remove-topo", help = "remove topo") + remove_topo_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + remove_topo_parser.add_argument("-f", "--full_link", help = "full link", required=True) + remove_topo_parser.set_defaults(func=remove_topo) + + add_topo_parser = subparser.add_parser("add-topo", help="add topo") + add_topo_parser.add_argument("-t", "--testbed", help="testbed", required=True) + add_topo_parser.add_argument("-f", "--full_link", help = "full link", required=True) + add_topo_parser.set_defaults(func=add_topo) + + add_topo_parser = subparser.add_parser("extra_configuration_steps", help="extra steps specific to testbed") + add_topo_parser.add_argument("-t", "--testbed", help="testbed", required=True) + add_topo_parser.add_argument("-f", "--full_link", help="full link", required=True) + add_topo_parser.set_defaults(func=extra_configuration_steps) + + deploy_parser = subparser.add_parser("deploy", help = "deploy mg") + deploy_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + deploy_parser.add_argument("-f", "--full_link", help = "full link", required=True) + deploy_parser.add_argument("-i", "--install_mode", help = "install_mode") + deploy_parser.set_defaults(func=deploy_mg) + + allure_parser = subparser.add_parser("install-allure", help = "install allure package inside the base container") + allure_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + allure_parser.add_argument("-f", "--full_link", help = "full link", required=True) + allure_parser.set_defaults(func=install_allure) + + fetch_pipeline_parser = subparser.add_parser("fetch-pipeline", help = "fetch image from inside pipeline") + fetch_pipeline_parser.add_argument("-t", "--testbed", help = "testbed", required=True) + fetch_pipeline_parser.set_defaults(func=fetch_image_pipeline) + + args = parser.parse_args() + + res = args.func(args) + sys.exit(res) diff --git a/infra/do_sonic_test_env_setup.py b/infra/do_sonic_test_env_setup.py new file mode 100755 index 00000000000..67b8d50567e --- /dev/null +++ b/infra/do_sonic_test_env_setup.py @@ -0,0 +1,1049 @@ +import os +import sys +import argparse +import subprocess +import shutil +import logging +import json +import stat +import tempfile +import textwrap +from typing import Dict + +# Environment variable names for CI/CD secret injection +ENV_GIT_TOKEN = "CICD_GIT_TOKEN" +ENV_GIT_USER = "CICD_GIT_USER" +ENV_SUDO_PASSWORD = "CICD_UCS_SUDO_PASSWORD" + +# Standard directory name for the SONiC test workspaces +SONIC_WORKSPACES_DIR = "sonic_test_workspaces" + +# Default proxy configuration for the UCS Host +UCS_PROXY_DEFAULTS = { + "no_proxy": "http://sonic-build-rtp.cisco.com:3128/", + "http_proxy": "http://sonic-build-rtp.cisco.com:3128/", + "https_proxy": "http://sonic-build-rtp.cisco.com:3128/", + "ftp_proxy": "http://sonic-build-rtp.cisco.com:3128/" +} + +# Default proxy configuration for the SONiC Management Container +SONIC_MGMT_CONTAINER_PROXY_DEFAULTS = { + "no_proxy": "http://sonic-build-rtp.cisco.com:3128/", + "http_proxy": "http://sonic-build-rtp.cisco.com:3128/", + "https_proxy": "http://sonic-build-rtp.cisco.com:3128/", + "ftp_proxy": "http://sonic-build-rtp.cisco.com:3128/" +} + +class SonicTestEnvSetup: + """ + A comprehensive automation class for setting up SONiC test environments on UCS Linux servers. + Handles UCS host configuration (proxies, drivers, images) and SONiC environment instantiation. + """ + + def __init__(self, args): + """ + Initializes the SonicTestEnvSetup class. + + Args: + args (argparse.Namespace): Parsed command-line arguments. + """ + self.args = args + + # Initialize Logger + logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[logging.StreamHandler(sys.stdout)] + ) + self.logger = logging.getLogger(__name__) + + # Determine context for logging + command = getattr(args, 'command', 'unknown') + subcommand = getattr(args, 'subcommand', '') + self.logger.info(f"Initialized SonicTestEnvSetup. Command: {command} {subcommand}") + + @staticmethod + def _resolve_secret(env_var_name: str, label: str) -> str: + """ + Reads a secret from an environment variable. + + Secrets always live in env vars by the time this method is called: + either set directly (CI/CD) or moved there from CLI args by + _sanitize_process_args() before execution begins. + + Raises SystemExit with a clear message if the variable is not set. + + Args: + env_var_name: Name of the environment variable to read. + label: Human-readable label for error messages (e.g. "Git token"). + + Returns: + The secret string. + """ + if value := os.environ.get(env_var_name): + return value + logging.getLogger(__name__).error( + f"{label} not provided. Supply --{label.lower().replace(' ', '_')} or " + f"set the {env_var_name} environment variable." + ) + sys.exit(1) + + # ============================================================================== + # Shared Helper Methods + # ============================================================================== + + def _download_file(self, url: str, dest_path: str): + """ + Universal helper to download a file using wget. + Assumes proxy environment variables are already set if needed. + """ + try: + self.logger.info(f"Downloading {url} to {dest_path}...") + subprocess.run( + ["wget", "-O", dest_path, url], + check=True + ) + self.logger.info(f"Download completed: {dest_path}") + except subprocess.CalledProcessError as e: + self.logger.error(f"Failed to download file from {url}: {e}") + raise + + def _load_docker_image_from_url(self, image_url: str): + """ + Universal helper to download and load a Docker image from a URL. + Handles temporary file management. + """ + filename = image_url.split('/')[-1] + temp_path = os.path.join("/tmp", filename) + + try: + # 1. Download + self._download_file(image_url, temp_path) + + # 2. Load + self.logger.info(f"Loading docker image from {temp_path}...") + subprocess.run( + ["docker", "load", "-i", temp_path], + check=True + ) + self.logger.info("Docker image loaded successfully.") + + except Exception as e: + self.logger.error(f"Failed to load docker image from {image_url}: {e}") + raise + finally: + # 3. Cleanup + if os.path.exists(temp_path): + os.remove(temp_path) + self.logger.info(f"Cleaned up temporary file: {temp_path}") + + # ============================================================================== + # UCS Setup Methods (Command: ucs) + # ============================================================================== + + def _configure_ucs_proxies(self): + """ + Orchestrator for configuring all UCS proxy settings. + """ + self._configure_bashrc_proxies() + self._configure_apt_proxies() + + def _configure_bashrc_proxies(self): + """ + Configures proxy settings in the user's .bashrc file. + """ + # Determine settings: Use provided JSON or fall back to defaults + proxy_settings = self.args.proxy if self.args.proxy else UCS_PROXY_DEFAULTS + + bashrc_path = os.path.expanduser("~/.bashrc") + start_marker = "# --- SONiC Automation Proxies ---" + end_marker = "# ------------------------------" + + # Keys to explicitly remove/update (both lower and upper case) + target_keys = ["http_proxy", "https_proxy", "ftp_proxy", "no_proxy"] + + self.logger.info(f"Configuring UCS proxies in {bashrc_path}...") + + try: + # 1. Read existing content + if os.path.exists(bashrc_path): + with open(bashrc_path, "r") as f: + lines = f.readlines() + else: + lines = [] + self.logger.warning(f"{bashrc_path} not found. Creating new file.") + + # 2. Filter out existing proxy exports and old markers + new_lines = [] + for line in lines: + stripped = line.strip() + + # Skip old markers + if stripped == start_marker or stripped == end_marker: + continue + + # Check if line is an export of one of our target keys + is_target_proxy = False + if stripped.startswith("export "): + # Extract variable name: "export http_proxy=..." -> "http_proxy" + parts = stripped.split('=') + if parts: + var_decl = parts[0] # "export http_proxy" + var_name = var_decl.replace("export ", "").strip() + + if var_name.lower() in target_keys: + is_target_proxy = True + + if not is_target_proxy: + new_lines.append(line) + + # 3. Append new proxy block + if new_lines and not new_lines[-1].endswith('\n'): + new_lines.append('\n') + + new_lines.append(f"{start_marker}\n") + + for key, value in proxy_settings.items(): + # Write to file + new_lines.append(f"export {key.lower()}={value}\n") + new_lines.append(f"export {key.upper()}={value}\n") + + # Apply to CURRENT process environment immediately + os.environ[key.lower()] = value + os.environ[key.upper()] = value + + new_lines.append(f"{end_marker}\n") + + # 4. Write back to file + with open(bashrc_path, "w") as f: + f.writelines(new_lines) + + self.logger.info(f"Successfully updated {bashrc_path}.") + self.logger.info("Proxies have also been applied to the current script execution environment.") + + except Exception as e: + self.logger.error(f"Failed to configure proxies in .bashrc: {e}") + raise + + def _configure_apt_proxies(self): + """ + Configures /etc/apt/apt.conf using sudo. + Strictly adds only HTTP and HTTPS proxies. + Password is passed via stdin to avoid exposure in process listings. + """ + self.logger.info("Configuring APT proxies in /etc/apt/apt.conf...") + + sudo_password = self._resolve_secret(ENV_SUDO_PASSWORD, "sudo_password") + + proxy_settings = self.args.proxy if self.args.proxy else UCS_PROXY_DEFAULTS + + # Construct APT config content (Strictly HTTP/HTTPS only) + lines = [] + if "http_proxy" in proxy_settings: + lines.append(f'Acquire::http::Proxy "{proxy_settings["http_proxy"]}";') + if "https_proxy" in proxy_settings: + lines.append(f'Acquire::https::Proxy "{proxy_settings["https_proxy"]}";') + + config_content = "\n".join(lines) + "\n" + + # Write config to a temp file first, then use sudo cp to place it. + # This avoids mixing the sudo password and file content on the same stdin. + tmp_fd = None + tmp_path = None + try: + self.logger.info("Executing sudo command to write /etc/apt/apt.conf") + + tmp_fd, tmp_path = tempfile.mkstemp(prefix="apt_conf_", suffix=".tmp") + with os.fdopen(tmp_fd, 'w') as f: + tmp_fd = None # os.fdopen takes ownership of the fd + f.write(config_content) + + subprocess.run( + ["sudo", "-S", "-p", "", "install", "-m", "0644", tmp_path, "/etc/apt/apt.conf"], + input=f"{sudo_password}\n", + text=True, + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + self.logger.info("Successfully updated /etc/apt/apt.conf with HTTP/HTTPS proxies.") + + except subprocess.CalledProcessError as e: + self.logger.error(f"Failed to configure APT proxies: {e}") + raise + finally: + if tmp_fd is not None: + os.close(tmp_fd) + if tmp_path and os.path.exists(tmp_path): + os.remove(tmp_path) + + def _setup_veos_image(self): + """ + Downloads a vEOS image from the provided URL and places it in ~/veos-vm/images. + """ + # Define target directory relative to current user's home + target_dir = os.path.expanduser("~/veos-vm/images") + + self.logger.info(f"Setting up vEOS image in {target_dir}...") + + # 1. Ensure directory exists + try: + os.makedirs(target_dir, exist_ok=True) + except OSError as e: + self.logger.error(f"Failed to create directory {target_dir}: {e}") + raise + + # 2. Determine destination path + filename = self.args.image_url.split('/')[-1] + dest_path = os.path.join(target_dir, filename) + + # 3. Download file + try: + self._download_file(self.args.image_url, dest_path) + self.logger.info(f"vEOS image successfully downloaded to {dest_path}") + except Exception as e: + self.logger.error(f"Failed to setup vEOS image: {e}") + raise + + def _apply_intel_driver_workaround(self): + """ + Applies the workaround for the Intel i40e driver bug that blocks LLDP packets. + Executes a shell loop with sudo to write 'lldp stop' to the driver debug command files. + Uses sudo -S to accept password from stdin. + """ + self.logger.info("Applying Intel i40e driver LLDP workaround...") + + # Construct the shell command + cmd = [ + "sudo", "-S", "-p", "", "sh", "-c", + 'for i in /sys/kernel/debug/i40e/*; do if [ -d "$i" ]; then echo "lldp stop" > "$i/command"; echo "Applied to $i"; fi; done' + ] + + # Log the command safely + safe_log_cmd = f"echo '' | {' '.join(cmd)}" + self.logger.info(f"Executing command: {safe_log_cmd}") + + try: + # Run the command, passing the password securely via stdin + sudo_password = self._resolve_secret(ENV_SUDO_PASSWORD, "sudo_password") + password_input = f"{sudo_password}\n" + + result = subprocess.run( + cmd, + input=password_input, # Pass password here + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + self.logger.info("Workaround applied successfully.") + self.logger.debug(f"Command output: {result.stdout}") + + except subprocess.CalledProcessError as e: + self.logger.error(f"Failed to apply Intel driver workaround: {e}") + self.logger.error(f"Error output: {e.stderr}") + raise + + def _apply_cpu_softlock_workaround(self): + """ + Applies the workaround for CPU soft lockup errors by increasing the kernel watchdog threshold. + Writes config to /etc/sysctl.d/ and reloads sysctl. + Uses sudo -S to accept password from stdin. + """ + self.logger.info("Applying CPU soft lockup workaround (watchdog_thresh=20)...") + + config_file = "/etc/sysctl.d/99-watchdog_thresh.conf" + sudo_password = self._resolve_secret(ENV_SUDO_PASSWORD, "sudo_password") + password_input = f"{sudo_password}\n" + + try: + # 1. Write configuration + # We use sh -c to handle the redirection > with sudo privileges + self.logger.info(f"Writing configuration to {config_file}...") + write_cmd = [ + "sudo", "-S", "-p", "", "sh", "-c", + f'echo "kernel.watchdog_thresh=20" > {config_file}' + ] + + self.logger.info(f"Executing write command: echo '' | {' '.join(write_cmd)}") + + subprocess.run( + write_cmd, + input=password_input, + text=True, + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + + # 2. Reload sysctl settings + self.logger.info("Reloading sysctl settings...") + reload_cmd = ["sudo", "-S", "-p", "", "sysctl", "-p", config_file] + + self.logger.info(f"Executing reload command: echo '' | {' '.join(reload_cmd)}") + + subprocess.run( + reload_cmd, + input=password_input, + text=True, + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + + self.logger.info("CPU soft lockup workaround applied successfully.") + + except subprocess.CalledProcessError as e: + self.logger.error(f"Failed to apply CPU soft lockup workaround: {e}") + self.logger.error(f"Error output: {e.stderr}") + raise + + # ============================================================================== + # SONiC Environment Methods (Command: sonic_test_env) + # ============================================================================== + + def _remove_workspace_resources(self): + """ + Removes workspace resources: forcibly removes the specific Docker container + and the specific workspace directory. + Does NOT remove the Docker image to preserve bandwidth for other workspaces. + """ + container_name = self.args.workspace_name + # Target specific workspace directory: ~/sonic_test_workspaces/{workspace_name} + workspace_dir = os.path.expanduser(f"~/{SONIC_WORKSPACES_DIR}/{self.args.workspace_name}") + + self.logger.info(f"Starting removal. Target Directory: {workspace_dir}, Target Container: {container_name}") + + # 1. Remove Docker Container + try: + self.logger.info(f"Attempting to remove container: {container_name}") + # check=False allows the command to fail silently if container doesn't exist + result = subprocess.run( + ["docker", "rm", "-f", container_name], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + if result.returncode == 0: + self.logger.info(f"Successfully removed container: {container_name}") + else: + # Docker returns non-zero if container doesn't exist, which is fine + self.logger.info(f"Container {container_name} not found or already removed.") + except Exception as e: + self.logger.error(f"Error occurred while removing container: {e}") + raise + + # 2. Remove Specific Workspace Directory + if os.path.exists(workspace_dir): + try: + self.logger.info(f"Removing directory: {workspace_dir}") + shutil.rmtree(workspace_dir) + self.logger.info(f"Successfully removed {workspace_dir}") + except Exception as e: + self.logger.error(f"Failed to remove directory {workspace_dir}: {e}") + raise + else: + self.logger.info(f"Directory {workspace_dir} does not exist. No cleanup needed.") + + def _setup_git_repository(self): + """ + Clones the Git repository into the specific workspace directory. + SECURITY: Uses GIT_ASKPASS so the token never appears in process arguments. + Immediately updates the git remote URL to remove credentials after cloning. + """ + # Resolve secrets from env vars + git_user = self._resolve_secret(ENV_GIT_USER, "git_user") + git_token = self._resolve_secret(ENV_GIT_TOKEN, "git_token") + + # Target directory: ~/sonic_test_workspaces/{workspace_name} + parent_dir = os.path.expanduser(f"~/{SONIC_WORKSPACES_DIR}/{self.args.workspace_name}") + + self.logger.info(f"Setting up Git repository. Target Directory: {parent_dir}") + + # 1. Create Directory Structure + try: + os.makedirs(parent_dir, exist_ok=True) + except OSError as e: + self.logger.error(f"Failed to create directory {parent_dir}: {e}") + raise + + # 2. Construct URLs + # Clean the input URL: remove 'https://' or 'http://' if present + clean_url_body = self.args.git_repo_url.replace("https://", "").replace("http://", "") + + # URL for Cloning (username only — token supplied via GIT_ASKPASS) + clone_url = f"https://{git_user}@{clean_url_body}" + + # URL for Remote Config (Clean, No Token) + final_clean_url = f"https://{clean_url_body}" + + # Masked URL for logging + masked_url = f"https://{git_user}:@{clean_url_body}" + + # 3. Create a temporary GIT_ASKPASS helper script + # The script reads the token from an env var so no credential is written to disk. + askpass_fd = None + askpass_path = None + _askpass_token_var = "_GIT_ASKPASS_TOKEN" + try: + askpass_fd, askpass_path = tempfile.mkstemp(prefix="git_askpass_", suffix=".sh") + with os.fdopen(askpass_fd, 'w') as f: + askpass_fd = None # os.fdopen takes ownership of the fd + f.write(f"#!/bin/sh\nprintf '%s\\n' \"${_askpass_token_var}\"\n") + os.chmod(askpass_path, stat.S_IRWXU) # owner rwx only + + # 4. Clone Repository + self.logger.info(f"Cloning branch '{self.args.git_branch}' from {masked_url}...") + + clone_env = os.environ.copy() + clone_env["GIT_ASKPASS"] = askpass_path + clone_env["GIT_TERMINAL_PROMPT"] = "0" + clone_env[_askpass_token_var] = git_token + + cmd = ["git", "clone", "-b", self.args.git_branch, clone_url] + + subprocess.run( + cmd, + cwd=parent_dir, + env=clone_env, + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + self.logger.info("Repository cloned successfully.") + + # 5. Redact credentials from Remote URL + # We need to find the specific folder git created to run the git config command inside it. + # Usually it's the last part of the URL. + repo_name = clean_url_body.split('/')[-1] + if repo_name.endswith(".git"): + repo_name = repo_name[:-4] + + repo_path = os.path.join(parent_dir, repo_name) + + if os.path.isdir(repo_path): + self.logger.info(f"Updating git remote to remove credentials in {repo_path}...") + subprocess.run( + ["git", "remote", "set-url", "origin", final_clean_url], + cwd=repo_path, + check=True + ) + self.logger.info("Git remote URL successfully sanitized (token removed).") + else: + self.logger.warning(f"Could not locate repo directory at {repo_path} to sanitize remote URL.") + + except subprocess.CalledProcessError as e: + self.logger.error(f"Git operation failed. Return code: {e.returncode}") + self.logger.error(f"Error output: {e.stderr}") + raise + except Exception as e: + self.logger.error(f"An unexpected error occurred during git setup: {e}") + raise + finally: + # Always clean up the askpass helper script + if askpass_fd is not None: + os.close(askpass_fd) + if askpass_path and os.path.exists(askpass_path): + os.remove(askpass_path) + self.logger.info("Cleaned up temporary GIT_ASKPASS helper.") + + def _manage_docker_image(self): + """ + Ensures the required Docker image exists locally. + Uses robust formatting to check for existence. + """ + # Extract filename from URL: "sonic-mgmt_...mix.gz" + filename_with_ext = self.args.sonic_mgmt_image_url.split('/')[-1] + + # Remove extensions to get the likely image name for checking + image_identifier = filename_with_ext.split('.')[0] + + self.logger.info(f"Checking for local existence of image matching identifier: '{image_identifier}'...") + + # 1. Check if image exists locally + try: + # Use --format to get specific output: "Repository:Tag" + # This works on old and new Docker versions + result = subprocess.run( + ["docker", "images", "--format", "{{.Repository}}:{{.Tag}}"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + + # Check if our identifier exists in the output + if image_identifier in result.stdout: + self.logger.info(f"Image '{image_identifier}' found locally. Skipping download.") + return # <--- EXIT HERE if found + else: + self.logger.info(f"Image '{image_identifier}' not found locally. Proceeding to download.") + + except subprocess.CalledProcessError as e: + self.logger.error(f"Failed to check docker images: {e}") + raise + + # 2. Download and Load (using helper) + self._load_docker_image_from_url(self.args.sonic_mgmt_image_url) + + def _launch_sonic_mgmt_container(self): + """ + Constructs and executes the docker run command to launch the SONiC management container. + Dynamically detects the correct code mount path based on repository structure. + """ + container_name = self.args.workspace_name + + # Base workspace directory: ~/sonic_test_workspaces/{workspace_name} + workspace_dir = os.path.expanduser(f"~/{SONIC_WORKSPACES_DIR}/{self.args.workspace_name}") + + self.logger.info(f"Determining code mount path. Scanning directory: {workspace_dir}") + + try: + # 1. Identify the repository directory created by git clone + subdirs = [d for d in os.listdir(workspace_dir) if os.path.isdir(os.path.join(workspace_dir, d))] + if not subdirs: + raise FileNotFoundError("No directory found inside workspace folder. Git clone might have failed.") + + # The directory created by git clone (e.g., 'sonic-test', 'sonic-mgmt', or 'msft-sonic-mgmt') + repo_dir_name = subdirs[0] + repo_full_path = os.path.join(workspace_dir, repo_dir_name) + + # 2. Check for the 3 supported cases + + # Case 1: Nested sonic-mgmt (e.g., .../sonic-test/sonic-mgmt) + # This handles the case where the repo is 'sonic-test' containing 'sonic-mgmt' + nested_path = os.path.join(repo_full_path, "sonic-mgmt") + + if os.path.isdir(nested_path): + code_mount_path = nested_path + self.logger.info(f"Detected Case 1: Nested sonic-mgmt found at {code_mount_path}") + + # Case 2: Repo is sonic-mgmt (e.g., .../sonic-mgmt) + elif repo_dir_name == "sonic-mgmt": + code_mount_path = repo_full_path + self.logger.info(f"Detected Case 2: Repository root is sonic-mgmt at {code_mount_path}") + + # Case 3: Repo is msft-sonic-mgmt (e.g., .../msft-sonic-mgmt) + elif repo_dir_name == "msft-sonic-mgmt": + code_mount_path = repo_full_path + self.logger.info(f"Detected Case 3: Repository root is msft-sonic-mgmt at {code_mount_path}") + else: + raise FileNotFoundError(f"Could not find valid sonic-mgmt path in {repo_full_path}") + + except Exception as e: + self.logger.error(f"Error determining mount path: {e}") + raise + + self.logger.info(f"Launching container: {container_name}") + + # Determine Image Name + filename_with_ext = self.args.sonic_mgmt_image_url.split('/')[-1] + image_identifier = filename_with_ext.split('.')[0] + + try: + # Get all images in "Repository:Tag" format + result = subprocess.run( + ["docker", "images", "--format", "{{.Repository}}:{{.Tag}}"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=True + ) + + found_repo = None + # Iterate lines to find the match + for line in result.stdout.splitlines(): + if image_identifier in line: + # Line is "repo:tag". We need just the "repo" part. + # This handles cases where output is "repo:tag" (new docker) + # or just "repo" (if tag was missing/weird, though less likely with format) + parts = line.split(':') + found_repo = parts[0] + break + + if not found_repo: + raise ValueError(f"Could not find docker image matching {image_identifier}") + + # Construct the final name using the user-provided tag + full_image_name = f"{found_repo}:{self.args.sonic_mgmt_image_tag}" + self.logger.info(f"Using Docker image: {full_image_name}") + + except Exception as e: + self.logger.error(f"Failed to identify docker image: {e}") + raise + + # Determine Log Mount Dir + log_mount = os.path.expanduser(self.args.container_log_mount_dir if self.args.container_log_mount_dir else "~/test_logs") + + # Construct Docker Run Command + cmd = [ + "docker", "run", + "--name", container_name, + "--net=host", + "--privileged", + "-v", f"{code_mount_path}:/data", + "-v", f"{log_mount}:/run_logs", + "-itd" + ] + + # ------------------------------------------------------------------ + # Mount Host APT Config if it exists + # ------------------------------------------------------------------ + if os.path.exists("/etc/apt/apt.conf"): + self.logger.info("Detected /etc/apt/apt.conf on host. Mounting to container...") + cmd.extend(["-v", "/etc/apt/apt.conf:/etc/apt/apt.conf:ro"]) + # ------------------------------------------------------------------ + + # Add Proxy Env Vars + container_proxies = self.args.container_proxy if self.args.container_proxy else SONIC_MGMT_CONTAINER_PROXY_DEFAULTS + + for key, value in container_proxies.items(): + cmd.extend(["-e", f"{key}={value}"]) + cmd.extend(["-e", f"{key.upper()}={value}"]) + + # Add Image and Command + cmd.append(full_image_name) + cmd.append("bash") + + # Execute + try: + self.logger.info(f"Executing command: {' '.join(cmd)}") + subprocess.run(cmd, check=True) + self.logger.info(f"Container {container_name} launched successfully.") + except subprocess.CalledProcessError as e: + self.logger.error(f"Failed to launch container: {e}") + raise + + # ============================================================================== + # Main Execution Logic + # ============================================================================== + + def run(self): + """ + Executes the logic based on the parsed command and subcommand. + """ + if self.args.command == "ucs": + if self.args.subcommand == "setup_proxy": + # Validate sudo secret before any host changes (e.g. .bashrc rewrite) + self._resolve_secret(ENV_SUDO_PASSWORD, "sudo_password") + self._configure_ucs_proxies() + elif self.args.subcommand == "setup_veos_image": + self._setup_veos_image() + elif self.args.subcommand == "load_docker_image": + self._load_docker_image_from_url(self.args.image_url) + elif self.args.subcommand == "apply_intel_driver_workaround": + self._apply_intel_driver_workaround() + elif self.args.subcommand == "apply_cpu_softlock_workaround": + self._apply_cpu_softlock_workaround() + + elif self.args.command == "sonic_test_env": + if self.args.subcommand == "create": + # Validate git secrets before any destructive actions (workspace removal) + self._resolve_secret(ENV_GIT_USER, "git_user") + self._resolve_secret(ENV_GIT_TOKEN, "git_token") + + # Ensure proxies are set for current execution (only relevant for 'create') + container_proxies = self.args.container_proxy if self.args.container_proxy else SONIC_MGMT_CONTAINER_PROXY_DEFAULTS + for key, value in container_proxies.items(): + os.environ[key.lower()] = value + os.environ[key.upper()] = value + + # Execute Setup Sequence (Clean -> Git -> Image -> Launch) + # On failure, attempt to clean up the partially-created workspace. + self._remove_workspace_resources() + try: + self._setup_git_repository() + self._manage_docker_image() + self._launch_sonic_mgmt_container() + except Exception: + self.logger.error("Workspace creation failed. Cleaning up partially-created resources...") + try: + self._remove_workspace_resources() + except Exception as cleanup_err: + self.logger.error(f"Cleanup also failed: {cleanup_err}") + raise + + elif self.args.subcommand == "remove": + # Execute Removal Only + self._remove_workspace_resources() + +def parse_arguments(): + """ + Parses command line arguments with nested subcommands structure. + """ + parser = argparse.ArgumentParser(description="SONiC Test Environment Setup Automation", allow_abbrev=False) + subparsers = parser.add_subparsers(dest="command", required=True, help="Main command") + + # ========================================== + # Command 1: ucs (Host Configuration) + # ========================================== + parser_ucs = subparsers.add_parser("ucs", help="Configure UCS Host (proxies, workarounds, docker images, veos images)", allow_abbrev=False) + ucs_subparsers = parser_ucs.add_subparsers(dest="subcommand", required=True, help="UCS Setup Subcommands") + + # 1.a setup_proxy + parser_proxy = ucs_subparsers.add_parser("setup_proxy", help="Configure UCS Host Proxies (.bashrc and /etc/apt/apt.conf)", allow_abbrev=False) + parser_proxy.add_argument( + "--proxy", + required=False, + type=json.loads, + help='JSON string of proxies for the UCS Host. If omitted, uses defaults.' + ) + parser_proxy.add_argument( + "--sudo_password", + required=False, + default=None, + help=f"Sudo password for writing to /etc/apt/apt.conf. Falls back to {ENV_SUDO_PASSWORD} env var." + ) + + # 1.b setup_veos_image + parser_veos = ucs_subparsers.add_parser("setup_veos_image", help="Download vEOS image to UCS and put them into ~/veos-vm/images", allow_abbrev=False) + parser_veos.add_argument( + "--image_url", + required=True, + help="HTTP URL to the vEOS image file" + ) + + # 1.c load_docker_image + parser_docker = ucs_subparsers.add_parser("load_docker_image", help="Download and load an arbitrary Docker image", allow_abbrev=False) + parser_docker.add_argument( + "--image_url", + required=True, + help="HTTP URL to the Docker image tarball" + ) + + # 1.d apply_intel_driver_workaround + parser_intel = ucs_subparsers.add_parser("apply_intel_driver_workaround", help="Apply Intel i40e LLDP workaround", allow_abbrev=False) + parser_intel.add_argument( + "--sudo_password", + required=False, + default=None, + help=f"Sudo password for the UCS user. Falls back to {ENV_SUDO_PASSWORD} env var." + ) + + # 1.e apply_cpu_softlock_workaround + parser_cpu = ucs_subparsers.add_parser("apply_cpu_softlock_workaround", help="Apply CPU soft lockup workaround", allow_abbrev=False) + parser_cpu.add_argument( + "--sudo_password", + required=False, + default=None, + help=f"Sudo password for the UCS user. Falls back to {ENV_SUDO_PASSWORD} env var." + ) + + # ========================================== + # Command 2: sonic_test_env (Workspace Management) + # ========================================== + parser_env = subparsers.add_parser("sonic_test_env", help="Manage SONiC Test Workspaces (Create/Remove)", allow_abbrev=False) + env_subparsers = parser_env.add_subparsers(dest="subcommand", required=True, help="Workspace Actions") + + # 2.a create (Create/Setup Workspace) + parser_create = env_subparsers.add_parser("create", help="Create and setup a new SONiC test workspace", allow_abbrev=False) + parser_create.add_argument("--workspace_name", required=True, help="Unique identifier for the workspace. Used for directory name (~/sonic_test_workspaces/{workspace_name}) and container name.") + parser_create.add_argument("--git_repo_url", default="wwwin-github.cisco.com/whitebox/sonic-test", help="Git repo URL") + parser_create.add_argument("--git_branch", required=True, help="Git branch to clone") + parser_create.add_argument("--git_user", required=False, default=None, help=f"Git username. Falls back to {ENV_GIT_USER} env var.") + parser_create.add_argument("--git_token", required=False, default=None, help=f"Git access token. Falls back to {ENV_GIT_TOKEN} env var.") + parser_create.add_argument("--sonic_mgmt_image_url", required=True, help="URL to sonic-mgmt docker image") + parser_create.add_argument("--sonic_mgmt_image_tag", default="latest", help="sonic mgmt docker image tag") + parser_create.add_argument("--container_log_mount_dir", help="Log mount path (defaults to ~/test_logs if not set)") + parser_create.add_argument( + "--container_proxy", + required=False, + type=json.loads, + help='JSON string of proxies for the Docker container.' + ) + + # 2.b remove (Delete Workspace) + parser_remove = env_subparsers.add_parser("remove", help="Remove an existing workspace (Container and Directory)", allow_abbrev=False) + parser_remove.add_argument( + "--workspace_name", + required=True, + help="Unique identifier for the workspace to remove." + ) + + return parser.parse_args() + +# ============================================================================== +# Process Command-Line Secret Sanitization +# ============================================================================== + +# Sentinel env var — when set, the current process is the re-exec'd (clean) one +_SANITIZED_MARKER = "_SONIC_SETUP_ARGS_SANITIZED" + +# CLI arg name → target env var +_SECRET_ARGS = { + "--git_token": ENV_GIT_TOKEN, + "--git_user": ENV_GIT_USER, + "--sudo_password": ENV_SUDO_PASSWORD, +} + + +def _sanitize_process_args(): + """ + Prevents secrets from appearing in ``ps aux`` / ``/proc//cmdline``. + + When a user passes secrets as CLI arguments (e.g. ``--git_token ``), + the entire command line — including those secrets — is visible to every user + on the system via ``ps aux``. + + This function: + 1. Scans ``sys.argv`` for known secret arguments. + 2. Moves their values into environment variables (env vars are + per-process and NOT visible in ``ps aux``). + 3. Re-executes the script via ``os.execv`` with a **clean** argv + that no longer contains the secrets. + + A sentinel environment variable (_SONIC_SETUP_ARGS_SANITIZED) is set before + re-exec to guarantee the function is a no-op on the second invocation and + to prevent infinite loops. + + If no secret CLI arguments are detected, no re-exec happens and the + function returns immediately. + """ + # Already re-exec'd — nothing to do + if os.environ.get(_SANITIZED_MARKER): + return + + clean_argv = [] + skip_next = False + secrets_found = False + + for i, arg in enumerate(sys.argv): + if skip_next: + skip_next = False + continue + + # --secret_name value (space-separated) + if arg in _SECRET_ARGS: + if i + 1 < len(sys.argv): + os.environ[_SECRET_ARGS[arg]] = sys.argv[i + 1] + skip_next = True + secrets_found = True + # else: missing value — let argparse report the error after re-exec + continue # always drop the arg name from clean_argv + + # --secret_name=value (equals-separated) + found_eq = False + for secret_arg, env_var in _SECRET_ARGS.items(): + if arg.startswith(f"{secret_arg}="): + os.environ[env_var] = arg.split("=", 1)[1] + secrets_found = True + found_eq = True + break + + if not found_eq: + clean_argv.append(arg) + + if not secrets_found: + return + + # Mark as sanitized so the next invocation is a no-op + os.environ[_SANITIZED_MARKER] = "1" + + # Build the full interpreter command. + # sys.orig_argv (Python 3.10+) preserves interpreter flags like -u, -O, etc. + # Fall back to [sys.executable] + clean_argv for older versions. + if hasattr(sys, "orig_argv"): + # orig_argv = ['python3', '-u', 'script.py', ...args...] + # Replace everything from the script path onward with clean_argv. + script_name = sys.argv[0] + try: + idx = sys.orig_argv.index(script_name) + interp_prefix = sys.orig_argv[:idx] + except ValueError: + interp_prefix = [sys.executable] + exec_argv = interp_prefix + clean_argv + else: + exec_argv = [sys.executable] + clean_argv + + os.execvp(exec_argv[0], exec_argv) + +# ============================================================================== +# All env vars that may contain secrets and should be cleaned up after execution +# ============================================================================== +_SECRET_ENV_VARS = [ENV_GIT_TOKEN, ENV_GIT_USER, ENV_SUDO_PASSWORD, _SANITIZED_MARKER] + + +def main(): + # Strip secrets from the process command line before anything else. + # After this call, secrets (if any were on the CLI) live only in env vars. + _sanitize_process_args() + + # Check if no arguments were provided + if len(sys.argv) == 1: + help_msg = """ + ============================================================================== + SONiC Test Environment Setup Script + ============================================================================== + + Secret Handling (CI/CD & Manual): + --------------------------------- + Secrets can be provided via CLI arguments OR environment variables. + CLI arguments take priority; env vars are used as fallback. + + --sudo_password / CICD_UCS_SUDO_PASSWORD + --git_user / CICD_GIT_USER + --git_token / CICD_GIT_TOKEN + + When secrets are passed as CLI arguments, the script automatically + moves them into environment variables and re-executes itself with a + clean command line so that secrets never appear in ``ps aux``. + + CI/CD example (secrets in env vars, nothing on the command line): + export CICD_UCS_SUDO_PASSWORD="..." + export CICD_GIT_USER="..." + export CICD_GIT_TOKEN="..." + python3 do_sonic_test_env_setup.py ucs setup_proxy + python3 do_sonic_test_env_setup.py sonic_test_env create \\ + --workspace_name "cicd_prod_202505" --git_branch "master" \\ + --sonic_mgmt_image_url "http://..." + + Usage Examples (Manual): + + 1. UCS Host Setup (One-time or Maintenance): + ----------------------------------------- + python3 do_sonic_test_env_setup.py ucs setup_proxy \\ + --proxy '{"http_proxy": "http://sonic-build-rtp.cisco.com:3128/", "no_proxy": "http://sonic-build-rtp.cisco.com:3128/"}' --sudo_password "pass" + python3 do_sonic_test_env_setup.py ucs setup_veos_image --image_url "http://172.27.147.154/IMAGES/sonic-test-env/cEOS/cEOS64-lab-4.29.5M.tar" + python3 do_sonic_test_env_setup.py ucs load_docker_image --image_url "http://172.27.147.154/IMAGES/sonic-test-env/debian/debian-bookworm.tar.gz" + python3 do_sonic_test_env_setup.py ucs apply_intel_driver_workaround --sudo_password "pass" + python3 do_sonic_test_env_setup.py ucs apply_cpu_softlock_workaround --sudo_password "pass" + + 2. SONiC Test Environment Management: + ---------------------------------- + a) Create/Setup a Workspace: + python3 do_sonic_test_env_setup.py sonic_test_env create \\ + --workspace_name "cicd_prod_202505" \\ + --git_branch "master" \\ + --git_user "cicd_user" \\ + --git_token "ghp_AbCdEf123456" \\ + --sonic_mgmt_image_url "http://172.27.147.154/IMAGES/sonic-test-env/sonic-mgmt/sept090425-sonic-mgmt.tar.gz" \\ + --sonic_mgmt_image_tag "latest" \\ # (Optional) Defaults to 'latest' + --git_repo_url "wwwin-github.cisco.com/whitebox/sonic-test" \\ # (Optional) Defaults to 'whitebox/sonic-test' + --container_log_mount_dir "/home/sonic/test_logs" \\ # (Optional) Defaults to /home/{user}/test_logs + --container_proxy '{"no_proxy": ".cisco.com"}' # (Optional) Defaults to '{"NO_PROXY": ".cisco.com", "no_proxy": ".cisco.com"}' + + b) Remove a Workspace: + python3 do_sonic_test_env_setup.py sonic_test_env remove \\ + --workspace_name "cicd_prod_202505" + + For detailed help, run: + python3 do_sonic_test_env_setup.py ucs --help + python3 do_sonic_test_env_setup.py sonic_test_env create --help + python3 do_sonic_test_env_setup.py sonic_test_env remove --help + ============================================================================== + """ + print(textwrap.dedent(help_msg)) + sys.exit(1) + + args = parse_arguments() + + try: + # Initialize and run + automation = SonicTestEnvSetup(args) + automation.run() + finally: + # Clean up secret env vars so they don't linger in the process environment + for env_var in _SECRET_ENV_VARS: + os.environ.pop(env_var, None) + +if __name__ == "__main__": + main() diff --git a/infra/fanouts-configs/sonic-ucs-m3-4/leaf-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m3-4/leaf-fanout/config_db.json new file mode 100644 index 00000000000..98086e28873 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m3-4/leaf-fanout/config_db.json @@ -0,0 +1,1416 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "docker_routing_config_mode": "separated", + "hostname": "chu-fanout", + "hwsku": "32x400Gb", + "mac": "6C:13:D5:76:F8:00", + "platform": "x86_64-8101_32fh_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "telemetry": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_4_0_3" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet176": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet248": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m3-4/root-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m3-4/root-fanout/config_db.json new file mode 100644 index 00000000000..40e57fd2e17 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m3-4/root-fanout/config_db.json @@ -0,0 +1,2161 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "BREAKOUT_CFG": { + "Ethernet0": { + "brkout_mode": "1x100G" + }, + "Ethernet4": { + "brkout_mode": "1x100G" + }, + "Ethernet8": { + "brkout_mode": "1x100G" + }, + "Ethernet12": { + "brkout_mode": "1x100G" + }, + "Ethernet16": { + "brkout_mode": "1x100G" + }, + "Ethernet20": { + "brkout_mode": "1x100G" + }, + "Ethernet24": { + "brkout_mode": "1x100G" + }, + "Ethernet28": { + "brkout_mode": "1x100G" + }, + "Ethernet32": { + "brkout_mode": "1x100G" + }, + "Ethernet36": { + "brkout_mode": "1x100G" + }, + "Ethernet40": { + "brkout_mode": "1x100G" + }, + "Ethernet44": { + "brkout_mode": "1x100G" + }, + "Ethernet48": { + "brkout_mode": "1x100G" + }, + "Ethernet52": { + "brkout_mode": "1x100G" + }, + "Ethernet56": { + "brkout_mode": "1x100G" + }, + "Ethernet60": { + "brkout_mode": "1x100G" + }, + "Ethernet64": { + "brkout_mode": "1x100G" + }, + "Ethernet68": { + "brkout_mode": "1x100G" + }, + "Ethernet72": { + "brkout_mode": "1x100G" + }, + "Ethernet76": { + "brkout_mode": "1x100G" + }, + "Ethernet80": { + "brkout_mode": "1x100G" + }, + "Ethernet84": { + "brkout_mode": "1x100G" + }, + "Ethernet88": { + "brkout_mode": "1x100G" + }, + "Ethernet92": { + "brkout_mode": "1x100G" + }, + "Ethernet96": { + "brkout_mode": "1x100G" + }, + "Ethernet100": { + "brkout_mode": "1x100G" + }, + "Ethernet104": { + "brkout_mode": "1x100G" + }, + "Ethernet108": { + "brkout_mode": "1x100G" + }, + "Ethernet112": { + "brkout_mode": "1x100G" + }, + "Ethernet116": { + "brkout_mode": "1x100G" + }, + "Ethernet120": { + "brkout_mode": "1x100G" + }, + "Ethernet124": { + "brkout_mode": "1x100G" + }, + "Ethernet128": { + "brkout_mode": "1x100G" + }, + "Ethernet132": { + "brkout_mode": "1x100G" + }, + "Ethernet136": { + "brkout_mode": "1x100G" + }, + "Ethernet140": { + "brkout_mode": "1x100G" + }, + "Ethernet144": { + "brkout_mode": "1x100G" + }, + "Ethernet148": { + "brkout_mode": "1x100G" + }, + "Ethernet152": { + "brkout_mode": "1x100G" + }, + "Ethernet156": { + "brkout_mode": "1x100G" + }, + "Ethernet160": { + "brkout_mode": "1x100G" + }, + "Ethernet164": { + "brkout_mode": "1x100G" + }, + "Ethernet168": { + "brkout_mode": "1x100G" + }, + "Ethernet172": { + "brkout_mode": "1x100G" + }, + "Ethernet176": { + "brkout_mode": "1x100G" + }, + "Ethernet180": { + "brkout_mode": "1x100G" + }, + "Ethernet184": { + "brkout_mode": "1x100G" + }, + "Ethernet188": { + "brkout_mode": "1x100G" + }, + "Ethernet192": { + "brkout_mode": "1x100G" + }, + "Ethernet196": { + "brkout_mode": "1x100G" + }, + "Ethernet200": { + "brkout_mode": "1x100G" + }, + "Ethernet204": { + "brkout_mode": "1x100G" + }, + "Ethernet208": { + "brkout_mode": "1x100G" + }, + "Ethernet212": { + "brkout_mode": "1x100G" + }, + "Ethernet216": { + "brkout_mode": "1x100G" + }, + "Ethernet220": { + "brkout_mode": "1x100G" + }, + "Ethernet224": { + "brkout_mode": "1x100G" + }, + "Ethernet228": { + "brkout_mode": "1x100G" + }, + "Ethernet232": { + "brkout_mode": "1x100G" + }, + "Ethernet236": { + "brkout_mode": "1x100G" + }, + "Ethernet240": { + "brkout_mode": "1x100G" + }, + "Ethernet244": { + "brkout_mode": "1x100G" + }, + "Ethernet248": { + "brkout_mode": "1x100G" + }, + "Ethernet252": { + "brkout_mode": "4x10G" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-1", + "hwsku": "Cisco-8102-C64", + "mac": "BC:E7:12:81:F1:6C", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|1.74.25.11/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63a", + "index": "63", + "lanes": "532", + "speed": "10000", + "subport": "1" + }, + "Ethernet253": { + "admin_status": "up", + "alias": "etp63b", + "index": "63", + "lanes": "533", + "speed": "10000", + "subport": "2" + }, + "Ethernet254": { + "admin_status": "up", + "alias": "etp63c", + "index": "63", + "lanes": "534", + "speed": "10000", + "subport": "3" + }, + "Ethernet255": { + "admin_status": "up", + "alias": "etp63d", + "index": "63", + "lanes": "535", + "speed": "10000", + "subport": "4" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet253": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet253": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m4-3/config_db.json b/infra/fanouts-configs/sonic-ucs-m4-3/config_db.json new file mode 100644 index 00000000000..7a2f0592a62 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m4-3/config_db.json @@ -0,0 +1,1651 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "croc-t1-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "5C:31:92:08:25:10", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp1", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp2", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp3", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp4", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp5", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp6", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp7", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp8", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp9", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp10", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp11", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp12", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp13", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp14", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp15", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp16", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp17", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp18", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp19", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp20", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp21", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp22", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp23", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp24", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp25", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp26", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp27", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp28", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp29", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp30", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp31", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp32", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp33", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp34", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp35", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp36", + "index": "35", + "lanes": "1292", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp37", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp38", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp39", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp40", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp41", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp42", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp43", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp44", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp45", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp46", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp47", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp48", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp49", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp50", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp51", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp52", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp53", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp54", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp55", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp56", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp57", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp58", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp59", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp60", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp61", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp62", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp63", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp64", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "telemetry": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_4_0_3" + } + }, + "VLAN": { + "Vlan1681": { + "vlanid": "1681" + }, + "Vlan1682": { + "vlanid": "1682" + }, + "Vlan1683": { + "vlanid": "1683" + }, + "Vlan1684": { + "vlanid": "1684" + }, + "Vlan1685": { + "vlanid": "1685" + }, + "Vlan1686": { + "vlanid": "1686" + }, + "Vlan1687": { + "vlanid": "1687" + }, + "Vlan1688": { + "vlanid": "1688" + }, + "Vlan1689": { + "vlanid": "1689" + }, + "Vlan1690": { + "vlanid": "1690" + }, + "Vlan1691": { + "vlanid": "1691" + }, + "Vlan1692": { + "vlanid": "1692" + }, + "Vlan1693": { + "vlanid": "1693" + }, + "Vlan1694": { + "vlanid": "1694" + }, + "Vlan1695": { + "vlanid": "1695" + }, + "Vlan1696": { + "vlanid": "1696" + }, + "Vlan1697": { + "vlanid": "1697" + }, + "Vlan1698": { + "vlanid": "1698" + }, + "Vlan1699": { + "vlanid": "1699" + }, + "Vlan1700": { + "vlanid": "1700" + }, + "Vlan1701": { + "vlanid": "1701" + }, + "Vlan1702": { + "vlanid": "1702" + }, + "Vlan1703": { + "vlanid": "1703" + }, + "Vlan1704": { + "vlanid": "1704" + }, + "Vlan1705": { + "vlanid": "1705" + }, + "Vlan1706": { + "vlanid": "1706" + }, + "Vlan1707": { + "vlanid": "1707" + }, + "Vlan1708": { + "vlanid": "1708" + }, + "Vlan1709": { + "vlanid": "1709" + }, + "Vlan1710": { + "vlanid": "1710" + }, + "Vlan1711": { + "vlanid": "1711" + }, + "Vlan1712": { + "vlanid": "1712" + }, + "Vlan1713": { + "vlanid": "1713" + } + }, + "VLAN_MEMBER": { + "Vlan1681|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan1681|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1682|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan1682|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1683|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan1683|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1684|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan1684|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1685|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan1685|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1686|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan1686|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1687|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan1687|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1688|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan1688|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1689|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan1689|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1690|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan1690|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1691|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan1691|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1692|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan1692|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1693|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan1693|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1694|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan1694|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1695|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan1695|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1696|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan1696|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1697|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan1697|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1698|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan1698|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1699|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan1699|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1700|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan1700|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1701|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan1701|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1702|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan1702|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1703|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan1703|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1704|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan1704|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1705|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan1705|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1706|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan1706|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1707|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan1707|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1708|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan1708|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1709|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan1709|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1710|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan1710|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1711|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan1711|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1712|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan1712|Ethernet140": { + "tagging_mode": "tagged" + }, + "Vlan1713|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan1713|Ethernet140": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m5-1/nexus-leaf1/config.txt b/infra/fanouts-configs/sonic-ucs-m5-1/nexus-leaf1/config.txt new file mode 100644 index 00000000000..b326f627c33 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-1/nexus-leaf1/config.txt @@ -0,0 +1,313 @@ + +version 9.3(5) Bios:version 05.39 +hostname nexus-leaf1 +vdc nexus-leaf1 id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource u4route-mem minimum 248 maximum 248 + limit-resource u6route-mem minimum 96 maximum 96 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + limit-resource vni_bd minimum 4096 maximum 4096 + +feature privilege + +no password strength-check +username admin password 5 $5$JMJKNC$xuFig.5t0/0DnkxzFhzbt4eladHBUnI0MFf5UOYeZPD role network-admin +ip domain-lookup +copp profile strict +snmp-server user admin network-admin auth md5 0xf78c95a9509f7c50125ef229c810cea7 priv 0xf78c95a9509f7c50125ef229c810cea7 localizedkey +rmon event 1 log trap public description FATAL(1) owner PMON@FATAL +rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL +rmon event 3 log trap public description ERROR(3) owner PMON@ERROR +rmon event 4 log trap public description WARNING(4) owner PMON@WARNING +rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO + +ip route 0.0.0.0/0 1.74.23.7 +ip route 0.0.0.0/0 mgmt0 1.74.23.7 +vlan 1,100,200,1000,2032-2063 + +vrf context management + ip route 0.0.0.0/0 1.74.23.7 + +interface Ethernet1/1 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2032 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/2 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2033 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/3 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2034 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/4 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2035 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/5 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2036 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/6 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2037 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/7 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2038 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/8 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2039 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/9 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2040 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/10 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2041 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/11 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2042 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/12 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2043 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/13 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2044 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/14 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2045 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/15 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2046 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/16 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2047 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/17 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2048 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/18 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2049 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/19 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2050 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/20 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2051 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/21 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2052 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/22 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2053 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/23 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2054 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/24 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2055 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/25 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2056 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/26 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2057 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/27 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2058 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + switchport + switchport mode dot1q-tunnel + switchport access vlan 2060 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/30 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2061 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/31 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2062 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/32 + switchport + switchport mode dot1q-tunnel + switchport access vlan 2063 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/33 + switchport + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 2032-2063 + spanning-tree bpdufilter enable + mtu 9216 + no shutdown + +interface Ethernet1/34 + speed 40000 + no negotiate auto + no shutdown + +interface Ethernet1/35 + speed 40000 + no negotiate auto + no shutdown + +interface Ethernet1/36 + speed 40000 + no negotiate auto + no shutdown + +interface mgmt0 + vrf member management + ip address 1.74.23.205/16 +icam monitor scale + +line console +line vty +boot nxos bootflash:/nxos.9.3.5.bin + + diff --git a/infra/fanouts-configs/sonic-ucs-m5-1/nexus-leaf2/config.txt b/infra/fanouts-configs/sonic-ucs-m5-1/nexus-leaf2/config.txt new file mode 100644 index 00000000000..542b5aff055 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-1/nexus-leaf2/config.txt @@ -0,0 +1,264 @@ + + +version 9.3(5) Bios:version 05.39 +hostname nexus-leaf2 +vdc nexus-leaf2 id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource u4route-mem minimum 248 maximum 248 + limit-resource u6route-mem minimum 96 maximum 96 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + limit-resource vni_bd minimum 4096 maximum 4096 + +feature privilege +feature bash-shell + +no password strength-check +username admin password 5 $5$BMPHDD$pec6Ulwi2ij3vc/bCijr2YUiw6BmEvWu/a.38wYjeXB role network-admin +username admin role priv-15 +ip domain-lookup +system default switchport +copp profile strict +snmp-server user admin network-admin auth md5 0xe523934377c492d6e3a00c6880affaf6 priv 0xe523934377c492d6e3a00c6880affaf6 localizedkey +snmp-server user admin priv-15 +rmon event 1 log trap public description FATAL(1) owner PMON@FATAL +rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL +rmon event 3 log trap public description ERROR(3) owner PMON@ERROR +rmon event 4 log trap public description WARNING(4) owner PMON@WARNING +rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO + +ip route 0.0.0.0/0 1.74.23.7 +ip route 0.0.0.0/0 mgmt0 1.74.23.7 +vlan 1,100,200,1000,2064-2095 + +vrf context management + ip route 0.0.0.0/0 1.74.23.7 + +interface Ethernet1/1 + switchport mode dot1q-tunnel + switchport access vlan 2064 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/2 + switchport mode dot1q-tunnel + switchport access vlan 2065 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/3 + switchport mode dot1q-tunnel + switchport access vlan 2066 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/4 + switchport mode dot1q-tunnel + switchport access vlan 2067 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/5 + switchport mode dot1q-tunnel + switchport access vlan 2068 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/6 + switchport mode dot1q-tunnel + switchport access vlan 2069 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/7 + switchport mode dot1q-tunnel + switchport access vlan 2072 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/8 + switchport mode dot1q-tunnel + switchport access vlan 2075 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/9 + switchport mode dot1q-tunnel + switchport access vlan 2070 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/10 + switchport mode dot1q-tunnel + switchport access vlan 2071 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/11 + switchport mode dot1q-tunnel + switchport access vlan 2073 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/12 + switchport mode dot1q-tunnel + switchport access vlan 2074 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/13 + switchport mode dot1q-tunnel + switchport access vlan 2077 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/14 + switchport mode dot1q-tunnel + switchport access vlan 2078 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/15 + switchport mode dot1q-tunnel + switchport access vlan 2081 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/16 + switchport mode dot1q-tunnel + switchport access vlan 2076 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/17 + switchport mode dot1q-tunnel + switchport access vlan 2079 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/18 + switchport mode dot1q-tunnel + switchport access vlan 2080 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/19 + switchport mode dot1q-tunnel + switchport access vlan 2083 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/20 + switchport mode dot1q-tunnel + switchport access vlan 2084 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/21 + switchport mode dot1q-tunnel + switchport access vlan 2087 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/22 + switchport mode dot1q-tunnel + switchport access vlan 2082 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/23 + switchport mode dot1q-tunnel + switchport access vlan 2085 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/24 + switchport mode dot1q-tunnel + switchport access vlan 2086 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/25 + switchport mode dot1q-tunnel + switchport access vlan 2089 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/26 + switchport mode dot1q-tunnel + switchport access vlan 2090 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/27 + switchport mode dot1q-tunnel + switchport access vlan 2093 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/28 + switchport mode dot1q-tunnel + switchport access vlan 2088 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/29 + switchport mode dot1q-tunnel + switchport access vlan 2091 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/30 + switchport mode dot1q-tunnel + switchport access vlan 2092 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/31 + switchport mode dot1q-tunnel + switchport access vlan 2094 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/32 + switchport mode dot1q-tunnel + switchport access vlan 2095 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/33 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 1,2064-2095 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/34 + +interface Ethernet1/35 + switchport mode dot1q-tunnel + spanning-tree bpdufilter enable + mtu 9216 + speed 40000 + no negotiate auto + +interface Ethernet1/36 + switchport mode dot1q-tunnel + spanning-tree bpdufilter enable + mtu 9216 + speed 40000 + no negotiate auto + +interface mgmt0 + vrf member management + ip address 1.74.23.204/16 +icam monitor scale + +line console +line vty +boot nxos bootflash:/nxos.9.3.5.bin +no system default switchport shutdown + + diff --git a/infra/fanouts-configs/sonic-ucs-m5-1/nexus-root/config.txt b/infra/fanouts-configs/sonic-ucs-m5-1/nexus-root/config.txt new file mode 100644 index 00000000000..4f26039de8e --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-1/nexus-root/config.txt @@ -0,0 +1,279 @@ +version 9.3(5) Bios:version 05.39 +hostname nexus-root +vdc nexus-root id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource u4route-mem minimum 248 maximum 248 + limit-resource u6route-mem minimum 96 maximum 96 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + limit-resource vni_bd minimum 4096 maximum 4096 + +feature privilege +feature telnet +feature bash-shell +feature interface-vlan +feature vtp + +username admin password 5 $5$Cm6/gSBv$SSlPEFbo4NFiNMhPhIOZ0vsOiIPvi/Dml4/VmjmHmv6 role network-admin +ip domain-lookup +system default switchport +vlan dot1Q tag native +interface breakout module 1 port 35 map 10g-4x +copp profile strict +vtp domain cisco +snmp-server user admin network-admin auth md5 0x6025fc5d41ed9f7d7aac6ba9c65ec761 priv 0x6025fc5d41ed9f7d7aac6ba9c65ec761 localizedkey +rmon event 1 log trap public description FATAL(1) owner PMON@FATAL +rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL +rmon event 3 log trap public description ERROR(3) owner PMON@ERROR +rmon event 4 log trap public description WARNING(4) owner PMON@WARNING +rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO + +ip route 0.0.0.0/0 1.74.23.7 +ip route 0.0.0.0/0 mgmt0 1.74.23.7 +vlan 1,100,200,1000,1601-1631,2000-2095 + +no spanning-tree vlan 1-3967 +vrf context management + ip route 0.0.0.0/0 1.74.23.7 + + +interface Vlan1 + no shutdown + +interface Ethernet1/1 + switchport mode dot1q-tunnel + switchport access vlan 2000 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + duplex full + no negotiate auto + +interface Ethernet1/2 + switchport mode dot1q-tunnel + switchport access vlan 2001 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/3 + switchport mode dot1q-tunnel + switchport access vlan 2002 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/4 + switchport mode dot1q-tunnel + switchport access vlan 2003 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/5 + switchport mode dot1q-tunnel + switchport access vlan 2004 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/6 + switchport mode dot1q-tunnel + switchport access vlan 2005 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/7 + switchport mode dot1q-tunnel + switchport access vlan 2006 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/8 + switchport mode dot1q-tunnel + switchport access vlan 2007 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/9 + switchport mode dot1q-tunnel + switchport access vlan 2008 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/10 + switchport mode dot1q-tunnel + switchport access vlan 2009 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/11 + switchport mode dot1q-tunnel + switchport access vlan 2010 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/12 + switchport mode dot1q-tunnel + switchport access vlan 2011 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/13 + switchport mode dot1q-tunnel + switchport access vlan 2012 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/14 + switchport mode dot1q-tunnel + switchport access vlan 2013 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/15 + switchport mode dot1q-tunnel + switchport access vlan 2014 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/16 + switchport mode dot1q-tunnel + switchport access vlan 2015 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/17 + switchport mode dot1q-tunnel + switchport access vlan 2016 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/18 + switchport mode dot1q-tunnel + switchport access vlan 2017 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/19 + switchport mode dot1q-tunnel + switchport access vlan 2018 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/20 + switchport mode dot1q-tunnel + switchport access vlan 2019 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/21 + switchport mode dot1q-tunnel + switchport access vlan 2020 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/22 + switchport mode dot1q-tunnel + switchport access vlan 2021 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/23 + switchport mode dot1q-tunnel + switchport access vlan 2022 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/24 + switchport mode dot1q-tunnel + switchport access vlan 2023 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/25 + switchport mode dot1q-tunnel + switchport access vlan 2024 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/26 + switchport mode dot1q-tunnel + switchport access vlan 2025 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/27 + switchport mode dot1q-tunnel + switchport access vlan 2026 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/28 + switchport mode dot1q-tunnel + switchport access vlan 2027 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/29 + switchport mode dot1q-tunnel + switchport access vlan 2028 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/30 + switchport mode dot1q-tunnel + switchport access vlan 2029 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/31 + switchport mode dot1q-tunnel + switchport access vlan 2030 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/32 + switchport mode dot1q-tunnel + switchport access vlan 2031 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/33 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 2032-2063 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/34 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 1,2064-2095 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/35/1 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 1,2000-2095 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/35/2 + +interface Ethernet1/35/3 + +interface Ethernet1/35/4 + +interface Ethernet1/36 + +interface mgmt0 + vrf member management + ip address 1.74.23.201/16 +line console +line vty +boot nxos bootflash:/nxos.9.3.5.bin +boot order bootflash +no feature signature-verification +no system default switchport shutdown + + diff --git a/infra/fanouts-configs/sonic-ucs-m5-11/config_db.json b/infra/fanouts-configs/sonic-ucs-m5-11/config_db.json new file mode 100644 index 00000000000..7fed996b28b --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-11/config_db.json @@ -0,0 +1,1465 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hwsku": "Cisco-8201-32FH-O", + "mac": "60:26:AA:5A:14:00", + "platform": "x86_64-8201_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "40000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "fec": "rs", + "index": "16", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "0", + "tpid": "0x9100" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2048": { + "vlanid": "2048" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet120": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet248": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m5-16/croc-fanout1/config_db.json b/infra/fanouts-configs/sonic-ucs-m5-16/croc-fanout1/config_db.json new file mode 100644 index 00000000000..847f4d0636a --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-16/croc-fanout1/config_db.json @@ -0,0 +1,1308 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hwsku": "Cisco-8111-O32", + "mac": "BA:DB:AD:3E:C8:00", + "platform": "x86_64-8111_32eh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "disabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "3080,3081,3082,3083,3084,3085,3086,3087", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "3072,3073,3074,3075,3076,3077,3078,3079", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "3336,3337,3338,3339,3340,3341,3342,3343", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "3328,3329,3330,3331,3332,3333,3334,3335", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "3840,3841,3842,3843,3844,3845,3846,3847", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "3848,3849,3850,3851,3852,3853,3854,3855", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "3584,3585,3586,3587,3588,3589,3590,3591", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "3592,3593,3594,3595,3596,3597,3598,3599", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet128": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m5-16/croc-fanout2/config_db.json b/infra/fanouts-configs/sonic-ucs-m5-16/croc-fanout2/config_db.json new file mode 100644 index 00000000000..048df06308d --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-16/croc-fanout2/config_db.json @@ -0,0 +1,1427 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hwsku": "Cisco-8111-O32", + "mac": "FC:58:9A:17:9A:00", + "platform": "x86_64-8111_32eh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "disabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "3080,3081,3082,3083,3084,3085,3086,3087", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "3072,3073,3074,3075,3076,3077,3078,3079", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "3336,3337,3338,3339,3340,3341,3342,3343", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "3328,3329,3330,3331,3332,3333,3334,3335", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "3840,3841,3842,3843,3844,3845,3846,3847", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "3848,3849,3850,3851,3852,3853,3854,3855", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "3584,3585,3586,3587,3588,3589,3590,3591", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "3592,3593,3594,3595,3596,3597,3598,3599", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet160": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m5-2/config_db.json b/infra/fanouts-configs/sonic-ucs-m5-2/config_db.json new file mode 100644 index 00000000000..ecca918cbb5 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-2/config_db.json @@ -0,0 +1,1364 @@ +{ + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "nexus-m5-2", + "hwsku": "Cisco-8102-C64", + "platform": "x86_64-8102_64h_o-r0", + "mac": "8C:94:61:56:F7:C8", + "timezone": "UTC" + } + }, + "PORT": { + "Ethernet0": { + "alias": "etp0", + "lanes": "2304,2305,2306,2307", + "speed": "100000", + "index": "0", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet4": { + "alias": "etp1", + "lanes": "2308,2309,2310,2311", + "speed": "100000", + "index": "1", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet8": { + "alias": "etp2", + "lanes": "2320,2321,2322,2323", + "speed": "100000", + "index": "2", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet12": { + "alias": "etp3", + "lanes": "2324,2325,2326,2327", + "speed": "100000", + "index": "3", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet16": { + "alias": "etp4", + "lanes": "2312,2313,2314,2315", + "speed": "100000", + "index": "4", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet20": { + "alias": "etp5", + "lanes": "2316,2317,2318,2319", + "speed": "100000", + "index": "5", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet24": { + "alias": "etp6", + "lanes": "2056,2057,2058,2059", + "speed": "100000", + "index": "6", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet28": { + "alias": "etp7", + "lanes": "2060,2061,2062,2063", + "speed": "100000", + "index": "7", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet32": { + "alias": "etp8", + "lanes": "1792,1793,1794,1795", + "speed": "100000", + "index": "8", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet36": { + "alias": "etp9", + "lanes": "1796,1797,1798,1799", + "speed": "100000", + "index": "9", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet40": { + "alias": "etp10", + "lanes": "2048,2049,2050,2051", + "speed": "100000", + "index": "10", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet44": { + "alias": "etp11", + "lanes": "2052,2053,2054,2055", + "speed": "100000", + "index": "11", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet48": { + "alias": "etp12", + "lanes": "2560,2561,2562,2563", + "speed": "100000", + "index": "12", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet52": { + "alias": "etp13", + "lanes": "2564,2565,2566,2567", + "speed": "100000", + "index": "13", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet56": { + "alias": "etp14", + "lanes": "2824,2825,2826,2827", + "speed": "100000", + "index": "14", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet60": { + "alias": "etp15", + "lanes": "2828,2829,2830,2831", + "speed": "100000", + "index": "15", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet64": { + "alias": "etp16", + "lanes": "2832,2833,2834,2835", + "speed": "100000", + "index": "16", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet68": { + "alias": "etp17", + "lanes": "2836,2837,2838,2839", + "speed": "100000", + "index": "17", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet72": { + "alias": "etp18", + "lanes": "2816,2817,2818,2819", + "speed": "100000", + "index": "18", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet76": { + "alias": "etp19", + "lanes": "2820,2821,2822,2823", + "speed": "100000", + "index": "19", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet80": { + "alias": "etp20", + "lanes": "2568,2569,2570,2571", + "speed": "100000", + "index": "20", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet84": { + "alias": "etp21", + "lanes": "2572,2573,2574,2575", + "speed": "100000", + "index": "21", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet88": { + "alias": "etp22", + "lanes": "2576,2577,2578,2579", + "speed": "100000", + "index": "22", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet92": { + "alias": "etp23", + "lanes": "2580,2581,2582,2583", + "speed": "100000", + "index": "23", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet96": { + "alias": "etp24", + "lanes": "1536,1537,1538,1539", + "speed": "100000", + "index": "24", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet100": { + "alias": "etp25", + "lanes": "1540,1541,1542,1543", + "speed": "100000", + "index": "25", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet104": { + "alias": "etp26", + "lanes": "1800,1801,1802,1803", + "speed": "100000", + "index": "26", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet108": { + "alias": "etp27", + "lanes": "1804,1805,1806,1807", + "speed": "100000", + "index": "27", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet112": { + "alias": "etp28", + "lanes": "1552,1553,1554,1555", + "speed": "100000", + "index": "28", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet116": { + "alias": "etp29", + "lanes": "1556,1557,1558,1559", + "speed": "100000", + "index": "29", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet120": { + "alias": "etp30", + "lanes": "1544,1545,1546,1547", + "speed": "100000", + "index": "30", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet124": { + "alias": "etp31", + "lanes": "1548,1549,1550,1551", + "speed": "100000", + "index": "31", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet128": { + "alias": "etp32", + "lanes": "1296,1297,1298,1299", + "speed": "100000", + "index": "32", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet132": { + "alias": "etp33", + "lanes": "1300,1301,1302,1303", + "speed": "100000", + "index": "33", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet136": { + "alias": "etp34", + "lanes": "1288,1289,1290,1291", + "speed": "100000", + "index": "34", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet140": { + "alias": "etp35", + "lanes": "1292,1293,1294,1295", + "speed": "100000", + "index": "35", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet144": { + "alias": "etp36", + "lanes": "1280,1281,1282,1283", + "speed": "100000", + "index": "36", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet148": { + "alias": "etp37", + "lanes": "1284,1285,1286,1287", + "speed": "100000", + "index": "37", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet152": { + "alias": "etp38", + "lanes": "1032,1033,1034,1035", + "speed": "100000", + "index": "38", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet156": { + "alias": "etp39", + "lanes": "1036,1037,1038,1039", + "speed": "100000", + "index": "39", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet160": { + "alias": "etp40", + "lanes": "264,265,266,267", + "speed": "100000", + "index": "40", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet164": { + "alias": "etp41", + "lanes": "268,269,270,271", + "speed": "100000", + "index": "41", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet168": { + "alias": "etp42", + "lanes": "272,273,274,275", + "speed": "100000", + "index": "42", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet172": { + "alias": "etp43", + "lanes": "276,277,278,279", + "speed": "100000", + "index": "43", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet176": { + "alias": "etp44", + "lanes": "20,21,22,23", + "speed": "100000", + "index": "44", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet180": { + "alias": "etp45", + "lanes": "16,17,18,19", + "speed": "100000", + "index": "45", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet184": { + "alias": "etp46", + "lanes": "4,5,6,7", + "speed": "100000", + "index": "46", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet188": { + "alias": "etp47", + "lanes": "0,1,2,3", + "speed": "100000", + "index": "47", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet192": { + "alias": "etp48", + "lanes": "256,257,258,259", + "speed": "100000", + "index": "48", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet196": { + "alias": "etp49", + "lanes": "260,261,262,263", + "speed": "100000", + "index": "49", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet200": { + "alias": "etp50", + "lanes": "12,13,14,15", + "speed": "100000", + "index": "50", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet204": { + "alias": "etp51", + "lanes": "8,9,10,11", + "speed": "100000", + "index": "51", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet208": { + "alias": "etp52", + "lanes": "1024,1025,1026,1027", + "speed": "100000", + "index": "52", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet212": { + "alias": "etp53", + "lanes": "1028,1029,1030,1031", + "speed": "100000", + "index": "53", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet216": { + "alias": "etp54", + "lanes": "768,769,770,771", + "speed": "100000", + "index": "54", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet220": { + "alias": "etp55", + "lanes": "772,773,774,775", + "speed": "100000", + "index": "55", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet224": { + "alias": "etp56", + "lanes": "524,525,526,527", + "speed": "100000", + "index": "56", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet228": { + "alias": "etp57", + "lanes": "520,521,522,523", + "speed": "100000", + "index": "57", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet232": { + "alias": "etp58", + "lanes": "776,777,778,779", + "speed": "100000", + "index": "58", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet236": { + "alias": "etp59", + "lanes": "780,781,782,783", + "speed": "100000", + "index": "59", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet240": { + "alias": "etp60", + "lanes": "516,517,518,519", + "speed": "100000", + "index": "60", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet244": { + "alias": "etp61", + "lanes": "512,513,514,515", + "speed": "100000", + "index": "61", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet248": { + "alias": "etp62", + "lanes": "528,529,530,531", + "speed": "100000", + "index": "62", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet252": { + "alias": "etp63", + "lanes": "532", + "speed": "10000", + "index": "63", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + } + }, + "BREAKOUT_CFG": { + "Ethernet0": { + "brkout_mode": "1x100G" + }, + "Ethernet4": { + "brkout_mode": "1x100G" + }, + "Ethernet8": { + "brkout_mode": "1x100G" + }, + "Ethernet12": { + "brkout_mode": "1x100G" + }, + "Ethernet16": { + "brkout_mode": "1x100G" + }, + "Ethernet20": { + "brkout_mode": "1x100G" + }, + "Ethernet24": { + "brkout_mode": "1x100G" + }, + "Ethernet28": { + "brkout_mode": "1x100G" + }, + "Ethernet32": { + "brkout_mode": "1x100G" + }, + "Ethernet36": { + "brkout_mode": "1x100G" + }, + "Ethernet40": { + "brkout_mode": "1x100G" + }, + "Ethernet44": { + "brkout_mode": "1x100G" + }, + "Ethernet48": { + "brkout_mode": "1x100G" + }, + "Ethernet52": { + "brkout_mode": "1x100G" + }, + "Ethernet56": { + "brkout_mode": "1x100G" + }, + "Ethernet60": { + "brkout_mode": "1x100G" + }, + "Ethernet64": { + "brkout_mode": "1x100G" + }, + "Ethernet68": { + "brkout_mode": "1x100G" + }, + "Ethernet72": { + "brkout_mode": "1x100G" + }, + "Ethernet76": { + "brkout_mode": "1x100G" + }, + "Ethernet80": { + "brkout_mode": "1x100G" + }, + "Ethernet84": { + "brkout_mode": "1x100G" + }, + "Ethernet88": { + "brkout_mode": "1x100G" + }, + "Ethernet92": { + "brkout_mode": "1x100G" + }, + "Ethernet96": { + "brkout_mode": "1x100G" + }, + "Ethernet100": { + "brkout_mode": "1x100G" + }, + "Ethernet104": { + "brkout_mode": "1x100G" + }, + "Ethernet108": { + "brkout_mode": "1x100G" + }, + "Ethernet112": { + "brkout_mode": "1x100G" + }, + "Ethernet116": { + "brkout_mode": "1x100G" + }, + "Ethernet120": { + "brkout_mode": "1x100G" + }, + "Ethernet124": { + "brkout_mode": "1x100G" + }, + "Ethernet128": { + "brkout_mode": "1x100G" + }, + "Ethernet132": { + "brkout_mode": "1x100G" + }, + "Ethernet136": { + "brkout_mode": "1x100G" + }, + "Ethernet140": { + "brkout_mode": "1x100G" + }, + "Ethernet144": { + "brkout_mode": "1x100G" + }, + "Ethernet148": { + "brkout_mode": "1x100G" + }, + "Ethernet152": { + "brkout_mode": "1x100G" + }, + "Ethernet156": { + "brkout_mode": "1x100G" + }, + "Ethernet160": { + "brkout_mode": "1x100G" + }, + "Ethernet164": { + "brkout_mode": "1x100G" + }, + "Ethernet168": { + "brkout_mode": "1x100G" + }, + "Ethernet172": { + "brkout_mode": "1x100G" + }, + "Ethernet176": { + "brkout_mode": "1x100G" + }, + "Ethernet180": { + "brkout_mode": "1x100G" + }, + "Ethernet184": { + "brkout_mode": "1x100G" + }, + "Ethernet188": { + "brkout_mode": "1x100G" + }, + "Ethernet192": { + "brkout_mode": "1x100G" + }, + "Ethernet196": { + "brkout_mode": "1x100G" + }, + "Ethernet200": { + "brkout_mode": "1x100G" + }, + "Ethernet204": { + "brkout_mode": "1x100G" + }, + "Ethernet208": { + "brkout_mode": "1x100G" + }, + "Ethernet212": { + "brkout_mode": "1x100G" + }, + "Ethernet216": { + "brkout_mode": "1x100G" + }, + "Ethernet220": { + "brkout_mode": "1x100G" + }, + "Ethernet224": { + "brkout_mode": "1x100G" + }, + "Ethernet228": { + "brkout_mode": "1x100G" + }, + "Ethernet232": { + "brkout_mode": "1x100G" + }, + "Ethernet236": { + "brkout_mode": "1x100G" + }, + "Ethernet240": { + "brkout_mode": "1x100G" + }, + "Ethernet244": { + "brkout_mode": "1x100G" + }, + "Ethernet248": { + "brkout_mode": "1x100G" + }, + "Ethernet252": { + "brkout_mode": "1x10G(1)" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_STATUS": "disable", + "FLEX_COUNTER_DELAY_STATUS": "true", + "POLL_INTERVAL": "10000" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m5-3/config_db.json b/infra/fanouts-configs/sonic-ucs-m5-3/config_db.json new file mode 100644 index 00000000000..7cc6f693898 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-3/config_db.json @@ -0,0 +1,1538 @@ +{ + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "m64-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "8C:94:61:57:09:EC", + "platform": "x86_64-8102_64h_o-r0" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "always_enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled" + }, + "lldp": { + "auto_restart": "disabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "macsec": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mux": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_disabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "MGMT_INTERFACE": { + "eth0|1.74.23.30/24": {} + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532", + "mtu": "9100", + "speed": "10000" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_3_0_7" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m5-4/nexus-leaf/config.txt b/infra/fanouts-configs/sonic-ucs-m5-4/nexus-leaf/config.txt new file mode 100644 index 00000000000..9f90b29564d --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-4/nexus-leaf/config.txt @@ -0,0 +1,321 @@ + + +!Command: show running-config +!Running configuration last done at: Fri Dec 19 12:35:35 2025 +!Time: Fri Dec 19 13:08:13 2025 + +version 9.3(5) Bios:version 05.39 +hostname nexus-vt2-leaf +vdc nexus-vt2-leaf id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource u4route-mem minimum 248 maximum 248 + limit-resource u6route-mem minimum 96 maximum 96 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + limit-resource vni_bd minimum 4096 maximum 4096 + +feature privilege +feature telnet +feature bash-shell +feature interface-vlan +feature vtp + +no password strength-check +username admin password 5 $5$OKOCBD$9UbeT9hNO7GuMWuWeypvc9KXMM8D/XGG0SlU5TPPL47 role network-admin +username admin role priv-15 +username shelladmin password 5 $5$BIAMGN$4a5iiPAsc/YGkszpXAn0oS9GUTjow8fk3Btfp2FQUn7 role network-operator +username shelladmin role priv-15 +username shelladmin shelltype bash +username shelladmin passphrase lifetime 99999 warntime 14 gracetime 3 +ip domain-lookup +system default switchport +vlan dot1Q tag native +interface breakout module 1 port 35 map 10g-4x +copp profile strict +snmp-server user admin network-admin auth md5 0x6466bd66745e86d74f8a34135b7d2e5c priv 0x6466bd66745e86d74f8a34135b7d2e5c localizedkey +snmp-server user admin priv-15 +snmp-server user shelladmin network-operator auth md5 0x8fb2007950fd454da5812c2e1684ab8c priv 0x8fb2007950fd454da5812c2e1684ab8c localizedkey +snmp-server user shelladmin priv-15 +rmon event 1 log trap public description FATAL(1) owner PMON@FATAL +rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL +rmon event 3 log trap public description ERROR(3) owner PMON@ERROR +rmon event 4 log trap public description WARNING(4) owner PMON@WARNING +rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO + +ip route 0.0.0.0/0 1.72.33.7 +ip route 0.0.0.0/0 mgmt0 1.72.33.7 +vlan 1,2000-2034 + +no spanning-tree vlan 1-3967 +vrf context management + ip route 0.0.0.0/0 1.72.33.7 + + +interface Vlan1 + no shutdown + +interface Ethernet1/1 + switchport access vlan 2000 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/2 + switchport mode dot1q-tunnel + switchport access vlan 2001 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/3 + switchport mode dot1q-tunnel + switchport access vlan 2002 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/4 + switchport mode dot1q-tunnel + switchport access vlan 2003 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/5 + switchport mode dot1q-tunnel + switchport access vlan 2004 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/6 + switchport mode dot1q-tunnel + switchport access vlan 2005 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/7 + switchport mode dot1q-tunnel + switchport access vlan 2006 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/8 + switchport mode dot1q-tunnel + switchport access vlan 2007 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/9 + switchport mode dot1q-tunnel + switchport access vlan 2008 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/10 + switchport mode dot1q-tunnel + switchport access vlan 2009 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/11 + switchport mode dot1q-tunnel + switchport access vlan 2010 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/12 + switchport mode dot1q-tunnel + switchport access vlan 2011 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/13 + switchport mode dot1q-tunnel + switchport access vlan 2012 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/14 + switchport mode dot1q-tunnel + switchport access vlan 2013 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/15 + switchport mode dot1q-tunnel + switchport access vlan 2014 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/16 + switchport mode dot1q-tunnel + switchport access vlan 2015 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/17 + switchport mode dot1q-tunnel + switchport access vlan 2016 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/18 + switchport mode dot1q-tunnel + switchport access vlan 2017 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/19 + switchport mode dot1q-tunnel + switchport access vlan 2018 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/20 + switchport mode dot1q-tunnel + switchport access vlan 2019 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/21 + switchport mode dot1q-tunnel + switchport access vlan 2020 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/22 + switchport mode dot1q-tunnel + switchport access vlan 2021 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/23 + switchport mode dot1q-tunnel + switchport access vlan 2022 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/24 + switchport mode dot1q-tunnel + switchport access vlan 2023 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/25 + switchport mode dot1q-tunnel + switchport access vlan 2024 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/26 + switchport mode dot1q-tunnel + switchport access vlan 2025 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/27 + switchport mode dot1q-tunnel + switchport access vlan 2026 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/28 + switchport mode dot1q-tunnel + switchport access vlan 2027 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/29 + switchport mode dot1q-tunnel + switchport access vlan 2028 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/30 + switchport mode dot1q-tunnel + switchport access vlan 2029 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/31 + switchport mode dot1q-tunnel + switchport access vlan 2030 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/32 + switchport mode dot1q-tunnel + switchport access vlan 2031 + spanning-tree bpdufilter enable + mtu 9216 + fec off + +interface Ethernet1/33 + fec off + +interface Ethernet1/34 + fec off + +interface Ethernet1/35/1 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 1,2000-2031 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/35/2 + no switchport + mtu 9216 + no shutdown + +interface Ethernet1/35/3 + +interface Ethernet1/35/4 + +interface Ethernet1/36 + fec off + +interface mgmt0 + ip address dhcp + vrf member management +icam monitor scale + +line console +line vty +boot nxos bootflash:/nxos.9.3.5.bin +no system default switchport shutdown +monitor session 1 + source interface Ethernet1/35/1 both + destination interface sup-eth0 + no shut + + diff --git a/infra/fanouts-configs/sonic-ucs-m5-4/nexus-root/config.txt b/infra/fanouts-configs/sonic-ucs-m5-4/nexus-root/config.txt new file mode 100644 index 00000000000..7a2f993d7b8 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m5-4/nexus-root/config.txt @@ -0,0 +1,656 @@ + + +!Command: show running-config +!Running configuration last done at: Fri Dec 19 12:44:42 2025 +!Time: Fri Dec 19 13:28:35 2025 + +version 9.3(5) Bios:version 05.43 +hostname nexus-vt2-root +vdc nexus-vt2-root id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource u4route-mem minimum 248 maximum 248 + limit-resource u6route-mem minimum 96 maximum 96 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + limit-resource vni_bd minimum 4096 maximum 4096 + +feature privilege +feature telnet +feature bash-shell +feature interface-vlan +feature vtp + +no password strength-check +username admin password 5 $5$NELMKN$QWzbI2sheutUVQyGE8.Zvug55cuaZHDFQol92.qbpDA role network-admin +username admin role priv-15 +username shelladmin password 5 $5$MBHEKI$jDpR0G2qqpGiUz1NMThzKFDHNIwfXLgki3HqJNFsO0/ role network-operator +username shelladmin role priv-15 +username shelladmin role network-admin +username shelladmin shelltype bash +username shelladmin passphrase lifetime 99999 warntime 7 +ip domain-lookup +system default switchport +errdisable recovery interval 30 +no errdisable detect cause link-flap +errdisable recovery cause link-flap +errdisable recovery cause udld +errdisable recovery cause bpduguard +no errdisable detect cause loopback +errdisable recovery cause loopback +errdisable recovery cause storm-control +errdisable recovery cause security-violation +errdisable recovery cause psecure-violation +errdisable recovery cause vpc-peerlink +errdisable recovery cause failed-port-state +errdisable recovery cause dcbx-no-ack +vlan dot1Q tag native +copp profile strict +snmp-server user admin network-admin auth md5 0x6b6dbf83b5099bfa1d8ba3f496111f85 priv 0x6b6dbf83b5099bfa1d8ba3f496111f85 localizedkey +snmp-server user admin priv-15 +snmp-server user shelladmin network-operator auth md5 0xd35ae37ac7992deebccd63c24a91111f priv 0xd35ae37ac7992deebccd63c24a91111f localizedkey +snmp-server user shelladmin priv-15 +snmp-server user shelladmin network-admin +rmon event 1 description FATAL(1) owner PMON@FATAL +rmon event 2 description CRITICAL(2) owner PMON@CRITICAL +rmon event 3 description ERROR(3) owner PMON@ERROR +rmon event 4 description WARNING(4) owner PMON@WARNING +rmon event 5 description INFORMATION(5) owner PMON@INFO +snmp-server community public group network-admin + +ip route 0.0.0.0/0 1.72.33.7 +ip route 0.0.0.0/0 mgmt0 1.72.33.7 +vlan 1,2000-2095 + +no spanning-tree vlan 1-3967 +vrf context management + ip route 0.0.0.0/0 1.72.0.1 + ip route 0.0.0.0/0 1.72.33.7 + + +interface Vlan1 + no shutdown + +interface Ethernet1/1 + switchport mode dot1q-tunnel + switchport access vlan 2032 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/2 + switchport mode dot1q-tunnel + switchport access vlan 2033 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/3 + switchport mode dot1q-tunnel + switchport access vlan 2034 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/4 + switchport mode dot1q-tunnel + switchport access vlan 2035 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/5 + switchport mode dot1q-tunnel + switchport access vlan 2036 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/6 + switchport mode dot1q-tunnel + switchport access vlan 2037 + switchport trunk allowed vlan 1,2000-2031 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/7 + switchport mode dot1q-tunnel + switchport access vlan 2038 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/8 + switchport mode dot1q-tunnel + switchport access vlan 2039 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/9 + switchport mode dot1q-tunnel + switchport access vlan 2040 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/10 + switchport mode dot1q-tunnel + switchport access vlan 2041 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/11 + switchport mode dot1q-tunnel + switchport access vlan 2042 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/12 + switchport mode dot1q-tunnel + switchport access vlan 2043 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/13 + switchport mode dot1q-tunnel + switchport access vlan 2044 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/14 + switchport mode dot1q-tunnel + switchport access vlan 2045 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/15 + switchport mode dot1q-tunnel + switchport access vlan 2046 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/16 + switchport mode dot1q-tunnel + switchport access vlan 2047 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/17 + switchport mode dot1q-tunnel + switchport access vlan 2048 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/18 + switchport mode dot1q-tunnel + switchport access vlan 2049 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/19 + switchport mode dot1q-tunnel + switchport access vlan 2050 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/20 + switchport mode dot1q-tunnel + switchport access vlan 2051 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/21 + switchport mode dot1q-tunnel + switchport access vlan 2052 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/22 + switchport mode dot1q-tunnel + switchport access vlan 2053 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/23 + switchport mode dot1q-tunnel + switchport access vlan 2054 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/24 + switchport mode dot1q-tunnel + switchport access vlan 2055 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/25 + switchport mode dot1q-tunnel + switchport access vlan 2056 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/26 + switchport mode dot1q-tunnel + switchport access vlan 2057 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/27 + switchport mode dot1q-tunnel + switchport access vlan 2058 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/28 + switchport mode dot1q-tunnel + switchport access vlan 2059 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/29 + switchport mode dot1q-tunnel + switchport access vlan 2060 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/30 + switchport mode dot1q-tunnel + switchport access vlan 2061 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/31 + switchport mode dot1q-tunnel + switchport access vlan 2062 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/32 + switchport mode dot1q-tunnel + switchport access vlan 2063 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/33 + switchport mode dot1q-tunnel + switchport access vlan 2064 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/34 + switchport mode dot1q-tunnel + switchport access vlan 2065 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/35 + switchport mode dot1q-tunnel + switchport access vlan 2066 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/36 + switchport mode dot1q-tunnel + switchport access vlan 2067 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/37 + switchport mode dot1q-tunnel + switchport access vlan 2068 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/38 + switchport mode dot1q-tunnel + switchport access vlan 2069 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/39 + switchport mode dot1q-tunnel + switchport access vlan 2070 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/40 + switchport mode dot1q-tunnel + switchport access vlan 2071 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/41 + switchport mode dot1q-tunnel + switchport access vlan 2072 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/42 + switchport mode dot1q-tunnel + switchport access vlan 2073 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/43 + switchport mode dot1q-tunnel + switchport access vlan 2074 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/44 + switchport mode dot1q-tunnel + switchport access vlan 2075 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/45 + switchport mode dot1q-tunnel + switchport access vlan 2076 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/46 + switchport mode dot1q-tunnel + switchport access vlan 2077 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/47 + switchport mode dot1q-tunnel + switchport access vlan 2078 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/48 + switchport mode dot1q-tunnel + switchport access vlan 2079 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/49 + switchport mode dot1q-tunnel + switchport access vlan 2080 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/50 + switchport mode dot1q-tunnel + switchport access vlan 2081 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/51 + switchport mode dot1q-tunnel + switchport access vlan 2082 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/52 + switchport mode dot1q-tunnel + switchport access vlan 2083 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/53 + switchport mode dot1q-tunnel + switchport access vlan 2084 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + fec off + no negotiate auto + +interface Ethernet1/54 + switchport mode dot1q-tunnel + switchport access vlan 2085 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/55 + switchport mode dot1q-tunnel + switchport access vlan 2086 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/56 + switchport mode dot1q-tunnel + switchport access vlan 2087 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/57 + switchport mode dot1q-tunnel + switchport access vlan 2088 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/58 + switchport mode dot1q-tunnel + switchport access vlan 2089 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/59 + switchport mode dot1q-tunnel + switchport access vlan 2090 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/60 + switchport mode dot1q-tunnel + switchport access vlan 2091 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/61 + switchport mode dot1q-tunnel + switchport access vlan 2092 + spanning-tree bpdufilter enable + mtu 9216 + speed 100000 + no negotiate auto + +interface Ethernet1/62 + switchport mode dot1q-tunnel + switchport access vlan 2093 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/63 + switchport mode dot1q-tunnel + switchport access vlan 2094 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/64 + switchport mode dot1q-tunnel + switchport access vlan 2095 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/65 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 1,2000-2095 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/66 + switchport mode trunk + switchport vlan mapping enable + switchport trunk allowed vlan 1,2000-2031 + spanning-tree bpdufilter enable + mtu 9216 + +interface mgmt0 + ip address dhcp + vrf member management +line console +line vty +boot nxos bootflash:/nxos.9.3.5.bin +no system default switchport shutdown + diff --git a/infra/fanouts-configs/sonic-ucs-m6-09/c28-lc1nx/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-09/c28-lc1nx/config_db.json new file mode 100644 index 00000000000..ade315b21d9 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-09/c28-lc1nx/config_db.json @@ -0,0 +1,1221 @@ +{ + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "c28-lc1nx", + "hwsku": "Cisco-8102-C64", + "mac": "dc:0b:09:e3:dd:14", + "platform": "x86_64-8102_64h_o-r0", + "synchronous_mode": "enable" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "always_enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled" + }, + "lldp": { + "auto_restart": "disabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "macsec": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mux": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_disabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp1", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp2", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp3", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp4", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp5", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp6", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp7", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp8", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp9", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp10", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp11", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp12", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp13", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp14", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp15", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp16", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp17", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp18", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp19", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp20", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp21", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp22", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp23", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp24", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp25", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp26", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp27", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp28", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp29", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp30", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp31", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp32", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet128": { + "admin_status": "down", + "alias": "etp33", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet132": { + "admin_status": "down", + "alias": "etp34", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet136": { + "admin_status": "down", + "alias": "etp35", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet140": { + "admin_status": "down", + "alias": "etp36", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet144": { + "admin_status": "down", + "alias": "etp37", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet148": { + "admin_status": "down", + "alias": "etp38", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet152": { + "admin_status": "down", + "alias": "etp39", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet156": { + "admin_status": "down", + "alias": "etp40", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet160": { + "admin_status": "down", + "alias": "etp41", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet164": { + "admin_status": "down", + "alias": "etp42", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet168": { + "admin_status": "down", + "alias": "etp43", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet172": { + "admin_status": "down", + "alias": "etp44", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet176": { + "admin_status": "down", + "alias": "etp45", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet180": { + "admin_status": "down", + "alias": "etp46", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet184": { + "admin_status": "down", + "alias": "etp47", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet188": { + "admin_status": "down", + "alias": "etp48", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet192": { + "admin_status": "down", + "alias": "etp49", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet196": { + "admin_status": "down", + "alias": "etp50", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet200": { + "admin_status": "down", + "alias": "etp51", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet204": { + "admin_status": "down", + "alias": "etp52", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet208": { + "admin_status": "down", + "alias": "etp53", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet212": { + "admin_status": "down", + "alias": "etp54", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet216": { + "admin_status": "down", + "alias": "etp55", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet220": { + "admin_status": "down", + "alias": "etp56", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet224": { + "admin_status": "down", + "alias": "etp57", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet228": { + "admin_status": "down", + "alias": "etp58", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet232": { + "admin_status": "down", + "alias": "etp59", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet236": { + "admin_status": "down", + "alias": "etp60", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet240": { + "admin_status": "down", + "alias": "etp61", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet244": { + "admin_status": "down", + "alias": "etp62", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet248": { + "admin_status": "down", + "alias": "etp63", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp64", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_3_0_6" + } + }, + "VLAN": { + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2032|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2063|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-09/c28-lc7nx/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-09/c28-lc7nx/config_db.json new file mode 100644 index 00000000000..707b6d89e13 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-09/c28-lc7nx/config_db.json @@ -0,0 +1,1920 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "BREAKOUT_CFG": { + "Ethernet0": { + "brkout_mode": "1x100G" + }, + "Ethernet4": { + "brkout_mode": "1x100G" + }, + "Ethernet8": { + "brkout_mode": "1x100G" + }, + "Ethernet12": { + "brkout_mode": "1x100G" + }, + "Ethernet16": { + "brkout_mode": "1x100G" + }, + "Ethernet20": { + "brkout_mode": "1x100G" + }, + "Ethernet24": { + "brkout_mode": "1x100G" + }, + "Ethernet28": { + "brkout_mode": "1x100G" + }, + "Ethernet32": { + "brkout_mode": "1x100G" + }, + "Ethernet36": { + "brkout_mode": "1x100G" + }, + "Ethernet40": { + "brkout_mode": "1x100G" + }, + "Ethernet44": { + "brkout_mode": "1x100G" + }, + "Ethernet48": { + "brkout_mode": "1x100G" + }, + "Ethernet52": { + "brkout_mode": "1x100G" + }, + "Ethernet56": { + "brkout_mode": "1x100G" + }, + "Ethernet60": { + "brkout_mode": "1x100G" + }, + "Ethernet64": { + "brkout_mode": "1x100G" + }, + "Ethernet68": { + "brkout_mode": "1x100G" + }, + "Ethernet72": { + "brkout_mode": "1x100G" + }, + "Ethernet76": { + "brkout_mode": "1x100G" + }, + "Ethernet80": { + "brkout_mode": "1x100G" + }, + "Ethernet84": { + "brkout_mode": "1x100G" + }, + "Ethernet88": { + "brkout_mode": "1x100G" + }, + "Ethernet92": { + "brkout_mode": "1x100G" + }, + "Ethernet96": { + "brkout_mode": "1x100G" + }, + "Ethernet100": { + "brkout_mode": "1x100G" + }, + "Ethernet104": { + "brkout_mode": "1x100G" + }, + "Ethernet108": { + "brkout_mode": "1x100G" + }, + "Ethernet112": { + "brkout_mode": "1x100G" + }, + "Ethernet116": { + "brkout_mode": "1x100G" + }, + "Ethernet120": { + "brkout_mode": "1x100G" + }, + "Ethernet124": { + "brkout_mode": "1x100G" + }, + "Ethernet128": { + "brkout_mode": "1x100G" + }, + "Ethernet132": { + "brkout_mode": "1x100G" + }, + "Ethernet136": { + "brkout_mode": "1x100G" + }, + "Ethernet140": { + "brkout_mode": "1x100G" + }, + "Ethernet144": { + "brkout_mode": "1x100G" + }, + "Ethernet148": { + "brkout_mode": "1x100G" + }, + "Ethernet152": { + "brkout_mode": "1x100G" + }, + "Ethernet156": { + "brkout_mode": "1x100G" + }, + "Ethernet160": { + "brkout_mode": "1x100G" + }, + "Ethernet164": { + "brkout_mode": "1x100G" + }, + "Ethernet168": { + "brkout_mode": "1x100G" + }, + "Ethernet172": { + "brkout_mode": "1x100G" + }, + "Ethernet176": { + "brkout_mode": "1x100G" + }, + "Ethernet180": { + "brkout_mode": "1x100G" + }, + "Ethernet184": { + "brkout_mode": "1x100G" + }, + "Ethernet188": { + "brkout_mode": "1x100G" + }, + "Ethernet192": { + "brkout_mode": "1x100G" + }, + "Ethernet196": { + "brkout_mode": "1x100G" + }, + "Ethernet200": { + "brkout_mode": "1x100G" + }, + "Ethernet204": { + "brkout_mode": "1x100G" + }, + "Ethernet208": { + "brkout_mode": "1x100G" + }, + "Ethernet212": { + "brkout_mode": "1x100G" + }, + "Ethernet216": { + "brkout_mode": "1x100G" + }, + "Ethernet220": { + "brkout_mode": "1x100G" + }, + "Ethernet224": { + "brkout_mode": "1x100G" + }, + "Ethernet228": { + "brkout_mode": "1x100G" + }, + "Ethernet232": { + "brkout_mode": "1x100G" + }, + "Ethernet236": { + "brkout_mode": "1x100G" + }, + "Ethernet240": { + "brkout_mode": "1x100G" + }, + "Ethernet244": { + "brkout_mode": "1x100G" + }, + "Ethernet248": { + "brkout_mode": "1x100G" + }, + "Ethernet252": { + "brkout_mode": "1x100G" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "c28-lc7nx", + "hwsku": "Cisco-8102-C64", + "mac": "8C:94:61:56:FF:D8", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "fec": "rs", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_02" + } + }, + "VLAN": { + "Vlan2064": { + "vlanid": "2064" + }, + "Vlan2065": { + "vlanid": "2065" + }, + "Vlan2066": { + "vlanid": "2066" + }, + "Vlan2067": { + "vlanid": "2067" + }, + "Vlan2068": { + "vlanid": "2068" + }, + "Vlan2069": { + "vlanid": "2069" + }, + "Vlan2070": { + "vlanid": "2070" + }, + "Vlan2071": { + "vlanid": "2071" + }, + "Vlan2072": { + "vlanid": "2072" + }, + "Vlan2073": { + "vlanid": "2073" + }, + "Vlan2074": { + "vlanid": "2074" + }, + "Vlan2075": { + "vlanid": "2075" + }, + "Vlan2076": { + "vlanid": "2076" + }, + "Vlan2077": { + "vlanid": "2077" + }, + "Vlan2078": { + "vlanid": "2078" + }, + "Vlan2079": { + "vlanid": "2079" + }, + "Vlan2080": { + "vlanid": "2080" + }, + "Vlan2081": { + "vlanid": "2081" + }, + "Vlan2082": { + "vlanid": "2082" + }, + "Vlan2083": { + "vlanid": "2083" + }, + "Vlan2084": { + "vlanid": "2084" + }, + "Vlan2085": { + "vlanid": "2085" + }, + "Vlan2086": { + "vlanid": "2086" + }, + "Vlan2087": { + "vlanid": "2087" + }, + "Vlan2088": { + "vlanid": "2088" + }, + "Vlan2089": { + "vlanid": "2089" + }, + "Vlan2090": { + "vlanid": "2090" + }, + "Vlan2091": { + "vlanid": "2091" + }, + "Vlan2092": { + "vlanid": "2092" + }, + "Vlan2093": { + "vlanid": "2093" + }, + "Vlan2094": { + "vlanid": "2094" + }, + "Vlan2095": { + "vlanid": "2095" + } + }, + "VLAN_MEMBER": { + "Vlan2064|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2064|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2065|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2065|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2066|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2066|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2067|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2067|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2068|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2068|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2069|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2069|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2070|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2070|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2071|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2071|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2072|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2072|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2073|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2073|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2074|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2074|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2075|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2075|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2076|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2076|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2077|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2077|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2078|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2078|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2079|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2079|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2080|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2080|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2081|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2081|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2082|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2082|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2083|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2083|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2084|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2084|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2085|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2085|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2086|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2086|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2087|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2087|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2088|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2088|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2089|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2089|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2090|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2090|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2091|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2091|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2092|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2092|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2093|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2093|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2094|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2094|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2095|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2095|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-09/c28-leaf-churchill/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-09/c28-leaf-churchill/config_db.json new file mode 100644 index 00000000000..e548148cb69 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-09/c28-leaf-churchill/config_db.json @@ -0,0 +1,1241 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "c28-leaf-churchill", + "hwsku": "32x400Gb", + "mac": "58:56:9F:B1:86:00", + "platform": "x86_64-8101_32fh_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_02" + } + }, + "VLAN": { + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + } + }, + "VLAN_MEMBER": { + "Vlan2028|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-09/c28-root-chu/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-09/c28-root-chu/config_db.json new file mode 100644 index 00000000000..b4338fef047 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-09/c28-root-chu/config_db.json @@ -0,0 +1,1579 @@ +{ + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "c28-root-fanout", + "hwsku": "32x400Gb", + "mac": "F4:EE:31:FB:A2:00", + "platform": "x86_64-8101_32fh_o-r0", + "synchronous_mode": "enable" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "always_enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled" + }, + "lldp": { + "auto_restart": "disabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "macsec": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mux": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_disabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "40000", + "subport": "0" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_3_0_6" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + }, + "Vlan2064": { + "vlanid": "2064" + }, + "Vlan2065": { + "vlanid": "2065" + }, + "Vlan2066": { + "vlanid": "2066" + }, + "Vlan2067": { + "vlanid": "2067" + }, + "Vlan2068": { + "vlanid": "2068" + }, + "Vlan2069": { + "vlanid": "2069" + }, + "Vlan2070": { + "vlanid": "2070" + }, + "Vlan2071": { + "vlanid": "2071" + }, + "Vlan2072": { + "vlanid": "2072" + }, + "Vlan2073": { + "vlanid": "2073" + }, + "Vlan2074": { + "vlanid": "2074" + }, + "Vlan2075": { + "vlanid": "2075" + }, + "Vlan2076": { + "vlanid": "2076" + }, + "Vlan2077": { + "vlanid": "2077" + }, + "Vlan2078": { + "vlanid": "2078" + }, + "Vlan2079": { + "vlanid": "2079" + }, + "Vlan2080": { + "vlanid": "2080" + }, + "Vlan2081": { + "vlanid": "2081" + }, + "Vlan2082": { + "vlanid": "2082" + }, + "Vlan2083": { + "vlanid": "2083" + }, + "Vlan2084": { + "vlanid": "2084" + }, + "Vlan2085": { + "vlanid": "2085" + }, + "Vlan2086": { + "vlanid": "2086" + }, + "Vlan2087": { + "vlanid": "2087" + }, + "Vlan2088": { + "vlanid": "2088" + }, + "Vlan2089": { + "vlanid": "2089" + }, + "Vlan2090": { + "vlanid": "2090" + }, + "Vlan2091": { + "vlanid": "2091" + }, + "Vlan2092": { + "vlanid": "2092" + }, + "Vlan2093": { + "vlanid": "2093" + }, + "Vlan2094": { + "vlanid": "2094" + }, + "Vlan2095": { + "vlanid": "2095" + }, + "Vlan2096": { + "vlanid": "2096" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet224": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet224": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet224": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet232": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2064|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2064|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2065|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2065|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2066|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2066|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2067|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2067|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2068|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2068|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2069|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2069|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2070|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2070|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2071|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2071|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2072|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2072|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2073|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2073|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2074|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2074|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2075|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2075|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2076|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2076|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2077|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2077|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2078|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2078|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2079|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2079|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2080|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2080|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2081|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2081|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2082|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2082|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2083|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2083|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2084|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2084|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2085|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2085|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2086|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2086|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2087|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2087|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2088|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2088|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2089|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2089|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2090|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2090|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2091|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2091|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2092|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2092|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2093|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2093|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2094|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2094|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2095|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2095|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2096|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-1/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-1/config_db.json new file mode 100644 index 00000000000..c79f498005b --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-1/config_db.json @@ -0,0 +1,1533 @@ +{ + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "m6-1-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "80:27:6C:88:CE:4C", + "platform": "x86_64-8102_64h_o-r0" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "always_enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled" + }, + "lldp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "macsec": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mux": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "always_disabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "fec": "none", + "index": "63", + "lanes": "532", + "mtu": "9100", + "speed": "10000" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_3_0_7" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-11/churchill-1/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-11/churchill-1/config_db.json new file mode 100644 index 00000000000..08459d05e46 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-11/churchill-1/config_db.json @@ -0,0 +1,1443 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "yy39-chu-1", + "hwsku": "32x400Gb", + "mac": "58:56:9F:B1:84:00", + "platform": "x86_64-8101_32fh_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet248": { + "admin_status": "down", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "40000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet240": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-11/m64-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-11/m64-fanout/config_db.json new file mode 100644 index 00000000000..ca422271e02 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-11/m64-fanout/config_db.json @@ -0,0 +1,1996 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "yy39-m64-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "08:f3:fb:7f:44:44", + "platform": "x86_64-8102_64h_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp1", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp2", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp3", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp4", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp5", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp6", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp7", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp8", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp9", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp10", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp11", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp12", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp13", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp14", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp15", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp16", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp17", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp18", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp19", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp20", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp21", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp22", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp23", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp24", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp25", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp26", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp27", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp28", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp29", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp30", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp31", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp32", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp33", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp34", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp35", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp36", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp37", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp38", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp39", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp40", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp41", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp42", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp43", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp44", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp45", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp46", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp47", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp48", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp49", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp50", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp51", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp52", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp53", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp54", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp55", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp56", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp57", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp58", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp59", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp60", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp61", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp62", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp63", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp64", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan3000": { + "vlanid": "3000" + }, + "Vlan3001": { + "vlanid": "3001" + }, + "Vlan3002": { + "vlanid": "3002" + }, + "Vlan3003": { + "vlanid": "3003" + }, + "Vlan3004": { + "vlanid": "3004" + }, + "Vlan3005": { + "vlanid": "3005" + }, + "Vlan3006": { + "vlanid": "3006" + }, + "Vlan3007": { + "vlanid": "3007" + }, + "Vlan3008": { + "vlanid": "3008" + }, + "Vlan3009": { + "vlanid": "3009" + }, + "Vlan3010": { + "vlanid": "3010" + }, + "Vlan3011": { + "vlanid": "3011" + }, + "Vlan3012": { + "vlanid": "3012" + }, + "Vlan3013": { + "vlanid": "3013" + }, + "Vlan3014": { + "vlanid": "3014" + }, + "Vlan3015": { + "vlanid": "3015" + }, + "Vlan3016": { + "vlanid": "3016" + }, + "Vlan3017": { + "vlanid": "3017" + }, + "Vlan3018": { + "vlanid": "3018" + }, + "Vlan3019": { + "vlanid": "3019" + }, + "Vlan3020": { + "vlanid": "3020" + }, + "Vlan3021": { + "vlanid": "3021" + }, + "Vlan3022": { + "vlanid": "3022" + }, + "Vlan3023": { + "vlanid": "3023" + }, + "Vlan3024": { + "vlanid": "3024" + }, + "Vlan3025": { + "vlanid": "3025" + }, + "Vlan3026": { + "vlanid": "3026" + }, + "Vlan3027": { + "vlanid": "3027" + }, + "Vlan3028": { + "vlanid": "3028" + }, + "Vlan3029": { + "vlanid": "3029" + }, + "Vlan3030": { + "vlanid": "3030" + }, + "Vlan3031": { + "vlanid": "3031" + }, + "Vlan3032": { + "vlanid": "3032" + }, + "Vlan3033": { + "vlanid": "3033" + }, + "Vlan3034": { + "vlanid": "3034" + }, + "Vlan3035": { + "vlanid": "3035" + }, + "Vlan3036": { + "vlanid": "3036" + }, + "Vlan3037": { + "vlanid": "3037" + }, + "Vlan3038": { + "vlanid": "3038" + }, + "Vlan3039": { + "vlanid": "3039" + }, + "Vlan3040": { + "vlanid": "3040" + }, + "Vlan3041": { + "vlanid": "3041" + }, + "Vlan3042": { + "vlanid": "3042" + }, + "Vlan3043": { + "vlanid": "3043" + }, + "Vlan3044": { + "vlanid": "3044" + }, + "Vlan3045": { + "vlanid": "3045" + }, + "Vlan3046": { + "vlanid": "3046" + }, + "Vlan3047": { + "vlanid": "3047" + }, + "Vlan3048": { + "vlanid": "3048" + }, + "Vlan3049": { + "vlanid": "3049" + }, + "Vlan3050": { + "vlanid": "3050" + }, + "Vlan3051": { + "vlanid": "3051" + }, + "Vlan3052": { + "vlanid": "3052" + }, + "Vlan3053": { + "vlanid": "3053" + }, + "Vlan3054": { + "vlanid": "3054" + }, + "Vlan3055": { + "vlanid": "3055" + }, + "Vlan3056": { + "vlanid": "3056" + }, + "Vlan3057": { + "vlanid": "3057" + }, + "Vlan3058": { + "vlanid": "3058" + }, + "Vlan3059": { + "vlanid": "3059" + }, + "Vlan3060": { + "vlanid": "3060" + }, + "Vlan3061": { + "vlanid": "3061" + }, + "Vlan3062": { + "vlanid": "3062" + } + }, + "VLAN_MEMBER": { + "Vlan3000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan3000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan3001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan3002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan3003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan3004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan3005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan3006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan3007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan3008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan3009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan3010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan3011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan3012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan3013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan3014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan3015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan3016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan3017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan3018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan3019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan3020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan3021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan3022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan3023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan3024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan3025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan3026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan3027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan3028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan3029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan3030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan3031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan3032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan3033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan3034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan3035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan3036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan3037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan3038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan3039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan3040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan3041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan3042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan3043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan3044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan3045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan3046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan3047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan3048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan3049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan3050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan3051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan3052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan3053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan3054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan3055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan3056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan3057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan3058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3059|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan3059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan3060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3061|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan3061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan3062|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan3062|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-13/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-13/config_db.json new file mode 100644 index 00000000000..58f594545c4 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-13/config_db.json @@ -0,0 +1,1459 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-t0-fanout", + "hwsku": "Cisco-8101-32FH-O", + "mac": "98:A2:C0:27:62:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "40000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan1681": { + "vlanid": "1681" + }, + "Vlan1682": { + "vlanid": "1682" + }, + "Vlan1683": { + "vlanid": "1683" + }, + "Vlan1684": { + "vlanid": "1684" + }, + "Vlan1685": { + "vlanid": "1685" + }, + "Vlan1686": { + "vlanid": "1686" + }, + "Vlan1687": { + "vlanid": "1687" + }, + "Vlan1688": { + "vlanid": "1688" + }, + "Vlan1689": { + "vlanid": "1689" + }, + "Vlan1690": { + "vlanid": "1690" + }, + "Vlan1691": { + "vlanid": "1691" + }, + "Vlan1692": { + "vlanid": "1692" + }, + "Vlan1693": { + "vlanid": "1693" + }, + "Vlan1694": { + "vlanid": "1694" + }, + "Vlan1695": { + "vlanid": "1695" + }, + "Vlan1696": { + "vlanid": "1696" + }, + "Vlan1697": { + "vlanid": "1697" + }, + "Vlan1698": { + "vlanid": "1698" + }, + "Vlan1699": { + "vlanid": "1699" + }, + "Vlan1700": { + "vlanid": "1700" + }, + "Vlan1701": { + "vlanid": "1701" + }, + "Vlan1702": { + "vlanid": "1702" + }, + "Vlan1703": { + "vlanid": "1703" + }, + "Vlan1704": { + "vlanid": "1704" + }, + "Vlan1705": { + "vlanid": "1705" + }, + "Vlan1706": { + "vlanid": "1706" + }, + "Vlan1707": { + "vlanid": "1707" + }, + "Vlan1708": { + "vlanid": "1708" + }, + "Vlan1709": { + "vlanid": "1709" + }, + "Vlan1710": { + "vlanid": "1710" + }, + "Vlan1711": { + "vlanid": "1711" + } + }, + "VLAN_MEMBER": { + "Vlan1681|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan1681|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1682|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan1682|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1683|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan1683|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1684|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan1684|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1685|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan1685|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1686|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan1686|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1687|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan1687|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1688|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan1688|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1689|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan1689|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1690|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan1690|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1691|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan1691|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1692|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan1692|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1693|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan1693|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1694|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan1694|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1695|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan1695|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1696|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan1696|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1697|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan1697|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1698|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan1698|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1699|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan1699|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1700|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan1700|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1701|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan1701|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1702|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan1702|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1703|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan1703|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1704|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan1704|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1705|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan1705|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1706|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1706|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan1707|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1707|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan1708|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1708|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan1709|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1709|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan1710|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1710|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan1711|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1711|Ethernet248": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-16/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-16/config_db.json new file mode 100644 index 00000000000..599497f4cfe --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-16/config_db.json @@ -0,0 +1,1505 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_server": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false", + "wcmp_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "enable", + "hwsku": "Cisco-8101-32FH-O", + "mac": "68:79:09:0e:a3:10", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "dhcp_server": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "False" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3", + "remote": "false", + "ssh_path": "/a/b/c", + "ssh_string": "user@localhost" + } + }, + "LOGGER": { + "DomInfoUpdateTask": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + }, + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_APPLIANCE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_FLOW": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_HA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_PORT_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_TRUSTED_VNI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ICMP_ECHO": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PREFIX_COMPRESSION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYNCE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SfpStateUpdateTask": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "rebootbackend": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "telemetry": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "xcvrd": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + } + }, + "MGMT_INTERFACE": { + "eth0|1.2.24.106/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "dhcp_rate_limit": "300", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "dhcp_rate_limit": "300", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "dhcp_rate_limit": "300", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "dhcp_rate_limit": "300", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "dhcp_rate_limit": "300", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "dhcp_rate_limit": "300", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "dhcp_rate_limit": "300", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "dhcp_rate_limit": "300", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "dhcp_rate_limit": "300", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "dhcp_rate_limit": "300", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "dhcp_rate_limit": "300", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "dhcp_rate_limit": "300", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "dhcp_rate_limit": "300", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "dhcp_rate_limit": "300", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "dhcp_rate_limit": "300", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "dhcp_rate_limit": "300", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "dhcp_rate_limit": "300", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "dhcp_rate_limit": "300", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "dhcp_rate_limit": "300", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "dhcp_rate_limit": "300", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "dhcp_rate_limit": "300", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "dhcp_rate_limit": "300", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "dhcp_rate_limit": "300", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "dhcp_rate_limit": "300", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "dhcp_rate_limit": "300", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "dhcp_rate_limit": "300", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "dhcp_rate_limit": "300", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "dhcp_rate_limit": "300", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "dhcp_rate_limit": "300", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "dhcp_rate_limit": "300", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "dhcp_rate_limit": "300", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "dhcp_rate_limit": "300", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_server": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202505_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-18/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-18/config_db.json new file mode 100644 index 00000000000..b462c77acd2 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-18/config_db.json @@ -0,0 +1,1371 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout", + "hwsku": "32x400Gb", + "mac": "CC:36:CF:59:92:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|1.2.25.137/16": { + "gwaddr": "1.2.0.1" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "40000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "telemetry": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_4_0_3" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-19/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-19/config_db.json new file mode 100644 index 00000000000..f84a652e941 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-19/config_db.json @@ -0,0 +1,1495 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout", + "hwsku": "32x400Gb", + "mac": "CC:36:CF:59:9C:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|7.7.7.4/24": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "40000", + "subport": "0", + "tpid": "0x8100" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "telemetry": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan7": { + "vlanid": "7" + }, + "Vlan8": { + "vlanid": "8" + }, + "Vlan9": { + "vlanid": "9" + }, + "Vlan10": { + "vlanid": "10" + }, + "Vlan11": { + "vlanid": "11" + }, + "Vlan12": { + "vlanid": "12" + }, + "Vlan13": { + "vlanid": "13" + }, + "Vlan14": { + "vlanid": "14" + }, + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + } + }, + "VLAN_MEMBER": { + "Vlan7|Ethernet64": { + "tagging_mode": "tagged" + }, + "Vlan7|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan8|Ethernet64": { + "tagging_mode": "tagged" + }, + "Vlan8|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan9|Ethernet72": { + "tagging_mode": "tagged" + }, + "Vlan9|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan10|Ethernet72": { + "tagging_mode": "tagged" + }, + "Vlan10|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan11|Ethernet80": { + "tagging_mode": "tagged" + }, + "Vlan11|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan12|Ethernet80": { + "tagging_mode": "tagged" + }, + "Vlan12|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan13|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan13|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan14|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan14|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-2/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-2/config_db.json new file mode 100644 index 00000000000..a36a2dc9a9c --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-2/config_db.json @@ -0,0 +1,1961 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "t0-64-2-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "80:27:6C:20:42:D4", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-20/cmono-fanout1/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-20/cmono-fanout1/config_db.json new file mode 100644 index 00000000000..222306f0255 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-20/cmono-fanout1/config_db.json @@ -0,0 +1,1344 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "cmono-1-fanout", + "hwsku": "32x400Gb", + "mac": "A4:10:B6:82:64:00", + "platform": "x86_64-8101_32fh_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "disabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|4.164.1.122/24": { + "gwaddr": "4.164.1.120" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "tpid": "0x8100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "telemetry": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet128": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-20/cmono-fanout2/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-20/cmono-fanout2/config_db.json new file mode 100644 index 00000000000..7333dc5bfba --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-20/cmono-fanout2/config_db.json @@ -0,0 +1,1453 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hwsku": "Cisco-8101-32FH-O", + "mac": "68:E5:9E:76:78:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "disabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x8100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet128": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet160": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet176": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-22/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-22/config_db.json new file mode 100644 index 00000000000..c085a8c800c --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-22/config_db.json @@ -0,0 +1,2008 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "zz-2-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "8C:94:61:5B:22:0C", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|1.72.33.4/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "fec": "rs", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + } + } +} diff --git a/infra/fanouts-configs/sonic-ucs-m6-23/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-23/config_db.json new file mode 100644 index 00000000000..f484a505be3 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-23/config_db.json @@ -0,0 +1,2329 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "light-fanout", + "hwsku": "Cisco-8122-O128", + "mac": "E8:0A:B9:A6:5C:00", + "platform": "x86_64-8122_64eh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "disabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|4.164.1.193/24": { + "gwaddr": "4.164.1.222" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0a", + "index": "0", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp0b", + "index": "0", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1a", + "index": "1", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp1b", + "index": "1", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2a", + "index": "2", + "lanes": "1560,1561,1562,1563", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp2b", + "index": "2", + "lanes": "1564,1565,1566,1567", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3a", + "index": "3", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp3b", + "index": "3", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4a", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp4b", + "index": "4", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5a", + "index": "5", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp5b", + "index": "5", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6a", + "index": "6", + "lanes": "1816,1817,1818,1819", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp6b", + "index": "6", + "lanes": "1820,1821,1822,1823", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7a", + "index": "7", + "lanes": "1808,1809,1810,1811", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp7b", + "index": "7", + "lanes": "1812,1813,1814,1815", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8a", + "index": "8", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp8b", + "index": "8", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9a", + "index": "9", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp9b", + "index": "9", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10a", + "index": "10", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp10b", + "index": "10", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11a", + "index": "11", + "lanes": "1304,1305,1306,1307", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp11b", + "index": "11", + "lanes": "1308,1309,1310,1311", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12a", + "index": "12", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp12b", + "index": "12", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13a", + "index": "13", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp13b", + "index": "13", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14a", + "index": "14", + "lanes": "1040,1041,1042,1043", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp14b", + "index": "14", + "lanes": "1044,1045,1046,1047", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15a", + "index": "15", + "lanes": "1048,1049,1050,1051", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp15b", + "index": "15", + "lanes": "1052,1053,1054,1055", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16a", + "index": "16", + "lanes": "536,537,538,539", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp16b", + "index": "16", + "lanes": "540,541,542,543", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17a", + "index": "17", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp17b", + "index": "17", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18a", + "index": "18", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp18b", + "index": "18", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19a", + "index": "19", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp19b", + "index": "19", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20a", + "index": "20", + "lanes": "792,793,794,795", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp20b", + "index": "20", + "lanes": "796,797,798,799", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21a", + "index": "21", + "lanes": "784,785,786,787", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp21b", + "index": "21", + "lanes": "788,789,790,791", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22a", + "index": "22", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp22b", + "index": "22", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23a", + "index": "23", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp23b", + "index": "23", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24a", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp24b", + "index": "24", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25a", + "index": "25", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp25b", + "index": "25", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26a", + "index": "26", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp26b", + "index": "26", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27a", + "index": "27", + "lanes": "280,281,282,283", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp27b", + "index": "27", + "lanes": "284,285,286,287", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28a", + "index": "28", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp28b", + "index": "28", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29a", + "index": "29", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp29b", + "index": "29", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30a", + "index": "30", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp30b", + "index": "30", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31a", + "index": "31", + "lanes": "24,25,26,27", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp31b", + "index": "31", + "lanes": "28,29,30,31", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet256": { + "admin_status": "up", + "alias": "etp32a", + "index": "32", + "lanes": "3600,3601,3602,3603", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet260": { + "admin_status": "up", + "alias": "etp32b", + "index": "32", + "lanes": "3604,3605,3606,3607", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet264": { + "admin_status": "up", + "alias": "etp33a", + "index": "33", + "lanes": "3608,3609,3610,3611", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet268": { + "admin_status": "up", + "alias": "etp33b", + "index": "33", + "lanes": "3612,3613,3614,3615", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet272": { + "admin_status": "up", + "alias": "etp34a", + "index": "34", + "lanes": "3584,3585,3586,3587", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet276": { + "admin_status": "up", + "alias": "etp34b", + "index": "34", + "lanes": "3588,3589,3590,3591", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet280": { + "admin_status": "up", + "alias": "etp35a", + "index": "35", + "lanes": "3592,3593,3594,3595", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet284": { + "admin_status": "up", + "alias": "etp35b", + "index": "35", + "lanes": "3596,3597,3598,3599", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet288": { + "admin_status": "up", + "alias": "etp36a", + "index": "36", + "lanes": "3856,3857,3858,3859", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet292": { + "admin_status": "up", + "alias": "etp36b", + "index": "36", + "lanes": "3860,3861,3862,3863", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet296": { + "admin_status": "up", + "alias": "etp37a", + "index": "37", + "lanes": "3864,3865,3866,3867", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet300": { + "admin_status": "up", + "alias": "etp37b", + "index": "37", + "lanes": "3868,3869,3870,3871", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet304": { + "admin_status": "up", + "alias": "etp38a", + "index": "38", + "lanes": "3840,3841,3842,3843", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet308": { + "admin_status": "up", + "alias": "etp38b", + "index": "38", + "lanes": "3844,3845,3846,3847", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet312": { + "admin_status": "up", + "alias": "etp39a", + "index": "39", + "lanes": "3848,3849,3850,3851", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet316": { + "admin_status": "up", + "alias": "etp39b", + "index": "39", + "lanes": "3852,3853,3854,3855", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet320": { + "admin_status": "up", + "alias": "etp40a", + "index": "40", + "lanes": "3352,3353,3354,3355", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet324": { + "admin_status": "up", + "alias": "etp40b", + "index": "40", + "lanes": "3356,3357,3358,3359", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet328": { + "admin_status": "up", + "alias": "etp41a", + "index": "41", + "lanes": "3344,3345,3346,3347", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet332": { + "admin_status": "up", + "alias": "etp41b", + "index": "41", + "lanes": "3348,3349,3350,3351", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet336": { + "admin_status": "up", + "alias": "etp42a", + "index": "42", + "lanes": "3328,3329,3330,3331", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet340": { + "admin_status": "up", + "alias": "etp42b", + "index": "42", + "lanes": "3332,3333,3334,3335", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet344": { + "admin_status": "up", + "alias": "etp43a", + "index": "43", + "lanes": "3336,3337,3338,3339", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet348": { + "admin_status": "up", + "alias": "etp43b", + "index": "43", + "lanes": "3340,3341,3342,3343", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet352": { + "admin_status": "up", + "alias": "etp44a", + "index": "44", + "lanes": "3096,3097,3098,3099", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet356": { + "admin_status": "up", + "alias": "etp44b", + "index": "44", + "lanes": "3100,3101,3102,3103", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet360": { + "admin_status": "up", + "alias": "etp45a", + "index": "45", + "lanes": "3088,3089,3090,3091", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet364": { + "admin_status": "up", + "alias": "etp45b", + "index": "45", + "lanes": "3092,3093,3094,3095", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet368": { + "admin_status": "up", + "alias": "etp46a", + "index": "46", + "lanes": "3080,3081,3082,3083", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet372": { + "admin_status": "up", + "alias": "etp46b", + "index": "46", + "lanes": "3084,3085,3086,3087", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet376": { + "admin_status": "up", + "alias": "etp47a", + "index": "47", + "lanes": "3072,3073,3074,3075", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet380": { + "admin_status": "up", + "alias": "etp47b", + "index": "47", + "lanes": "3076,3077,3078,3079", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet384": { + "admin_status": "up", + "alias": "etp48a", + "index": "48", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet388": { + "admin_status": "up", + "alias": "etp48b", + "index": "48", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet392": { + "admin_status": "up", + "alias": "etp49a", + "index": "49", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet396": { + "admin_status": "up", + "alias": "etp49b", + "index": "49", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet400": { + "admin_status": "up", + "alias": "etp50a", + "index": "50", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet404": { + "admin_status": "up", + "alias": "etp50b", + "index": "50", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet408": { + "admin_status": "up", + "alias": "etp51a", + "index": "51", + "lanes": "2584,2585,2586,2587", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet412": { + "admin_status": "up", + "alias": "etp51b", + "index": "51", + "lanes": "2588,2589,2590,2591", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet416": { + "admin_status": "up", + "alias": "etp52a", + "index": "52", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet420": { + "admin_status": "up", + "alias": "etp52b", + "index": "52", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet424": { + "admin_status": "up", + "alias": "etp53a", + "index": "53", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet428": { + "admin_status": "up", + "alias": "etp53b", + "index": "53", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet432": { + "admin_status": "up", + "alias": "etp54a", + "index": "54", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet436": { + "admin_status": "up", + "alias": "etp54b", + "index": "54", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet440": { + "admin_status": "up", + "alias": "etp55a", + "index": "55", + "lanes": "2840,2841,2842,2843", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet444": { + "admin_status": "up", + "alias": "etp55b", + "index": "55", + "lanes": "2844,2845,2846,2847", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet448": { + "admin_status": "up", + "alias": "etp56a", + "index": "56", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet452": { + "admin_status": "up", + "alias": "etp56b", + "index": "56", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet456": { + "admin_status": "up", + "alias": "etp57a", + "index": "57", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet460": { + "admin_status": "up", + "alias": "etp57b", + "index": "57", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet464": { + "admin_status": "up", + "alias": "etp58a", + "index": "58", + "lanes": "2328,2329,2330,2331", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet468": { + "admin_status": "up", + "alias": "etp58b", + "index": "58", + "lanes": "2332,2333,2334,2335", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet472": { + "admin_status": "up", + "alias": "etp59a", + "index": "59", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet476": { + "admin_status": "up", + "alias": "etp59b", + "index": "59", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet480": { + "admin_status": "up", + "alias": "etp60a", + "index": "60", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet484": { + "admin_status": "up", + "alias": "etp60b", + "index": "60", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet488": { + "admin_status": "up", + "alias": "etp61a", + "index": "61", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet492": { + "admin_status": "up", + "alias": "etp61b", + "index": "61", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet496": { + "admin_status": "up", + "alias": "etp62a", + "index": "62", + "lanes": "2072,2073,2074,2075", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet500": { + "admin_status": "up", + "alias": "etp62b", + "index": "62", + "lanes": "2076,2077,2078,2079", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet504": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "2064,2065,2066,2067", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet256": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet264": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet288": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet296": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet320": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet328": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet352": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet360": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet384": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet392": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet416": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet424": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet448": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet456": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet480": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet488": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet504": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-24/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-24/config_db.json new file mode 100644 index 00000000000..36264976e32 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-24/config_db.json @@ -0,0 +1,1753 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "light-2-fanout", + "hwsku": "Cisco-8122-O64", + "mac": "9C:09:8B:5A:58:00", + "platform": "x86_64-8122_64eh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "disabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|4.164.1.177/24": { + "gwaddr": "4.164.1.221" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "1560,1561,1562,1563,1564,1565,1566,1567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "1816,1817,1818,1819,1820,1821,1822,1823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "1808,1809,1810,1811,1812,1813,1814,1815", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "1304,1305,1306,1307,1308,1309,1310,1311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1040,1041,1042,1043,1044,1045,1046,1047", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1048,1049,1050,1051,1052,1053,1054,1055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "536,537,538,539,540,541,542,543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "792,793,794,795,796,797,798,799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "784,785,786,787,788,789,790,791", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "280,281,282,283,284,285,286,287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "24,25,26,27,28,29,30,31", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet256": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "3600,3601,3602,3603,3604,3605,3606,3607", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet264": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "3608,3609,3610,3611,3612,3613,3614,3615", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet272": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "3584,3585,3586,3587,3588,3589,3590,3591", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet280": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "3592,3593,3594,3595,3596,3597,3598,3599", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet288": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "3856,3857,3858,3859,3860,3861,3862,3863", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet296": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "3864,3865,3866,3867,3868,3869,3870,3871", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet304": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "3840,3841,3842,3843,3844,3845,3846,3847", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet312": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "3848,3849,3850,3851,3852,3853,3854,3855", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet320": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "3352,3353,3354,3355,3356,3357,3358,3359", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet328": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "3344,3345,3346,3347,3348,3349,3350,3351", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet336": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "3328,3329,3330,3331,3332,3333,3334,3335", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet344": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "3336,3337,3338,3339,3340,3341,3342,3343", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet352": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "3096,3097,3098,3099,3100,3101,3102,3103", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet360": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "3088,3089,3090,3091,3092,3093,3094,3095", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet368": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "3080,3081,3082,3083,3084,3085,3086,3087", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet376": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "3072,3073,3074,3075,3076,3077,3078,3079", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet384": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet392": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet400": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet408": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "2584,2585,2586,2587,2588,2589,2590,2591", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet416": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet424": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet432": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet440": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "2840,2841,2842,2843,2844,2845,2846,2847", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet448": { + "admin_status": "down", + "alias": "etp56", + "index": "56", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet456": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet464": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "2328,2329,2330,2331,2332,2333,2334,2335", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet472": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet480": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet488": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet496": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "2072,2073,2074,2075,2076,2077,2078,2079", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet504": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "2064,2065,2066,2067", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet256": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet264": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet288": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet296": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet320": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet328": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet352": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet360": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet384": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet392": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet416": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet424": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet448": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet456": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet480": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet488": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet504": { + "tagging_mode": "tagged" + } + } +} diff --git a/infra/fanouts-configs/sonic-ucs-m6-25/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-25/config_db.json new file mode 100644 index 00000000000..b6101325155 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-25/config_db.json @@ -0,0 +1,1467 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "cmono-t0-2-fo", + "hwsku": "Cisco-8101-32FH-O", + "mac": "48:74:10:99:1A:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|9.9.1.12/16": { + "gwaddr": "9.9.255.255" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet200": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-26/leaf-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-26/leaf-fanout/config_db.json new file mode 100644 index 00000000000..c6a2165bfbf --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-26/leaf-fanout/config_db.json @@ -0,0 +1,1513 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-2", + "hwsku": "Cisco-8101-32FH-O", + "mac": "9C:66:97:05:B4:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|9.9.1.103/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "fec": "none", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet88": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet88": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-26/root-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-26/root-fanout/config_db.json new file mode 100644 index 00000000000..8c34df150f3 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-26/root-fanout/config_db.json @@ -0,0 +1,2017 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-1", + "hwsku": "Cisco-8101-O8C48", + "mac": "9C:09:8B:B7:26:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|9.9.1.102/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0a", + "fec": "rs", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp0b", + "index": "0", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1a", + "index": "1", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp1b", + "index": "1", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2a", + "index": "2", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp2b", + "index": "2", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3a", + "index": "3", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp3b", + "index": "3", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4a", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp4b", + "index": "4", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5a", + "index": "5", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp5b", + "index": "5", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6a", + "index": "6", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp6b", + "index": "6", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7a", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp7b", + "index": "7", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8a", + "index": "8", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp8b", + "index": "8", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9a", + "index": "9", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp9b", + "index": "9", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10a", + "index": "10", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp10b", + "index": "10", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11a", + "index": "11", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp11b", + "index": "11", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20a", + "index": "20", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp20b", + "index": "20", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21a", + "index": "21", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp21b", + "index": "21", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22a", + "index": "22", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp22b", + "index": "22", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23a", + "index": "23", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp23b", + "index": "23", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24a", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp24b", + "index": "24", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25a", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp25b", + "index": "25", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26a", + "index": "26", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp26b", + "index": "26", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27a", + "index": "27", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp27b", + "index": "27", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28a", + "index": "28", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp28b", + "index": "28", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29a", + "index": "29", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp29b", + "index": "29", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30a", + "index": "30", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp30b", + "index": "30", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31a", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp31b", + "index": "31", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000", + "subport": "2" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet96": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet104": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-27/leaf-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-27/leaf-fanout/config_db.json new file mode 100644 index 00000000000..56cc303f2bc --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-27/leaf-fanout/config_db.json @@ -0,0 +1,1716 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "mth1-mth-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "a0:bc:6f:5c:30:94", + "platform": "x86_64-8102_64h_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|9.9.2.4/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "fec": "rs", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-27/root-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-27/root-fanout/config_db.json new file mode 100644 index 00000000000..f86ecf52c31 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-27/root-fanout/config_db.json @@ -0,0 +1,2099 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "mth2-mth-fanout", + "hwsku": "Cisco-8102-C64", + "mac": "9c:66:97:64:c9:b8", + "platform": "x86_64-8102_64h_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MGMT_INTERFACE": { + "eth0|9.9.2.5/16": {} + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2063|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet4": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet252": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-28/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-28/config_db.json new file mode 100644 index 00000000000..ce3b6819596 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-28/config_db.json @@ -0,0 +1,2643 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hwsku": "Cisco-8122-O128", + "mac": "E8:0A:B9:A6:66:00", + "platform": "x86_64-8122_64eh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0a", + "index": "0", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp0b", + "index": "0", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1a", + "index": "1", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp1b", + "index": "1", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2a", + "index": "2", + "lanes": "1560,1561,1562,1563", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp2b", + "index": "2", + "lanes": "1564,1565,1566,1567", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3a", + "index": "3", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp3b", + "index": "3", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4a", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp4b", + "index": "4", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5a", + "index": "5", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp5b", + "index": "5", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6a", + "index": "6", + "lanes": "1816,1817,1818,1819", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp6b", + "index": "6", + "lanes": "1820,1821,1822,1823", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7a", + "index": "7", + "lanes": "1808,1809,1810,1811", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp7b", + "index": "7", + "lanes": "1812,1813,1814,1815", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8a", + "index": "8", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp8b", + "index": "8", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9a", + "index": "9", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp9b", + "index": "9", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10a", + "index": "10", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp10b", + "index": "10", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11a", + "index": "11", + "lanes": "1304,1305,1306,1307", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp11b", + "index": "11", + "lanes": "1308,1309,1310,1311", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12a", + "index": "12", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp12b", + "index": "12", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13a", + "index": "13", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp13b", + "index": "13", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14a", + "index": "14", + "lanes": "1040,1041,1042,1043", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp14b", + "index": "14", + "lanes": "1044,1045,1046,1047", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15a", + "index": "15", + "lanes": "1048,1049,1050,1051", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp15b", + "index": "15", + "lanes": "1052,1053,1054,1055", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16a", + "index": "16", + "lanes": "536,537,538,539", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp16b", + "index": "16", + "lanes": "540,541,542,543", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17a", + "index": "17", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp17b", + "index": "17", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18a", + "index": "18", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp18b", + "index": "18", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19a", + "index": "19", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp19b", + "index": "19", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20a", + "index": "20", + "lanes": "792,793,794,795", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp20b", + "index": "20", + "lanes": "796,797,798,799", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21a", + "index": "21", + "lanes": "784,785,786,787", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp21b", + "index": "21", + "lanes": "788,789,790,791", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22a", + "index": "22", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp22b", + "index": "22", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23a", + "index": "23", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp23b", + "index": "23", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24a", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp24b", + "index": "24", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25a", + "index": "25", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp25b", + "index": "25", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26a", + "index": "26", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp26b", + "index": "26", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27a", + "index": "27", + "lanes": "280,281,282,283", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp27b", + "index": "27", + "lanes": "284,285,286,287", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28a", + "index": "28", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp28b", + "index": "28", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29a", + "index": "29", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp29b", + "index": "29", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30a", + "index": "30", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp30b", + "index": "30", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31a", + "index": "31", + "lanes": "24,25,26,27", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp31b", + "index": "31", + "lanes": "28,29,30,31", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet256": { + "admin_status": "up", + "alias": "etp32a", + "index": "32", + "lanes": "3600,3601,3602,3603", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet260": { + "admin_status": "up", + "alias": "etp32b", + "index": "32", + "lanes": "3604,3605,3606,3607", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet264": { + "admin_status": "up", + "alias": "etp33a", + "index": "33", + "lanes": "3608,3609,3610,3611", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet268": { + "admin_status": "up", + "alias": "etp33b", + "index": "33", + "lanes": "3612,3613,3614,3615", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet272": { + "admin_status": "up", + "alias": "etp34a", + "index": "34", + "lanes": "3584,3585,3586,3587", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet276": { + "admin_status": "up", + "alias": "etp34b", + "index": "34", + "lanes": "3588,3589,3590,3591", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet280": { + "admin_status": "up", + "alias": "etp35a", + "index": "35", + "lanes": "3592,3593,3594,3595", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet284": { + "admin_status": "up", + "alias": "etp35b", + "index": "35", + "lanes": "3596,3597,3598,3599", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet288": { + "admin_status": "up", + "alias": "etp36a", + "index": "36", + "lanes": "3856,3857,3858,3859", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet292": { + "admin_status": "up", + "alias": "etp36b", + "index": "36", + "lanes": "3860,3861,3862,3863", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet296": { + "admin_status": "up", + "alias": "etp37a", + "index": "37", + "lanes": "3864,3865,3866,3867", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet300": { + "admin_status": "up", + "alias": "etp37b", + "index": "37", + "lanes": "3868,3869,3870,3871", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet304": { + "admin_status": "up", + "alias": "etp38a", + "index": "38", + "lanes": "3840,3841,3842,3843", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet308": { + "admin_status": "up", + "alias": "etp38b", + "index": "38", + "lanes": "3844,3845,3846,3847", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet312": { + "admin_status": "up", + "alias": "etp39a", + "index": "39", + "lanes": "3848,3849,3850,3851", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet316": { + "admin_status": "up", + "alias": "etp39b", + "index": "39", + "lanes": "3852,3853,3854,3855", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet320": { + "admin_status": "up", + "alias": "etp40a", + "index": "40", + "lanes": "3352,3353,3354,3355", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet324": { + "admin_status": "up", + "alias": "etp40b", + "index": "40", + "lanes": "3356,3357,3358,3359", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet328": { + "admin_status": "up", + "alias": "etp41a", + "index": "41", + "lanes": "3344,3345,3346,3347", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet332": { + "admin_status": "up", + "alias": "etp41b", + "index": "41", + "lanes": "3348,3349,3350,3351", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet336": { + "admin_status": "up", + "alias": "etp42a", + "index": "42", + "lanes": "3328,3329,3330,3331", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet340": { + "admin_status": "up", + "alias": "etp42b", + "index": "42", + "lanes": "3332,3333,3334,3335", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet344": { + "admin_status": "up", + "alias": "etp43a", + "index": "43", + "lanes": "3336,3337,3338,3339", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet348": { + "admin_status": "up", + "alias": "etp43b", + "index": "43", + "lanes": "3340,3341,3342,3343", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet352": { + "admin_status": "up", + "alias": "etp44a", + "index": "44", + "lanes": "3096,3097,3098,3099", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet356": { + "admin_status": "up", + "alias": "etp44b", + "index": "44", + "lanes": "3100,3101,3102,3103", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet360": { + "admin_status": "up", + "alias": "etp45a", + "index": "45", + "lanes": "3088,3089,3090,3091", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet364": { + "admin_status": "up", + "alias": "etp45b", + "index": "45", + "lanes": "3092,3093,3094,3095", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet368": { + "admin_status": "up", + "alias": "etp46a", + "index": "46", + "lanes": "3080,3081,3082,3083", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet372": { + "admin_status": "up", + "alias": "etp46b", + "index": "46", + "lanes": "3084,3085,3086,3087", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet376": { + "admin_status": "up", + "alias": "etp47a", + "index": "47", + "lanes": "3072,3073,3074,3075", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet380": { + "admin_status": "up", + "alias": "etp47b", + "index": "47", + "lanes": "3076,3077,3078,3079", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet384": { + "admin_status": "up", + "alias": "etp48a", + "index": "48", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet388": { + "admin_status": "up", + "alias": "etp48b", + "index": "48", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet392": { + "admin_status": "up", + "alias": "etp49a", + "index": "49", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet396": { + "admin_status": "up", + "alias": "etp49b", + "index": "49", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet400": { + "admin_status": "up", + "alias": "etp50a", + "index": "50", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet404": { + "admin_status": "up", + "alias": "etp50b", + "index": "50", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet408": { + "admin_status": "up", + "alias": "etp51a", + "index": "51", + "lanes": "2584,2585,2586,2587", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet412": { + "admin_status": "up", + "alias": "etp51b", + "index": "51", + "lanes": "2588,2589,2590,2591", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet416": { + "admin_status": "up", + "alias": "etp52a", + "index": "52", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet420": { + "admin_status": "up", + "alias": "etp52b", + "index": "52", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet424": { + "admin_status": "up", + "alias": "etp53a", + "index": "53", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet428": { + "admin_status": "up", + "alias": "etp53b", + "index": "53", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet432": { + "admin_status": "up", + "alias": "etp54a", + "index": "54", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet436": { + "admin_status": "up", + "alias": "etp54b", + "index": "54", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet440": { + "admin_status": "up", + "alias": "etp55a", + "index": "55", + "lanes": "2840,2841,2842,2843", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet444": { + "admin_status": "up", + "alias": "etp55b", + "index": "55", + "lanes": "2844,2845,2846,2847", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet448": { + "admin_status": "up", + "alias": "etp56a", + "index": "56", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet452": { + "admin_status": "up", + "alias": "etp56b", + "index": "56", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet456": { + "admin_status": "up", + "alias": "etp57a", + "index": "57", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet460": { + "admin_status": "up", + "alias": "etp57b", + "index": "57", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet464": { + "admin_status": "up", + "alias": "etp58a", + "index": "58", + "lanes": "2328,2329,2330,2331", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet468": { + "admin_status": "up", + "alias": "etp58b", + "index": "58", + "lanes": "2332,2333,2334,2335", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet472": { + "admin_status": "up", + "alias": "etp59a", + "index": "59", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet476": { + "admin_status": "up", + "alias": "etp59b", + "index": "59", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet480": { + "admin_status": "up", + "alias": "etp60a", + "index": "60", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet484": { + "admin_status": "up", + "alias": "etp60b", + "index": "60", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet488": { + "admin_status": "up", + "alias": "etp61a", + "index": "61", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "400000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet492": { + "admin_status": "up", + "alias": "etp61b", + "index": "61", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "2", + "tpid": "0x9100" + }, + "Ethernet496": { + "admin_status": "up", + "alias": "etp62a", + "index": "62", + "lanes": "2072,2073,2074,2075", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet500": { + "admin_status": "up", + "alias": "etp62b", + "index": "62", + "lanes": "2076,2077,2078,2079", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet504": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "2064,2065,2066,2067", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet256": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet260": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet264": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet268": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet288": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet292": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet296": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet300": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet320": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet324": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet328": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet332": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet352": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet356": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet360": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet364": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet384": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet388": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet392": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet396": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet416": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet420": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet424": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet428": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet448": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet452": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet456": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet460": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet480": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet484": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet488": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet492": { + "tagging_mode": "untagged" + }, + "Vlan2063|Ethernet504": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-29/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-29/config_db.json new file mode 100644 index 00000000000..3f6b7f32b7f --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-29/config_db.json @@ -0,0 +1,1494 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false", + "wcmp_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "enable", + "hostname": "tornado-t0-cmono-fanout", + "hwsku": "32x400Gb", + "mac": "9C:38:18:6E:52:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_APPLIANCE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_FLOW": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_HA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ICMP_ECHO": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "telemetry": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "xcvrd": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "fec": "rs", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "telemetry": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202411_02" + } + }, + "VLAN": { + "Vlan1681": { + "vlanid": "1681" + }, + "Vlan1682": { + "vlanid": "1682" + }, + "Vlan1683": { + "vlanid": "1683" + }, + "Vlan1684": { + "vlanid": "1684" + }, + "Vlan1685": { + "vlanid": "1685" + }, + "Vlan1686": { + "vlanid": "1686" + }, + "Vlan1687": { + "vlanid": "1687" + }, + "Vlan1688": { + "vlanid": "1688" + }, + "Vlan1689": { + "vlanid": "1689" + }, + "Vlan1690": { + "vlanid": "1690" + }, + "Vlan1691": { + "vlanid": "1691" + }, + "Vlan1692": { + "vlanid": "1692" + }, + "Vlan1693": { + "vlanid": "1693" + }, + "Vlan1694": { + "vlanid": "1694" + }, + "Vlan1695": { + "vlanid": "1695" + }, + "Vlan1696": { + "vlanid": "1696" + }, + "Vlan1697": { + "vlanid": "1697" + }, + "Vlan1698": { + "vlanid": "1698" + }, + "Vlan1699": { + "vlanid": "1699" + }, + "Vlan1700": { + "vlanid": "1700" + }, + "Vlan1701": { + "vlanid": "1701" + }, + "Vlan1702": { + "vlanid": "1702" + }, + "Vlan1703": { + "vlanid": "1703" + }, + "Vlan1704": { + "vlanid": "1704" + }, + "Vlan1705": { + "vlanid": "1705" + }, + "Vlan1706": { + "vlanid": "1706" + }, + "Vlan1707": { + "vlanid": "1707" + }, + "Vlan1708": { + "vlanid": "1708" + }, + "Vlan1709": { + "vlanid": "1709" + }, + "Vlan1710": { + "vlanid": "1710" + }, + "Vlan1711": { + "vlanid": "1711" + } + }, + "VLAN_MEMBER": { + "Vlan1681|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan1681|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1682|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan1682|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1683|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan1683|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1684|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan1684|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1685|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan1685|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1686|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan1686|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1687|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan1687|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1688|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan1688|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1689|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan1689|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1690|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan1690|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1691|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan1691|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1692|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan1692|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1693|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan1693|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1694|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan1694|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1695|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan1695|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1696|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan1696|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1697|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan1697|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1698|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan1698|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1699|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan1699|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1700|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan1700|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1701|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan1701|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1702|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan1702|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1703|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan1703|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1704|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan1704|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1705|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan1705|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1706|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1706|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan1707|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1707|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan1708|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1708|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan1709|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1709|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan1710|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1710|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan1711|Ethernet200": { + "tagging_mode": "tagged" + }, + "Vlan1711|Ethernet248": { + "tagging_mode": "untagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-3/leaf-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-3/leaf-fanout/config_db.json new file mode 100644 index 00000000000..930e09cce7d --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-3/leaf-fanout/config_db.json @@ -0,0 +1,1738 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-leaf", + "hwsku": "Cisco-8101-32FH-O", + "mac": "58:56:9F:8A:3C:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0a", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp0b", + "index": "0", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1a", + "index": "1", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp1b", + "index": "1", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2a", + "index": "2", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp2b", + "index": "2", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3a", + "index": "3", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp3b", + "index": "3", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4a", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp4b", + "index": "4", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5a", + "index": "5", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp5b", + "index": "5", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6a", + "index": "6", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp6b", + "index": "6", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7a", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp7b", + "index": "7", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8a", + "index": "8", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp8b", + "index": "8", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9a", + "index": "9", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp9b", + "index": "9", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10a", + "index": "10", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp10b", + "index": "10", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11a", + "index": "11", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp11b", + "index": "11", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12a", + "index": "12", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp12b", + "index": "12", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13a", + "index": "13", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp13b", + "index": "13", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14a", + "index": "14", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp14b", + "index": "14", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15a", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp15b", + "index": "15", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16a", + "index": "16", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp16b", + "index": "16", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17a", + "index": "17", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp17b", + "index": "17", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18a", + "index": "18", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp18b", + "index": "18", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19a", + "index": "19", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp19b", + "index": "19", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20a", + "index": "20", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp20b", + "index": "20", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21a", + "index": "21", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp21b", + "index": "21", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22a", + "index": "22", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp22b", + "index": "22", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23a", + "index": "23", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp23b", + "index": "23", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24a", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp24b", + "index": "24", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25a", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp25b", + "index": "25", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26a", + "index": "26", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp26b", + "index": "26", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27a", + "index": "27", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp27b", + "index": "27", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28a", + "index": "28", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp28b", + "index": "28", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29a", + "index": "29", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp29b", + "index": "29", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30a", + "index": "30", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp30b", + "index": "30", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31a", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp31b", + "index": "31", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000", + "subport": "2" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + } + }, + "VLAN_MEMBER": { + "Vlan2030|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-3/root-fanout/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-3/root-fanout/config_db.json new file mode 100644 index 00000000000..026be699b34 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-3/root-fanout/config_db.json @@ -0,0 +1,2007 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-root", + "hwsku": "Cisco-8101-32FH-O", + "mac": "48:1B:A4:E7:9E:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0a", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp0b", + "index": "0", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1a", + "index": "1", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp1b", + "index": "1", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2a", + "index": "2", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp2b", + "index": "2", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3a", + "index": "3", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp3b", + "index": "3", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4a", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp4b", + "index": "4", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5a", + "index": "5", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp5b", + "index": "5", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6a", + "index": "6", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp6b", + "index": "6", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7a", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp7b", + "index": "7", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8a", + "index": "8", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp8b", + "index": "8", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9a", + "index": "9", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp9b", + "index": "9", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10a", + "index": "10", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp10b", + "index": "10", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11a", + "index": "11", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp11b", + "index": "11", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12a", + "index": "12", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp12b", + "index": "12", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13a", + "index": "13", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp13b", + "index": "13", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14a", + "index": "14", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp14b", + "index": "14", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15a", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp15b", + "index": "15", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16a", + "index": "16", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp16b", + "index": "16", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17a", + "index": "17", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp17b", + "index": "17", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18a", + "index": "18", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp18b", + "index": "18", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19a", + "index": "19", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp19b", + "index": "19", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20a", + "index": "20", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp20b", + "index": "20", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21a", + "index": "21", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp21b", + "index": "21", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22a", + "index": "22", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp22b", + "index": "22", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23a", + "index": "23", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp23b", + "index": "23", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24a", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp24b", + "index": "24", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25a", + "index": "25", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp25b", + "index": "25", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26a", + "index": "26", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp26b", + "index": "26", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27a", + "index": "27", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp27b", + "index": "27", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28a", + "index": "28", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp28b", + "index": "28", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29a", + "index": "29", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "1", + "tpid": "0x9100" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp29b", + "index": "29", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30a", + "index": "30", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp30b", + "index": "30", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "2" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31a", + "index": "31", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "1" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp31b", + "index": "31", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000", + "subport": "2" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet240": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-30/churchill-fanout2/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-30/churchill-fanout2/config_db.json new file mode 100644 index 00000000000..b732ecca82e --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-30/churchill-fanout2/config_db.json @@ -0,0 +1,1727 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-2", + "hwsku": "Cisco-8101-32FH-O", + "mac": "D4:7F:35:03:86:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "lanes": "2312,2313,2314,2315", + "alias": "etp2", + "index": "2", + "speed": "100000", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet24": { + "lanes": "2056,2057,2058,2059", + "alias": "etp3", + "index": "3", + "speed": "100000", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet32": { + "lanes": "1792,1793,1794,1795", + "alias": "etp4", + "index": "4", + "speed": "100000", + "subport": "0", + "admin_status": "up", + "mtu": "9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2063|Ethernet32": { + "tagging_mode": "tagged" + } + } +} diff --git a/infra/fanouts-configs/sonic-ucs-m6-30/tornado-fanout0/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-30/tornado-fanout0/config_db.json new file mode 100644 index 00000000000..06bf98c5df0 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-30/tornado-fanout0/config_db.json @@ -0,0 +1,1455 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "hwsku": "Cisco-8101-32FH-O-C01", + "platform": "x86_64-8101_32fh_o_c01-r0", + "hostname": "tor-fanout-1", + "mac": "48:00:B3:A0:AE:65" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_02" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "tagged" + } + } +} diff --git a/infra/fanouts-configs/sonic-ucs-m6-30/tornado-fanout1/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-30/tornado-fanout1/config_db.json new file mode 100644 index 00000000000..79d857240c7 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-30/tornado-fanout1/config_db.json @@ -0,0 +1,1461 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hwsku": "Cisco-8101-32FH-O-C01", + "mac": "48:00:B3:A0:7C:65", + "platform": "x86_64-8101_32fh_o_c01-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_02" + } + }, + "VLAN": { + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2032|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-31/churchill-fanout2/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-31/churchill-fanout2/config_db.json new file mode 100644 index 00000000000..fb8425161db --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-31/churchill-fanout2/config_db.json @@ -0,0 +1,1727 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chu-fanout-2", + "hwsku": "Cisco-8101-32FH-O", + "mac": "48:74:10:99:0C:00", + "platform": "x86_64-8101_32fh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet16": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet24": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet32": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2063|Ethernet32": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-31/tornado-fanout0/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-31/tornado-fanout0/config_db.json new file mode 100644 index 00000000000..ee9accbe6f5 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-31/tornado-fanout0/config_db.json @@ -0,0 +1,1459 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "tor-fanout-0", + "hwsku": "Cisco-8101-32FH-O-C01", + "mac": "48:00:B3:A0:88:65", + "platform": "x86_64-8101_32fh_o_c01-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_02" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-31/tornado-fanout1/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-31/tornado-fanout1/config_db.json new file mode 100644 index 00000000000..d24f5f281da --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-31/tornado-fanout1/config_db.json @@ -0,0 +1,1462 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "tor-fanout-1", + "hwsku": "Cisco-8101-32FH-O-C01", + "mac": "48:00:B3:A0:56:4D", + "platform": "x86_64-8101_32fh_o_c01-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "768,769,770,771,772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "520,521,522,523,524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "0", + "tpid": "0x9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_02" + } + }, + "VLAN": { + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + } + }, + "VLAN_MEMBER": { + "Vlan2032|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet248": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet248": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-33/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-33/config_db.json new file mode 100644 index 00000000000..4083fea9f85 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-33/config_db.json @@ -0,0 +1,2518 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_server": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false", + "wcmp_enabled": "false" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "enable", + "hwsku": "Cisco-8122-O128S2", + "mac": "56:42:41:39:07:90", + "platform": "x86_64-8122_64eh_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "dhcp_server": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "False" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3", + "remote": "false", + "ssh_path": "/a/b/c", + "ssh_string": "user@localhost" + } + }, + "LOGGER": { + "DomInfoUpdateTask": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + }, + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_APPLIANCE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_FLOW": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_HA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_PORT_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_TRUSTED_VNI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ICMP_ECHO": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PREFIX_COMPRESSION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYNCE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SfpStateUpdateTask": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "rebootbackend": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "telemetry": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "xcvrd": { + "LOGLEVEL": "NOTICE", + "require_manual_refresh": "true" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0a", + "dhcp_rate_limit": "300", + "index": "0", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp0b", + "dhcp_rate_limit": "300", + "index": "0", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1a", + "dhcp_rate_limit": "300", + "index": "1", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp1b", + "dhcp_rate_limit": "300", + "index": "1", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2a", + "dhcp_rate_limit": "300", + "index": "2", + "lanes": "1560,1561,1562,1563", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp2b", + "dhcp_rate_limit": "300", + "index": "2", + "lanes": "1564,1565,1566,1567", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3a", + "dhcp_rate_limit": "300", + "index": "3", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp3b", + "dhcp_rate_limit": "300", + "index": "3", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4a", + "dhcp_rate_limit": "300", + "index": "4", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp4b", + "dhcp_rate_limit": "300", + "index": "4", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5a", + "dhcp_rate_limit": "300", + "index": "5", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp5b", + "dhcp_rate_limit": "300", + "index": "5", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6a", + "dhcp_rate_limit": "300", + "index": "6", + "lanes": "1816,1817,1818,1819", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp6b", + "dhcp_rate_limit": "300", + "index": "6", + "lanes": "1820,1821,1822,1823", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7a", + "dhcp_rate_limit": "300", + "index": "7", + "lanes": "1808,1809,1810,1811", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp7b", + "dhcp_rate_limit": "300", + "index": "7", + "lanes": "1812,1813,1814,1815", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8a", + "dhcp_rate_limit": "300", + "index": "8", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp8b", + "dhcp_rate_limit": "300", + "index": "8", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9a", + "dhcp_rate_limit": "300", + "index": "9", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp9b", + "dhcp_rate_limit": "300", + "index": "9", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10a", + "dhcp_rate_limit": "300", + "index": "10", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp10b", + "dhcp_rate_limit": "300", + "index": "10", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11a", + "dhcp_rate_limit": "300", + "index": "11", + "lanes": "1304,1305,1306,1307", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp11b", + "dhcp_rate_limit": "300", + "index": "11", + "lanes": "1308,1309,1310,1311", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12a", + "dhcp_rate_limit": "300", + "index": "12", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp12b", + "dhcp_rate_limit": "300", + "index": "12", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13a", + "dhcp_rate_limit": "300", + "index": "13", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp13b", + "dhcp_rate_limit": "300", + "index": "13", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14a", + "dhcp_rate_limit": "300", + "index": "14", + "lanes": "1040,1041,1042,1043", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp14b", + "dhcp_rate_limit": "300", + "index": "14", + "lanes": "1044,1045,1046,1047", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15a", + "dhcp_rate_limit": "300", + "index": "15", + "lanes": "1048,1049,1050,1051", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp15b", + "dhcp_rate_limit": "300", + "index": "15", + "lanes": "1052,1053,1054,1055", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16a", + "dhcp_rate_limit": "300", + "index": "16", + "lanes": "536,537,538,539", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp16b", + "dhcp_rate_limit": "300", + "index": "16", + "lanes": "540,541,542,543", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17a", + "dhcp_rate_limit": "300", + "index": "17", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp17b", + "dhcp_rate_limit": "300", + "index": "17", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18a", + "dhcp_rate_limit": "300", + "index": "18", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp18b", + "dhcp_rate_limit": "300", + "index": "18", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19a", + "dhcp_rate_limit": "300", + "index": "19", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp19b", + "dhcp_rate_limit": "300", + "index": "19", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20a", + "dhcp_rate_limit": "300", + "index": "20", + "lanes": "792,793,794,795", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp20b", + "dhcp_rate_limit": "300", + "index": "20", + "lanes": "796,797,798,799", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21a", + "dhcp_rate_limit": "300", + "index": "21", + "lanes": "784,785,786,787", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp21b", + "dhcp_rate_limit": "300", + "index": "21", + "lanes": "788,789,790,791", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22a", + "dhcp_rate_limit": "300", + "index": "22", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp22b", + "dhcp_rate_limit": "300", + "index": "22", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23a", + "dhcp_rate_limit": "300", + "index": "23", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp23b", + "dhcp_rate_limit": "300", + "index": "23", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24a", + "dhcp_rate_limit": "300", + "index": "24", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp24b", + "dhcp_rate_limit": "300", + "index": "24", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25a", + "dhcp_rate_limit": "300", + "index": "25", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp25b", + "dhcp_rate_limit": "300", + "index": "25", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26a", + "dhcp_rate_limit": "300", + "index": "26", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp26b", + "dhcp_rate_limit": "300", + "index": "26", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27a", + "dhcp_rate_limit": "300", + "index": "27", + "lanes": "280,281,282,283", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp27b", + "dhcp_rate_limit": "300", + "index": "27", + "lanes": "284,285,286,287", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28a", + "dhcp_rate_limit": "300", + "index": "28", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp28b", + "dhcp_rate_limit": "300", + "index": "28", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29a", + "dhcp_rate_limit": "300", + "index": "29", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp29b", + "dhcp_rate_limit": "300", + "index": "29", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30a", + "dhcp_rate_limit": "300", + "index": "30", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp30b", + "dhcp_rate_limit": "300", + "index": "30", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31a", + "dhcp_rate_limit": "300", + "index": "31", + "lanes": "24,25,26,27", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp31b", + "dhcp_rate_limit": "300", + "index": "31", + "lanes": "28,29,30,31", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet256": { + "admin_status": "up", + "alias": "etp32a", + "dhcp_rate_limit": "300", + "index": "32", + "lanes": "3600,3601,3602,3603", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet260": { + "admin_status": "up", + "alias": "etp32b", + "dhcp_rate_limit": "300", + "index": "32", + "lanes": "3604,3605,3606,3607", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet264": { + "admin_status": "up", + "alias": "etp33a", + "dhcp_rate_limit": "300", + "index": "33", + "lanes": "3608,3609,3610,3611", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet268": { + "admin_status": "up", + "alias": "etp33b", + "dhcp_rate_limit": "300", + "index": "33", + "lanes": "3612,3613,3614,3615", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet272": { + "admin_status": "up", + "alias": "etp34a", + "dhcp_rate_limit": "300", + "index": "34", + "lanes": "3584,3585,3586,3587", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet276": { + "admin_status": "up", + "alias": "etp34b", + "dhcp_rate_limit": "300", + "index": "34", + "lanes": "3588,3589,3590,3591", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet280": { + "admin_status": "up", + "alias": "etp35a", + "dhcp_rate_limit": "300", + "index": "35", + "lanes": "3592,3593,3594,3595", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet284": { + "admin_status": "up", + "alias": "etp35b", + "dhcp_rate_limit": "300", + "index": "35", + "lanes": "3596,3597,3598,3599", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet288": { + "admin_status": "up", + "alias": "etp36a", + "dhcp_rate_limit": "300", + "index": "36", + "lanes": "3856,3857,3858,3859", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet292": { + "admin_status": "up", + "alias": "etp36b", + "dhcp_rate_limit": "300", + "index": "36", + "lanes": "3860,3861,3862,3863", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet296": { + "admin_status": "up", + "alias": "etp37a", + "dhcp_rate_limit": "300", + "index": "37", + "lanes": "3864,3865,3866,3867", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet300": { + "admin_status": "up", + "alias": "etp37b", + "dhcp_rate_limit": "300", + "index": "37", + "lanes": "3868,3869,3870,3871", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet304": { + "admin_status": "up", + "alias": "etp38a", + "dhcp_rate_limit": "300", + "index": "38", + "lanes": "3840,3841,3842,3843", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet308": { + "admin_status": "up", + "alias": "etp38b", + "dhcp_rate_limit": "300", + "index": "38", + "lanes": "3844,3845,3846,3847", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet312": { + "admin_status": "up", + "alias": "etp39a", + "dhcp_rate_limit": "300", + "index": "39", + "lanes": "3848,3849,3850,3851", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet316": { + "admin_status": "up", + "alias": "etp39b", + "dhcp_rate_limit": "300", + "index": "39", + "lanes": "3852,3853,3854,3855", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet320": { + "admin_status": "up", + "alias": "etp40a", + "dhcp_rate_limit": "300", + "index": "40", + "lanes": "3352,3353,3354,3355", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet324": { + "admin_status": "up", + "alias": "etp40b", + "dhcp_rate_limit": "300", + "index": "40", + "lanes": "3356,3357,3358,3359", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet328": { + "admin_status": "up", + "alias": "etp41a", + "dhcp_rate_limit": "300", + "index": "41", + "lanes": "3344,3345,3346,3347", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet332": { + "admin_status": "up", + "alias": "etp41b", + "dhcp_rate_limit": "300", + "index": "41", + "lanes": "3348,3349,3350,3351", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet336": { + "admin_status": "up", + "alias": "etp42a", + "dhcp_rate_limit": "300", + "index": "42", + "lanes": "3328,3329,3330,3331", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet340": { + "admin_status": "up", + "alias": "etp42b", + "dhcp_rate_limit": "300", + "index": "42", + "lanes": "3332,3333,3334,3335", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet344": { + "admin_status": "up", + "alias": "etp43a", + "dhcp_rate_limit": "300", + "index": "43", + "lanes": "3336,3337,3338,3339", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet348": { + "admin_status": "up", + "alias": "etp43b", + "dhcp_rate_limit": "300", + "index": "43", + "lanes": "3340,3341,3342,3343", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet352": { + "admin_status": "up", + "alias": "etp44a", + "dhcp_rate_limit": "300", + "index": "44", + "lanes": "3096,3097,3098,3099", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet356": { + "admin_status": "up", + "alias": "etp44b", + "dhcp_rate_limit": "300", + "index": "44", + "lanes": "3100,3101,3102,3103", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet360": { + "admin_status": "up", + "alias": "etp45a", + "dhcp_rate_limit": "300", + "index": "45", + "lanes": "3088,3089,3090,3091", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet364": { + "admin_status": "up", + "alias": "etp45b", + "dhcp_rate_limit": "300", + "index": "45", + "lanes": "3092,3093,3094,3095", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet368": { + "admin_status": "up", + "alias": "etp46a", + "dhcp_rate_limit": "300", + "index": "46", + "lanes": "3080,3081,3082,3083", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet372": { + "admin_status": "up", + "alias": "etp46b", + "dhcp_rate_limit": "300", + "index": "46", + "lanes": "3084,3085,3086,3087", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet376": { + "admin_status": "up", + "alias": "etp47a", + "dhcp_rate_limit": "300", + "index": "47", + "lanes": "3072,3073,3074,3075", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet380": { + "admin_status": "up", + "alias": "etp47b", + "dhcp_rate_limit": "300", + "index": "47", + "lanes": "3076,3077,3078,3079", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet384": { + "admin_status": "up", + "alias": "etp48a", + "dhcp_rate_limit": "300", + "index": "48", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet388": { + "admin_status": "up", + "alias": "etp48b", + "dhcp_rate_limit": "300", + "index": "48", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet392": { + "admin_status": "up", + "alias": "etp49a", + "dhcp_rate_limit": "300", + "index": "49", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet396": { + "admin_status": "up", + "alias": "etp49b", + "dhcp_rate_limit": "300", + "index": "49", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet400": { + "admin_status": "up", + "alias": "etp50a", + "dhcp_rate_limit": "300", + "index": "50", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet404": { + "admin_status": "up", + "alias": "etp50b", + "dhcp_rate_limit": "300", + "index": "50", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet408": { + "admin_status": "up", + "alias": "etp51a", + "dhcp_rate_limit": "300", + "index": "51", + "lanes": "2584,2585,2586,2587", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet412": { + "admin_status": "up", + "alias": "etp51b", + "dhcp_rate_limit": "300", + "index": "51", + "lanes": "2588,2589,2590,2591", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet416": { + "admin_status": "up", + "alias": "etp52a", + "dhcp_rate_limit": "300", + "index": "52", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet420": { + "admin_status": "up", + "alias": "etp52b", + "dhcp_rate_limit": "300", + "index": "52", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet424": { + "admin_status": "up", + "alias": "etp53a", + "dhcp_rate_limit": "300", + "index": "53", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet428": { + "admin_status": "up", + "alias": "etp53b", + "dhcp_rate_limit": "300", + "index": "53", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet432": { + "admin_status": "up", + "alias": "etp54a", + "dhcp_rate_limit": "300", + "index": "54", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet436": { + "admin_status": "up", + "alias": "etp54b", + "dhcp_rate_limit": "300", + "index": "54", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet440": { + "admin_status": "up", + "alias": "etp55a", + "dhcp_rate_limit": "300", + "index": "55", + "lanes": "2840,2841,2842,2843", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet444": { + "admin_status": "up", + "alias": "etp55b", + "dhcp_rate_limit": "300", + "index": "55", + "lanes": "2844,2845,2846,2847", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet448": { + "admin_status": "up", + "alias": "etp56a", + "dhcp_rate_limit": "300", + "index": "56", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet452": { + "admin_status": "up", + "alias": "etp56b", + "dhcp_rate_limit": "300", + "index": "56", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet456": { + "admin_status": "up", + "alias": "etp57a", + "dhcp_rate_limit": "300", + "index": "57", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet460": { + "admin_status": "up", + "alias": "etp57b", + "dhcp_rate_limit": "300", + "index": "57", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet464": { + "admin_status": "up", + "alias": "etp58a", + "dhcp_rate_limit": "300", + "index": "58", + "lanes": "2328,2329,2330,2331", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet468": { + "admin_status": "up", + "alias": "etp58b", + "dhcp_rate_limit": "300", + "index": "58", + "lanes": "2332,2333,2334,2335", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet472": { + "admin_status": "up", + "alias": "etp59a", + "dhcp_rate_limit": "300", + "index": "59", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet476": { + "admin_status": "up", + "alias": "etp59b", + "dhcp_rate_limit": "300", + "index": "59", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet480": { + "admin_status": "up", + "alias": "etp60a", + "dhcp_rate_limit": "300", + "index": "60", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet484": { + "admin_status": "up", + "alias": "etp60b", + "dhcp_rate_limit": "300", + "index": "60", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet488": { + "admin_status": "up", + "alias": "etp61a", + "dhcp_rate_limit": "300", + "index": "61", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet492": { + "admin_status": "up", + "alias": "etp61b", + "dhcp_rate_limit": "300", + "index": "61", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet496": { + "admin_status": "up", + "alias": "etp62a", + "dhcp_rate_limit": "300", + "index": "62", + "lanes": "2072,2073,2074,2075", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet500": { + "admin_status": "up", + "alias": "etp62b", + "dhcp_rate_limit": "300", + "index": "62", + "lanes": "2076,2077,2078,2079", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet504": { + "admin_status": "up", + "alias": "etp63a", + "dhcp_rate_limit": "300", + "index": "63", + "lanes": "2064,2065,2066,2067", + "mtu": "9100", + "speed": "400000", + "subport": "1" + }, + "Ethernet508": { + "admin_status": "up", + "alias": "etp63b", + "dhcp_rate_limit": "300", + "index": "63", + "lanes": "2068,2069,2070,2071", + "mtu": "9100", + "speed": "400000", + "subport": "2" + }, + "Ethernet512": { + "admin_status": "up", + "alias": "etp64", + "dhcp_rate_limit": "300", + "index": "64", + "lanes": "65520", + "mtu": "9100", + "speed": "10000", + "subport": "0" + }, + "Ethernet513": { + "admin_status": "up", + "alias": "etp65", + "dhcp_rate_limit": "300", + "index": "65", + "lanes": "65521", + "mtu": "9100", + "speed": "10000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_server": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202505_01" + } + }, + "VLAN": { + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + } + }, + "VLAN_MEMBER": { + "Vlan2001|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet256": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet264": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet288": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet296": { + "tagging_mode": "untagged" + }, + "Vlan2020|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet320": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet328": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet352": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet360": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet384": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet392": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet416": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet424": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet448": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet456": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet480": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet504": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet488": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet504": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-4/chill-ft/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-4/chill-ft/config_db.json new file mode 100644 index 00000000000..f0c44077efa --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-4/chill-ft/config_db.json @@ -0,0 +1,1421 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "telemetry": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "CONSOLE_SWITCH": { + "console_mgmt": { + "enabled": "no" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "chill-ft", + "hwsku": "32x400Gb", + "mac": "34:73:2D:66:B8:00", + "platform": "x86_64-8101_32fh_o-r0", + "synchronous_mode": "enable", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "telemetry": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "GNMI": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "KDUMP": { + "config": { + "enabled": "false", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307,2308,2309,2310,2311", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2320,2321,2322,2323,2324,2325,2326,2327", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2312,2313,2314,2315,2316,2317,2318,2319", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2056,2057,2058,2059,2060,2061,2062,2063", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "1792,1793,1794,1795,1796,1797,1798,1799", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2048,2049,2050,2051,2052,2053,2054,2055", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2560,2561,2562,2563,2564,2565,2566,2567", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2824,2825,2826,2827,2828,2829,2830,2831", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "2832,2833,2834,2835,2836,2837,2838,2839", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "2816,2817,2818,2819,2820,2821,2822,2823", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2568,2569,2570,2571,2572,2573,2574,2575", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2576,2577,2578,2579,2580,2581,2582,2583", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "1536,1537,1538,1539,1540,1541,1542,1543", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "1800,1801,1802,1803,1804,1805,1806,1807", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "1552,1553,1554,1555,1556,1557,1558,1559", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "1544,1545,1546,1547,1548,1549,1550,1551", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "1296,1297,1298,1299,1300,1301,1302,1303", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "1288,1289,1290,1291,1292,1293,1294,1295", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "1280,1281,1282,1283,1284,1285,1286,1287", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "1032,1033,1034,1035,1036,1037,1038,1039", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "264,265,266,267,268,269,270,271", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "272,273,274,275,276,277,278,279", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "256,257,258,259,260,261,262,263", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1024,1025,1026,1027,1028,1029,1030,1031", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp27", + "fec": "rs", + "index": "27", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp28", + "fec": "rs", + "index": "28", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "776,777,778,779,780,781,782,783", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "512,513,514,515,516,517,518,519", + "mtu": "9100", + "speed": "400000" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "528,529,530,531,532,533,534,535", + "mtu": "9100", + "speed": "400000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/AME_ROOT_CERTIFICATE.pem", + "client_crt_cname": "client.restapi.sonic.gbl", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "info" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2000|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2001|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2002|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2003|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2004|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2005|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2006|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2007|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2008|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2009|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2010|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2011|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2012|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2013|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2014|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2015|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2016|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2017|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2018|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2019|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2021|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2022|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2023|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2024|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2025|Ethernet216": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2026|Ethernet216": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-4/m64-leaf-ft/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-4/m64-leaf-ft/config_db.json new file mode 100644 index 00000000000..3bd37c0449b --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-4/m64-leaf-ft/config_db.json @@ -0,0 +1,2198 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "BREAKOUT_CFG": { + "Ethernet0": { + "brkout_mode": "1x100G" + }, + "Ethernet4": { + "brkout_mode": "1x100G" + }, + "Ethernet8": { + "brkout_mode": "1x100G" + }, + "Ethernet12": { + "brkout_mode": "1x100G" + }, + "Ethernet16": { + "brkout_mode": "1x100G" + }, + "Ethernet20": { + "brkout_mode": "1x100G" + }, + "Ethernet24": { + "brkout_mode": "1x100G" + }, + "Ethernet28": { + "brkout_mode": "1x100G" + }, + "Ethernet32": { + "brkout_mode": "1x100G" + }, + "Ethernet36": { + "brkout_mode": "1x100G" + }, + "Ethernet40": { + "brkout_mode": "1x100G" + }, + "Ethernet44": { + "brkout_mode": "1x100G" + }, + "Ethernet48": { + "brkout_mode": "1x100G" + }, + "Ethernet52": { + "brkout_mode": "1x100G" + }, + "Ethernet56": { + "brkout_mode": "1x100G" + }, + "Ethernet60": { + "brkout_mode": "1x100G" + }, + "Ethernet64": { + "brkout_mode": "1x100G" + }, + "Ethernet68": { + "brkout_mode": "1x100G" + }, + "Ethernet72": { + "brkout_mode": "1x100G" + }, + "Ethernet76": { + "brkout_mode": "1x100G" + }, + "Ethernet80": { + "brkout_mode": "1x100G" + }, + "Ethernet84": { + "brkout_mode": "1x100G" + }, + "Ethernet88": { + "brkout_mode": "1x100G" + }, + "Ethernet92": { + "brkout_mode": "1x100G" + }, + "Ethernet96": { + "brkout_mode": "1x100G" + }, + "Ethernet100": { + "brkout_mode": "1x100G" + }, + "Ethernet104": { + "brkout_mode": "1x100G" + }, + "Ethernet108": { + "brkout_mode": "1x100G" + }, + "Ethernet112": { + "brkout_mode": "1x100G" + }, + "Ethernet116": { + "brkout_mode": "1x100G" + }, + "Ethernet120": { + "brkout_mode": "1x100G" + }, + "Ethernet124": { + "brkout_mode": "1x100G" + }, + "Ethernet128": { + "brkout_mode": "1x100G" + }, + "Ethernet132": { + "brkout_mode": "1x100G" + }, + "Ethernet136": { + "brkout_mode": "1x100G" + }, + "Ethernet140": { + "brkout_mode": "1x100G" + }, + "Ethernet144": { + "brkout_mode": "1x100G" + }, + "Ethernet148": { + "brkout_mode": "1x100G" + }, + "Ethernet152": { + "brkout_mode": "1x100G" + }, + "Ethernet156": { + "brkout_mode": "1x100G" + }, + "Ethernet160": { + "brkout_mode": "1x100G" + }, + "Ethernet164": { + "brkout_mode": "1x100G" + }, + "Ethernet168": { + "brkout_mode": "1x100G" + }, + "Ethernet172": { + "brkout_mode": "1x100G" + }, + "Ethernet176": { + "brkout_mode": "1x100G" + }, + "Ethernet180": { + "brkout_mode": "1x100G" + }, + "Ethernet184": { + "brkout_mode": "1x100G" + }, + "Ethernet188": { + "brkout_mode": "1x100G" + }, + "Ethernet192": { + "brkout_mode": "1x100G" + }, + "Ethernet196": { + "brkout_mode": "1x100G" + }, + "Ethernet200": { + "brkout_mode": "1x100G" + }, + "Ethernet204": { + "brkout_mode": "1x100G" + }, + "Ethernet208": { + "brkout_mode": "1x100G" + }, + "Ethernet212": { + "brkout_mode": "1x100G" + }, + "Ethernet216": { + "brkout_mode": "1x100G" + }, + "Ethernet220": { + "brkout_mode": "1x100G" + }, + "Ethernet224": { + "brkout_mode": "1x100G" + }, + "Ethernet228": { + "brkout_mode": "1x100G" + }, + "Ethernet232": { + "brkout_mode": "1x100G" + }, + "Ethernet236": { + "brkout_mode": "1x100G" + }, + "Ethernet240": { + "brkout_mode": "1x100G" + }, + "Ethernet244": { + "brkout_mode": "1x100G" + }, + "Ethernet248": { + "brkout_mode": "1x100G" + }, + "Ethernet252": { + "brkout_mode": "1x100G" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "m64-leaf-ft", + "hwsku": "Cisco-8102-C64", + "mac": "80:27:6C:96:04:84", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "100000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + }, + "Vlan2064": { + "vlanid": "2064" + }, + "Vlan2065": { + "vlanid": "2065" + }, + "Vlan2066": { + "vlanid": "2066" + }, + "Vlan2067": { + "vlanid": "2067" + }, + "Vlan2068": { + "vlanid": "2068" + }, + "Vlan2069": { + "vlanid": "2069" + }, + "Vlan2070": { + "vlanid": "2070" + }, + "Vlan2071": { + "vlanid": "2071" + }, + "Vlan2072": { + "vlanid": "2072" + }, + "Vlan2073": { + "vlanid": "2073" + }, + "Vlan2074": { + "vlanid": "2074" + }, + "Vlan2075": { + "vlanid": "2075" + }, + "Vlan2076": { + "vlanid": "2076" + }, + "Vlan2077": { + "vlanid": "2077" + }, + "Vlan2078": { + "vlanid": "2078" + }, + "Vlan2079": { + "vlanid": "2079" + }, + "Vlan2080": { + "vlanid": "2080" + }, + "Vlan2081": { + "vlanid": "2081" + }, + "Vlan2082": { + "vlanid": "2082" + }, + "Vlan2083": { + "vlanid": "2083" + }, + "Vlan2084": { + "vlanid": "2084" + }, + "Vlan2085": { + "vlanid": "2085" + }, + "Vlan2086": { + "vlanid": "2086" + }, + "Vlan2087": { + "vlanid": "2087" + }, + "Vlan2088": { + "vlanid": "2088" + }, + "Vlan2089": { + "vlanid": "2089" + }, + "Vlan2090": { + "vlanid": "2090" + }, + "Vlan2091": { + "vlanid": "2091" + }, + "Vlan2092": { + "vlanid": "2092" + }, + "Vlan2093": { + "vlanid": "2093" + }, + "Vlan2094": { + "vlanid": "2094" + } + }, + "VLAN_MEMBER": { + "Vlan2032|Ethernet0": { + "tagging_mode": "untagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet24": { + "tagging_mode": "untagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet28": { + "tagging_mode": "untagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet32": { + "tagging_mode": "untagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet36": { + "tagging_mode": "untagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet40": { + "tagging_mode": "untagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet44": { + "tagging_mode": "untagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet48": { + "tagging_mode": "untagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet52": { + "tagging_mode": "untagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet56": { + "tagging_mode": "untagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet60": { + "tagging_mode": "untagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet64": { + "tagging_mode": "untagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet68": { + "tagging_mode": "untagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet72": { + "tagging_mode": "untagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet76": { + "tagging_mode": "untagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet80": { + "tagging_mode": "untagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet84": { + "tagging_mode": "untagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet88": { + "tagging_mode": "untagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet92": { + "tagging_mode": "untagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet96": { + "tagging_mode": "untagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet100": { + "tagging_mode": "untagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet124": { + "tagging_mode": "untagged" + }, + "Vlan2063|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2064|Ethernet128": { + "tagging_mode": "untagged" + }, + "Vlan2064|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2065|Ethernet132": { + "tagging_mode": "untagged" + }, + "Vlan2065|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2066|Ethernet136": { + "tagging_mode": "untagged" + }, + "Vlan2066|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2067|Ethernet140": { + "tagging_mode": "untagged" + }, + "Vlan2067|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2068|Ethernet144": { + "tagging_mode": "untagged" + }, + "Vlan2068|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2069|Ethernet148": { + "tagging_mode": "untagged" + }, + "Vlan2069|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2070|Ethernet152": { + "tagging_mode": "untagged" + }, + "Vlan2070|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2071|Ethernet156": { + "tagging_mode": "untagged" + }, + "Vlan2071|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2072|Ethernet160": { + "tagging_mode": "untagged" + }, + "Vlan2072|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2073|Ethernet164": { + "tagging_mode": "untagged" + }, + "Vlan2073|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2074|Ethernet168": { + "tagging_mode": "untagged" + }, + "Vlan2074|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2075|Ethernet172": { + "tagging_mode": "untagged" + }, + "Vlan2075|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2076|Ethernet176": { + "tagging_mode": "untagged" + }, + "Vlan2076|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2077|Ethernet180": { + "tagging_mode": "untagged" + }, + "Vlan2077|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2078|Ethernet184": { + "tagging_mode": "untagged" + }, + "Vlan2078|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2079|Ethernet188": { + "tagging_mode": "untagged" + }, + "Vlan2079|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2080|Ethernet192": { + "tagging_mode": "untagged" + }, + "Vlan2080|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2081|Ethernet196": { + "tagging_mode": "untagged" + }, + "Vlan2081|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2082|Ethernet200": { + "tagging_mode": "untagged" + }, + "Vlan2082|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2083|Ethernet204": { + "tagging_mode": "untagged" + }, + "Vlan2083|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2084|Ethernet208": { + "tagging_mode": "untagged" + }, + "Vlan2084|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2085|Ethernet212": { + "tagging_mode": "untagged" + }, + "Vlan2085|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2086|Ethernet216": { + "tagging_mode": "untagged" + }, + "Vlan2086|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2087|Ethernet220": { + "tagging_mode": "untagged" + }, + "Vlan2087|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2088|Ethernet224": { + "tagging_mode": "untagged" + }, + "Vlan2088|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2089|Ethernet228": { + "tagging_mode": "untagged" + }, + "Vlan2089|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2090|Ethernet232": { + "tagging_mode": "untagged" + }, + "Vlan2090|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2091|Ethernet236": { + "tagging_mode": "untagged" + }, + "Vlan2091|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2092|Ethernet240": { + "tagging_mode": "untagged" + }, + "Vlan2092|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2093|Ethernet244": { + "tagging_mode": "untagged" + }, + "Vlan2093|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2094|Ethernet248": { + "tagging_mode": "untagged" + }, + "Vlan2094|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-4/m64-root-ft/config_db.json b/infra/fanouts-configs/sonic-ucs-m6-4/m64-root-ft/config_db.json new file mode 100644 index 00000000000..4f854030dfe --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-4/m64-root-ft/config_db.json @@ -0,0 +1,2495 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "BREAKOUT_CFG": { + "Ethernet0": { + "brkout_mode": "1x100G" + }, + "Ethernet4": { + "brkout_mode": "1x100G" + }, + "Ethernet8": { + "brkout_mode": "1x100G" + }, + "Ethernet12": { + "brkout_mode": "1x100G" + }, + "Ethernet16": { + "brkout_mode": "1x100G" + }, + "Ethernet20": { + "brkout_mode": "1x100G" + }, + "Ethernet24": { + "brkout_mode": "1x100G" + }, + "Ethernet28": { + "brkout_mode": "1x100G" + }, + "Ethernet32": { + "brkout_mode": "1x100G" + }, + "Ethernet36": { + "brkout_mode": "1x100G" + }, + "Ethernet40": { + "brkout_mode": "1x100G" + }, + "Ethernet44": { + "brkout_mode": "1x100G" + }, + "Ethernet48": { + "brkout_mode": "1x100G" + }, + "Ethernet52": { + "brkout_mode": "1x100G" + }, + "Ethernet56": { + "brkout_mode": "1x100G" + }, + "Ethernet60": { + "brkout_mode": "1x100G" + }, + "Ethernet64": { + "brkout_mode": "1x100G" + }, + "Ethernet68": { + "brkout_mode": "1x100G" + }, + "Ethernet72": { + "brkout_mode": "1x100G" + }, + "Ethernet76": { + "brkout_mode": "1x100G" + }, + "Ethernet80": { + "brkout_mode": "1x100G" + }, + "Ethernet84": { + "brkout_mode": "1x100G" + }, + "Ethernet88": { + "brkout_mode": "1x100G" + }, + "Ethernet92": { + "brkout_mode": "1x100G" + }, + "Ethernet96": { + "brkout_mode": "1x100G" + }, + "Ethernet100": { + "brkout_mode": "1x100G" + }, + "Ethernet104": { + "brkout_mode": "1x100G" + }, + "Ethernet108": { + "brkout_mode": "1x100G" + }, + "Ethernet112": { + "brkout_mode": "1x100G" + }, + "Ethernet116": { + "brkout_mode": "1x100G" + }, + "Ethernet120": { + "brkout_mode": "1x100G" + }, + "Ethernet124": { + "brkout_mode": "1x100G" + }, + "Ethernet128": { + "brkout_mode": "1x100G" + }, + "Ethernet132": { + "brkout_mode": "1x100G" + }, + "Ethernet136": { + "brkout_mode": "1x100G" + }, + "Ethernet140": { + "brkout_mode": "1x100G" + }, + "Ethernet144": { + "brkout_mode": "1x100G" + }, + "Ethernet148": { + "brkout_mode": "1x100G" + }, + "Ethernet152": { + "brkout_mode": "1x100G" + }, + "Ethernet156": { + "brkout_mode": "1x100G" + }, + "Ethernet160": { + "brkout_mode": "1x100G" + }, + "Ethernet164": { + "brkout_mode": "1x100G" + }, + "Ethernet168": { + "brkout_mode": "1x100G" + }, + "Ethernet172": { + "brkout_mode": "1x100G" + }, + "Ethernet176": { + "brkout_mode": "1x100G" + }, + "Ethernet180": { + "brkout_mode": "1x100G" + }, + "Ethernet184": { + "brkout_mode": "1x100G" + }, + "Ethernet188": { + "brkout_mode": "1x100G" + }, + "Ethernet192": { + "brkout_mode": "1x100G" + }, + "Ethernet196": { + "brkout_mode": "1x100G" + }, + "Ethernet200": { + "brkout_mode": "1x100G" + }, + "Ethernet204": { + "brkout_mode": "1x100G" + }, + "Ethernet208": { + "brkout_mode": "1x100G" + }, + "Ethernet212": { + "brkout_mode": "1x100G" + }, + "Ethernet216": { + "brkout_mode": "1x100G" + }, + "Ethernet220": { + "brkout_mode": "1x100G" + }, + "Ethernet224": { + "brkout_mode": "1x100G" + }, + "Ethernet228": { + "brkout_mode": "1x100G" + }, + "Ethernet232": { + "brkout_mode": "1x100G" + }, + "Ethernet236": { + "brkout_mode": "1x100G" + }, + "Ethernet240": { + "brkout_mode": "1x100G" + }, + "Ethernet244": { + "brkout_mode": "1x100G" + }, + "Ethernet248": { + "brkout_mode": "1x100G" + }, + "Ethernet252": { + "brkout_mode": "1x100G" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "hostname": "m64-root-ft", + "hwsku": "Cisco-8102-C64", + "mac": "CC:79:D7:1A:91:30", + "platform": "x86_64-8102_64h_o-r0", + "timezone": "UTC" + } + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "disabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "enable" + } + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp0", + "index": "0", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "etp1", + "index": "1", + "lanes": "2308,2309,2310,2311", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "index": "2", + "lanes": "2320,2321,2322,2323", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "etp3", + "index": "3", + "lanes": "2324,2325,2326,2327", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp4", + "index": "4", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "etp5", + "index": "5", + "lanes": "2316,2317,2318,2319", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp6", + "index": "6", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "etp7", + "index": "7", + "lanes": "2060,2061,2062,2063", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp8", + "index": "8", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet36": { + "admin_status": "up", + "alias": "etp9", + "index": "9", + "lanes": "1796,1797,1798,1799", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp10", + "index": "10", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet44": { + "admin_status": "up", + "alias": "etp11", + "index": "11", + "lanes": "2052,2053,2054,2055", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp12", + "index": "12", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet52": { + "admin_status": "up", + "alias": "etp13", + "index": "13", + "lanes": "2564,2565,2566,2567", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp14", + "index": "14", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet60": { + "admin_status": "up", + "alias": "etp15", + "index": "15", + "lanes": "2828,2829,2830,2831", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp16", + "index": "16", + "lanes": "2832,2833,2834,2835", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet68": { + "admin_status": "up", + "alias": "etp17", + "index": "17", + "lanes": "2836,2837,2838,2839", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp18", + "index": "18", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet76": { + "admin_status": "up", + "alias": "etp19", + "index": "19", + "lanes": "2820,2821,2822,2823", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp20", + "index": "20", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet84": { + "admin_status": "up", + "alias": "etp21", + "index": "21", + "lanes": "2572,2573,2574,2575", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp22", + "index": "22", + "lanes": "2576,2577,2578,2579", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet92": { + "admin_status": "up", + "alias": "etp23", + "index": "23", + "lanes": "2580,2581,2582,2583", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp24", + "index": "24", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet100": { + "admin_status": "up", + "alias": "etp25", + "index": "25", + "lanes": "1540,1541,1542,1543", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp26", + "index": "26", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet108": { + "admin_status": "up", + "alias": "etp27", + "index": "27", + "lanes": "1804,1805,1806,1807", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp28", + "index": "28", + "lanes": "1552,1553,1554,1555", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet116": { + "admin_status": "up", + "alias": "etp29", + "index": "29", + "lanes": "1556,1557,1558,1559", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp30", + "index": "30", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet124": { + "admin_status": "up", + "alias": "etp31", + "index": "31", + "lanes": "1548,1549,1550,1551", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp32", + "index": "32", + "lanes": "1296,1297,1298,1299", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet132": { + "admin_status": "up", + "alias": "etp33", + "index": "33", + "lanes": "1300,1301,1302,1303", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp34", + "index": "34", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet140": { + "admin_status": "up", + "alias": "etp35", + "index": "35", + "lanes": "1292,1293,1294,1295", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp36", + "index": "36", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet148": { + "admin_status": "up", + "alias": "etp37", + "index": "37", + "lanes": "1284,1285,1286,1287", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp38", + "index": "38", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet156": { + "admin_status": "up", + "alias": "etp39", + "index": "39", + "lanes": "1036,1037,1038,1039", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp40", + "index": "40", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet164": { + "admin_status": "up", + "alias": "etp41", + "index": "41", + "lanes": "268,269,270,271", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp42", + "index": "42", + "lanes": "272,273,274,275", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet172": { + "admin_status": "up", + "alias": "etp43", + "index": "43", + "lanes": "276,277,278,279", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp44", + "index": "44", + "lanes": "20,21,22,23", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet180": { + "admin_status": "up", + "alias": "etp45", + "index": "45", + "lanes": "16,17,18,19", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp46", + "index": "46", + "lanes": "4,5,6,7", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet188": { + "admin_status": "up", + "alias": "etp47", + "index": "47", + "lanes": "0,1,2,3", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp48", + "index": "48", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet196": { + "admin_status": "up", + "alias": "etp49", + "index": "49", + "lanes": "260,261,262,263", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp50", + "index": "50", + "lanes": "12,13,14,15", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet204": { + "admin_status": "up", + "alias": "etp51", + "index": "51", + "lanes": "8,9,10,11", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp52", + "index": "52", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet212": { + "admin_status": "up", + "alias": "etp53", + "index": "53", + "lanes": "1028,1029,1030,1031", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp54", + "index": "54", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet220": { + "admin_status": "up", + "alias": "etp55", + "index": "55", + "lanes": "772,773,774,775", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp56", + "index": "56", + "lanes": "524,525,526,527", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet228": { + "admin_status": "up", + "alias": "etp57", + "index": "57", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp58", + "index": "58", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet236": { + "admin_status": "up", + "alias": "etp59", + "index": "59", + "lanes": "780,781,782,783", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp60", + "index": "60", + "lanes": "516,517,518,519", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet244": { + "admin_status": "up", + "alias": "etp61", + "index": "61", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp62", + "index": "62", + "lanes": "528,529,530,531", + "mtu": "9100", + "speed": "100000", + "subport": "0" + }, + "Ethernet252": { + "admin_status": "up", + "alias": "etp63", + "index": "63", + "lanes": "532,533,534,535", + "mtu": "9100", + "speed": "40000", + "subport": "0" + } + }, + "SNMP": { + "LOCATION": { + "Location": "public" + } + }, + "SNMP_COMMUNITY": { + "public": { + "TYPE": "RO" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "VLAN": { + "Vlan2000": { + "vlanid": "2000" + }, + "Vlan2001": { + "vlanid": "2001" + }, + "Vlan2002": { + "vlanid": "2002" + }, + "Vlan2003": { + "vlanid": "2003" + }, + "Vlan2004": { + "vlanid": "2004" + }, + "Vlan2005": { + "vlanid": "2005" + }, + "Vlan2006": { + "vlanid": "2006" + }, + "Vlan2007": { + "vlanid": "2007" + }, + "Vlan2008": { + "vlanid": "2008" + }, + "Vlan2009": { + "vlanid": "2009" + }, + "Vlan2010": { + "vlanid": "2010" + }, + "Vlan2011": { + "vlanid": "2011" + }, + "Vlan2012": { + "vlanid": "2012" + }, + "Vlan2013": { + "vlanid": "2013" + }, + "Vlan2014": { + "vlanid": "2014" + }, + "Vlan2015": { + "vlanid": "2015" + }, + "Vlan2016": { + "vlanid": "2016" + }, + "Vlan2017": { + "vlanid": "2017" + }, + "Vlan2018": { + "vlanid": "2018" + }, + "Vlan2019": { + "vlanid": "2019" + }, + "Vlan2020": { + "vlanid": "2020" + }, + "Vlan2021": { + "vlanid": "2021" + }, + "Vlan2022": { + "vlanid": "2022" + }, + "Vlan2023": { + "vlanid": "2023" + }, + "Vlan2024": { + "vlanid": "2024" + }, + "Vlan2025": { + "vlanid": "2025" + }, + "Vlan2026": { + "vlanid": "2026" + }, + "Vlan2027": { + "vlanid": "2027" + }, + "Vlan2028": { + "vlanid": "2028" + }, + "Vlan2029": { + "vlanid": "2029" + }, + "Vlan2030": { + "vlanid": "2030" + }, + "Vlan2031": { + "vlanid": "2031" + }, + "Vlan2032": { + "vlanid": "2032" + }, + "Vlan2033": { + "vlanid": "2033" + }, + "Vlan2034": { + "vlanid": "2034" + }, + "Vlan2035": { + "vlanid": "2035" + }, + "Vlan2036": { + "vlanid": "2036" + }, + "Vlan2037": { + "vlanid": "2037" + }, + "Vlan2038": { + "vlanid": "2038" + }, + "Vlan2039": { + "vlanid": "2039" + }, + "Vlan2040": { + "vlanid": "2040" + }, + "Vlan2041": { + "vlanid": "2041" + }, + "Vlan2042": { + "vlanid": "2042" + }, + "Vlan2043": { + "vlanid": "2043" + }, + "Vlan2044": { + "vlanid": "2044" + }, + "Vlan2045": { + "vlanid": "2045" + }, + "Vlan2046": { + "vlanid": "2046" + }, + "Vlan2047": { + "vlanid": "2047" + }, + "Vlan2048": { + "vlanid": "2048" + }, + "Vlan2049": { + "vlanid": "2049" + }, + "Vlan2050": { + "vlanid": "2050" + }, + "Vlan2051": { + "vlanid": "2051" + }, + "Vlan2052": { + "vlanid": "2052" + }, + "Vlan2053": { + "vlanid": "2053" + }, + "Vlan2054": { + "vlanid": "2054" + }, + "Vlan2055": { + "vlanid": "2055" + }, + "Vlan2056": { + "vlanid": "2056" + }, + "Vlan2057": { + "vlanid": "2057" + }, + "Vlan2058": { + "vlanid": "2058" + }, + "Vlan2059": { + "vlanid": "2059" + }, + "Vlan2060": { + "vlanid": "2060" + }, + "Vlan2061": { + "vlanid": "2061" + }, + "Vlan2062": { + "vlanid": "2062" + }, + "Vlan2063": { + "vlanid": "2063" + }, + "Vlan2064": { + "vlanid": "2064" + }, + "Vlan2065": { + "vlanid": "2065" + }, + "Vlan2066": { + "vlanid": "2066" + }, + "Vlan2067": { + "vlanid": "2067" + }, + "Vlan2068": { + "vlanid": "2068" + }, + "Vlan2069": { + "vlanid": "2069" + }, + "Vlan2070": { + "vlanid": "2070" + }, + "Vlan2071": { + "vlanid": "2071" + }, + "Vlan2072": { + "vlanid": "2072" + }, + "Vlan2073": { + "vlanid": "2073" + }, + "Vlan2074": { + "vlanid": "2074" + }, + "Vlan2075": { + "vlanid": "2075" + }, + "Vlan2076": { + "vlanid": "2076" + }, + "Vlan2077": { + "vlanid": "2077" + }, + "Vlan2078": { + "vlanid": "2078" + }, + "Vlan2079": { + "vlanid": "2079" + }, + "Vlan2080": { + "vlanid": "2080" + }, + "Vlan2081": { + "vlanid": "2081" + }, + "Vlan2082": { + "vlanid": "2082" + }, + "Vlan2083": { + "vlanid": "2083" + }, + "Vlan2084": { + "vlanid": "2084" + }, + "Vlan2085": { + "vlanid": "2085" + }, + "Vlan2086": { + "vlanid": "2086" + }, + "Vlan2087": { + "vlanid": "2087" + }, + "Vlan2088": { + "vlanid": "2088" + }, + "Vlan2089": { + "vlanid": "2089" + }, + "Vlan2090": { + "vlanid": "2090" + }, + "Vlan2091": { + "vlanid": "2091" + }, + "Vlan2092": { + "vlanid": "2092" + }, + "Vlan2093": { + "vlanid": "2093" + }, + "Vlan2094": { + "vlanid": "2094" + }, + "Vlan2095": { + "vlanid": "2095" + } + }, + "VLAN_MEMBER": { + "Vlan2000|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2000|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2001|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2002|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2003|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2004|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2005|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2006|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2007|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2008|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2009|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2010|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2011|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2012|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2013|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2014|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2015|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2016|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2017|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2018|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2019|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2020|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2021|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2022|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2023|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2024|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2025|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet12": { + "tagging_mode": "tagged" + }, + "Vlan2026|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2027|Ethernet104": { + "tagging_mode": "untagged" + }, + "Vlan2027|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2028|Ethernet108": { + "tagging_mode": "untagged" + }, + "Vlan2028|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2029|Ethernet112": { + "tagging_mode": "untagged" + }, + "Vlan2029|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2030|Ethernet116": { + "tagging_mode": "untagged" + }, + "Vlan2030|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2031|Ethernet120": { + "tagging_mode": "untagged" + }, + "Vlan2031|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2032|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2033|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2034|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2035|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2036|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2037|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2038|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2039|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2040|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2041|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2042|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2043|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2044|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2045|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2046|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2047|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2048|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2049|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2050|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2051|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2052|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2053|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2054|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2055|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2056|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2057|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2058|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2059|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2060|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2061|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2062|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2063|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2064|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2064|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2065|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2065|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2066|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2066|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2067|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2067|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2068|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2068|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2069|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2069|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2070|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2070|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2071|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2071|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2072|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2072|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2073|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2073|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2074|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2074|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2075|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2075|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2076|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2076|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2077|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2077|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2078|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2078|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2079|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2079|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2080|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2080|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2081|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2081|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2082|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2082|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2083|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2083|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2084|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2084|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2085|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2085|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2086|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2086|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2087|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2087|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2088|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2088|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2089|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2089|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2090|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2090|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2091|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2091|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2092|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2092|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2093|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2093|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2094|Ethernet0": { + "tagging_mode": "tagged" + }, + "Vlan2094|Ethernet252": { + "tagging_mode": "tagged" + }, + "Vlan2095|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan2095|Ethernet252": { + "tagging_mode": "tagged" + } + } +} \ No newline at end of file diff --git a/infra/fanouts-configs/sonic-ucs-m6-5/config.txt b/infra/fanouts-configs/sonic-ucs-m6-5/config.txt new file mode 100644 index 00000000000..a6ffc5bfcd6 --- /dev/null +++ b/infra/fanouts-configs/sonic-ucs-m6-5/config.txt @@ -0,0 +1,417 @@ + +version 9.3(5) Bios:version 05.43 +hostname nexus-dtor +vdc nexus-dtor id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource u4route-mem minimum 248 maximum 248 + limit-resource u6route-mem minimum 96 maximum 96 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + limit-resource vni_bd minimum 4096 maximum 4096 + +feature privilege +feature bash-shell +feature lldp + +no password strength-check +username admin password 5 $5$1JVyNQNC$/1nZVZzvVW79sdcB4H2zUtRkc0O460EOcrHK.ITod61 role network-admin +username shelladmin password 5 $5$APOKFB$G0wBz8wA/t0BeWxC3JDXB2cAfjVGFRosLs4mqEJhH8C role priv-15 +username shelladmin role network-admin +username shelladmin shelltype bash +username shelladmin passphrase lifetime 99999 warntime 7 gracetime 3 +ip domain-lookup +system default switchport +copp profile strict +snmp-server user admin network-admin auth md5 0x9b15e532b3ecdce045f4470d197535be priv 0x9b15e532b3ecdce045f4470d197535be localizedkey +snmp-server user shelladmin priv-15 auth md5 0x3b181d9ecf5efd8693dfc6e719b5eef6 priv 0x3b181d9ecf5efd8693dfc6e719b5eef6 localizedkey +snmp-server user shelladmin network-admin +rmon event 1 description FATAL(1) owner PMON@FATAL +rmon event 2 description CRITICAL(2) owner PMON@CRITICAL +rmon event 3 description ERROR(3) owner PMON@ERROR +rmon event 4 description WARNING(4) owner PMON@WARNING +rmon event 5 description INFORMATION(5) owner PMON@INFO + +ip route 0.0.0.0/0 1.74.23.7 +ip route 0.0.0.0/0 mgmt0 1.74.23.7 +vlan 1,100,200,1000,2000-2063 + +no spanning-tree vlan 2000-2063 +vrf context management + ip route 0.0.0.0/0 1.74.23.7 + + +interface Ethernet1/1 + switchport mode dot1q-tunnel + switchport access vlan 2000 + mtu 9216 + +interface Ethernet1/2 + switchport mode dot1q-tunnel + switchport access vlan 2001 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/3 + switchport mode dot1q-tunnel + switchport access vlan 2002 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/4 + switchport mode dot1q-tunnel + switchport access vlan 2003 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/5 + switchport mode dot1q-tunnel + switchport access vlan 2004 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/6 + switchport mode dot1q-tunnel + switchport access vlan 2005 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/7 + switchport mode dot1q-tunnel + switchport access vlan 2006 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/8 + switchport mode dot1q-tunnel + switchport access vlan 2007 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/9 + switchport mode dot1q-tunnel + switchport access vlan 2008 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/10 + switchport mode dot1q-tunnel + switchport access vlan 2009 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/11 + switchport mode dot1q-tunnel + switchport access vlan 2010 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/12 + switchport mode dot1q-tunnel + switchport access vlan 2011 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/13 + switchport mode dot1q-tunnel + switchport access vlan 2012 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/14 + switchport mode dot1q-tunnel + switchport access vlan 2013 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/15 + switchport mode dot1q-tunnel + switchport access vlan 2014 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/16 + switchport mode dot1q-tunnel + switchport access vlan 2015 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/17 + switchport mode dot1q-tunnel + switchport access vlan 2016 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/18 + switchport mode dot1q-tunnel + switchport access vlan 2017 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/19 + switchport mode dot1q-tunnel + switchport access vlan 2018 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/20 + switchport mode dot1q-tunnel + switchport access vlan 2019 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/21 + switchport mode dot1q-tunnel + switchport access vlan 2020 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/22 + switchport mode dot1q-tunnel + switchport access vlan 2021 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/23 + switchport mode dot1q-tunnel + switchport access vlan 2022 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/24 + switchport mode dot1q-tunnel + switchport access vlan 2023 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/25 + switchport mode dot1q-tunnel + switchport access vlan 2024 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/26 + switchport mode dot1q-tunnel + switchport access vlan 2025 + mtu 9216 + +interface Ethernet1/27 + switchport mode dot1q-tunnel + switchport access vlan 2026 + mtu 9216 + +interface Ethernet1/28 + switchport mode dot1q-tunnel + switchport access vlan 2027 + mtu 9216 + +interface Ethernet1/29 + switchport mode dot1q-tunnel + switchport access vlan 2028 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/30 + switchport mode dot1q-tunnel + switchport access vlan 2029 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/31 + switchport mode dot1q-tunnel + switchport access vlan 2030 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/32 + switchport mode dot1q-tunnel + switchport access vlan 2031 + spanning-tree bpdufilter enable + mtu 9216 + +interface Ethernet1/33 + switchport mode dot1q-tunnel + switchport access vlan 2032 + mtu 9216 + +interface Ethernet1/34 + switchport mode dot1q-tunnel + switchport access vlan 2033 + mtu 9216 + +interface Ethernet1/35 + switchport mode dot1q-tunnel + switchport access vlan 2034 + mtu 9216 + +interface Ethernet1/36 + switchport mode dot1q-tunnel + switchport access vlan 2035 + mtu 9216 + +interface Ethernet1/37 + switchport mode dot1q-tunnel + switchport access vlan 2036 + mtu 9216 + +interface Ethernet1/38 + switchport mode dot1q-tunnel + switchport access vlan 2037 + mtu 9216 + +interface Ethernet1/39 + switchport mode dot1q-tunnel + switchport access vlan 2038 + mtu 9216 + +interface Ethernet1/40 + switchport mode dot1q-tunnel + switchport access vlan 2039 + mtu 9216 + +interface Ethernet1/41 + switchport mode dot1q-tunnel + switchport access vlan 2040 + mtu 9216 + +interface Ethernet1/42 + switchport mode dot1q-tunnel + switchport access vlan 2041 + mtu 9216 + +interface Ethernet1/43 + switchport mode dot1q-tunnel + switchport access vlan 2042 + mtu 9216 + +interface Ethernet1/44 + switchport mode dot1q-tunnel + switchport access vlan 2043 + mtu 9216 + +interface Ethernet1/45 + switchport mode dot1q-tunnel + switchport access vlan 2044 + mtu 9216 + +interface Ethernet1/46 + switchport mode dot1q-tunnel + switchport access vlan 2045 + mtu 9216 + +interface Ethernet1/47 + switchport mode dot1q-tunnel + switchport access vlan 2046 + mtu 9216 + +interface Ethernet1/48 + switchport mode dot1q-tunnel + switchport access vlan 2047 + mtu 9216 + speed 100000 + duplex full + no negotiate auto + +interface Ethernet1/49 + switchport mode dot1q-tunnel + switchport access vlan 2048 + mtu 9216 + +interface Ethernet1/50 + switchport mode dot1q-tunnel + switchport access vlan 2049 + mtu 9216 + +interface Ethernet1/51 + switchport mode dot1q-tunnel + switchport access vlan 2050 + mtu 9216 + +interface Ethernet1/52 + switchport mode dot1q-tunnel + switchport access vlan 2051 + mtu 9216 + +interface Ethernet1/53 + switchport mode dot1q-tunnel + switchport access vlan 2052 + mtu 9216 + +interface Ethernet1/54 + switchport mode dot1q-tunnel + switchport access vlan 2053 + mtu 9216 + +interface Ethernet1/55 + switchport mode dot1q-tunnel + switchport access vlan 2054 + mtu 9216 + +interface Ethernet1/56 + switchport mode dot1q-tunnel + switchport access vlan 2055 + mtu 9216 + +interface Ethernet1/57 + switchport mode dot1q-tunnel + switchport access vlan 2056 + mtu 9216 + +interface Ethernet1/58 + switchport mode dot1q-tunnel + switchport access vlan 2057 + mtu 9216 + +interface Ethernet1/59 + switchport mode dot1q-tunnel + switchport access vlan 2058 + mtu 9216 + +interface Ethernet1/60 + switchport mode dot1q-tunnel + switchport access vlan 2059 + mtu 9216 + +interface Ethernet1/61 + switchport mode dot1q-tunnel + switchport access vlan 2060 + mtu 9216 + +interface Ethernet1/62 + switchport mode dot1q-tunnel + switchport access vlan 2061 + mtu 9216 + +interface Ethernet1/63 + switchport mode dot1q-tunnel + switchport access vlan 2062 + mtu 9216 + +interface Ethernet1/64 + switchport mode dot1q-tunnel + switchport access vlan 2063 + mtu 9216 + +interface Ethernet1/65 + switchport mode trunk + switchport trunk allowed vlan 100,200,1000,2000-2063 + spanning-tree bpdufilter enable + mtu 9216 + speed 10000 + duplex full + +interface Ethernet1/66 + +interface mgmt0 + speed 100 + vrf member management + ip address 1.74.23.138/16 +line console +line vty +boot nxos bootflash:/nxos.9.3.5.bin +no system default switchport shutdown + +no logging rate-limit + + diff --git a/infra/generate_spytest_html_report.py b/infra/generate_spytest_html_report.py new file mode 100644 index 00000000000..dc89320f0da --- /dev/null +++ b/infra/generate_spytest_html_report.py @@ -0,0 +1,217 @@ +import datetime +import os +import sys + +import numpy as np +import pandas as pd +from jinja2 import Environment + + +jinja2_template_str = """ + + + Test Execution Report + + + +

Test Execution Report

+
+

Suite Start Time: {{ suite_start_time }}

+

Suite Finish Time: {{ suite_finish_time }}

+

Total Suite Time: {{ total_suite_time }}

+

Total Test Cases: {{ total_test_cases }}

+

Pass Percentage: {{ pass_percentage|round(2) }}%

+

Fail Percentage: {{ fail_percentage|round(2) }}%

+

Software Versions: {{ software_versions }}

+
+ + +

Scripts Executed

+ {{ scripts_table|safe }} + {% if failed_test_cases_table %} +

Failed Test Cases

+ {{ failed_test_cases_table|safe }} + {% else %} +

No failed test cases.

+ {% endif %} + + + +""" + +#datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S') +date_format = '%Y-%m-%d %H:%M:%S' +def get_test_execution_data(script_data: list): + data = [] + for item in script_data: + script: dict = item + script_dict = {} + script_dict['Script Name'] = script.get('SCRIPT_NAME') + script_dict['Simulator'] = script.get('SIM_ID') + script_dict['Start Time'] = script.get('EXEC_START_TIME', None) + script_dict['End Time'] = script.get('EXEC_COMPLETION_TIME', None) + script_dict['Execution Time'] = script.get('EXECUTION_TIME', None) + script_dict['Total Test Cases'] = script.get('TOTAL_TEST', None) + script_dict['Test Cases Failed'] = script.get('FAILED_TEST', 'Skipped') + script_dict['Test Cases Passed'] = script.get('PASSED_TEST', 'Skipped') + script_dict['Skipped Test'] = script.get('SKIPPED_TEST', 0) + script_dict['Software Versions'] = script.get('SOFTWARE_VERSION', 0) + script_dict['DUT Failure'] = script.get('DUT_FAIL', 0) + script_dict['Command Failure'] = script.get('CMD_FAIL', 0) + script_dict['Config Failure'] = script.get('CONFIG_FAIL', 0) + script_dict['TGEN Failure'] = script.get('TGEN_FAIL', 0) + script_dict['Pass Percentage'] = script.get('SUCCESS_RATE', None) + script_dict['Log File'] = script.get('LOG_REPORT', None) + + data.append(script_dict) + + return data + +# Format total suite time +def format_timedelta(td): + total_seconds = int(td.total_seconds()) + hours, remainder = divmod(total_seconds, 3600) + minutes, seconds = divmod(remainder, 60) + return f"{hours}:{minutes:02}:{seconds:02}" + +def rest_of_operations(data, orig_data, failed_data, dest="./", sim_log=None): + report_file = "test_execution_report.html" + # Create a DataFrame from the scripts data + df = pd.DataFrame(data) + orig_df = pd.DataFrame(orig_data) + + # No script_data: write a stub report and return False so the caller + # can mark the run failed instead of exiting green on zero results. + if df.empty: + print( + "[generate_spytest_html_report] ERROR: script_data is empty -- " + "the per-SIM collect_result phase produced no results. Writing " + "stub report and signalling FAILURE to the caller." + ) + stub_html = ( + "Test Execution Report - " + "NO DATA

No results collected

" + "

The orchestrator finished but no script_data was produced " + "(every SIM's collect_result raised, every bucket wedged, or " + "test collection failed).

" + "

This run is being reported as FAILED. Check the parallel-run " + "log for the actual per-SIM exception and traceback.

" + "" + ) + with open(f"{dest}/{report_file}", "w") as f: + f.write(stub_html) + return False + + # Format the 'Log File' column to be HTML links + df["Log File"] = df["Log File"].apply( + lambda x: ( + f'View Log' if x else "Skipped" + ) + ) + #print(df["Log File"]) + + # Calculate total suite time + suite_start_time = pd.to_datetime(orig_df["EXEC_START_TIME"]).min() + suite_finish_time = pd.to_datetime(orig_df["EXEC_COMPLETION_TIME"]).max() + total_suite_time = suite_finish_time - suite_start_time + + # Format suite start and finish times + suite_start_time_str = suite_start_time.strftime("%Y-%m-%d %H:%M:%S") + suite_finish_time_str = suite_finish_time.strftime("%Y-%m-%d %H:%M:%S") + + total_suite_time_str = format_timedelta(total_suite_time) + + # Calculate total test cases and pass/fail percentages using numpy + total_passed = df["Test Cases Passed"].sum() + total_test_cases = df["Total Test Cases"].sum() + total_failed = total_test_cases - total_passed + + pass_fail_array = np.array([total_passed, total_failed]) + percentages = pass_fail_array / total_test_cases * 100 + pass_percentage, fail_percentage = percentages + + software_versions = df['Software Versions'][0] + df.pop('Software Versions') + + failed_test_cases = [] + for sim, data in failed_data.items(): + #script_name = row["Script Name"] + for item in data: + script_name, test_case, log = item + failed_test_cases.append( + {"Simulator": sim, "Script Name": script_name, "Failed Test Case": (test_case, log)} + ) + + failed_df = pd.DataFrame(failed_test_cases) + if failed_test_cases: + failed_df["Failed Test Case"] = failed_df['Failed Test Case'].apply(failed_tc_df_map) + #print(failed_df) + + # Initialize Jinja2 environment + env = Environment() + template = env.from_string(jinja2_template_str) + ''' + if sim_log: + sim_log = f'View SIM Log' + ''' + # Render the HTML report + rendered_html = template.render( + suite_start_time=suite_start_time_str, + suite_finish_time=suite_finish_time_str, + total_suite_time=total_suite_time_str, + total_test_cases=total_test_cases, + pass_percentage=pass_percentage, + fail_percentage=fail_percentage, + software_versions=software_versions, + #suite_log=sim_log, + scripts_table=df.to_html(classes="scripts-table", index=False, escape=False), + failed_test_cases_table=failed_df.to_html( + classes="failed-tests-table", index=False, escape=False + ), + #graph_image="pass_fail_pie_chart.png", + ) + + # Write the HTML report to a file + with open(f"{dest}/{report_file}", "w") as f: + f.write(rendered_html) + + print(f"Test execution report generated: '{dest}/{report_file}'") + return True + + +def failed_tc_df_map(testcase): + tc, log = testcase + return f'{tc}' if log else "Not Available" + + +def process_script_dates(failed_data): + new_failed_data = {} + for sim, data in failed_data.items(): + if not data: + continue + new_failed_data[sim] = data + + return new_failed_data + +def generate_test_report(scripts_data, failed_data, suite_data: dict = {}, sim_data: dict = {}, dest="./", log=None): + new_failed_data = process_script_dates(failed_data) + data = get_test_execution_data(scripts_data) + # Returns True on success, False when no data was available so the caller + # (orchestrator) can mark the run failed instead of silently passing. + return rest_of_operations(data, scripts_data, new_failed_data, dest=dest, sim_log=log) + +if __name__ == '__main__': + scripts_data, failed_data = {}, {} + generate_test_report(scripts_data, failed_data) + diff --git a/infra/hw_setup_utils.py b/infra/hw_setup_utils.py new file mode 100644 index 00000000000..110df20e369 --- /dev/null +++ b/infra/hw_setup_utils.py @@ -0,0 +1,1839 @@ +import sys +from collections import namedtuple + +import pexpect +import time +import os +from datetime import datetime +import json +import requests +import logging +import paramiko +import yaml +from utils import _run_cmd_in_ssh, _run_cmd_in_ssh_container, copy_logfiles +from typing import Tuple, Any, Dict, List, Union +import stat +import argparse +import shlex +import re +from urllib import parse + +JsonObject = Dict[str, Any] + +HW_CONFIG_FILE = "config/hw_cfg.json" +FORWARDING_TESTCASES = [ + 'reporting/suites/tortuga-mh', + 'reporting/suites/tortuga', + 'reporting/suites/tortuga_parallel', + 'reporting/suites/apple-cvt-ipfabric', + 'reporting/suites/tortuga_gamut', +] + +def load_json(filepath): + """ + Load the json file + :param filepath: + :return: + """ + res = {} + + if os.path.exists(filepath): + full_filepath = filepath + else: + full_filepath = os.path.dirname(os.path.abspath(__file__)) + full_filepath = os.path.join(full_filepath, "../" + filepath) + + if not os.path.exists(full_filepath): + log.error( + "File not found %s, return empty configuration" % full_filepath) + return res + with open(full_filepath, "r") as f: + res = json.load(f) + return res + +def read_file(filepath): + """ + Read file content + :param filepath: + :return: list of string + """ + res = [] + if os.path.exists(filepath): + full_filepath = filepath + else: + full_filepath = os.path.dirname(os.path.abspath(__file__)) + full_filepath = os.path.join(full_filepath, "../" + filepath) + + if not os.path.exists(full_filepath): + log.error( + "File not found %s, return empty configuration" % full_filepath) + return res + with open(full_filepath, "r") as f: + res = f.readlines() + return res + +def init_logging(name): + """ + initial logging + :param name: + :return: + """ + log = logging.getLogger('%s' % name) + log.setLevel(logging.DEBUG) + fileHander = logging.FileHandler(os.path.join('./', '%s.log' % name)) + fileHander.setLevel(logging.DEBUG) + streamHandler = logging.StreamHandler() + streamHandler.setLevel(logging.DEBUG) + formatter = logging.Formatter( + '%(asctime)s [%(filename)s:%(lineno)d] %(levelname)s: ' + '%(message)s') + fileHander.setFormatter(formatter) + streamHandler.setFormatter(formatter) + log.addHandler(fileHander) + log.addHandler(streamHandler) + log.info('Start log ################### %s ###################' % name) + return log + +log = init_logging("HW_SANITY_LOGS") + +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" + +STRESS_DEB = 'stress_1.0.4-4_amd64.deb' +DUT_FAILURE_ERROR = "!!!!! Prepare DUT failed, skip testing !!!!!" +SANITY_SCRIPT_ERROR = "Skip rest of the scripts if there is any. ===" +DEFAULT_RUN_LINES = 2 +DEFAULT_RUN_STRING = "run_tests.sh" + +path = os.path.dirname(os.path.abspath(__file__)) +TEMPLATE_DIR = "%s/../templates" % path +DEFAULT_LLDP_COUNT = 7 +SSH_PORT = 22 +#constants +KEY_UP = '\x1b[A' +KEY_DOWN = '\x1b[B' +KEY_RIGHT = '\x1b[C' +KEY_LEFT = '\x1b[D' +newline_prompt = '\n' +telnet_escape_prompt = '\x1b]' +telnet_error_prompt = "telnet: Unable to connect to remote host" +telnet_lab_password = "lab" + +SUMMARY_REPORT_FILENAME = "results.json" +COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" +SUMMARY_REPORT_PATH = f"../../{SUMMARY_REPORT_FILENAME}" +COMMON_REPORT_PATH = f"../../{COMMON_REPORT_FILENAME}" + +MAX_PARTS_IMAGE_NAME = 6 +START_INDEX_IMAGE = 2 +IMAGE_INDEX = 4 + +# order matters -- first match in stream will be used +streams_list = ["202205", + "202305", + "202311", + "202405c", + "202405", + "202411", + "202501", + "202505", + "202506", + "202605", + "202511", + "c-master", + "master", + ] + +# overrides must use full stream names like "cisco.202511.1.signed" +STREAM_BRANCH_OVERRIDE = { + "cisco.202505c.ztp": "c-master", # MIGSOFTWAR-41568 +} + +BIN_FILE = "sonic-cisco-8000.bin" + + +#prompts +sonic_login_prompt = "sonic login: " +login_prompt = " login: " +cisco_prompt = "cisco@" +sonic_prompt = "@sonic:" +admin_prompt = "admin@" +pre_sonic_prompt = "/home/cisco# " +pre_admin_prompt = "/home/admin#" +grub_selection = "The highlighted entry will be executed automatically in 4s." +onie_prompt = "ONIE:" +vxr_prompt = "vxr@" +first_login = "Are you sure you want to continue connecting " + +passwd_prompt = 'Password' +lower_pass_prompt = 'password' + +#credentials/commands to send +DUT_USERNAME = 'admin' +DUT_PASSWORD = 'password' +CISCO_USERNAME = 'cisco' +CISCO_PASSWORD = 'cisco123' + + +WHITEBOX_TOKEN = os.getenv("WHITEBOX_TOKEN") +PIPELINE_TYPE = os.getenv("PIPELINE_TYPE") +SONIC_TEST_BRANCH = os.getenv("SONIC_TEST_BRANCH") +SONIC_TEST_REPO = "wwwin-github.cisco.com/whitebox/sonic-test" +TORTUGA_SONIC_TEST_FOLDER = '/home/sonic/cicd2/sonic-test/' +WORKSPACE = os.getenv("WORKSPACE") +SANITY_LOGS_PATH = 'sanity_logs' +DEFAULT_LOGS_PATH = '/home/sonic/test_logs/' + +EMPTY = "{}" +DELETE_CMD = f"find . -maxdepth 1 -type d -mtime +30 -exec rm -rf {EMPTY} \;" + +# Parse config file +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +allure_directory = allure_config['allure']['local-report-dir'] + + +def ensure_allure_installed_in_container(ssh, hostname, container_name): + """Install the Allure CLI in the sonic-mgmt container when it is missing.""" + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, "allure --version") + if status_code == 0: + log.info(f"Allure already installed in container {container_name}: {stdout.strip()}") + return 0 + + log.info(f"Allure not found in container {container_name}, installing from debian package") + destination_path = "/data" + testbed_mount_dir = get_container_local_mount_dir(ssh, container_name, destination_path) + + allure_debian_url = allure_config["allure"]["debian-url"] + if not allure_debian_url: + raise Exception("allure debian package URL is not provided") + + package_name = os.path.basename(parse.urlparse(allure_debian_url).path) + + clear_debs = f"cd {shlex.quote(testbed_mount_dir)} && rm -f allure*.deb*" + _, _, clear_status = _run_cmd_in_ssh(ssh, clear_debs) + if clear_status != 0: + raise Exception(f"Failed to clear existing Allure .deb files under {testbed_mount_dir}") + + wget_cmd = f"wget {shlex.quote(allure_debian_url)} -P {shlex.quote(testbed_mount_dir)}" + stdout, stderr, status_code = _run_cmd_in_ssh(ssh, wget_cmd) + if status_code != 0: + raise Exception(f"Failed to download allure package: stdout={stdout}, stderr={stderr}") + + stdout, stderr, status_code = _run_cmd_in_ssh_container( + ssh, container_name, f"sudo dpkg -i {destination_path}/{package_name}" + ) + if status_code != 0: + raise Exception(f"Failed to install allure package: stdout={stdout}, stderr={stderr}") + + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, "allure --version") + if status_code != 0: + raise Exception(f"Failed to verify allure installation: stdout={stdout}, stderr={stderr}") + + cleanup_debs = f"cd {shlex.quote(testbed_mount_dir)} && rm -f allure*.deb*" + _run_cmd_in_ssh(ssh, cleanup_debs) + log.info(f"Allure installed successfully in container {container_name} on {hostname}") + return 0 + + +_SAFE_ALLURE_PATH_COMPONENT = re.compile(r"^[A-Za-z0-9._-]+$") + + +def _validate_allure_path_component(component_name, value): + """Reject scope/build ids that would be unsafe in container shell paths.""" + s = str(value) + if not _SAFE_ALLURE_PATH_COMPONENT.fullmatch(s): + raise ValueError( + f"Invalid {component_name} {value!r}: must contain only letters, digits, '.', '_', and '-'" + ) + return s + + +def allure_results_dir_for_build_id(base_dir, scope_id): + """ + Directory for Allure raw results under base_dir, suffix ``_build_``. + + HW sanity uses **sonic image_id** as scope_id (must match ``do_full_run.run_test``); the + parameter name is historical. Reruns append new ``run_*`` children under this path. + """ + safe = _validate_allure_path_component("scope_id", scope_id) + return f"{base_dir.rstrip('/')}_build_{safe}" + + +def allure_run_dir_for_build_id(build_scoped_path, build_id): + """Per-Jenkins-build Allure results dir: ``/run_``.""" + safe_build_id = _validate_allure_path_component("build_id", build_id) + return f"{build_scoped_path.rstrip('/')}/run_{safe_build_id}" + + +def allure_results_path_has_data(ssh, container_name, path): + """Return True if the container path contains pytest-allure *-result.json files.""" + q = shlex.quote(path) + cmd = "test -d {} && find {} -maxdepth 6 -type f -name '*-result.json' 2>/dev/null | head -n 1 | wc -l".format( + q, q + ) + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, cmd) + if status_code != 0: + return False + try: + return int(stdout.strip()) > 0 + except ValueError: + return False + + +def list_run_subdirs_under_build(ssh, container_name, build_scoped_path): + """ + Every direct child directory named run_* under build_scoped_path (no *-result.json filter). + Used as the full input set for the combined Allure report. + """ + q = shlex.quote(build_scoped_path) + cmd = ( + "if [ ! -d {p} ]; then exit 0; fi; " + "find {p} -mindepth 1 -maxdepth 1 -type d -name 'run_*' -print | sort".format(p=q) + ) + stdout, _, status_code = _run_cmd_in_ssh_container(ssh, container_name, cmd) + if status_code != 0: + return [] + return [line.strip() for line in stdout.splitlines() if line.strip()] + + +def allure_run_dirs_and_valid_sources(ssh, container_name, build_scoped_path, build_id=None): + """ + Returns (all_run_subdirs, dirs_with_allure_results). + + all_run_subdirs: all run_* children under the build folder. + dirs_with_allure_results: directories used for the primary Allure report. When build_id is + given and run_* layout is in use, only the current ``run_`` dir is returned and + only if it contains *-result.json (older runs may still appear in all_run_subdirs for a + combined report). Without build_id, any run_* dir with results is accepted (legacy callers). + Legacy layout (no run_*): ([], [build_scoped_path]) when the build root has results. + """ + run_subdirs = list_run_subdirs_under_build(ssh, container_name, build_scoped_path) + if run_subdirs: + if build_id is not None: + current_run = allure_run_dir_for_build_id(build_scoped_path, build_id) + if not allure_results_path_has_data(ssh, container_name, current_run): + return run_subdirs, [] + return run_subdirs, [current_run] + valid = [d for d in run_subdirs if allure_results_path_has_data(ssh, container_name, d)] + return run_subdirs, valid + if allure_results_path_has_data(ssh, container_name, build_scoped_path): + return [], [build_scoped_path] + return [], [] + + +def list_allure_result_sources_for_build(ssh, container_name, build_scoped_path): + """ + Return run directories under build_scoped_path that contain *-result.json files. + Falls back to build_scoped_path itself when legacy layout stores results directly there. + """ + _, valid = allure_run_dirs_and_valid_sources(ssh, container_name, build_scoped_path) + return valid + + +def newest_run_results_dir(ssh, container_name, all_sources): + """ + Pick the latest run_* folder under a build (highest numeric suffix) that contains Allure results. + Used for the per-run HTML report when multiple run_* dirs exist; combined report uses all_sources. + """ + if not all_sources: + return "" + best = "" + best_n = -1 + for s in all_sources: + m = re.search(r"/run_(\d+)$", s) + if not m: + continue + n = int(m.group(1)) + if n > best_n and allure_results_path_has_data(ssh, container_name, s): + best_n = n + best = s + if best: + return best + for s in all_sources: + if allure_results_path_has_data(ssh, container_name, s): + return s + return all_sources[-1] + + +def _run_index_suffix_for_path(results_path): + m = re.search(r"/run_(\d+)$", results_path or "") + return m.group(1) if m else None + + +def _publish_one_allure_report( + ssh, + container_name, + container_channel, + testbed_mount_dir, + destination_path, + allure_report_directory_name, + allure_display_name, + sources_arg, +): + """ + Run allure generate inside the container, archive, copy to local and remote report dir, cleanup. + Returns (exit_code, report_url_or_error_string). + """ + generate_cmd = ( + f"allure generate --name {shlex.quote(allure_display_name)} " + f"-o /tmp/{allure_report_directory_name} {sources_arg}" + ) + stdout, stderr, status_code = _run_cmd_in_ssh_container(ssh, container_name, generate_cmd) + if status_code != 0: + err = f"Failed to generate allure report: stdout={stdout}, stderr={stderr}" + log.error(err) + return -1, err + + _run_cmd_in_channel( + container_channel, + f"tar -cvzf {destination_path}/{allure_report_directory_name}.tar.gz /tmp/{allure_report_directory_name}", + True, + ) + + _run_cmd_in_channel( + container_channel, + f"rm -rf /tmp/{allure_report_directory_name}", + True, + ) + + ftp_client = ssh.open_sftp() + try: + ftp_client.get( + f"{testbed_mount_dir}/{allure_report_directory_name}.tar.gz", + f"/tmp/{allure_report_directory_name}.tar.gz", + ) + finally: + ftp_client.close() + + result = os.system(f"tar -xvzf /tmp/{allure_report_directory_name}.tar.gz -C /") + if result != 0: + return -1, "failed to extract the allure report tarball" + + remote_report_dir = allure_config["allure"]["remote-report-dir"] + remote_report_dir = remote_report_dir if remote_report_dir.endswith("/") else remote_report_dir + "/" + result = os.system(f"cp -R /tmp/{allure_report_directory_name} {remote_report_dir}/") + if result != 0: + return -1, "failed to copy the allure report to remote" + + os.system(f"rm -rf /tmp/{allure_report_directory_name}") + os.system(f"rm -rf /tmp/{allure_report_directory_name}.tar.gz") + + allure_report_url = ( + f"{allure_config['allure']['server-base-url']}/{remote_report_dir}{allure_report_directory_name}" + ) + return 0, allure_report_url + + +UNSET_PROXY = "unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy" +MAX_RETRIES = 10 +MAX_RETRIES_TIMEOUT = 20 +RUN_TESTS_PREFIX = f"cd /data/tests && {UNSET_PROXY} && nohup" + +#dictionaries of testbeds + +hw_cfg = load_json(HW_CONFIG_FILE) +testbed_info = hw_cfg["testbed-info"] +default_info = hw_cfg["default-info"] + +def checkStreamCompatibility(testbed, stream): + log.info("Started checkStreamCompatibility") + hw_config = load_json(HW_CONFIG_FILE) + stream_list = hw_config['testbed-streams'].get(testbed) + if not stream_list or stream_list == "None": + return True + if stream in stream_list: + log.info(f"Stream {stream} is compatible with the topology {testbed}!") + return True + else: + log.error(f"Stream {stream} is not compatible with the topology {testbed}!") + return False + +def checkTestbedAvailability(testbed): + log.info("Started checkTestbedAvailability") + testbed_info_dict = getTestbedInfoDict(testbed) + local_ucs = testbed_info_dict['ucs_host_name'] + run_type = testbed_info_dict['run_type_check'] + + p2 = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], None) + p2.expect(local_ucs) + if checkForExistingRuns(p2, run_type, local_ucs)>0: + log.info("Some run_test process already running! Please wait until the current run is finished.") + return False + else: + return True + +def cleanUpImageFolder(thread, prompt): + thread.sendline(DELETE_CMD) + thread.expect(prompt, timeout=60*10) + return thread + + +def checkSpace(p, testbed): + ucs = getImageUCS(testbed) + cmd = ucs['username']+"@"+ucs["host"] + check = p.expect(["No space left on device", cmd]) + if check == 0: + log.error(f"Please make some space in UCS, {ucs['host']}") + return -1 + else: + return + +def scpUtil(thread, scpCommand, password): + thread.sendline(scpCommand) + while True: + i = thread.expect([first_login, lower_pass_prompt, "scp: Connection closed"], timeout=600) + log.debug(thread.before) + log.debug(thread.after) + if i == 0: + thread.sendline("yes") + elif i == 1: + thread.sendline(password) + break + else: + logging.error("Copying was unsuccessful due to authentication error!") + break + +def copyDockerFileToDut(testbed, image_id): + log.debug("Copy Docker rpc file to DUT to run special tests") + testbed_info_dict = getTestbedInfoDict(testbed) + local_ucs = testbed_info_dict['ucs_host_name'] + try: + p2 = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], 600) + p2.sendline("docker ps -a") + p2.expect(local_ucs) + image_ucs = getImageUCS(testbed) + + for ssh in testbed_info_dict['dut_ssh']: + [p1, prompt] = sshDUTUtil(p2, ssh) + p1.expect(prompt) + scp_prompt = image_ucs['scp_prompt'] + pswd = image_ucs['password'] + scpUtil(p1, f'scp {scp_prompt}/{image_id}/docker-syncd-cisco-rpc.gz ~/', pswd) + p1.expect(prompt) + p1.close() + p2.close() + except Exception as e: + log.error(str(e)) + return + +def sshUtil(username, host, password, timeout): + try: + thread = pexpect.spawn(f'ssh {username}@{host}', timeout=timeout, logfile=sys.stdout, encoding='utf-8') + log.debug(thread.after) + while True: + i = thread.expect([first_login, lower_pass_prompt]) + if i == 0: + thread.sendline("yes") + elif i == 1: + thread.sendline(password) + break + else: + log.error(f"Logging into {host} was not successful!") + break + time.sleep(2) + except Exception as e: + log.debug(str(e)) + time.sleep(1) + log.info("Logged in!") + return thread + +def sshDUTUtil(p1, dut_ssh_host, prodImage=False): + log.debug(DUT_USERNAME) + log.debug(admin_prompt) + p1.sendline(f'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no {DUT_USERNAME}@{dut_ssh_host}') + time.sleep(5) + + while True: + i = p1.expect([first_login, + lower_pass_prompt, + "Last login: ", + "use are subject to monitoring", + "Open Networking in the Cloud", + ]) + if i == 0: + p1.sendline("yes") + elif i == 1: + p1.sendline(f'{DUT_PASSWORD}') + else: + break + return [p1, admin_prompt] + +def getSonicMgmtContainterName(stream, testbed): + testbed_info_dict = getTestbedInfoDict(testbed) + branch = getBranchFromStream(stream) + + if f"sonic_mgmt_container_{branch}" in testbed_info_dict: + container_name = testbed_info_dict[f"sonic_mgmt_container_{branch}"] + else: + container_name = f"cicd_prod_{branch}" + log.warning(f"Container name for testbed={testbed} and stream={stream} isn't specified in {HW_CONFIG_FILE}. " + f"Assuming it's `{container_name}` according to the convention.") + + return container_name + +def getSonicMgmtFolder(stream, testbed): + testbed_info_dict = getTestbedInfoDict(testbed) + branch = getBranchFromStream(stream) + return testbed_info_dict["sonic_mgmt_folders"][f"{branch}"] + +def getLogsPath(stream, testbed): + testbed_info_dict = getTestbedInfoDict(testbed) + docker = getSonicMgmtContainterName(stream, testbed) + log.debug("getLogsPath before docker cmd") + with paramiko.SSHClient() as client: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + hostname=testbed_info_dict['ucs_host'], + username=testbed_info_dict['ucs_username'], + password=testbed_info_dict['ucs_password'] + ) + stdout, stderr, rc = _run_cmd_in_ssh(client, f"docker inspect {docker}") + + log.debug(stdout) + if rc==0: + inspect_list = parse_docker_inspect_output(stdout) + log.debug(f"inspect_output: {inspect_list}") + if not inspect_list: + log.warning("docker inspect returned an empty JSON array") + else: + mounts = inspect_list[0]["Mounts"] + log.debug(f"mounts: {mounts}") + run_logs_source = next(m["Source"] for m in mounts if m["Destination"] == "/run_logs") + log.debug(f"run_logs_source: {run_logs_source}") + return run_logs_source + # results = [obj for obj in arr if obj.get('c') == 'd'] + else: + log.debug(f"inspect_error: {stderr}") + log.error("Failed to get run logs source from docker inspect") + return DEFAULT_LOGS_PATH + +def parse_docker_inspect_output(raw: Union[str, bytes]) -> List[JsonObject]: + """ + Parse `docker inspect` stdout into a list of inspection dicts. + + :param raw: Full output string or bytes from `docker inspect ...` + :return: List of container/image JSON objects (same order as docker's output) + :raises json.JSONDecodeError: If the text is not valid JSON + :raises ValueError: If the root JSON value is not an array + """ + if isinstance(raw, bytes): + raw = raw.decode("utf-8") + data = json.loads(raw) + if not isinstance(data, list): + raise ValueError( + "docker inspect output must be a JSON array; got %s" % type(data).__name__ + ) + return data + +def getBranchFromStream(stream): + log.info(f"getBranchFromStream executed with arg stream={stream}") + + override = STREAM_BRANCH_OVERRIDE.get(stream) + if override: + log.warning(f"For stream {stream} overriding with branch value {override} because it's hardcoded!") + return override + + for stream_marker in streams_list: + if stream_marker in stream: + return stream_marker + + return "master" + +def getDockerExecCommand(stream, testbed, flags='-it', suffix=''): + branch = getSonicMgmtContainterName(stream, testbed) + return f"docker exec {flags} {branch} /bin/bash {suffix}" + +def getTestbedInfoDict(testbed): + log.info(f"Getting testbed info for '{testbed}'") + if testbed in testbed_info: + return testbed_info[testbed] + else: + log.error(f"No testbed info found for '{testbed}'!") + return {} + +_SENSITIVE_LOG_KEY_PARTS = ("password", "secret", "passkey", "token", "credential") +_LOG_REDACTED = "***REDACTED***" + + +def _is_sensitive_log_key(key): + key_lower = str(key).lower() + return any(part in key_lower for part in _SENSITIVE_LOG_KEY_PARTS) + + +def redact_for_logging(value): + """Return a copy of value safe for debug logs (secrets replaced).""" + if isinstance(value, dict): + return { + key: _LOG_REDACTED if _is_sensitive_log_key(key) else redact_for_logging(nested) + for key, nested in value.items() + } + if isinstance(value, list): + return [redact_for_logging(item) for item in value] + if isinstance(value, tuple): + return tuple(redact_for_logging(item) for item in value) + return value + + +def getImageUCS(testbed): + hw_config = load_json(HW_CONFIG_FILE) + testbed_image_ucs_map = hw_config["testbed_image_ucs_map"] + file_server = hw_config["file_server_dict"] + if testbed in testbed_image_ucs_map: + ucs = testbed_image_ucs_map[testbed] + if ucs in file_server: + return file_server[ucs] + else: + return + else: + return + +def create_allure_id(build_id, image_id, testbed="none"): + return f'{PIPELINE_TYPE}-{build_id}-{image_id}-{testbed}' + +def checkTortugaImage(stream): + return "tortuga" in stream + +def telnetConnection(host, port, timeout, logfile_loc, encoding, without_port, testbed_info_dict): + log.debug(f"Starting telnet connection") + log.debug(f"host={host}, port={port}, timeout={timeout}, logfile_loc={logfile_loc}, encoding={encoding}, without_port={without_port}") + retries = 0 + while True: + try: + if testbed_info_dict is not None and 'need_ucs_mount' in testbed_info_dict and testbed_info_dict['need_ucs_mount'] == "True": + p = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], None) + p.expect(testbed_info_dict['ucs_host_name']) + if without_port: + log.info(f"Telnet into host {host}") + p = pexpect.spawn(f'telnet {host}', timeout=timeout, logfile=logfile_loc, encoding=encoding) + else: + log.info(f"Telnet into host {host} {port}") + p = pexpect.spawn(f'telnet {host} {port}', timeout=timeout, logfile=logfile_loc, encoding=encoding) + time.sleep(2) + break + except Exception as e: + log.error(f"Exception occured while trying to telnet to {host} {port}, error: {e}") + retries += 1 + time.sleep(2) + if retries == MAX_RETRIES: + log.error(f"Reached maximum retries. Exiting") + raise + log.info("telnet connection successful") + p.sendline() + + p = checkTelnetconnection(p, host, port) + return p + + +def telnetLoginUtil(p, stream, changed_creds=False): + retry_count = 0 + while True: + i = p.expect([login_prompt, passwd_prompt, "Login incorrect", cisco_prompt, admin_prompt]) + if i == 0: + # send user name + p.sendline(DUT_USERNAME) + elif i == 1: + # send password + p.sendline(DUT_PASSWORD) + elif i == 2: + time.sleep(1) # retry 3 times + if retry_count == 3: + log.error("Login not successful into DUT") + return -1 + else: + retry_count = retry_count+1 + else: + break + return + +def checkForDockers(p): + log.info("Check if dockers are up") + p.sendline("docker ps -a") + log.info(p.before) + i = p.expect_exact(["Exited (0)", cisco_prompt, admin_prompt]) + if i == 0: + log.error("All dockers are not up.") + return -1 + else: + log.info("All dockers are up and running") + return + +def checkTelnetconnection(p, host, port): + log.info("Check for telnet connection and clear line if necessary") + i = p.expect([telnet_error_prompt, "Connected to "]) + if i == 0: + clearTelnetLine(p, host, port) + log.info("Cleared line, making new connection") + p1 = telnetConnection(host, port, 50000, sys.stdout, 'latin-1', False, None) + return p1 + else: + return p + +def checklldpCount(p, testbed_info_dict): + cmd = "show lldp table" + p.sendline(cmd) + lldp_count = testbed_info_dict["lldp_count"] if "lldp_count" in testbed_info_dict else DEFAULT_LLDP_COUNT + i = p.expect(["Total entries displayed: "]) + if i==0: + p.expect(admin_prompt) + count = p.before + if int(count.replace(" ",""))>=lldp_count: + log.debug(f"{cmd} looks good") + else: + log.error(f"{cmd} count does not meet requirements") + if 'max_timeout' not in testbed_info_dict: + return -1 + if 'max_timeout' in testbed_info_dict: + log.debug("Entered max_timeout block") + retries_count = 0 + timeout_gap = 60 # try for every 60 sec until timeout is reached + max_retries_count = (testbed_info_dict['max_timeout'] * timeout_gap)/60 + while retries_count=lldp_count: + log.debug(f"{cmd} looks good") + return + else: + log.error(f"{cmd} count does not meet requirements") + time.sleep(timeout_gap) + retries_count = retries_count+1 + return -1 + +def clearTelnetLine(p, host, port): + p.close() + log.info("Closing this connection to restart another connection!") + time.sleep(20) + p1 = telnetConnection(host, port, 50000, sys.stdout, 'latin-1', True, None) + p1.expect("Connected to ") + p1.sendline() + p1.expect(passwd_prompt) + p1.sendline(telnet_lab_password) + p1.expect(">") + p1.sendline("enable") + p1.expect(passwd_prompt) + p1.sendline(telnet_lab_password) + p1.expect("#") + num = getLineNumFromTelnetPort(port) + p1.sendline(f"clear line {num}") + p1.sendline() + p1.expect("#") + p1.sendline("exit") + p1.expect("Connection closed by foreign host.") + p1.close() + return + +def getLineNumFromTelnetPort(port): + num = port[2:] + if num[:1] == '0': + num = num[1:] + return num + +def updateGitDir(host, ssh_port, username, password, dir): + try: + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + print(f"connected to host {host}") + if SONIC_TEST_BRANCH: + branch = SONIC_TEST_BRANCH + else: + branch = "master" + + pull_cmd = ( + f'cd {dir}; ' + f'git remote set-url origin https://{WHITEBOX_TOKEN}@{SONIC_TEST_REPO}.git; ' + f'git fetch origin; ' + f'BRANCH={branch}; ' + f'git fetch origin "$BRANCH" && ' + f'(git show-ref --verify --quiet "refs/heads/$BRANCH" && ' + f'git checkout "$BRANCH" && ' + f'git reset --hard "origin/$BRANCH" || ' + f'git checkout -b "$BRANCH" "origin/$BRANCH")' + ) + + exec_command_raise_error(ssh, pull_cmd) + log.debug(f'Git pull {branch}, update complete') + ssh.close() + return 0 + except Exception as e: + print(f"Unexpected Error: {e}") + return -1 + +def run_scripts(host, username, password, cmd_list, prompt, ssh_port=SSH_PORT, update_flag="False"): + log.debug(f"update_flag: {update_flag}") + if update_flag==True: + rc = updateGitDir(host, ssh_port, username, password, TORTUGA_SONIC_TEST_FOLDER) + if rc != 0: + log.error("git update failed") + return -1 + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + log.debug(f"{host}, {ssh_port}, {username}, {password}") + log.debug(f"{type(host)}, {type(ssh_port)}, {type(username)}, {type(password)}") + ssh.connect(host, ssh_port, username, password) + print(f"connected to host {host}") + chan = ssh.invoke_shell() + resp = '' + time.sleep(5) + log.debug(cmd_list) + + # run docker command first + chan.send(f'{cmd_list[0]} \n') + while ':~' not in resp: + resp = chan.recv(9999).decode('ascii', 'ignore') + log.debug(resp) + time.sleep(5) + + cmd_list = cmd_list[1:] + for cmd in cmd_list: + resp = '' + log.debug(f'{cmd} \n') + while prompt not in resp: + chan.send(f'{cmd} \n') + if cmd.startswith('scp') == True: + # if wait_for_prompt(chan, first_login, timeout=60): + # chan.send(f'yes \n') + # resp = chan.recv(9999).decode('utf-8') + # log.debug(resp) + if wait_for_prompt(chan, 'password:', timeout=60): + chan.send(f'{password}\n') + resp = chan.recv(9999).decode('utf-8') + log.debug(resp) + break + resp = chan.recv(9999).decode('utf-8') + time.sleep(3) + log.debug(resp) + chan.send('exit \n') + time.sleep(10) + chan.close() + ssh.close() + return 0 + +def wait_for_prompt(channel, prompt, timeout=5): + buff = '' + start_time = time.time() + + while time.time() - start_time < timeout: + resp = channel.recv(9999).decode('utf-8') + log.debug(resp) + buff += resp + if prompt in buff: + return True + time.sleep(0.1) + return False + +def extract_test_start_time(spytest_results_files): + for file in spytest_results_files: + if "summary.txt" in file: + return "_".join(file.split("_")[1:-1]) + elif "logs.log" in file: + return "_".join(file.split("_")[1:-1]) + +# def extract_file_contents_url(target_url): +# result = requests.get(target_url) +# soup = BeautifulSoup(result.text, 'html.parser') +# txtfiles = soup.find_all(title=re.compile(f"\.txt$")) +# log.debug(txtfiles) +# filename = [] +# for i in txtfiles: +# filename.append(i.extract().get_text()) + # return filename + +def exec_command_raise_error(client, cmd): + print(f"executing command: '{cmd}'") + _, stdout, stderr = client.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + print(f"Encountered error while executing '{cmd}', stdout: {stdout.readlines()}, stderr: {stderr.readlines()}") + raise Exception(stdout.channel.recv_exit_status(), stderr.readlines()) + else: + log.debug(f"Output for {cmd} : {stdout.readlines()}") + return stdout, stderr + +def extract_result_sum(summary_txt, decode=False): + sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "status" : "success"} + for line in summary_txt: + if decode == True: + line = line.decode('utf-8') + if "=" not in line: + continue + + key, value = line.split("=") + key = key.strip() + value = value.strip() + + if key == "PASS": + sum["passed"] = int(value) + elif key == "FAIL": + sum["failed"] = int(value) + elif key == "SKIPPED": + sum["skipped"] = int(value) + elif key == "Test Count": + sum["total"] = int(value) + sum["success_rate"] = round(sum["passed"] / (sum["total"] - sum["skipped"]) * 100, 2) if (sum["total"] - sum["skipped"]) != 0 else 0 + return sum + +def collect_spytest_results(testbed, test_suites, image_id, build_id): + print("Collecting result") + + testbed_info_dict = getTestbedInfoDict(testbed) + hw_type = testbed_info_dict["hw_type"] + test_suite_type = (test_suites.split("/")[-1]).split(".")[0] + testbed_type = testbed.split("-")[-1] + if "hw_type" in testbed_info_dict: + image_folder = PIPELINE_TYPE+'-'+testbed_info_dict["hw_type"]+'-'+image_id+'-'+build_id+'-'+test_suite_type + else: + image_folder = PIPELINE_TYPE+'-'+image_id+'-'+build_id+'-'+testbed_type + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(testbed_info_dict['ucs_host'], "22", testbed_info_dict['ucs_username'], testbed_info_dict['ucs_password']) + + results_folder = f'{testbed_info_dict["sonic_test_dir"]}/{image_folder}' + log.debug(results_folder) + + ftp_client=client.open_sftp() + spytest_results_files = ftp_client.listdir(results_folder) + + test_start_time = extract_test_start_time(spytest_results_files) + + if test_start_time == None: + return 1, "test_start_time not detected, Summary.txt not available.", None, None + + exec_command_raise_error(client, f"cd {results_folder}; tar -czvf /tmp/{image_folder}_spytest_result.tar.gz *") + ftp_client.get(f"/tmp/{image_folder}_spytest_result.tar.gz","./spytest_result.tar.gz") + exec_command_raise_error(client, f"rm -rf /tmp/{image_folder}_spytest_result.tar.gz") + + os.system(f"mkdir {hw_type}_spytest_result_{test_start_time}") + os.system(f"tar -xvf spytest_result.tar.gz -C {hw_type}_spytest_result_{test_start_time}") + + ret = 0 + sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "status" : "success"} + try: + spytest_result_sum_file = open(f"./{hw_type}_spytest_result_{test_start_time}/results_{test_start_time}_summary.txt", 'r') + spytest_result_sum = spytest_result_sum_file.readlines() + spytest_result_sum_file.close() + + print(f"Result sum file contents: {spytest_result_sum}") + + sum = extract_result_sum(spytest_result_sum) + except Exception as e: + print("Exception! Failed to open result file!") + log.error(e) + sum["status"] = "failure" + ret = 1 + + print(f"result summary is: {sum}") + + return ret,"", test_start_time, sum + +def upload_result(testbed, test_start_time): + testbed_info_dict = getTestbedInfoDict(testbed) + build_id = os.getenv("BUILD_ID") + hw_type = testbed_info_dict["hw_type"] + if test_start_time == None: + return 1, "test_start_time not detected, Summary.txt not available.", None + print("Uploading result to server") + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect("sonic-ucs-m3-1", username = "ringcicd", password = "cicd_sonic") + + ftp_client=client.open_sftp() + spytest_results_files = os.listdir(f"{hw_type}_spytest_result_{test_start_time}") + # exec_command_raise_error(ftp_client,f"cd /auto/vxr1/sonic-images/ringcicd/; rm -rf {hw_type}_spytest_result_{test_start_time}") + ftp_client.mkdir(f"/auto/vxr1/sonic-images/ringcicd/{hw_type}_spytest_result_{test_start_time}") + + ftp_client.put(f"./spytest_result.tar.gz", f"/auto/vxr1/sonic-images/ringcicd/{hw_type}_spytest_result_{test_start_time}/spytest_result.tar.gz") + exec_command_raise_error(client,f"cd /auto/vxr1/sonic-images/ringcicd/{hw_type}_spytest_result_{test_start_time}; tar -xvf spytest_result.tar.gz") + + report_link = f"http://172.29.93.10/sonic-images/ringcicd/{hw_type}_spytest_result_{test_start_time}/dashboard.html" + log_tarball_link = f"http://172.29.93.10/sonic-images/ringcicd/{hw_type}_spytest_result_{test_start_time}" + + print(f"Successfully uploaded test result, url is: http://172.29.93.10/sonic-images/ringcicd/{hw_type}_spytest_result_{test_start_time}/dashboard.html") + return 0, "", report_link, log_tarball_link + +def _get_container_ssh_channel(hostname, username, password, container_name, ssh_port=22): + """ + SSH into the VM and exec into container + return: ssh, ssh_channel + """ + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=hostname, port=ssh_port, username=username, password=password) + ssh_channel = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = ssh_channel.recv(9999) + buff += resp.decode("ascii") + log.info(resp.decode("ascii")) + time.sleep(3) + + # Get into the docker-sonic-mgmt container + ssh_channel.send('docker exec -it {} /bin/bash \n'.format(container_name)) + buff = '' + while not buff.endswith(':~$ '): + resp = ssh_channel.recv(9999) + buff += resp.decode("ascii") + log.info(resp.decode("ascii")) + time.sleep(3) + + return ssh, ssh_channel + +def _run_cmd_in_channel(ssh_channel, cmd, check_exit_status, timeout=180): + """ + Run a command in the container shell + """ + + ssh_channel.send(f'{cmd}\n') + if check_exit_status: + ssh_channel.settimeout(timeout) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not ssh_channel.exit_status_ready(): + if ssh_channel.recv_ready(): + resp = ssh_channel.recv(9999) + log.info(resp.decode("ascii")) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if ssh_channel.recv_stderr_ready(): + error_buff = ssh_channel.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = ssh_channel.recv_stderr(9999) + log.info(err_buff) + except Exception as e: + log.error('Hit %s' % e) + else: + time.sleep(3) + resp = ssh_channel.recv(9999) + log.info(resp.decode("ascii")) + return resp.decode("ascii") + +def prep_special_run_commands(testbed, test_suites_arg, test_suites, image_id, build_id, docker_exec_cmd, run_commands_array, docker_container='False'): + testbed_info_dict = getTestbedInfoDict(testbed) + test_suites_array = testbed_info_dict["tests_list"] if (test_suites_arg == 'All' and "tests_list" in testbed_info_dict) else [test_suites_arg] + log.debug(test_suites_array) + test_suite_type = (test_suites.split("/")[-1]).split(".")[0] + testbed_type = testbed.split("-")[-1] + if "hw_type" in testbed_info_dict: + image_folder = PIPELINE_TYPE+'-'+testbed_info_dict["hw_type"]+'-'+image_id+'-'+build_id+'-'+test_suite_type + else: + image_folder = PIPELINE_TYPE+'-'+image_id+'-'+build_id+'-'+testbed_type + cmd_list = list() + if docker_container == 'True': + cmd_list.append(docker_exec_cmd) + cmd_list.append(UNSET_PROXY) + for cmd in run_commands_array: + if "optional_run_params" in testbed_info_dict: + op_params = list(testbed_info_dict["optional_run_params"].keys()) + for param in op_params: + value = testbed_info_dict["optional_run_params"][param]["default"] + if param in cmd and test_suites in testbed_info_dict["optional_run_params"][param]: + value = testbed_info_dict["optional_run_params"][param][test_suites] + cmd = cmd.strip().replace("$"+param, value) + if "$image_id" in cmd: + cmd = cmd.strip().replace("$image_id", image_id) + if "$image_folder" in cmd: + cmd = cmd.strip().replace("$image_folder", image_folder) + if "$testbed_yaml" in cmd: + cmd = cmd.strip().replace("$testbed_yaml", testbed_info_dict['testbed_yaml']) + if "$test_name" in cmd: + if test_suites in FORWARDING_TESTCASES: + test_params = f"--test-suite=/data/sonic-mgmt/spytest/{test_suites}" + # Some testbed templates spell out the full tests/ prefix + # (e.g. ".../tests/$test_name"), others only have "$test_name". + # Substitute appropriately so spytest always receives + # --test-suite= for known suite files. + if "/data/sonic-mgmt/spytest/tests/$test_name" in cmd: + cmd = cmd.strip().replace("/data/sonic-mgmt/spytest/tests/$test_name", test_params) + else: + cmd = cmd.strip().replace("$test_name", test_params) + else: + cmd = cmd.strip().replace("$test_name", test_suites) + cmd_list.append(cmd) + return cmd_list + +def add_fwd_run_commands(cmd_list, cmd, cfg_location): + with open(cfg_location, 'r') as file: + # Read each line in the file + for line in file: + if "file:" in line: + test_name = line.split("file:")[1].strip() + add_cmd = cmd.strip().replace("$test_name", test_name) + cmd_list.append(add_cmd) + return cmd_list + +def get_container_local_mount_dir(ssh, container_name, destination_path): + cmd = f"docker inspect `docker ps -aq --filter name=^/{container_name}$`" + + _, stdout, stderr = ssh.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + err = f"failed to run {cmd}: {stderr.read().decode('ascii').strip()}" + log.error(err) + raise Exception(err) + + container_metadata = json.loads(stdout.read().decode("ascii").strip()) + + # Sort by "Created" timestamp and get the latest entry + latest_metadata = max(container_metadata, key=lambda x: x["Created"]) + + lastest_mounts = latest_metadata["Mounts"] + testbed_mount_dir = "" + for mount in lastest_mounts: + if mount["Destination"] == destination_path: + testbed_mount_dir = mount["Source"] + break + + if testbed_mount_dir == "" : + err = f"No mount point found for Destination path '{destination_path}' in container {container_name}" + log.error(err) + raise Exception(err) + + return testbed_mount_dir + + +def generate_allure_report_and_copy_to_remote(build_id, testbed, image_id, stream): + """ + Publish Allure HTML to the configured remote. + + When multiple run_* result folders exist under the same image_id-scoped Allure results root, + publishes two reports: one from the current run_ (must contain results), and one + merged from every run_* child dir there (including any run folder without *-result.json yet). + Otherwise publishes a single report (same directory name as before: allure-report-). + + Returns (status_code, primary_report_url, combined_report_url_or_None). On error, combined is None. + """ + testbed_info_dict = getTestbedInfoDict(testbed) + + hostname = testbed_info_dict["ucs_host"] + + container_name = getSonicMgmtContainterName(stream, testbed) + ssh, container_channel = _get_container_ssh_channel( + hostname, testbed_info_dict["ucs_username"], testbed_info_dict["ucs_password"], container_name + ) + try: + ensure_allure_installed_in_container(ssh, hostname, container_name) + except Exception as e: + log.error(str(e)) + container_channel.close() + ssh.close() + return -1, str(e), None + + destination_path = "/data" + log.info(f"determine local mount dir for container path {container_name}:{destination_path}") + testbed_mount_dir = get_container_local_mount_dir(ssh, container_name, destination_path) + log.info( + f"mount dir of container {container_name}:{destination_path} on the testbed {hostname}:{testbed_mount_dir}" + ) + + allure_id = create_allure_id(build_id, image_id, testbed) + # Must use image_id here (same as do_full_run.run_test); do not switch to jenkins build_id. + try: + build_scoped = allure_results_dir_for_build_id(allure_directory, image_id) + except ValueError as e: + log.error(str(e)) + container_channel.close() + ssh.close() + return -1, str(e), None + run_subdirs, source_dirs = allure_run_dirs_and_valid_sources( + ssh, container_name, build_scoped, build_id=build_id + ) + if not source_dirs: + if run_subdirs: + current_run = allure_run_dir_for_build_id(build_scoped, build_id) + err = f"No allure result files found in current run directory {current_run}" + else: + err = f"No allure result files found under {build_scoped}" + log.error(err) + container_channel.close() + ssh.close() + return -1, err, None + + try: + # Multiple run_* dirs under the same image_id-scoped path: current run + combined over every run_*. + dual_reports = len(run_subdirs) > 1 + if dual_reports: + last_dir = source_dirs[0] + run_ix = _run_index_suffix_for_path(last_dir) or "latest" + run_slug = f"run-{run_ix}" + report_dir_this_run = f"allure-report-{allure_id}-{run_slug}" + report_dir_combined = f"allure-report-{allure_id}-combined" + sources_this = " ".join(shlex.quote(d) for d in [last_dir]) + # Combined report: pass every run_* folder under the build, not only dirs that passed the result-file probe. + sources_all = " ".join(shlex.quote(d) for d in run_subdirs) + log.info( + f"Allure combined report inputs: {len(run_subdirs)} run dir(s) under {build_scoped}" + ) + + display_this = f"{allure_id} ({run_slug.replace('-', '_')})" + display_combined = f"{allure_id} (combined)" + + code, out = _publish_one_allure_report( + ssh, + container_name, + container_channel, + testbed_mount_dir, + destination_path, + report_dir_this_run, + display_this, + sources_this, + ) + if code != 0: + log.error(out) + return -1, out, None + + code, out2 = _publish_one_allure_report( + ssh, + container_name, + container_channel, + testbed_mount_dir, + destination_path, + report_dir_combined, + display_combined, + sources_all, + ) + if code != 0: + log.error(out2) + return -1, out2, None + + log.info(f"Allure this-run report: {out}") + log.info(f"Allure combined report: {out2}") + return 0, out, out2 + + allure_report_directory_name = f"allure-report-{allure_id}" + sources_arg = " ".join(shlex.quote(d) for d in source_dirs) + code, url = _publish_one_allure_report( + ssh, + container_name, + container_channel, + testbed_mount_dir, + destination_path, + allure_report_directory_name, + allure_id, + sources_arg, + ) + if code != 0: + log.error(url) + return -1, url, None + log.info(f"Allure report generated and copied to remote. Report URL: {url}") + return 0, url, None + finally: + container_channel.close() + ssh.close() + + +def getLatestValidAllureReport(build_id, image_id, testbed, stream): + status_code, allure_report_url, combined_url = generate_allure_report_and_copy_to_remote( + build_id, testbed, image_id, stream + ) + if status_code != 0: + return [None, None] + log.debug("projects_url: %s" % allure_report_url) + if combined_url: + log.debug("combined_allure_url: %s" % combined_url) + return [allure_report_url, combined_url] + + +def fetch_allure_report_summary(report_base_url): + """Fetch widgets/summary.json for the report URL callers publish.""" + if not report_base_url: + return None + url = report_base_url + "/widgets/summary.json" + log.debug("Allure summary URL: %s", url) + try: + summary = getAllureReport(url) + if summary == -1 or not isinstance(summary, dict): + return None + log.debug("Allure summary json: %s", summary) + if summary.get("statistic", {}).get("total", 0) == 0: + return None + return summary + except Exception as e: + log.error("Error fetching Allure summary: %s", e) + return None + + +def getAllureReport(link): + headers = { + 'Content-Type': 'application/json' + } + try: + r = requests.get(link, headers=headers) + full_json = r.json() + return full_json + except Exception as e: + log.error("getAllureReport Error: "+str(e)) + return -1 + +def getTimestampsFromAllure(individual_json): + start = individual_json["time"]["start"] + stop = individual_json["time"]["stop"] + start_dt = datetime.utcfromtimestamp(start//1000).replace(microsecond=start%1000*1000) + start_date = start_dt.strftime("%Y-%m-%d %H:%M:%S") + stop_dt = datetime.utcfromtimestamp(stop//1000).replace(microsecond=stop%1000*1000) + stop_date = stop_dt.strftime("%Y-%m-%d %H:%M:%S") + return [start_date, stop_date] + +def checkForExistingRuns(p, test_string, expect_string): + # p.sendline(f"ps -aef | grep -i {test_string} | awk {'print $2'}") + # p.expect(expect_string) + log.debug(f"get run count on: {test_string}, with {expect_string}") + p.sendline(f"ps -aef | grep -i '{test_string}'") + p.expect(expect_string) + x1 = p.before + log.debug(x1) + count = x1.count(f"{test_string}") + log.debug(f"Count for existing run lines: {count}") + # DEFAULT_RUN_LINES = 2 because there will be two instances from the stdin and also the grep command which we would want to ignore + # difference = 1 - 1 run + # difference = 0 - no runs + # difference > 1 - multiple runs + return count-DEFAULT_RUN_LINES + +def pollingRuns(testbed_info_dict, test_suites): + local_ucs = testbed_info_dict['ucs_host_name'] + child = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], None) + run_string = testbed_info_dict['run_type_check'] if 'run_type_check' in testbed_info_dict else DEFAULT_RUN_STRING + child.expect(local_ucs) + while True: + time.sleep(120) #timeout for 2 minutes + run_count = checkForExistingRuns(child, run_string, local_ucs) + log.debug(f"checkForExistingRuns: {run_count}") + if run_count==0: + return 0 + elif run_count==1: + log.debug(f"Run is still going on for {test_suites}") + elif run_count>1: + log.error(f"Multiple runs happening causing failures") + child.close() + return -1 + else: + log.error(f"Run count below default") + child.close() + return -1 + +def flushChannel(thread): + while True: + try: + thread.read_nonblocking(size=1024) + except (pexpect.TIMEOUT, pexpect.EOF): + break + log.debug("flush complete") + +def runIndividualTests( + image_id, + build_id, + testbed, + dut_log_dir, + client, + container_name, + test_suites, + test_name, + skip_folders, + skip_tests, + local_log_dir, + testbed_info_dict, + allure_results_dir=None, + remote_file=None, +): + log.debug(f"runIndividualTests local scope") + local_scope = { + name: redact_for_logging(val) if name == "testbed_info_dict" else val + for name, val in locals().items() + } + log.debug(local_scope) + + allure_dir = allure_results_dir if allure_results_dir is not None else allure_directory + quoted_allure_dir = shlex.quote(allure_dir) + + testcase_start = datetime.now() + testcase_start_time = testcase_start.strftime("%Y-%m-%d %H-%M-%S") # Format the datetime object as a string + log.debug(f'Testcase - {test_name} start time {testcase_start_time}') + t1 = testbed_info_dict['ucs_tb'] + t2 = testbed_info_dict['mth_tb'] + t = testbed_info_dict['topology'] + log.debug(f'skip_tests: {skip_tests}') + log.debug(f'skip_folders: {skip_folders}') + docker_prompt = testbed_info_dict['docker_prompt'] + allure_id = create_allure_id(build_id, image_id, testbed) + run_tests_log_file = "" + test_suites = test_suites.strip() + + if test_suites.startswith("file:"): + # if test_suites.startswith("file:"): + testfile = test_suites.split("file:")[1] + tests = read_file(testfile) + # else: + # tests = testbed_info_dict["add_folders"].split(" ") + log.debug("Test list: %s" % tests) + log.debug(docker_prompt) + for test in tests: + if test.find("#")==0: + log.info(f"Test commented {test}") + else: + log_file_base = test.replace("/", "_").replace(".py", "") + run_tests_log_file = f"run_test_{log_file_base}_{datetime.now().strftime('%Y%m%d%H%M%S')}.log" + run_cmd = f"{RUN_TESTS_PREFIX} ./run_tests.sh -n {t1} -d {t2} -e -rapP -e --alluredir={quoted_allure_dir} -u -e -s -c {test} -p {dut_log_dir} > {run_tests_log_file} 2>&1 &" + log.info(f'To check logs of the tests, go to vxr@SONiC:{dut_log_dir}') + stdout, stderr, status_code = _run_cmd_in_ssh_container(client, container_name, run_cmd) + log.debug(f"{run_cmd} output:\n{stdout}") + # Check for known failure patterns in stdout/stderr + combined_output = stdout + stderr + + if DUT_FAILURE_ERROR in combined_output: + log.error("DUT is not in a stable condition.") + return -1 + if status_code != 0: + log.error(f"run_tests.sh failed with exit code {status_code}") + return -1 + time.sleep(20) + return None + else: + + dut_flag = "" if "skip_dut_flag" in testbed_info_dict else f" -d {t2} " + if test_suites == "All": + extra_params = testbed_info_dict["extra_run_params"] if 'extra_run_params' in testbed_info_dict else "" + run_tests_log_file = f"run_all_tests_{datetime.now().strftime('%Y%m%d%H%M%S')}.log" + run_cmd = f"{RUN_TESTS_PREFIX} ./run_tests.sh -n {t1} -d {t2} -m individual -u -e -rapP -e --alluredir={quoted_allure_dir} {extra_params} -t {t},any -p {dut_log_dir} -s \"{skip_tests}\" -S \"{skip_folders}\" > {run_tests_log_file} 2>&1 &" + else: + extra_params = "-O -e --disable_loganalyzer -e --qos_swap_syncd=False" if test_suites=="qos" else "" + extra_params = extra_params+" "+testbed_info_dict["extra_run_params"] if 'extra_run_params' in testbed_info_dict else extra_params + if test_suites.find("[") == 0: + test_suites = test_suites[1:-1] + if test_suites in ["pretest", "posttest"]: + test_name = f"test_{test_suites}.py" + now = datetime.now() + if ".py" in test_suites: + run_flags = f"-c {test_name}" + else: + run_flags = f"-I {test_name}" + # Format the datetime object as a string + formatted_time = now.strftime("%Y%m%d%H%M%S") + test_name_output = test_name.replace("/","_").replace(".py","") + run_tests_log_file = f"run_test_{test_name_output}_{formatted_time}.log" + run_cmd = f"{RUN_TESTS_PREFIX} ./run_tests.sh -n {t1}{dut_flag} -e -rapP -e --alluredir={quoted_allure_dir} -m individual -S \"{skip_folders}\" -u {extra_params} {run_flags} -t {t},any -s \"{skip_tests}\" -p {dut_log_dir} > {run_tests_log_file} 2>&1 &" + + log.debug(f"run_cmd for test - {test_suites}: {run_cmd}") + log.debug(f'To check logs of the tests, go to ucs:{dut_log_dir}') + stdout, stderr, status_code = _run_cmd_in_ssh_container(client, container_name, run_cmd) + log.debug(f"{run_cmd} output:\n{stdout}") + time.sleep(30) + combined_output = stdout + stderr + if test_suites == "All": + exp_str = f'generated xml file: {dut_log_dir}/wan/traffic_test/' + else: + exp_str = f'generated xml file: {dut_log_dir}' + + rc = pollingRuns(testbed_info_dict, test_suites) + if rc!=0: + log.error("pollingRuns failed") + return -1 + if DUT_FAILURE_ERROR in combined_output: + log.error("DUT is not in a stable condition.") + return -1 + elif SANITY_SCRIPT_ERROR in combined_output: + log.error("Sanity scripts failed due to an error. Please rerun after fixing issues") + return -1 + elif exp_str in combined_output or docker_prompt in combined_output: + log.info(f"Sanity run completed: matched expected string '{exp_str}'") + time.sleep(60) + else: + log.debug("No expect string match found!") + # time.sleep(60) + now = datetime.now() + testcase_end_time = now.strftime("%Y-%m-%d %H-%M-%S") # Format the datetime object as a string + log.debug(f'Testcase - {test_name} start time {testcase_start_time}') + log.debug(f'Testcase - {test_name} end time {testcase_end_time}') + log.debug(f'Time elapsed - {now-testcase_start}') + output = f'Testcase - {test_name}'+'\n'+f'start time - {testcase_start_time}'+'\n'+f'end time - {testcase_end_time}'+'\n'+f'Time elapsed - {test_name} - {now-testcase_start}'+'\n' + + rc = copy_logfiles(client, container_name, run_tests_log_file, local_log_dir, testbed_info_dict['ucs_username']) + + TestRunResults = namedtuple("TestRunResults", ["combined_output", "run_tests_log_file"]) + results = TestRunResults(combined_output=combined_output, + run_tests_log_file=run_tests_log_file) + + if remote_file: + remote_file.write(output) + return rc, results + +def removeImageDir(thread, cmd, image, password): + thread.sendline(f"cd ..") + thread.expect(cmd) + time.sleep(10) + thread.sendline(f"rm -rf {image}") + x = thread.expect([lower_pass_prompt, "Permission Denied", "permission denied", "Permission denied", "permission Denied", cmd]) + if x == 0: + thread.sendline(password) + thread.expect(cmd) + return 0 + elif x == 1 or x == 2 or x == 3 or x == 4: + log.error("Image folder not able to delete") + return -1 + else: + return 0 + +def setupMemChecker(stream, testbed, thread, local_ucs): + testbed_info_dict = getTestbedInfoDict(testbed) + image_ucs = getImageUCS(testbed) + scp_prompt = image_ucs['scp_prompt'] + pswd = image_ucs['password'] + p1 = sshUtil(testbed_info_dict['ucs_username'], testbed_info_dict['ucs_host'], testbed_info_dict['ucs_password'], None) + scpUtil(p1, f'scp /home/sonic/rraguraj/stress_utility/{STRESS_DEB} {scp_prompt}', pswd) + p1.close() + + scpUtil(thread, f'scp {scp_prompt}/{STRESS_DEB} .', pswd) + thread.sendline("docker cp /home/cisco/stress_1.0.4-4_amd64.deb telemetry:/") + thread.expect(admin_prompt) + + thread.sendline("exit") + thread.expect(local_ucs) + # editLineMemChecker(thread, stream, testbed, local_ucs) + thread.sendline() + return None + +def editLineMemChecker(thread, stream, testbed, local_ucs): + # Edit line in memory checker test.py + repo = getSonicMgmtContainterName(stream, testbed) + testbed_info_dict = getTestbedInfoDict(testbed) + user = testbed_info_dict['ucs_username'] + local_prompt = "sonic-mgmt/tests/memory_checker" + thread.sendline(f"cd /home/{user}/{repo}/sonic-test/sonic-mgmt/tests/memory_checker") + thread.expect(local_prompt) + log.info("Got into folder") + thread.sendline("git apply memory_checker.patch") + + i = thread.expect(["error: can't open patch 'memory_checker.patch': No such file or directory", "error: patch failed: sonic-mgmt/tests/memory_checker/test_memory_checker.py", local_ucs]) + if i == 0: + log.error("No patch found") + return -1 + elif i == 1: + log.info("Patch already in place maybe. Retrying once.") + thread.expect(local_prompt) + thread.sendline("git apply -R memory_checker.patch") + thread.expect(local_prompt) + thread.sendline("git apply memory_checker.patch") + thread.expect(local_prompt) + log.info("Patch applied successfully") + elif i == 2: + log.info("Patch applied successfully") + return None + +def getModefromTestbed(testbed): + return testbed.split("-")[0] + +def extractFromImageName(image_name): + image = image_name.rsplit("/",1)[-1] + parts = image.split("-") + if len(parts)>MAX_PARTS_IMAGE_NAME: + diff = len(parts)-MAX_PARTS_IMAGE_NAME + end_index = START_INDEX_IMAGE+(diff+1) + stream = "-".join(parts[START_INDEX_IMAGE:end_index]) + image_id = parts[IMAGE_INDEX+diff] + else: + stream = parts[START_INDEX_IMAGE] + image_id = parts[IMAGE_INDEX] + + return [image, image_id, stream] + +def run_exec_cmds(thread, cmd_list): + for cmd in cmd_list: + stdin, stdout, stderr = thread.exec_command(cmd) + stdout.channel.recv_exit_status() + try: + out = stdout.read().decode("ascii").strip() + error = stderr.read() + log.debug(out) + if error: + log.error(f'There was an error pulling the runtime: {error}') + except: + log.debug("Problem decoding output of ssh command") + return thread + +def getTechSupport(client, local_log_dir): + log.debug("Entered getTechSupport") + out, error, status = _run_cmd_in_ssh(client, "show techsupport", timeout=500) + file_path = copy_techsupport(client, local_log_dir) + log.debug(f"Techsupport file_path: {file_path}") + +def copy_techsupport(ssh, local_log_dir): + log.debug("Entered copy_techsupport") + + ts_dir='/var/dump' + + # Open an SFTP session + sftp = ssh.open_sftp() + + # List all files in the remote directory + # files = sftp.listdir_attr(ts_dir) + files = [(f.filename, f) for f in sftp.listdir_attr(ts_dir)] + + log.debug(f"file_list: {files}") + # Find the latest file by modification time + latest_file = max(files, key=lambda x: x[1].st_mtime)[0] + log.debug(f"Latest file: {latest_file}") + # latest_file = max(files, key=lambda x: x.st_mtime) + latest_file_path = os.path.join(ts_dir, latest_file) + log.debug(latest_file_path) + remote_path = f'{local_log_dir}/{latest_file}' + sftp.get(latest_file_path, remote_path) + + # Close the SFTP session and SSH connection + sftp.close() + + return latest_file + +def channelConnection(bastion_client, target_host, target_user, target_key): + log.debug(f"channel connection into {target_host}") + log.debug(f"{target_host}, {target_user}") + try: + # Create a transport for the target host + tp = bastion_client.get_transport() + sock_channel = tp.open_channel("direct-tcpip", (target_host, 22), ("localhost", 0)) + log.debug("Channel created") + # Connect to the target host through the bastion + paramiko.util.log_to_file('paramiko.log') + target_client = paramiko.SSHClient() + target_client.load_system_host_keys() + target_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + target_client.connect(target_host, username=target_user, password=target_key, sock=sock_channel) + except: + log.debug("Connection failed :(") + return [None, None] + return [target_client, sock_channel] + +def nested_ssh_connection(bastion_host, bastion_user, bastion_key, target_host, target_user, target_key, retry): + # Connect to the bastion host + bastion_client = paramiko.SSHClient() + bastion_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + bastion_client.connect(bastion_host, username=bastion_user, password=bastion_key) + log.debug("First ssh done") + [target_client, sock_channel] = channelConnection(bastion_client, target_host, target_user, target_key) + log.debug(f"target_client: {target_client}") + if target_client == None and retry==True: + log.debug("Entered retry loop") + retries = MAX_RETRIES + while target_client == None and retries!=0: + log.debug("target_client is None, retry after timeout") + time.sleep(100) + [target_client, sock_channel] = channelConnection(bastion_client, target_host, target_user, target_key) + log.debug(target_client) + retries = retries-1 + if retries==0: + log.error("Reached max retries, Second ssh failed!") + return -1 + elif target_client == None: + log.error("Second ssh failed!") + return -1 + log.debug("Second ssh done. Execute commands...") + + return [target_client, bastion_client] + + + +# ============================ +# Simple UCS Remote Executor +# ============================ + +def _get_ucs_info_from_testbed(testbed: str) -> Tuple[str, int, str, str]: + info = getTestbedInfoDict(testbed) + if not info: + raise KeyError(f"Testbed '{testbed}' not found in hw_cfg.json") + host = info.get("ucs_host") or info.get("ucs_host_name") + user = info.get("ucs_username") + password = info.get("ucs_password") + port = int(info.get("ucs_port", 22)) + if not host or not user or not password: + raise ValueError(f"Incomplete UCS credentials for '{testbed}' in hw_cfg.json") + return host, port, user, password + + +def run_commands_in_ucs(testbed: str, workspace: str, commands: str, timeout: int = 3600): + """ + SSH to UCS resolved by 'testbed', ensure 'workspace' exists, then run provided commands. + + Args: + testbed: Testbed name in hw_cfg.json -> resolves UCS host/user/pass/port + workspace: Absolute or home-relative path on UCS to execute in + commands: Multiline shell commands to execute in order + timeout: Overall execution timeout for the remote script + + Returns: + (stdout, stderr, exit_status) + """ + host, port, user, password = _get_ucs_info_from_testbed(testbed) + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=host, port=port, username=user, password=password) + + remote_script = f"/tmp/run_cmds_{int(time.time())}.sh" + try: + # Ensure workspace + mkdir_cmd = f"mkdir -p {workspace}" + out, err, code = _run_cmd_in_ssh(ssh, mkdir_cmd) + if code != 0: + raise RuntimeError(f"Failed to create workspace '{workspace}' on UCS '{host}': exit={code}\nstdout:\n{out}\nstderr:\n{err}") + + # Upload script + sftp = ssh.open_sftp() + with sftp.file(remote_script, 'w') as f: + f.write("#!/usr/bin/env bash\nset -euo pipefail\n") + f.write(f"cd {workspace}\n") + f.write(commands) + f.write("\n") + sftp.chmod(remote_script, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) + sftp.close() + + # Execute script via helper for consistent logging/behavior + out, err, code = _run_cmd_in_ssh(ssh, f"bash -l {remote_script}", timeout=timeout) + log.info(f"UCS run finished: exit={code}\nstdout:\n{out}\nstderr:\n{err}") + return out, err, code + finally: + try: + ssh.exec_command(f"rm -f {remote_script}") + except Exception: + pass + try: + ssh.close() + except Exception: + pass + + +def _parse_cli_and_run(): + parser = argparse.ArgumentParser(description="Infra utils CLI") + sub = parser.add_subparsers(dest="cmd") + + p = sub.add_parser("run-commands-in-ucs", help="Run shell commands on UCS host resolved by testbed") + p.add_argument("--testbed", required=True, help="Testbed name present in hw_cfg.json") + p.add_argument("--workspace", required=True, help="Workspace dir on UCS to run in") + p.add_argument("--commands", required=True, help="Multiline shell commands to execute") + + args = parser.parse_args() + if args.cmd == "run-commands-in-ucs": + out, err, code = run_commands_in_ucs(args.testbed, args.workspace, args.commands) + # Print to stdout/stderr for Jenkins consumption + if out: + print(out) + if err: + print(err, file=sys.stderr) + sys.exit(code) + + +if __name__ == "__main__": + _parse_cli_and_run() diff --git a/infra/la.patch b/infra/la.patch new file mode 100644 index 00000000000..b51a0269878 --- /dev/null +++ b/infra/la.patch @@ -0,0 +1,19 @@ +diff --git a/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +index 70e2c7a229..4b9a26687e 100644 +--- a/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt ++++ b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +@@ -69,6 +69,14 @@ r, ".* ERR swss#orchagent: :- querySwitchEcmpHashAlgorithmEnumCapabilities: Fail + r, ".* ERR swss#orchagent: :- querySwitchLagHashAlgorithmEnumCapabilities: Failed to get attribute.*" + r, ".* ERR syncd\d*#syncd.*SAI_API_PORT:_brcm_sai_read_fec_stat_err_counters.* failed with error Feature unavailable.*" + ++# Sim related - Cisco ++r, ".* ERR pmon#pcied.*: PCIe device status check : FAILED.*" ++r, ".* ERR pmon#CCmisApi.*: PCIe device status check : FAILED.*" ++r, ".* ERR pmon#xcvrd.*CMIS.* FAILED .*" ++r, ".* ERR swss#orchagent:.* doCfgSensorsTableTask: ASIC sensors : unsupported operation for poller state.*" ++r, ".* ERR monit.* 'routeCheck' status failed.*" ++r, ".* ERR .*dispatch_read_counter_command: read_register cpu_read timeout: 0.*" ++ + # White list below messages found on KVM for now. Need to address them later. + r, ".* ERR macsec#wpa_supplicant.*l2_packet_send.*Network is down.*" + r, ".* ERR macsec#wpa_supplicant.*could not process SIGINT or SIGTERM in two seconds.*" diff --git a/infra/la_202012.patch b/infra/la_202012.patch new file mode 100644 index 00000000000..520ac48589a --- /dev/null +++ b/infra/la_202012.patch @@ -0,0 +1,10 @@ +diff --git a/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +index f1c38b1..2d6edbb 100644 +--- a/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt ++++ b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +@@ -179,3 +179,5 @@ r, ".* ERR swss#orchagent: :- update: Unsupported FDB Flush: .*" + # https://msazure.visualstudio.com/One/_workitems/edit/16110065 + r, ".* ERR kernel:.* Set it down before adding it as a team port.*" + ++# Sim related - Cisco ++r, ".* ERR pmon#pcied.*: PCIe device status check : FAILED.*" diff --git a/infra/la_202305.patch b/infra/la_202305.patch new file mode 100644 index 00000000000..de1db9f6b92 --- /dev/null +++ b/infra/la_202305.patch @@ -0,0 +1,18 @@ +diff --git a/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +index 0708dd561..c5033554b 100644 +--- a/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt ++++ b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +@@ -59,6 +59,13 @@ r, ".* ERR syncd#syncd:.*updateSupportedBufferPoolCounters: BUFFER_POOL_WATERMAR + r, ".* ERR syncd#syncd:.*SAI_API_HOSTIF: src/sai_trap.cpp:.*: Invalid trap event code 45.*" + r, ".* ERR syncd#syncd:.*SAI_LOG|SAI_API_TUNNEL: VLAN to VNI not implemented yet.*" + ++# Sim related - Cisco ++r, ".* ERR pmon#pcied.*: PCIe device status check : FAILED.*" ++r, ".* ERR pmon#CCmisApi.*: PCIe device status check : FAILED.*" ++r, ".* ERR pmon#xcvrd.*CMIS.* FAILED .*" ++r, ".* ERR swss#orchagent:.* doCfgSensorsTableTask: ASIC sensors : unsupported operation for poller state.*" ++r, ".* ERR monit.* 'routeCheck' status failed.*" ++ + # White list below messages found on KVM for now. Need to address them later. + r, ".* ERR macsec#wpa_supplicant.*l2_packet_send.*Network is down.*" + r, ".* ERR macsec#wpa_supplicant.*could not process SIGINT or SIGTERM in two seconds.*" diff --git a/infra/lab-templates/t2-2lc-min-ports-GG.yaml.j2 b/infra/lab-templates/t2-2lc-min-ports-GG.yaml.j2 new file mode 100644 index 00000000000..45b447b3775 --- /dev/null +++ b/infra/lab-templates/t2-2lc-min-ports-GG.yaml.j2 @@ -0,0 +1,181 @@ +all: + children: + lab: + vars: + mgmt_subnet_mask_length: 16 + children: + sonic: + children: + sonic_multi_asic: + sonic_cisco_sup: + sonic_cisco_lc_100G: + fanout: + vars: + hwsku: C9336C-FX2 + os: nxos + hosts: + nexus-5: + ansible_host: 1.74.23.205 + ptf: + hosts: + docker-ptf: + ansible_host: {{ vxr_ports['docker_ptf']['xr_mgmt_ip'] }} + ansible_ssh_user: root + ansible_ssh_pass: root + +sonic_multi_asic: + vars: + hwsku: msft_multi_asic_vs + iface_speed: 40000 + num_asics: 6 + start_topo_service: True + frontend_asics: [0,1,2,3] + loopback4096_ip: [8.0.0.0/32, 8.0.0.1/32, 8.0.0.2/32, 8.0.0.3/32, 8.0.0.4/32, 8.0.0.5/32] + loopback4096_ipv6: [2603:10e2:400::/128, 2603:10e2:400::1/128, 2603:10e2:400::2/128, 2603:10e2:400::3/128, 2603:10e2:400::4/128, 2603:10e2:400:5/128] + +sonic_cisco_sup: + vars: + HwSku: 8800-RP-O + slot_num: slot0 + card_type: supervisor + switch_type: chassis-packet + hosts: + sfd-01: + ansible_ssh_user: admin + ansible_ssh_pass: password + ansible_host: {{ vxr_ports['sonic_dut']['xr_mgmt_ip'] }} + hwsku: Cisco-8800-RP + num_asics: 16 + asics_present: [0,1,2,3] + asic_type: cisco-8000 + model: 8800-RP-O + serial: FOC2428P4EW + base_mac: E4:1F:7B:37:52:08 + syseeprom_info: + "0x21": "8800-RP-O" + "0x28": "x86_64-8800_rp_o-r0" + "0x2A": "8" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 360 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + install_image/install_image.py::test_install_image: + timeout: 600 + wait: 900 + skip_modules: + 'psus': + - psu0.0 + - psu0.1 + - psu0.2 + - psu1.0 + - psu1.1 + - psu1.2 + - psu3.0 + - psu3.1 + - psu3.2 + - psu4.0 + - psu4.1 + - psu4.2 + - psu5.0 + - psu5.1 + - psu5.2 + 'line-cards': + - LINE-CARD2 + - LINE-CARD3 + - LINE-CARD4 + - LINE-CARD5 + - LINE-CARD6 + - LINE-CARD7 + 'fabric-cards': + - FABRIC-CARD2 + - FABRIC-CARD3 + - FABRIC-CARD4 + - FABRIC-CARD5 + - FABRIC-CARD6 + - FABRIC-CARD7 + 'supervisor': + - SUPERVISOR1 + +sonic_cisco_lc_100G: + vars: + switch_type: chassis-packet + num_asics: 2 + frontend_asics: [0,1] + asic_type: cisco-8000 + + hosts: + sfd-lc0: + hwsku: Cisco-8800-LC-48H-C48 + slot_num: slot1 + loopback4096_ip: [3.3.3.3/32,3.3.3.4/32] + loopback4096_ipv6: [2603:10e2:400::3/128,2603:10e2:400::4/128] + ansible_host: {{ vxr_ports['sonic_dut_lc0']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 8800-LC-48H-O + serial: FOC2417NH06 + base_mac: F8:6B:D9:78:5E:18 + syseeprom_info: + "0x21": "8800-LC-48H-O" + "0x28": "x86_64-8800_lc_48h_o-r0" + "0x2A": "200" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + + sfd-lc1: + hwsku: Cisco-8800-LC-48H-C48 + slot_num: slot2 + loopback4096_ip: [3.3.3.5/32,3.3.3.6/32] + loopback4096_ipv6: [2603:10e2:400::5/128,2603:10e2:400::6/128] + ansible_host: {{ vxr_ports['sonic_dut_lc1']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 8800-LC-48H-O + serial: FOC2434PLPJ + base_mac: E4:1F:7B:DE:01:50 + syseeprom_info: + "0x21": "8800-LC-48H-O" + "0x28": "x86_64-8800_lc_48h_o-r0" + "0x2A": "200" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 diff --git a/infra/lab-templates/t2-2lc-min-ports-LL.yaml.j2 b/infra/lab-templates/t2-2lc-min-ports-LL.yaml.j2 new file mode 100644 index 00000000000..0548a4ca54d --- /dev/null +++ b/infra/lab-templates/t2-2lc-min-ports-LL.yaml.j2 @@ -0,0 +1,181 @@ +all: + children: + lab: + vars: + mgmt_subnet_mask_length: 16 + children: + sonic: + children: + sonic_multi_asic: + sonic_cisco_sup: + sonic_cisco_lc_400G: + fanout: + vars: + hwsku: C9336C-FX2 + os: nxos + hosts: + nexus-5: + ansible_host: 1.74.23.205 + ptf: + hosts: + docker-ptf: + ansible_host: {{ vxr_ports['docker_ptf']['xr_mgmt_ip'] }} + ansible_ssh_user: root + ansible_ssh_pass: root + +sonic_multi_asic: + vars: + hwsku: msft_multi_asic_vs + iface_speed: 40000 + num_asics: 6 + start_topo_service: True + frontend_asics: [0,1,2,3] + loopback4096_ip: [8.0.0.0/32, 8.0.0.1/32, 8.0.0.2/32, 8.0.0.3/32, 8.0.0.4/32, 8.0.0.5/32] + loopback4096_ipv6: [2603:10e2:400::/128, 2603:10e2:400::1/128, 2603:10e2:400::2/128, 2603:10e2:400::3/128, 2603:10e2:400::4/128, 2603:10e2:400::5/128] + +sonic_cisco_sup: + vars: + HwSku: 8800-RP-O + slot_num: slot0 + card_type: supervisor + switch_type: chassis-packet + hosts: + sfd-01: + ansible_ssh_user: admin + ansible_ssh_pass: password + ansible_host: {{ vxr_ports['sonic_dut']['xr_mgmt_ip'] }} + hwsku: Cisco-8800-RP + num_asics: 16 + asics_present: [0,1,2,3] + asic_type: cisco-8000 + model: 8800-RP-O + serial: FOC2428P4EW + base_mac: E4:1F:7B:37:52:08 + syseeprom_info: + "0x21": "8800-RP-O" + "0x28": "x86_64-8800_rp_o-r0" + "0x2A": "8" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 360 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + install_image/install_image.py::test_install_image: + timeout: 600 + wait: 900 + skip_modules: + 'psus': + - psu0.0 + - psu0.1 + - psu0.2 + - psu1.0 + - psu1.1 + - psu1.2 + - psu3.0 + - psu3.1 + - psu3.2 + - psu4.0 + - psu4.1 + - psu4.2 + - psu5.0 + - psu5.1 + - psu5.2 + 'line-cards': + - LINE-CARD2 + - LINE-CARD3 + - LINE-CARD4 + - LINE-CARD5 + - LINE-CARD6 + - LINE-CARD7 + 'fabric-cards': + - FABRIC-CARD2 + - FABRIC-CARD3 + - FABRIC-CARD4 + - FABRIC-CARD5 + - FABRIC-CARD6 + - FABRIC-CARD7 + 'supervisor': + - SUPERVISOR1 + +sonic_cisco_lc_400G: + vars: + switch_type: chassis-packet + num_asics: 3 + frontend_asics: [0,1,2] + asic_type: cisco-8000 + + hosts: + sfd-lc0: + hwsku: Cisco-88-LC0-36FH-O36 + slot_num: slot1 + loopback4096_ip: [3.3.3.3/32,3.3.3.4/32,3.3.3.5/32] + loopback4096_ipv6: [2603:10e2:400::3/128,2603:10e2:400::4/128,2603:10e2:400::5/128] + ansible_host: {{ vxr_ports['sonic_dut_lc0']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 88-LC0-36FH-O + serial: FOC2417NH06 + base_mac: F8:6B:D9:78:5E:18 + syseeprom_info: + "0x21": "88-LC0-36FH-O" + "0x28": "x86_64-88_lc0_36fh_o-r0" + "0x2A": "296" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + + sfd-lc1: + hwsku: Cisco-88-LC0-36FH-O36 + slot_num: slot2 + loopback4096_ip: [3.3.3.6/32,3.3.3.7/32,3.3.3.8/32] + loopback4096_ipv6: [2603:10e2:400::6/128,2603:10e2:400::7/128,2603:10e2:400::8/128] + ansible_host: {{ vxr_ports['sonic_dut_lc1']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 88-LC0-36FH-O + serial: FOC2434PLPJ + base_mac: E4:1F:7B:DE:01:50 + syseeprom_info: + "0x21": "88-LC0-36FH-O" + "0x28": "x86_64-88_lc0_36fh_o-r0" + "0x2A": "296" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 diff --git a/infra/lab-templates/t2-2lc-min-ports-VG.yaml.j2 b/infra/lab-templates/t2-2lc-min-ports-VG.yaml.j2 new file mode 100644 index 00000000000..1ab7378b980 --- /dev/null +++ b/infra/lab-templates/t2-2lc-min-ports-VG.yaml.j2 @@ -0,0 +1,190 @@ +all: + children: + lab: + vars: + mgmt_subnet_mask_length: 16 + children: + sonic: + children: + sonic_multi_asic: + sonic_cisco_sup: + sonic_cisco_lc_400G: + sonic_cisco_lc_100G: + fanout: + vars: + hwsku: C9336C-FX2 + os: nxos + hosts: + nexus-5: + ansible_host: 1.74.23.205 + ptf: + hosts: + docker-ptf: + ansible_host: {{ vxr_ports['docker_ptf']['xr_mgmt_ip'] }} + ansible_ssh_user: root + ansible_ssh_pass: root + +sonic_multi_asic: + vars: + hwsku: msft_multi_asic_vs + iface_speed: 40000 + num_asics: 6 + start_topo_service: True + frontend_asics: [0,1,2,3] + loopback4096_ip: [8.0.0.0/32, 8.0.0.1/32, 8.0.0.2/32, 8.0.0.3/32, 8.0.0.4/32, 8.0.0.5/32] + loopback4096_ipv6: [2603:10e2:400::/128, 2603:10e2:400::1/128, 2603:10e2:400::2/128, 2603:10e2:400::3/128, 2603:10e2:400::4/128, 2603:10e2:400:5/128] + +sonic_cisco_sup: + vars: + HwSku: 8800-RP-O + slot_num: slot0 + card_type: supervisor + switch_type: chassis-packet + hosts: + sfd-01: + ansible_ssh_user: admin + ansible_ssh_pass: password + ansible_host: {{ vxr_ports['sonic_dut']['xr_mgmt_ip'] }} + hwsku: Cisco-8800-RP + num_asics: 16 + asics_present: [0,1,2,3] + asic_type: cisco-8000 + model: 8800-RP-O + serial: FOC2428P4EW + base_mac: E4:1F:7B:37:52:08 + syseeprom_info: + "0x21": "8800-RP-O" + "0x28": "x86_64-8800_rp_o-r0" + "0x2A": "8" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 360 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + install_image/install_image.py::test_install_image: + timeout: 600 + wait: 900 + skip_modules: + 'psus': + - psu0.0 + - psu0.1 + - psu0.2 + - psu1.0 + - psu1.1 + - psu1.2 + - psu3.0 + - psu3.1 + - psu3.2 + - psu4.0 + - psu4.1 + - psu4.2 + - psu5.0 + - psu5.1 + - psu5.2 + 'line-cards': + - LINE-CARD2 + - LINE-CARD3 + - LINE-CARD4 + - LINE-CARD5 + - LINE-CARD6 + - LINE-CARD7 + 'fabric-cards': + - FABRIC-CARD2 + - FABRIC-CARD3 + - FABRIC-CARD4 + - FABRIC-CARD5 + - FABRIC-CARD6 + - FABRIC-CARD7 + 'supervisor': + - SUPERVISOR1 + +sonic_cisco_lc_400G: + vars: + switch_type: chassis-packet + num_asics: 3 + frontend_asics: [0,1,2] + asic_type: cisco-8000 + + hosts: + sfd-lc0: + hwsku: Cisco-88-LC0-36FH-M-O36 + slot_num: slot1 + loopback4096_ip: [3.3.3.3/32,3.3.3.4/32,3.3.3.5/32] + loopback4096_ipv6: [2603:10e2:400::3/128,2603:10e2:400::4/128,2603:10e2:400::5/128] + ansible_host: {{ vxr_ports['sonic_dut_lc0']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 88-LC0-36FH-MO + serial: FOC2417NH06 + base_mac: F8:6B:D9:78:5E:18 + syseeprom_info: + "0x21": "88-LC0-36FH-MO" + "0x28": "x86_64-88_lc0_36fh_mo-r0" + "0x2A": "296" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + +sonic_cisco_lc_100G: + vars: + switch_type: chassis-packet + num_asics: 2 + frontend_asics: [0,1] + asic_type: cisco-8000 + + hosts: + sfd-lc1: + hwsku: Cisco-8800-LC-48H-C48 + slot_num: slot2 + loopback4096_ip: [3.3.3.6/32,3.3.3.7/32] + loopback4096_ipv6: [2603:10e2:400::6/128,2603:10e2:400::7/128] + ansible_host: {{ vxr_ports['sonic_dut_lc1']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 8800-LC-48H-O + serial: FOC2434PLPJ + base_mac: E4:1F:7B:DE:01:50 + syseeprom_info: + "0x21": "8800-LC-48H-O" + "0x28": "x86_64-8800_lc_48h_o-r0" + "0x2A": "200" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 diff --git a/infra/lab-templates/t2-2lc-min-ports-VL.yaml.j2 b/infra/lab-templates/t2-2lc-min-ports-VL.yaml.j2 new file mode 100644 index 00000000000..7b516654f0e --- /dev/null +++ b/infra/lab-templates/t2-2lc-min-ports-VL.yaml.j2 @@ -0,0 +1,181 @@ +all: + children: + lab: + vars: + mgmt_subnet_mask_length: 16 + children: + sonic: + children: + sonic_multi_asic: + sonic_cisco_sup: + sonic_cisco_lc_400G: + fanout: + vars: + hwsku: C9336C-FX2 + os: nxos + hosts: + nexus-5: + ansible_host: 1.74.23.205 + ptf: + hosts: + docker-ptf: + ansible_host: {{ vxr_ports['docker_ptf']['xr_mgmt_ip'] }} + ansible_ssh_user: root + ansible_ssh_pass: root + +sonic_multi_asic: + vars: + hwsku: msft_multi_asic_vs + iface_speed: 40000 + num_asics: 6 + start_topo_service: True + frontend_asics: [0,1,2,3] + loopback4096_ip: [8.0.0.0/32, 8.0.0.1/32, 8.0.0.2/32, 8.0.0.3/32, 8.0.0.4/32, 8.0.0.5/32] + loopback4096_ipv6: [2603:10e2:400::/128, 2603:10e2:400::1/128, 2603:10e2:400::2/128, 2603:10e2:400::3/128, 2603:10e2:400::4/128, 2603:10e2:400::5/128] + +sonic_cisco_sup: + vars: + HwSku: 8800-RP-O + slot_num: slot0 + card_type: supervisor + switch_type: chassis-packet + hosts: + sfd-01: + ansible_ssh_user: admin + ansible_ssh_pass: password + ansible_host: {{ vxr_ports['sonic_dut']['xr_mgmt_ip'] }} + hwsku: Cisco-8800-RP + num_asics: 16 + asics_present: [0,1,2,3] + asic_type: cisco-8000 + model: 8800-RP-O + serial: FOC2428P4EW + base_mac: E4:1F:7B:37:52:08 + syseeprom_info: + "0x21": "8800-RP-O" + "0x28": "x86_64-8800_rp_o-r0" + "0x2A": "8" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 360 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + install_image/install_image.py::test_install_image: + timeout: 600 + wait: 900 + skip_modules: + 'psus': + - psu0.0 + - psu0.1 + - psu0.2 + - psu1.0 + - psu1.1 + - psu1.2 + - psu3.0 + - psu3.1 + - psu3.2 + - psu4.0 + - psu4.1 + - psu4.2 + - psu5.0 + - psu5.1 + - psu5.2 + 'line-cards': + - LINE-CARD2 + - LINE-CARD3 + - LINE-CARD4 + - LINE-CARD5 + - LINE-CARD6 + - LINE-CARD7 + 'fabric-cards': + - FABRIC-CARD2 + - FABRIC-CARD3 + - FABRIC-CARD4 + - FABRIC-CARD5 + - FABRIC-CARD6 + - FABRIC-CARD7 + 'supervisor': + - SUPERVISOR1 + +sonic_cisco_lc_400G: + vars: + switch_type: chassis-packet + num_asics: 3 + frontend_asics: [0,1,2] + asic_type: cisco-8000 + + hosts: + sfd-lc0: + hwsku: Cisco-88-LC0-36FH-M-O36 + slot_num: slot1 + loopback4096_ip: [3.3.3.3/32,3.3.3.4/32,3.3.3.5/32] + loopback4096_ipv6: [2603:10e2:400::3/128,2603:10e2:400::4/128,2603:10e2:400::5/128] + ansible_host: {{ vxr_ports['sonic_dut_lc0']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 88-LC0-36FH-MO + serial: FOC2417NH06 + base_mac: F8:6B:D9:78:5E:18 + syseeprom_info: + "0x21": "88-LC0-36FH-MO" + "0x28": "x86_64-88_lc0_36fh_mo-r0" + "0x2A": "296" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 + + sfd-lc1: + hwsku: Cisco-88-LC0-36FH-O36 + slot_num: slot2 + loopback4096_ip: [3.3.3.6/32,3.3.3.7/32,3.3.3.8/32] + loopback4096_ipv6: [2603:10e2:400::6/128,2603:10e2:400::7/128,2603:10e2:400::8/128] + ansible_host: {{ vxr_ports['sonic_dut_lc1']['xr_mgmt_ip'] }} + ansible_ssh_user: admin + ansible_ssh_pass: password + model: 88-LC0-36FH-O + serial: FOC2434PLPJ + base_mac: E4:1F:7B:DE:01:50 + syseeprom_info: + "0x21": "88-LC0-36FH-O" + "0x28": "x86_64-88_lc0_36fh_o-r0" + "0x2A": "296" + "0x2B": "Cisco" + "0x2D": "Cisco" + "0x2C": "US" + plt_reboot_dict: + cold: + timeout: 300 + wait: 360 + watchdog: + timeout: 300 + wait: 600 + acl/test_acl.py::TestAclWithReboot: + timeout: 300 + wait: 600 + platform_tests/test_reload_config.py::test_reload_configuration_checks: + timeout: 300 + wait: 60 diff --git a/infra/lab_connection_graph_churchill_mono.xml b/infra/lab_connection_graph_churchill_mono.xml new file mode 100644 index 00000000000..13e9238b068 --- /dev/null +++ b/infra/lab_connection_graph_churchill_mono.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/infra/lab_connection_graph_crocodile.xml b/infra/lab_connection_graph_crocodile.xml new file mode 100644 index 00000000000..c462f9301ca --- /dev/null +++ b/infra/lab_connection_graph_crocodile.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_dualtor_mth64.xml b/infra/lab_connection_graph_dualtor_mth64.xml new file mode 100644 index 00000000000..44859abbad2 --- /dev/null +++ b/infra/lab_connection_graph_dualtor_mth64.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_lightning.xml b/infra/lab_connection_graph_lightning.xml new file mode 100644 index 00000000000..bce1da784a8 --- /dev/null +++ b/infra/lab_connection_graph_lightning.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_mth32.xml b/infra/lab_connection_graph_mth32.xml new file mode 100644 index 00000000000..ac1779cf23b --- /dev/null +++ b/infra/lab_connection_graph_mth32.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_siren.xml b/infra/lab_connection_graph_siren.xml new file mode 100644 index 00000000000..0e08cecbc87 --- /dev/null +++ b/infra/lab_connection_graph_siren.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_t2_2lc_ll_min.xml b/infra/lab_connection_graph_t2_2lc_ll_min.xml new file mode 100644 index 00000000000..4cfa80413bb --- /dev/null +++ b/infra/lab_connection_graph_t2_2lc_ll_min.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_t2_2lc_min.xml b/infra/lab_connection_graph_t2_2lc_min.xml new file mode 100644 index 00000000000..f77fca1e226 --- /dev/null +++ b/infra/lab_connection_graph_t2_2lc_min.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/lab_connection_graph_t2_2lc_vl_min.xml b/infra/lab_connection_graph_t2_2lc_vl_min.xml new file mode 100644 index 00000000000..62e4fbe8f5f --- /dev/null +++ b/infra/lab_connection_graph_t2_2lc_vl_min.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/infra/label.py b/infra/label.py new file mode 100644 index 00000000000..7c9b459c454 --- /dev/null +++ b/infra/label.py @@ -0,0 +1,71 @@ +import os +import json +from pathlib import Path + +def get_folders_with_labels(directory): + # Ensure the directory exists + if not os.path.exists(directory): + raise FileNotFoundError(f"The directory '{directory}' does not exist.") + + # List all folders in the directory + folders = [name for name in os.listdir(directory) if os.path.isdir(os.path.join(directory, name))] + json_file = "output.json" + + # Create a dictionary with folder names and labels + folder_labels = {folder: f"label_for_{folder}" for folder in folders} + ''' + path = Path(directory) + base_level = len(path.parts) + for subdir in path.rglob('*'): + current_level = len(subdir.parts) + if current_level <= base_level + 1 and subdir.is_dir(): + print(subdir) + ''' + for folder in folders: + folder_dict = dict() + #folder_dict['NAME'] = f'cisco/{folder}' + folder_dict['NAME'] = folder + if folder in ["platform_tests"]: + folder_dict['TEAM'] = "SONIC-PLAT-INFRA" + folder_dict['SCRUM_LEAD'] = "Shivu Vibhuti" + elif folder in ['qos', 'pfc', 'snappi', 'ixia', 'pfc_asym', 'pfc_wd']: + folder_dict['SCRUM_LEAD'] = "Alpesh Patel" + folder_dict['TEAM'] = "SONIC-PFC" + else: + folder_dict['TEAM'] = "SONIC-MSFT-T2-FWD-FEAT" + folder_dict['SCRUM_LEAD'] = "James An" + + folder_dict['202305_LABEL'] = "202305" + folder_dict['202311_LABEL'] = "202311" + folder_dict['MASTER_LABEL'] = "MASTER" + folder_dict['T0_LABEL'] = "T0" + folder_dict['T1_LABEL'] = "T1" + folder_dict['T2_LABEL'] = "T2-PASS%" + folder_dict['EXTRA_LABEL'] = ["CICD"] + #folder_dict['CURRENT_QUARTER'] = [""] + #folder_dict['CURRENT_SPRINT'] + + write_to_json(folder_dict,json_file) + + return folder_dict + +def write_to_json(data, json_file): + with open(json_file, 'a') as f: + json.dump(data, f, indent=4) + f.write(",\n") + +if __name__ == "__main__": + # Define the directory and JSON file name + directory = "/Users/pevenkat/whitebox/sonic-test/sonic-mgmt/tests" + json_file = "output.json" + + # Get folders and labels + try: + folder_labels = get_folders_with_labels(directory) + + # Write the dictionary to a JSON file + #write_to_json(folder_labels, json_file) + + print(f"JSON file '{json_file}' created successfully with folder labels.") + except Exception as e: + print(f"An error occurred: {e}") diff --git a/infra/minigraph_dpg_asic.patch b/infra/minigraph_dpg_asic.patch new file mode 100644 index 00000000000..aa45519e299 --- /dev/null +++ b/infra/minigraph_dpg_asic.patch @@ -0,0 +1,17 @@ +diff --git a/sonic-mgmt/ansible/templates/minigraph_dpg_asic.j2 b/sonic-mgmt/ansible/templates/minigraph_dpg_asic.j2 +index 94b2dd08b5..19d778b05b 100644 +--- a/sonic-mgmt/ansible/templates/minigraph_dpg_asic.j2 ++++ b/sonic-mgmt/ansible/templates/minigraph_dpg_asic.j2 +@@ -193,8 +193,10 @@ + {% for neigh_asic in asic_config['neigh_asic'] %} + {% set neigh_asic_index = neigh_asic.split('ASIC')[1]|int %} + {% set po_intf = 'PortChannel' + port_channel_id(asic_index, neigh_asic_index).zfill(2) %} +-{{- internal_static_routes_ipv4_device_pair.append(po_intf + ',' + asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0]) -}} +-{{- internal_static_routes_ipv6_device_pair.append(po_intf + ',' + asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0]) -}} ++{% for intf_index in range(asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0]|length) %} ++{{- internal_static_routes_ipv4_device_pair.append(po_intf + ',' + asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0][intf_index]) -}} ++{{- internal_static_routes_ipv6_device_pair.append(po_intf + ',' + asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0][intf_index]) -}} ++{% endfor %} + {% endfor %} + + IPNextHop diff --git a/infra/ntp.conf.mgmt b/infra/ntp.conf.mgmt new file mode 100644 index 00000000000..76ffd2d5598 --- /dev/null +++ b/infra/ntp.conf.mgmt @@ -0,0 +1,5 @@ +driftfile /var/lib/ntp/drift + + +server 2.ntp.esl.cisco.com +server 1.ntp.esl.cisco.com diff --git a/infra/ntp.conf.ptf b/infra/ntp.conf.ptf new file mode 100644 index 00000000000..5050bd8f39c --- /dev/null +++ b/infra/ntp.conf.ptf @@ -0,0 +1,4 @@ +server 192.168.122.2 iburst prefer +server 2.ntp.esl.cisco.com +server 1.ntp.esl.cisco.com +server 127.127.1.0 prefer diff --git a/infra/output.json b/infra/output.json new file mode 100644 index 00000000000..182e8602024 --- /dev/null +++ b/infra/output.json @@ -0,0 +1,1400 @@ +{ + "NAME": "log_fidelity", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "pc", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "decap", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dualtor_io", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "database", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "saitests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "testbed_setup", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "vs_voq_cfgs", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cacl", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "mvrf", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dhcp_server", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ecmp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "mpls", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "syslog", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "flow_counter", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "snmp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "system_health", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "route", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ixia", + "SCRUM_LEAD": "Alpesh Patel", + "TEAM": "SONIC-PFC", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "bfd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "show_techsupport", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "passw_hardening", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "gnmi", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "container_checker", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "iface_namingmode", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "autorestart", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "sai_qualify", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "override_config_table", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "plugins", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "lldp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dut_console", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "sflow", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "k8s", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "mclag", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "qos", + "SCRUM_LEAD": "Alpesh Patel", + "TEAM": "SONIC-PFC", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "nat", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "vxlan", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "crm", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "snappi_tests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "container_hardening", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "pipelines", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "docs", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "restapi", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ntp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dhcp_relay", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "minigraph", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "vlan", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "process_monitoring", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "common", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "read_mac", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ssh", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "span", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "voq", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dualtor", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "http", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ptftests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "pfcwd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "wan", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "drop_packets", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "scripts", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "sub_port_interfaces", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "acstests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "iface_loopback_action", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "monit", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "fib", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "vrf", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "reset_factory", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "templates", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dash", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "disk", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "portstat", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "memory_checker", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "copp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "upgrade_path", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "fwutil-fw", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dualtor_mgmt", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ipfwd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "telemetry", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "everflow", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "radv", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "arp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "scp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "macsec", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "fdb", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "bgp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "ip", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "dns", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "sonic", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "platform_tests", + "TEAM": "SONIC-PLAT-INFRA", + "SCRUM_LEAD": "Shivu Vibhuti", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "generic_config_updater", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "tacacs", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "metadata", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "eos", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "configlet", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "acl", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "clock", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "stress", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "console", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "pfc_asym", + "SCRUM_LEAD": "Alpesh Patel", + "TEAM": "SONIC-PFC", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, diff --git a/infra/output_cisco.json b/infra/output_cisco.json new file mode 100644 index 00000000000..0f3df803e7e --- /dev/null +++ b/infra/output_cisco.json @@ -0,0 +1,154 @@ +{ + "NAME": "cisco/saitests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/pfc", + "SCRUM_LEAD": "Alpesh Patel", + "TEAM": "SONIC-PFC", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/syslog", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/qos", + "SCRUM_LEAD": "Alpesh Patel", + "TEAM": "SONIC-PFC", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/install_image", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/dsf", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/common", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/ipfwd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/auto_triage", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/platform_tests", + "TEAM": "SONIC-PLAT-INFRA", + "SCRUM_LEAD": "Shivu Vibhuti", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, +{ + "NAME": "cisco/tortuga", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": "James An", + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABEL": [ + "CICD" + ] +}, diff --git a/infra/pipeline_collect_result.py b/infra/pipeline_collect_result.py new file mode 100644 index 00000000000..199ef95b04b --- /dev/null +++ b/infra/pipeline_collect_result.py @@ -0,0 +1,83 @@ +#!/usr/bin/python + +import os +import json +import re +import yaml + + +# Path to config file +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +SUMMARY_REPORT_FILENAME = "results.json" + +SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) +ALLURE_REPORT_URL_FILE = allure_config['allure']['report-url-file-path'] + +# VXR SIM failure detected, don't overwrite file contents +bgp_failure = False +if (os.path.isfile(SUMMARY_REPORT_PATH)): + with open(SUMMARY_REPORT_PATH, "r") as summary_file: + contents = json.load(summary_file) + if ("status" in contents and contents["status"] == "sim_failure"): + print("VXR SIM failure detected!") + exit(1) + if ("status" in contents and contents["status"] == "bgp_failure"): + bgp_failure = True + +sum_f = open(SUMMARY_REPORT_PATH, "w") + +sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "status" : "sim_success"} + +if bgp_failure: + print("BGP Test Failure Detected") + sum["total"] = 1 + sum["failed"] = 1 + sum["status"] = "bgp_failure" + json.dump(sum, sum_f) + sum_f.close() + exit(0) + +resultpattern = r'' +numberpattern = r'(\d+)' + +try: + report = open("./report.html", "r") +except: + print("error: report.html file not exit!") + json.dump(sum, sum_f) + sum_f.close() + exit(1) + +resultclass = "" +lines = report.readlines() +for line in lines: + result = re.findall(resultpattern, line) + if result: + print(result[0]) + resultclass = result[0] + n = re.findall(numberpattern, line) + if n: + print(n[0]) + sum[resultclass] = int(n[0]) + sum["total"] += int(n[0]) +if sum["total"] > 0: + sum["success_rate"] = round(sum["passed"] / (sum["total"] - sum["skipped"]) * 100, 2) + +try: + with open(ALLURE_REPORT_URL_FILE, 'r') as f: + allure_url = f.readline() + print(f"found allure report url: {allure_url}") + sum["report_link"] = allure_url +except FileNotFoundError as e: + print(f"Error! could not find file {ALLURE_REPORT_URL_FILE}, containing allure report: {e}") + +print(sum) + +json.dump(sum, sum_f) +sum_f.close() + diff --git a/infra/pretest.patch b/infra/pretest.patch new file mode 100644 index 00000000000..45b6abd46bf --- /dev/null +++ b/infra/pretest.patch @@ -0,0 +1,13 @@ +diff --git a/sonic-mgmt/tests/test_pretest.py b/sonic-mgmt/tests/test_pretest.py +index f540bbf..ea859a7 100644 +--- a/sonic-mgmt/tests/test_pretest.py ++++ b/sonic-mgmt/tests/test_pretest.py +@@ -147,7 +147,7 @@ def test_update_testbed_metadata(duthosts, tbinfo, fanouthosts): + except IOError as e: + logger.warning('Unable to create file {}: {}'.format(filepath, e)) + +- prepare_autonegtest_params(duthosts, fanouthosts) ++ #prepare_autonegtest_params(duthosts, fanouthosts) + + + def test_disable_rsyslog_rate_limit(duthosts, enum_dut_hostname): diff --git a/infra/remove_bfd_mac_count_precheck.patch b/infra/remove_bfd_mac_count_precheck.patch new file mode 100644 index 00000000000..9e92330757d --- /dev/null +++ b/infra/remove_bfd_mac_count_precheck.patch @@ -0,0 +1,12 @@ +diff --git a/sonic-mgmt/tests/common/plugins/sanity_check/checks.py b/sonic-mgmt/tests/common/plugins/sanity_check/checks.py +--- a/sonic-mgmt/tests/common/plugins/sanity_check/checks.py ++++ b/sonic-mgmt/tests/common/plugins/sanity_check/checks.py +@@ -40,6 +40,4 @@ + 'check_mux_simulator', +- 'check_orchagent_usage', +- 'check_bfd_up_count', +- 'check_mac_entry_count'] ++ 'check_orchagent_usage'] + + __all__ = CHECK_ITEMS + diff --git a/infra/requirements.txt b/infra/requirements.txt new file mode 100644 index 00000000000..b0d9f29ad50 --- /dev/null +++ b/infra/requirements.txt @@ -0,0 +1,11 @@ +wheel +pyyaml +pyats +paramiko +MarkupSafe>=2.0 +/auto/vxr/pyvxr/packages/pyvxr-latest.tar.gz +pre-commit +pandas +numpy +jinja2 +psycopg2-binary diff --git a/infra/run_pytest.py b/infra/run_pytest.py new file mode 100644 index 00000000000..d74a1ef3a4d --- /dev/null +++ b/infra/run_pytest.py @@ -0,0 +1,497 @@ +#!/router/bin/python3.8.2_mcpre-v1 + +# Creates the t1 topology using vxr.py +# Create admin user in vEOS vm +# Create testbed file based on vxr_ports +# Upload t1 specific files to sonic mgmt container +# Change DUT password and set mgmt ip address +# Start docker container, deploy DUT minigraph +# Replace DUT Mgmt Address +# Reload DUT config +# Add vEOS config +# +# Usage: ./create_sonic_t1_ads.py -t sonic_t1_topo.yaml -c +# -t Topology file for PyVxr +# -c Clean pre-existing sim +# +# After the script is run – you can log into the sonic dut (admin/cisco123 – I change the password to cisco123) and check for bgp summary – both v4 and v6. +# + +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-i', '--tc_file', type=str, help='Input port file', + required=False,default=None) + + return parser + +def start_pytest(data,base_topo_file): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('python TestbedProcessing.py -i {} \n'.format(base_topo_file)) + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv gen-mg docker-ptf lab group_vars/lab/secrets.yml\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + finally: + print(buff) + + ssh.close() + +def vEOS_inital_cfg(data,vEOS_count): + # Specify the connection timeout in seconds for blocking operations, like connection attempt + connection_timeout = 5 + + # Specify a timeout in seconds. Read until the string is found or until the timeout has passed + reading_timeout = 5 + base = 100 + + for i in range (1,vEOS_count+1): + veos1_host = data['veos'+ str(i)]['HostAgent'] + veos1_port = data['veos'+str(i)]['serial0'] + + print('Adding admin password for VM0{}:'.format(str(base))) + base += 1 + add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout) + + +def create_testbed_file(data,base_topo_file,vEOS_count): + input_file = base_topo_file + with open(input_file) as f: + tdata = yaml.load(f, Loader=yaml.FullLoader) + f.close() + + tdata['devices']['sherman-01']['ansible']['ansible_host'] = data['sonic_dut']['xr_mgmt_ip'] + tdata['devices']['sherman-01']['ansible']['ansible_ssh_user'] = data['sonic_dut']['uname'] + tdata['testbed']['docker-ptf']['ansible']['ansible_host'] = data['ptf']['xr_mgmt_ip'] + '/24' + tdata['testbed']['docker-ptf']['ptf_ip'] = data['ptf']['xr_mgmt_ip'] + '/24' + base = 100 + + for i in range (1,vEOS_count+1): + tdata['veos']['vms_1']['VM0' + str(base)]['ansible_host'] = data['veos'+str(i)]['xr_mgmt_ip'] + base +=1 + + with open(input_file,'w') as f: + yaml.dump(tdata,f) + f.close() + +def change_dut_passwd(data): + host = data['sonic_dut']['HostAgent'] + port = data['sonic_dut']['xr_redir22'] + user = data['sonic_dut']['uname'] + passwd = data['sonic_dut']['passwd'] + #passwd = "cisco123" + new_passwd = "cisco123" + mgmt_ip = data['sonic_dut']['xr_mgmt_ip'] + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + try: + ssh.connect(host, port, user, passwd) + except paramiko.ssh_exception.AuthenticationException: + ssh.connect(host, port, user, new_passwd) + + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp) + + # Ssh and wait for the password prompt. + chan.send('sudo passwd {}\n'.format(user)) + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while not buff.endswith('password: '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + # Send the password and wait for a prompt. + time.sleep(3) + chan.send(new_passwd +'\n') + + buff = '' + while buff.find(' successfully') < 0 : + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + if (' successfully') in buff: + print("Password change successful") + else: + print("Password change failed") + + time.sleep(3) + chan.send('sudo config interface ip add eth0 {}/24 192.168.122.1\n'.format(mgmt_ip)) + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config interface ip add eth0 FC00:2::32/64 fc00:2::1\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo config save -y\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + + time.sleep(3) + chan.send('sudo cp /etc/sonic/config_db.json /tmp/config_db.json\n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + ssh.close() + +def run_python_script(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, port, user, passwd) + chan = ssh.invoke_shell() + for cmd in cmd_list: + chan.send(cmd) + time.sleep(3) + resp = chan.recv(9999) + print("Response : %s" % resp.decode("ascii")) + + ssh.close() + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + for cmd in cmd_list: + ssh.connect(host, port, user, passwd) + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("ascii").strip() + error = stderr.read().decode("ascii") + print(out) + if error: + print('There was an error pulling the runtime: {}'.format(error)) + ssh.close() + +def add_vEOS_admin_user(veos1_host,veos1_port, connection_timeout): + tn = telnetlib.Telnet(veos1_host,veos1_port, connection_timeout) + + # tn.read_until(b"Username: ") + # tn.write(user.encode('ascii') + b"\n") + # if password: + # tn.read_until(b"Password: ") + # tn.write(password.encode('ascii') + b"\n") + + tn.write(b"enable\n") + time.sleep(1) + tn.write(b"conf t\n") + time.sleep(1) + tn.write(b"username admin secret 123456\n") + time.sleep(1) + tn.write(b"aaa root secret 123456\n") + time.sleep(1) + tn.write(b"end\n") + time.sleep(1) + tn.write(b"copy running-config startup-config\n") + time.sleep(1) + tn.close() + +def download_mg(data,topo_type): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + ftp_client.get('/home/vxr/sonic-test/sonic-mgmt/ansible/minigraph/sherman-01.{}.xml'.format(topo_type), 'minigraph.xml') + ftp_client.close() + ssh.close() + +def upload_tb_files(data,topo_type,base_topo_file): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + ftp_client=ssh.open_sftp() + if topo_type == 't0': + ftp_client.put('testbed_add_vm_topology.yml','sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('veos.yml','sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + ftp_client.put(base_topo_file,'sonic-test/sonic-mgmt/ansible/{}'.format(base_topo_file)) + ftp_client.put('t0-leaf.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t0-leaf.j2') + else: + ftp_client.put('testbed_add_vm_topology.yml','sonic-test/sonic-mgmt/ansible/testbed_add_vm_topology.yml') + ftp_client.put('password.txt','sonic-test/sonic-mgmt/ansible/password.txt') + ftp_client.put('t1-spine.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2') + ftp_client.put('t1-tor.j2','sonic-test/sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2') + ftp_client.put('veos.yml','sonic-test/sonic-mgmt/ansible/roles/eos/tasks/veos.yml') + ftp_client.put(base_topo_file,'sonic-test/sonic-mgmt/ansible/{}'.format(base_topo_file)) + ftp_client.put('topo_t1.yml', 'sonic-test/sonic-mgmt/ansible/vars/topo_t1.yml') + ftp_client.close() + +def replace_dut_mgmt_address(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd']) + ftp_client=ssh.open_sftp() + ftp_client.get('/tmp/config_db.json','config_db_current.json') + ftp_client.close() + ssh.close() + + with open('config_db_current.json') as cfg_file: + cfg_data = json.load(cfg_file) + current_mgm_intf = cfg_data["MGMT_INTERFACE"] + current_mac = cfg_data["DEVICE_METADATA"]["localhost"]["mac"] + print(cfg_data["MGMT_INTERFACE"]) + cfg_file.close() + + with open('config_db.json') as cfg_file: + cfg_data = json.load(cfg_file) + cfg_file.close() + + with open('config_db.json','w') as cfg_file: + cfg_data["MGMT_INTERFACE"] = current_mgm_intf + cfg_data["DEVICE_METADATA"]["localhost"]["mac"] = current_mac + json.dump(cfg_data, cfg_file, indent=4) + cfg_file.close() + + ssh.connect(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd']) + ftp_client=ssh.open_sftp() + ftp_client.put('config_db.json','/tmp/config_db_new.json') + ftp_client.put('minigraph.xml', '/tmp/minigraph.xml') + ftp_client.close() + ssh.close() + +def reload_dut_with_newCFG(data): + cmd_list = list() + cmd_list.append('sudo cp /tmp/config_db_new.json /etc/sonic/config_db.json\n') + cmd_list.append('sudo cp /tmp/minigraph.xml /etc/sonic/minigraph.xml\n') + cmd_list.append('sudo reboot\n') + run_exec_cmds(data['sonic_dut']['HostAgent'], data['sonic_dut']['xr_redir22'], data['sonic_dut']['uname'], data['sonic_dut']['passwd'], cmd_list) + +def add_ptf_backplane_addr(data): + cmd_list = list() + cmd_list.append('ip address add 10.10.246.254/24 dev eth32') + cmd_list.append('ip -6 address add fc0a::ff/64 dev eth32') + cmd_list.append('for i in {0..32}; do /sbin/ifconfig eth$i mtu 9216 up; done') + run_exec_cmds(data['ptf']['HostAgent'], data['ptf']['xr_redir22'], 'root', 'root', cmd_list) + +def add_vEOS_cfg(data): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + chan = ssh.invoke_shell() + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('docker exec -it docker-sonic-mgmt /bin/bash \n') + buff = '' + while not buff.endswith(':~$ '): + resp = chan.recv(9999) + buff += resp.decode("ascii") + print(resp.decode("ascii")) + time.sleep(3) + + chan.send('cd /data/ansible \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("ascii")) + + chan.send('./testbed-cli.sh -t testbed.csv -m veos add-topo docker-ptf password.txt\n') + chan.settimeout(180) + buff = '' + err_buff = '' + rcv_timeout = 60 + interval_length = 5 + + try: + while not chan.exit_status_ready(): + if chan.recv_ready(): + resp = chan.recv(9999) + print(resp.decode("ascii")) + buff += resp.decode("ascii") + else: + rcv_timeout -= interval_length + if rcv_timeout < 0: + break + else: + time.sleep(interval_length) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(9999) + while error_buff: + err_buff += error_buff.decode("ascii") + error_buff = chan.recv_stderr(9999) + print(err_buff) + except Exception as e: + print('Hit %s' % e) + #finally: + # print(buff) + + ssh.close() + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + topo_yaml = args['topo_yaml'] + clean_sim = args['clean_sim'] + dut_passwd = args['dut_passwd'] + dut_uname = args['dut_uname'] + topo_type = args['topo_type'] + if topo_type == 't0': + base_topo_file = 'testbed-sherman-t0.yaml' + os.system("cp sonic_t0_topo/* .") + vEOS_count = 4 + else: + base_topo_file = 'testbed-sherman-t1.yaml' + os.system("cp sonic_t1_topo/* .") + vEOS_count = 32 + + if clean_sim: + os.system("/auto/vxr/pyvxr/pyvxr-1.0.4/vxr.py clean") + + os.system("/auto/vxr/pyvxr/pyvxr-1.0.4/vxr.py start {}".format(topo_yaml)) + os.system("/auto/vxr/pyvxr/pyvxr-1.0.4/vxr.py ports > vxr_ports.yaml") + input_file = args['input_file'] + + if input_file is None: + input_file = "vxr_ports.yaml" + + with open(input_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + + data['sonic_dut']['uname'] = dut_uname + data['sonic_dut']['passwd'] = dut_passwd + + # Create admin user in vEOS vm + print("****** Create admin user in vEOS vm *******") + vEOS_inital_cfg(data,vEOS_count) + + print("********** Do a Git Update **********") + git_update(data) + + # Create testbed file based on vxr_ports + print("****** Create testbed file based on vxr_ports *******") + create_testbed_file(data,base_topo_file,vEOS_count) + + # Upload t1 specific files to sonic mgmt container + print("********** Upload testbed specific files to sonic mgmt container ***********") + upload_tb_files(data,topo_type,base_topo_file) + + # Change DUT password and set mgmt ip address + print("********** Change DUT password and set mgmt ip address ***********") + change_dut_passwd(data) + + # Start docker container, deploy DUT minigraph + print("********** Start docker container, deploy DUT minigraph ***********") + deploy_mg(data,base_topo_file) + + # Start docker container, deploy DUT minigraph + print("********** Download DUT minigraph ***********") + download_mg(data,topo_type) + + # Replace DUT Mgmt Address + print("********** Replace DUT Mgmt Address ***********") + replace_dut_mgmt_address(data) + + # Reload DUT config + print("********** Reload DUT config ***********") + reload_dut_with_newCFG(data) + + # Add vEOS config + print("********** Add vEOS config ***********") + add_vEOS_cfg(data) + + print("********** Configure PTF backplane ip address **********") + add_ptf_backplane_addr(data) + + + print("Sonic DUT: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_dut']['HostAgent'], data['sonic_dut']['serial0'], data['sonic_dut']['xr_mgmt_ip'], data['sonic_dut']['xr_redir22'])) + + print("Sonic Mgmt: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['sonic_mgmt']['HostAgent'], data['sonic_mgmt']['serial0'], data['sonic_mgmt']['xr_mgmt_ip'], data['sonic_mgmt']['xr_redir22'])) + + print("PTF: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(data['ptf']['HostAgent'], data['ptf']['serial0'], data['ptf']['xr_mgmt_ip'], data['ptf']['xr_redir22'])) + + for i in range (1,vEOS_count+1): + print("VEOS{}: Tlnt: {} Tlnt Port: {} SSH: {} SSH Port: {}".format(str(i-1), data['veos'+ str(i)]['HostAgent'], data['veos'+ str(i)]['serial0'], data['veos'+ str(i)]['xr_mgmt_ip'], data['veos'+ str(i)]['xr_redir22'] )) + + +if __name__ == '__main__': + main() diff --git a/infra/run_scripts.py b/infra/run_scripts.py new file mode 100755 index 00000000000..dc51f02b359 --- /dev/null +++ b/infra/run_scripts.py @@ -0,0 +1,618 @@ +#!/usr/bin/python + +import argparse +import logging +import os +import subprocess +import time +import datetime +import sys +import paramiko +import yaml +from utils import log + +# Load config file +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +# Load Allure config values +ALLURE_DIR = allure_config['allure']['local-report-dir'] +ALLURE_REPORT_URL_FILE = allure_config['allure']['report-url-file-path'] + +# Map device types to actual device names +# KEY: Device Type +# VALUE: Actual DUT name +DEVICE_TYPE_TO_DUT_NAME_MAP = { + 'sherman': 'sherman-01', + 'churchill-mono': 'churchill-mono-01', + 'm64-zz-2': 'm64-zz-2', + 'mth-t0-64': 'mth-t0-64', + 'sfd': 'sfd', + 'aaa14-t2': 'aaa14-t2', + 'lightning': 'lightning-01', + 'superbolt': 'superbolt-01', + 'siren': 'siren-01', + 'crocodile': 'crocodile-01', + 'mustang': 'mustang-01', + 'mth64': 'mathilda-01', + 'titan': 'titan-01' +} + +def _create_parser(): + parser = argparse.ArgumentParser(description='Execute scripts and parse result.') + parser.add_argument('-s', '--script_file', type=str, help='Input test script file', + required=True,default='t1_scripts.txt') + parser.add_argument('-v', '--drop_version', type=str, help='specify drop version', + required=False,default=None) + parser.add_argument('-l', '--log_dir', type=str, help='Log dir', + required=False,default=None) + parser.add_argument('-p', '--only_parse', action='store_true', help='Just Parse results', + default=False) + parser.add_argument('-d', '--device_type', type=str, help='the device type of the DUT', + required=False,default="mth32") + parser.add_argument('-tt', '--topo_type', type=str, help='topo type', + required=True,default='t1-64-lag') + parser.add_argument('--testcase_topo_type', type=str, help='topology key used for testcase selection', + required=False, default=None) + parser.add_argument('-t', '--tstamp', type=str, help='Time stamp', + required=False,default=None) + parser.add_argument('-n', '--dut_name', type=str, help='DUT name specified to run tests', + required=False,default='mathilda-01') + parser.add_argument('-g', '--topo_name', type=str, help='Topo name specified to run tests', + required=False,default='docker-ptf') + parser.add_argument('-b', '--build_id', type=str, help='Jenkins Build ID associated with the test', + required=False, default=None) + parser.add_argument('--create_allure_report', action='store_true', help='When testing, specify if allure report to be created at the end of test', + default=False) + parser.add_argument('--additional_tests', type=str, help='Additional Sanity Test to run', + required=False, default="") + parser.add_argument('-k', '--skip_sanity', action='store_true', help='Skip sanity check', + default=False) + parser.add_argument('-dd', '--dut_data_file', type=str, help='path to file containing DUT acess info', + required=False,default=None) + parser.add_argument('--mark-conditions-files', type=str, + help='mark files to skip tests conditionaly, use comma seperated file names when specifying more than one file', + required=False, default='common/plugins/conditional_mark/tests_mark_conditions.yaml') + parser.add_argument('-y', '--test_tag', type=str, help='tag to get tests to run from sanity file. Comma seperated \ + For e.g.fwd,plt', required=False,default=None) + return parser + +def run_exec_cmds(host,port,user,passwd,cmd_list): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + log.info(f"Connecting to {host}:{port} as {user}") + ssh.connect(host, port, user, passwd) + for cmd in cmd_list: + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + try: + out = stdout.read().decode("ascii").strip() + error = stderr.read() + log.info(out) + if error: + log.error(f'There was an error pulling the runtime: {error}') + except Exception as e: + log.error(f"Problem decoding output of ssh command: {e}") + ssh.close() + +# Generate allure report using data in ALLURE_DIR +def generate_allure_report(build_id, current_result_file): + report_folder_name = f"allure-report-{build_id}" + report_dir_path = f"/tmp/{report_folder_name}" + report_tar_path = f"{report_dir_path}.tar.gz" + + result = subprocess.run(["allure", "generate", "--name", build_id, "-o", report_dir_path, ALLURE_DIR]) + if result.returncode != 0: + log.error(f"Error while generating allure report! Error: {result.stderr} {result.stdout}") + current_result_file.write(f"Error while generating allure report! Error: {result.stderr} {result.stdout}\n") + current_result_file.flush() + return + + result = subprocess.run(["ls", report_dir_path]) + if result.returncode != 0: + log.error(f"Error while verifying allure report! Error: {result.stderr} {result.stdout}") + current_result_file.write(f"Error while verifying allure report! Error: {result.stderr} {result.stdout}") + current_result_file.flush() + return + + log.info(f"Allure report generated successfully at /tmp/{report_folder_name}") + current_result_file.write(f"Allure report generated successfully at /tmp/{report_folder_name}\n") + current_result_file.flush() + + result = subprocess.run(["tar", "-cvzf", report_tar_path, "-C", "/tmp/", report_folder_name]) + if result.returncode != 0: + log.error(f"Error while generating allure report tarball! Error: {result.stderr} {result.stdout}") + current_result_file.write(f"Error while generating allure report tarball! Error: {result.stderr} {result.stdout}\n") + current_result_file.flush() + return + + result = subprocess.run(["ls", report_tar_path]) + if result.returncode != 0: + log.error(f"Error while verifying allure report tarball! Error: {result.stderr} {result.stdout}") + current_result_file.write(f"Error while verifying allure report tarball! Error: {result.stderr} {result.stdout}") + current_result_file.flush() + return + + log.info("Allure report tarball created successfully!") + current_result_file.write("Allure report tarball created successfully!\n") + current_result_file.flush() + +def convert_keys_to_strings_and_lower(d): + """Recursively convert all keys in a dictionary to lowercase strings.""" + if isinstance(d, dict): + return {str(key).lower(): convert_keys_to_strings_and_lower(value) for key, value in d.items()} + elif isinstance(d, list): + return [convert_keys_to_strings_and_lower(item) for item in d] + else: + return d + +def get_testcases_yaml(yaml_file, test_categories_str, topology=None, device_type=None, hw_or_sim='sim'): + """ + Loads a test case YAML and returns a subset of test cases, determined by these rules: + + 1. For each TEST_CATEGORY: + 1a. Tests in TEST_CATEGORY/all_topo are included + 1b. If TOPOLOGY is specified and TEST_CATEGORY/TOPOLOGY exists, tests in TEST_CATEGORY/TOPOLOGY are included + + 2. Any duplicate test entries are removed. + + :param yaml_file: path of YAML file with test cases and its categorization. + :param test_categories_str: comma separeted string, containing test categories (e.g. 'FWD', 'PLT', etc.). + :param topology: string indicating the topology (e.g. 't1-64-lag'). + :return: List of test file paths (strings) in the final test list. + """ + if hw_or_sim not in ['hw', 'sim']: + err_msg = f"ERROR! Invalid choice for parameter hw_or_sim. choices are 'sim' or 'hw', given: '{hw_or_sim}'" + print(err_msg) + raise ValueError(err_msg) + + with open(yaml_file, 'r') as f: + data = yaml.safe_load(f) + + data = convert_keys_to_strings_and_lower(data) + + final_tests = [] + + if not test_categories_str: + raise ValueError("test_category must be specified!") + + category_list = [] + if test_categories_str: + category_list = [cat.strip().lower() for cat in test_categories_str.split(',') if cat.strip()] + + # 2. If we have categories, add all_topo/ if it exists + for category in category_list: + if category not in data: + log.error(f"Could not find category '{category}' in yaml file '{yaml_file}'! Skipping...") + continue + + if 'all_topo' in data[category]: + if 'all_pids' in data[category]['all_topo']: + if hw_or_sim in data[category]['all_topo']['all_pids']: + final_tests.extend(data[category]['all_topo']['all_pids'][hw_or_sim]) + + if device_type is not None and device_type in data[category]['all_topo']: + if hw_or_sim in data[category]['all_topo'][device_type]: + final_tests.extend(data[category]['all_topo'][device_type][hw_or_sim]) + + if topology and topology in data[category]: + if 'all_pids' in data[category][topology]: + if hw_or_sim in data[category][topology]['all_pids']: + final_tests.extend(data[category][topology]['all_pids'][hw_or_sim]) + for pid_list in data[category][topology].keys(): + if isinstance(pid_list, str): + # Split the string by commas and strip whitespace + pids_list = [item.strip() for item in pid_list.split(",")] + if device_type is not None and device_type in pids_list: + if hw_or_sim in data[category][topology][pid_list]: + final_tests.extend(data[category][topology][pid_list][hw_or_sim]) + + # 5. Remove duplicates while preserving the order + seen = set() + unique_tests = [] + for test in final_tests: + if test not in seen: + seen.add(test) + unique_tests.append(test) + + return unique_tests + +def get_test_tag_map(yaml_file, test_categories_str, topology=None, device_type=None, hw_or_sim='sim'): + if hw_or_sim not in ['hw', 'sim']: + err_msg = f"ERROR! Invalid choice for parameter hw_or_sim. choices are 'sim' or 'hw', given: '{hw_or_sim}'" + print(err_msg) + raise ValueError(err_msg) + + with open(yaml_file, 'r') as f: + data = yaml.safe_load(f) + + data = convert_keys_to_strings_and_lower(data) + + tag_tests_dict = {} + + if not test_categories_str: + raise ValueError("test_category must be specified!") + + category_list = [] + if test_categories_str: + category_list = [cat.strip().lower() for cat in test_categories_str.split(',') if cat.strip()] + + # 2. If we have categories, add all_topo/ if it exists + for category in category_list: + if category not in data: + logging.error(f"Could not find category '{category}' in yaml file '{yaml_file}'! Skipping...") + continue + + if 'all_topo' in data[category]: + if 'all_pids' in data[category]['all_topo']: + if hw_or_sim in data[category]['all_topo']['all_pids']: + tag_tests_dict.setdefault(category, []).append(data[category]['all_topo']['all_pids'][hw_or_sim]) + + if device_type is not None and device_type in data[category]['all_topo']: + if hw_or_sim in data[category]['all_topo'][device_type]: + tag_tests_dict.setdefault(category, []).append(data[category]['all_topo'][device_type][hw_or_sim]) + + if topology and topology in data[category]: + if 'all_pids' in data[category][topology]: + if hw_or_sim in data[category][topology]['all_pids']: + tag_tests_dict.setdefault(category, []).append(data[category][topology]['all_pids'][hw_or_sim]) + for pid_list in data[category][topology].keys(): + if isinstance(pid_list, str): + # Split the string by commas and strip whitespace + pids_list = [item.strip() for item in pid_list.split(",")] + if device_type is not None and device_type in pids_list: + if hw_or_sim in data[category][topology][pid_list]: + tag_tests_dict.setdefault(category, []).append(data[category][topology][pid_list][hw_or_sim]) + + return tag_tests_dict + +def get_testcases(script_file, test_tag, topo_type, additional_tests='', device_type=None, hw_or_sim='sim'): + #adding all testcases from all files into one list, ordered + tcs_dict = {} + tcs = [] + tc_list = [] + + if script_file.endswith(('.yaml', '.yml')): + tcs = get_testcases_yaml(script_file, test_tag, topo_type, device_type, hw_or_sim) + + elif script_file.endswith(('.txt')): + for filename in script_file.split(","): + tcs_file = open(filename, 'r') + for tc in tcs_file.readlines(): + if tc not in tcs_dict: + tcs.append(tc) + tcs_dict[tc] = "" + tcs_file.close() + + if additional_tests: + for tc in additional_tests.split(","): + if tc not in tcs_dict: + tcs.append(tc) + tcs_dict[tc] = "" + + + log.info(f"script files are '{script_file}', additional testscases are: '{additional_tests}'") + log.info("Testcases are:") + if script_file.endswith(('.yaml', '.yml')): + for tc in tcs: + log.info(tc) + else: + log.info("".join(tcs)) + return tcs +def get_techsupport(dut_address, tc_name, dut_name, log_dir): + ssh_port = 22 + dut_uname = 'admin' + dut_passwd = 'password' + ts_dir='/var/dump' + + try: + # Establish SSH connection + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(dut_address, port=ssh_port, username=dut_uname, password=dut_passwd) + + # Open an SFTP session + sftp = ssh.open_sftp() + + # List all files in the remote directory + files = sftp.listdir_attr(ts_dir) + + if not files: + log.warning("No files found in the directory.") + return None + + # Find the latest file by modification time + latest_file = max(files, key=lambda x: x.st_mtime) + latest_file_path = os.path.join(ts_dir, latest_file.filename) + log.info(latest_file_path) + sftp.get(latest_file_path, f'{log_dir}/{dut_name}_{tc_name}_{latest_file.filename}') + + # Close the SFTP session and SSH connection + sftp.close() + ssh.close() + + return latest_file_path + + except Exception as e: + log.error(f"An error occurred: {e}") + return None + +def process_conditions_files(mark_conditions_files): + mark_conditions_file_opt = "" + for file in mark_conditions_files.split(","): + mark_conditions_file_opt+=f' -e "--mark-conditions-files {file}" ' + + return mark_conditions_file_opt + +def parse_log_file_for_results(log_file_name): + total = subprocess.check_output(f"egrep '^FAILED|^PASSED|^SKIPPED|^ERROR' {log_file_name} | sed 's/INFO:SectionStartLogger:====================/ /g' | sed 's/ teardown ====================/ /g' | wc -l", shell=True).strip() + passed = subprocess.check_output(f"egrep '^FAILED|^PASSED|^SKIPPED|^ERROR' {log_file_name} | sed 's/INFO:SectionStartLogger:====================/ /g' | sed 's/ teardown ====================/ /g' | grep -i passed | wc -l", shell=True).strip() + failed = subprocess.check_output(f"egrep '^FAILED|^PASSED|^SKIPPED|^ERROR' {log_file_name} | sed 's/INFO:SectionStartLogger:====================/ /g' | sed 's/ teardown ====================/ /g' | grep -i failed | wc -l", shell=True).strip() + skipped = subprocess.check_output(f"egrep '^FAILED|^PASSED|^SKIPPED|^ERROR' {log_file_name} | sed 's/INFO:SectionStartLogger:====================/ /g' | sed 's/ teardown ====================/ /g' | grep -i skipped | wc -l", shell=True).strip() + errored = subprocess.check_output(f"egrep '^FAILED|^PASSED|^SKIPPED|^ERROR' {log_file_name} | sed 's/INFO:SectionStartLogger:====================/ /g' | sed 's/ teardown ====================/ /g' | grep -i error | wc -l", shell=True).strip() + + return int(total), int(passed), int(failed), int(skipped), int(errored) + +def run_scripts( + script_file, + drop_version, + log_dir, + dut_name, + topo_type, + testcase_topo_type, + topo_name, + tstamp, + build_id, + create_allure_report, + additional_tests='', + run_options='', + dut_data_file=None, + mark_conditions_files='', + test_tag=None, + device_type=None + ): + log.info("running run_scripts") + log.info(f""" + params: + script_file: {script_file} + drop_version: {drop_version} + log_dir: {log_dir} + dut_name: {dut_name} + topo_type: {topo_type} + testcase_topo_type: {testcase_topo_type} + topo_name: {topo_name} + tstamp: {tstamp} + build_id: {build_id} + create_allure_report: {create_allure_report} + additional_tests: {additional_tests} + run_options: {run_options} + dut_data_file: {dut_data_file} + mark_conditions_files: {mark_conditions_files} + test_tag: {test_tag} + device_type: {device_type} + """) + + if drop_version is not None: + filename = f"ongoing_result_{drop_version}_{tstamp}.csv" + else: + filename = f'ongoing_result_{tstamp}.csv' + + if log_dir is not None: + log_dir = f"/data/tests/{log_dir}" + else: + log_dir = '/data/tests/run_logs' + + if build_id is None: + build_id = 99999 + + log.info(f"BUILD ID IS {build_id}") + + mark_conditions_file_opt=process_conditions_files(mark_conditions_files) + current_result_file = open(filename, 'w') + report_file = open('full_report.txt', 'w') + selection_topo_type = (testcase_topo_type or topo_type) + selection_topo_type = selection_topo_type.strip().lower() if selection_topo_type else selection_topo_type + normalized_device_type = device_type.strip().lower() if device_type else device_type + test_cases_list = get_testcases(script_file, test_tag, selection_topo_type, additional_tests, normalized_device_type) + total_passed = 0 + total_failed = 0 + total_skipped = 0 + total_error = 0 + final_total = 0 + ssh_port = 22 + dut_uname = 'admin' + dut_passwd = 'password' + + delta1 = datetime.datetime.now() + + + # First run bgp_facts.py to ensure DUT is up and BGP is established + # This will be somewhat of a pre-check before running rest of the tests + passed = 0 + iteration = 0 + max_iterations = 3 + + tc_name = "bgp_fact" + log.info("-------------- START: Running bgp_facts.py to check DUT Health -------------") + while iteration < max_iterations and int(passed) == 0: + iteration += 1 + msg = f"Iteration {iteration}: Reunning bgp_facts.py, making sure that DUT is up\n" + log.info(msg) + current_result_file.write(msg) + current_result_file.flush() + time.sleep(60) + cmd = f"./run_tests.sh -n {topo_name} {run_options} -O -u -e --recover_method=config_reload -e --alluredir={ALLURE_DIR} -e -rapP -m individual -p {log_dir} -c bgp/test_bgp_fact.py |& tee bgp_fact.log" + os.system(f"bash -c '{cmd}'") + total, passed, failed, skipped, errored = parse_log_file_for_results("bgp_fact.log") + + time.sleep(10) + final_total += int(total) + total_passed += int(passed) + total_failed += int(failed) + total_skipped += int(skipped) + total_error += int(errored) + + log.info(f"{tc_name} : {total} : {passed} : {failed} : {skipped} : {errored}") + + if not int(passed): + msg = "Tried 3 times and BGP Fact testcase is still failing. No point continuing with the tests. Check BGP neighbors on DUT. Exiting now" + current_result_file.write(msg+"\n") + current_result_file.flush() + report_file.write(msg+"\n") + report_file.flush() + # Use previous test results to generate Allure report + if create_allure_report: + generate_allure_report(build_id, current_result_file) + sys.exit(msg) + + log.info("-------------- END: Running bgp_facts.py to check DUT Health -------------") + + + # Proceeding with rest of the tests + current_result_file.write(f" -------------- Running Sanity File(s) {script_file}, additional tests: {additional_tests} ------------- \n") + current_result_file.flush() + def get_dut_names(data): + return [key for key in data if key.startswith('sonic_dut')] + + with open(dut_data_file) as f: + dut_data = yaml.load(f, Loader=yaml.FullLoader) + + for tc in test_cases_list: + if '#' in tc: + continue + tc = tc.strip() + tc_name = tc.split('/') + tc_name = tc_name[len(tc_name)-1].split('.')[0] + if drop_version is not None: + tc_name = tc_name + "_" + drop_version + + log.info(f"Executing: {tc}") + current_result_file.write(f"Executing: {tc}\n");current_result_file.flush() + + cmd = f"./run_tests.sh -n {topo_name} {run_options} -e --alluredir={ALLURE_DIR} -e -rapP -O -u -e --recover_method=config_reload -m individual -p {log_dir} {mark_conditions_file_opt} -c {tc} |& tee {tc_name}.log" + os.system(f"bash -c '{cmd}'") + total, passed, failed, skipped, errored = parse_log_file_for_results(f"{tc_name}.log") + + if int(failed) or int(errored): + for dname in get_dut_names(dut_data): + device = dut_data[dname] + cmd_list = list() + cmd_list.append("show techsupport") + run_exec_cmds(device['xr_mgmt_ip'], ssh_port, dut_uname, dut_passwd, cmd_list) + get_techsupport(device['xr_mgmt_ip'], tc_name, dut_name, log_dir) + + if create_allure_report: + generate_allure_report(build_id, current_result_file) + + current_result_file.close() + report_file.close() + + delta2 = datetime.datetime.now() + log.info(f"End time: {delta2}") + time_delta = (delta2 - delta1) + log.info(f"Time delta: {time_delta}") + total_seconds = time_delta.total_seconds() + minutes = total_seconds/60 + log.info(f"Total time : {minutes} mins") + +def parse_results(): + total_passed = 0 + total_failed = 0 + total_skipped = 0 + total_error = 0 + final_total = 0 + + log_list = list() + for filename in os.listdir('/data/tests'): + if filename.endswith(".log") or filename.endswith(".txt"): + log_list.append(filename) + else: + continue + + result_file = open('final_result.csv', 'w') + if len(log_list) > 0: + for log_file in log_list: + os.system(f"egrep '^FAILED|^PASSED|^SKIPPED|^ERROR' {log_file} | sed 's/INFO:SectionStartLogger:====================/ /g' | sed 's/ teardown ====================/ /g' >> all_result.txt") + + total, passed, failed, skipped, errored = parse_log_file_for_results(log_file) + final_total += int(total) + total_passed += int(passed) + total_failed += int(failed) + total_skipped += int(skipped) + total_error += int(errored) + log.info(f"{log_file} : {total} : {passed} : {failed} : {skipped} : {errored}") + + result_file.write(f"{log_file}, {total} Total , {passed} Pass, {failed} Failed, {skipped} Skipped, {errored} Error\n") + + result_file.write(f"Total , {final_total} Total, {total_passed} Passed, {total_failed} Failed, {total_skipped} Skip, {total_error} Error\n") + result_file.close() + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + script_file = args['script_file'] + drop_version = args['drop_version'] + log_dir = args['log_dir'] + only_parse = args['only_parse'] + device_type = args['device_type'] + topo_type = args['topo_type'] + testcase_topo_type = args['testcase_topo_type'] + tstamp = args['tstamp'] + dut_name = args['dut_name'] + topo_name = args['topo_name'] + build_id = args['build_id'] + create_allure_report = args['create_allure_report'] + additional_tests = args['additional_tests'] + skip_sanity = args['skip_sanity'] + dut_data_file = args['dut_data_file'] + mark_conditions_files = args['mark_conditions_files'] + test_tag = args['test_tag'] + + if not dut_name and device_type not in DEVICE_TYPE_TO_DUT_NAME_MAP: + print(f"ERROR: dut_name not specified and could not determine from device_type '{device_type}'.") + sys.exit(1) + + dut_name = DEVICE_TYPE_TO_DUT_NAME_MAP[device_type] + + run_options = '' + if dut_name != 'sfd' and dut_name != 'aaa14-t2': + run_options += f'-d {dut_name} ' + + if dut_name == 'aaa14-t2': + run_options += f'-t t2,any' + + if skip_sanity: + run_options += '-e --skip_sanity ' + + if tstamp is None: + tstamp = datetime.datetime.now().strftime("%d-%b-%Y-%H:%M:%S.%f") + + if only_parse: + parse_results() + sys.exit(0) + + run_scripts( + script_file, + drop_version, + log_dir, + dut_name, + topo_type, + testcase_topo_type, + topo_name, + tstamp, + build_id, + create_allure_report, + additional_tests=additional_tests, + run_options=run_options, + dut_data_file=dut_data_file, + mark_conditions_files=mark_conditions_files, + test_tag=test_tag, + device_type=device_type + ) + +if __name__ == '__main__': + main() diff --git a/infra/run_scripts_remote.py b/infra/run_scripts_remote.py new file mode 100755 index 00000000000..0994d812dc4 --- /dev/null +++ b/infra/run_scripts_remote.py @@ -0,0 +1,833 @@ +import datetime +import paramiko +import time +import os +import re +import argparse +import sys +import json +import yaml +import subprocess +import shutil +from enum import Enum +from run_scripts import get_testcases + +# Path to config file +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +ALLURE_REPORT_URL_FILE = allure_config['allure']['report-url-file-path'] +CICD_LOG_DIR = "/auto/mb/sonic/workspace/sonic-cicd/sanity_logs" +CICD_LOG_URL = "https://allure.cisco.com/auto/mb/sonic/workspace/sonic-cicd/sanity_logs" + +SUCCESS_STATUS = "success" +FAILURE_STATUS = "failure" + +from utils import upload_log_files_to_log_server + +class FAILURE_RESONS(str, Enum): + SIM_BAD_STATE = "sim_bad_state" + TEST_CASES_FAILED = "test_cases_failed" + NO_REPORT_FILE = "no_report_file" + CREATE_REPORT_FAIL = "create_report_fail" + RUN_SCRIPTS_EXCEPTION = "run_scripts_exception" + LOG_FILES_GET_FAIL = "log_files_get_fail" + SIM_BRINGUP_FAIL = "sim_bringup_fail" + + def __str__(self): + return self.value + +# VXR sim failed +def handle_sim_failure(error_msg): + SUMMARY_REPORT_FILENAME = "results.json" + COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" + + SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) + COMMON_REPORT_PATH = "../../{}".format(COMMON_REPORT_FILENAME) + + # Include sim_status field to indicate failure + sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "status": FAILURE_STATUS, "failure_reason": error_msg} + + for file_path in [SUMMARY_REPORT_PATH, COMMON_REPORT_PATH]: + with open(file_path, "w") as output_file: + json.dump(sum, output_file) + +def upload_sanity_file(host, username, password, script_file, sonic_test_dir, ssh_port=22): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + print("connect", (host, ssh_port, username, password)) + ssh.connect(host, ssh_port, username, password) + print("connected") + ftp_client=ssh.open_sftp() + uploaded_script_files = [] + for script_file_path in script_file.split(","): + script_filename = script_file_path.rsplit('/', 1)[-1] + print(f"script_file_path: {script_file_path}, destination: {sonic_test_dir}/sonic-test/sonic-mgmt/tests/{script_filename}") + ftp_client.put(script_file_path,f"{sonic_test_dir}/sonic-test/sonic-mgmt/tests/{script_filename}") + uploaded_script_files.append(script_filename) + ftp_client.close() + + return uploaded_script_files + +def upload_dut_data_file(host, username, password, dut_data_file, sonic_test_dir, ssh_port=22): + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + print("connect", (host, ssh_port, username, password)) + ssh.connect(host, ssh_port, username, password) + print("connected") + ftp_client=ssh.open_sftp() + + print(f"dut_data_file: {dut_data_file}, destination: {sonic_test_dir}/sonic-test/sonic-mgmt/tests/{dut_data_file}") + ftp_client.put(dut_data_file,f"{sonic_test_dir}/sonic-test/sonic-mgmt/tests/{dut_data_file}") + ftp_client.close() + +def get_build_project_name(): + if os.getenv("MODE"): + sanity_mode = os.getenv("MODE").replace("_", "") + elif os.getenv("SANITY_MODE"): + sanity_mode = os.getenv("SANITY_MODE").replace("_", "") + else: + sanity_mode = "sonic-mgmt" + + if os.getenv("JOB_BASE_NAME"): + job_base_name = os.getenv("JOB_BASE_NAME").replace("_", "") + else: + job_base_name = "manual-sanity" + + if os.getenv("TIMESTAMP"): + timestamp = re.sub(r'[^a-zA-Z0-9]', '', os.getenv("TIMESTAMP")) + else: + timestamp = datetime.datetime.now().strftime("%d%b%Y%H%M%S") + + if os.getenv("BUILD_ID"): + build_id = os.getenv("BUILD_ID") + else: + build_id = 99999 + + if os.getenv("PLATFORM"): + platform = os.getenv("PLATFORM").replace("_", "") + else: + platform = "unknownPlatform" + + if os.getenv("TOPOLOGY"): + topology = os.getenv("TOPOLOGY").replace("_", "") + else: + topology = "unknownTopology" + + + build_project_name = "sonic-{}-{}-{}-{}-{}-{}".format(job_base_name, build_id, sanity_mode, platform, topology, timestamp) + + build_project_name = build_project_name.lower() + + return build_project_name + +def trigger_run_scripts(host, username, password, script_file,drop_version,log_dir,device_type,topo_type,create_allure_report, additional_tests='', ssh_port=22, + topo_name='docker-ptf', docker_mgmt_container='docker-sonic-mgmt', skip_sanity=False, dut_data_file=None, apply_sim_patches=False, test_tag=None, + testcase_topo_type=None): + print("starting run_scripts, params: ", host, username, password, script_file,drop_version,log_dir,device_type,create_allure_report, + ssh_port, topo_name, docker_mgmt_container, skip_sanity, dut_data_file) + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + print("connected to host {}".format(host)) + chan = ssh.invoke_shell() + resp = '' + while ':~$' not in resp: + resp = chan.recv(9999).decode("ascii") + print(resp) + time.sleep(3) + + print("Going into container '{}' to run tests".format(docker_mgmt_container)) + chan.send('docker exec -it {} /bin/bash \n'.format(docker_mgmt_container)) + resp = '' + while ':~$' not in resp: + resp = chan.recv(9999).decode("ascii") + print(resp) + time.sleep(3) + + chan.send('unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + + reports_dir = allure_config['allure']['local-report-dir'] + chan.send(f'rm -f {reports_dir}/* \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + + chan.send('cd /data/tests \n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + + build_project_name = get_build_project_name() + + print("calling run_scripts.py, the allure report build name is ", build_project_name) + + tstamp = datetime.datetime.now().strftime("%d-%b-%Y-%H:%M:%S.%f") + result_file = "ongoing_result_{}_{}.csv".format(drop_version,tstamp) + chan.send('rm run_script.log \n') + time.sleep(3) + chan.send('rm {} \n'.format(result_file)) + time.sleep(3) + chan.send('rm -rf DT\n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + + delta1 = datetime.datetime.now() + + additional_params = "" + + if create_allure_report: + additional_params += " --create_allure_report " + if additional_tests: + additional_params += " --additional_tests={} ".format(additional_tests) + if skip_sanity: + additional_params += " -k " + if testcase_topo_type: + additional_params += f" --testcase_topo_type={testcase_topo_type} " + + ## apply patches specefic to sim + if apply_sim_patches: + print("applying sim patches by running python add_sim_hooks.py \n") + chan.send('python add_sim_hooks.py \n') + time.sleep(60) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + # Load both files: main sonic-mgmt skips (~780 entries) plus sim-specific skips. + # Passing only cisco_sim.yaml replaces the run_scripts.py default and drops most skips. + additional_params += " --mark-conditions-files common/plugins/conditional_mark/tests_mark_conditions.yaml,common/plugins/conditional_mark/tests_mark_conditions_cisco_sim.yaml" + + print("Run command:") + print('./run_scripts.py -s {} -v {} -l {} -d {} -tt {} -t {} -g {} -b {} -dd {} -y \'{}\' {} |& tee run_script.log &\n'.format(script_file,drop_version,log_dir,device_type,topo_type,tstamp,topo_name,build_project_name,dut_data_file,test_tag,additional_params)) + + chan.send('./run_scripts.py -s {} -v {} -l {} -d {} -tt {} -t {} -g {} -b {} -dd \'{}\' -y \'{}\' {} |& tee run_script.log &\n'.format(script_file,drop_version,log_dir,device_type,topo_type,tstamp,topo_name,build_project_name,dut_data_file,test_tag,additional_params)) + + time.sleep(3) + resp = chan.recv(9999) + + chan.send('exit\n') + time.sleep(10) + + chan.send('docker exec -it {} /bin/bash \n'.format(docker_mgmt_container)) + resp = '' + while ':~$' not in resp: + resp = chan.recv(9999).decode("ascii") + print(resp) + time.sleep(3) + + later = datetime.datetime.now() + datetime.timedelta(hours=48) + while True: + chan.send('ps -ef | grep run_scripts.py\n') + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + sys.stdout.flush() + + if script_file in resp.decode("utf-8", errors="replace"): + time.sleep(150) + chan.send('cat /data/tests/{} \n'.format(result_file)) + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + if datetime.datetime.now() < later: + time.sleep(150) + else: + print("Looks like test is taking longer than 48 hours. Check list of sanity scripts or increase time to wait") + break + else: + break + + chan.send('cat /data/tests/{} \n'.format(result_file)) + time.sleep(3) + resp = chan.recv(9999) + print(resp.decode("utf-8", errors="replace")) + if "BGP Fact testcase is still failing" in resp.decode("utf-8", errors="replace"): + status = FAILURE_STATUS + failure_reason = FAILURE_RESONS.SIM_BAD_STATE + else: + status = SUCCESS_STATUS + failure_reason = None + + if create_allure_report: + copy_allure_report_tar_to_remote_and_generate_url(host=host, username=username, password=password, build_project_name=build_project_name, docker_mgmt_container=docker_mgmt_container, ssh_port=ssh_port) + + ssh.close() + delta2 = datetime.datetime.now() + time_delta = (delta2 - delta1) + total_seconds = time_delta.total_seconds() + minutes = total_seconds/60 + + print("Total run time for sanity suite: {} mins".format(minutes)) + return status, failure_reason + +def create_report_html(host, username, password, log_dir, sonic_test_dir, ssh_port=22): + print("Creating report html on remote host {}. SSH port {}, username/password: {}/{}".format(host, ssh_port, username, password)) + print("running command: ") + print('python3 {}/sonic-test/sonic-mgmt/test_reporting/junit_xml_parser.py -o {}/sonic-test/sonic-mgmt/tests/results.json \ + --directory {}/sonic-test/sonic-mgmt/tests/{} > {}/sonic-test/sonic-mgmt/tests/report.txt \n'.format(sonic_test_dir, sonic_test_dir, sonic_test_dir, log_dir, sonic_test_dir)) + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + + chan = ssh.invoke_shell() + resp = '' + while ':~$' not in resp: + resp = chan.recv(9999).decode("ascii") + print(resp) + time.sleep(3) + commands = [] + + commands.append('python3 {}/sonic-test/sonic-mgmt/test_reporting/junit_xml_parser.py -o {}/sonic-test/sonic-mgmt/tests/results.json \ + --directory {}/sonic-test/sonic-mgmt/tests/{} > {}/sonic-test/sonic-mgmt/tests/report.txt \n'.format(sonic_test_dir, sonic_test_dir, sonic_test_dir, log_dir, sonic_test_dir)) + commands.append('junit2html {}/sonic-test/sonic-mgmt/tests/{} --merge {}/sonic-test/sonic-mgmt/tests/{}/test-results.xml\n'.format(sonic_test_dir, log_dir, sonic_test_dir, log_dir)) + commands.append('junit2html {}/sonic-test/sonic-mgmt/tests/{}/test-results.xml --report-matrix {}/sonic-test/sonic-mgmt/tests/report.html\n'.format(sonic_test_dir, log_dir, sonic_test_dir)) + commands.append('junit2html {}/sonic-test/sonic-mgmt/tests/{}/test-results.xml --summary-matrix\n'.format(sonic_test_dir, log_dir)) + i = 0 + while True: + if len(commands) == i: + break + + chan.send(commands[i]) + print(f"Running command '{commands[i]}'") + resp = '' + while ':~$' not in resp: + resp = chan.recv(9999).decode("ascii") + print(resp) + time.sleep(3) + if chan.recv_ready(): + print(chan.recv(9999).decode("ascii")) + i += 1 + + ssh.close() + + +def parse_report(host, username, password, sonic_test_dir, ssh_port=22): + print("Parsing report") + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + ftp_client=ssh.open_sftp() + ftp_client.get('{}/sonic-test/sonic-mgmt/tests/report.txt'.format(sonic_test_dir),'report.txt') + ftp_client.close() + ssh.close() + + read_report = open('report.txt', 'r') + report_file = open('full_report.txt', 'w') + out = read_report.read().splitlines() + total, passed, fail, skip, error, xfail = 0, 0, 0, 0, 0, 0 + for line in out: + print(line) + if 'total' not in line.lower(): + continue + report_file.write(line + "\n") + report_file.flush() + tc = line.split(',') + if 'total' not in tc[1].lower(): + continue + total += int(tc[1].strip(' ').split(' ')[0]) + passed += int(tc[2].strip(' ').split(' ')[0]) + fail += int(tc[3].strip(' ').split(' ')[0]) + skip += int(tc[4].strip(' ').split(' ')[0]) + error += int(tc[5].strip(' ').split(' ')[0]) + xfail += int(tc[6].strip(' ').split(' ')[0]) + resp = "Total TCs: {}, {} Pass, {} Fail, {} Skipped, {} Error, {} xFail\n".format(total,passed,fail,skip,error,xfail) + report_file.write("=================================================================\n") + print("=================================================================\n") + print(resp) + report_file.write(resp + "\n") + report_file.flush() + report_file.close() + return resp + +def get_report_file(host, username, password, sonic_test_dir, ssh_port=22): + print("Getting report file") + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + ftp_client=ssh.open_sftp() + #ftp_client.get('{}/sonic-test/sonic-mgmt/tests/full_report.txt','full_report.txt') + ftp_client.get('{}/sonic-test/sonic-mgmt/tests/test-results.xml.html'.format(sonic_test_dir),'test-results.xml.html') + ftp_client.get('{}/sonic-test/sonic-mgmt/tests/report.html'.format(sonic_test_dir),'report.html') + ftp_client.close() + +def copy_allure_report_tar_to_remote_and_generate_url(host, username, password, build_project_name, docker_mgmt_container, ssh_port=22): + print("Getting allure report tar file") + + report_folder_name = "allure-report-{}".format(build_project_name) + report_dir_path = "/tmp/{}".format(report_folder_name) + report_tar_path = "{}.tar.gz".format(report_dir_path) + + remote_path = allure_config['allure']['remote-report-dir'] + remote_path = remote_path if remote_path.endswith('/') else remote_path + '/' + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + ftp_client=ssh.open_sftp() + + # copy allure report tar file to the VM + print("Copying allure report tar file from container {}:{} to the VM:{}".format(docker_mgmt_container, report_tar_path, report_tar_path)) + cmd = 'docker cp {}:{} {}\n'.format(docker_mgmt_container, report_tar_path, report_tar_path) + + _, stdout, stderr = ssh.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + print("Error! Could not copy allure report from {}:{} to {}: {}".format(docker_mgmt_container, report_tar_path, report_tar_path, stderr.read().decode("ascii"))) + ssh.close() + ftp_client.close() + return + + sys.stdout.flush() + + # get allure report tar file from the VM + print("Getting allure report tar file from the VM:{} to local".format(report_tar_path)) + try: + ftp_client.get(report_tar_path, report_tar_path) + except Exception as e: + print("Error! Could not get allure report tar file!") + ftp_client.close() + + # extract allure report tar file + print("Extracting allure report tar file") + result = subprocess.run(["tar", "-xvzf", report_tar_path, "-C", "/tmp/"]) + if result.returncode != 0: + print("Error! Could not extract allure report tar file! {} {}".format(result.stderr, result.stdout)) + return + + # copy allure report to remote + print("Copying allure report to remote path: {}".format(remote_path)) + result = subprocess.run(["cp", "-R", report_dir_path, "{}/".format(remote_path)]) + if result.returncode != 0: + print("Error! Could not copy allure report to remote! {} {}".format(result.stderr, result.stdout)) + return + + # clean-up allure report tar file and folder + print("Removing allure report tar file and folder from local") + result = subprocess.run(["rm", "-rf", report_tar_path]) + if result.returncode != 0: + print("Error! Could not remove allure report tar file! {} {}".format(result.stderr, result.stdout)) + + result = subprocess.run(["rm", "-rf", report_dir_path]) + if result.returncode != 0: + print("Error! Could not remove allure report folder! {} {}".format(result.stderr, result.stdout)) + + # create report URL and write to file + report_url = "{}/{}/{}".format(allure_config['allure']['server-base-url'], allure_config['allure']['remote-report-dir'], report_folder_name) + with open(ALLURE_REPORT_URL_FILE, 'w') as f: + f.write(report_url) + + print("Allure report copied to remote successfully and generated URL: {}".format(report_url)) + + +def get_sanity_logs(host, username, password, log_dir, sonic_test_dir, ssh_port=22): + print("Get sanity log files") + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + + tar_commands = [ + f"cd {sonic_test_dir}/sonic-test/sonic-mgmt/tests", + f"mkdir sanity_logs; cp -r *.log logs/ {log_dir} sanity_logs", + "tar -cvf sanity_logs.tar sanity_logs", + "gzip -f sanity_logs.tar" + ] + + print(f"Running remote command: {tar_commands}") + stdin, stdout, stderr = ssh.exec_command(';'.join(tar_commands)) + exit_status = stdout.channel.recv_exit_status() + if exit_status != 0: + error_output = stderr.read().decode() + print(f"Error creating sanity logs tarball: {error_output}") + ssh.close() + return + + ftp_client=ssh.open_sftp() + ftp_client.get('{}/sonic-test/sonic-mgmt/tests/sanity_logs.tar.gz'.format(sonic_test_dir),'sanity_logs.tar.gz') + ftp_client.close() + ssh.close() + + # extract syslogs tarball + print(f"Extracting sanity_logs.tar.gz") + result = subprocess.run(["tar", "-xvzf", "sanity_logs.tar.gz"]) + if result.returncode != 0: + print(f"Error! Could not extract sanity_logs.tar.gz! stderr: {result.stderr}, stdout: {result.stdout}") + +def get_syslogs(dut_data_file): + dut_uname = 'admin' + dut_passwd = 'password' + + with open(dut_data_file) as f: + dut_data = yaml.load(f, Loader=yaml.FullLoader) + + #get syslog for each DUT + for dut_name, dut_config in dut_data.items(): + #only consider DUTs + if not dut_name.startswith('sonic_dut'): + continue + + dut_address = dut_config['HostAgent'] + ssh_port = dut_config['xr_redir22'] + + # Initialize SSH client + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(dut_address, port=ssh_port, username=dut_uname, password=dut_passwd) + + # Create the tar.gz archive on the remote machine. + # The command changes directory to remote_dir and archives its contents. + remote_tar_path = f"/tmp/syslogs_{dut_name}.tar.gz" + local_tar_path = os.path.basename(remote_tar_path) + tar_commands = [ + f"mkdir -p /tmp/syslogs/{dut_name}", + f"sudo cp /var/log/syslog* /tmp/syslogs/{dut_name}", + f"sudo chmod 666 /tmp/syslogs/{dut_name}/syslog*", + f"tar -czvf {remote_tar_path} -C /tmp syslogs", + "rm -rf /tmp/syslogs" + ] + print(f"Running remote command: {tar_commands}") + stdin, stdout, stderr = ssh.exec_command(';'.join(tar_commands)) + exit_status = stdout.channel.recv_exit_status() + if exit_status != 0: + error_output = stderr.read().decode() + print(f"Error creating tar archive on remote host: {error_output}") + ssh.close() + return + + # Open an SFTP session and download the tar file. + sftp = ssh.open_sftp() + print(f"Downloading remote archive from {remote_tar_path} to {local_tar_path}") + sftp.get(remote_tar_path, local_tar_path) + + # Optionally, remove the remote tar.gz file + print(f"Removing remote archive {remote_tar_path}") + sftp.remove(remote_tar_path) + sftp.close() + ssh.close() + print("Download complete.") + + # extract syslogs tarball + print(f"Extracting tarball {local_tar_path}") + result = subprocess.run(["tar", "-xvzf", local_tar_path]) + if result.returncode != 0: + print(f"Error! Could not extract {local_tar_path}! stderr: {result.stderr}, stdout: {result.stdout}") + return + + # re-packaging syslogs directory into a tarball + print(f"Re-packaging directory syslogs into tarball") + result = subprocess.run(["tar", "-czvf", "syslogs.tar.gz", "syslogs"]) + if result.returncode != 0: + print(f"Error! encountered error while creating tarball! stderr: {result.stderr}, stdout: {result.stdout}") + return + +def generate_results_json(run_result, failure_reason): + # Path to config file + ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" + allure_config = {} + with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + + SUMMARY_REPORT_FILENAME = "results.json" + + SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) + ALLURE_REPORT_URL_FILE = allure_config['allure']['report-url-file-path'] + + sum = { + "total": 0, + "failed": 0, + "passed": 0, + "skipped": 0, + "success_rate": 0.0, + "status" : run_result, + "failure_reason": failure_reason + } + + sum_f = open(SUMMARY_REPORT_PATH, "w") + resultpattern = r'' + numberpattern = r'(\d+)' + + try: + report = open("./report.html", "r") + resultclass = "" + lines = report.readlines() + for line in lines: + result = re.findall(resultpattern, line) + if result: + print(result[0]) + resultclass = result[0] + n = re.findall(numberpattern, line) + if n: + print(n[0]) + sum[resultclass] = int(n[0]) + sum["total"] += int(n[0]) + if sum["total"] > 0: + sum["success_rate"] = round(sum["passed"] / (sum["total"] - sum["skipped"]) * 100, 2) + if sum["success_rate"] != 100: + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = sum["failure_reason"] or FAILURE_RESONS.TEST_CASES_FAILED + except: + print("error: report.html file does not exist!") + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = sum["failure_reason"] or FAILURE_RESONS.NO_REPORT_FILE + + try: + with open(ALLURE_REPORT_URL_FILE, 'r') as f: + allure_url = f.readline() + print(f"found allure report url: {allure_url}") + sum["report_link"] = allure_url + except FileNotFoundError as e: + print(f"Error! could not find file {ALLURE_REPORT_URL_FILE}, containing allure report: {e}") + + # List of files to copy into the build directory + files_to_copy = ["report.html", "test-results.xml.html", "sanity_logs.tar.gz", "sanity_logs", "syslogs", "syslogs.tar.gz"] + log_url = upload_log_files_to_log_server(files_to_copy) + + sum["log_tarball_link"] = log_url + + print(f"Result summary: {sum}") + + json.dump(sum, sum_f) + sum_f.close() + + return sum + +def run_scripts_remote(host, username, password, script_file,drop_version,log_dir,device_type,topo_type,create_allure_report, ssh_port=22, topo_name='docker-ptf', additional_tests='', + sonic_test_dir='golden-code', docker_mgmt_container='docker-sonic-mgmt', skip_sanity=False, dut_data_file=None, add_sim_patches=False, test_tag=None): + sanity_start_time = datetime.datetime.now() + + print('run_scripts_remote, params:') + print(f""" +host={host}, +username={username}, +password={password}, +script_file={script_file}, +drop_version={drop_version}, +log_dir={log_dir}, +device_type={device_type}, +topo_type={topo_type}, +create_allure_report={create_allure_report}, +ssh_port={ssh_port}, +topo_name={topo_name}, +additional_tests={additional_tests}, +sonic_test_dir={sonic_test_dir}, +docker_mgmt_container={docker_mgmt_container}, +skip_sanity={skip_sanity}, +dut_data_file={dut_data_file}, +add_sim_patches={add_sim_patches}, +test_tag={test_tag}, + """) + + testcase_topo_type = None + normalized_topo_type = topo_type.strip().lower() if topo_type else topo_type + normalized_device_type = device_type.strip().lower() if device_type else device_type + get_testcases(script_file, test_tag, normalized_topo_type, additional_tests, normalized_device_type) + + if topo_type in ['t2-min-VG', 't2-min-VL', 't2-min-LL']: + # Keep execution topology as t2-min while allowing testcase selection from variant topology. + testcase_topo_type = normalized_topo_type + topo_type = 't2-min' + + if not os.path.exists(dut_data_file): + print(f"ERROR! dut data file '{dut_data_file}' does not exist! Exiting") + return -1 + + if not host or not ssh_port: + with open(dut_data_file) as f: + data = yaml.load(f, Loader=yaml.FullLoader) + host = data['sonic_mgmt']['HostAgent'] + ssh_port = data['sonic_mgmt']['xr_redir22'] + + run_result = None + failure_reason = None + + print("Running scripts remotely on host {}. SSH port {}, username/password: {}/{}".format(host, ssh_port, username, password)) + print("Device type: {}, topo_name: {}".format(device_type, topo_name)) + print("Script file: {}, drop version: {}, log_dir {}, sonic-test directory: {}, docker-mgmt container name: '{}', create-allure-report: {}".format(script_file, drop_version, log_dir, sonic_test_dir, docker_mgmt_container, create_allure_report)) + print("Upload Sanity Script file") + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host, ssh_port, username, password) + print("connected to host {}".format(host)) + + print("determine sonic_test_dir from docker_mgmt_container name") + cmd = f'docker inspect `docker ps -aqf name={docker_mgmt_container}` | grep sonic-test | head -1\n' + + stdin, stdout, stderr = ssh.exec_command(cmd) + stdout.channel.recv_exit_status() + out = stdout.read().decode("ascii").strip() + + print(f"resp for docker inspect is {out}") + sys.stdout.flush() + out = out.strip('"') + sonic_test_dir = out.split("/sonic-test")[0] + print("sonic-test dir is: ", sonic_test_dir) + + # #send additional test files to sim + # ftp_client=ssh.open_sftp() + # if additional_tests: + # for additional_test in additional_tests.split(","): + # additional_test = additional_test.strip() + # print(f"uploading additional testcase {additional_test} to sonic-mgmt from '../sonic-mgmt/tests/{additional_test}' to '{sonic_test_dir}/sonic-test/sonic-mgmt/tests/{additional_test}'") + + # chan = ssh.invoke_shell() + # chan.send(f"mkdir -p {sonic_test_dir}/sonic-test/sonic-mgmt/tests/{additional_test.rsplit('/',1)[0]} \n") + + # try: + # ftp_client.put(f"../sonic-mgmt/tests/{additional_test}",f"{sonic_test_dir}/sonic-test/sonic-mgmt/tests/{additional_test}") + # except Exception as e: + # print(f"caught error while uploading file {additional_test}! e: {e}") + # return 1 + + + uploaded_script_files = upload_sanity_file(host, username, password, script_file, sonic_test_dir, ssh_port) + uploaded_script_files_str = ",".join(uploaded_script_files) + upload_dut_data_file(host, username, password, dut_data_file, sonic_test_dir, ssh_port) + + print("Running Sanity Scripts : '{}', additional tests: '{}'".format(uploaded_script_files_str, additional_tests)) + try: + run_result, failure_reason = trigger_run_scripts( + host, + username, + password, + uploaded_script_files_str, + drop_version, + log_dir, + device_type, + topo_type, + create_allure_report, + additional_tests, + ssh_port, + topo_name, + docker_mgmt_container, + skip_sanity, + dut_data_file, + add_sim_patches, + test_tag, + testcase_topo_type + ) + except Exception as e: + print(f"Caught exception while running run_scripts.py! error: {e}") + run_result = FAILURE_STATUS + failure_reason = FAILURE_RESONS.RUN_SCRIPTS_EXCEPTION + + sanity_end_time = datetime.datetime.now() + + try: + create_report_html(host, username, password, log_dir, sonic_test_dir, ssh_port) + parse_report(host, username, password, sonic_test_dir, ssh_port) + get_report_file(host, username, password, sonic_test_dir, ssh_port) + except Exception as e: + print(f"Caught exception while creating report! error: {e}") + run_result = FAILURE_STATUS + failure_reason = failure_reason or FAILURE_RESONS.CREATE_REPORT_FAIL + + try: + get_sanity_logs(host, username, password, log_dir, sonic_test_dir, ssh_port) + get_syslogs(dut_data_file) + except Exception as e: + print(f"Caught exception while getting logs! error: {e}") + run_result = FAILURE_STATUS + failure_reason = failure_reason or FAILURE_RESONS.LOG_FILES_GET_FAIL + + results_summary = generate_results_json(run_result, failure_reason) + + sanity_time_delta = (sanity_end_time - sanity_start_time).total_seconds() + print("Time taken for the sanity tests to run : {} mins".format(sanity_time_delta/60)) + if results_summary["status"] != SUCCESS_STATUS: + print("Sanity run unsuccesful !!!, Check log files for more details") + return 1 + + return 0 + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-a', '--host_address', type=str, help='host address to ssh into', + required=False,default=None) + parser.add_argument('-r', '--ssh_port', type=str, help='port_used for ssh', + required=False,default=22) + parser.add_argument('-u', '--username', type=str, help='username used to ssh into machine running sonic-mgmt', + required=False,default="vxr") + parser.add_argument('-p', '--password', type=str, help='password used to ssh into mechine running sonic-mgmt', + required=False,default="cisco123") + parser.add_argument('-g', '--topo_name', type=str, help='Topo name specified to run tests', + required=False,default='docker-ptf') + parser.add_argument('-v', '--drop_version', type=str, help='specify drop version', + required=False,default='DT') + parser.add_argument('-l', '--log_dir', type=str, help='Log dir', + required=False,default='DT') + parser.add_argument('-s', '--script_file', type=str, help='Input test script file', + required=False,default='sanity-scripts/sanity_scripts.txt') + parser.add_argument('-d', '--device_type', type=str, help='options are sherman, mth32, crocodile, sfd', + required=True,default="mth64") + parser.add_argument('-tt', '--topo_type', type=str, help='topo type', + required=True,default='t1-64-lag') + parser.add_argument('-c', '--docker_mgmt_container', type=str, help='name of the docker management container', + required=False,default='docker-sonic-mgmt') + parser.add_argument('-t', '--sonic_test_dir', type=str, help='Directory of sonic-test on DUT', + required=False, default='golden-code') + parser.add_argument('--create_allure_report', action='store_true', help='When testing, specify if allure report to be created at the end of test', + default=False) + parser.add_argument('--additional_tests', type=str, help='Additional Testscases to test', + required=False, default='') + parser.add_argument('--add_sim_patches', action='store_true', help='Add patches to SIM to handle eth4 for route_check and shutdown', + default=False) + parser.add_argument('-k', '--skip_sanity', action='store_true', help='skip sanity check', + default=False) + parser.add_argument('-m', '--dut_data_file', type=str, help='path of file containing DUT access info', + required=False,default='vxr_ports.yaml') + parser.add_argument('-y', '--test_tag', type=str, help='tag to get tests to run from sanity file. Comma seperated \ + For e.g.fwd,plt', required=False,default=None) + return parser + + +if __name__ == '__main__': + parser = _create_parser() + + args = vars(parser.parse_args()) + host_address = args['host_address'] + ssh_port = args['ssh_port'] + username = args['username'] + password = args['password'] + topo_name = args['topo_name'] + drop_version = args['drop_version'] + log_dir = args['log_dir'] + script_file = args['script_file'] + device_type = args['device_type'] + topo_type = args['topo_type'] + docker_mgmt_container = args['docker_mgmt_container'] + sonic_test_dir = args['sonic_test_dir'] + create_allure_report = args['create_allure_report'] + additional_tests = args['additional_tests'] + skip_sanity = args['skip_sanity'] + dut_data_file = args['dut_data_file'] + add_sim_patches = args['add_sim_patches'] + test_tag = args['test_tag'] + + ret = run_scripts_remote( + host_address, + username, + password, + script_file, + drop_version, + log_dir, + device_type, + topo_type, + create_allure_report, + ssh_port, + topo_name, + additional_tests, + sonic_test_dir, + docker_mgmt_container, + skip_sanity, + dut_data_file, + add_sim_patches, + test_tag + ) + + sys.exit(ret) diff --git a/infra/run_spytest.py b/infra/run_spytest.py new file mode 100755 index 00000000000..5eb19aa14f2 --- /dev/null +++ b/infra/run_spytest.py @@ -0,0 +1,939 @@ +import argparse +import json +import logging +import os +import yaml +import telnetlib +import paramiko +import time +import datetime +import subprocess +import sys +import re +from run_scripts_remote import SUCCESS_STATUS, FAILURE_STATUS, FAILURE_RESONS +import pexpect +import csv + +VXR_PORTS_FILENAME = "vxr_ports.yaml" +DEFAULT_RESULT_FOLDER_PATH = "/home/vxr/sonic-test/sonic-mgmt/spytest/spytest_results" +RESULT_FOLDER_PATH = DEFAULT_RESULT_FOLDER_PATH +test_start_time = "" +HW_RUN_TIMESTAMP = "" + +SUMMARY_REPORT_FILENAME = "results.json" +NEW_SUMMARY_REPORT_FILENAME = "test_cases_info.json" +COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" +TOPO_PLATFORM_FILE_MAP = 'topo_and_platform_to_filename_map.json' +SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) +NEW_SUMMARY_REPORT_PATH = "../../{}".format(NEW_SUMMARY_REPORT_FILENAME) +COMMON_REPORT_PATH = "../../{}".format(COMMON_REPORT_FILENAME) + +pattern_mh = r'_mh' +pattern_dci = r'-dci' +is_mh = False +is_dci = False +for item in sys.argv: + if re.search(pattern_mh, item): + is_mh = True + if re.search(pattern_dci, item): + is_dci = True + +if is_dci: + # DCI 3DC 8D topology mapping + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "DC1GW1": "SD1", + "DC1GW2": "SD2", + "DC2GW1": "SD3", + "DC3GW1": "SD4", + "Leaf1": "SD5", + "Leaf2": "SD6", + "Leaf3": "SD7", + "Leaf4": "SD8" + } +elif is_mh: + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "spine0": "SD1", + "leaf0": "SD2", + "leaf1": "SD3", + "leaf2": "SD4", + "leaf3": "SD5" + } +else: + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "spine0": "SD1", + "spine1": "SD2", + "leaf0": "SD3", + "leaf1": "SD4", + "leaf2": "SD5" + } + +device_ip_and_ports = [] + +EXECUTION_MODE = 'vxr' # 'vxr' or 'hw' +UCS_CONFIG = None # For hw mode: {host, username, password} +HW_CFG_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), "config", "hw_cfg.json") + + +def _load_hw_cfg(): + try: + with open(HW_CFG_PATH, encoding="utf-8") as cfg_file: + cfg_text = cfg_file.read().strip() + return json.loads(cfg_text) if cfg_text else {} + except Exception as exc: + print("Failed to load hardware config from {}: {}".format(HW_CFG_PATH, exc)) + return {} + +HW_CFG = _load_hw_cfg() + + +def _get_hw_testbed_defaults(test_bed): + """Get testbed configuration from hw_cfg.json using test_bed name.""" + testbed_info = HW_CFG.get("testbed-info", {}) + if test_bed and test_bed in testbed_info: + return testbed_info[test_bed] + print("WARNING: No hardware defaults found for test_bed='{}' in {}".format(test_bed, HW_CFG_PATH)) + return {} + +def _get_hw_testbed_spytest_docker(test_bed): + """Get docker name from hw_cfg.json using SONIC_VERSION and test_bed name.""" + testbed_info = HW_CFG.get("testbed-info", {}) + if test_bed and test_bed in testbed_info: + docker_name = testbed_info[test_bed].get(f"spytest_container_{UCS_CONFIG['sonic_version']}", "") + if docker_name: + return docker_name + print("WARNING: No spytest docker found for test_bed='{}' in {}, using just SONIC_VERSION".format(test_bed, HW_CFG_PATH)) + return f"spytest-platform-hardening-{UCS_CONFIG['sonic_version']}" + +def _get_hw_testbed_spytest_file_base(test_bed): + """Get base file path for ftp and results usage from hw_cfg.json using SONIC_VERSION and test_bed name.""" + testbed_info = HW_CFG.get("testbed-info", {}) + if test_bed and test_bed in testbed_info: + base_path = testbed_info[test_bed].get(f"spytest_file_base_{UCS_CONFIG['sonic_version']}", "") + if base_path == "": + pass + else: + return base_path + print("WARNING: No spytest file base found for test_bed='{}' in {}, using just SONIC_VERSION".format(test_bed, HW_CFG_PATH)) + return f"{UCS_CONFIG['sonic_version']}" + +def _create_parser(): + parser = argparse.ArgumentParser(description='Reading ports file.') + parser.add_argument('-b', '--tar_ball', type=str, help='Specify tar ball location', + required=False) + parser.add_argument('-f', '--topo_yaml', type=str, help='topo yaml file', + required=False) + parser.add_argument('-t', '--topology', type=str, help='location of DUT in topo', + required=False) + parser.add_argument('-p', '--platform', type=str, help='platform hardware type (lightning, carib, etc.)', + required=False) + parser.add_argument('--test_bed', type=str, + help='testbed name for hw_cfg.json lookup (e.g., lightning-spytest-plat). Required for hw mode unless all UCS configs (--ucs_host, --ucs_username, --ucs_password) are provided', + required=False) + parser.add_argument('-s', '--script_file', type=str, help='Input test script file', + required=False,default='reporting/suites/tortuga') + + # Hardware mode support + parser.add_argument('-m', '--mode', type=str, + choices=['vxr', 'hw'], + default='vxr', + help='Test execution mode: vxr (default) or hw (hardware)') + parser.add_argument('--ucs_host', type=str, + help='UCS host IP address (required for hw mode)', + required=False) + parser.add_argument('--ucs_username', type=str, + help='UCS host username (default: sonic)', + required=False) + parser.add_argument('--ucs_password', type=str, + help='UCS host password (or use UCS_PASSWORD env var for hw mode)', + required=False) + parser.add_argument('--sonic_version', type=str, + help='SONiC version identifier used to select UCS resources (required for hw mode)', + required=False) + + return parser + +def _validate_args(args): + """Validate argument combinations and requirements.""" + if args.get('mode') == 'hw': + test_bed = args.get('test_bed') + + # Check if UCS config needs to be loaded from hw_cfg.json + if not all(args.get(k) for k in ('ucs_host', 'ucs_username', 'ucs_password')): + if not test_bed: + return False, "ERROR: --test_bed is required when UCS configs (--ucs_host, --ucs_username, --ucs_password) are not provided" + defaults = _get_hw_testbed_defaults(test_bed) + if defaults: + if not args.get('ucs_host') and defaults.get('ucs_host'): + args['ucs_host'] = defaults['ucs_host'] + print("Using UCS host '{}' from hw_cfg.json for testbed '{}'".format(defaults['ucs_host'], test_bed)) + if not args.get('ucs_username') and defaults.get('ucs_username'): + args['ucs_username'] = defaults['ucs_username'] + print("Using UCS username from hw_cfg.json for testbed '{}'".format(test_bed)) + if not args.get('ucs_password') and defaults.get('ucs_password'): + args['ucs_password'] = defaults['ucs_password'] + print("Using UCS password from hw_cfg.json for testbed '{}'".format(test_bed)) + + # Hardware mode requires UCS configuration (either from args or from hw_cfg.json via test_bed) + missing = [] + if not args.get('ucs_host'): + missing.append('--ucs_host') + if not args.get('ucs_username'): + missing.append('--ucs_username') + if not args.get('ucs_password'): + missing.append('--ucs_password') + if missing: + return False, "ERROR: {} required when using hardware mode. Provide them directly or via --test_bed in hw_cfg.json".format( + ", ".join(missing)) + + if not args.get('sonic_version'): + return False, "ERROR: --sonic_version is required when using hardware mode (-m hw)" + + return True, "" + +def start_vxr(topo_yaml): + print("Starting step: start_vxr") + vxr_path = "python3 /auto/vxr/pyvxr/pyvxr-latest/vxr.py" + os.system("{} clean".format(vxr_path)) + + os.system("bash -c '{} start {} |& tee sim_op.log'".format(vxr_path, topo_yaml)) + + sim_output = subprocess.check_output("grep -i 'sim up' sim_op.log | wc -l", shell=True).strip() + + # Populate results file with failure data + if not int(sim_output): + return -1, "Sim is not up. Exiting now" + + os.system(f"{vxr_path} ports > {VXR_PORTS_FILENAME}") + + return 0, "" + + +def get_ports_config(port_file=VXR_PORTS_FILENAME): + """Get ports config for VXR mode. Not used in HW mode.""" + if EXECUTION_MODE == 'hw': + return {} # HW mode doesn't need VXR ports + with open(port_file) as f: + ports_config = yaml.load(f, Loader=yaml.FullLoader) + + return ports_config + +def get_spirent_ip(): + ports_config = get_ports_config() + + telnet_host = ports_config["spt"]["HostAgent"] + telnet_port = ports_config["spt"]["serial0"] + + p = pexpect.spawn(f'telnet {telnet_host} {telnet_port}') + p.sendline() + p.expect('login') + ret = str(p.before) + ret = ret.split("STCv-")[1].split("/dev")[0].replace("-", ".") + + return ret.strip() + +def determine_spt_or_ixia(topology, platform): + print("determine_spt_or_ixia") + pyvxr_yaml_file = import_pyvxr_yaml_file(topology, platform) + with open(pyvxr_yaml_file, "r") as f: + pyvxr_topo = yaml.load(f, Loader=yaml.BaseLoader) + + if "ixia" in pyvxr_topo["devices"]: + return "ixia" + elif "spt" in pyvxr_topo["devices"]: + return "spt" + else: + print("ERROR! Could not find ixia or spt in pyvxr yaml file!") + return None + +def find_devices(topo_file_str): + regex = r'^([ ]{0}|[ ]{4}|\t)(\w+):' + keys = re.findall(regex, topo_file_str, re.MULTILINE) + + is_device = False + devices = [] + + for i, reg_match in enumerate(keys): + #got to devices key + if reg_match[1] == "devices": + is_device = True + continue + + #reached end of devices list + if is_device and len(reg_match[0]) == 0: + break + + if is_device: + devices.append(reg_match[1]) + + return devices + +# Define a function to perform the replacement +def replace_device_ip_and_port_helper(match): + global device_ip_and_ports + curr_device = device_ip_and_ports.pop(0) + print(curr_device) + return match.group(1) + curr_device["ip"] + match.group(2) + curr_device["port"] + match.group(3) + +def replace_device_ip_and_port(topo_file_str): + regex = r'(\W+access:\s*\{.*?ip:\s*)\S+(,\s*port:\s*)\S+(}\n)' #match 'access' portion of devices config + data_replaced = re.sub(regex, replace_device_ip_and_port_helper, topo_file_str, flags=re.DOTALL) + return data_replaced + +def update_device_ip_and_ports(topo_file_str): + global device_ip_and_ports + devices = find_devices(topo_file_str) + + ports_config = get_ports_config() + + for device_name in devices: + device_access_info = {} + if "SD" in device_name: + device_access_info["ip"] = ports_config[device_name]["HostAgent"] + device_access_info["port"] = str(ports_config[device_name]["xr_redir22"]) + elif device_name in TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING: + device_name_in_pyvxr_topo = TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING[device_name] + device_access_info["ip"] = ports_config[device_name_in_pyvxr_topo]["HostAgent"] + device_access_info["port"] = str(ports_config[device_name_in_pyvxr_topo]["xr_redir22"]) + else: + continue + + device_ip_and_ports.append(device_access_info) + + new_topo_file_str = replace_device_ip_and_port(topo_file_str) + return new_topo_file_str + +def update_topo_file(topology, platform): + + if EXECUTION_MODE == 'hw': + print("Hardware mode detected; skipping topology modifications") + return 0, "" + + print("Updating topo file") + topo_file = import_topo_file(topology, platform) + + if not topo_file: + return -1, "error! topo_file does not exist in config file!" + + with open(topo_file, "r") as f: + topo_file_str = f.read() + + topo_file_str = update_device_ip_and_ports(topo_file_str) + + ports_config = get_ports_config() + + + # for device in topo_config["devices"].keys(): + # if "SD" in device: + # topo_config["devices"][device]["access"]["ip"] = ports_config[device]["HostAgent"] + # topo_config["devices"][device]["access"]["port"] = ports_config[device]["xr_redir22"] + # if device in TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING: + # device_name_in_pyvxr_topo = TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING[device] + # topo_config["devices"][device]["access"]["ip"] = ports_config[device_name_in_pyvxr_topo]["HostAgent"] + # topo_config["devices"][device]["access"]["port"] = ports_config[device_name_in_pyvxr_topo]["xr_redir22"] + + + spt_or_ixia = determine_spt_or_ixia(topology, platform) + + if spt_or_ixia == "spt": + spt_ip = get_spirent_ip() + regex = r'(\W+properties:\s*\{type: stc.*?ip:\s*)\S+(,.*?\n)' + topo_file_str = re.sub(regex, fr'\1 {spt_ip}\2', topo_file_str) + print(f"spirent ip is {spt_ip}") + # topo_config["devices"]["spt"]["properties"]["ip"] = spt_ip + elif spt_or_ixia == 'ixia': + ixia_chassis_mgmt_ip = ports_config["ixia_chassis"]["mgmt_ip"] + ixia_gui_mgmt_ip = ports_config["ixia_gui"]["mgmt_ip"] + regex = r'(\W+properties:\s*\{type: ixia.*?ip:\s*)\S+(,\s*ix_server:\s*)\S+(}\n)' + topo_file_str = re.sub(regex, fr'\1 {ixia_chassis_mgmt_ip}\2 {ixia_gui_mgmt_ip}\3', topo_file_str) + # topo_config["devices"]["T1"]["properties"]["ip"] = ixia_chassis_mgmt_ip + # topo_config["devices"]["T1"]["properties"]["ix_server"] = ixia_gui_mgmt_ip + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + + with open(topo_file, "w") as f: + f.write(topo_file_str) + + # #BaseLoader does not preserve custom data types. add datatype '!include' back into topo file + # os.system(f"sed -E -i 's/([^[:space:]]+.yaml)/!include \\1/' {topo_file}") + + return 0, "" + +def send_topo_file_to_execution_host(topology, platform, test_bed=None): + print("Uploading topo file to execution host") + + topo_file = import_topo_file(topology, platform) + + client = get_execution_host_ssh_client() + ftp_client=client.open_sftp() + if EXECUTION_MODE == 'hw': + ftp_client.put(topo_file, f"{_get_hw_testbed_spytest_file_base(test_bed)}/sonic-test/sonic-mgmt/spytest/topo") + else: + ftp_client.put(topo_file,'sonic-test/sonic-mgmt/spytest/topo') + ftp_client.close() + client.close() + + return 0, "" + +def send_test_files_to_execution_host(script_file, test_bed=None): + print("Sending test files to execution host") + + client = get_execution_host_ssh_client() + ftp_client = None + + try: + ftp_client = client.open_sftp() + if EXECUTION_MODE == 'hw': + ftp_client.put( + f"../sonic-mgmt/spytest/{script_file}", + f"{_get_hw_testbed_spytest_file_base(test_bed)}/sonic-test/sonic-mgmt/spytest/{script_file}" + ) + else: + ftp_client.put( + f"../sonic-mgmt/spytest/{script_file}", + f"sonic-test/sonic-mgmt/spytest/{script_file}" + ) + + for root, subdirs, files in os.walk("../sonic-mgmt/spytest/templates"): + exec_command_raise_error(client, f"mkdir -p sonic-test/sonic-mgmt/{root}") + for file in files: + ftp_client.put(f"{root}/{file}", f"sonic-test/sonic-mgmt/{root}/{file}") + + for root, subdirs, files in os.walk("../sonic-mgmt/spytest/tests"): + exec_command_raise_error(client, f"mkdir -p sonic-test/sonic-mgmt/{root}") + for file in files: + ftp_client.put(f"{root}/{file}", f"sonic-test/sonic-mgmt/{root}/{file}") + finally: + if ftp_client: + try: + ftp_client.close() + except Exception: + pass + client.close() + + return 0, "" + +def exec_command_raise_error(client, cmd): + print(f"executing command: '{cmd}'") + stdin, stdout, stderr = client.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + print(f"Encountered error while executing '{cmd}', stdout: {stdout.readlines()}, stderr: {stderr.readlines()}") + raise Exception(stdout.channel.recv_exit_status(), stderr.readlines()) + + return stdin, stdout, stderr + +def get_execution_host_ssh_client(): + """ + Get SSH client to execution host. + VXR mode: connects to VXR management node + HW mode: connects to UCS host + """ + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + + if EXECUTION_MODE == 'hw': + # Connect to UCS for hardware mode + client.connect( + hostname=UCS_CONFIG['host'], + username=UCS_CONFIG['username'], + password=UCS_CONFIG['password'] + ) + print(f"Connected to UCS host: {UCS_CONFIG['host']}") + else: + # Connect to VXR management node for VXR mode + ports_config = get_ports_config() + client.connect( + ports_config['sonic_mgmt']['HostAgent'], + ports_config['sonic_mgmt']['xr_redir22'], + "vxr", + "cisco123" + ) + print(f"Connected to VXR management node: {ports_config['sonic_mgmt']['HostAgent']}") + + return client + +def configure_vxr_spt(topology, platform, tar_ball, script_file): + print("Configure VXR with Spitfire") + ports_config = get_ports_config() + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(ports_config['sonic_mgmt']['HostAgent'], ports_config['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + + + try: + tar_ball_name = tar_ball.split("/")[-1] + #untar sonic-test golden-code + exec_command_raise_error(client, f"wget -q {tar_ball}") + exec_command_raise_error(client, f"tar -xvf {tar_ball_name}") + + #run sonic-mgmt docker + exec_command_raise_error(client, "wget -q http://172.29.93.10/sonic-images/golden-code/docker-sonic-mgmt.gz") + exec_command_raise_error(client, "docker load < docker-sonic-mgmt.gz") + exec_command_raise_error(client, "cd sonic-test/sonic-mgmt/spytest; docker run -v $PWD:/data --name 'docker-sonic-mgmt' -itd docker-sonic-mgmt /bin/bash") + + #install spirent related files + exec_command_raise_error(client, "wget -q http://172.29.93.10/sonic-images/spirent_projects_folder.tar.gz") + exec_command_raise_error(client, "tar -xvf spirent_projects_folder.tar.gz -C sonic-test/sonic-mgmt/spytest") + + except paramiko.SSHException as e: + return -1, e + except Exception as e: + return e.args[0], e.args[1] + + client.close() + +def configure_vxr_ixia(topology, platform, tar_ball, script_file): + print("Configure VXR with IXIA") + ports_config = get_ports_config() + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(ports_config['sonic_mgmt']['HostAgent'], ports_config['sonic_mgmt']['xr_redir22'], "vxr", "cisco123") + + try: + tar_ball_name = tar_ball.split("/")[-1] + + #untar sonic-test golden-code + exec_command_raise_error(client, f"wget -q {tar_ball}") + exec_command_raise_error(client, f"tar -xvf {tar_ball_name}") + + # run sonic-mgmt docker - use different image based on DCI flag + if is_dci: + exec_command_raise_error( + client, + "wget -q http://10.29.158.43/builds/keysight-u18070-10-0.tar", + ) + exec_command_raise_error(client, "docker load -i keysight-u18070-10-0.tar") + exec_command_raise_error( + client, + "cd sonic-test/sonic-mgmt/spytest; docker run -v $PWD:/data --name 'ixia_sonic_mgmt' -itd spytest/keysight-u18:10.00 /bin/bash", + ) + else: + exec_command_raise_error(client, "wget -q http://172.29.93.10/sonic-images/spytest/keysight-u18070.tar") + exec_command_raise_error(client, "docker load -i keysight-u18070.tar") + exec_command_raise_error(client, "cd sonic-test/sonic-mgmt/spytest; docker run -v $PWD:/data --name 'ixia_sonic_mgmt' -itd spytest/keysight-u18:9.20.2201.70 /bin/bash") + + except paramiko.SSHException as e: + return -1, e + except Exception as e: + return e.args[0], e.args[1] + +def configure_vxr(topology, platform, tar_ball, script_file): + print("Starting step: configure_vxr") + spt_or_ixia = determine_spt_or_ixia(topology, platform) + + if spt_or_ixia == "spt": + configure_vxr_spt(topology, platform, tar_ball, script_file) + elif spt_or_ixia == "ixia": + configure_vxr_ixia(topology, platform, tar_ball, script_file) + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + rc, msg = update_topo_file(topology, platform) + if rc != 0: + return rc, msg + rc, msg = send_topo_file_to_execution_host(topology, platform) + if rc != 0: + return rc, msg + + rc, msg = send_test_files_to_execution_host(script_file) + if rc != 0: + return rc, msg + + return 0, "" + +def execute_command_on_chan(chan, command='', show_output=False): + print(f"executing command: {command}") + termination_command = "\necho \"Command Completed, exit code is: $?\"\n" + termination_str = "Command Completed, exit code is:" + chan.send(command+termination_command) + start_time = time.time() + chan_timeout = 60 * 60 * 16 # 16 hours timeout for command execution + while True: + resp = chan.recv(9999).decode('utf-8') + if show_output and resp: + print(f"resp: '{resp}'") + + if termination_str in resp: + #the termination command command will show up initially in resp, ignore + if resp.count(termination_str) == 1 and "$?" in resp.split(termination_str)[1]: + continue + exit_code = resp.split(termination_str)[1] + print(f"Exit code for command {command} is: {exit_code}") + break + + if time.time() - start_time > chan_timeout: + raise Exception(f"Timeout of {chan_timeout} seconds while waiting for command '{command}' to complete") + + time.sleep(2) + +def run_sanity(topology, platform, script_file, test_bed=None): + print("Starting step: run_sanity") + + client = get_execution_host_ssh_client() + chan = client.invoke_shell() + execute_command_on_chan(chan) + + if EXECUTION_MODE == 'hw': + # Hardware mode execution + container_name = _get_hw_testbed_spytest_docker(test_bed) + print(f"Using spytest container: {container_name}") + + global HW_RUN_TIMESTAMP, RESULT_FOLDER_PATH + if not HW_RUN_TIMESTAMP: + HW_RUN_TIMESTAMP = datetime.datetime.utcnow().strftime("%Y%m%d-%H%M%S-%f") + + base_result_dir = f"{_get_hw_testbed_spytest_file_base(test_bed)}/sonic-test/sonic-mgmt/spytest/spytest_results" + # Use test_bed if available, otherwise fallback to platform for folder naming + testbed_identifier = test_bed if test_bed else platform + run_results_subdir = f"{HW_RUN_TIMESTAMP}_{testbed_identifier}_{topology}" + RESULT_FOLDER_PATH = os.path.join(base_result_dir, run_results_subdir) + + cmd = f"docker exec -it {container_name} bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"cd /data; mkdir -p spytest_results/{run_results_subdir}; " \ + f"chmod 777 spytest_results; chmod 777 spytest_results/{run_results_subdir}\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "env; ./bin/spytest --testbed /data/topo " \ + f"--logs-path spytest_results/{run_results_subdir} --test-suite /data/{script_file}\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"echo 'Updating permissions of results file to ensure availability.'; cd /data/spytest_results/{run_results_subdir}; chmod -R a+rX .\n" + execute_command_on_chan(chan, cmd, show_output=True) + + else: + # VXR/sim mode execution + spt_or_ixia = determine_spt_or_ixia(topology, platform) + + if spt_or_ixia == "spt": + cmd = "docker exec -it docker-sonic-mgmt /bin/bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "sudo su\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "cd /data; cp -r projects /; /data/bin/tools_install.sh; export SPIRENTD_LICENSE_FILE=10.22.181.32\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "mkdir spytest_results; chmod 777 spytest_results; cd spytest_results\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"env; /data/bin/spytest --testbed /data/topo --test-suite /data/{script_file}\n" + execute_command_on_chan(chan, cmd, show_output=True) + + elif spt_or_ixia == "ixia": + cmd = "docker exec -it ixia_sonic_mgmt bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "cd /data; pip install monotonic\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install retry\n" + execute_command_on_chan(chan, cmd, show_output=True) + + # Install additional packages for DCI if DCI topology is detected + if is_dci: + cmd = "pip install pyopenssl --upgrade\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install urllib3 --upgrade\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install --upgrade ixnetwork-restpy==1.5.0\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "unset https_proxy http_proxy\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "mkdir spytest_results; chmod 777 spytest_results; cd spytest_results\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"env; /data/bin/spytest --testbed /data/topo --test-suite /data/{script_file}\n" + execute_command_on_chan(chan, cmd, show_output=True) + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + time.sleep(120) + + return 0, "" + +def extract_test_start_time(spytest_results_files): + for file in spytest_results_files: + if "summary.txt" in file: + return "_".join(file.split("_")[1:-1]) + +def collect_result(): + print("Collecting result") + + client = get_execution_host_ssh_client() + + ftp_client=client.open_sftp() + spytest_results_files = ftp_client.listdir(RESULT_FOLDER_PATH) + + global test_start_time + test_start_time = extract_test_start_time(spytest_results_files) + + exec_command_raise_error(client, f"cd {RESULT_FOLDER_PATH}; echo cisco123 | sudo -S chmod -R 644 tmp* | true") + + exec_command_raise_error(client, f"cd {RESULT_FOLDER_PATH}; tar -czvf spytest_result.tar.gz *") + ftp_client.get(f"{RESULT_FOLDER_PATH}/spytest_result.tar.gz","./spytest_result.tar.gz") + + + os.system(f"mkdir spytest_result_{test_start_time}") + os.system(f"tar -xvf spytest_result.tar.gz -C spytest_result_{test_start_time}") + if EXECUTION_MODE != 'hw': + os.system(f"tar -czvf vxr.out.tar.gz vxr.out") + + #generate report files for pipeline + sum_f = open(SUMMARY_REPORT_PATH, "w") + com_f = open(COMMON_REPORT_PATH, "w") + tc_f = open(NEW_SUMMARY_REPORT_PATH, 'w') + + sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "failure_reason": None} + tc_details = {} + + ret = 0 + try: + spytest_result_sum_file = open(f"./spytest_result_{test_start_time}/results_{test_start_time}_summary.txt", 'r') + spytest_result_sum = spytest_result_sum_file.readlines() + spytest_result_sum_file.close() + + test_file = open( + f"./spytest_result_{test_start_time}/results_{test_start_time}_testcases.csv", "r" + ) + test_file_cont = csv.DictReader(test_file, skipinitialspace=True) + + print(f"Result sum file contents: {spytest_result_sum}") + + for line in spytest_result_sum: + if "=" not in line: + continue + + key, value = line.split("=", 1) + key = key.strip() + value = value.strip() + + if key == "PASS": + sum["passed"] = int(value) + elif key in ["DUTFAIL", "CONFIGFAIL", "CMDFAIL", "TOPOFAIL", "TGENFAIL", "SCRIPTERROR", "DEPFAIL", "ENVFAIL", "TIMEOUT", "FAIL"]: + sum["failed"] += int(value) + elif key in ["UNSUPPORTED", "SKIPPED"]: + sum["skipped"] += int(value) + elif key == "Test Count": + sum["total"] = int(value) + + for row in test_file_cont: + case_summary = dict() + module = row["Module"] + script_name = os.path.basename(row["Module"]) + test_script = os.path.basename(row["Module"]) + # print(f'{test_script=}') + dir_name = os.path.dirname(row['Module']) + test_category = os.path.split(dir_name)[1] + case_summary['start_time'] = row['ExecutedOn'] + case_summary['test_case_name'] = row['TestCase'] + case_summary['state'] = row['Result'] + case_summary['test_case_full_name'] = module.split(".py")[0].replace('/', '.') + "#" + row['TestCase'] + case_summary['test_category'] = test_category + + script_name = os.path.basename(script_name) + if script_name not in tc_details: + tc_details[script_name] = { + "SCRIPT_NAME": script_name, + 'TC_INFO': [] + } + tc_details[script_name]['TC_INFO'].append(case_summary) + + executed_tests = sum["total"] - sum["skipped"] + if executed_tests > 0: + sum["success_rate"] = round(sum["passed"] / executed_tests * 100, 2) + else: + print("No executed test cases found; all collected test cases were skipped") + sum["success_rate"] = 0.0 + + if sum["success_rate"] == 100: + sum["status"] = SUCCESS_STATUS + else: + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.TEST_CASES_FAILED + + except Exception as e: + print(f"Exception! Failed to open or parse result file: {e}") + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.NO_REPORT_FILE + ret = 1 + + print(f"result summary is: {sum}") + + test_data = {'script_data': list(tc_details.values())} + + json.dump(sum, sum_f) + json.dump(sum, com_f) + json.dump(test_data, tc_f, indent=2) + + sum_f.close() + com_f.close() + tc_f.close() + + return ret, "", sum + +def upload_result(): + print("Uploading result to server") + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect("sonic-ucs-m3-1", username = "ringcicd", password = "cicd_sonic") + + ftp_client=client.open_sftp() + spytest_results_files = os.listdir(f"spytest_result_{test_start_time}") + ftp_client.mkdir(f"/auto/vxr1/sonic-images/ringcicd/spytest_result_{test_start_time}") + + ftp_client.put(f"./spytest_result.tar.gz", f"/auto/vxr1/sonic-images/ringcicd/spytest_result_{test_start_time}/spytest_result.tar.gz") + if EXECUTION_MODE != 'hw': + ftp_client.put(f"./vxr.out.tar.gz", f"/auto/vxr1/sonic-images/ringcicd/spytest_result_{test_start_time}/vxr.out.tar.gz") + ftp_client.put(NEW_SUMMARY_REPORT_PATH, f"/auto/vxr1/sonic-images/ringcicd/spytest_result_{test_start_time}/{NEW_SUMMARY_REPORT_FILENAME}") + exec_command_raise_error(client,f"cd /auto/vxr1/sonic-images/ringcicd/spytest_result_{test_start_time}; tar -xvf spytest_result.tar.gz") + + with open(SUMMARY_REPORT_PATH, "r") as f: + sum = json.load(f) + + com_f = open(COMMON_REPORT_PATH, "w") + sum_f = open(SUMMARY_REPORT_PATH, "w") + + sum["report_link"] = f"http://172.29.93.10/sonic-images/ringcicd/spytest_result_{test_start_time}/dashboard.html" + sum["log_tarball_link"] = f"http://172.29.93.10/sonic-images/ringcicd/spytest_result_{test_start_time}" + + json.dump(sum, sum_f) + json.dump(sum, com_f) + + sum_f.close() + com_f.close() + + print(f"Successfully uploaded test result, url is: http://172.29.93.10/sonic-images/ringcicd/spytest_result_{test_start_time}/dashboard.html") + return 0, "" + +def cleanup(): + return 0, "" + +def import_pyvxr_yaml_file(topology, platform): + print(f"get vxr config for topology: {topology}, platform: {platform}") + + with open(TOPO_PLATFORM_FILE_MAP) as cfg_file: + TOPO_PLATFORM_FILE_DICT = json.load(cfg_file) + + print("Topo & platform to filename mapping dict: '{}'".format(TOPO_PLATFORM_FILE_DICT)) + + if topology in TOPO_PLATFORM_FILE_DICT: + if platform in TOPO_PLATFORM_FILE_DICT[topology]: + pyvxr_yaml_file = TOPO_PLATFORM_FILE_DICT[topology][platform]["pyvxr_yaml_file"] + + return pyvxr_yaml_file + +def import_topo_file(topology, platform): + print(f"get topo config for topology: {topology}, platform: {platform}") + + with open(TOPO_PLATFORM_FILE_MAP) as cfg_file: + TOPO_PLATFORM_FILE_DICT = json.load(cfg_file) + + topo_file = None + if topology in TOPO_PLATFORM_FILE_DICT: + if platform in TOPO_PLATFORM_FILE_DICT[topology] and "topo_file" in TOPO_PLATFORM_FILE_DICT[topology][platform]: + topo_file = TOPO_PLATFORM_FILE_DICT[topology][platform]["topo_file"] + + return topo_file + +def main(): + global EXECUTION_MODE, UCS_CONFIG, RESULT_FOLDER_PATH, HW_RUN_TIMESTAMP + RESULT_FOLDER_PATH = DEFAULT_RESULT_FOLDER_PATH + HW_RUN_TIMESTAMP = "" + + argparser = _create_parser() + args = vars(argparser.parse_args()) + + # Validate argument combinations + valid_args, validation_error = _validate_args(args) + if not valid_args: + print(validation_error) + sys.exit(1) + tar_ball = args['tar_ball'] + topo_yaml = args['topo_yaml'] + topology = args['topology'] + platform = args['platform'] + test_bed = args.get('test_bed') + script_file = args['script_file'] + + # Determine execution mode + EXECUTION_MODE = args.get('mode', 'vxr') + + if EXECUTION_MODE == 'hw': + # Hardware mode: set up UCS connection + print("="*60) + print("HARDWARE MODE - Execution on UCS host") + print("="*60) + + UCS_CONFIG = { + 'host': args['ucs_host'], + 'username': args.get('ucs_username', 'sonic'), + 'password': args['ucs_password'], + 'sonic_version': (args['sonic_version']) + } + + print(f"UCS Host: {UCS_CONFIG['host']}") + print(f"UCS Username: {UCS_CONFIG['username']}") + print(f"SONiC Version for Test: {UCS_CONFIG['sonic_version']}") + print("Note: Topo file is NOT dynamically modified, topo file is assumed setup correctly") + print("="*60) + + rc, msg = send_topo_file_to_execution_host(topology, platform, test_bed) + if rc != 0: + print(f"error at send_topo_file_to_execution_host! msg: {msg}") + sys.exit(rc) + + rc, msg = send_test_files_to_execution_host(script_file, test_bed) + if rc != 0: + print(f"error at send_test_files_to_execution_host! msg: {msg}") + sys.exit(rc) + + else: + # VXR mode: normal flow + print("="*60) + print("VXR SIMULATION MODE") + print("="*60) + topo_yaml = import_pyvxr_yaml_file(topology, platform) + + rc, msg = start_vxr(topo_yaml) + if rc != 0: + print(f"error at start_vxr! msg: {msg}") + sys.exit(rc) + + rc, msg = configure_vxr(topology, platform, tar_ball, script_file) + if rc != 0: + print(f"error at configure_vxr! msg: {msg}") + sys.exit(rc) + + # Common execution path between HW and VXR-sim + rc, msg = run_sanity(topology, platform, script_file, test_bed=test_bed) + if rc != 0: + print(f"error at run_sanity! msg: {msg}") + sys.exit(rc) + + rc, msg, result_sum = collect_result() + if rc != 0: + print(f"error at collect_result! msg: {msg}") + + rc, msg = upload_result() + if rc != 0: + print(f"error at upload_result! msg: {msg}") + sys.exit(rc) + + if result_sum["status"] == FAILURE_STATUS: + print(f"some failure detected! Please check logs. Result summary: {result_sum}") + sys.exit(1) + + sys.exit(rc) + + +if __name__ == '__main__': + main() diff --git a/infra/run_spytest_collect_result.py b/infra/run_spytest_collect_result.py new file mode 100644 index 00000000000..6a7cf4f97c8 --- /dev/null +++ b/infra/run_spytest_collect_result.py @@ -0,0 +1,214 @@ +import csv +import datetime +import json +import os +import pprint +import re +import subprocess +import sys + +import yaml + +import generate_spytest_html_report as html_report + +VXR_PORTS_FILENAME = "vxr_ports.yaml" +RESULT_FOLDER_PATH = "/home/vxr/sonic-test/sonic-mgmt/spytest/spytest_results" + +SUMMARY_REPORT_FILENAME = "results.json" +COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" +TOPO_PLATFORM_FILE_MAP = "topo_and_platform_to_filename_map.json" +SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) +COMMON_REPORT_PATH = "../../{}".format(COMMON_REPORT_FILENAME) +PARALLEL_LOG = "/tmp/spytest_parallel.log" + +def extract_test_start_time(spytest_results_files): + test_start_time = [] + + for file in spytest_results_files: + if "summary.txt" in file: + test_start_time.append("_".join(file.split("_")[1:-1])) + + return test_start_time + +def collect_result(sim_dir): + + from pathlib import Path + + directory_path = Path(f"{sim_dir}/spytest_result") + + # Get the list of file names + spytest_results_files = [f.name for f in directory_path.iterdir() if f.is_file()] + + test_start_time = extract_test_start_time(spytest_results_files) + if not test_start_time: + print(f"Summary file doesn't exists for {sim_dir}, probably skipped because of sim errors") + + ret = 0 + try: + summary = dict() + for test_time in test_start_time: + summary = { + "SIM_ID": "sim_0", + "TEST_SUITE": "", + "SCRIPT_NAME": "", + "EXEC_START_TIME": "0", + "EXEC_COMPLETION_TIME": 0, + "EXECUTION_TIME": 0, + "TOTAL_TEST": 0, + "FAILED_TEST": 0, + "PASSED_TEST": 0, + "SKIPPED_TEST": 0, + "SUCCESS_RATE": 0.0, + "LOG_REPORT": "" + } + failed_test_list = [] + spytest_result_summary_file = open( + f"{sim_dir}/spytest_result/results_{test_time}_summary.txt", "r" + ) + spytest_result_summary = spytest_result_summary_file.readlines() + spytest_result_summary_file.close() + #print(f"{spytest_result_summary=}") + + # SPYTEST_SUITE_NAME_ARG + export_file = open( + f"{sim_dir}/spytest_result/results_{test_time}_export.txt", "r" + ) + export_summary_data = export_file.readlines() + export_file.close() + + for line in export_summary_data: + if 'SPYTEST_SUITE_NAME_ARG' in line: + suite_name = line.split('/')[-1] + summary['TEST_SUITE'] = suite_name.strip() + #print(f"{summary['TEST_SUITE']=}") + + test_file = open( + f"{sim_dir}/spytest_result/results_{test_time}_testcases.csv", "r" + ) + test_file_cont = csv.DictReader(test_file, skipinitialspace=True) + + summary["SIM_ID"] = sim_dir.split("/")[-1] + for line in spytest_result_summary: + if "=" not in line: + continue + + key, value = line.split("=") + key = key.strip() + value = value.strip() + + if key == "PASS": + summary["PASSED_TEST"] = int(value) + elif key in [ + "UNSUPPORTED", + "SCRIPTERROR", + "DEPFAIL", + "ENVFAIL", + "TIMEOUT", + "FAIL", + ]: + summary["FAILED_TEST"] = int(value) + elif key == "SKIPPED": + summary["SKIPPED_TEST"] = int(value) + elif key == "Test Count": + summary["TOTAL_TEST"] = int(value) + elif key == "Execution Started": + summary["EXEC_START_TIME"] = value + elif key == "Execution Completed": + summary["EXEC_COMPLETION_TIME"] = value + elif key == "Execution Time": + summary["EXECUTION_TIME"] = value + elif key == "Software Versions": + summary["SOFTWARE_VERSION"] = value + elif key == "DUT_FAIL": + summary["DUT_FAIL"] = value + elif key == "CMDFAIL": + summary["CMD_FAIL"] = value + elif key == "CONFIGFAIL": + summary["CONFIG_FAIL"] = value + elif key == "TGENFAIL": + summary["TGEN_FAIL"] = value + + + tmp_sim = sim_dir.split("/")[-1] + if tmp_sim not in failed_test_dict: + failed_test_dict[tmp_sim] = [] + + for row in test_file_cont: + script_name = os.path.basename(row["Module"]) + script_name = script_name.strip() + summary["SCRIPT_NAME"] = script_name + script_name = os.path.basename(script_name) + script_name = os.path.splitext(script_name)[0] + if row["Result"] != "Pass": + failed_log = "" + for report_file in spytest_results_files: + if f"{script_name}.log" in report_file: + #print(f"{report_file=}") + failed_log = report_file + failed_test_list.append((row['Module'], row['TestCase'], failed_log)) + + failed_test_dict[tmp_sim].extend(failed_test_list) + + try: + summary["SUCCESS_RATE"] = round( + summary["PASSED_TEST"] + / (summary["TOTAL_TEST"] - summary["SKIPPED_TEST"]) + * 100, + 2, + ) + except ZeroDivisionError as e: + print("Test script seems to have skipped") + summary["SUCCESS_RATE"] = 0.00 + + log_report = f"dashboard_{summary['TEST_SUITE']}.html" + summary['LOG_REPORT'] = log_report + all_results.append(summary) + + except BaseException as e: + print("Exception! Failed to open result file!", e.with_traceback()) + ret = 1 + + return ret, "" + +def init(result_dir=None): + cur_dir = result_dir or os.getcwd() + global NUM_OF_SIM + NUM_OF_SIM = 8 + + for i in range(1, NUM_OF_SIM + 1): + sim_dir = f"{cur_dir}/sim_{i}" + rc, msg = collect_result(sim_dir) + if rc != 0: + print(f"error at collect_result! msg: {msg}") + + test_data = {'script_data': all_results, 'failed_tc_data': failed_test_dict} + with open(SUMMARY_REPORT_PATH, 'w') as file: + json.dump(test_data, file, indent=2) + + print(f"{test_data}") + print(f"SUMMARY_REPORT_PATH={os.path.abspath(SUMMARY_REPORT_PATH)}") + parallel_log = os.path.basename(PARALLEL_LOG) + html_report.generate_test_report(all_results, failed_test_dict, dest=cur_dir, log=parallel_log) + +def main(): + RESULT_FOLDER_PATH = sys.argv[1] + results_dir = RESULT_FOLDER_PATH or os.getcwd() + #results_dirs = os.listdir(results_dir) + #results_dirs = [f"{RESULT_FOLDER_PATH}/{item}" for item in results_dirs if os.path.isdir(f"{RESULT_FOLDER_PATH}/{item}/")] + if not(os.path.exists(results_dir) and os.path.isdir(results_dir)): + print("The directory {results_dir} does not exists") + sys.exit(0) + + global failed_test_dict, all_results + results_dirs = [] + results_dirs.append(results_dir) + + for idx, res_dir in enumerate(results_dirs): + failed_test_dict = {} + all_results = [] + init(result_dir=res_dir) + + +if __name__ == "__main__": + main() + diff --git a/infra/run_spytest_parallel.py b/infra/run_spytest_parallel.py new file mode 100755 index 00000000000..d8b739f3ece --- /dev/null +++ b/infra/run_spytest_parallel.py @@ -0,0 +1,1523 @@ +import argparse +import datetime +import getpass +import io +import json +import os +import copy +import re +import socket +import subprocess +import sys +import telnetlib +import threading +import time + +import paramiko +import pexpect +import yaml +import csv +import uuid + +import generate_spytest_html_report as html_report +from run_scripts_remote import SUCCESS_STATUS, FAILURE_STATUS, FAILURE_RESONS +# import access_pg_db + +# Invoke pyvxr's vxr.py with the same interpreter currently running this +# orchestrator. The orchestrator is launched from inside the activated +# pyats virtualenv (see Makefile run_spytest_parallel target), which is +# the only Python on the agent where pyvxr and its dependencies are +# installed. A previous hardcoded "python3.8" referred to a system Python +# that has no pyvxr installed, so vxr.py would import-fail with a silent +# exit 1 (output is captured by subprocess.run and not surfaced on +# check=True). Using sys.executable matches the venv-aware behavior of +# the surrounding "make clear_sim" target. +PYTHON3 = sys.executable + +VXR_PORTS_FILENAME = "vxr_ports.yaml" +RESULT_FOLDER_PATH = "/home/vxr/sonic-test/sonic-mgmt/spytest/spytest_results" + +SUMMARY_REPORT_FILENAME = "results.json" +NEW_SUMMARY_REPORT_FILENAME = "test_cases_info.json" +COMMON_REPORT_FILENAME = "sonic-whitebox-common.report" +TOPO_PLATFORM_FILE_MAP = "topo_and_platform_to_filename_map.json" +SUMMARY_REPORT_PATH = "../../{}".format(SUMMARY_REPORT_FILENAME) +NEW_SUMMARY_REPORT_PATH = "../../{}".format(NEW_SUMMARY_REPORT_FILENAME) +COMMON_REPORT_PATH = "../../{}".format(COMMON_REPORT_FILENAME) +PARALLEL_LOG = "spytest_parallel.log" + +sum = {"total": 0, "failed": 0, "passed": 0, "skipped": 0, "success_rate": 0.0, "status" : "success"} + +pattern_mh = r"_mh" +pattern_dci = r'-dci' +is_mh = False +is_dci = False +for item in sys.argv: + if re.search(pattern_mh, item): + is_mh = True + if re.search(pattern_dci, item): + is_dci = True + +if is_dci: + # DCI 3DC 8D topology mapping + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "DC1GW1": "SD1", + "DC1GW2": "SD2", + "DC2GW1": "SD3", + "DC3GW1": "SD4", + "Leaf1": "SD5", + "Leaf2": "SD6", + "Leaf3": "SD7", + "Leaf4": "SD8" + } +elif is_mh: + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "spine0": "SD1", + "leaf0": "SD2", + "leaf1": "SD3", + "leaf2": "SD4", + "leaf3": "SD5", + } +else: + TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING = { + "spine0": "SD1", + "spine1": "SD2", + "leaf0": "SD3", + "leaf1": "SD4", + "leaf2": "SD5", + } + +device_ip_and_ports = [] +failed_test_dict = {} +all_results = [] +failure_sims = [] +requeue_dict = {} +# Buckets abandoned by WEDGE_TIMEOUT_SEC. Surfaced to main() so the run is +# marked FAILED even when no result file is produced for the bucket. +wedged_buckets = [] + + +# Maximum wall-clock for a single bucket's spytest invocation. When exceeded +# the SSH channel is interrupted, the bucket is abandoned, and the SimThread +# moves on. Override with SPYTEST_PARALLEL_WEDGE_TIMEOUT_SEC if a future test legitimately +# needs a longer bound. +WEDGE_TIMEOUT_SEC = int(os.environ.get("SPYTEST_PARALLEL_WEDGE_TIMEOUT_SEC", 9000)) + + +class WedgedCommandError(RuntimeError): + """Raised by execute_command_on_chan when a wall-clock-bounded command + exceeds its budget without emitting the completion marker. The SimThread + catches this and abandons the current bucket instead of hanging.""" + pass + + +class SimThread(threading.Thread): + def __init__(self, topo_yaml, topology, platform, tar_ball, sim_dir): + super(SimThread, self).__init__() + self.__sim_error = threading.Event() + self.topo_yaml = topo_yaml + self.topology = topology + self.platform = platform + self.tar_ball = tar_ball + self.sim_dir = sim_dir + self.sim_name = self.sim_dir.split("/")[-1] + + def stop(self): + self.__sim_error.set() + + def stopped(self): + return self.__sim_error.is_set() + + def run(self): + while True: + try: + time.sleep(1) + # Get a task from the queue + + if self.stopped(): + print(f"Trying to execution test on {self.sim_name}, but it is in error state." + f" Retry in 30 secs") + time.sleep(30) + break + task = task_queue.get(timeout=1) # Timeout to exit if no task is available + + print(f"{self.sim_name}: is processing test execution of suit {task}") + + rc, msg = configure_vxr(self.topology, self.platform, self.tar_ball, task, self.sim_dir) + if rc != 0: + print(f"error at configure_vxr! msg: {msg}") + sys.exit(rc) + + rc, msg = run_sanity(self.topology, self.platform, task, self.sim_dir) + if rc != 0: + # On a wedge: record the abandoned bucket so the run is + # marked failed, and retire this sim to avoid burning + # another WEDGE_TIMEOUT_SEC on a presumed-unhealthy DUT. + if msg and msg.startswith("wedged:"): + print(f"[WEDGE BOUND] sim {self.sim_name}: bucket {task} " + f"abandoned after timeout; retiring sim. {msg}") + wedged_buckets.append({ + "sim": self.sim_name, + "task": task, + "msg": msg, + }) + task_queue.task_done() + self.stop() + return + print(f"error at run_sanity! msg: {msg}") + sys.exit(rc) + + if sim_error_state(self.sim_dir): + print(f"Marking sim {self.sim_name} as not usable") + self.stop() + # Mark task as done + task_queue.task_done() + print(f"sim {self.sim_name} has completed test execution of test: {task}") + except queue.Empty: + print(f"SIM {self.sim_name} found no task and is exiting.") + break + +def _add_simulator_tags(vxr_yaml_file, args): + # Parse vxr yaml file + if not (os.path.exists(vxr_yaml_file) and os.path.isfile(vxr_yaml_file)): + return False + with open(vxr_yaml_file, "r") as f: + data = yaml.safe_load(f) + + if "sim_host" not in data["simulation"]: + print(f"args={args}") + if 'sim_host' not in args: + return + data["simulation"]['sim_host'] = args['sim_host'] + + username = getpass.getuser() + + for item in range(1, args["num_of_threads"] + 1): + filename = os.path.join("/nobackup", username, f"sim_{item}") + nf = f"sim_{item}.yaml" + new_data = copy.deepcopy(data) + new_data["simulation"]["sim_dir"] = filename + # pyvxr schema rejects None values for str fields; drop any Nones from simulation + sim_block = new_data["simulation"] + for _k in list(sim_block.keys()): + if sim_block[_k] is None: + del sim_block[_k] + with open(nf, "w") as new_file: + yaml.dump(new_data, new_file, sort_keys=False) + + return True + + +def _create_parser(): + parser = argparse.ArgumentParser(description="Reading ports file.") + parser.add_argument( + "-b", "--tar_ball", type=str, help="Specify tar ball location", required=False + ) + parser.add_argument( + "-f", "--topo_yaml", type=str, help="topo yaml file", required=False + ) + parser.add_argument( + "-t", "--topology", type=str, help="location of DUT in topo", required=False + ) + parser.add_argument( + "-p", "--platform", type=str, help="platform type of the DUT", required=False + ) + parser.add_argument( + "-s", + "--script_file", + type=str, + help="Input test script file", + required=False, + default="reporting/suites/tortuga_parallel", + ) + parser.add_argument( + "-n", + "--num_of_threads", + type=int, + help="Total number of simulators for parallel suite execution", + required=False, + default=4, + ) + parser.add_argument( + "-d", + "--sim_host", + type=str, + help="hostname for sim creation", + required=False, + ) + + return parser + + +def get_ports_config(port_file=VXR_PORTS_FILENAME): + with open(port_file) as f: + ports_config = yaml.load(f, Loader=yaml.FullLoader) + + return ports_config + + +def get_spirent_ip(sim_dir): + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + telnet_host = ports_config["spt"]["HostAgent"] + telnet_port = ports_config["spt"]["serial0"] + + p = pexpect.spawn(f"telnet {telnet_host} {telnet_port}") + p.sendline() + p.expect("login") + ret = str(p.before) + ret = ret.split("STCv-")[1].split("/dev")[0].replace("-", ".") + + return ret.strip() + + +def determine_spt_or_ixia(topology, platform): + print("determine_spt_or_ixia") + pyvxr_yaml_file = import_pyvxr_yaml_file(topology, platform) + with open(pyvxr_yaml_file, "r") as f: + pyvxr_topo = yaml.load(f, Loader=yaml.BaseLoader) + + if "ixia" in pyvxr_topo["devices"]: + return "ixia" + elif "spt" in pyvxr_topo["devices"]: + return "spt" + else: + print("ERROR! Could not find ixia or spt in pyvxr yaml file!") + return None + + +def find_devices(topo_file_str): + regex = r"^([ ]{0}|[ ]{4}|\t)(\w+):" + keys = re.findall(regex, topo_file_str, re.MULTILINE) + + is_device = False + devices = [] + + for i, reg_match in enumerate(keys): + # got to devices key + if reg_match[1] == "devices": + is_device = True + continue + + # reached end of devices list + if is_device and len(reg_match[0]) == 0: + break + + if is_device: + devices.append(reg_match[1]) + + return devices + + +# Define a function to perform the replacement +def replace_device_ip_and_port_helper(match): + global device_ip_and_ports + curr_device = device_ip_and_ports.pop(0) + print(curr_device) + return ( + match.group(1) + + curr_device["ip"] + + match.group(2) + + curr_device["port"] + + match.group(3) + ) + + +def replace_device_ip_and_port(topo_file_str): + regex = r"(\W+access:\s*\{.*?ip:\s*)\S+(,\s*port:\s*)\S+(}\n)" # match 'access' portion of devices config + data_replaced = re.sub( + regex, replace_device_ip_and_port_helper, topo_file_str, flags=re.DOTALL + ) + return data_replaced + + +def update_device_ip_and_ports(topo_file_str, sim_dir): + global device_ip_and_ports + devices = find_devices(topo_file_str) + + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + for device_name in devices: + device_access_info = {} + if "SD" in device_name: + device_access_info["ip"] = ports_config[device_name]["HostAgent"] + device_access_info["port"] = str(ports_config[device_name]["xr_redir22"]) + elif device_name in TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING: + device_name_in_pyvxr_topo = TOPO_DEVICE_NAME_TO_PYVXR_DEVICE_NAME_MAPPING[ + device_name + ] + device_access_info["ip"] = ports_config[device_name_in_pyvxr_topo][ + "HostAgent" + ] + device_access_info["port"] = str( + ports_config[device_name_in_pyvxr_topo]["xr_redir22"] + ) + else: + continue + + device_ip_and_ports.append(device_access_info) + + new_topo_file_str = replace_device_ip_and_port(topo_file_str) + return new_topo_file_str + + +def update_topo_file(topology, platform, sim_dir): + print("Updating topo file") + topo_file = import_topo_file(topology, platform) + + if not topo_file: + return -1, "error! topo_file does not exist in config file!" + + with open(topo_file, "r") as f: + topo_file_str = f.read() + + topo_file_str = update_device_ip_and_ports(topo_file_str, sim_dir) + + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + spt_or_ixia = determine_spt_or_ixia(topology, platform) + if spt_or_ixia == "spt": + spt_ip = get_spirent_ip(sim_dir) + regex = r"(\W+properties:\s*\{type: stc.*?ip:\s*)\S+(,.*?\n)" + topo_file_str = re.sub(regex, rf"\1 {spt_ip}\2", topo_file_str) + print(f"spirent ip is {spt_ip}") + # topo_config["devices"]["spt"]["properties"]["ip"] = spt_ip + elif spt_or_ixia == "ixia": + ixia_chassis_mgmt_ip = ports_config["ixia_chassis"]["mgmt_ip"] + ixia_gui_mgmt_ip = ports_config["ixia_gui"]["mgmt_ip"] + regex = ( + r"(\W+properties:\s*\{type: ixia.*?ip:\s*)\S+(,\s*ix_server:\s*)\S+(}\n)" + ) + topo_file_str = re.sub( + regex, rf"\1 {ixia_chassis_mgmt_ip}\2 {ixia_gui_mgmt_ip}\3", topo_file_str + ) + # topo_config["devices"]["T1"]["properties"]["ip"] = ixia_chassis_mgmt_ip + # topo_config["devices"]["T1"]["properties"]["ix_server"] = ixia_gui_mgmt_ip + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + with open(topo_file, "w") as f: + f.write(topo_file_str) + + # #BaseLoader does not preserve custom data types. add datatype '!include' back into topo file + # os.system(f"sed -E -i 's/([^[:space:]]+.yaml)/!include \\1/' {topo_file}") + + return 0, "" + + +def send_topo_file_to_vxr(topology, platform, sim_dir): + print("Uploading topo file to vxr sim") + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + topo_file = import_topo_file(topology, platform) + print(f"topo_file={topo_file}") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + ftp_client = client.open_sftp() + ftp_client.put(topo_file, "sonic-test/sonic-mgmt/spytest/topo") + ftp_client.close() + client.close() + + return 0, "" + + +_PY_CODING_RE = re.compile(rb"coding[=:]\s*([-\w.]+)") +_UTF8_COOKIE = b"# -*- coding: utf-8 -*-\n" + + +def _sanitized_py_bytes(local_path): + """Return UTF-8-cookied bytes for a .py file with non-ASCII content and + no PEP-263 encoding declaration; return None to upload the file as-is. + + Without this, a DUT-side Python 2 parser raises SyntaxError on the file + and the test silently disappears from the run. + """ + if not local_path.endswith(".py"): + return None + try: + with open(local_path, "rb") as f: + data = f.read() + except (IOError, OSError): + return None + + try: + data.decode("ascii") + return None + except UnicodeDecodeError: + pass + + head = data.split(b"\n", 2)[:2] + if any(_PY_CODING_RE.search(line) for line in head): + return None + + if data.startswith(b"#!"): + nl = data.find(b"\n") + if nl == -1: + return data + b"\n" + _UTF8_COOKIE + return data[:nl + 1] + _UTF8_COOKIE + data[nl + 1:] + return _UTF8_COOKIE + data + + +def _put_with_sanitize(ftp_client, local_path, remote_path, sanitized_log): + """SFTP-upload local_path; if it is a .py file with non-ASCII bytes and + no encoding cookie, upload a cookied copy instead. Records every + sanitization in `sanitized_log` for the operator log.""" + cooked = _sanitized_py_bytes(local_path) + if cooked is None: + ftp_client.put(local_path, remote_path) + return + ftp_client.putfo(io.BytesIO(cooked), remote_path) + sanitized_log.append(local_path) + + +def send_test_files_to_vxr(task, sim_dir): + print("Sending test files to vxr") + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + ftp_client = client.open_sftp() + ftp_client.put(f"{task}", f"sonic-test/sonic-mgmt/spytest/{task}") + + sanitized = [] + for root, subdirs, files in os.walk("../sonic-mgmt/spytest/templates"): + exec_command_raise_error(client, f"mkdir -p sonic-test/sonic-mgmt/{root}") + for file in files: + _put_with_sanitize( + ftp_client, + f"{root}/{file}", + f"sonic-test/sonic-mgmt/{root}/{file}", + sanitized, + ) + + for root, subdirs, files in os.walk("../sonic-mgmt/spytest/tests"): + exec_command_raise_error(client, f"mkdir -p sonic-test/sonic-mgmt/{root}") + for file in files: + _put_with_sanitize( + ftp_client, + f"{root}/{file}", + f"sonic-test/sonic-mgmt/{root}/{file}", + sanitized, + ) + + if sanitized: + print(f"[UPLOAD] injected UTF-8 coding cookie into {len(sanitized)} " + f"non-ASCII .py file(s) before SFTP to DUT:") + for p in sanitized: + print(f"[UPLOAD] {p}") + + ftp_client.close() + client.close() + + return 0, "" + + +def exec_command_raise_error(client, cmd): + print(f"executing command: '{cmd}'") + stdin, stdout, stderr = client.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + print( + f"Encountered error while executing '{cmd}', stdout: {stdout.readlines()}, stderr: {stderr.readlines()}" + ) + raise Exception(stdout.channel.recv_exit_status(), stderr.readlines()) + + return stdin, stdout, stderr + + +def configure_vxr_spt(topology, platform, tar_ball, sim_dir): + print("Configure VXR with Spitfire") + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + try: + tar_ball_name = tar_ball.split("/")[-1] + # untar sonic-test golden-code + exec_command_raise_error(client, f"wget -q {tar_ball}") + exec_command_raise_error(client, f"tar -xvf {tar_ball_name}") + + # run sonic-mgmt docker + exec_command_raise_error( + client, + "wget -q http://172.29.93.10/sonic-images/golden-code/docker-sonic-mgmt.gz", + ) + exec_command_raise_error(client, "docker load < docker-sonic-mgmt.gz") + exec_command_raise_error( + client, + "cd sonic-test/sonic-mgmt/spytest; docker run -v $PWD:/data --name 'docker-sonic-mgmt' -itd docker-sonic-mgmt /bin/bash", + ) + + # install spirent related files + exec_command_raise_error( + client, + "wget -q http://172.29.93.10/sonic-images/spirent_projects_folder.tar.gz", + ) + exec_command_raise_error( + client, + "tar -xvf spirent_projects_folder.tar.gz -C sonic-test/sonic-mgmt/spytest", + ) + + except paramiko.SSHException as e: + return -1, e + except BaseException as e: + return e.args[0], e.args[1] + + client.close() + + +def configure_vxr_ixia(topology, platform, tar_ball, sim_dir): + print("Configure VXR with IXIA") + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + try: + tar_ball_name = tar_ball.split("/")[-1] + + # untar sonic-test golden-code + exec_command_raise_error(client, f"wget -q {tar_ball}") + exec_command_raise_error(client, f"tar -xvf {tar_ball_name}") + + # run sonic-mgmt docker - use different image based on DCI flag + if is_dci: + exec_command_raise_error( + client, + "wget -q http://10.29.158.43/builds/keysight-u18070-10-0.tar", + ) + exec_command_raise_error(client, "docker load -i keysight-u18070-10-0.tar") + exec_command_raise_error( + client, + "cd sonic-test/sonic-mgmt/spytest; docker run -v $PWD:/data --name 'ixia_sonic_mgmt' -itd spytest/keysight-u18:10.00 /bin/bash", + ) + else: + exec_command_raise_error( + client, + "wget -q http://172.29.93.10/sonic-images/spytest/keysight-u18070.tar", + ) + exec_command_raise_error(client, "docker load -i keysight-u18070.tar") + exec_command_raise_error( + client, + "cd sonic-test/sonic-mgmt/spytest; docker run -v $PWD:/data --name 'ixia_sonic_mgmt' -itd spytest/keysight-u18:9.20.2201.70 /bin/bash", + ) + + except paramiko.SSHException as e: + return -1, e + except BaseException as e: + return e.args[0], e.args[1] + + +def configure_vxr(topology, platform, tar_ball, task, sim_dir): + print("Starting step: configure_vxr") + rc, msg = send_test_files_to_vxr(task, sim_dir) + if rc != 0: + return rc, msg + + return 0, "" + + +def execute_command_on_chan(chan, command="", show_output=False, sim_name=None, + wedge_timeout_sec=None): + """Send `command` on an interactive SSH channel and block until the shell + emits the completion marker. + + If `wedge_timeout_sec` is set the recv loop becomes wall-clock-supervised: + every ~30s recv slice is timed, and once total elapsed time exceeds the + budget the channel is interrupted (Ctrl-C twice, then `exit` to escape + nested docker/su shells) and a WedgedCommandError is raised. Callers are + expected to abandon further work on this channel after a wedge.""" + print(f"executing command: {command}") + termination_command = '\necho "Command Completed, exit code is: $?"\n' + termination_str = "Command Completed, exit code is:" + chan.send(command + termination_command) + + if wedge_timeout_sec is not None: + chan.settimeout(30.0) + start = time.monotonic() + try: + while True: + try: + resp = chan.recv(9999).decode("utf-8", errors="replace") + except socket.timeout: + resp = "" + + if show_output and resp: + print("resp: ", resp) + if termination_str in resp: + # the termination command command will show up initially in resp, ignore + if ( + resp.count(termination_str) == 1 + and "$?" in resp.split(termination_str)[1] + ): + continue + exit_code = resp.split(termination_str)[1] + print(f"Exit code for command {command} is: {exit_code}") + return + + if (wedge_timeout_sec is not None + and (time.monotonic() - start) > wedge_timeout_sec): + sim_label = sim_name or "" + elapsed = int(time.monotonic() - start) + print(f"[WEDGE BOUND] {sim_label}: command exceeded " + f"{wedge_timeout_sec}s ({elapsed}s elapsed) without " + f"completion marker. Sending Ctrl-C and abandoning task.") + # Two Ctrl-Cs to interrupt any nested process, then 'exit' twice + # to back out of `sudo su` and `docker exec` shells so the next + # bucket on this sim isn't trapped inside the container. + try: + chan.send("\x03\x03\nexit\nexit\n") + except Exception as escape_err: + print(f"[WEDGE BOUND] {sim_label}: failed to send escape " + f"sequence: {escape_err}") + raise WedgedCommandError( + f"command exceeded {wedge_timeout_sec}s on {sim_label}: " + f"{command.strip()[:80]}" + ) + finally: + if wedge_timeout_sec is not None: + try: + chan.settimeout(None) + except Exception: + pass + + +def run_sanity(topology, platform, task, sim_dir): + print("Starting step: run_sanity") + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + chan = client.invoke_shell() + execute_command_on_chan(chan) + + spt_or_ixia = determine_spt_or_ixia(topology, platform) + sim_name = sim_dir.split("/")[-1] + + if spt_or_ixia == "spt": + cmd = "docker exec -it docker-sonic-mgmt /bin/bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "sudo su\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "cd /data; cp -r projects /; /data/bin/tools_install.sh; export SPIRENTD_LICENSE_FILE=10.22.181.32\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "mkdir spytest_results; chmod 777 spytest_results; cd spytest_results\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"env; /data/bin/spytest --testbed /data/topo --test-suite /data/{task}\n" + try: + execute_command_on_chan(chan, cmd, show_output=True, sim_name=sim_name, + wedge_timeout_sec=WEDGE_TIMEOUT_SEC) + except WedgedCommandError as wedge_err: + print(f"[WEDGE BOUND] {sim_name}: bucket abandoned ({wedge_err})") + try: + client.close() + except Exception: + pass + return -1, f"wedged: {wedge_err}" + + elif spt_or_ixia == "ixia": + cmd = "docker exec -it ixia_sonic_mgmt bash\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "cd /data; pip install monotonic\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install retry\n" + execute_command_on_chan(chan, cmd, show_output=True) + + # Install additional packages for DCI if DCI topology is detected + if is_dci: + cmd = "pip install pyopenssl --upgrade\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install urllib3 --upgrade\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "pip install --upgrade ixnetwork-restpy==1.5.0\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "unset https_proxy http_proxy\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = "mkdir spytest_results; chmod 777 spytest_results; cd spytest_results\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"env; /data/bin/spytest --testbed /data/topo --test-suite /data/{task}\n" + try: + execute_command_on_chan(chan, cmd, show_output=True, sim_name=sim_name, + wedge_timeout_sec=WEDGE_TIMEOUT_SEC) + except WedgedCommandError as wedge_err: + print(f"[WEDGE BOUND] {sim_name}: bucket abandoned ({wedge_err})") + try: + client.close() + except Exception: + pass + return -1, f"wedged: {wedge_err}" + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + time.sleep(120) + + cmd = f"mv dashboard.html dashboard_{task}.html\n" + execute_command_on_chan(chan, cmd, show_output=True) + + cmd = f"mv build.txt build_{task}.txt\n" + execute_command_on_chan(chan, cmd, show_output=True) + return 0, "" + + +def extract_test_start_time(spytest_results_files): + test_start_time = [] + + for file in spytest_results_files: + if "summary.txt" in file: + test_start_time.append("_".join(file.split("_")[1:-1])) + + return test_start_time + +def task_failed_status(sim_dir, task): + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + ftp_client = client.open_sftp() + spytest_results_files = ftp_client.listdir(RESULT_FOLDER_PATH) + + exec_command_raise_error( + client, + f"cd {RESULT_FOLDER_PATH}; echo cisco123 | sudo -S chmod -R 644 tmp* | true", + ) + + ftp_client.get( + f"{RESULT_FOLDER_PATH}/build_{task}.txt", + f"{sim_dir}/build_{task}.txt", + ) + + build_dict = {} + global requeue_dict + try: + with open(f"{sim_dir}/build_{task}.txt", "r") as file: + for line in file: + line = line.strip() + if line: + key, value = line.split(':', 1) + build_dict[key.strip()] = value.strip() + if build_dict["Pass Rate"] != "100.00%": + if task in requeue_dict: + print(f"This tasked({task}) is already queued more than once") + return + requeue_dict[task] = sim_dir.split("/")[-1] + # Re-queue the task + task_queue.put(task) + print(f"Pass rate is not 100% for {task}, requeing") + except FileNotFoundError: + if task in requeue_dict: + print(f"This tasked({task}) is already queued more than once") + return + requeue_dict[task] = sim_dir.split("/")[-1] + # Re-queue the task + task_queue.put(task) + + +def collect_result(sim_dir): + global sum + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + ftp_client = client.open_sftp() + spytest_results_files = ftp_client.listdir(RESULT_FOLDER_PATH) + + # Added to validate locally + # Specify the directory path + # from pathlib import Path + # directory_path = Path(f'{sim_dir}/spytest_result') + + # Get the list of file names + # spytest_results_files = [f.name for f in directory_path.iterdir() if f.is_file()] + + test_start_time = extract_test_start_time(spytest_results_files) + + # No results_*_summary.txt for this SIM: the per-summary loop below would + # not iterate and sum["status"] would default to success. Mark the run + # failed here so the zero-tests-collected case exits non-zero. + if not test_start_time: + print( + f"[collect_result] WARN: {sim_dir} produced no " + "results_*_summary.txt files; marking summary failed " + "(no_report_file)." + ) + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.NO_REPORT_FILE + return 1, "no result files in spytest_result/" + + exec_command_raise_error( + client, + f"cd {RESULT_FOLDER_PATH}; echo cisco123 | sudo -S chmod -R 644 tmp* | true", + ) + + exec_command_raise_error( + client, f"cd {RESULT_FOLDER_PATH}; tar -czvf spytest_result.tar.gz *" + ) + ftp_client.get( + f"{RESULT_FOLDER_PATH}/spytest_result.tar.gz", + f"{sim_dir}/spytest_result.tar.gz", + ) + + cmd = f"mkdir -p spytest_result" + subprocess.run( + [cmd], cwd=sim_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + cmd = f"tar -xvf spytest_result.tar.gz -C spytest_result" + subprocess.run( + [cmd], cwd=sim_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + cmd = f"tar -czvf vxr.out.tar.gz vxr.out" + subprocess.run( + [cmd], cwd=sim_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + + ret = 0 + try: + summary = dict() + for time in test_start_time: + summary = { + "SIM_ID": "sim_0", + "TEST_SUITE": "test.txt", + "SCRIPT_NAME": "", + "EXEC_START_TIME": "0", + "EXEC_COMPLETION_TIME": 0, + "EXECUTION_TIME": 0, + "TOTAL_TEST": 0, + "FAILED_TEST": 0, + "PASSED_TEST": 0, + "SKIPPED_TEST": 0, + "SUCCESS_RATE": 0.0, + "LOG_REPORT": "" + } + failed_test_list = [] + spytest_result_summary_file = open( + f"{sim_dir}/spytest_result/results_{time}_summary.txt", "r" + ) + spytest_result_summary = spytest_result_summary_file.readlines() + spytest_result_summary_file.close() + + # SPYTEST_SUITE_NAME_ARG + export_file = open( + f"{sim_dir}/spytest_result/results_{time}_export.txt", "r" + ) + export_summary_data = export_file.readlines() + export_file.close() + for line in export_summary_data: + if 'SPYTEST_SUITE_NAME_ARG' in line: + suite_name = line.split('/')[-1] + summary['TEST_SUITE'] = suite_name.strip() + #print(f"{summary['TEST_SUITE']=}") + + test_file = open( + f"{sim_dir}/spytest_result/results_{time}_testcases.csv", "r" + ) + test_file_cont = csv.DictReader(test_file, skipinitialspace=True) + + summary["SIM_ID"] = sim_dir.split("/")[-1] + for line in spytest_result_summary: + if "=" not in line: + continue + + key, value = line.split("=") + key = key.strip() + value = value.strip() + + if key == "PASS": + summary["PASSED_TEST"] = int(value) + sum["passed"] += int(value) + elif key in [ + "UNSUPPORTED", + "SCRIPTERROR", + "DEPFAIL", + "ENVFAIL", + "TIMEOUT", + "FAIL", + ]: + summary["FAILED_TEST"] = int(value) + sum["failed"] += int(value) + elif key == "SKIPPED": + summary["SKIPPED_TEST"] = int(value) + sum["skipped"] += int(value) + elif key == "Test Count": + summary["TOTAL_TEST"] = int(value) + sum["total"] += int(value) + elif key == "Execution Started": + summary["EXEC_START_TIME"] = value + elif key == "Execution Completed": + summary["EXEC_COMPLETION_TIME"] = value + elif key == "Execution Time": + summary["EXECUTION_TIME"] = value + elif key == "Software Versions": + summary["SOFTWARE_VERSION"] = value + elif key == "DUT_FAIL": + summary["DUT_FAIL"] = value + elif key == "CMDFAIL": + summary["CMD_FAIL"] = value + elif key == "CONFIGFAIL": + summary["CONFIG_FAIL"] = value + elif key == "TGENFAIL": + summary["TGEN_FAIL"] = value + + tmp_sim = sim_dir.split("/")[-1] + if tmp_sim not in failed_test_dict: + failed_test_dict[tmp_sim] = [] + + summary['TC_INFO'] = [] + for row in test_file_cont: + case_summary = dict() + + module = row["Module"] + script_name = os.path.basename(row["Module"]) + test_script = os.path.basename(row["Module"]) + dir_name = os.path.dirname(row['Module']) + test_category = os.path.split(dir_name)[1] + case_summary['start_time'] = row['ExecutedOn'] + case_summary['test_case_name'] = row['TestCase'] + case_summary['state'] = row['Result'] + case_summary['test_case_full_name'] = module.split(".py")[0].replace('/', '.') + "#" + row['TestCase'] + case_summary['test_category'] = test_category + summary["SCRIPT_NAME"] = script_name + script_name = os.path.basename(script_name) + script_name = os.path.splitext(script_name)[0] + if row["Result"] != "Pass": + failed_log = "" + for report_file in spytest_results_files: + if f"{script_name}.log" in report_file: + #print(f"{report_file=}") + failed_log = report_file + failed_test_list.append((row['Module'], row['TestCase'], failed_log)) + + summary['TC_INFO'].append(case_summary) + + + failed_test_dict[tmp_sim].extend(failed_test_list) + try: + summary["SUCCESS_RATE"] = round( + summary["PASSED_TEST"] + / (summary["TOTAL_TEST"] - summary["SKIPPED_TEST"]) + * 100, + 2, + ) + sum["success_rate"] = round(sum["passed"] / (sum["total"] - sum["skipped"]) * 100, 2) + if sum["success_rate"] == 100: + # Don't downgrade an existing failure (e.g. NO_REPORT_FILE + # from an earlier SIM) to success on a later SIM's pass. + if sum["status"] != FAILURE_STATUS: + sum["status"] = SUCCESS_STATUS + else: + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.TEST_CASES_FAILED + except ZeroDivisionError as e: + print("Test script seems to have skipped") + summary["SUCCESS_RATE"] = 0.00 + sum["success_rate"] = "0.00" + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.TEST_CASES_FAILED + + log_report = f"dashboard_{summary['TEST_SUITE']}.html" + summary['LOG_REPORT'] = log_report + all_results.append(summary) + + except BaseException as e: + print("Exception! Failed to open result file!", e.args) + sum["status"] = FAILURE_STATUS + sum["failure_reason"] = FAILURE_RESONS.NO_REPORT_FILE + ret = 1 + + print(f"After SIM {{sim_dir}} cumulative result summary is: {sum}") + + return ret, "" + + +def cleanup(sim_dir): + vxr_path = f"{PYTHON3} /auto/vxr/pyvxr/pyvxr-latest/vxr.py" + subprocess.run( + [f"{vxr_path} clean"], + cwd=sim_dir, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + universal_newlines=True, + check=True, + ) + + return 0, "" + + +def import_pyvxr_yaml_file(topology, platform): + print(f"get vxr config for topology: {topology}, platform: {platform}") + + with open(TOPO_PLATFORM_FILE_MAP) as cfg_file: + TOPO_PLATFORM_FILE_DICT = json.load(cfg_file) + + print( + "Topo & platform to filename mapping dict: '{}'".format(TOPO_PLATFORM_FILE_DICT) + ) + + if topology in TOPO_PLATFORM_FILE_DICT: + if platform in TOPO_PLATFORM_FILE_DICT[topology]: + pyvxr_yaml_file = TOPO_PLATFORM_FILE_DICT[topology][platform]["pyvxr_yaml_file"] + + return pyvxr_yaml_file + + +def import_topo_file(topology, platform): + print(f"get topo config for topology: {topology}, platform: {platform}") + + with open(TOPO_PLATFORM_FILE_MAP) as cfg_file: + TOPO_PLATFORM_FILE_DICT = json.load(cfg_file) + + topo_file = None + if topology in TOPO_PLATFORM_FILE_DICT: + if ( + platform in TOPO_PLATFORM_FILE_DICT[topology] + and "topo_file" in TOPO_PLATFORM_FILE_DICT[topology][platform] + ): + topo_file = TOPO_PLATFORM_FILE_DICT[topology][platform]["topo_file"] + + return topo_file + +def check_and_ftp_upload_run_cmd(client, ftp_client, local_file_name_f, remote_ftp_dir, remote_file_name_f, optional_cmd=None): + # Check if the local file exists before attempting to upload it + if os.path.exists(local_file_name_f): + # Perform the FTP put operation + ftp_client.put(local_file_name_f, f"{remote_ftp_dir}/{remote_file_name_f}") + if optional_cmd is None: + # nothing to be done in remote + pass + else: + exec_command_raise_error(client, f"{optional_cmd}") + else: + # Handle the case where the file does not exist + print(f"Warn: The local file '{local_file_name_f}' does not exist.") + +def upload_result(unique_dir_name, sim_dir): + print("Uploading result to server") + sim_name = os.path.basename(sim_dir) + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect("sonic-ucs-m3-1", username="ringcicd", password="cicd_sonic") + + ftp_client = client.open_sftp() + spytest_results_files = os.listdir(f"{sim_dir}/") + ftp_dir = "/auto/vxr1/sonic-images/ringcicd" + prefix_unique_dir_name = f"spytest_result_{unique_dir_name}" + + dir_list = ftp_client.listdir(ftp_dir) + if not prefix_unique_dir_name in dir_list: + ftp_client.mkdir( + f"{ftp_dir}/{prefix_unique_dir_name}" + ) + + # SIM specific spytest result tar gz file + # Define the local file path + remote_exec_cmd = f"cd {ftp_dir}/{prefix_unique_dir_name}; tar -xvf spytest_result_{sim_name}.tar.gz" + local_sim_spytest_result_tar_f = f"{sim_dir}/spytest_result.tar.gz" + check_and_ftp_upload_run_cmd(client, ftp_client, local_sim_spytest_result_tar_f, + f"{ftp_dir}/{prefix_unique_dir_name}/", + f"spytest_result_{sim_name}.tar.gz", + remote_exec_cmd) + # SIM specific vxr.out file + # Define the local file path + local_sim_vxr_out_f = f"{sim_dir}/vxr.out.tar.gz" + check_and_ftp_upload_run_cmd(client, ftp_client, local_sim_vxr_out_f, + f"{ftp_dir}/{prefix_unique_dir_name}/", + f"vxr.out_{sim_name}.tar.gz") + + report_file = 'test_execution_report.html' + report_abs_path = os.path.abspath(report_file) + check_and_ftp_upload_run_cmd(client, ftp_client, report_abs_path, + f"{ftp_dir}/{prefix_unique_dir_name}/", + report_file) + + ''' + parallel_log_file = os.path.basename(PARALLEL_LOG) + if not os.path.exists(PARALLEL_LOG): + parallel_log_file = None + ftp_client.put(PARALLEL_LOG, f"{ftp_dir}/{prefix_unique_dir_name}/{parallel_log_file}") + ''' + + # upload the 'new_results.json' file too + check_and_ftp_upload_run_cmd(client, ftp_client, NEW_SUMMARY_REPORT_PATH, + f"{ftp_dir}/{prefix_unique_dir_name}/", + NEW_SUMMARY_REPORT_FILENAME) + + return 0, "" + + +def start_vxrs(topo_yaml, topology, platform, tar_ball, sim_dir): + print(f"{sim_dir}:Starting step: start_vxr") + vxr_path = f"{PYTHON3} /auto/vxr/pyvxr/pyvxr-latest/vxr.py" + + result = subprocess.run( + ["pwd"], cwd=sim_dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + print(result.stdout) + result = subprocess.run( + ["ls"], cwd=sim_dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + print(f"Op={result.stdout}") + # clean if any topo if already exists + # sim_output = subprocess.check_output(f'{vxr_path} clean', shell=True, cwd=sim_dir).strip() + subprocess.run( + [f"{vxr_path} clean"], + cwd=sim_dir, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + universal_newlines=True, + check=True, + ) + + cmd = "bash -c '{} start {} |& tee sim_op.log'".format(vxr_path, topo_yaml) + print(f"cmd: {cmd}") + print(f"DEBUG: yaml_path_arg={topo_yaml} yaml_exists={os.path.exists(os.path.join(sim_dir, topo_yaml))}") + subprocess.run( + [cmd], cwd=sim_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + + log_path = os.path.join(sim_dir, "sim_op.log") + if os.path.exists(log_path): + with open(log_path) as _f: + print(f"--- sim_op.log ({sim_dir}) BEGIN ---") + print(_f.read()) + print(f"--- sim_op.log ({sim_dir}) END ---") + else: + print(f"DEBUG: {log_path} does not exist after vxr.py start!") + + # Sim up + sim_output = subprocess.check_output( + "grep -i 'sim up' sim_op.log | wc -l", shell=True, cwd=sim_dir + ).strip() + print(f"SIM OUT={sim_output}") + + global failure_sims + # Populate results file with failure data + if not int(sim_output): + failure_sims.append(sim_dir.split("/")[-1]) + return -1, "Sim is not up. Exiting now" + + time.sleep(300) + + cmd = f"{vxr_path} ports > {VXR_PORTS_FILENAME}" + subprocess.run( + [cmd], cwd=sim_dir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, check=True + ) + + # Configure VXR with static files + spt_or_ixia = determine_spt_or_ixia(topology, platform) + + if spt_or_ixia == "spt": + configure_vxr_spt(topology, platform, tar_ball, sim_dir) + elif spt_or_ixia == "ixia": + configure_vxr_ixia(topology, platform, tar_ball, sim_dir) + else: + return -1, "ERROR! Could not find ixia or spt in pyvxr yaml file!" + + rc, msg = update_topo_file(topology, platform, sim_dir) + if rc != 0: + return rc, msg + rc, msg = send_topo_file_to_vxr(topology, platform, sim_dir) + if rc != 0: + return rc, msg + + return 0, "" + + +import queue + +task_queue = queue.Queue() + +def create_multiple_suit_file(suit_file): + try: + global task_queue + with open(suit_file, "r") as f: + lines = f.readlines() + + # Identify the split index for filenames and common arguments + split_index = lines.index("#Runtime Arguments\n") + + # Extract filenames and common arguments + filenames = [ + line.strip() for line in lines[:split_index] if line.startswith("+file:") + ] + common_args = lines[split_index:] + + # Create separate files for each filename + for index, filename in enumerate(filenames, start=1): + output_filename = f"file_{index}" + with open(output_filename, "w") as out_file: + out_file.write("# Modules\n") + out_file.write(filename + "\n\n") + out_file.writelines(common_args) + print(f"Created file: {output_filename}") + task_queue.put(output_filename) + + except FileNotFoundError: + print(f"The source file '{suit_file}' does not exist.") + except BaseException as e: + print(f"An unexpected error occurred: {e}") + +def sim_error_state(sim_dir,): + ports_config = get_ports_config(f"{sim_dir}/vxr_ports.yaml") + + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + ports_config["sonic_mgmt"]["HostAgent"], + ports_config["sonic_mgmt"]["xr_redir22"], + "vxr", + "cisco123", + ) + + latest_time = 0 + latest_result_log = None + sftp = client.open_sftp() + sftp.chdir(RESULT_FOLDER_PATH) + + for fileattr in sftp.listdir_attr(): + if (fileattr.filename.endswith('logs.log') and fileattr.filename.startswith('results') + and fileattr.st_mtime > latest_time): + latest_time = fileattr.st_mtime + latest_result_log = fileattr.filename + + if latest_result_log is None: + return False + + remote_command = f"tail -n10 {RESULT_FOLDER_PATH}/{latest_result_log}" + stdin, stdout, stderr = exec_command_raise_error(client, remote_command) + last_lines = stdout.read().decode('utf-8') + for line in last_lines.split("\n"): + if "ERROR Failed to connect TGEN" in line: + return True + + return False + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + tar_ball = args["tar_ball"] + topo_yaml = args["topo_yaml"] + topology = args["topology"] + platform = args["platform"] + script_file = args["script_file"] + NUM_OF_SIM = args["num_of_threads"] + + # Get current timestamp and process id + timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + process_id = os.getpid() + + # Create a unique name using timestamp, process id, and uuid + unique_dir_name = f"{timestamp}_{process_id}_{uuid.uuid4().hex[:8]}" + print(f"unique_dir_name: {unique_dir_name}") + + prefix_unique_dir_name = f"spytest_result_{unique_dir_name}" + + topo_yaml = import_pyvxr_yaml_file(topology, platform) + cur_dir = os.getcwd() + threads = [] + exec_threads = [] + + # Create multiple vxr topo yaml files for each thread + _add_simulator_tags(topo_yaml, args) + + # Create multiple suit files based on number of file we have in given suit file + suit_file = f"../sonic-mgmt/spytest/{script_file}" + create_multiple_suit_file(suit_file) + + # Stage 1: Spawn all vxr topologies + for i in range(1, NUM_OF_SIM + 1): + sim_dir = f"{cur_dir}/sim_{i}" + sim_yaml = os.path.join(cur_dir, f"sim_{i}.yaml") + if not os.path.exists(sim_yaml): + print("Something is wrong") + # sys.exit(0) + os.makedirs(sim_dir, exist_ok=True) + thread = threading.Thread( + target=start_vxrs, args=(f"../sim_{i}.yaml", topology, platform, tar_ball, sim_dir) + ) + threads.append(thread) + thread.start() + + # Wait for all threads to finish + for thread in threads: + thread.join() + + #print("Sim's are UP!!!") + + #Stage 2: Run sanity on the topology spawned + for i in range(1, NUM_OF_SIM+1): + if f"sim_{i}" in failure_sims: + continue + sim_dir = f"{cur_dir}/sim_{i}" + sim_yaml = os.path.join(cur_dir, f'sim_{i}.yaml') + thread = SimThread(f"../sim_{i}.yaml", topology, platform, tar_ball, sim_dir) + exec_threads.append(thread) + thread.start() + + # Wait for all threads to finish + for thread in exec_threads: + thread.join() + + print("Test runs are completed, collect logs") + print("\nTest Result:") + + # Stage 3: Collect logs from all topology run + sim_exception_count = 0 + for i in range(1, NUM_OF_SIM + 1): + # Compute sim_dir per iteration so each SIM checks its own files. + sim_dir = f"{cur_dir}/sim_{i}" + try: + # Checking for ports file before collecting logs, in case sim never came up we will get exception + get_ports_config(f"{sim_dir}/vxr_ports.yaml") + rc, msg = collect_result(sim_dir) + if rc != 0: + print(f"error at collect_result! msg: {msg}") + except Exception as exc: + import traceback + print(f"WARN: exception in SIM #{i}: {type(exc).__name__}: {exc}") + print(f"WARN: traceback for SIM #{i}:\n{traceback.format_exc()}") + sim_exception_count += 1 + continue + + if sim_exception_count == NUM_OF_SIM: + # All SIMs failed: exit non-zero so the pipeline marks the run failed. + print(f"None of the SIMs (NUM_OF_SIM:{NUM_OF_SIM}) came up; exiting") + print(f"Waiting for logs check...") + sys.exit(1) + + test_data = {'script_data': all_results, 'failed_tc_data': failed_test_dict} + with open(NEW_SUMMARY_REPORT_PATH, 'w') as file: + json.dump(test_data, file, indent=2) + + print(f"{test_data}") + parallel_log = os.path.basename(PARALLEL_LOG) + # generate_test_report returns False on empty script_data; honour it so + # the run is marked failed rather than passing on a stub report. + report_ok = html_report.generate_test_report( + all_results, failed_test_dict, log=parallel_log + ) + if report_ok is False: + print( + "[main] HTML report generator received empty script_data; " + "forcing FAILURE_STATUS so this run reports red." + ) + sum["status"] = FAILURE_STATUS + sum.setdefault("failure_reason", str(FAILURE_RESONS.NO_REPORT_FILE)) + + for i in range(1, NUM_OF_SIM + 1): + sim_dir = f"{cur_dir}/sim_{i}" + rc, msg = upload_result(unique_dir_name, sim_dir) + if rc != 0: + print(f"error at upload_result! msg: {msg}") + + for i in range(1, NUM_OF_SIM + 1): + if f"sim_{i}" in failure_sims: + continue + sim_dir = f"{cur_dir}/sim_{i}" + cleanup(sim_dir) + + # TODO: + # store only sim_1 tarball for now; others needs to be added + sum["log_tarball_link"] = f"http://172.29.93.10/sonic-images/ringcicd/{prefix_unique_dir_name}/spytest_result_sim_1.tar.gz" + # store the test execution report html for easier access via results summary + sum["report_link"] = f"http://172.29.93.10/sonic-images/ringcicd/{prefix_unique_dir_name}/test_execution_report.html" + + # Wedged buckets produce no result file; mark the run failed and record + # the abandoned bucket list before the summary is persisted so the + # on-disk summary matches the exit code. + if wedged_buckets: + print(f"[WEDGE BOUND] {len(wedged_buckets)} bucket(s) abandoned due " + f"to wedge timeout; forcing run status to failure. Details: " + f"{wedged_buckets}") + sum["status"] = FAILURE_STATUS + sum["wedged_buckets"] = wedged_buckets + + #generate report files for pipeline + sum_f = open(SUMMARY_REPORT_PATH, "w") + com_f = open(COMMON_REPORT_PATH, "w") + + json.dump(sum, sum_f) + json.dump(sum, com_f) + + sum_f.close() + com_f.close() + + ''' + ftp_dir = "/auto/vxr1/sonic-images/ringcicd" + summary_file = os.path.basename(SUMMARY_REPORT_PATH) + if os.path.exists(SUMMARY_REPORT_PATH): + ftp_client.put(SUMMARY_REPORT_PATH, f"{ftp_dir}/{prefix_unique_dir_name}/{summary_file}") + ''' + + # commenting out build 18299 specific hardcoded update to grafana + # access_pg_db.trigger(NEW_SUMMARY_REPORT_PATH, job_base_name=f"pipeline1_sanity_{unique_dir_name}", build_id=18299) + url = f'url: http://172.29.93.10/sonic-images/ringcicd/spytest_result_{unique_dir_name}/test_execution_report.html' + print( + f"Successfully uploaded test result\n{url}" + ) + + if sum["status"] == FAILURE_STATUS: + print(f"some failure detected! Please check logs. Result summary: {sum}") + sys.exit(1) + +if __name__ == "__main__": + main() + diff --git a/infra/sanity-scripts/apple_cvt_ipfabric.yaml b/infra/sanity-scripts/apple_cvt_ipfabric.yaml new file mode 100644 index 00000000000..6075668b30f --- /dev/null +++ b/infra/sanity-scripts/apple_cvt_ipfabric.yaml @@ -0,0 +1,5 @@ +baseline: + apple-solution-ipfabric: + mth64: + hw: + - cisco/apple_cvt/test_packet_capture.py \ No newline at end of file diff --git a/infra/sanity-scripts/azure_smoke_tests.txt b/infra/sanity-scripts/azure_smoke_tests.txt new file mode 100644 index 00000000000..79cdcb56327 --- /dev/null +++ b/infra/sanity-scripts/azure_smoke_tests.txt @@ -0,0 +1,53 @@ +bgp/test_bgp_fact.py +test_features.py +test_interfaces.py +test_nbr_health.py +arp/test_arpall.py +cacl/test_cacl_application.py +dhcp_relay/test_dhcp_relay.py +lldp/test_lldp.py +monit/test_monit_status.py::test_monit_status +mvrf/test_mgmtvrf.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +#platform_tests/api/test_fan_drawer_fans.py +#platform_tests/api/test_fan_drawer.py +#platform_tests/api/test_psu_fans.py +#platform_tests/api/test_psu.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +#platform_tests/api/test_watchdog.py +#platform_tests/cli/test_show_platform.py +platform_tests/daemon/test_pcied.py +platform_tests/test_reload_config.py::test_reload_configuration_checks +portstat/test_portstat.py +process_monitoring/test_critical_process_monitoring.py +scp/test_scp_copy.py::test_scp_copy +snmp/test_snmp_memory.py::test_snmp_memory_load +snmp/test_snmp_v2mib.py::test_snmp_v2mib +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +syslog/test_syslog.py::test_syslog +system_health/test_system_status.py +tacacs/test_jit_user.py::test_jit_user +tacacs/test_ro_disk.py::test_ro_disk +tacacs/test_ro_user.py::test_ro_user_allowed_command +tacacs/test_ro_user.py::test_ro_user_banned_command +#tacacs/test_ro_user.py:::test_ro_user_ipv6 +telemetry/test_telemetry.py +test_posttest.py +test_pretest.py +bgp/test_bgpmon.py +bgp/test_bgp_update_timer.py +bgp/test_bgp_gr_helper.py +#fib/test_fib.py::test_basic_fib +fib/test_fib.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_pfc_counters.py::test_snmp_pfc_counters +snmp/test_snmp_memory.py::test_snmp_memory +snmp/test_snmp_fdb.py::test_snmp_fdb_send_tagged +snmp/test_snmp_loopback.py::test_snmp_loopback +route/test_static_route.py +acl/test_acl.py::TestBasicAcl diff --git a/infra/sanity-scripts/ring1_sanity.txt b/infra/sanity-scripts/ring1_sanity.txt new file mode 100755 index 00000000000..8921ef506ef --- /dev/null +++ b/infra/sanity-scripts/ring1_sanity.txt @@ -0,0 +1,22 @@ +test_features.py +test_interfaces.py +test_nbr_health.py +test_pretest.py +lldp/test_lldp.py::test_lldp +test_posttest.py +arp/test_arpall.py::test_arp_no_reply_src_out_range +arp/test_neighbor_mac_noptf.py::testNeighborMacNoPtf +cacl/test_cacl_application.py +monit/test_monit_status.py::test_monit_status +mvrf/test_mgmtvrf.py:test_curl +scp/test_scp_copy.py::test_scp_copy +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +platform_tests/cli/test_show_platform.py::test_show_platform_psustatus_json +platform_tests/cli/test_show_platform.py::test_show_platform_psustatus +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +process_monitoring/test_critical_process_monitoring.py::test_monitoring_critical_processes +pc/test_po_cleanup.py +platform_tests/test_reload_config.py::test_reload_configuration_checks \ No newline at end of file diff --git a/infra/sanity-scripts/ring2.yaml b/infra/sanity-scripts/ring2.yaml new file mode 100644 index 00000000000..3825a53654d --- /dev/null +++ b/infra/sanity-scripts/ring2.yaml @@ -0,0 +1,379 @@ +################################################################################ +# CICD test list - Ring2 # +################################################################################ +# +# This structure organizes a list of tests in two layers: +# TEST_CATEGORY: Defines a subset of sonic-mgmt tests. +# TOPOLOGY: Defines the type of topology in which the test is run. +# PLATFORM: Defines the type of platform in which the test is run +# SIM_OR_HW: Defines sim/hw specific test cases +# +# In other words, the hierarchy is: +# TEST_CATEGORY -> TOPOLOGY -> PLATFORM -> SIM_OR_HW -> [list of tests] +# +# TOPOLOGY section will always include a 'all_topo' key, which serves as a base. +# PLATFORM section will always include a 'all_pids' +# SIM_OR_HW key can be either 'sim', or 'hw' +# +# Example: +# +# example-ring2.yaml +# +# +# baseline: +# all_topo: +# all_pids: +# sim: +# - bgp/test_bgp_fact.py +# - fib/test_fib.py +# - ipfwd/test_mtu.py +# - test_features.py +# - test_interfaces.py +# - test_nbr_health.py +# - test_pre-test.py +# - test_procdockerstatsd.py +# - test_announce_routes.py +# - test_posttest.py +# - test_pretest.py +# ROUTING: +# all_topo: +# all_pids: +# sim: +# - bgp/test_4-byte_asn_community.py +# - bgp/test_bgp_update_timer.py +# - bgp/test_ipv6_nlri_over_ipv4.py +# PFC: +# all_topo: +# all_pids: +# sim: +# - cisco/platform_tests/test_serviceability_pfc.py +# - pfcwd/test_pfc_config.py +# t0-64: +# all_pids: +# sim: +# - generic_config_updater/test_pfcwd_status.py +# - generic_config_updater/test_pg_headroom_update.py +# - cisco/qos/test_cpu_port_config.py +# - cisco/qos/test_pg_profile_lookup.py +# t1-64-lag: +# all_pids: +# sim: +# - generic_config_updater/test_pfcwd_status.py +# - generic_config_updater/test_pg_headroom_update.py +# - cisco/qos/test_cpu_port_config.py +# mth64: +# sim: +# - cisco/qos/test_pg_profile_lookup.py +# +# How the test list is created +# - a list of TEST_CATEGORY is given(must have at least one) +# - For each TEST_CATEGORY: +# - tests in TEST_CATEGORY/all_topo/all_pids are included +# - if TOPOLOGY is specified, and TEST_CATEGORY/TOPOLOGY exists, tests in TEST_CATEGORY/TOPOLOGY/all_pids are included +# - if TOPOLOGY and PLATFORM are specified, and TEST_CATEGORY/TOPOLOGY/PLATFORM exists, tests in TEST_CATEGORY/TOPOLOGY/PLATFORM are included +# - depending on sim/hw run, test cases in 'sim' or 'hw' are included +# - Any duplicate test entries are removed. +# - You now have your final test list! + +baseline: + t0-64: # T0-64 is the preferred topology for all tests + mth64: # MTH64 is the preferred platform for all tests. + sim: + - bgp/test_bgp_fact.py + #- decap/test_decap.py + - fib/test_fib.py + - ipfwd/test_mtu.py + #- ipfwd/test_dip_sip.py + #- ipfwd/test_dir_bcast.py + #- ipfwd/test_nhop_group.py + - test_features.py + - test_interfaces.py + - test_nbr_health.py + - test_pre-test.py + - test_procdockerstatsd.py + - test_announce_routes.py + - test_posttest.py + - test_pretest.py + - cisco/platform_tests/test_serviceability_basic.py::test_show_platform_npu_all + t2-min: + sfd: + sim: + - bgp/test_bgp_fact.py + - fib/test_fib.py + - ipfwd/test_mtu.py + - test_interfaces.py + - test_nbr_health.py + - test_pre-test.py + - test_procdockerstatsd.py + - test_announce_routes.py + - test_posttest.py + - test_pretest.py + - cisco/platform_tests/test_serviceability_basic.py::test_show_platform_npu_all + t1: + lightning,superbolt: + sim: + - bgp/test_bgp_fact.py + #- decap/test_decap.py + #- fib/test_fib.py + - ipfwd/test_mtu.py + #- ipfwd/test_dip_sip.py + #- ipfwd/test_dir_bcast.py + #- ipfwd/test_nhop_group.py + - test_features.py + - test_interfaces.py + - test_nbr_health.py + - test_pre-test.py + - test_procdockerstatsd.py + - test_announce_routes.py + - test_posttest.py + - test_pretest.py + +ROUTING: #Sridhar Santhanam + t0-64: + mth64: + sim: + #- bgp/test_4-byte_asn_community.py MIGSOFTWAR-32245 + #- bgp/test_bgp_allow_list.py + #- bgp/test_bgp_dual_asn.py + #- bgp/test_bgp_session.py + #- bgp/test_bgp_session_flap.py + #- bgp/test_bgp_speaker.py + - bgp/test_bgp_update_timer.py + #- bgp/test_ipv6_nlri_over_ipv4.py MIGSOFTWAR-32232 + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_route_flap.py + - route/test_default_route.py::test_default_route_with_bgp_flap + t2-min: + sfd: + sim: + - bgp/test_4-byte_asn_community.py + - bgp/test_bgp_update_timer.py + - bgp/test_ipv6_nlri_over_ipv4.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_route_flap.py + t1: + lightning,superbolt: + sim: + - bgp/test_4-byte_asn_community.py + #- bgp/test_bgp_allow_list.py + #- bgp/test_bgp_dual_asn.py + #- bgp/test_bgp_session.py + #- bgp/test_bgp_session_flap.py + #- bgp/test_bgp_speaker.py + - bgp/test_bgp_update_timer.py + - bgp/test_ipv6_nlri_over_ipv4.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_route_flap.py + - route/test_default_route.py::test_default_route_with_bgp_flap + +FWD: #Rajendra Thirumurthi + t0-64: + mth64: + sim: + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_neighbor_mac_change + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_remove_unused_ecmp_next_hop + - acl/test_acl.py::TestBasicAcl + t2-min: + sfd: + sim: + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_neighbor_mac_change + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_remove_unused_ecmp_next_hop + t1: + lightning,superbolt: + sim: + - drop_packets/test_drop_counters.py::test_absent_ip_header + - drop_packets/test_drop_counters.py::test_acl_drop + +PLT: #Mridul Bajpai + t0-64: + mth64: + sim: + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status + t2-min: + sfd: + sim: + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status + t1: + lightning,superbolt: + sim: + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status + +INFRA: #Anand Mehra + t0-64: + mth64: + sim: + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - monit/test_monit_status.py + - syslog/test_syslog_rate_limit.py + #- system_health/test_system_health.py + t2-min: + sfd: + sim: + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - monit/test_monit_status.py + - syslog/test_syslog_rate_limit.py + #- system_health/test_system_health.py + t1: + lightning,superbolt: + sim: + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - monit/test_monit_status.py + - syslog/test_syslog_rate_limit.py + #- system_health/test_system_health.py + +MGMT: #Anukul Verma / Bidipta Das + t0-64: + mth64: + sim: + - dns/test_dns_resolv_conf.py + - generic_config_updater/test_ntp.py + - gnmi/test_gnmi.py + - gnmi/test_gnmi_configdb.py + - gnmi/openconfig/test_openconfig_bgpglobal.py + - gnmi/openconfig/test_openconfig_interfaces.py + - http/test_http_copy.py + - memory_checker/test_memory_checker.py + #- mvrf/test_mgmtvrf.py //https://github.com/sonic-net/sonic-mgmt/issues/3589 + - passw_hardening/test_passw_hardening.py + - restapi/test_restapi.py + - snmp/test_snmp_lldp.py + - ssh/test_ssh_default_password.py + - tacacs/test_rw_user.py::test_rw_user + - telemetry/test_telemetry.py + t2-min: + sfd: + sim: + - dns/static_dns/test_static_dns.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - ssh/test_ssh_limit.py + t1: + lightning,superbolt: + sim: + - dns/static_dns/test_static_dns.py + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ntp.py + - gnmi/test_gnmi.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - ssh/test_ssh_limit.py + +L2: #Venkata Gouri Rajesh Etla / Bidipta Das + t0-64: + mth64: + sim: + - arp/test_arp_extended.py + - arp/test_neighbor_mac_noptf.py + - arp/test_arp_update.py + - arp/test_neighbor_mac.py + - generic_config_updater/test_portchannel_interface.py + - generic_config_updater/test_vlan_interface.py + - l2/test_l2_configure.py + - lldp/test_lldp.py + - lldp/test_lldp_syncd.py + - pc/test_lag_2.py + - pc/test_lag_member_forwarding.py + - pc/test_po_update.py + - vlan/test_vlan.py + t2-min: + sfd: + sim: + - arp/test_neighbor_mac.py + t1: + lightning,superbolt: + sim: + #- fdb/test_fdb.py + #- fdb/test_fdb_flush.py + - arp/test_neighbor_mac.py + +PFC: #Alpesh Patel / Sonum Mathur + t0-64: + mth64: + sim: + - cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py + - generic_config_updater/test_pfcwd_status.py + - generic_config_updater/test_pg_headroom_update.py + - cisco/qos/test_cpu_port_config.py + - cisco/qos/test_pg_profile_lookup.py + t1-64-lag: + mth64: + sim: + - cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py + - generic_config_updater/test_pfcwd_status.py + - generic_config_updater/test_pg_headroom_update.py + - cisco/qos/test_cpu_port_config.py + - cisco/qos/test_pg_profile_lookup.py + t2-min: + sfd: + sim: + - cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py #works with LC. Errors out for RP, which is ok + # - cisco/qos/test_cpu_port_config.py (enable after fix for MIGSOFTWAR-22760) + # - cisco/qos/test_pg_profile_lookup.py (enable after fix for MIGSOFTWAR-22762) + t1: + lightning,superbolt: + sim: + #- cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py + - generic_config_updater/test_pfcwd_status.py + - generic_config_updater/test_pg_headroom_update.py + #- cisco/qos/test_cpu_port_config.py + - cisco/qos/test_pg_profile_lookup.py + +#this is what we used to run +#this test tag will not be used, it is here jsut for reference +# LEGACY: +# all_topo: +# - bgp/test_bgp_fact.py +# - memory_checker/test_memory_checker.py::test_memory_checker_without_container_created[mathilda-01-mathilda-01|telemetry] +# - monit/test_monit_status.py::test_monit_status +# - mvrf/test_mgmtvrf.py:test_ping +# - mvrf/test_mgmtvrf.py:test_snmp_fact +# - platform_tests/cli/test_show_platform.py::test_show_platform_summary +# - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +# - platform_tests/cli/test_show_platform.py::test_show_platform_temperature +# - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status +# - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +# - platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +# - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +# - test_interfaces.py +# - test_posttest.py +# - test_pretest.py::test_cleanup_cache +# - test_pretest.py::test_cleanup_testbed +# - test_pretest.py::test_collect_testbed_prio +# - test_pretest.py::test_disable_container_autorestart +# - test_pretest.py::test_disable_rsyslog_rate_limit +# - test_pretest.py::test_features_state +# - test_pretest.py::test_generate_running_golden_config +# - test_pretest.py::test_stop_pfcwd +# - test_pretest.py::test_update_saithrift_ptf +# - test_procdockerstatsd.py::test_verify_redisexport diff --git a/infra/sanity-scripts/ring2/dimm.txt b/infra/sanity-scripts/ring2/dimm.txt new file mode 100644 index 00000000000..1b843a25a67 --- /dev/null +++ b/infra/sanity-scripts/ring2/dimm.txt @@ -0,0 +1,12 @@ +test_interfaces.py +test_procdockerstatsd.py +lldp/test_lldp.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd \ No newline at end of file diff --git a/infra/sanity-scripts/ring2/fpd.txt b/infra/sanity-scripts/ring2/fpd.txt new file mode 100644 index 00000000000..1b843a25a67 --- /dev/null +++ b/infra/sanity-scripts/ring2/fpd.txt @@ -0,0 +1,12 @@ +test_interfaces.py +test_procdockerstatsd.py +lldp/test_lldp.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd \ No newline at end of file diff --git a/infra/sanity-scripts/ring2/kmod.txt b/infra/sanity-scripts/ring2/kmod.txt new file mode 100644 index 00000000000..1b843a25a67 --- /dev/null +++ b/infra/sanity-scripts/ring2/kmod.txt @@ -0,0 +1,12 @@ +test_interfaces.py +test_procdockerstatsd.py +lldp/test_lldp.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd \ No newline at end of file diff --git a/infra/sanity-scripts/ring2/tam-driver.txt b/infra/sanity-scripts/ring2/tam-driver.txt new file mode 100644 index 00000000000..1b843a25a67 --- /dev/null +++ b/infra/sanity-scripts/ring2/tam-driver.txt @@ -0,0 +1,12 @@ +test_interfaces.py +test_procdockerstatsd.py +lldp/test_lldp.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd \ No newline at end of file diff --git a/infra/sanity-scripts/ring2/tam-library.txt b/infra/sanity-scripts/ring2/tam-library.txt new file mode 100644 index 00000000000..1b843a25a67 --- /dev/null +++ b/infra/sanity-scripts/ring2/tam-library.txt @@ -0,0 +1,12 @@ +test_interfaces.py +test_procdockerstatsd.py +lldp/test_lldp.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd \ No newline at end of file diff --git a/infra/sanity-scripts/ring2_bsp.txt b/infra/sanity-scripts/ring2_bsp.txt new file mode 100644 index 00000000000..e48251427e2 --- /dev/null +++ b/infra/sanity-scripts/ring2_bsp.txt @@ -0,0 +1,23 @@ +memory_checker/test_memory_checker.py::test_memory_checker_without_container_created[mathilda-01-mathilda-01|telemetry] +monit/test_monit_status.py::test_monit_status +mvrf/test_mgmtvrf.py:test_ping +mvrf/test_mgmtvrf.py:test_snmp_fact +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +test_interfaces.py +test_posttest.py +test_procdockerstatsd.py::test_verify_redisexport +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_pretest.py::test_update_saithrift_ptf diff --git a/infra/sanity-scripts/ring2_bsp_sfd_test_list.txt b/infra/sanity-scripts/ring2_bsp_sfd_test_list.txt new file mode 100644 index 00000000000..33c5a0a48e0 --- /dev/null +++ b/infra/sanity-scripts/ring2_bsp_sfd_test_list.txt @@ -0,0 +1,22 @@ +memory_checker/test_memory_checker.py::test_memory_checker_without_container_created[mathilda-01-mathilda-01|telemetry] +monit/test_monit_status.py::test_monit_status +mvrf/test_mgmtvrf.py:test_ping +mvrf/test_mgmtvrf.py:test_snmp_fact +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +test_interfaces.py +test_posttest.py +test_procdockerstatsd.py::test_verify_redisexport +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_pretest.py::test_update_saithrift_ptf diff --git a/infra/sanity-scripts/ring2_master.yaml b/infra/sanity-scripts/ring2_master.yaml new file mode 100644 index 00000000000..1408f3958ce --- /dev/null +++ b/infra/sanity-scripts/ring2_master.yaml @@ -0,0 +1,365 @@ +################################################################################ +# CICD test list - Ring2 # +################################################################################ +# +# This structure organizes a list of tests in two layers: +# TEST_CATEGORY: Defines a subset of sonic-mgmt tests. +# TOPOLOGY: Defines the type of topology in which the test is run. +# PLATFORM: Defines the type of platform in which the test is run +# SIM_OR_HW: Defines sim/hw specific test cases +# +# In other words, the hierarchy is: +# TEST_CATEGORY -> TOPOLOGY -> PLATFORM -> SIM_OR_HW -> [list of tests] +# +# TOPOLOGY section will always include a 'all_topo' key, which serves as a base. +# PLATFORM section will always include a 'all_pids' +# SIM_OR_HW key can be either 'sim', or 'hw' +# +# Example: +# +# example-ring2.yaml +# +# +# baseline: +# all_topo: +# all_pids: +# sim: +# - bgp/test_bgp_fact.py +# - fib/test_fib.py +# - ipfwd/test_mtu.py +# - test_features.py +# - test_interfaces.py +# - test_nbr_health.py +# - test_pre-test.py +# - test_procdockerstatsd.py +# - test_announce_routes.py +# - test_posttest.py +# - test_pretest.py +# ROUTING: +# all_topo: +# all_pids: +# sim: +# - bgp/test_4-byte_asn_community.py +# - bgp/test_bgp_update_timer.py +# - bgp/test_ipv6_nlri_over_ipv4.py +# PFC: +# all_topo: +# all_pids: +# sim: +# - cisco/platform_tests/test_serviceability_pfc.py +# - pfcwd/test_pfc_config.py +# t0-64: +# all_pids: +# sim: +# - generic_config_updater/test_pfcwd_status.py +# - generic_config_updater/test_pg_headroom_update.py +# - cisco/qos/test_cpu_port_config.py +# - cisco/qos/test_pg_profile_lookup.py +# t1-64-lag: +# all_pids: +# sim: +# - generic_config_updater/test_pfcwd_status.py +# - generic_config_updater/test_pg_headroom_update.py +# - cisco/qos/test_cpu_port_config.py +# mth64: +# sim: +# - cisco/qos/test_pg_profile_lookup.py +# +# How the test list is created +# - a list of TEST_CATEGORY is given(must have at least one) +# - For each TEST_CATEGORY: +# - tests in TEST_CATEGORY/all_topo/all_pids are included +# - if TOPOLOGY is specified, and TEST_CATEGORY/TOPOLOGY exists, tests in TEST_CATEGORY/TOPOLOGY/all_pids are included +# - if TOPOLOGY and PLATFORM are specified, and TEST_CATEGORY/TOPOLOGY/PLATFORM exists, tests in TEST_CATEGORY/TOPOLOGY/PLATFORM are included +# - depending on sim/hw run, test cases in 'sim' or 'hw' are included +# - Any duplicate test entries are removed. +# - You now have your final test list! + +baseline: + t0-64: # T0-64 is the preferred topology for all tests + mth64: # MTH64 is the preferred platform for all tests. + sim: + - bgp/test_bgp_fact.py + #- decap/test_decap.py + - ipfwd/test_mtu.py + #- ipfwd/test_dip_sip.py + #- ipfwd/test_dir_bcast.py + #- ipfwd/test_nhop_group.py + - test_features.py + - test_interfaces.py + - test_nbr_health.py + - test_pre-test.py + - test_procdockerstatsd.py + - test_announce_routes.py + - test_posttest.py + - test_pretest.py + t2-min: + sfd: + sim: + - bgp/test_bgp_fact.py + - ipfwd/test_mtu.py + - test_interfaces.py + - test_nbr_health.py + - test_pre-test.py + - test_procdockerstatsd.py + - test_announce_routes.py + - test_posttest.py + - test_pretest.py + t1: + lightning,superbolt: + sim: + - bgp/test_bgp_fact.py + #- decap/test_decap.py + #- fib/test_fib.py + - ipfwd/test_mtu.py + #- ipfwd/test_dip_sip.py + #- ipfwd/test_dir_bcast.py + #- ipfwd/test_nhop_group.py + - test_features.py + - test_interfaces.py + - test_nbr_health.py + - test_pre-test.py + - test_procdockerstatsd.py + - test_announce_routes.py + - test_posttest.py + - test_pretest.py + +ROUTING: #Sridhar Santhanam + t0-64: + mth64: + sim: + - bgp/test_4-byte_asn_community.py + #- bgp/test_bgp_allow_list.py + #- bgp/test_bgp_dual_asn.py + #- bgp/test_bgp_session.py + #- bgp/test_bgp_session_flap.py + #- bgp/test_bgp_speaker.py + - bgp/test_bgp_update_timer.py + - bgp/test_ipv6_nlri_over_ipv4.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_route_flap.py + - route/test_default_route.py::test_default_route_with_bgp_flap + t2-min: + sfd: + sim: + - bgp/test_4-byte_asn_community.py + - bgp/test_bgp_update_timer.py + - bgp/test_ipv6_nlri_over_ipv4.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_route_flap.py + t1: + lightning,superbolt: + sim: + - bgp/test_4-byte_asn_community.py + #- bgp/test_bgp_allow_list.py + #- bgp/test_bgp_dual_asn.py + #- bgp/test_bgp_session.py + #- bgp/test_bgp_session_flap.py + #- bgp/test_bgp_speaker.py + - bgp/test_bgp_update_timer.py + - bgp/test_ipv6_nlri_over_ipv4.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_route_flap.py + - route/test_default_route.py::test_default_route_with_bgp_flap + +FWD: #Rajendra Thirumurthi + t0-64: + mth64: + sim: + #- crm/test_crm.py::test_crm_neighbor + - fib/test_fib.py + #- everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_neighbor_mac_change + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_remove_unused_ecmp_next_hop + - acl/test_acl.py::TestBasicAcl + t2-min: + sfd: + sim: + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_neighbor_mac_change + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_remove_unused_ecmp_next_hop + t1: + lightning,superbolt: + sim: + - drop_packets/test_drop_counters.py::test_absent_ip_header + - drop_packets/test_drop_counters.py::test_acl_drop + +PLT: #Mridul Bajpai + t0-64: + mth64: + sim: + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status + t2-min: + sfd: + sim: + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status + t1: + lightning,superbolt: + sim: + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status + - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status + +INFRA: #Anand Mehra + t0-64: + mth64: + sim: + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - monit/test_monit_status.py + - syslog/test_syslog_rate_limit.py + - system_health/test_system_health.py + t2-min: + sfd: + sim: + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - dhcp_relay/test_dhcp_pkt_fwd.py + - dhcp_relay/test_dhcp_relay.py + - monit/test_monit_status.py + - syslog/test_syslog_rate_limit.py + - system_health/test_system_health.py + t1: + lightning,superbolt: + sim: + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - dhcp_relay/test_dhcp_pkt_fwd.py + - dhcp_relay/test_dhcp_relay.py + - monit/test_monit_status.py + - syslog/test_syslog_rate_limit.py + - system_health/test_system_health.py + +MGMT: #Anukul Verma / Bidipta Das + t0-64: + mth64: + sim: + - dns/static_dns/test_static_dns.py + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ntp.py + - gnmi/test_gnmi.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - ssh/test_ssh_limit.py + t2-min: + sfd: + sim: + - dns/static_dns/test_static_dns.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - ssh/test_ssh_limit.py + t1: + lightning,superbolt: + sim: + - dns/static_dns/test_static_dns.py + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ntp.py + - gnmi/test_gnmi.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - ssh/test_ssh_limit.py + +L2: #Venkata Gouri Rajesh Etla / Bidipta Das + t0-64: + mth64: + sim: + - fdb/test_fdb.py + - fdb/test_fdb_flush.py + - arp/test_neighbor_mac.py + - dhcp_relay/test_dhcp_pkt_fwd.py + - dhcp_relay/test_dhcp_relay.py + t2-min: + sfd: + sim: + - arp/test_neighbor_mac.py + t1: + lightning,superbolt: + sim: + #- fdb/test_fdb.py + #- fdb/test_fdb_flush.py + - arp/test_neighbor_mac.py + +PFC: #Alpesh Patel / Sonum Mathur + t0-64: + mth64: + sim: + - cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py + - generic_config_updater/test_pfcwd_status.py + - generic_config_updater/test_pg_headroom_update.py + - cisco/qos/test_cpu_port_config.py + - cisco/qos/test_pg_profile_lookup.py + t1-64-lag: + mth64: + sim: + - cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py + - generic_config_updater/test_pfcwd_status.py + - generic_config_updater/test_pg_headroom_update.py + - cisco/qos/test_cpu_port_config.py + - cisco/qos/test_pg_profile_lookup.py + t2-min: + sfd: + sim: + - cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py #works with LC. Errors out for RP, which is ok + # - cisco/qos/test_cpu_port_config.py (enable after fix for MIGSOFTWAR-22760) + # - cisco/qos/test_pg_profile_lookup.py (enable after fix for MIGSOFTWAR-22762) + t1: + lightning,superbolt: + sim: + #- cisco/platform_tests/test_serviceability_pfc.py + - pfcwd/test_pfc_config.py + - generic_config_updater/test_pfcwd_status.py + - generic_config_updater/test_pg_headroom_update.py + #- cisco/qos/test_cpu_port_config.py + - cisco/qos/test_pg_profile_lookup.py + +#this is what we used to run +#this test tag will not be used, it is here jsut for reference +# LEGACY: +# all_topo: +# - bgp/test_bgp_fact.py +# - memory_checker/test_memory_checker.py::test_memory_checker_without_container_created[mathilda-01-mathilda-01|telemetry] +# - monit/test_monit_status.py::test_monit_status +# - mvrf/test_mgmtvrf.py:test_ping +# - mvrf/test_mgmtvrf.py:test_snmp_fact +# - platform_tests/cli/test_show_platform.py::test_show_platform_summary +# - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +# - platform_tests/cli/test_show_platform.py::test_show_platform_temperature +# - platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status +# - platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +# - platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +# - platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +# - test_interfaces.py +# - test_posttest.py +# - test_pretest.py::test_cleanup_cache +# - test_pretest.py::test_cleanup_testbed +# - test_pretest.py::test_collect_testbed_prio +# - test_pretest.py::test_disable_container_autorestart +# - test_pretest.py::test_disable_rsyslog_rate_limit +# - test_pretest.py::test_features_state +# - test_pretest.py::test_generate_running_golden_config +# - test_pretest.py::test_stop_pfcwd +# - test_pretest.py::test_update_saithrift_ptf +# - test_procdockerstatsd.py::test_verify_redisexport diff --git a/infra/sanity-scripts/ring2_plat8k.txt b/infra/sanity-scripts/ring2_plat8k.txt new file mode 100644 index 00000000000..4815773609c --- /dev/null +++ b/infra/sanity-scripts/ring2_plat8k.txt @@ -0,0 +1,23 @@ +memory_checker/test_memory_checker.py::test_memory_checker_without_container_created[mathilda-01-mathilda-01|telemetry] +monit/test_monit_status.py::test_monit_status +mvrf/test_mgmtvrf.py:test_ping +mvrf/test_mgmtvrf.py:test_snmp_fact +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +test_interfaces.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_pretest.py::test_update_saithrift_ptf +test_procdockerstatsd.py::test_verify_redisexport diff --git a/infra/sanity-scripts/ring2_plat8k_sfd_test_list.txt b/infra/sanity-scripts/ring2_plat8k_sfd_test_list.txt new file mode 100644 index 00000000000..aa20f92a56c --- /dev/null +++ b/infra/sanity-scripts/ring2_plat8k_sfd_test_list.txt @@ -0,0 +1,22 @@ +memory_checker/test_memory_checker.py::test_memory_checker_without_container_created[mathilda-01-mathilda-01|telemetry] +monit/test_monit_status.py::test_monit_status +mvrf/test_mgmtvrf.py:test_ping +mvrf/test_mgmtvrf.py:test_snmp_fact +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_psud.py::test_pmon_psud_kill_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +test_interfaces.py +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_pretest.py::test_update_saithrift_ptf +test_procdockerstatsd.py::test_verify_redisexport diff --git a/infra/sanity-scripts/ring3.yaml b/infra/sanity-scripts/ring3.yaml new file mode 100644 index 00000000000..264b5ca4036 --- /dev/null +++ b/infra/sanity-scripts/ring3.yaml @@ -0,0 +1,1107 @@ + +################################################################################ +# CICD test list - Ring3 # +################################################################################ +# +# This structure organizes a list of tests in 4 layers: +# TEST_CATEGORY: Defines a subset of sonic-mgmt tests. +# TOPOLOGY: Defines the type of topology in which the test is run. +# PLATFORM: Defines the type of platform in which the test is run +# SIM_OR_HW: Defines sim/hw specific test cases +# +# In other words, the hierarchy is: +# TEST_CATEGORY -> TOPOLOGY -> PLATFORM -> SIM_OR_HW -> [list of tests] +# +# TOPOLOGY section will always include a 't0-64' key, which serves as a base. +# PLATFORM section will always include a 'mth64' +# SIM_OR_HW key can be either 'sim', or 'hw' +# +# Example: +# +# example-ring3.yaml +# +# FWD: +# t0-64: +# mth64: +# sim: +# - fwd/test/case_1.py +# - fwd/test/case_2.py +# - fwd/test/case_3.py +# - fwd/test/case_4.py +# - fwd/test/case_5.py +# hw: +# - fwd/test/case_6.py +# - fwd/test/case_7.py +# - fwd/test/case_8.py +# t0-64: +# mth64: +# sim: +# - telemetry/test_telemetry.py::test_config_db_parameters +# - example/t0/specific/fwd/test.py +# hw: +# - example/t0/specific/fwd/hw/test1.py +# - example/t0/specific/fwd/hw/test2.py +# - example/t0/specific/fwd/hw/test3.py +# PLT: +# t0-64: +# mth64: +# sim: +# - plt/test/case_1.py +# - plt/test/case_2.py +# - plt/test/case_3.py +# - plt/test/case_4.py +# - plt/test/case_5.py +# t0-64: +# mth64: +# sim: +# - example/t0/specific/plt/test.py +# - example/t0/specific/plt/test2.py +# t1-64-lag: +# mth64: +# sim: +# - example/t1/specific/plt/test.py +# - example/t1/specific/plt/test2.py +# +# How the test list is created +# - a list of TEST_CATEGORY is given(must have at least one) +# - For each TEST_CATEGORY: +# - tests in TEST_CATEGORY/t0-64/mth64 are included +# - if TOPOLOGY is specified, and TEST_CATEGORY/TOPOLOGY exists, tests in TEST_CATEGORY/TOPOLOGY/mth64 are included +# - if TOPOLOGY and PLATFORM are specified, and TEST_CATEGORY/TOPOLOGY/PLATFORM exists, tests in TEST_CATEGORY/TOPOLOGY/PLATFORM are included +# - depending on sim/hw run, test cases in 'sim' or 'hw' are included +# - Any duplicate test entries are removed. +# - You now have your final test list! + + +FWD: + t0-64: + mth64: + sim: + - fib/test_fib.py + - ipfwd/test_dip_sip.py + - drop_packets/test_drop_counters.py::test_acl_drop + - drop_packets/test_drop_counters.py::test_unicast_ip_incorrect_eth_dst + - drop_packets/test_drop_counters.py::test_absent_ip_header + - drop_packets/test_drop_counters.py::test_src_ip_is_loopback_addr + - drop_packets/test_drop_counters.py::test_not_expected_vlan_tag_drop + - drop_packets/test_drop_counters.py::test_src_ip_is_multicast_addr + - everflow/test_everflow_ipv6.py + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + - acl/test_acl.py::TestAclWithPortToggle + hw: + - crm/test_crm.py::test_crm_neighbor + - crm/test_crm_available.py + - bfd/test_bfd_traffic.py + - everflow/test_everflow_testbed.py + - everflow/test_everflow_per_interface.py + - ip/test_ip_packet.py + - ipfwd/test_nhop_group.py + - ipfwd/test_dir_bcast.py + - acl/test_stress_acl.py + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + - cisco/platform_tests/test_serviceability_packet_capture.py + t0: + churchill-mono: + sim: + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + hw: + - acl/test_acl.py + - acl/test_stress_acl.py + - crm/test_crm.py::test_crm_neighbor + - crm/test_crm_available.py + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + - drop_packets/test_drop_counters.py + - everflow/test_everflow_ipv6.py + - everflow/test_everflow_testbed.py + - everflow/test_everflow_per_interface.py + - fib/test_fib.py + - hash/test_generic_hash.py + - ip/test_ip_packet.py + - ipfwd/test_dip_sip.py + - ipfwd/test_dir_bcast.py + - cisco/platform_tests/test_serviceability_packet_capture.py + titan: + sim: + - acl/test_acl.py + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + superbolt: + hw: + - acl/test_acl.py + - acl/test_stress_acl.py + - bfd/test_bfd.py + - crm/test_crm.py::test_crm_neighbor + - crm/test_crm_available.py + - cisco/platform_tests/test_serviceability_basic.py::test_show_platform_npu_all + - drop_packets/test_drop_counters.py + - everflow/test_everflow_ipv6.py + - everflow/test_everflow_testbed.py + - everflow/test_everflow_per_interface.py + - fib/test_fib.py + - hash/test_generic_hash.py + - ip/test_ip_packet.py + - ipfwd/test_dip_sip.py + - ipfwd/test_dir_bcast.py + t1-64-lag: + mth64: + hw: + - acl/test_acl.py + - acl/test_stress_acl.py + - bfd/test_bfd.py + - crm/test_crm.py + - crm/test_crm_available.py + - drop_packets/test_drop_counters.py + - everflow/test_everflow_testbed.py + - everflow/test_everflow_ipv6.py + - everflow/test_everflow_per_interface.py + - fib/test_fib.py + - hash/test_generic_hash.py + - ipfwd/test_dip_sip.py + - ipfwd/test_nhop_group.py + - ip/test_ip_packet.py + - cisco/platform_tests/test_serviceability_packet_capture.py + t1-lag: + churchill-mono: + hw: + - acl/test_acl.py + - acl/test_stress_acl.py + - bfd/test_bfd.py + - crm/test_crm.py + - crm/test_crm_available.py + - drop_packets/test_drop_counters.py + - everflow/test_everflow_testbed.py + - everflow/test_everflow_ipv6.py + - everflow/test_everflow_per_interface.py + - fib/test_fib.py + - hash/test_generic_hash.py + - ipfwd/test_dip_sip.py + - ipfwd/test_nhop_group.py + - ip/test_ip_packet.py + - cisco/platform_tests/test_serviceability_packet_capture.py + t1: + superbolt: + sim: + - fib/test_fib.py + - acl/test_acl.py + - acl/test_stress_acl.py + - bfd/test_bfd.py + - crm/test_crm.py + - crm/test_crm_available.py + - drop_packets/test_drop_counters.py + - everflow/test_everflow_testbed.py + - everflow/test_everflow_ipv6.py + - everflow/test_everflow_per_interface.py + - hash/test_generic_hash.py + - ipfwd/test_dip_sip.py + - ipfwd/test_nhop_group.py + - ip/test_ip_packet.py + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + t2-min: + sfd: + sim: + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_remove_unused_ecmp_next_hop + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + t2-min-VL: + sfd: + sim: + - everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_remove_unused_ecmp_next_hop + - cisco/platform_tests/test_serviceability_basic.py + - cisco/platform_tests/test_serviceability_s1cli.py + t2: + sfd: + hw: + - crm/test_crm.py + - fib/test_fib.py + - ipfwd/test_dip_sip.py + - ipfwd/test_mtu.py + - ipfwd/test_nhop_group.py + - cisco/platform_tests/test_serviceability_packet_capture.py + +PLT: + t0-64: + mth64: + sim: + - platform_tests/api/test_chassis.py + - platform_tests/api/test_component.py + - platform_tests/test_cpu_memory_usage.py + - platform_tests/test_port_toggle.py + - platform_tests/test_power_budget_info.py + - platform_tests/test_thermal_state_db.py + - platform_tests/sfp/test_sfpshow.py + - platform_tests/sfp/test_sfputil.py + - platform_tests/test_thermal_state_db.py + - platform_tests/api/test_module.py + - platform_tests/api/test_sfp.py + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_name + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_status + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent + - platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_critical_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_ledd.py + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_kill_and_start_status + - platform_tests/daemon/test_psud.py + - platform_tests/daemon/test_syseepromd.py + - platform_tests/test_platform_info.py::test_turn_on_off_psu_and_check_psustatus + - platform_tests/test_platform_info.py::test_show_platform_fanstatus_mocked + - platform_tests/test_platform_info.py::test_show_platform_temperature_mocked + - platform_tests/test_platform_info.py::test_thermal_control_fan_status + - platform_tests/test_reboot.py::test_cold_reboot + - platform_tests/test_reboot.py::test_soft_reboot + - platform_tests/test_reboot.py::test_fast_reboot + - platform_tests/test_reboot.py::test_warm_reboot + - platform_tests/test_reboot.py::test_continuous_reboot + t2-min: + sfd: + sim: + - platform_tests/api/test_chassis.py + - platform_tests/api/test_component.py + - platform_tests/test_cpu_memory_usage.py + - platform_tests/test_port_toggle.py + - platform_tests/test_power_budget_info.py + - platform_tests/api/test_module.py + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_name + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_status + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent + - platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_critical_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_ledd.py + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_kill_and_start_status + - platform_tests/daemon/test_syseepromd.py + t2-min-VL: + sfd: + sim: + - platform_tests/api/test_chassis.py + - platform_tests/api/test_component.py + - platform_tests/test_cpu_memory_usage.py + - platform_tests/test_port_toggle.py + - platform_tests/test_power_budget_info.py + - platform_tests/sfp/test_sfpshow.py + - platform_tests/sfp/test_sfputil.py + - platform_tests/api/test_module.py + - platform_tests/api/test_sfp.py + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_name + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_status + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent + - platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_critical_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold + - platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold + - platform_tests/cli/test_show_platform.py::test_show_platform_summary + - platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom + - platform_tests/cli/test_show_platform.py::test_show_platform_temperature + - platform_tests/daemon/test_ledd.py + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status + - platform_tests/daemon/test_pcied.py::test_pmon_pcied_kill_and_start_status + - platform_tests/daemon/test_syseepromd.py + t2: + sfd: + hw: + - platform_tests/test_reboot.py + - platform_tests//link_flap/test_link_flap.py + - platform_tests/test_kdump.py + - platform_tests/test_reload_config.py + + +INFRA: + t0-64: + mth64: + sim: + - cacl/test_cacl_application.py + - cacl/test_cacl_function.py + - cacl/test_ebtables_application.py + - iface_namingmode/test_iface_namingmode.py + - monit/test_monit_status.py + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - syslog/test_syslog_rate_limit.py + - test_announce_routes.py + - test_procdockerstatsd.py + - test_nbr_health.py + - override_config_table/test_override_config_table.py + - system_health/test_system_health.py + hw: + - database/test_db_scripts.py + - minigraph + - monit/test_monit_status.py + - ntp + - portstat + - ssh + - syslog/test_syslog_rate_limit.py + - system_health + - test_procdockerstatsd.py + - test_nbr_health.py + t0: + churchill-mono: + sim: + - cacl/test_cacl_application.py + - cacl/test_cacl_function.py + - cacl/test_ebtables_application.py + - iface_namingmode/test_iface_namingmode.py + - monit/test_monit_status.py + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - syslog/test_syslog_rate_limit.py + - test_announce_routes.py + - test_procdockerstatsd.py + - test_nbr_health.py + - override_config_table/test_override_config_table.py + hw: + - database/test_db_scripts.py + - minigraph + - monit/test_monit_status.py + - ntp + - portstat + - ssh + - syslog/test_syslog_rate_limit.py + - system_health + - test_procdockerstatsd.py + - test_nbr_health.py + t1-64-lag: + mth64: + sim: + - cacl/test_cacl_application.py + - cacl/test_cacl_function.py + - cacl/test_ebtables_application.py + - monit/test_monit_status.py + - container_checker/test_container_checker.py + - container_hardening/test_container_hardening.py + - database/test_db_scripts.py + - syslog/test_syslog_rate_limit.py + - test_announce_routes.py + - test_procdockerstatsd.py + - test_nbr_health.py + - override_config_table/test_override_config_table.py + - system_health/test_system_health.py + hw: + - database/test_db_scripts.py + - minigraph + - monit/test_monit_status.py + - ntp + - portstat + - ssh + - syslog/test_syslog_rate_limit.py + - system_health + - test_procdockerstatsd.py + - test_nbr_health.py + t1-lag: + churchill-mono: + hw: + - database/test_db_scripts.py + - minigraph + - monit/test_monit_status.py + - ntp + - portstat + - ssh + - syslog/test_syslog_rate_limit.py + - system_health + - test_procdockerstatsd.py + - test_nbr_health.py + t2-min: + sfd: + sim: + - iface_namingmode/test_iface_namingmode.py + - monit/test_monit_status.py + - system_health/test_system_health.py + - database/test_db_scripts.py + - syslog/test_syslog_rate_limit.py + - test_procdockerstatsd.py + - test_nbr_health.py + - portstat/test_portstat.py + t2-min-VL: + sfd: + sim: + - iface_namingmode/test_iface_namingmode.py + - monit/test_monit_status.py + - system_health/test_system_health.py + - database/test_db_scripts.py + - syslog/test_syslog_rate_limit.py + - test_procdockerstatsd.py + - test_nbr_health.py + - portstat/test_portstat.py + t2: + sfd: + hw: + - monit/test_monit_status.py + - system_health/test_system_health.py + - database/test_db_scripts.py + - syslog/test_syslog_rate_limit.py + - test_nbr_health.py + - portstat/test_portstat.py + - system_health + +MGMT: #Anukul Verma / Gourav Sharma + + t0: + churchill-mono: + sim: + - console/test_console_availability.py + - console/test_console_driver.py + - dns/test_dns_resolv_conf.py + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ntp.py + - gnmi/openconfig/test_openconfig_bgpglobal.py + - gnmi/openconfig/test_openconfig_interfaces.py + - gnmi/openconfig/test_openconfig_lldp.py + - gnmi/openconfig/test_openconfig_loopback.py + - gnmi/openconfig/test_openconfig_static_routes.py + - gnmi/test_gnmi.py + - gnmi/test_gnmi_configdb.py + - gnmi/test_gnmi_smartswitch.py + - gnmi/test_gnoi_os.py + - memory_checker/test_memory_checker.py + - restapi/test_restapi_vxlan_ecmp.py + - snmp/test_snmp_cpu.py + - snmp/test_snmp_default_route.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - snmp/test_snmp_pfc_counters.py + - snmp/test_snmp_queue_counters.py + - ssh/test_ssh_ciphers.py + - ssh/test_ssh_limit.py + - tacacs/test_authorization.py + - tacacs/test_rw_user.py::test_rw_user #commenting out IPV6 test + - telemetry/test_telemetry.py + + hw: + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ip_bgp.py + - generic_config_updater/test_ntp.py + - generic_config_updater/test_mgmt_interface.py + - snmp/test_snmp_cpu.py + - snmp/test_snmp_memory.py + - snmp/test_snmp_queue.py + - snmp/test_snmp_v2mib.py + - snmp/test_snmp_lldp.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_link_local.py + - gnmi/test_gnmi_appldb.py + - gnmi/test_gnmi_configdb.py + - gnmi/test_gnmi_countersdb.py + - gnmi/test_gnmi.py + - gnmi/test_gnmi_smartswitch.py + - gnmi/test_gnoi_os.py + - gnmi/test_gnoi_system_grpc.py + - gnmi/test_gnoi_system.py + - gnmi/test_gnoi_system_reboot.py + - gnmi/openconfig/test_openconfig_bgpglobal.py + - gnmi/openconfig/test_openconfig_interfaces.py + - gnmi/openconfig/test_openconfig_lldp.py + - gnmi/openconfig/test_openconfig_loopback.py + - gnmi/openconfig/test_openconfig_static_routes.py + - console/test_console_availability.py + - console/test_console_driver.py + - console/test_console_loopback.py + - console/test_console_reversessh.py + - console/test_console_udevrule.py + - dut_console/test_escape_character.py + - dut_console/test_idle_timeout.py + - ssh/test_ssh_ciphers.py + - ssh/test_ssh_limit.py + - ssh/test_ssh_default_password.py + - tacacs/test_authorization.py + - restapi/test_restapi.py + - restapi/test_restapi_vxlan_ecmp.py + - telemetry/test_telemetry.py + + t0-64: + mth64: + sim: + - console/test_console_availability.py + - console/test_console_driver.py + - dns/test_dns_resolv_conf.py + #- dut_console/test_idle_timeout.py //https://github.com/sonic-net/sonic-mgmt/blob/master/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml#L1457 + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ntp.py + - gnmi/openconfig/test_openconfig_bgpglobal.py + - gnmi/openconfig/test_openconfig_interfaces.py + - gnmi/openconfig/test_openconfig_lldp.py + - gnmi/openconfig/test_openconfig_loopback.py + - gnmi/openconfig/test_openconfig_static_routes.py + - gnmi/test_gnmi.py + - gnmi/test_gnmi_configdb.py + - gnmi/test_gnmi_smartswitch.py + - gnmi/test_gnoi_os.py + - memory_checker/test_memory_checker.py + - restapi/test_restapi_vxlan_ecmp.py + - snmp/test_snmp_cpu.py + - snmp/test_snmp_default_route.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - snmp/test_snmp_pfc_counters.py + - snmp/test_snmp_queue_counters.py + - ssh/test_ssh_ciphers.py + - ssh/test_ssh_limit.py + - tacacs/test_authorization.py + - tacacs/test_rw_user.py::test_rw_user #commenting out IPV6 test + - telemetry/test_telemetry.py + + hw: + - console/test_console_availability.py + - console/test_console_driver.py + - dns/test_dns_resolv_conf.py + #- dut_console/test_idle_timeout.py //https://github.com/sonic-net/sonic-mgmt/blob/master/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml#L1457 + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ntp.py + - gnmi/openconfig/test_openconfig_bgpglobal.py + - gnmi/openconfig/test_openconfig_interfaces.py + - gnmi/openconfig/test_openconfig_lldp.py + - gnmi/openconfig/test_openconfig_loopback.py + - gnmi/openconfig/test_openconfig_static_routes.py + - gnmi/test_gnmi.py + - gnmi/test_gnmi_configdb.py + - gnmi/test_gnmi_smartswitch.py + - gnmi/test_gnoi_os.py + - memory_checker/test_memory_checker.py + - restapi/test_restapi_vxlan_ecmp.py + - snmp/test_snmp_cpu.py + - snmp/test_snmp_default_route.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_lldp.py + - snmp/test_snmp_pfc_counters.py + - snmp/test_snmp_queue_counters.py + - ssh/test_ssh_ciphers.py + - ssh/test_ssh_limit.py + - tacacs/test_authorization.py + - tacacs/test_rw_user.py::test_rw_user #commenting out IPV6 test + - telemetry/test_telemetry.py + + t2: + sfd: + hw: + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_loopback.py + - snmp/test_snmp_lldp.py + - telemetry/test_telemetry.py + - memory_checker/test_memory_checker.py + - snmp/test_snmp_queue.py + + t1-64-lag: + mth64: + sim: + - console/test_console_loopback.py + - console/test_console_reversessh.py + - console/test_console_udevrule.py + - dns/static_dns/test_static_dns.py + #- dut_console/test_console_baud_rate.py //https://github.com/sonic-net/sonic-mgmt/blob/master/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml#L1457 + #- dut_console/test_console_chassis_conn.py + #- dut_console/test_escape_character.py + - generic_config_updater/test_bgpl.py + - generic_config_updater/test_lo_interface.py + - generic_config_updater/test_syslog.py + - gnmi/openconfig/test_openconfig_aggregate.py + - gnmi/openconfig/test_openconfig_bgp_unnumbered.py + - gnmi/openconfig/test_openconfig_ipv6_neighbor.py + - gnmi/openconfig/test_openconfig_l3_subinterface.py + - gnmi/openconfig/test_openconfig_nht.py + - gnmi/openconfig/test_openconfig_platform.py + - gnmi/openconfig/test_openconfig_prefix_community_routemap.py + - gnmi/openconfig/test_openconfig_redistribution.py + - gnmi/openconfig/test_openconfig_routing_policy.py + - gnmi/test_gnmi_appldb.py + - gnmi/test_gnmi_countersdb.py + #- gnmi/test_gnoi_killprocess.py //https://github.com/sonic-net/sonic-mgmt/issues/15507 + - gnmi/test_gnoi_system.py + - gnmi/test_gnoi_system_grpc.py + #- gnmi/test_gnoi_system_reboot.py //https://github.com/sonic-net/sonic-mgmt/issues/20779 + - gnmi/test_mimic_hwproxy_cert_rotation.py + - http/test_http_copy.py + #- mvrf/test_mgmtvrf.py //https://github.com/sonic-net/sonic-mgmt/issues/3589 + - passw_hardening/test_passw_hardening.py + - restapi/test_restapi.py + - snmp/test_snmp_fdb.py + - snmp/test_snmp_link_local.py + - snmp/test_snmp_loopback.py + - snmp/test_snmp_memory.py + #- snmp/test_snmp_phy_entity.py #commenting out as this is HW specific. + #- snmp/test_snmp_psu.py #commenting out as this is HW specific. + - snmp/test_snmp_queue.py + - snmp/test_snmp_v2mib.py + - ssh/test_ssh_default_password.py + - ssh/test_ssh_stress.py + - tacacs/test_accounting.py + - tacacs/test_jit_user.py + #- tacacs/test_ro_disk.py //https://github.com/sonic-net/sonic-mgmt/issues/20787 + - tacacs/test_ro_user.py::test_ro_user #commenting out IPV6 test + - tacacs/test_ro_user.py::test_ro_user_allowed_command + - tacacs/test_ro_user.py::test_ro_user_banned_by_sudoers_command + - tacacs/test_ro_user.py::test_ro_user_banned_command + - telemetry/test_events.py + - telemetry/test_telemetry_cert_rotation.py + - telemetry/test_telemetry_poll.py + + hw: + - console/test_console_loopback.py + - console/test_console_reversessh.py + - console/test_console_udevrule.py + - dns/static_dns/test_static_dns.py + #- dut_console/test_console_baud_rate.py //https://github.com/sonic-net/sonic-mgmt/blob/master/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml#L1457 + #- dut_console/test_console_chassis_conn.py + #- dut_console/test_escape_character.py + - generic_config_updater/test_bgpl.py + - generic_config_updater/test_lo_interface.py + - generic_config_updater/test_syslog.py + - gnmi/openconfig/test_openconfig_aggregate.py + - gnmi/openconfig/test_openconfig_bgp_unnumbered.py + - gnmi/openconfig/test_openconfig_ipv6_neighbor.py + - gnmi/openconfig/test_openconfig_l3_subinterface.py + - gnmi/openconfig/test_openconfig_nht.py + - gnmi/openconfig/test_openconfig_platform.py + - gnmi/openconfig/test_openconfig_prefix_community_routemap.py + - gnmi/openconfig/test_openconfig_redistribution.py + - gnmi/openconfig/test_openconfig_routing_policy.py + - gnmi/test_gnmi_appldb.py + - gnmi/test_gnmi_countersdb.py + #- gnmi/test_gnoi_killprocess.py //https://github.com/sonic-net/sonic-mgmt/issues/15507 + - gnmi/test_gnoi_system.py + - gnmi/test_gnoi_system_grpc.py + #- gnmi/test_gnoi_system_reboot.py //https://github.com/sonic-net/sonic-mgmt/issues/20779 + - gnmi/test_mimic_hwproxy_cert_rotation.py + - http/test_http_copy.py + #- mvrf/test_mgmtvrf.py //https://github.com/sonic-net/sonic-mgmt/issues/3589 + - passw_hardening/test_passw_hardening.py + - restapi/test_restapi.py + - snmp/test_snmp_fdb.py + - snmp/test_snmp_link_local.py + - snmp/test_snmp_loopback.py + - snmp/test_snmp_memory.py + - snmp/test_snmp_phy_entity.py + - snmp/test_snmp_psu.py + - snmp/test_snmp_queue.py + - snmp/test_snmp_v2mib.py + - ssh/test_ssh_default_password.py + - ssh/test_ssh_stress.py + - tacacs/test_accounting.py + - tacacs/test_jit_user.py + #- tacacs/test_ro_disk.py //https://github.com/sonic-net/sonic-mgmt/issues/20787 + - tacacs/test_ro_user.py::test_ro_user #commenting out IPV6 test + - tacacs/test_ro_user.py::test_ro_user_allowed_command + - tacacs/test_ro_user.py::test_ro_user_banned_by_sudoers_command + - tacacs/test_ro_user.py::test_ro_user_banned_command + - telemetry/test_events.py + - telemetry/test_telemetry_cert_rotation.py + - telemetry/test_telemetry_poll.py + + t1-lag: + churchill-mono: + hw: + - snmp/test_snmp_cpu.py + - snmp/test_snmp_memory.py + - snmp/test_snmp_queue.py + - snmp/test_snmp_v2mib.py + - snmp/test_snmp_lldp.py + - snmp/test_snmp_interfaces.py + - snmp/test_snmp_link_local.py + - gnmi/test_gnmi.py + - gnmi/test_gnmi_appldb.py + - gnmi/test_gnmi_countersdb.py + - gnmi/test_gnmi_smartswitch.py + - gnmi/test_gnoi_os.py + - gnmi/test_gnoi_system_grpc.py + - gnmi/test_gnoi_system.py + - console/test_console_availability.py + - console/test_console_driver.py + - console/test_console_loopback.py + - console/test_console_reversessh.py + - console/test_console_udevrule.py + - dut_console/test_console_baud_rate.py + #- dut_console/test_console_chassis_conn.py + - dut_console/test_escape_character.py + - dut_console/test_idle_timeout.py + - gnmi/test_mimic_hwproxy_cert_rotation.py + - dns/static_dns/test_static_dns.py + - generic_config_updater/test_aaa.py + - generic_config_updater/test_ip_bgp.py + - generic_config_updater/test_ntp.py + # - memory_checker/test_memory_checker.py + - ssh/test_ssh_ciphers.py + - ssh/test_ssh_limit.py + - ssh/test_ssh_default_password.py + - tacacs/test_authorization.py + # - tacacs/test_ro_disk.py + - restapi/test_restapi.py + - restapi/test_restapi_vxlan_ecmp.py + # - http/test_http_copy.py + # - mvrf/test_mgmtvrf.py + +L2: + t0-64: + mth64: + sim: + - arp/test_arp_extended.py + - arp/test_neighbor_mac_noptf.py + #- arp/test_stress_arp.py + - arp/test_arp_update.py + - arp/test_neighbor_mac.py + - dhcp_relay/test_dhcp_counter_stress.py + - dhcp_relay/test_dhcp_pkt_recv.py + - dhcp_relay/test_dhcp_relay.py + #- dhcp_relay/test_dhcp_relay_stress.py + - dhcp_relay/test_dhcpv6_relay.py + - dhcp_server/test_dhcp_server.py + - dhcp_server/test_dhcp_server_multi_vlans.py + - fdb/test_fdb.py + - fdb/test_fdb_flush.py + #- fdb/test_fdb_mac_expire.py + - fdb/test_fdb_mac_learning.py + #- fdb/test_fdb_mac_move.py + - generic_config_updater/test_dhcp_relay.py + - generic_config_updater/test_portchannel_interface.py + - generic_config_updater/test_vlan_interface.py + - l2/test_l2_configure.py + #- lldp/test_lldp.py + - lldp/test_lldp_syncd.py + - pc/test_lag_2.py + - pc/test_lag_member_forwarding.py + #- pc/test_lag_member.py + - pc/test_po_cleanup.py + - pc/test_po_update.py + #- snmp/test_snmp_fdb.py + - vlan/test_autostate_disabled.py + - vlan/test_secondary_subnet.py + - vlan/test_host_vlan.py + - vlan/test_vlan.py + hw: + - arp/test_arp_extended.py + - arp/test_neighbor_mac_noptf.py + - arp/test_stress_arp.py + - arp/test_tagged_arp.py + - dhcp_relay/test_dhcp_pkt_recv.py + - dhcp_relay/test_dhcp_relay.py + - dhcp_relay/test_dhcp_relay_stress.py + - dhcp_relay/test_dhcpv6_relay.py + # - fdb/test_fdb.py + - fdb/test_fdb_flush.py + - fdb/test_fdb_mac_expire.py + - fdb/test_fdb_mac_learning.py + - fdb/test_fdb_mac_move.py + - generic_config_updater/test_dhcp_relay.py + - generic_config_updater/test_portchannel_interface.py + - generic_config_updater/test_vlan_interface.py + - generic_config_updater/test_dhcp_relay.py + - lldp/test_lldp.py + - lldp/test_lldp_syncd.py + - pc/test_lag_2.py + # - pc/test_lag_member.py + - pc/test_po_cleanup.py + - pc/test_po_update.py + # - snmp/test_snmp_fdb.py + # - vlan/test_autostate_disabled.py + - vlan/test_host_vlan.py + # - vlan/test_vlan.py + + t1-64-lag: + mth64: + hw: + - arp/test_arpall.py + - arp/test_neighbor_mac_noptf.py + - dhcp_relay/test_dhcp_pkt_fwd.py + - lldp/test_lldp.py + - lldp/test_lldp_syncd.py + - pc/test_lag_2.py + - pc/test_po_cleanup.py + - pc/test_po_update.py + + t1-lag: + churchill-mono: + hw: + - arp/test_arpall.py + - arp/test_neighbor_mac_noptf.py + - dhcp_relay/test_dhcp_pkt_fwd.py + - lldp/test_lldp.py + - lldp/test_lldp_syncd.py + - pc/test_lag_2.py + - pc/test_po_cleanup.py + - pc/test_po_update.py + + t0: + churchill-mono: + hw: + - arp/test_arp_extended.py + - arp/test_neighbor_mac_noptf.py + - arp/test_stress_arp.py + - dhcp_relay/test_dhcp_pkt_recv.py + - dhcp_relay/test_dhcp_relay.py + - dhcp_relay/test_dhcp_relay_stress.py + - dhcp_relay/test_dhcpv6_relay.py + - fdb/test_fdb_flush.py + - fdb/test_fdb_mac_expire.py + - fdb/test_fdb_mac_learning.py + - fdb/test_fdb_mac_move.py + - generic_config_updater/test_dhcp_relay.py + - generic_config_updater/test_portchannel_interface.py + - generic_config_updater/test_vlan_interface.py + - generic_config_updater/test_dhcp_relay.py + - pc/test_lag_2.py + - pc/test_po_cleanup.py + - pc/test_po_update.py + - vlan/test_host_vlan.py + - fdb/test_fdb.py + - pc/test_lag_member.py + - snmp/test_snmp_fdb.py + - vlan/test_autostate_disabled.py + - vlan/test_vlan.py + superbolt: + hw: + - arp/test_arp_extended.py + - arp/test_neighbor_mac_noptf.py + - arp/test_stress_arp.py + - dhcp_relay/test_dhcp_pkt_recv.py + - dhcp_relay/test_dhcp_relay.py + - dhcp_relay/test_dhcp_relay_stress.py + - dhcp_relay/test_dhcpv6_relay.py + - fdb/test_fdb_flush.py + - fdb/test_fdb_mac_expire.py + - fdb/test_fdb_mac_learning.py + - fdb/test_fdb_mac_move.py + - generic_config_updater/test_dhcp_relay.py + - generic_config_updater/test_portchannel_interface.py + - generic_config_updater/test_vlan_interface.py + - generic_config_updater/test_dhcp_relay.py + - pc/test_lag_2.py + - pc/test_po_cleanup.py + - pc/test_po_update.py + - vlan/test_host_vlan.py + - fdb/test_fdb.py + - pc/test_lag_member.py + - snmp/test_snmp_fdb.py + - vlan/test_autostate_disabled.py + - vlan/test_vlan.py + t2: + sfd: + hw: + - arp/test_arpall.py + - pc/test_lag_2.py + - pc/test_po_update.py + - pc/test_po_cleanup.py + t2-min: + sfd: + sim: + - lldp/test_lldp.py + - arp/test_neighbor_mac_noptf.py + - pc/test_po_cleanup.py::test_po_cleanup + - pc/test_po_update.py::test_po_update + t2-min-VL: + sfd: + sim: + - lldp/test_lldp.py + - arp/test_neighbor_mac_noptf.py + - pc/test_po_cleanup.py::test_po_cleanup + - pc/test_po_update.py::test_po_update + +ROUTING: #Sridhar Santhanam + t0-64: + mth64: + sim: + - bgp/test_bgp_fact.py + - bgp/test_bgp_gr_helper.py + - bgp/test_bgp_update_timer.py + - bgp/test_bgpmon.py + - bgp/test_bgp_dual_asn.py + - bgp/test_bgp_speaker.py + - bgp/test_bgp_route_neigh_learning.py + - bgp/test_bgp_session_flap.py + - route/test_route_consistency.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_default_route.py::test_default_route_with_bgp_flap + - route/test_route_perf.py + - route/test_route_flap.py + - route/test_duplicate_route.py + - route/test_static_route.py + - generic_config_updater/test_bgpl.py + - log_fidelity/test_bgp_shutdown.py + hw: + - bgp/test_bgp_fact.py + - bgp/test_bgp_gr_helper.py + - bgp/test_bgp_update_timer.py + - bgp/test_bgpmon.py + - bgp/test_bgp_dual_asn.py + - bgp/test_bgp_speaker.py + - bgp/test_bgp_route_neigh_learning.py + - bgp/test_bgp_session_flap.py + - route/test_route_consistency.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_default_route.py::test_default_route_with_bgp_flap + - route/test_route_perf.py + - route/test_route_flap.py + - route/test_duplicate_route.py + - route/test_static_route.py + - generic_config_updater/test_bgpl.py + - log_fidelity/test_bgp_shutdown.py + t0: + churchill-mono: + hw: + - bgp/test_bgp_fact.py + - bgp/test_bgp_gr_helper.py + - bgp/test_bgp_update_timer.py + - bgp/test_bgpmon.py + - bgp/test_bgp_dual_asn.py + - bgp/test_bgp_speaker.py + - bgp/test_bgp_route_neigh_learning.py + - bgp/test_bgp_session_flap.py + - route/test_route_consistency.py + - route/test_default_route.py::test_default_ipv6_route_next_hop_global_address + - route/test_default_route.py::test_ipv6_default_route_table_enabled_for_mgmt_interface + - route/test_default_route.py::test_default_route_set_src + - route/test_default_route.py::test_default_route_with_bgp_flap + - route/test_route_perf.py + - route/test_route_flap.py + - route/test_duplicate_route.py + - route/test_static_route.py + - generic_config_updater/test_bgpl.py + - log_fidelity/test_bgp_shutdown.py + t1-64-lag: + mth64: + sim: + - bgp/test_bgp_bbr.py + - bgp/test_bgp_allow_list.py + - bgp/test_bgp_bounce.py + - bgp/test_bgp_multipath_relax.py + hw: + - bgp/test_bgp_bbr.py + - bgp/test_bgp_allow_list.py + - bgp/test_bgp_bounce.py + - bgp/test_bgp_multipath_relax.py + churchill-mono: + hw: + - bgp/test_bgp_bbr.py + - bgp/test_bgp_allow_list.py + - bgp/test_bgp_bounce.py + - bgp/test_bgp_multipath_relax.py + + t1-lag: + churchill-mono: + hw: + - bgp/test_bgp_bbr.py + - bgp/test_bgp_allow_list.py + - bgp/test_bgp_bounce.py + - bgp/test_bgp_multipath_relax.py + + t2-min: + sfd: + sim: + - bgp/test_bgp_fact.py + - bgp/test_bgp_session_flap.py + t2-min-VL: + sfd: + sim: + - bgp/test_bgp_fact.py + - bgp/test_bgp_session_flap.py + t2: + sfd: + hw: + - route/test_route_flap.py + - bgp/test_bgp_suppress_fib.py + - bgp/test_traffic_shift.py + +TUNNEL: #Thushar Gowda + # t0-64: + # mth64: + # sim: + # # Disable the tunnel test cases for now + # #- decap/test_decap.py + # #- vxlan/test_vxlan_decap.py + t1-64-lag: + mth64: + sim: + - vxlan/test_vxlan_ecmp_switchover.py + - vxlan/test_vxlan_route_advertisement.py + t1: + mth64: + hw: + - vxlan/test_vxlan_ecmp_switchover.py + t2: + sfd: + hw: + - decap/test_decap.py + +PFC: #Alpesh Patel / Sonum Mathur + t0-64: + mth64: + sim: + - generic_config_updater/test_incremental_qos.py + - generic_config_updater/test_pfcwd_interval.py + - cisco/platform_tests/test_serviceability_pfc.py + hw: + # pfcwd tests should take ~1 hour on M64 + - pfcwd/test_pfc_config.py + - pfcwd/test_pfcwd_all_port_storm.py + - pfcwd/test_pfcwd_cli.py + - pfcwd/test_pfcwd_function.py + - pfcwd/test_pfcwd_timer_accuracy.py + - cisco/platform_tests/test_serviceability_pfc.py + + t0: + churchill-mono: + hw: + - pfcwd/test_pfc_config.py + - pfcwd/test_pfcwd_all_port_storm.py + - pfcwd/test_pfcwd_cli.py + - pfcwd/test_pfcwd_function.py + - pfcwd/test_pfcwd_timer_accuracy.py + - cisco/platform_tests/test_serviceability_pfc.py + - qos/test_qos_sai.py + + t1-64-lag: + mth64: + hw: + - qos/test_pfc_counters.py + - qos/test_ecn_config.py + - qos/test_qos_dscp_mapping.py + - qos/test_qos_sai.py + + t1-lag: + churchill-mono: + hw: + - qos/test_pfc_counters.py + - qos/test_ecn_config.py + - qos/test_qos_dscp_mapping.py + - qos/test_qos_sai.py + - cisco/platform_tests/test_serviceability_pfc.py + + t2: + sfd: + hw: + - pfcwd/test_pfc_config.py + - pfcwd/test_pfcwd_all_port_storm.py + - pfcwd/test_pfcwd_cli.py + - pfcwd/test_pfcwd_function.py + - cisco/platform_tests/test_serviceability_pfc.py diff --git a/infra/sanity-scripts/ring3_aaa14_24hour.txt b/infra/sanity-scripts/ring3_aaa14_24hour.txt new file mode 100644 index 00000000000..fdc6afc4995 --- /dev/null +++ b/infra/sanity-scripts/ring3_aaa14_24hour.txt @@ -0,0 +1,13 @@ +acl/test_acl.py::TestAclWithReboot +acl/test_acl.py::TestAclWithPortToggle +drop_packets/test_drop_counters.py +cisco/platform_tests/test_eth_switch.py +cisco/platform_tests/test_platform_reboot.py::TestKdumpCisco::test_watchdog_kdump +cisco/ipfwd/test_cisco_nhop_group.py +cisco/ipfwd/test_lpm.py +ipfwd/test_nhop_group.py +platform_tests/test_reboot.py +platform_tests/test_reload_config.py +platform_tests/api/test_chassis.py +platform_tests/test_sequential_restart.py +route/test_route_perf.py diff --git a/infra/sanity-scripts/ring3_sanity.txt b/infra/sanity-scripts/ring3_sanity.txt new file mode 100644 index 00000000000..2c086c6a7a4 --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity.txt @@ -0,0 +1,11 @@ +acl/test_acl.py::TestBasicAcl +arp/test_arpall.py +cacl/test_cacl_function.py +crm/test_crm.py +decap/test_decap.py +iface_namingmode/test_iface_namingmode.py +ipfwd/test_mtu.py +ntp/test_ntp.py +platform_tests/api/test_chassis.py +system_health/test_system_health.py +tacacs/test_accounting.py \ No newline at end of file diff --git a/infra/sanity-scripts/ring3_sanity_pass.txt b/infra/sanity-scripts/ring3_sanity_pass.txt new file mode 100644 index 00000000000..00acd19c9cf --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_pass.txt @@ -0,0 +1,73 @@ +bgp/test_bgp_fact.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_procdockerstatsd.py::test_verify_redisexport +test_features.py +test_interfaces.py +monit/test_monit_status.py::test_monit_status +platform_tests/api/test_chassis.py::TestChassisApi::test_components +platform_tests/api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests/api/test_chassis.py::TestChassisApi::test_get_name +platform_tests/api/test_chassis.py::TestChassisApi::test_get_position_in_parent +platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence +platform_tests/api/test_chassis.py::TestChassisApi::test_get_reboot_cause +platform_tests/api/test_chassis.py::TestChassisApi::test_get_status +platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests/api/test_chassis.py::TestChassisApi::test_sfps +platform_tests/api/test_chassis.py::TestChassisApi::test_status_led +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals +platform_tests/api/test_component.py::TestComponentApi::test_get_description +platform_tests/api/test_component.py::TestComponentApi::test_get_model +platform_tests/api/test_component.py::TestComponentApi::test_get_name +platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent +platform_tests/api/test_component.py::TestComponentApi::test_get_presence +platform_tests/api/test_component.py::TestComponentApi::test_get_serial +platform_tests/api/test_component.py::TestComponentApi::test_get_status +platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable +platform_tests/api/test_sfp.py::TestSfpApi::test_get_model +platform_tests/api/test_sfp.py::TestSfpApi::test_get_name +platform_tests/api/test_sfp.py::TestSfpApi::test_get_presence +platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial +platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage +platform_tests/api/test_sfp.py::TestSfpApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent +platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence +platform_tests/api/test_thermal.py::TestThermalApi::test_get_status +platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status +platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +telemetry/test_telemetry.py::test_config_db_parameters +telemetry/test_telemetry.py::test_telemetry_enabledbydefault +test_posttest.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_thermal_info +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_transceiver_info +snmp/test_snmp_memory.py::test_snmp_swap +snmp/test_snmp_loopback.py::test_snmp_loopback +cisco/test_platform_faults.py::test_platform_overtemp_fault +cisco/test_platform_faults.py::test_platform_undertemp_fault diff --git a/infra/sanity-scripts/ring3_sanity_pass_sfd.txt b/infra/sanity-scripts/ring3_sanity_pass_sfd.txt new file mode 100644 index 00000000000..c311099bb55 --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_pass_sfd.txt @@ -0,0 +1,71 @@ +bgp/test_bgp_fact.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_procdockerstatsd.py::test_verify_redisexport +test_features.py +test_interfaces.py +monit/test_monit_status.py::test_monit_status +platform_tests/api/test_chassis.py::TestChassisApi::test_components +platform_tests/api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests/api/test_chassis.py::TestChassisApi::test_get_name +platform_tests/api/test_chassis.py::TestChassisApi::test_get_position_in_parent +platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence +platform_tests/api/test_chassis.py::TestChassisApi::test_get_reboot_cause +platform_tests/api/test_chassis.py::TestChassisApi::test_get_status +platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests/api/test_chassis.py::TestChassisApi::test_sfps +platform_tests/api/test_chassis.py::TestChassisApi::test_status_led +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals +platform_tests/api/test_component.py::TestComponentApi::test_get_description +platform_tests/api/test_component.py::TestComponentApi::test_get_model +platform_tests/api/test_component.py::TestComponentApi::test_get_name +platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent +platform_tests/api/test_component.py::TestComponentApi::test_get_presence +platform_tests/api/test_component.py::TestComponentApi::test_get_serial +platform_tests/api/test_component.py::TestComponentApi::test_get_status +platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable +platform_tests/api/test_sfp.py::TestSfpApi::test_get_model +platform_tests/api/test_sfp.py::TestSfpApi::test_get_name +platform_tests/api/test_sfp.py::TestSfpApi::test_get_presence +platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial +platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage +platform_tests/api/test_sfp.py::TestSfpApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent +platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence +platform_tests/api/test_thermal.py::TestThermalApi::test_get_status +platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status +platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +telemetry/test_telemetry.py::test_config_db_parameters +telemetry/test_telemetry.py::test_telemetry_enabledbydefault +test_posttest.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_thermal_info +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_transceiver_info +snmp/test_snmp_memory.py::test_snmp_swap +snmp/test_snmp_loopback.py::test_snmp_loopback +cisco/test_platform_faults.py::test_platform_overtemp_fault +cisco/test_platform_faults.py::test_platform_undertemp_fault diff --git a/infra/sanity-scripts/ring3_sanity_pass_t1.txt b/infra/sanity-scripts/ring3_sanity_pass_t1.txt new file mode 100644 index 00000000000..cbefc6b33d0 --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_pass_t1.txt @@ -0,0 +1,248 @@ +bgp/test_bgp_fact.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_procdockerstatsd.py::test_verify_redisexport +test_features.py +test_interfaces.py +monit/test_monit_status.py::test_monit_status +platform_tests/api/test_chassis.py::TestChassisApi::test_components +platform_tests/api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests/api/test_chassis.py::TestChassisApi::test_get_name +platform_tests/api/test_chassis.py::TestChassisApi::test_get_position_in_parent +platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence +platform_tests/api/test_chassis.py::TestChassisApi::test_get_reboot_cause +platform_tests/api/test_chassis.py::TestChassisApi::test_get_status +platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests/api/test_chassis.py::TestChassisApi::test_sfps +platform_tests/api/test_chassis.py::TestChassisApi::test_status_led +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals +platform_tests/api/test_component.py::TestComponentApi::test_get_description +platform_tests/api/test_component.py::TestComponentApi::test_get_model +platform_tests/api/test_component.py::TestComponentApi::test_get_name +platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent +platform_tests/api/test_component.py::TestComponentApi::test_get_presence +platform_tests/api/test_component.py::TestComponentApi::test_get_serial +platform_tests/api/test_component.py::TestComponentApi::test_get_status +platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable +platform_tests/api/test_sfp.py::TestSfpApi::test_get_model +platform_tests/api/test_sfp.py::TestSfpApi::test_get_name +platform_tests/api/test_sfp.py::TestSfpApi::test_get_presence +platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial +platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage +platform_tests/api/test_sfp.py::TestSfpApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent +platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence +platform_tests/api/test_thermal.py::TestThermalApi::test_get_status +platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status +platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +telemetry/test_telemetry.py::test_config_db_parameters +telemetry/test_telemetry.py::test_telemetry_enabledbydefault +test_posttest.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_thermal_info +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_transceiver_info +snmp/test_snmp_memory.py::test_snmp_swap +snmp/test_snmp_loopback.py::test_snmp_loopback +cisco/test_platform_faults.py::test_platform_overtemp_fault +cisco/test_platform_faults.py::test_platform_undertemp_fault +configlet/test_add_rack.py::test_add_rack +bgp/test_bgp_allow_list.py::test_allow_list +stress/test_stress_routes.py::test_announce_withdraw_route +platform_tests.api/test_watchdog.py::TestWatchdogApi::test_arm_negative_timeout +platform_tests.api/test_watchdog.py::TestWatchdogApi::test_arm_too_big_timeout +arp/test_arpall.py::test_arp_no_reply_other_intf +bgp/test_bgp_bbr.py::test_bbr_disabled_dut_asn_in_aspath +bgp/test_bgp_bbr.py::test_bbr_enabled_dual_dut_asn_in_aspath +bgp/test_bgp_fact.py::test_bgp_facts +bgp/test_bgp_multipath_relax.py::test_bgp_multipath_relax +generic_config_updater/test_bgp_prefix.py::test_bgp_prefix_tc1_suite +cacl/test_cacl_application.py::test_cacl_application_nondualtor +cacl/test_cacl_function.py::test_cacl_function +cacl/test_cacl_application.py::test_cacl_scale_rules_ipv4 +cacl/test_cacl_application.py::test_cacl_scale_rules_ipv6 +platform_tests.sfp/test_sfpshow.py::test_check_sfp_presence +platform_tests.sfp/test_show_intf_xcvr.py::test_check_sfp_presence +platform_tests.sfp/test_sfpshow.py::test_check_sfpshow_eeprom +platform_tests.sfp/test_show_intf_xcvr.py::test_check_sfpshow_eeprom +platform_tests.sfp/test_sfputil.py::test_check_sfputil_eeprom +platform_tests.sfp/test_sfputil.py::test_check_sfputil_error_status +platform_tests.sfp/test_sfputil.py::test_check_sfputil_presence +platform_tests.sfp/test_sfputil.py::test_check_sfputil_reset +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_pfc_pause_delay_params +test_posttest.py::test_collect_techsupport +test_pretest.py::test_collect_testbed_prio +telemetry/test_telemetry.py::test_config_db_parameters +mvrf/test_mgmtvrf.py::TestMvrfOutbound::test_curl +bgp/test_bgp_allow_list.py::test_default_allow_list_postconfig +bgp/test_bgp_allow_list.py::test_default_allow_list_preconfig +pfcwd/test_pfc_config.py::TestDefaultPfcConfig::test_default_cfg_after_load_mg +route/test_default_route.py::test_default_ipv6_route_next_hop_global_address +acl/test_acl.py::TestAclWithReboot +acl/test_acl.py::TestAclWithPortToggle::test_dest_ip_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_dest_ip_match_dropped +acl/test_acl.py::TestBasicAcl::test_dest_ip_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_dest_ip_match_forwarded +acl/test_acl.py::TestAclWithPortToggle::test_dest_ip_match_forwarded +acl/test_acl.py::TestBasicAcl::test_dest_ip_match_forwarded +dhcp_relay/test_dhcpv6_relay.py::test_dhcp_relay_after_link_flap +dhcp_relay/test_dhcpv6_relay.py::test_dhcp_relay_default +dhcp_relay/test_dhcpv6_relay.py::test_dhcp_relay_start_with_uplinks_down +dhcp_relay/test_dhcpv6_relay.py::test_dhcpv6_relay_counter +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +cacl/test_ebtables_application.py::test_ebtables_application +acl/test_acl.py::TestAclWithPortToggle::test_egress_unmatched_forwarded +acl/test_acl.py::TestIncrementalAcl::test_egress_unmatched_forwarded +acl/test_acl.py::TestBasicAcl::test_egress_unmatched_forwarded +platform_tests.api/test_chassis.py::TestChassisApi::test_fan_drawers +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +platform_tests.api/test_fan_drawer.py::TestFanDrawerApi::test_get_all_fans +platform_tests.api/test_component.py::TestComponentApi::test_get_available_firmware_version +platform_tests.api/test_psu_fans.py::TestPsuFans::test_get_direction +platform_tests.api/test_fan_drawer_fans.py::TestFanDrawerFans::test_get_direction +platform_tests.api/test_chassis_fans.py::TestChassisFans::test_get_direction +platform_tests.api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests.api/test_sfp.py::TestSfpApi::test_get_error_description +platform_tests.api/test_fan_drawer_fans.py::TestFanDrawerFans::test_get_fans_target_speed +platform_tests.api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests.api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests.api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests.api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests.api/test_sfp.py::TestSfpApi::test_get_transceiver_threshold_info +platform_tests.api/test_sfp.py::TestSfpApi::test_get_tx_fault +platform_tests.api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests.api/test_chassis.py::TestChassisApi::test_get_watchdog +acl/test_acl.py::TestAclWithPortToggle::test_icmp_source_ip_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_icmp_source_ip_match_dropped +acl/test_acl.py::TestBasicAcl::test_icmp_source_ip_match_dropped +acl/test_acl.py::TestBasicAcl::test_icmp_source_ip_match_forwarded +acl/test_acl.py::TestIncrementalAcl::test_icmp_source_ip_match_forwarded +acl/test_acl.py::TestAclWithPortToggle::test_icmp_source_ip_match_forwarded +acl/test_acl.py::TestIncrementalAcl::test_ingress_unmatched_blocked +acl/test_acl.py::TestAclWithPortToggle::test_ingress_unmatched_blocked +acl/test_acl.py::TestBasicAcl::test_ingress_unmatched_blocked +platform_tests.api/test_component.py::TestComponentApi::test_install_firmware +test_interfaces.py::test_interfaces +pfcwd/test_pfc_config.py::TestPfcConfig::test_invalid_action_cfg +pfcwd/test_pfc_config.py::TestPfcConfig::test_invalid_detect_time_cfg +pfcwd/test_pfc_config.py::TestPfcConfig::test_invalid_restore_time_cfg +everflow/test_everflow_ipv6.py::TestIngressEverflowIPv6::test_invalid_tcp_rule +acl/test_acl.py::TestIncrementalAcl::test_ip_proto_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_ip_proto_match_dropped +acl/test_acl.py::TestBasicAcl::test_ip_proto_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_ip_proto_match_forwarded +acl/test_acl.py::TestIncrementalAcl::test_ip_proto_match_forwarded +platform_tests.api/test_sfp.py::TestSfpApi::test_is_replaceable +acl/test_acl.py::TestIncrementalAcl::test_l4_dport_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_l4_dport_match_dropped +acl/test_acl.py::TestBasicAcl::test_l4_dport_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_l4_dport_match_forwarded +acl/test_acl.py::TestBasicAcl::test_l4_dport_match_forwarded +acl/test_acl.py::TestAclWithPortToggle::test_l4_dport_match_forwarded +acl/test_acl.py::TestAclWithPortToggle::test_l4_dport_range_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_l4_dport_range_match_dropped +acl/test_acl.py::TestBasicAcl::test_l4_dport_range_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_l4_dport_range_match_forwarded +acl/test_acl.py::TestIncrementalAcl::test_l4_sport_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_l4_sport_match_dropped +acl/test_acl.py::TestBasicAcl::test_l4_sport_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_l4_sport_match_forwarded +acl/test_acl.py::TestBasicAcl::test_l4_sport_match_forwarded +acl/test_acl.py::TestAclWithPortToggle::test_l4_sport_match_forwarded +acl/test_acl.py::TestIncrementalAcl::test_l4_sport_range_match_dropped +acl/test_acl.py::TestBasicAcl::test_l4_sport_range_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_l4_sport_range_match_dropped +override_config_table/test_override_config_table.py::test_load_minigraph_with_golden_config +pfcwd/test_pfc_config.py::TestPfcConfig::test_low_detect_time_cfg +ntp/test_ntp.py::test_ntp +mvrf/test_mgmtvrf.py::TestServices::test_ntp +ntp/test_ntp.py::test_ntp_long_jump_enabled +passw_hardening/test_passw_hardening.py::test_passw_hardening_age_expiration_warning +passw_hardening/test_passw_hardening.py::test_passw_hardening_age_expiration +passw_hardening/test_passw_hardening.py::test_passw_hardening_en_dis_policies +passw_hardening/test_passw_hardening.py::test_passw_hardening_history +passw_hardening/test_passw_hardening.py::test_passw_hardening_len_min +passw_hardening/test_passw_hardening.py::test_passw_hardening_policies_digits +passw_hardening/test_passw_hardening.py::test_passw_hardening_policies_lower_class +platform_tests.daemon/test_psud.py::test_pmon_psud_kill_and_start_status +platform_tests.daemon/test_psud.py::test_pmon_psud_running_status +platform_tests.daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests.daemon/test_psud.py::test_pmon_psud_term_and_start_status +platform_tests.daemon/test_syseepromd.py::test_pmon_syseepromd_kill_and_start_status +platform_tests.daemon/test_syseepromd.py::test_pmon_syseepromd_running_status +testbed_setup/test_populate_fdb.py::test_populate_fdb +portstat/test_portstat.py::test_portstat_delete_all +portstat/test_portstat.py::test_portstat_delete_tag +portstat/test_portstat.py::test_portstat_display_all +portstat/test_portstat.py::test_portstat_no_exceptions +portstat/test_portstat.py::test_portstat_period +mvrf/test_mgmtvrf.py::TestReboot::test_reboot +platform_tests/test_sequential_restart.py::test_restart_swss +acl/test_acl.py::TestAclWithPortToggle::test_rules_priority_dropped +acl/test_acl.py::TestIncrementalAcl::test_rules_priority_dropped +acl/test_acl.py::TestBasicAcl::test_rules_priority_dropped +acl/test_acl.py::TestBasicAcl::test_rules_priority_forwarded +test_features.py::test_show_features +iface_namingmode/test_iface_namingmode.py::TestShowInterfaces::test_show_interfaces_counter +iface_namingmode/test_iface_namingmode.py::TestShowInterfaces::test_show_interfaces_description +platform_tests.cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests.cli/test_show_platform.py::test_show_platform_temperature +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_persistent_watermark_headroom +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_persistent_watermark_shared +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_watermark_headroom +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_watermark_shared +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_counters_interface +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_counters +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_persistent_watermark_multicast +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_watermark_multicast +snmp/test_snmp_interfaces.py::test_snmp_interfaces +snmp/test_snmp_v2mib.py::test_snmp_v2mib +radv/test_radv_ipv6_ra.py::test_solicited_router_advertisement +radv/test_radv_ipv6_ra.py::test_solicited_router_advertisement_with_m_flag +acl/test_acl.py::TestBasicAcl::test_source_ip_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_source_ip_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_source_ip_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_source_ip_match_forwarded +acl/test_acl.py::TestBasicAcl::test_source_ip_match_forwarded +acl/test_acl.py::TestAclWithPortToggle::test_tcp_flags_match_dropped +acl/test_acl.py::TestBasicAcl::test_tcp_flags_match_dropped +acl/test_acl.py::TestIncrementalAcl::test_tcp_flags_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_tcp_flags_match_forwarded +acl/test_acl.py::TestBasicAcl::test_tcp_flags_match_forwarded +platform_tests.api/test_sfp.py::TestSfpApi::test_tx_disable +acl/test_acl.py::TestIncrementalAcl::test_udp_source_ip_match_dropped +acl/test_acl.py::TestBasicAcl::test_udp_source_ip_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_udp_source_ip_match_dropped +acl/test_acl.py::TestAclWithPortToggle::test_udp_source_ip_match_forwarded +acl/test_acl.py::TestIncrementalAcl::test_udp_source_ip_match_forwarded +acl/test_acl.py::TestBasicAcl::test_udp_source_ip_match_forwarded +test_procdockerstatsd.py::test_verify_redisexport diff --git a/infra/sanity-scripts/ring3_sanity_pass_t1_no_acl.txt b/infra/sanity-scripts/ring3_sanity_pass_t1_no_acl.txt new file mode 100644 index 00000000000..02de41c84cf --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_pass_t1_no_acl.txt @@ -0,0 +1,177 @@ +bgp/test_bgp_fact.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_procdockerstatsd.py::test_verify_redisexport +test_features.py +test_interfaces.py +monit/test_monit_status.py::test_monit_status +platform_tests/api/test_chassis.py::TestChassisApi::test_components +platform_tests/api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests/api/test_chassis.py::TestChassisApi::test_get_name +platform_tests/api/test_chassis.py::TestChassisApi::test_get_position_in_parent +platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence +platform_tests/api/test_chassis.py::TestChassisApi::test_get_reboot_cause +platform_tests/api/test_chassis.py::TestChassisApi::test_get_status +platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests/api/test_chassis.py::TestChassisApi::test_sfps +platform_tests/api/test_chassis.py::TestChassisApi::test_status_led +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals +platform_tests/api/test_component.py::TestComponentApi::test_get_description +platform_tests/api/test_component.py::TestComponentApi::test_get_model +platform_tests/api/test_component.py::TestComponentApi::test_get_name +platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent +platform_tests/api/test_component.py::TestComponentApi::test_get_presence +platform_tests/api/test_component.py::TestComponentApi::test_get_serial +platform_tests/api/test_component.py::TestComponentApi::test_get_status +platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable +platform_tests/api/test_sfp.py::TestSfpApi::test_get_model +platform_tests/api/test_sfp.py::TestSfpApi::test_get_name +platform_tests/api/test_sfp.py::TestSfpApi::test_get_presence +platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial +platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage +platform_tests/api/test_sfp.py::TestSfpApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent +platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence +platform_tests/api/test_thermal.py::TestThermalApi::test_get_status +platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status +platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +tacacs/test_jit_user.py::test_jit_user +tacacs/test_ro_disk.py::test_ro_disk +tacacs/test_ro_user.py::test_ro_user_allowed_command +tacacs/test_ro_user.py::test_ro_user_banned_command +telemetry/test_telemetry.py::test_config_db_parameters +telemetry/test_telemetry.py::test_telemetry_enabledbydefault +test_posttest.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_thermal_info +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_transceiver_info +snmp/test_snmp_memory.py::test_snmp_swap +cisco/test_platform_faults.py::test_platform_overtemp_fault +cisco/test_platform_faults.py::test_platform_undertemp_fault +configlet/test_add_rack.py::test_add_rack +stress/test_stress_routes.py::test_announce_withdraw_route +platform_tests.api/test_watchdog.py::TestWatchdogApi::test_arm_negative_timeout +platform_tests.api/test_watchdog.py::TestWatchdogApi::test_arm_too_big_timeout +cacl/test_cacl_application.py::test_cacl_application_nondualtor +cacl/test_cacl_function.py::test_cacl_function +cacl/test_cacl_application.py::test_cacl_scale_rules_ipv4 +cacl/test_cacl_application.py::test_cacl_scale_rules_ipv6 +platform_tests.sfp/test_sfpshow.py::test_check_sfp_presence +platform_tests.sfp/test_show_intf_xcvr.py::test_check_sfp_presence +platform_tests.sfp/test_sfpshow.py::test_check_sfpshow_eeprom +platform_tests.sfp/test_show_intf_xcvr.py::test_check_sfpshow_eeprom +platform_tests.sfp/test_sfputil.py::test_check_sfputil_eeprom +platform_tests.sfp/test_sfputil.py::test_check_sfputil_error_status +platform_tests.sfp/test_sfputil.py::test_check_sfputil_presence +platform_tests.sfp/test_sfputil.py::test_check_sfputil_reset +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_pfc_pause_delay_params +test_posttest.py::test_collect_techsupport +test_pretest.py::test_collect_testbed_prio +telemetry/test_telemetry.py::test_config_db_parameters +mvrf/test_mgmtvrf.py::TestMvrfOutbound::test_curl +pfcwd/test_pfc_config.py::TestDefaultPfcConfig::test_default_cfg_after_load_mg +dhcp_relay/test_dhcpv6_relay.py::test_dhcp_relay_after_link_flap +dhcp_relay/test_dhcpv6_relay.py::test_dhcp_relay_default +dhcp_relay/test_dhcpv6_relay.py::test_dhcp_relay_start_with_uplinks_down +dhcp_relay/test_dhcpv6_relay.py::test_dhcpv6_relay_counter +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +cacl/test_ebtables_application.py::test_ebtables_application +platform_tests.api/test_chassis.py::TestChassisApi::test_fan_drawers +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +platform_tests.api/test_fan_drawer.py::TestFanDrawerApi::test_get_all_fans +platform_tests.api/test_component.py::TestComponentApi::test_get_available_firmware_version +platform_tests.api/test_psu_fans.py::TestPsuFans::test_get_direction +platform_tests.api/test_fan_drawer_fans.py::TestFanDrawerFans::test_get_direction +platform_tests.api/test_chassis_fans.py::TestChassisFans::test_get_direction +platform_tests.api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests.api/test_sfp.py::TestSfpApi::test_get_error_description +platform_tests.api/test_fan_drawer_fans.py::TestFanDrawerFans::test_get_fans_target_speed +platform_tests.api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests.api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests.api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests.api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests.api/test_sfp.py::TestSfpApi::test_get_transceiver_threshold_info +platform_tests.api/test_sfp.py::TestSfpApi::test_get_tx_fault +platform_tests.api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests.api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests.api/test_component.py::TestComponentApi::test_install_firmware +test_interfaces.py::test_interfaces +pfcwd/test_pfc_config.py::TestPfcConfig::test_invalid_action_cfg +pfcwd/test_pfc_config.py::TestPfcConfig::test_invalid_detect_time_cfg +pfcwd/test_pfc_config.py::TestPfcConfig::test_invalid_restore_time_cfg +everflow/test_everflow_ipv6.py::TestIngressEverflowIPv6::test_invalid_tcp_rule +platform_tests.api/test_sfp.py::TestSfpApi::test_is_replaceable +override_config_table/test_override_config_table.py::test_load_minigraph_with_golden_config +pfcwd/test_pfc_config.py::TestPfcConfig::test_low_detect_time_cfg +ntp/test_ntp.py::test_ntp +mvrf/test_mgmtvrf.py::TestServices::test_ntp +ntp/test_ntp.py::test_ntp_long_jump_enabled +passw_hardening/test_passw_hardening.py::test_passw_hardening_age_expiration_warning +passw_hardening/test_passw_hardening.py::test_passw_hardening_age_expiration +passw_hardening/test_passw_hardening.py::test_passw_hardening_en_dis_policies +passw_hardening/test_passw_hardening.py::test_passw_hardening_history +passw_hardening/test_passw_hardening.py::test_passw_hardening_len_min +passw_hardening/test_passw_hardening.py::test_passw_hardening_policies_digits +passw_hardening/test_passw_hardening.py::test_passw_hardening_policies_lower_class +platform_tests.daemon/test_psud.py::test_pmon_psud_kill_and_start_status +platform_tests.daemon/test_psud.py::test_pmon_psud_running_status +platform_tests.daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests.daemon/test_psud.py::test_pmon_psud_term_and_start_status +platform_tests.daemon/test_syseepromd.py::test_pmon_syseepromd_kill_and_start_status +platform_tests.daemon/test_syseepromd.py::test_pmon_syseepromd_running_status +testbed_setup/test_populate_fdb.py::test_populate_fdb +portstat/test_portstat.py::test_portstat_delete_all +portstat/test_portstat.py::test_portstat_delete_tag +portstat/test_portstat.py::test_portstat_display_all +portstat/test_portstat.py::test_portstat_no_exceptions +portstat/test_portstat.py::test_portstat_period +mvrf/test_mgmtvrf.py::TestReboot::test_reboot +platform_tests/test_sequential_restart.py::test_restart_swss +test_features.py::test_show_features +iface_namingmode/test_iface_namingmode.py::TestShowInterfaces::test_show_interfaces_counter +iface_namingmode/test_iface_namingmode.py::TestShowInterfaces::test_show_interfaces_description +platform_tests.cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests.cli/test_show_platform.py::test_show_platform_temperature +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_persistent_watermark_headroom +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_persistent_watermark_shared +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_watermark_headroom +iface_namingmode/test_iface_namingmode.py::TestShowPriorityGroup::test_show_priority_group_watermark_shared +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_counters_interface +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_counters +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_persistent_watermark_multicast +iface_namingmode/test_iface_namingmode.py::TestShowQueue::test_show_queue_watermark_multicast +snmp/test_snmp_v2mib.py::test_snmp_v2mib +radv/test_radv_ipv6_ra.py::test_solicited_router_advertisement +radv/test_radv_ipv6_ra.py::test_solicited_router_advertisement_with_m_flag +platform_tests.api/test_sfp.py::TestSfpApi::test_tx_disable +test_procdockerstatsd.py::test_verify_redisexport diff --git a/infra/sanity-scripts/ring3_sanity_qos.txt b/infra/sanity-scripts/ring3_sanity_qos.txt new file mode 100644 index 00000000000..3c935cedcb8 --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_qos.txt @@ -0,0 +1,4 @@ +cisco/platform_tests/test_serviceability_pfc.py +cisco/qos/test_cpu_port_config.py +cisco/qos/test_q7_counters.py +cisco/qos/test_wred_config.py diff --git a/infra/sanity-scripts/ring3_sanity_sfd_staging.txt b/infra/sanity-scripts/ring3_sanity_sfd_staging.txt new file mode 100644 index 00000000000..2c5608b52f2 --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_sfd_staging.txt @@ -0,0 +1,82 @@ +bgp/test_bgp_fact.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_procdockerstatsd.py::test_verify_redisexport +test_features.py +test_interfaces.py +monit/test_monit_status.py::test_monit_status +platform_tests/api/test_chassis.py::TestChassisApi::test_components +platform_tests/api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests/api/test_chassis.py::TestChassisApi::test_get_name +platform_tests/api/test_chassis.py::TestChassisApi::test_get_position_in_parent +platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence +platform_tests/api/test_chassis.py::TestChassisApi::test_get_reboot_cause +platform_tests/api/test_chassis.py::TestChassisApi::test_get_status +platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests/api/test_chassis.py::TestChassisApi::test_sfps +platform_tests/api/test_chassis.py::TestChassisApi::test_status_led +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals +platform_tests/api/test_component.py::TestComponentApi::test_get_description +platform_tests/api/test_component.py::TestComponentApi::test_get_model +platform_tests/api/test_component.py::TestComponentApi::test_get_name +platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent +platform_tests/api/test_component.py::TestComponentApi::test_get_presence +platform_tests/api/test_component.py::TestComponentApi::test_get_serial +platform_tests/api/test_component.py::TestComponentApi::test_get_status +platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable +platform_tests/api/test_sfp.py::TestSfpApi::test_get_model +platform_tests/api/test_sfp.py::TestSfpApi::test_get_name +platform_tests/api/test_sfp.py::TestSfpApi::test_get_presence +platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial +platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage +platform_tests/api/test_sfp.py::TestSfpApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent +platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence +platform_tests/api/test_thermal.py::TestThermalApi::test_get_status +platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status +platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +tacacs/test_jit_user.py::test_jit_user +tacacs/test_ro_user.py::test_ro_user_allowed_command +tacacs/test_ro_user.py::test_ro_user_banned_command +telemetry/test_telemetry.py::test_config_db_parameters +telemetry/test_telemetry.py::test_telemetry_enabledbydefault +test_posttest.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_thermal_info +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_transceiver_info +snmp/test_snmp_memory.py::test_snmp_swap +snmp/test_snmp_loopback.py::test_snmp_loopback +cisco/test_platform_faults.py +cisco/ipfwd/test_cisco_nhop_group.py +cisco/qos/test_cpu_port_config.py +cisco/qos/test_q7_counters.py +cisco/qos/test_wred_config.py +platform_tests/test_serviceability_pfc.py +cisco/qos/test_cisco8000_buf_qos.py +cisco/auto_triage/test_cisco_system_health.py +cisco/platform_tests/test_platform_reboot.py +cisco/ipfwd/test_lpm.py diff --git a/infra/sanity-scripts/ring3_sanity_sim_dev.txt b/infra/sanity-scripts/ring3_sanity_sim_dev.txt new file mode 100644 index 00000000000..943c993f02b --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_sim_dev.txt @@ -0,0 +1,221 @@ +acl/custom_acl_table/test_custom_acl_table.py +acl/null_route/test_null_route_helper.py +acl/test_acl_outer_vlan.py +acl/test_acl.py +acl/test_stress_acl.py +arp/test_arp_dualtor.py +arp/test_arp_extended.py +arp/test_arpall.py +arp/test_neighbor_mac_noptf.py +arp/test_neighbor_mac.py +arp/test_stress_arp.py +arp/test_tagged_arp.py +arp/test_unknown_mac.py +autorestart/test_container_autorestart.py +bfd/test_bfd.py +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_bounce.py +bgp/test_bgp_dual_asn.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_session_flap.py +bgp/test_bgp_slb.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +bgp/test_traffic_shift.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +configlet/test_add_rack.py +console/test_console_availability.py +console/test_console_driver.py +console/test_console_loopback.py +console/test_console_reversessh.py +console/test_console_udevrule.py +container_checker/test_container_checker.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +dhcp_relay/test_dhcpv6_relay.py +dns/test_dns_resolv_conf.py +drop_packets/test_configurable_drop_counters.py +ecmp/inner_hashing/test_inner_hashing_lag.py +ecmp/inner_hashing/test_inner_hashing.py +ecmp/inner_hashing/test_wr_inner_hashing_lag.py +ecmp/inner_hashing/test_wr_inner_hashing.py +ecmp/test_fgnhg.py +everflow/test_everflow_ipv6.py +everflow/test_everflow_per_interface.py +everflow/test_everflow_testbed.py +fdb/test_fdb_mac_expire.py +fdb/test_fdb.py +fib/test_fib.py +generic_config_updater/test_aaa.py +generic_config_updater/test_bgp_prefix.py +generic_config_updater/test_bgp_speaker.py +generic_config_updater/test_bgpl.py +generic_config_updater/test_cacl.py +generic_config_updater/test_dhcp_relay.py +generic_config_updater/test_ecn_config_update.py +generic_config_updater/test_eth_interface.py +generic_config_updater/test_incremental_qos.py +generic_config_updater/test_ipv6.py +generic_config_updater/test_lo_interface.py +generic_config_updater/test_mmu_dynamic_threshold_config_update.py +generic_config_updater/test_monitor_config.py +generic_config_updater/test_ntp.py +generic_config_updater/test_pfcwd_interval.py +generic_config_updater/test_portchannel_interface.py +generic_config_updater/test_syslog.py +generic_config_updater/test_vlan_interface.py +http/test_http_copy.py +iface_namingmode/test_iface_namingmode.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +ipfwd/test_nhop_group.py +lldp/test_lldp.py +log_fidelity/test_bgp_shutdown.py +macsec/test_controlplane.py +macsec/test_dataplane.py +macsec/test_deployment.py +macsec/test_fault_handling.py +macsec/test_interop_protocol.py +mclag/test_mclag_l3.py +memory_checker/test_memory_checker.py +monit/test_monit_status.py +mpls/test_mpls.py +mvrf/test_mgmtvrf.py +nat/test_dynamic_nat.py +nat/test_static_nat.py +ntp/test_ntp.py +override_config_table/test_override_config_table.py +passw_hardening/test_passw_hardening.py +pc/test_lag_2.py +pc/test_lag_member.py +pc/test_po_cleanup.py +pc/test_po_update.py +pc/test_po_voq.py +pfc_asym/test_pfc_asym.py +pfcwd/test_pfc_config.py +pfcwd/test_pfcwd_all_port_storm.py +pfcwd/test_pfcwd_function.py +pfcwd/test_pfcwd_timer_accuracy.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_module.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_psu.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/broadcom/test_ser.py +platform_tests/cli/test_show_chassis_module.py +platform_tests/cli/test_show_platform.py +platform_tests/daemon/test_chassisd.py +platform_tests/daemon/test_fancontrol.py +platform_tests/daemon/test_ledd.py +platform_tests/daemon/test_pcied.py +platform_tests/daemon/test_psud.py +platform_tests/daemon/test_syseepromd.py +platform_tests/fwutil/test_fwutil.py +platform_tests/mellanox/test_check_sfp_eeprom.py +platform_tests/mellanox/test_check_sfp_presence.py +platform_tests/mellanox/test_check_sfp_using_ethtool.py +platform_tests/mellanox/test_check_sysfs.py +platform_tests/mellanox/test_hw_management_service.py +platform_tests/mellanox/test_psu_power_threshold.py +platform_tests/mellanox/test_thermal_control.py +platform_tests/sfp/test_sfpshow.py +platform_tests/sfp/test_sfputil.py +platform_tests/sfp/test_show_intf_xcvr.py +platform_tests/test_auto_negotiation.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_memory_exhaustion.py +platform_tests/test_platform_info.py +platform_tests/test_port_toggle.py +platform_tests/test_power_budget_info.py +platform_tests/test_sensors.py +platform_tests/test_sequential_restart.py +platform_tests/test_service_warm_restart.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +portstat/test_portstat.py +radv/test_radv_ipv6_ra.py +radv/test_radv_restart.py +restapi/test_restapi.py +route/test_default_route.py +route/test_route_flap.py +route/test_route_flow_counter.py +route/test_route_perf.py +route/test_static_route.py +scp/test_scp_copy.py +sflow/test_sflow.py +show_techsupport/test_auto_techsupport.py +show_techsupport/test_techsupport_no_secret.py +show_techsupport/test_techsupport.py +snappi/bgp/test_bgp_rib_in_capacity.py +snappi/bgp/test_bgp_rib_in_convergence.py +snappi/ecn/test_dequeue_ecn_with_snappi.py +snappi/ecn/test_red_accuracy_with_snappi.py +snappi/lacp/test_lacp_timers_effect.py +snappi/pfc/test_global_pause_with_snappi.py +snappi/pfc/test_pfc_pause_lossless_with_snappi.py +snappi/pfc/test_pfc_pause_lossy_with_snappi.py +snappi/pfc/test_pfc_pause_response_with_snappi.py +snappi/pfcwd/test_pfcwd_a2a_with_snappi.py +snappi/pfcwd/test_pfcwd_basic_with_snappi.py +snappi/pfcwd/test_pfcwd_burst_storm_with_snappi.py +snappi/pfcwd/test_pfcwd_m2o_with_snappi.py +snappi/pfcwd/test_pfcwd_runtime_traffic_with_snappi.py +snappi/test_snappi.py +snmp/test_snmp_cpu.py +snmp/test_snmp_default_route.py +snmp/test_snmp_fdb.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_memory.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py +span/test_port_mirroring.py +ssh/test_ssh_ciphers.py +ssh/test_ssh_default_password.py +ssh/test_ssh_limit.py +ssh/test_ssh_stress.py +stress/test_stress_routes.py +sub_port_interfaces/test_show_subinterface.py +sub_port_interfaces/test_sub_port_interfaces.py +sub_port_interfaces/test_sub_port_l2_forwarding.py +syslog/test_syslog_source_ip.py +syslog/test_syslog.py +system_health/test_system_health.py +system_health/test_system_status.py +telemetry/test_telemetry.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_posttest.py +test_pretest.py +test_procdockerstatsd.py +test_vs_chassis_setup.py +testbed_setup/test_add_property_spytest_junit_xml.py +testbed_setup/test_gen_spy_testbed.py +testbed_setup/test_populate_fdb.py +tests/test_posttest.py +tests/test_pretest.py +upgrade_path/test_upgrade_path.py +vlan/test_autostate_disabled.py +vlan/test_host_vlan.py +vlan/test_vlan_ping.py +vlan/test_vlan.py \ No newline at end of file diff --git a/infra/sanity-scripts/ring3_sanity_sim_dev_t0.txt b/infra/sanity-scripts/ring3_sanity_sim_dev_t0.txt new file mode 100644 index 00000000000..10d49098532 --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_sim_dev_t0.txt @@ -0,0 +1,219 @@ +acl/custom_acl_table/test_custom_acl_table.py +acl/null_route/test_null_route_helper.py +acl/test_acl_outer_vlan.py +acl/test_acl.py +acl/test_stress_acl.py +arp/test_arp_dualtor.py +arp/test_arp_extended.py +arp/test_arpall.py +arp/test_neighbor_mac_noptf.py +arp/test_neighbor_mac.py +arp/test_stress_arp.py +arp/test_tagged_arp.py +arp/test_unknown_mac.py +autorestart/test_container_autorestart.py +bfd/test_bfd.py +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_dual_asn.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_session_flap.py +bgp/test_bgp_slb.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +bgp/test_traffic_shift.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +configlet/test_add_rack.py +console/test_console_availability.py +console/test_console_driver.py +console/test_console_loopback.py +console/test_console_reversessh.py +console/test_console_udevrule.py +container_checker/test_container_checker.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +dhcp_relay/test_dhcpv6_relay.py +dns/test_dns_resolv_conf.py +drop_packets/test_configurable_drop_counters.py +ecmp/inner_hashing/test_inner_hashing_lag.py +ecmp/inner_hashing/test_inner_hashing.py +ecmp/inner_hashing/test_wr_inner_hashing_lag.py +ecmp/inner_hashing/test_wr_inner_hashing.py +ecmp/test_fgnhg.py +everflow/test_everflow_ipv6.py +everflow/test_everflow_per_interface.py +everflow/test_everflow_testbed.py +fdb/test_fdb_mac_expire.py +fdb/test_fdb.py +fib/test_fib.py +generic_config_updater/test_aaa.py +generic_config_updater/test_bgp_prefix.py +generic_config_updater/test_bgp_speaker.py +generic_config_updater/test_bgpl.py +generic_config_updater/test_cacl.py +generic_config_updater/test_dhcp_relay.py +generic_config_updater/test_ecn_config_update.py +generic_config_updater/test_eth_interface.py +generic_config_updater/test_incremental_qos.py +generic_config_updater/test_ipv6.py +generic_config_updater/test_lo_interface.py +generic_config_updater/test_mmu_dynamic_threshold_config_update.py +generic_config_updater/test_monitor_config.py +generic_config_updater/test_ntp.py +generic_config_updater/test_pfcwd_interval.py +generic_config_updater/test_portchannel_interface.py +generic_config_updater/test_syslog.py +generic_config_updater/test_vlan_interface.py +http/test_http_copy.py +iface_namingmode/test_iface_namingmode.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +ipfwd/test_nhop_group.py +lldp/test_lldp.py +log_fidelity/test_bgp_shutdown.py +macsec/test_controlplane.py +macsec/test_dataplane.py +macsec/test_deployment.py +macsec/test_fault_handling.py +macsec/test_interop_protocol.py +mclag/test_mclag_l3.py +memory_checker/test_memory_checker.py +monit/test_monit_status.py +mpls/test_mpls.py +mvrf/test_mgmtvrf.py +nat/test_dynamic_nat.py +nat/test_static_nat.py +ntp/test_ntp.py +override_config_table/test_override_config_table.py +passw_hardening/test_passw_hardening.py +pc/test_lag_2.py +pc/test_lag_member.py +pc/test_po_cleanup.py +pc/test_po_update.py +pc/test_po_voq.py +pfc_asym/test_pfc_asym.py +pfcwd/test_pfc_config.py +pfcwd/test_pfcwd_all_port_storm.py +pfcwd/test_pfcwd_function.py +pfcwd/test_pfcwd_timer_accuracy.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_module.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_psu.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/broadcom/test_ser.py +platform_tests/cli/test_show_chassis_module.py +platform_tests/cli/test_show_platform.py +platform_tests/daemon/test_chassisd.py +platform_tests/daemon/test_fancontrol.py +platform_tests/daemon/test_ledd.py +platform_tests/daemon/test_pcied.py +platform_tests/daemon/test_psud.py +platform_tests/daemon/test_syseepromd.py +platform_tests/fwutil/test_fwutil.py +platform_tests/mellanox/test_check_sfp_eeprom.py +platform_tests/mellanox/test_check_sfp_presence.py +platform_tests/mellanox/test_check_sfp_using_ethtool.py +platform_tests/mellanox/test_check_sysfs.py +platform_tests/mellanox/test_hw_management_service.py +platform_tests/mellanox/test_psu_power_threshold.py +platform_tests/mellanox/test_thermal_control.py +platform_tests/sfp/test_sfpshow.py +platform_tests/sfp/test_sfputil.py +platform_tests/sfp/test_show_intf_xcvr.py +platform_tests/test_auto_negotiation.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_memory_exhaustion.py +platform_tests/test_platform_info.py +platform_tests/test_port_toggle.py +platform_tests/test_power_budget_info.py +platform_tests/test_sensors.py +platform_tests/test_sequential_restart.py +platform_tests/test_service_warm_restart.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +portstat/test_portstat.py +radv/test_radv_ipv6_ra.py +radv/test_radv_restart.py +restapi/test_restapi.py +route/test_default_route.py +route/test_route_flap.py +route/test_route_flow_counter.py +route/test_route_perf.py +route/test_static_route.py +scp/test_scp_copy.py +sflow/test_sflow.py +show_techsupport/test_auto_techsupport.py +show_techsupport/test_techsupport_no_secret.py +show_techsupport/test_techsupport.py +snappi/bgp/test_bgp_rib_in_capacity.py +snappi/bgp/test_bgp_rib_in_convergence.py +snappi/ecn/test_dequeue_ecn_with_snappi.py +snappi/ecn/test_red_accuracy_with_snappi.py +snappi/lacp/test_lacp_timers_effect.py +snappi/pfc/test_global_pause_with_snappi.py +snappi/pfc/test_pfc_pause_lossless_with_snappi.py +snappi/pfc/test_pfc_pause_lossy_with_snappi.py +snappi/pfc/test_pfc_pause_response_with_snappi.py +snappi/pfcwd/test_pfcwd_a2a_with_snappi.py +snappi/pfcwd/test_pfcwd_basic_with_snappi.py +snappi/pfcwd/test_pfcwd_burst_storm_with_snappi.py +snappi/pfcwd/test_pfcwd_m2o_with_snappi.py +snappi/pfcwd/test_pfcwd_runtime_traffic_with_snappi.py +snappi/test_snappi.py +snmp/test_snmp_cpu.py +snmp/test_snmp_default_route.py +snmp/test_snmp_fdb.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_memory.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py +span/test_port_mirroring.py +ssh/test_ssh_ciphers.py +ssh/test_ssh_default_password.py +ssh/test_ssh_limit.py +ssh/test_ssh_stress.py +stress/test_stress_routes.py +sub_port_interfaces/test_show_subinterface.py +sub_port_interfaces/test_sub_port_interfaces.py +sub_port_interfaces/test_sub_port_l2_forwarding.py +syslog/test_syslog_source_ip.py +syslog/test_syslog.py +system_health/test_system_health.py +system_health/test_system_status.py +telemetry/test_telemetry.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_posttest.py +test_pretest.py +test_procdockerstatsd.py +test_vs_chassis_setup.py +testbed_setup/test_add_property_spytest_junit_xml.py +testbed_setup/test_gen_spy_testbed.py +testbed_setup/test_populate_fdb.py +tests/test_posttest.py +tests/test_pretest.py +upgrade_path/test_upgrade_path.py +vlan/test_autostate_disabled.py +vlan/test_host_vlan.py +vlan/test_vlan_ping.py +vlan/test_vlan.py \ No newline at end of file diff --git a/infra/sanity-scripts/ring3_sanity_staging.txt b/infra/sanity-scripts/ring3_sanity_staging.txt new file mode 100644 index 00000000000..c53f0c5137c --- /dev/null +++ b/infra/sanity-scripts/ring3_sanity_staging.txt @@ -0,0 +1,80 @@ +bgp/test_bgp_fact.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd +test_procdockerstatsd.py::test_verify_redisexport +test_features.py +test_interfaces.py +monit/test_monit_status.py::test_monit_status +platform_tests/api/test_chassis.py::TestChassisApi::test_components +platform_tests/api/test_chassis.py::TestChassisApi::test_get_eeprom +platform_tests/api/test_chassis.py::TestChassisApi::test_get_name +platform_tests/api/test_chassis.py::TestChassisApi::test_get_position_in_parent +platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence +platform_tests/api/test_chassis.py::TestChassisApi::test_get_reboot_cause +platform_tests/api/test_chassis.py::TestChassisApi::test_get_status +platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager +platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog +platform_tests/api/test_chassis.py::TestChassisApi::test_sfps +platform_tests/api/test_chassis.py::TestChassisApi::test_status_led +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals +platform_tests/api/test_component.py::TestComponentApi::test_get_description +platform_tests/api/test_component.py::TestComponentApi::test_get_model +platform_tests/api/test_component.py::TestComponentApi::test_get_name +platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent +platform_tests/api/test_component.py::TestComponentApi::test_get_presence +platform_tests/api/test_component.py::TestComponentApi::test_get_serial +platform_tests/api/test_component.py::TestComponentApi::test_get_status +platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable +platform_tests/api/test_sfp.py::TestSfpApi::test_get_model +platform_tests/api/test_sfp.py::TestSfpApi::test_get_name +platform_tests/api/test_sfp.py::TestSfpApi::test_get_presence +platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial +platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_bulk_status +platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_info +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias +platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power +platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage +platform_tests/api/test_sfp.py::TestSfpApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_get_position_in_parent +platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence +platform_tests/api/test_thermal.py::TestThermalApi::test_get_status +platform_tests/api/test_thermal.py::TestThermalApi::test_is_replaceable +platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold +platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold +platform_tests/cli/test_show_platform.py::test_show_platform_summary +platform_tests/cli/test_show_platform.py::test_show_platform_syseeprom +platform_tests/cli/test_show_platform.py::test_show_platform_temperature +platform_tests/daemon/test_pcied.py::test_pmon_pcied_stop_and_start_status +platform_tests/daemon/test_pcied.py::test_pmon_pcied_term_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_running_status +platform_tests/daemon/test_psud.py::test_pmon_psud_stop_and_start_status +platform_tests/daemon/test_psud.py::test_pmon_psud_term_and_start_status +ssh/test_ssh_ciphers.py::test_ssh_protocol_version +system_health/test_system_status.py +tacacs/test_jit_user.py::test_jit_user +tacacs/test_ro_disk.py::test_ro_disk +tacacs/test_ro_user.py::test_ro_user_allowed_command +tacacs/test_ro_user.py::test_ro_user_banned_command +telemetry/test_telemetry.py::test_config_db_parameters +telemetry/test_telemetry.py::test_telemetry_enabledbydefault +test_posttest.py +snmp/test_snmp_lldp.py::test_snmp_lldp +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_thermal_info +snmp/test_snmp_phy_entity.py::EntitySensorStatus::test_transceiver_info +snmp/test_snmp_memory.py::test_snmp_swap +snmp/test_snmp_loopback.py::test_snmp_loopback +cisco/test_platform_faults.py +cisco/ipfwd/test_cisco_nhop_group.py +cisco/qos/test_cisco8000_buf_qos.py +cisco/auto_triage/test_cisco_system_health.py +cisco/platform_tests/test_platform_reboot.py diff --git a/infra/sanity-scripts/ring4_sanity_part1.txt b/infra/sanity-scripts/ring4_sanity_part1.txt new file mode 100644 index 00000000000..8501420c4a9 --- /dev/null +++ b/infra/sanity-scripts/ring4_sanity_part1.txt @@ -0,0 +1,101 @@ +acl/test_acl.py::TestBasicAcl +arp/test_arpall.py +arp/test_neighbor_mac_noptf.py +arp/test_neighbor_mac.py +arp/test_stress_arp.py +arp/test_tagged_arp.py +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_bounce.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_slb.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +bgp/test_traffic_shift.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +crm/test_crm.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +dhcp_relay/test_dhcpv6_relay.py +everflow/test_everflow_ipv6.py +everflow/test_everflow_per_interface.py +everflow/test_everflow_testbed.py +fdb/test_fdb_mac_expire.py +fdb/test_fdb_mac_move.py +fdb/test_fdb.py +fib/test_fib.py +generic_config_updater/test_aaa.py +generic_config_updater/test_bgpl.py +generic_config_updater/test_cacl.py +generic_config_updater/test_dhcp_relay.py +generic_config_updater/test_incremental_qos.py +generic_config_updater/test_ipv6.py +generic_config_updater/test_lo_interface.py +generic_config_updater/test_pfcwd_interval.py +generic_config_updater/test_portchannel_interface.py +generic_config_updater/test_syslog.py +generic_config_updater/test_vlan_interface.py +http/test_http_copy.py +iface_namingmode/test_iface_namingmode.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +ipfwd/test_nhop_count.py +lldp/test_lldp.py +log_fidelity/test_bgp_shutdown.py +memory_checker/test_memory_checker.py +monit/test_monit_status.py +mvrf/test_mgmtvrf.py +nat/test_dynamic_nat.py +nat/test_static_nat.py +ntp/test_ntp.py +pc/test_lag_2.py +pc/test_po_cleanup.py +pc/test_po_update_orig.py +pc/test_po_voq.py +pfcwd/test_pfc_config.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_module.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_psu.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_chassis_module.py +platform_tests/cli/test_show_platform.py +platform_tests/daemon/test_fancontrol.py +platform_tests/daemon/test_ledd.py +platform_tests/daemon/test_pcied.py +platform_tests/daemon/test_psud.py +platform_tests/daemon/test_syseepromd.py +platform_tests/fwutil/test_fwutil.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_reload_config.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +portstat/test_portstat.py +process_monitoring/test_critical_process_monitoring.py +qos/test_buffer_traditional.py +qos/test_buffer.py +qos/test_pfc_counters.py +qos/test_pfc_pause.py +qos/test_qos_masic.py +qos/test_qos_sai.py +radv/test_radv_ipv6_ra.py +restapi/test_restapi.py +route/test_default_route.py +route/test_route_perf.py +route/test_static_route.py +scp/test_scp_copy.py +sflow/test_sflow.py diff --git a/infra/sanity-scripts/ring4_sanity_part2.txt b/infra/sanity-scripts/ring4_sanity_part2.txt new file mode 100644 index 00000000000..5fb35b5c910 --- /dev/null +++ b/infra/sanity-scripts/ring4_sanity_part2.txt @@ -0,0 +1,77 @@ +platform_tests/daemon/test_fancontrol.py +platform_tests/daemon/test_ledd.py +platform_tests/daemon/test_pcied.py +platform_tests/daemon/test_psud.py +platform_tests/daemon/test_syseepromd.py +platform_tests/fwutil/test_fwutil.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_reload_config.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +portstat/test_portstat.py +process_monitoring/test_critical_process_monitoring.py +qos/test_buffer_traditional.py +qos/test_buffer.py +qos/test_pfc_counters.py +qos/test_pfc_pause.py +qos/test_qos_masic.py +qos/test_qos_sai.py +radv/test_radv_ipv6_ra.py +restapi/test_restapi.py +route/test_default_route.py +route/test_route_perf.py +route/test_static_route.py +scp/test_scp_copy.py +sflow/test_sflow.py +show_techsupport/test_techsupport_no_secret.py +show_techsupport/test_techsupport.py +snmp/test_snmp_cpu.py +snmp/test_snmp_default_route.py +snmp/test_snmp_fdb.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_memory.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py +span/test_port_mirroring.py +ssh/test_ssh_ciphers.py +ssh/test_ssh_stress.py +stress/test_stress_routes.py +sub_port_interfaces/test_show_subinterface.py +sub_port_interfaces/test_sub_port_interfaces.py +sub_port_interfaces/test_sub_port_l2_forwarding.py +syslog/test_syslog.py +system_health/test_system_health.py +system_health/test_system_status.py +tacacs/test_accounting.py +tacacs/test_authorization.py +tacacs/test_jit_user.py +tacacs/test_ro_disk.py +tacacs/test_ro_user.py +tacacs/test_rw_user.py +telemetry/test_telemetry.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_posttest.py +test_pretest.py +test_procdockerstatsd.py +testbed_setup/test_add_property_spytest_junit_xml.py +testbed_setup/test_gen_spy_testbed.py +testbed_setup/test_populate_fdb.py +tests/test_posttest.py +tests/test_pretest.py +vlan/test_host_vlan.py +vlan/test_vlan_ping.py +vlan/test_vlan.py +vrf/test_vrf_attr.py +vrf/test_vrf.py +vxlan/test_vnet_route_leak.py +vxlan/test_vnet_vxlan.py +vxlan/test_vxlan_decap.py +vxlan/test_vxlan_ecmp.py \ No newline at end of file diff --git a/infra/sanity-scripts/ring_acl.txt b/infra/sanity-scripts/ring_acl.txt new file mode 100644 index 00000000000..600b318dcd5 --- /dev/null +++ b/infra/sanity-scripts/ring_acl.txt @@ -0,0 +1,2 @@ +acl/test_acl.py::TestBasicAcl +acl/test_acl.py::TestIncrementalAcl \ No newline at end of file diff --git a/infra/sanity-scripts/ring_bgp.txt b/infra/sanity-scripts/ring_bgp.txt new file mode 100644 index 00000000000..415bbd0a2c6 --- /dev/null +++ b/infra/sanity-scripts/ring_bgp.txt @@ -0,0 +1,11 @@ +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_bounce.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_slb.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +bgp/test_traffic_shift.py \ No newline at end of file diff --git a/infra/sanity-scripts/ring_everflow.txt b/infra/sanity-scripts/ring_everflow.txt new file mode 100644 index 00000000000..97c9a74360d --- /dev/null +++ b/infra/sanity-scripts/ring_everflow.txt @@ -0,0 +1,3 @@ +everflow/test_everflow_ipv6.py +everflow/test_everflow_per_interface.py +everflow/test_everflow_testbed.py diff --git a/infra/sanity-scripts/ring_nightly.txt b/infra/sanity-scripts/ring_nightly.txt new file mode 100644 index 00000000000..ceda357d0e1 --- /dev/null +++ b/infra/sanity-scripts/ring_nightly.txt @@ -0,0 +1,152 @@ +acl/test_acl.py::TestBasicAcl +arp/test_arpall.py +arp/test_neighbor_mac_noptf.py +arp/test_neighbor_mac.py +arp/test_stress_arp.py +arp/test_tagged_arp.py +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_bounce.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_slb.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +bgp/test_traffic_shift.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +crm/test_crm.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +dhcp_relay/test_dhcpv6_relay.py +everflow/test_everflow_ipv6.py +everflow/test_everflow_per_interface.py +everflow/test_everflow_testbed.py +fdb/test_fdb_mac_expire.py +fdb/test_fdb_mac_move.py +fdb/test_fdb.py +fib/test_fib.py +generic_config_updater/test_aaa.py +generic_config_updater/test_bgpl.py +generic_config_updater/test_cacl.py +generic_config_updater/test_dhcp_relay.py +generic_config_updater/test_incremental_qos.py +generic_config_updater/test_ipv6.py +generic_config_updater/test_lo_interface.py +generic_config_updater/test_pfcwd_interval.py +generic_config_updater/test_portchannel_interface.py +generic_config_updater/test_syslog.py +generic_config_updater/test_vlan_interface.py +http/test_http_copy.py +iface_namingmode/test_iface_namingmode.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +ipfwd/test_nhop_count.py +lldp/test_lldp.py +log_fidelity/test_bgp_shutdown.py +memory_checker/test_memory_checker.py +monit/test_monit_status.py +mvrf/test_mgmtvrf.py +nat/test_dynamic_nat.py +nat/test_static_nat.py +ntp/test_ntp.py +pc/test_lag_2.py +pc/test_po_cleanup.py +pc/test_po_update_orig.py +pc/test_po_voq.py +pfcwd/test_pfc_config.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_module.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_psu.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_chassis_module.py +platform_tests/cli/test_show_platform.py +platform_tests/daemon/test_fancontrol.py +platform_tests/daemon/test_ledd.py +platform_tests/daemon/test_pcied.py +platform_tests/daemon/test_psud.py +platform_tests/daemon/test_syseepromd.py +platform_tests/fwutil/test_fwutil.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_reload_config.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +portstat/test_portstat.py +process_monitoring/test_critical_process_monitoring.py +qos/test_buffer_traditional.py +qos/test_buffer.py +qos/test_pfc_counters.py +qos/test_pfc_pause.py +qos/test_qos_masic.py +qos/test_qos_sai.py +radv/test_radv_ipv6_ra.py +restapi/test_restapi.py +route/test_default_route.py +route/test_route_perf.py +route/test_static_route.py +scp/test_scp_copy.py +sflow/test_sflow.py +show_techsupport/test_techsupport_no_secret.py +show_techsupport/test_techsupport.py +snmp/test_snmp_cpu.py +snmp/test_snmp_default_route.py +snmp/test_snmp_fdb.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_memory.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py +span/test_port_mirroring.py +ssh/test_ssh_ciphers.py +ssh/test_ssh_stress.py +stress/test_stress_routes.py +sub_port_interfaces/test_show_subinterface.py +sub_port_interfaces/test_sub_port_interfaces.py +sub_port_interfaces/test_sub_port_l2_forwarding.py +syslog/test_syslog.py +system_health/test_system_health.py +system_health/test_system_status.py +tacacs/test_accounting.py +tacacs/test_authorization.py +tacacs/test_jit_user.py +tacacs/test_ro_disk.py +tacacs/test_ro_user.py +tacacs/test_rw_user.py +telemetry/test_telemetry.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_posttest.py +test_pretest.py +test_procdockerstatsd.py +testbed_setup/test_add_property_spytest_junit_xml.py +testbed_setup/test_gen_spy_testbed.py +testbed_setup/test_populate_fdb.py +tests/test_posttest.py +tests/test_pretest.py +vlan/test_host_vlan.py +vlan/test_vlan_ping.py +vlan/test_vlan.py +vrf/test_vrf_attr.py +vrf/test_vrf.py +vxlan/test_vnet_route_leak.py +vxlan/test_vnet_vxlan.py +vxlan/test_vxlan_decap.py +vxlan/test_vxlan_ecmp.py \ No newline at end of file diff --git a/infra/sanity-scripts/ring_platform_tests.txt b/infra/sanity-scripts/ring_platform_tests.txt new file mode 100644 index 00000000000..cb10e15a24d --- /dev/null +++ b/infra/sanity-scripts/ring_platform_tests.txt @@ -0,0 +1,24 @@ +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_module.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_psu.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_chassis_module.py +platform_tests/cli/test_show_platform.py +platform_tests/daemon/test_fancontrol.py +platform_tests/daemon/test_ledd.py +platform_tests/daemon/test_pcied.py +platform_tests/daemon/test_psud.py +platform_tests/daemon/test_syseepromd.py +platform_tests/fwutil/test_fwutil.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_reload_config.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py diff --git a/infra/sanity-scripts/ring_snmp.txt b/infra/sanity-scripts/ring_snmp.txt new file mode 100644 index 00000000000..5ae7f9d3a37 --- /dev/null +++ b/infra/sanity-scripts/ring_snmp.txt @@ -0,0 +1,12 @@ +snmp/test_snmp_cpu.py +snmp/test_snmp_default_route.py +snmp/test_snmp_fdb.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_memory.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py diff --git a/infra/sanity-scripts/sanity_15.txt b/infra/sanity-scripts/sanity_15.txt new file mode 100644 index 00000000000..5b10d9208c8 --- /dev/null +++ b/infra/sanity-scripts/sanity_15.txt @@ -0,0 +1,7 @@ +lldp/test_lldp.py +arp/test_arpall.py +snmp/test_snmp_default_route.py +ipfwd/test_dip_sip.py +route/test_default_route.py +test_interfaces.py +platform_tests/cli/test_show_platform.py \ No newline at end of file diff --git a/infra/sanity-scripts/sanity_scripts.txt b/infra/sanity-scripts/sanity_scripts.txt new file mode 100755 index 00000000000..6059e8d3517 --- /dev/null +++ b/infra/sanity-scripts/sanity_scripts.txt @@ -0,0 +1,12 @@ +test_interfaces.py +test_procdockerstatsd.py +lldp/test_lldp.py::test_lldp +test_posttest.py +test_pretest.py::test_cleanup_cache +test_pretest.py::test_cleanup_testbed +test_pretest.py::test_collect_testbed_prio +test_pretest.py::test_disable_container_autorestart +test_pretest.py::test_disable_rsyslog_rate_limit +test_pretest.py::test_features_state +test_pretest.py::test_generate_running_golden_config +test_pretest.py::test_stop_pfcwd diff --git a/infra/sanity-scripts/serviceability.txt b/infra/sanity-scripts/serviceability.txt new file mode 100644 index 00000000000..ccb3d4cda3f --- /dev/null +++ b/infra/sanity-scripts/serviceability.txt @@ -0,0 +1,3 @@ +cisco/platform_tests/test_serviceability_basic.py +cisco/platform_tests/test_serviceability_pfc.py +cisco/platform_tests/test_serviceability_packet_capture.py diff --git a/infra/sanity-scripts/t0_dhcp_sim_must_pass.txt b/infra/sanity-scripts/t0_dhcp_sim_must_pass.txt new file mode 100644 index 00000000000..c5893ab781c --- /dev/null +++ b/infra/sanity-scripts/t0_dhcp_sim_must_pass.txt @@ -0,0 +1,98 @@ +test_pretest.py +test_announce_routes.py +test_features.py +test_interfaces.py +test_procdockerstatsd.py +fib/test_fib.py +bgp/test_bgp_fact.py +bgp/test_bgp_dual_asn.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +acl/test_acl.py +portstat/test_portstat.py +lldp/test_lldp.py +iface_namingmode/test_iface_namingmode.py +generic_config_updater/test_aaa.py +generic_config_updater/test_bgpl.py +generic_config_updater/test_dhcp_relay.py +generic_config_updater/test_incremental_qos.py +generic_config_updater/test_ipv6.py +generic_config_updater/test_lo_interface.py +generic_config_updater/test_pfcwd_interval.py +generic_config_updater/test_portchannel_interface.py +generic_config_updater/test_syslog.py +generic_config_updater/test_vlan_interface.py +dhcp_relay/test_dhcp_relay.py +dhcp_relay/test_dhcpv6_relay.py +dhcp_relay/test_dhcp_pkt_recv.py +dhcp_relay/test_dhcp_relay_stress.py +everflow/test_everflow_testbed.py +#acl/custom_acl_table/test_custom_acl_table.py +arp/test_neighbor_mac_noptf.py +arp/test_arp_extended.py +arp/test_tagged_arp.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +fdb/test_fdb.py +fdb/test_fdb_flush.py +fdb/test_fdb_mac_expire.py +fdb/test_fdb_mac_move.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +radv/test_radv_restart.py +radv/test_radv_run.py +log_fidelity/test_bgp_shutdown.py +memory_checker/test_memory_checker.py +monit/test_monit_status.py +ssh/test_ssh_ciphers.py +ssh/test_ssh_limit.py +override_config_table/test_override_config_table.py +snmp/test_snmp_cpu.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_default_route.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_memory.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py +snmp/test_snmp_fdb.py +route/test_default_route.py +route/test_static_route.py +route/test_route_consistency.py +route/test_route_flap.py +route/test_duplicate_route.py +stress/test_stress_routes.py +show_techsupport/test_auto_techsupport.py +syslog/test_syslog.py +system_health/test_system_health.py +system_health/test_system_status.py +test_features.py +test_interfaces.py +vxlan/test_vxlan_decap.py +route/test_route_perf.py +acl/null_route/test_null_route_helper.py +pc/test_po_cleanup.py +pc/test_po_update.py +acl/test_stress_acl.py +mvrf/test_mgmtvrf.py +vlan/test_autostate_disabled.py +vlan/test_host_vlan.py +vlan/test_vlan_ping.py +vlan/test_vlan.py +telemetry/test_telemetry.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_port_toggle.py +platform_tests/test_power_budget_info.py +platform_tests/test_thermal_state_db.py +platform_tests/sfp/test_sfpshow.py +platform_tests/sfp/test_sfputil.py +platform_tests/test_thermal_state_db.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_module.py +platform_tests/api/test_sfp.py +tests/test_posttest.py diff --git a/infra/sanity-scripts/t0_scripts.txt b/infra/sanity-scripts/t0_scripts.txt new file mode 100644 index 00000000000..2e3c4dfe51c --- /dev/null +++ b/infra/sanity-scripts/t0_scripts.txt @@ -0,0 +1,137 @@ +test_announce_routes.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_pretest.py +test_procdockerstatsd.py +bgp/test_bgp_fact.py +bgp/test_bgp_bbr.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_allow_list.py +bgp/test_traffic_shift.py +bgp/test_bgpmon.py +bgp/test_bgp_update_timer.py +bgp/test_bgp_speaker.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_bounce.py +#bgp/bgp_monitor_dump.py +acl/test_acl.py +arp/test_arp_dualtor.py +arp/test_arpall.py +arp/test_neighbor_mac.py +arp/test_neighbor_mac_noptf.py +arp/test_wr_arp.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +container_checker/test_container_checker.py +crm/test_crm.py +#copp/test_copp.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +drop_packets/test_configurable_drop_counters.py +drop_packets/test_drop_counters.py +#ecmp/test_fgnhg.py +#ecn/test_dequeue_ecn.py +#ecn/test_red_accuracy.py +#everflow/test_everflow_ipv6.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#fdb/test_fdb.py +#fdb/test_fdb_mac_expire.py +fib/test_fib.py +iface_namingmode/test_iface_namingmode.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +lldp/test_lldp.py +log_fidelity/test_bgp_shutdown.py +monit/test_monit_status.py +mvrf/test_mgmtvrf.py +#nat/test_dynamic_nat.py +#nat/test_static_nat.py +ntp/test_ntp.py +pc/test_lag_2.py +pc/test_po_cleanup.py +pc/test_po_update.py +#pfc/test_global_pause.py +#pfc/test_pfc_pause_lossless.py +#pfc/test_pfc_pause_lossy.py +#pfc/test_unknown_mac.py +#pfc_asym/test_pfc_asym.py +#pfcwd/test_pfc_config.py +#pfcwd/test_pfcwd_all_port_storm.py +#pfcwd/test_pfcwd_function.py +#pfcwd/test_pfcwd_timer_accuracy.py +#pfcwd/test_pfcwd_warm_reboot.py +platform_tests/test_cont_warm_reboot.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_port_toggle.py +platform_tests/test_power_budget_info.py +platform_tests/test_thermal_state_db.py +platform_tests/test_reboot.py::test_cold_reboot +platform_tests/test_reboot.py::test_fast_reboot +platform_tests/test_reload_config.py +platform_tests/test_sensors.py +platform_tests/test_sequential_restart.py +platform_tests/sfp/test_sfpshow.py +platform_tests/sfp/test_sfputil.py +platform_tests/sfp/test_show_intf_xcvr.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +platform_tests/api/test_chassis.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_module.py +platform_tests/api/test_psu.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_platform.py +platform_tests/cli/test_show_chassis_module.py +process_monitoring/test_critical_process_monitoring.py +portstat/test_portstat.py +#qos/test_buffer.py +#qos/test_pfc_counters.py +#qos/test_pfc_pause.py +#qos/test_qos_sai.py +read_mac/test_read_mac_metadata.py +route/test_default_route.py +route/test_route_perf.py +route/test_static_route.py +#sflow/test_sflow.py +show_techsupport/test_techsupport.py +snmp/test_snmp_cpu.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_default_route.py +snmp/test_snmp_v2mib.py +snmp/test_snmp_memory.py +sub_port_interfaces/test_sub_port_interfaces.py +syslog/test_syslog.py +system_health/test_system_health.py +tacacs/test_ro_user.py +tacacs/test_rw_user.py +tacacs/test_jit_user.py +telemetry/test_telemetry.py +#testbed_setup/test_populate_fdb.py +#upgrade_path/test_upgrade_path.py +#vlan/test_vlan.py +vrf/test_vrf.py +vrf/test_vrf_attr.py +vxlan/test_vnet_route_leak.py +vxlan/test_vnet_vxlan.py +vxlan/test_vxlan_decap.py +test_posttest.py diff --git a/infra/sanity-scripts/t0_sim_must_pass.txt b/infra/sanity-scripts/t0_sim_must_pass.txt new file mode 100644 index 00000000000..57d31459930 --- /dev/null +++ b/infra/sanity-scripts/t0_sim_must_pass.txt @@ -0,0 +1,95 @@ +test_pretest.py +test_announce_routes.py +test_features.py +test_interfaces.py +test_procdockerstatsd.py +fib/test_fib.py +bgp/test_bgp_fact.py +bgp/test_bgp_dual_asn.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_speaker.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +acl/test_acl.py +portstat/test_portstat.py +lldp/test_lldp.py +iface_namingmode/test_iface_namingmode.py +generic_config_updater/test_aaa.py +generic_config_updater/test_bgpl.py +generic_config_updater/test_dhcp_relay.py +generic_config_updater/test_incremental_qos.py +generic_config_updater/test_ipv6.py +generic_config_updater/test_lo_interface.py +generic_config_updater/test_pfcwd_interval.py +generic_config_updater/test_portchannel_interface.py +generic_config_updater/test_syslog.py +generic_config_updater/test_vlan_interface.py +dhcp_relay/test_dhcp_relay.py +everflow/test_everflow_testbed.py +#acl/custom_acl_table/test_custom_acl_table.py +arp/test_neighbor_mac_noptf.py +arp/test_arp_extended.py +arp/test_tagged_arp.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +fdb/test_fdb.py +fdb/test_fdb_flush.py +fdb/test_fdb_mac_expire.py +fdb/test_fdb_mac_move.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +ipfwd/test_dir_bcast.py +radv/test_radv_restart.py +radv/test_radv_run.py +log_fidelity/test_bgp_shutdown.py +memory_checker/test_memory_checker.py +monit/test_monit_status.py +ssh/test_ssh_ciphers.py +ssh/test_ssh_limit.py +override_config_table/test_override_config_table.py +snmp/test_snmp_cpu.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_default_route.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_memory.py +snmp/test_snmp_queue.py +snmp/test_snmp_v2mib.py +snmp/test_snmp_fdb.py +route/test_default_route.py +route/test_static_route.py +route/test_route_consistency.py +route/test_route_flap.py +route/test_duplicate_route.py +stress/test_stress_routes.py +show_techsupport/test_auto_techsupport.py +syslog/test_syslog.py +system_health/test_system_health.py +system_health/test_system_status.py +test_features.py +test_interfaces.py +vxlan/test_vxlan_decap.py +route/test_route_perf.py +acl/null_route/test_null_route_helper.py +pc/test_po_cleanup.py +pc/test_po_update.py +acl/test_stress_acl.py +mvrf/test_mgmtvrf.py +vlan/test_autostate_disabled.py +vlan/test_host_vlan.py +vlan/test_vlan_ping.py +vlan/test_vlan.py +telemetry/test_telemetry.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_port_toggle.py +platform_tests/test_power_budget_info.py +platform_tests/test_thermal_state_db.py +platform_tests/sfp/test_sfpshow.py +platform_tests/sfp/test_sfputil.py +platform_tests/test_thermal_state_db.py +platform_tests/api/test_chassis.py +platform_tests/api/test_component.py +platform_tests/api/test_module.py +platform_tests/api/test_sfp.py +tests/test_posttest.py diff --git a/infra/sanity-scripts/t1_dhcp_sim_must_pass.txt b/infra/sanity-scripts/t1_dhcp_sim_must_pass.txt new file mode 100644 index 00000000000..a1ac9060dca --- /dev/null +++ b/infra/sanity-scripts/t1_dhcp_sim_must_pass.txt @@ -0,0 +1,28 @@ +test_pretest.py +test_announce_routes.py +test_features.py +test_interfaces.py +iface_namingmode/test_iface_namingmode.py +acl/test_acl.py +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_bounce.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_session_flap.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +arp/test_arpall.py +arp/test_neighbor_mac_noptf.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +dhcp_relay/test_dhcp_pkt_fwd.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +route/test_route_perf.py +route/test_route_consistency.py +route/test_route_flap.py +route/test_duplicate_route.p +decap/test_decap.py diff --git a/infra/sanity-scripts/t1_scripts.txt b/infra/sanity-scripts/t1_scripts.txt new file mode 100644 index 00000000000..4872d0846c7 --- /dev/null +++ b/infra/sanity-scripts/t1_scripts.txt @@ -0,0 +1,137 @@ +test_announce_routes.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_pretest.py +test_procdockerstatsd.py +bgp/test_bgp_fact.py +bgp/test_bgp_bbr.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_allow_list.py +bgp/test_traffic_shift.py +bgp/test_bgpmon.py +bgp/test_bgp_update_timer.py +#bgp/test_bgp_speaker.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_bounce.py +#bgp/bgp_monitor_dump.py +acl/test_acl.py +arp/test_arp_dualtor.py +arp/test_arpall.py +arp/test_neighbor_mac.py +arp/test_neighbor_mac_noptf.py +arp/test_wr_arp.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +container_checker/test_container_checker.py +crm/test_crm.py +#copp/test_copp.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +drop_packets/test_configurable_drop_counters.py +drop_packets/test_drop_counters.py +#ecmp/test_fgnhg.py +#ecn/test_dequeue_ecn.py +#ecn/test_red_accuracy.py +#everflow/test_everflow_ipv6.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#fdb/test_fdb.py +#fdb/test_fdb_mac_expire.py +fib/test_fib.py +iface_namingmode/test_iface_namingmode.py +ipfwd/test_dip_sip.py +#ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +lldp/test_lldp.py +log_fidelity/test_bgp_shutdown.py +monit/test_monit_status.py +mvrf/test_mgmtvrf.py +#nat/test_dynamic_nat.py +#nat/test_static_nat.py +ntp/test_ntp.py +#pc/test_lag_2.py +#pc/test_po_cleanup.py +#pc/test_po_update.py +#pfc/test_global_pause.py +#pfc/test_pfc_pause_lossless.py +#pfc/test_pfc_pause_lossy.py +#pfc/test_unknown_mac.py +#pfc_asym/test_pfc_asym.py +#pfcwd/test_pfc_config.py +#pfcwd/test_pfcwd_all_port_storm.py +#pfcwd/test_pfcwd_function.py +#pfcwd/test_pfcwd_timer_accuracy.py +#pfcwd/test_pfcwd_warm_reboot.py +platform_tests/test_cont_warm_reboot.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_port_toggle.py +platform_tests/test_power_budget_info.py +platform_tests/test_thermal_state_db.py +platform_tests/test_reboot.py::test_cold_reboot +platform_tests/test_reboot.py::test_fast_reboot +platform_tests/test_reload_config.py +platform_tests/test_sensors.py +platform_tests/test_sequential_restart.py +platform_tests/sfp/test_sfpshow.py +platform_tests/sfp/test_sfputil.py +platform_tests/sfp/test_show_intf_xcvr.py +platform_tests/test_thermal_state_db.py +platform_tests/test_xcvr_info_in_db.py +platform_tests/api/test_chassis.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_module.py +platform_tests/api/test_psu.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_platform.py +platform_tests/cli/test_show_chassis_module.py +process_monitoring/test_critical_process_monitoring.py +portstat/test_portstat.py +#qos/test_buffer.py +#qos/test_pfc_counters.py +#qos/test_pfc_pause.py +#qos/test_qos_sai.py +#read_mac/test_read_mac_metadata.py +route/test_default_route.py +route/test_route_perf.py +route/test_static_route.py +#sflow/test_sflow.py +show_techsupport/test_techsupport.py +snmp/test_snmp_cpu.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +snmp/test_snmp_default_route.py +snmp/test_snmp_v2mib.py +snmp/test_snmp_memory.py +sub_port_interfaces/test_sub_port_interfaces.py +syslog/test_syslog.py +system_health/test_system_health.py +tacacs/test_ro_user.py +tacacs/test_rw_user.py +tacacs/test_jit_user.py +telemetry/test_telemetry.py +#testbed_setup/test_populate_fdb.py +#upgrade_path/test_upgrade_path.py +#vlan/test_vlan.py +vrf/test_vrf.py +vrf/test_vrf_attr.py +vxlan/test_vnet_route_leak.py +vxlan/test_vnet_vxlan.py +vxlan/test_vxlan_decap.py +test_posttest.py diff --git a/infra/sanity-scripts/t1_sim_must_pass.txt b/infra/sanity-scripts/t1_sim_must_pass.txt new file mode 100644 index 00000000000..11d7b92fac2 --- /dev/null +++ b/infra/sanity-scripts/t1_sim_must_pass.txt @@ -0,0 +1,27 @@ +test_pretest.py +test_announce_routes.py +test_features.py +test_interfaces.py +iface_namingmode/test_iface_namingmode.py +acl/test_acl.py +bgp/test_bgp_allow_list.py +bgp/test_bgp_bbr.py +bgp/test_bgp_bounce.py +bgp/test_bgp_fact.py +bgp/test_bgp_gr_helper.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_session_flap.py +bgp/test_bgp_update_timer.py +bgp/test_bgpmon.py +arp/test_arpall.py +arp/test_neighbor_mac_noptf.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +cacl/test_ebtables_application.py +ip/test_ip_packet.py +ipfwd/test_dip_sip.py +route/test_route_perf.py +route/test_route_consistency.py +route/test_route_flap.py +route/test_duplicate_route.p +decap/test_decap.py diff --git a/infra/sanity-scripts/test_interfaces_only.txt b/infra/sanity-scripts/test_interfaces_only.txt new file mode 100644 index 00000000000..c446f6b1073 --- /dev/null +++ b/infra/sanity-scripts/test_interfaces_only.txt @@ -0,0 +1 @@ +test_interfaces.py \ No newline at end of file diff --git a/infra/sanity-scripts/test_tag_to_repo_map.yaml b/infra/sanity-scripts/test_tag_to_repo_map.yaml new file mode 100644 index 00000000000..14995f400bd --- /dev/null +++ b/infra/sanity-scripts/test_tag_to_repo_map.yaml @@ -0,0 +1,77 @@ +################################################################################ +# Test Tag to REPO Mapping # +################################################################################ +# +# This structure will be used in CICD precommit pipeline to determine which +# TEST_TAG will be used for a PR sanity +# The goal is, as developers populate this list, CICD will be able to run +# the precommit automatically, without user's input on which TEST_TAG to be run +# +# +# If you are a developer, please populate this list when your raise a PR +# +# +# NOTE: If you're raising a PR against sonic-buildimage, but your changes +# are related to a particular submodule, please use the submodule repo name +# under the TEST_TAG instead of sonic-buildimage +# +# +# Example: +# +# test_tag_to_repo_map.yaml +# +# FWD: +# repos: +# - repo1 +# - repo2 +# - ... +# PLT: +# repos: +# - repo3 +# - repo4 +# - ... +# - ... +# +# If you've raised a PR against platform-cisco-8000, and ran precommit as: +# 'trigger precommit -t PLT' +# Please populate the PLT section with repo name, platform-cisco-8000, e.g. +# +# PLT: +# repos: +# - platform-cisco-8000 +# - ... + +FWD: + repos: + - null + +PLT: + repos: + - null + +INFRA: + repos: + - null + +MGMT: + repos: + - sonic-config-engine + - sonic-restapi + - sonic-snmpagent + - sonic-utilities + - sonic-yang-mgmt + - sonic-yang-models + - tacacs + - sonic-gnmi + - sonic-host-services + - sonic-mgmt-common + - sonic-mgmt-framework + +L2: + repos: + - sonic-swss + - sonic-utilities + - sonic-linux-kernel + - sonic-swss-common + - sonic-stp + diff --git a/infra/sanity-scripts/tortuga.txt b/infra/sanity-scripts/tortuga.txt new file mode 100644 index 00000000000..c446f6b1073 --- /dev/null +++ b/infra/sanity-scripts/tortuga.txt @@ -0,0 +1 @@ +test_interfaces.py \ No newline at end of file diff --git a/infra/sanity_suites_jira_info.json b/infra/sanity_suites_jira_info.json new file mode 100644 index 00000000000..157aadbd9b8 --- /dev/null +++ b/infra/sanity_suites_jira_info.json @@ -0,0 +1,2202 @@ +{ + "default": { + "NAME": "default", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/saitests": { + "NAME": "cisco/saitests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/pfc": { + "NAME": "cisco/pfc", + "TEAM": "SONIC-PFC", + "SCRUM_LEAD": { + "NAME": "Alpesh Patel", + "USER_ID": "alpesh", + "EMAIL": "alpesh@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/syslog": { + "NAME": "cisco/syslog", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/qos": { + "NAME": "cisco/qos", + "TEAM": "SONIC-PFC", + "SCRUM_LEAD": { + "NAME": "Alpesh Patel", + "USER_ID": "alpesh", + "EMAIL": "alpesh@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/dsf": { + "NAME": "cisco/dsf", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "Sunesh Rustagi", + "USER_ID": "sunrusta", + "EMAIL": "sunrusta@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/ipfwd": { + "NAME": "cisco/ipfwd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/auto_triage": { + "NAME": "cisco/auto_triage", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/platform_tests": { + "NAME": "cisco/platform_tests", + "TEAM": "SONIC-PLAT-INFRA", + "SCRUM_LEAD": { + "NAME": "Shivu Vibhuti", + "USER_ID": "svibhuti", + "EMAIL": "svibhuti@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco/tortuga": { + "NAME": "cisco/tortuga", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "Aravind Subbaroyan", + "USER_ID": "asubbaro", + "EMAIL": "asubbaro@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "log_fidelity": { + "NAME": "log_fidelity", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "pc": { + "NAME": "pc", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "decap": { + "NAME": "decap", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dualtor_io": { + "NAME": "dualtor_io", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "database": { + "NAME": "database", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "saitests": { + "NAME": "saitests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "testbed_setup": { + "NAME": "testbed_setup", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "vs_voq_cfgs": { + "NAME": "vs_voq_cfgs", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cacl": { + "NAME": "cacl", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "mvrf": { + "NAME": "mvrf", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dhcp_server": { + "NAME": "dhcp_server", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ecmp": { + "NAME": "ecmp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "mpls": { + "NAME": "mpls", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "syslog": { + "NAME": "syslog", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "flow_counter": { + "NAME": "flow_counter", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "snmp": { + "NAME": "snmp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "system_health": { + "NAME": "system_health", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "route": { + "NAME": "route", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ixia": { + "NAME": "ixia", + "TEAM": "SONIC-PFC", + "SCRUM_LEAD": { + "NAME": "Alpesh Patel", + "USER_ID": "alpesh", + "EMAIL": "alpesh@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "bfd": { + "NAME": "bfd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "show_techsupport": { + "NAME": "show_techsupport", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "passw_hardening": { + "NAME": "passw_hardening", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "gnmi": { + "NAME": "gnmi", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "container_checker": { + "NAME": "container_checker", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "iface_namingmode": { + "NAME": "iface_namingmode", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "autorestart": { + "NAME": "autorestart", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "sai_qualify": { + "NAME": "sai_qualify", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "override_config_table": { + "NAME": "override_config_table", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "plugins": { + "NAME": "plugins", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "lldp": { + "NAME": "lldp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dut_console": { + "NAME": "dut_console", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "sflow": { + "NAME": "sflow", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "k8s": { + "NAME": "k8s", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "mclag": { + "NAME": "mclag", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "qos": { + "NAME": "qos", + "TEAM": "SONIC-PFC", + "SCRUM_LEAD": { + "NAME": "Alpesh Patel", + "USER_ID": "alpesh", + "EMAIL": "alpesh@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "nat": { + "NAME": "nat", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "vxlan": { + "NAME": "vxlan", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "crm": { + "NAME": "crm", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "snappi_tests": { + "NAME": "snappi_tests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "container_hardening": { + "NAME": "container_hardening", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "pipelines": { + "NAME": "pipelines", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "cisco": { + "NAME": "cisco", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "docs": { + "NAME": "docs", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "restapi": { + "NAME": "restapi", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ntp": { + "NAME": "ntp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dhcp_relay": { + "NAME": "dhcp_relay", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "minigraph": { + "NAME": "minigraph", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "vlan": { + "NAME": "vlan", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "process_monitoring": { + "NAME": "process_monitoring", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "common": { + "NAME": "common", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "read_mac": { + "NAME": "read_mac", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ssh": { + "NAME": "ssh", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "span": { + "NAME": "span", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "voq": { + "NAME": "voq", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dualtor": { + "NAME": "dualtor", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "http": { + "NAME": "http", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ptftests": { + "NAME": "ptftests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "pfcwd": { + "NAME": "pfcwd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "wan": { + "NAME": "wan", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "drop_packets": { + "NAME": "drop_packets", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "scripts": { + "NAME": "scripts", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "sub_port_interfaces": { + "NAME": "sub_port_interfaces", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "acstests": { + "NAME": "acstests", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "iface_loopback_action": { + "NAME": "iface_loopback_action", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "monit": { + "NAME": "monit", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "fib": { + "NAME": "fib", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "vrf": { + "NAME": "vrf", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "reset_factory": { + "NAME": "reset_factory", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "templates": { + "NAME": "templates", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dash": { + "NAME": "dash", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "disk": { + "NAME": "disk", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "portstat": { + "NAME": "portstat", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "memory_checker": { + "NAME": "memory_checker", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "copp": { + "NAME": "copp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "upgrade_path": { + "NAME": "upgrade_path", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "fwutil-fw": { + "NAME": "fwutil-fw", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dualtor_mgmt": { + "NAME": "dualtor_mgmt", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ipfwd": { + "NAME": "ipfwd", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "telemetry": { + "NAME": "telemetry", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "everflow": { + "NAME": "everflow", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "radv": { + "NAME": "radv", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "arp": { + "NAME": "arp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "scp": { + "NAME": "scp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "macsec": { + "NAME": "macsec", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "fdb": { + "NAME": "fdb", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "bgp": { + "NAME": "bgp", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "ip": { + "NAME": "ip", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "dns": { + "NAME": "dns", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "sonic": { + "NAME": "sonic", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "platform_tests": { + "NAME": "platform_tests", + "TEAM": "SONIC-PLAT-INFRA", + "SCRUM_LEAD": { + "NAME": "Shivu Vibhuti", + "USER_ID": "svibhuti", + "EMAIL": "svibhuti@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "generic_config_updater": { + "NAME": "generic_config_updater", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "tacacs": { + "NAME": "tacacs", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "metadata": { + "NAME": "metadata", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "eos": { + "NAME": "eos", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "configlet": { + "NAME": "configlet", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "acl": { + "NAME": "acl", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "clock": { + "NAME": "clock", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "stress": { + "NAME": "stress", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "console": { + "NAME": "console", + "TEAM": "SONIC-MSFT-T2-FWD-FEAT", + "SCRUM_LEAD": { + "NAME": "James An", + "USER_ID": "jamesan", + "EMAIL": "jamesan@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + }, + "pfc_asym": { + "NAME": "pfc_asym", + "TEAM": "SONIC-PFC", + "SCRUM_LEAD": { + "NAME": "Alpesh Patel", + "USER_ID": "alpesh", + "EMAIL": "alpesh@cisco.com" + }, + "labels": { + "202305_LABEL": "202305", + "202311_LABEL": "202311", + "MASTER_LABEL": "MASTER", + "T0_LABEL": "T0", + "T1_LABEL": "T1", + "T2_LABEL": "T2-PASS%", + "EXTRA_LABELS": [ + "CICD" + ] + } + } +} \ No newline at end of file diff --git a/infra/sfd_202505_wa_cmd_list b/infra/sfd_202505_wa_cmd_list new file mode 100755 index 00000000000..603b72556ba --- /dev/null +++ b/infra/sfd_202505_wa_cmd_list @@ -0,0 +1,20 @@ +set -x + +systemctl list-unit-files --state=enabled --type=service | awk '{print $1}' | while read service; do + # Skip header lines or empty lines + [[ "$service" == UNIT* || -z "$service" ]] && continue + + # Check if service is not active + if ! systemctl is-active --quiet "$service"; then + # Check if Restart policy is 'always' + restart_policy=$(systemctl show "$service" -p Restart --value) + if [[ "$restart_policy" == "always" ]]; then + echo "Starting $service (Restart=$restart_policy)..." + sudo systemctl start "$service" + else + echo "Skipping $service (Restart=$restart_policy)" + fi + else + echo "$service is already running." + fi +done \ No newline at end of file diff --git a/infra/sfd_wa_cmd_list b/infra/sfd_wa_cmd_list new file mode 100755 index 00000000000..b119c4abb84 --- /dev/null +++ b/infra/sfd_wa_cmd_list @@ -0,0 +1,38 @@ +set -x + +CARD_TYPE=$(/opt/cisco/bin/xr_sysctl -n bootstrap.card_type) +if [ $CARD_TYPE == "RP" ]; then + while true; do + # hostcfgd should mask all bgp services on T2 RP. Waiting while services are not masked + bgp_masked=true + for i in {0..15}; do + if ! systemctl is-enabled bgp@$i.service | grep -q "masked"; then + bgp_masked=false + break + fi + done + + if [ "$bgp_masked" = true ]; then + echo "All bgp services are masked" + break + fi + + echo "Waiting for all bgp services to be masked..." + sleep 5 + done + + # Give time for any bgp docker to go down as part of masking + sleep 15 + + output=$(container_checker) + echo $output + container_list=$(echo "$output" | awk '{for (i=4; i<=NF; i++) print $i}') + + for str in $container_list; do + # Check if the string starts with "bgp" + if [[ $str == bgp* ]]; then + echo "Executing: docker stop $str" + docker stop "$str" + fi + done +fi diff --git a/infra/sim_patches/add_sim_hooks.py b/infra/sim_patches/add_sim_hooks.py new file mode 100755 index 00000000000..e3078323aed --- /dev/null +++ b/infra/sim_patches/add_sim_hooks.py @@ -0,0 +1,379 @@ +#!/usr/bin/python +""" +This script adds simulation hooks/patches for test scripts. +Usage: + python add_sim_hooks.py [--acl_counters ] [--everflow_acl ] [--cmds_delay ] [--ignore_msgs ] +Options: + --acl_counters Disable ACL counter sanity check until the counter issue is resolved. Default is True. + --everflow_acl Remove ACL table for EVERFLOW and EVERFLOWV6 to release TCAM resources. Default is True. + --cmds_delay Enable delay for sonic commands execution on sim, to ensure the programming is completed + before the next steps of the tests. Default is True. The sim related delay is defined in tests/common/devices/cisco_sim.py + --ignore_msgs Add ignore messages for loganalyzer specific to sim. Default is True. +""" +""" +To run tests with simulation hooks/patches, follow the steps below: +- add any required delays in common/devices/cisco_sim.py +- apply the simulation hooks/patches by running the script: 'python add_sim_hooks.py' +- add conditional skips for sim into common/plugins/conditional_mark/tests_mark_conditions_cisco_sim.yaml +- run the tests while passing the condition checks for simulation hooks/patches using the following command: +./run_scripts.py -s run_list.txt -v DT -l DT -d churchill-mono -g docker-ptf --mark-conditions-files common/plugins/conditional_mark/tests_mark_conditions.yaml,common/plugins/conditional_mark/tests_mark_conditions_cisco_sim.yaml -c + +Note: run_list.txt is a file that contains the tests to be run. +""" + +import argparse +import os +import re + + +def _create_parser(): + parser = argparse.ArgumentParser(description='Add simulation hooks/patches.') + parser.add_argument('--acl_counters', action='store_true', help='Enable ACL counters', required=False, default=True) + parser.add_argument('--no-acl_counters', action='store_false', dest='acl_counters', help='Disable ACL counters', required=False) + parser.add_argument('--everflow_acl', action='store_true', help='Enable Everflow ACL', required=False, default=True) + parser.add_argument('--no-everflow_acl', action='store_false', dest='everflow_acl', help='Disable Everflow ACL', required=False) + parser.add_argument('--cmds_delay', action='store_true', help='Add delay for commands', required=False, default=True) + parser.add_argument('--no-cmds_delay', action='store_false', dest='cmds_delay', help='Do not add delay for commands', required=False) + parser.add_argument('--ignore_msgs', action='store_true', help='Add ignore messages for loganalyzer', required=False, default=True) + parser.add_argument('--no-ignore_msgs', action='store_false', dest='ignore_msgs', help='Do not add ignore messages for loganalyzer', required=False) + parser.add_argument('--add_reboot_delay', action='store_true', help='Add delay for reboot', required=False, default=True) + parser.add_argument('--no-add_reboot_delay', action='store_false', dest='add_reboot_delay', help='Do not add delay for reboot', required=False) + parser.add_argument('--add_apis_delay', action='store_true', help='Add delay for wait_until on sim', required=False, default=True) + parser.add_argument('--no-add_apis_delay', action='store_false', dest='add_apis_delay', help='Do not add delay for wait_until on sim', required=False) + parser.add_argument('--rolback_bgp_fix', action='store_true', help='Enable rollback BGP fix', required=False, default=True) + parser.add_argument('--no-rolback_bgp_fix', action='store_false', dest='rolback_bgp_fix', help='Disable rollback BGP fix', required=False) + parser.add_argument('--add_ngdp_asic_type', action='store_true', help='Add ngdp asic type for conditions where cisco 8000 is targeted, only for sonic-vs', required=False, default=False) + parser.add_argument('--no-add_ngdp_asic_type', action='store_false', dest='add_ngdp_asic_type', help='Do not add ngdp asic type for conditions where cisco 8000 is targeted, only for sonic-vs', required=False) + parser.add_argument('--config_reload_delay', action='store_true', help='Increase config reload delay', required=False, default=True) + parser.add_argument('--no-config_reload_delay', action='store_false', dest='config_reload_delay', help='Disable config reload delay', required=False) + parser.add_argument('--static_route_wait', action='store_true', + help='Inject wait_for_traffic_ready() into test_static_route.py ' + 'so it waits for ARP + ASIC route + ASIC neighbors before ' + 'every traffic test. Needed for VXR SIM where the VS bridge ' + 'takes ~120-170 s to stabilize after warmboot.', + required=False, default=True) + parser.add_argument('--no-static_route_wait', action='store_false', dest='static_route_wait', + help='Disable static_route_wait patch', required=False) + return parser + + + +def main(): + argparser = _create_parser() + args = vars(argparser.parse_args()) + disable_acl_counter = args['acl_counters'] + rem_eveflow_tables = args['everflow_acl'] + add_cmds_delay = args['cmds_delay'] + add_ignore_msgs = args['ignore_msgs'] + add_reboot_delay = args['add_reboot_delay'] + add_apis_delay = args['add_apis_delay'] + rolback_bgp_fix = args['rolback_bgp_fix'] + add_ngdp_asic_type = args['add_ngdp_asic_type'] + config_reload_delay = args['config_reload_delay'] + static_route_wait = args['static_route_wait'] + #check if the file exists, then exit + # otherwise, create the file + print("Applying simulation hooks/patches with the following options:") + print("Disable ACL counter sanity check: {}".format(disable_acl_counter)) + print("Remove ACL tables for EVERFLOW and EVERFLOWV6: {}".format(rem_eveflow_tables)) + print("Add delay for sonic commands execution on sim: {}".format(add_cmds_delay)) + print("Add ignore messages for loganalyzer related to simulation: {}".format(add_ignore_msgs)) + print("Add delay for reboot command on sim: {}".format(add_reboot_delay)) + print("Add delay for wait_until on sim: {}".format(add_apis_delay)) + print("Recover bgp speaker wrong fix: {}".format(rolback_bgp_fix)) + print("Add ngdp asic type for conditions where cisco 8000 is targeted: {}".format(add_ngdp_asic_type)) + + if not os.path.exists('./.sim_patch_applied'): + with open('./.sim_patch_applied', 'w') as f: + f.write('Simulation hooks/patches applied\n') + else: + print("Simulation hooks/patches already applied") + return + if add_ignore_msgs: + print("Adding ignore messages for loganalyzer related to simulation") + append_file('../ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt',sim_ignore_messages) + if disable_acl_counter or rem_eveflow_tables: + print("Adding simulation hooks/patches to remove ACL tables for EVERFLOW and EVERFLOWV6") + append_file('acl/conftest.py', acl_conftest_patch) + if disable_acl_counter: + print("Disabling ACL counter sanity check until the counter issue is resolved") + disable_fixures('acl/test_acl.py','@pytest.yield_fixture', 'counters_sanity_check') + decorate_function('acl/custom_acl_table/test_custom_acl_table.py', 'def test_custom_acl(', ['@pytest.mark.skip_traffic_test']) + if rem_eveflow_tables: + print("Hooking ACL table removal for EVERFLOW and EVERFLOWV6") + disable_fixures('acl/test_acl.py', '@pytest.fixture','remove_dataacl_table') + disable_fixures('acl/test_stress_acl.py', '@pytest.fixture','remove_dataacl_table') + disable_fixures('acl/test_acl_outer_vlan.py', '@pytest.fixture','remove_dataacl_table') + if add_cmds_delay: + print("Adding delay for sonic commands execution on sim, the details are defined in tests/common/devices/cisco_sim.py") + dec_lines=["from tests.common.devices.cisco_sim import sim_conditional_delay","@sim_conditional_delay"] + decorate_function('common/devices/base.py', 'def _run(self, *module_args, **complex_args):', dec_lines) + if add_reboot_delay: + print("Adding delay for reboot command on sim") + #dec_lines=["from tests.common.cisco_sim_apis_hook import sim_reboot_delay","@sim_reboot_delay"] + dec_lines=["@sim_reboot_delay"] + decorate_function('common/reboot.py', 'def reboot(', dec_lines) + prepend_file('common/reboot.py', 'from tests.common.cisco_sim_apis_hook import sim_reboot_delay'+os.linesep) + if add_apis_delay: + print("Adding delay for wait_until on sim") + dec_lines=["from tests.common.cisco_sim_apis_hook import sim_wait_until_extra_delay","@sim_wait_until_extra_delay"] + decorate_function('common/utilities.py', 'def wait_until(timeout', dec_lines) + if rolback_bgp_fix: + print("Recovering bgp speaker wrong fix") + replace_line('bgp/test_bgp_speaker.py', 'for i in range(0, 10):', 'for i in range(0, 3):') + if add_ngdp_asic_type: + print("Adding ngdp asic type for conditions where cisco 8000 is targeted") + append_ngdp_to_asic_type('everflow/everflow_test_utilities.py') + append_ngdp_to_asic_type('fib/test_fib.py') + if config_reload_delay: + print("Add delay to config reload") + replace_line('common/config_reload.py', 'wait_until(wait + 120, 10, 0, sonic_host.check_bgp_session_state_all_asics, bgp_neighbors),', 'wait_until(600, 10, 0, sonic_host.check_bgp_session_state_all_asics, bgp_neighbors),') + if static_route_wait: + print("Injecting wait_for_traffic_ready() into route/test_static_route.py for VXR SIM") + patch_static_route_wait() + +def prepend_file(file, content): + with open(file, 'r') as f: + lines = f.readlines() + with open(file, 'w') as f: + f.write(content) + f.writelines(lines) + +def disable_fixures(file, fixure, function_name): + with open(file, 'r') as f: + lines = f.readlines() + with open(file, 'w') as f: + for i, line in enumerate(lines): + if i>=len(lines)-1: + f.write(line) + break + if fixure in line and function_name in lines[i+1]: + line = line.replace(fixure, "#"+fixure) + f.write(line) + +def append_file(file, content): + with open(file, 'a') as f: + sim_hook_sign = '## added by sim hook ##' + os.linesep + f.write(sim_hook_sign+content) + +def decorate_function(file, function_name, dec_lines): + with open(file) as f: + lines = f.readlines() + updated_lines = [] + for line in lines: + if function_name in line: + leading_whitespace = line[:len(line) - len(line.lstrip())] + for l in dec_lines: + updated_lines.append(leading_whitespace + l + os.linesep) + updated_lines.append(line) + with open(file, 'w') as f: + for line in updated_lines: + f.write(line) + +def replace_line(file, old_line, new_line): + with open(file, 'r') as f: + lines = f.readlines() + with open(file, 'w') as f: + for line in lines: + if old_line.strip() == line.strip(): + leading_whitespace = line[:len(line) - len(line.lstrip())] + line = leading_whitespace+new_line.lstrip()+os.linesep + f.write(line) + +def append_ngdp_to_asic_type(file): + pattern = re.compile(r'.*\s*duthost.facts\[[\'"]asic_type[\'"]\]\s*in\s*\[.*cisco-8000.*\]') # Replace with your actual regex pattern + + with open(file, 'r') as f: + lines = f.readlines() + with open(file, 'w') as f: + for line in lines: + if pattern.match(line): + if "'cisco-8000'" in line: + line = line.replace("'cisco-8000'", "'cisco-ngdp-vs','ciscovs','cisco-8000'") + elif '"cisco-8000"' in line: + line = line.replace('"cisco-8000"', '"cisco-ngdp-vs","ciscovs","cisco-8000"') + f.write(line) + + +sim_ignore_messages = ''' +r, ".* ERR syncd#.*guard: RedisReply catches system_error: command:.*" +r, ".* ERR syncd#.*collectData: Failed to get stats of Rif Counter .*" +r, ".* ERR syncd#.*Leaba_Err: Entry requested not found.*" +r, ".* ERR syncd#.*check_reset_allowed: CRIT mac port SerDes.*", +r, ".* ERR syncd#.*SAI_LOG.*src/sai_trap.cpp:.*: Invalid trap event code.*" +r, ".* ERR syncd#.*SAI_LOG|SAI_API_FDB: Incorrect BRIDGE PORT ID, event: SAI_FDB_EVENT_AGED.*" +r, ".* ERR syncd#.*SAI_LOG|SAI_API_FDB: Can not get bridge or vlan, event: SAI_FDB_EVENT_AGED.*" +r, ".* ERR syncd#.*destroy API returned: status = Leaba_Err: Resource needed for operation is busy.*" +r, ".* ERR swss#orchagen.*doCfgSensorsTableTask: ASIC sensors : unsupported operation.*" +r, ".* ERR syncd#.*process_on_fdb_event: invalid OIDs in fdb notifications, NOT translating and NOT storing in ASIC DB.*" +r, ".* ERR pmon#xcvrd.*CMIS:.*no suitable app for the port appl.*" +r, ".* ERR pmon#xcvrd.*: CMIS: Ethernet.*: FAILED.*" +r, ".* ERR pmon#pcied.*: PCIe device status check : FAILED", +r, ".* ERR syncd#.*shared/src/hld/npu/la_svi_port_base.cpp:.*Leaba_Err: Entry requested not found.*", +r, ".* ERR syncd#.*process_on_fdb_event: FDB notification was not sent since it contain invalid OIDs.*", +r, ".* ERR syncd#.*src/hld/system/la_device_impl.cpp.*get_resource_usage API returned: status = Leaba_Err: Invalid parameter was supplied: la_status silicon_one::gr2.*" +''' + +acl_conftest_patch = ''' +import logging +from tests.common.config_reload import config_reload +logger = logging.getLogger(__name__) + +@pytest.yield_fixture(scope="module", autouse=True) +def counters_sanity_check(): + logger.info("Skip check for ACL counter for simulation ") + rule_list = [] + yield rule_list + return + +## sim hook ## +@pytest.fixture(scope="module", autouse=True) +def remove_dataacl_table(duthosts): + """ + Remove DATAACL to free TCAM resources. + The change is written to configdb as we don't want DATAACL recovered after reboot + """ + TABLE_NAME = "DATAACL" + for duthost in duthosts: + lines = duthost.shell(cmd="show acl table {}".format(TABLE_NAME))['stdout_lines'] + data_acl_existing = False + for line in lines: + if TABLE_NAME in line: + data_acl_existing = True + break + if data_acl_existing: + # Remove DATAACL + logger.info("Removing ACL table {}".format(TABLE_NAME)) + cmds = [ + "config acl remove table {}".format(TABLE_NAME), + "config acl remove table EVERFLOWV6", + "config acl remove table EVERFLOW", + "config save -y" + ] + else: + cmds = [ + "config acl remove table EVERFLOWV6", + "config acl remove table EVERFLOW", + "config save -y" + ] + duthost.shell_cmds(cmds=cmds) + yield + # Recover DUT by reloading minigraph + for duthost in duthosts: + config_reload(duthost, config_source="minigraph") + +''' + + +def replace_block(file, old_lines, new_lines): + """Replace a multi-line block (matched by stripped content) with new_lines.""" + import shutil + with open(file, 'r') as f: + content = f.read() + old_block = os.linesep.join(old_lines) + new_block = os.linesep.join(new_lines) + if old_block not in content: + # Try \n regardless of platform + old_block = '\n'.join(old_lines) + new_block = '\n'.join(new_lines) + if old_block not in content: + print("WARNING: block not found in {}: {}".format(file, old_lines[0])) + return + content = content.replace(old_block, new_block, 1) + with open(file, 'w') as f: + f.write(content) + + +def patch_static_route_wait(): + """ + Inject wait_for_traffic_ready() into route/test_static_route.py. + + Steps: + 1. Copy sim_patches/test_static_route_wait.py → route/test_static_route_wait.py + 2. Prepend the import to test_static_route.py + 3. Replace each silent ping loop with wait_for_traffic_ready() call + """ + import shutil + src_module = os.path.join(os.path.dirname(__file__), 'test_static_route_wait.py') + dest_module = 'route/test_static_route_wait.py' + target = 'route/test_static_route.py' + + # 1. Deploy the helper module + shutil.copy(src_module, dest_module) + print(" Copied test_static_route_wait.py -> {}".format(dest_module)) + + # 2. Add the import at the top of test_static_route.py + import_line = 'from tests.route.test_static_route_wait import wait_for_traffic_ready' + prepend_file(target, import_line + os.linesep) + print(" Injected import into {}".format(target)) + + # 3a. static_route_context – pre-op: replace silent ping loop + # Pass ptfadapter/tbinfo/ip_dst/nexthop_devs so check-4 (traffic probe) runs. + replace_block( + target, + [ + ' for nexthop_addr in nexthop_addrs:', + ' duthost.shell(ping_cmd.format(nexthop_addr), module_ignore_errors=True)', + ], + [ + ' wait_for_traffic_ready(duthost, prefix, nexthop_addrs, ipv6=ipv6,', + ' label="pre-op",', + ' ptfadapter=ptfadapter, tbinfo=tbinfo,', + ' ip_dst=ip_dst, nexthop_devs=nexthop_devs)', + ] + ) + + # 3b. static_route_context – post-op: replace "Refresh ARP/NDP entries" block + replace_block( + target, + [ + ' # Refresh ARP/NDP entries', + ' for nexthop_addr in nexthop_addrs:', + ' duthost.shell(ping_cmd.format(nexthop_addr), module_ignore_errors=True)', + ], + [ + ' # Wait for ARP + ASIC + end-to-end traffic after operation', + ' wait_for_traffic_ready(duthost, prefix, nexthop_addrs, ipv6=ipv6,', + ' label="post-op",', + ' ptfadapter=ptfadapter, tbinfo=tbinfo,', + ' ip_dst=ip_dst, nexthop_devs=nexthop_devs)', + ] + ) + + # 3c. run_static_route_test – pre-op: replace "try to refresh arp entry" block + replace_block( + target, + [ + ' # try to refresh arp entry before traffic testing to improve stability', + ' for nexthop_addr in nexthop_addrs:', + ' duthost.shell("timeout 1 ping -c 1 -w 1 {}".format(nexthop_addr), module_ignore_errors=True)', + ], + [ + ' # Wait for ARP + ASIC + end-to-end traffic before traffic test', + ' wait_for_traffic_ready(duthost, prefix, nexthop_addrs, ipv6=ipv6,', + ' label="run-pre-op",', + ' ptfadapter=ptfadapter, tbinfo=tbinfo,', + ' ip_dst=ip_dst, nexthop_devs=nexthop_devs)', + ] + ) + + # 3d. run_static_route_test – post-config-reload: replace ping loop after wait_all_bgp_up + replace_block( + target, + [ + ' for nexthop_addr in nexthop_addrs:', + ' duthost.shell("timeout 1 ping -c 1 -w 1 {}".format(nexthop_addr), module_ignore_errors=True)', + ], + [ + ' wait_for_traffic_ready(duthost, prefix, nexthop_addrs, ipv6=ipv6,', + ' label="run-post-reload",', + ' ptfadapter=ptfadapter, tbinfo=tbinfo,', + ' ip_dst=ip_dst, nexthop_devs=nexthop_devs)', + ] + ) + + print(" Patched {} – wait_for_traffic_ready() inserted at 4 traffic test sites".format(target)) + + +if __name__ == '__main__': + main() diff --git a/infra/sim_patches/cisco_sim.py b/infra/sim_patches/cisco_sim.py new file mode 100644 index 00000000000..93106397983 --- /dev/null +++ b/infra/sim_patches/cisco_sim.py @@ -0,0 +1,112 @@ +import time +import re +import logging +logger = logging.getLogger(__name__) + +# Define a list of commands with corresponding delays to be applied for sim +cmds = [] # Define an empty list for cmds + +if len(cmds) == 0: + cmds = [ + { + "cmd": r'(?:sudo\s+)?\s*config\s+acl\s+remove\s+.*', + "delay": 10, + }, + { + "cmd": r'(?:sudo\s+)?\s*config\s+acl\s+add\s+.*', + "delay": 10, + }, + { + "cmd": r'(?:sudo\s+)?\s*config\s+interface\s+\.*', + "delay": 20, + }, + { + "cmd": r'(?:sudo\s+)?\s*ip neigh (add|del)\.*', + "delay": 5, + }, + { + "cmd": r'(?:sudo\s+)?\s*arp (-s|-d)\.*', + "delay": 5, + }, + { + "cmd": r'(?:sudo\s+)?\s*ip -6 neigh (add|del).*', + "delay": 5, + }, + { + "cmd": r'(?:sudo\s+)?\s*sonic-clear (arp|ndp).*', + "delay": 5, + }, + { + "cmd": r'(?:sudo\s+)?\s*config pfcwd start_default.*', + "delay": 60, + }, + { + "cmd": r'(?:sudo\s+)?\s*config loopback del.*', + "delay": 30, + }, + { + "cmd": r'(?:sudo\s+)?\s*config bgp remove neighbor.*', + "delay": 60, + }, + { + "cmd": r'(?:sudo\s+)?\s*ifconfig\s+.*\s(up|down).*', + "delay": 30, + }, + { + "cmd": r'(?:sudo\s+)?\s*config rollback.*', + "delay": 90, + }, + { + "cmd": r'(?:sudo\s+)?\s*fast-reboot.*', + "delay": 300, + }, + { + "cmd": r'(?:sudo\s+)?\s*warm-reboot.*', + "delay": 300, + }, + { + "cmd": r'(?:sudo\s+)?\s*ip\s+route\s+(add|del|flush).*', + "delay": 5, + }, + { + "cmd": r'(?:sudo\s+)?\s*docker exec\s.*\sswssconfig.*', + "delay": 10, + }, + { + "cmd": r'(?:sudo\s+)?\s*config\s*load\s.*', + "delay": 10, + }, + { + "cmd": r'(?:sudo\s+)?\s*config\s*reload\s.*', + "delay": 60, + } + + ] + + + +## check for kwargs as well +# kwargs={"cmds": ["docker cp /tmp/decap_conf_SET.json swss:/decap_conf_SET.json", "docker exec swss swssconfig /decap_conf_SET.json", "docker exec swss rm /decap_conf_SET.json"]} + + +def delay(cmd): + for c in cmds: + if re.match(c["cmd"], cmd): + logger.info("sleeping {} seconds after executing '{}' to ensure the command is completed in sim\n'".format(c["delay"],cmd)) + time.sleep(c["delay"]) + return + return + +## this function is a decorator that adds a delay to the execution of the function +## we use this to decorate run() function in AnsibleHostBase class (sonic-mgmt/tests/common/devices/base.py) to add delay to the execution of the command via sim +## the main reason for this is due to the fact that most cmds in sonic is processed asynchronously and we need to add a delay to ensure that the command +# is processed before the next command is executed, sepceially in sim where the programing is relatively slow compare to hardware +def sim_conditional_delay(func): + def wrapper(*args, **kwargs): + result = func(*args, **kwargs) + if len(args) < 2: + return result + cmd = args[1] + delay(cmd) + return result + return wrapper diff --git a/infra/sim_patches/cisco_sim_apis_hook.py b/infra/sim_patches/cisco_sim_apis_hook.py new file mode 100644 index 00000000000..8f099b8a0b9 --- /dev/null +++ b/infra/sim_patches/cisco_sim_apis_hook.py @@ -0,0 +1,18 @@ +def sim_reboot_delay(func): + def wrapper(*args, **kwargs): + ## check the wait time for the reboot command and change it to 480 seconds + kwargs['wait'] = 480 + return func(*args, **kwargs) + return wrapper + + +## this can be used for other cases when the timeout is low for passing tests on sim +## lambada function is a little bit tricky, be careful when using it +def sim_wait_until_extra_delay(func): + def wrapper(*args, **kwargs): + function = args[3] + test_function_name = function.__qualname__ + if 'test_bgp_update_timer' in test_function_name: + return func(240, args[1], args[2], args[3], **kwargs) + return func(*args, **kwargs) + return wrapper diff --git a/infra/sim_patches/minigraph_cpg.j2 b/infra/sim_patches/minigraph_cpg.j2 new file mode 100644 index 00000000000..30221d260cd --- /dev/null +++ b/infra/sim_patches/minigraph_cpg.j2 @@ -0,0 +1,269 @@ + +{% if card_type is not defined or card_type != 'supervisor' %} + + +{% for index in range(vms_number) %} +{% set vm=vms[index] %} +{% if (vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int] and vm_topo_config['topo_type'] != 'wan') %} + + false + {{ inventory_hostname }} + {{ vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int] }} + {{ vm }} + {{ vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int] }} + 1 + 60 + 20 + +{% if vm_asic_ifnames is defined %} + + false + {{ vm_asic_ids[vm][0] }} + {{ vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int] }} + {{ vm }} + {{ vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int] }} + 1 + 60 + 20 + +{% endif %} +{% endif %} +{% if (vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int] and vm_topo_config['topo_type'] != 'wan') %} + + {{ inventory_hostname }} + {{ vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int] }} + {{ vm }} + {{ vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int] }} + 1 + 60 + 20 + +{% if vm_asic_ifnames is defined %} + + {{ vm_asic_ids[vm][0] }} + {{ vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int] }} + {{ vm }} + {{ vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int] }} + 1 + 60 + 20 + +{% endif %} +{% endif %} +{% endfor %} +{% if (asic_topo_config and slot_num is defined and slot_num in asic_topo_config) or (asic_topo_config and slot_num is not defined) %} +{% for asic,asic_config in asic_topo_config[slot_num|default('slot0')].items() %} +{% for neigh_asic in asic_config['neigh_asic'] %} +{% if asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0] %} + + false + {{ asic }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0] }} + {{ neigh_asic }} + {{ asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0] }} + 1 + 0 + 0 + +{% endif %} +{% if asic_config['neigh_asic'][neigh_asic]['peer_ipv6'][0] %} + + {{ asic }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0] }} + {{ neigh_asic }} + {{ asic_config['neigh_asic'][neigh_asic]['peer_ipv6'][0] }} + 1 + 0 + 0 + +{% endif %} +{% endfor %} +{% endfor %} +{% endif %} +{% if switch_type is defined and (switch_type == 'voq' or switch_type == 'chassis-packet') %} +{% set chassis_ibgp_peers = dict() %} +{% for asic_id in range(num_asics) %} +{% if num_asics == 1 %} +{% set start_rtr = inventory_hostname %} +{% else %} +{% set start_rtr = "ASIC" + asic_id|string %} +{% endif %} +{% for a_linecard in all_loopback4096 %} +{% for idx in range(all_loopback4096[a_linecard]|length) %} +{% if loopback4096_ip[asic_id] != all_loopback4096[a_linecard][idx] %} +{% if all_loopback4096[a_linecard]|length == 1 %} +{% set end_rtr = a_linecard %} +{% else %} +{% if a_linecard == inventory_hostname %} +{% set end_rtr = "ASIC" + idx|string %} +{% else %} +{% set end_rtr = a_linecard + "-ASIC" + idx|string %} +{% endif %} +{% endif %} +{% if switch_type == 'voq' %} +{% set _ = chassis_ibgp_peers.update({ all_inbands[a_linecard][idx].split('/')[0] : end_rtr }) %} +{% else %} +{% set _ = chassis_ibgp_peers.update({ all_loopback4096[a_linecard][idx].split('/')[0] : end_rtr }) %} +{% endif %} + + {{ start_rtr }} + {{ end_rtr }} +{% if switch_type == 'voq' %} + {{ voq_inband_ip[asic_id].split('/')[0] }} + {{ all_inbands[a_linecard][idx].split('/')[0] }} +{% else %} + {{ loopback4096_ip[asic_id].split('/')[0] }} + {{ all_loopback4096[a_linecard][idx].split('/')[0] }} +{% endif %} + 1 + 0 + 0 + {{ switch_type }} + + + {{ start_rtr }} + {{ end_rtr }} +{% if switch_type == 'voq' %} + {{ voq_inband_ipv6[asic_id].split('/')[0] }} + {{ all_inbands_ipv6[a_linecard][idx].split('/')[0] }} +{% else %} + {{ loopback4096_ipv6[asic_id].split('/')[0] }} + {{ all_loopback4096_ipv6[a_linecard][idx].split('/')[0] }} +{% endif %} + 1 + 0 + 0 + {{ switch_type }} + +{% endif %} +{% endfor %} +{% endfor %} +{% endfor %} +{% endif %} + + +{% if ((card_type is not defined or card_type != 'supervisor') and vm_topo_config['topo_type'] != 'wan') %} + + {{ vm_topo_config['dut_asn'] }} + {{ inventory_hostname }} + +{% for index in range(vms_number) %} +{% if vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int] %} + +
{{ vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int] }}
+ + + +
+{% endif %} +{% endfor %} +{% if num_asics == 1 and switch_type is defined and (switch_type == 'voq' or switch_type == 'chassis-packet') %} +{% for a_chassis_ibgp_peer in chassis_ibgp_peers %} + +
{{ a_chassis_ibgp_peer }}
+ + + +
+{% endfor %} +{% endif %} +{% if 'tor' in vm_topo_config['dut_type'] | lower %} + + BGPPeer +
{{ lp_ipv4_addr }}
+ + + + BGPSLBPassive + {{ bgp_slb_passive_range }} +
+ + BGPPeer +
{{ lp_ipv4_addr }}
+ + + + BGPVac + 192.168.0.0/21 +
+{% endif %} +
+ +
+{% for index in range( vms_number) %} +{% if (vm_topo_config['vm'][vms[index]]['intfs'][dut_index|int]|length > 0 and vm_topo_config['topo_type'] != 'wan') %} + + {{ vm_topo_config['vm'][vms[index]]['bgp_asn'] }} + {{ vms[index] }} + + +{% endif %} +{% endfor %} +{% endif %} +{% if (asic_topo_config and slot_num is defined and slot_num in asic_topo_config) or (asic_topo_config and slot_num is not defined) %} +{% for asic,asic_config in asic_topo_config[slot_num|default('slot0')].items() %} + + {{ vm_topo_config['dut_asn'] }} + {{ asic }} + +{% for index in range( vms_number) %} +{% if vms[index] in vm_asic_ifnames and vm_asic_ids[vms[index]][0] == asic %} + +
{{ vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int] }}
+ + + +
+{% endif %} +{% endfor %} +{% if switch_type is defined and switch_type == 'voq' %} +{% set asic_id = asic.split('ASIC')[1]|int %} +{% for a_linecard in all_loopback4096 %} +{% for idx in range(all_loopback4096[a_linecard]|length) %} +{% if loopback4096_ip[asic_id] != all_loopback4096[a_linecard][idx] %} + +
{{ all_inbands[a_linecard][idx] }}
+ + + +
+{% endif %} +{% endfor %} +{% endfor %} +{% else %} +{% for neigh_asic in asic_config['neigh_asic'] %} +{% if neigh_asic in asic_config['neigh_asic'] and asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0] %} + +
{{ asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0] }}
+ + + +
+{% endif %} +{% endfor %} +{% endif %} +
+ +
+{% endfor %} +{% endif %} +{% if switch_type is defined and (switch_type == 'voq' or switch_type == 'chassis-packet') %} +{% for a_linecard in all_loopback4096 %} +{% if a_linecard != inventory_hostname %} +{% for idx in range(all_loopback4096[a_linecard]|length) %} + + {{ vm_topo_config['dut_asn'] }} +{% if switch_type == 'voq' %} + {{ chassis_ibgp_peers[all_inbands[a_linecard][idx].split('/')[0]] }} +{% else %} + {{ chassis_ibgp_peers[all_loopback4096[a_linecard][idx].split('/')[0]] }} +{% endif %} + + +{% endfor %} +{% endif %} +{% endfor %} +{% endif %} +
+{% endif %} +
diff --git a/infra/sim_patches/test_static_route_wait.py b/infra/sim_patches/test_static_route_wait.py new file mode 100644 index 00000000000..be662499f3d --- /dev/null +++ b/infra/sim_patches/test_static_route_wait.py @@ -0,0 +1,124 @@ +""" +Cisco VXR SIM-only helper for test_static_route.py. + +wait_for_traffic_ready() verifies four conditions before allowing a traffic +test to run. This is needed because after warmboot the VS bridge takes +~120-170 s to stabilize and deliver ARP broadcasts to PTF interfaces, and +routeorch may still be updating ECMP nexthop groups with new RIF OIDs even +after ARP is REACHABLE. + +Injected by infra/sim_patches/add_sim_hooks.py (--static_route_wait). +NOT upstreamed – applies only to Cisco VXR SIM via add_sim_hooks. +""" + +import logging + +from tests.common.helpers.assertions import pytest_assert +from tests.common.utilities import wait_until + + +def wait_for_traffic_ready(duthost, prefix, nexthop_addrs, ipv6=False, label="", + ptfadapter=None, tbinfo=None, ip_dst=None, nexthop_devs=None): + """ + Wait until the DUT is fully ready to forward traffic for the given static + route. Four conditions must hold simultaneously: + + 1. ARP/NDP resolved (kernel neighbor REACHABLE/STALE) for every nexthop + 2. Static route programmed in the ASIC (ASIC_DB ROUTE_ENTRY present) + 3. Every nexthop has an ASIC neighbor entry (ASIC_DB NEIGHBOR_ENTRY) + 4. End-to-end traffic forwarding works (packet arrives at expected PTF ports) + — only checked when ptfadapter/tbinfo/ip_dst/nexthop_devs are provided. + Catches VS bridge veth delivery failures that software state checks miss. + + Needed because after warmboot: + - VS bridge takes ~120-170 s to stabilize for Vlan1000 ARP + - routeorch may still be updating ECMP nexthop groups (wrong port until done) + - The software state (ASIC_DB) can look correct while veth delivery is broken + + Args: + duthost: DUT host object + prefix: Static route prefix e.g. "5.5.5.0/24" + nexthop_addrs: List of nexthop IPs + ipv6: True for IPv6 (NDP), False for IPv4 (ARP) + label: Tag for log messages ("pre-op", "post-op", etc.) + ptfadapter: PTF adapter (optional, enables check 4) + tbinfo: Testbed info dict (optional, enables check 4) + ip_dst: Destination IP for traffic probe (optional, enables check 4) + nexthop_devs: Expected PTF port indices (optional, enables check 4) + """ + tag = "[{}] ".format(label) if label else "" + net_addr = prefix.split('/')[0] + ping_cmd = "timeout 2 ping{} -c 1 -w 2 {{}}".format(" -6" if ipv6 else "") + do_traffic_probe = all(x is not None + for x in [ptfadapter, tbinfo, ip_dst, nexthop_devs]) + + # Flush ARP/NDP ONCE before the polling loop so the kernel gets clean + # entries. Flushing INSIDE _ready() would tear down the ECMP nexthop + # group on every 10-second retry: orchagent deletes nexthops when + # neighbors are removed, and the ECMP group rebuild takes time — so + # the traffic probe would always run against a partially-built group. + duthost.shell("sonic-clear {}".format("ndp" if ipv6 else "arp"), + module_ignore_errors=True) + for nh in nexthop_addrs: + duthost.shell(ping_cmd.format(nh), module_ignore_errors=True) + + def _ready(): + # 1. Check kernel neighbor state — do NOT flush here + for nh in nexthop_addrs: + state = duthost.shell( + "ip{} neigh show | grep '{}'".format(" -6" if ipv6 else "", nh), + module_ignore_errors=True + )["stdout"] + if not any(s in state for s in + ("REACHABLE", "STALE", "DELAY", "PROBE")): + logging.debug("%sARP/NDP not resolved: %s -> %s", + tag, nh, state.strip() or "") + return False + + # 2. Check ASIC route entry + asic_route = duthost.shell( + "sonic-db-cli ASIC_DB KEYS " + "'ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY*' | grep -F '{}'".format(net_addr), + module_ignore_errors=True + )["stdout"].strip() + if not asic_route: + logging.debug("%sASIC route for %s not yet programmed", tag, prefix) + return False + + # 3. Check ASIC neighbor entries + for nh in nexthop_addrs: + asic_neigh = duthost.shell( + "sonic-db-cli ASIC_DB KEYS " + "'ASIC_STATE:SAI_OBJECT_TYPE_NEIGHBOR_ENTRY*' | grep -F '{}'".format(nh), + module_ignore_errors=True + )["stdout"].strip() + if not asic_neigh: + logging.debug("%sASIC neighbor for %s not yet programmed", tag, nh) + return False + + # 4. End-to-end traffic probe (catches veth delivery failures and + # routeorch ECMP nexthop group updates with wrong RIF OIDs that + # software-only checks cannot detect). + if do_traffic_probe: + try: + from tests.route.test_static_route import generate_and_verify_traffic + generate_and_verify_traffic( + duthost, ptfadapter, tbinfo, ip_dst, nexthop_devs, ipv6=ipv6) + logging.info("%sAll ready – ARP, ASIC, and end-to-end traffic " + "verified for %s nexthops %s", + tag, prefix, nexthop_addrs) + except Exception as e: + logging.debug("%sTraffic probe failed (will retry): %s", tag, e) + return False + else: + logging.info("%sARP + ASIC state ready for %s nexthops %s " + "(no traffic probe – ptfadapter not provided)", + tag, prefix, nexthop_addrs) + + return True + + pytest_assert( + wait_until(600, 10, 0, _ready), + "{}Not ready within 600 s (prefix={}, nexthops={})".format( + tag, prefix, nexthop_addrs) + ) diff --git a/infra/sim_patches/tests_mark_conditions_cisco_sim.yaml b/infra/sim_patches/tests_mark_conditions_cisco_sim.yaml new file mode 100644 index 00000000000..ebf752357a2 --- /dev/null +++ b/infra/sim_patches/tests_mark_conditions_cisco_sim.yaml @@ -0,0 +1,288 @@ + +####################################### +##### bgp ##### +####################################### + +bgp/test_bgp_operation_in_ro.py: + skip: + reason: "Feature is reverted and pending enhancement" + conditions: + - "https://github.com/sonic-net/sonic-buildimage/issues/23462" + + +####################################### +##### platform_tests ##### +####################################### + +platform_tests/sfp/test_sfputil.py::test_check_sfputil_low_power_mode: + skip: + reason: "Skip the test for sim" + +platform_tests/api/test_chassis.py::TestChassisApi::test_get_model: + skip: + reason: "Test is skipped on vxr since the model is not set in the ansible inventory properly" + + +platform_tests/api/test_chassis.py::TestChassisApi::test_get_serial: + skip: + reason: "Test is skipped on vxr since the serail is generated randomly in each run" + +platform_tests/api/test_chassis.py::TestChassisApi::test_get_base_mac: + skip: + reason: "Test is skipped on vxr since the mac is generated randomly in each run" + +platform_tests/api/test_chassis.py::TestChassisApi::test_get_system_eeprom_info: + skip: + reason: "Test is skipped on vxr, will be revisited later" + +platform_tests/api/test_chassis.py::TestChassisApi::test_thermals: + skip: + reason: "Test is skipped on vxr, will be revisited later" + +platform_tests/api/test_sfp.py::TestSfpApi::test_lpmode: + skip: + reason: "Skip the test for sim, will be revisited later" + +platform_tests/api/test_module.py::TestModuleApi::test_reboot: + skip: + reason: 'Skip the test. This is only for T2 and Cisco T2 does not support it.' + +####################################### +##### vrf ##### +####################################### +vrf/test_vrf.py::TestVrfWarmReboot: + skip: + reason: "This test causes 'config interface vrf bind PortChannel101 Vrf1' command to get stuck in other tests" + +vrf/test_vrf.py::TestVrfLoopbackIntf::test_bgp_with_loopback: + skip: + reason: "Always fail on sim" + +vrf/test_vrf.py::TestVrfCapacity: + skip: + reason: "Always fail on sim" + +vrf/test_vrf.py::TestVrfDeletion::test_vrf2_neigh: + skip: + reason: "Always fail on sim" + +vrf/test_vrf.py::TestVrfDeletion::test_vrf1_neigh_after_restore: + skip: + reason: "Always fail on sim" + +vrf/test_vrf.py::TestVrfDeletion::test_vrf1_fib_after_resotre: + skip: + reason: "Test Hangs on execution" + +vrf/test_vrf.py::test_show_bgp_summary: + xfail: + reason: "Test is failing on Cisco 8000 platform with one mismatch in number of routes" + + + +####################################### +##### everflow ##### +####################################### + +everflow/test_everflow_testbed.py::TestEverflowV4IngressAclIngressMirror::test_everflow_dscp_with_policer: + skip: + reason: "Skipping test since mirror with policer is not supported on Cisco platforms." + + +####################################### +##### mgmt Test Cases ##### +####################################### +mvrf/test_mgmtvrf.py::TestReboot: + skip: + reason: "Skip reboot cases on sim as they cause side effect for other tests" + +mvrf/test_mgmtvrf.py::TestServices::test_ntp: + skip: + reason: "Skip NTP test on sim as it always fails, test requires analysis and fix" + +gnmi/test_gnoi_system_reboot.py::test_gnoi_system_reboot_halt_dpus: + skip: + reason: "Halt reboot should not be running on non-smartswitch" + conditions: + conditions_logical_operator: or + - "is_smartswitch == False" + - "hwsku not in ['Cisco-8102-28FH-DPU-O-T1', 'Mellanox-SN4280-O8C40', 'Mellanox-SN4280-O28', 'Cisco-8102-28FH-DPU-O']" + +gnmi/test_gnmi_configdb.py::test_gnmi_configdb_full_01: + skip: + reason: "The test refers to a stale implementation of GNOI.System.Reboot." + +telemetry/test_events.py: + skip: + reason: "Skipping test_event only for 202405; Blocked in community aswell by https://github.com/sonic-net/sonic-mgmt/pull/13740." + conditions: + - "release in ['202405']" + +####################################### +##### pc ##### +####################################### +pc/test_lag_2.py::test_lag: + skip: + reason: "Test is looking for fanout and in sim topology we don't have that" + +####################################### +##### infra ##### +####################################### +iface_namingmode/test_iface_namingmode.py::TestConfigInterface: + skip: + reason: 'Skip the test for T0 sim' + conditions: + - "'t0' in topo_name" + +##### the following skips are added based on skip for cisco 8000 ##### +###################################################################### +###################################################################### + +acl/test_acl_outer_vlan.py: + #Outer VLAN id match support is planned for future release with SONIC on Cisco 8000 + #For the current release, will mark the related test cases as XFAIL + xfail: + reason: "Cisco platform does not support ACL Outer VLAN ID tests" + skip: + reason: "Skip running on dualtor testbed" + conditions: + - "'dualtor' in topo_name" + +arp/test_unknown_mac.py: + skip: + reason: "Behavior on cisco-8000 & Innovium(Marvell) platform for unknown MAC is flooding rather than DROP, hence skipping." + +arp/test_arp_extended.py::test_arp_garp_enabled: + xfail:: + reason: "ARP GARP alwyas fails on cisco 8000" + +ip/test_ip_packet.py::TestIPPacket::test_forward_ip_packet_with_0xffff_chksum_drop: + skip: + reason: "Broadcom, Cisco, Barefoot, Innovium and Marvell Asic will tolorate IP packets with 0xffff checksum" + + + +####################################### +##### fdb ##### +####################################### +fdb/test_fdb.py::test_fdb[ethernet]: + skip: + reason: "Test is flaky on cisco 8000 platform" +fdb/test_fdb.py::test_fdb[arp_request]: + skip: + reason: "Test is flaky on cisco 8000 platform" +fdb/test_fdb.py::test_fdb[arp_reply]: + skip: + reason: "Test is flaky on cisco 8000 platform" + + +####################################### +##### cacl ##### +####################################### + +cacl/test_cacl_application.py::test_cacl_application_dualtor: + skip: + reason: "test_cacl_application_dualtor is only supported on dualtor topology" + + +####################################### +##### show_techsupport ##### +####################################### + +show_techsupport/test_auto_techsupport.py::TestAutoTechSupport::test_sai_sdk_dump: + skip: + reason: "Skip the test for sim" + +####################################### +##### dhcp_relay ##### +####################################### +dhcp_relay/test_dhcp_relay.py::test_dhcp_relay_on_dualtor_standby: + skip: + reason: "The test case only tests DHCP relay on the dualtor standby dut" + conditions: + - "'dualtor' not in topo_name" + +dhcp_relay/test_dhcp_relay.py::test_dhcp_relay_monitor_checksum_validation: + skip: + reason: "Current isc-dhcp-relay do not support dropping packets with unexpected checksum" + conditions: + - "https://github.com/sonic-net/sonic-buildimage/issues/24660" + +dhcp_relay/test_dhcp_counter_stress.py::test_dhcpmon_relay_counters_stress: + skip: + reason: "Skip the test for sim, causes 0.01% error with inconsistent failure." + +dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[discover-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[offer-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[request-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[ack-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_counter_stress.py::test_dhcpmon_relay_counters_stress[discover-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_counter_stress.py::test_dhcpmon_relay_counters_stress[offer-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_counter_stress.py::test_dhcpmon_relay_counters_stress[request-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +dhcp_relay/test_dhcp_counter_stress.py::test_dhcpmon_relay_counters_stress[ack-isc-relay-agent]: + skip: + reason: "Skip isc-dhcp-relay variant on sim due to upstream defect: https://github.com/sonic-net/sonic-mgmt/issues/14851" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/14851" + +####################################### +##### lldp ##### +####################################### +lldp/test_lldp_syncd.py::test_lldp_entry_table_after_reboot: + skip: + reason: "Skip reboot cases on sim, reboot takes longer at times and causes inconsistent failures; increasing timeout is not helpful." + +lldp/test_lldp_syncd.py::test_lldp_entry_table_after_cont_flap: + skip: + reason: "Skip multiple link flap cases on sim." + +####################################### +##### static_route ##### +####################################### + +route/test_static_route.py::test_static_route_warmboot: + skip: + reason: "warm-reboot does not reliably restart DUT, leaving the DUT in a broken state for subsequent tests" + +route/test_static_route.py::test_static_route_ecmp_warmboot: + skip: + reason: "warm-reboot does not reliably restart DUT, leaving the DUT in a broken state for subsequent tests" + +route/test_static_route.py::test_static_route_ipv6_warmboot: + skip: + reason: "warm-reboot does not reliably restart DUT, leaving the DUT in a broken state for subsequent tests" diff --git a/infra/sonic_dualtor_56/.nfs000000001f1ab31a0000018e b/infra/sonic_dualtor_56/.nfs000000001f1ab31a0000018e new file mode 100644 index 00000000000..1220b859772 Binary files /dev/null and b/infra/sonic_dualtor_56/.nfs000000001f1ab31a0000018e differ diff --git a/infra/sonic_dualtor_56/config_db.json b/infra/sonic_dualtor_56/config_db.json new file mode 100644 index 00000000000..95545f60a47 --- /dev/null +++ b/infra/sonic_dualtor_56/config_db.json @@ -0,0 +1,1019 @@ +{ + "ACL_TABLE": { + "DATAACL": { + "policy_desc": "DATAACL", + "ports": [ + "PortChannel0001", + "PortChannel0002", + "PortChannel0003", + "PortChannel0004" + ], + "stage": "ingress", + "type": "L3" + }, + "SNMP_ACL": { + "policy_desc": "SNMP_ACL", + "services": [ + "SNMP" + ], + "stage": "ingress", + "type": "CTRLPLANE" + }, + "SSH_ONLY": { + "policy_desc": "SSH_ONLY", + "services": [ + "SSH" + ], + "stage": "ingress", + "type": "CTRLPLANE" + } + }, + "BGP_NEIGHBOR": { + "10.0.0.57": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.56", + "name": "ARISTA01T1", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.59": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.58", + "name": "ARISTA02T1", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.61": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.60", + "name": "ARISTA03T1", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.63": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.62", + "name": "ARISTA04T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::7a": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::79", + "name": "ARISTA03T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::7e": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::7d", + "name": "ARISTA04T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::72": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::71", + "name": "ARISTA01T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::76": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::75", + "name": "ARISTA02T1", + "nhopself": "0", + "rrclient": "0" + } + }, + "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" + ], + "name": "BGPVac", + "src_address": "10.1.0.32" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "0", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "0", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "0", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "0", + "acl_table_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "0", + "fdb_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "0", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "0", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "0", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "0", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "0", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "0", + "ipv6_route_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "0", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "0", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300" + } + }, + "DEVICE_METADATA": { + "localhost": { + "asic": "cisco-8000", + "bgp_asn": "65100", + "cloudtype": "None", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "deployment_id": "1", + "docker_routing_config_mode": "separated", + "hostname": "sherman-01", + "hwsku": "36x100Gb", + "mac": "02:6c:c2:d3:1b:69", + "platform": "x86_64-8201_sys-r0", + "region": "None", + "type": "ToRRouter" + } + }, + "DEVICE_NEIGHBOR": { + "Ethernet1": { + "name": "Servers0", + "port": "eth0" + }, + "Ethernet2": { + "name": "Servers1", + "port": "eth0" + }, + "Ethernet3": { + "name": "Servers2", + "port": "eth0" + }, + "Ethernet4": { + "name": "Servers3", + "port": "eth0" + }, + "Ethernet5": { + "name": "Servers4", + "port": "eth0" + }, + "Ethernet6": { + "name": "Servers5", + "port": "eth0" + }, + "Ethernet7": { + "name": "Servers6", + "port": "eth0" + }, + "Ethernet8": { + "name": "Servers7", + "port": "eth0" + }, + "Ethernet9": { + "name": "Servers8", + "port": "eth0" + }, + "Ethernet10": { + "name": "Servers9", + "port": "eth0" + }, + "Ethernet11": { + "name": "Servers10", + "port": "eth0" + }, + "Ethernet12": { + "name": "Servers11", + "port": "eth0" + }, + "Ethernet13": { + "name": "Servers12", + "port": "eth0" + }, + "Ethernet14": { + "name": "Servers13", + "port": "eth0" + }, + "Ethernet15": { + "name": "Servers14", + "port": "eth0" + }, + "Ethernet16": { + "name": "Servers15", + "port": "eth0" + }, + "Ethernet17": { + "name": "Servers16", + "port": "eth0" + }, + "Ethernet18": { + "name": "Servers17", + "port": "eth0" + }, + "Ethernet19": { + "name": "Servers18", + "port": "eth0" + }, + "Ethernet20": { + "name": "Servers19", + "port": "eth0" + }, + "Ethernet21": { + "name": "Servers20", + "port": "eth0" + }, + "Ethernet22": { + "name": "Servers21", + "port": "eth0" + }, + "Ethernet23": { + "name": "Servers22", + "port": "eth0" + }, + "Ethernet24": { + "name": "Servers23", + "port": "eth0" + }, + "Ethernet28": { + "name": "ARISTA01T1", + "port": "Ethernet1" + }, + "Ethernet29": { + "name": "ARISTA02T1", + "port": "Ethernet1" + }, + "Ethernet30": { + "name": "ARISTA03T1", + "port": "Ethernet1" + }, + "Ethernet31": { + "name": "ARISTA04T1", + "port": "Ethernet1" + } + }, + "DEVICE_NEIGHBOR_METADATA": { + "ARISTA01T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.123", + "type": "LeafRouter" + }, + "ARISTA02T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.101", + "type": "LeafRouter" + }, + "ARISTA03T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.220", + "type": "LeafRouter" + }, + "ARISTA04T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.39", + "type": "LeafRouter" + } + }, + "DHCP_SERVER": { + "192.0.0.1": {}, + "192.0.0.2": {}, + "192.0.0.3": {}, + "192.0.0.4": {} + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "disabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "lldp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "status": "enabled" + } + }, + "LOOPBACK_INTERFACE": { + "Loopback0": {}, + "Loopback0|10.1.0.32/32": {}, + "Loopback0|FC00:1::32/128": {} + }, + "MGMT_INTERFACE": { + "eth0|192.168.122.45/24": { + "gwaddr": "192.168.122.1" + }, + "eth0|FC00:2::32/64": { + "gwaddr": "fc00:2::1" + } + }, + "MGMT_PORT": { + "eth0": { + "admin_status": "up", + "alias": "eth0" + } + }, + "NTP_SERVER": { + "10.0.0.1": {}, + "10.0.0.2": {} + }, + "PORT": { + "Ethernet0": { + "alias": "Ethernet0", + "description": "Ethernet0", + "fec": "rs", + "index": "0", + "lanes": "9,8,11,10", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet1": { + "admin_status": "up", + "alias": "Ethernet1", + "description": "Servers0:eth0", + "fec": "rs", + "index": "1", + "lanes": "1,0,3,2", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet2": { + "admin_status": "up", + "alias": "Ethernet2", + "description": "Servers1:eth0", + "fec": "rs", + "index": "2", + "lanes": "256,257,258,259", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet3": { + "admin_status": "up", + "alias": "Ethernet3", + "description": "Servers2:eth0", + "fec": "rs", + "index": "3", + "lanes": "264,265,266,267", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "Ethernet4", + "description": "Servers3:eth0", + "fec": "rs", + "index": "4", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet5": { + "admin_status": "up", + "alias": "Ethernet5", + "description": "Servers4:eth0", + "fec": "rs", + "index": "5", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet6": { + "admin_status": "up", + "alias": "Ethernet6", + "description": "Servers5:eth0", + "fec": "rs", + "index": "6", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet7": { + "admin_status": "up", + "alias": "Ethernet7", + "description": "Servers6:eth0", + "fec": "rs", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "Ethernet8", + "description": "Servers7:eth0", + "fec": "rs", + "index": "8", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet9": { + "admin_status": "up", + "alias": "Ethernet9", + "description": "Servers8:eth0", + "fec": "rs", + "index": "9", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet10": { + "admin_status": "up", + "alias": "Ethernet10", + "description": "Servers9:eth0", + "fec": "rs", + "index": "10", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet11": { + "admin_status": "up", + "alias": "Ethernet11", + "description": "Servers10:eth0", + "fec": "rs", + "index": "11", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "Ethernet12", + "description": "Servers11:eth0", + "fec": "rs", + "index": "12", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet13": { + "admin_status": "up", + "alias": "Ethernet13", + "description": "Servers12:eth0", + "fec": "rs", + "index": "13", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet14": { + "admin_status": "up", + "alias": "Ethernet14", + "description": "Servers13:eth0", + "fec": "rs", + "index": "14", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet15": { + "admin_status": "up", + "alias": "Ethernet15", + "description": "Servers14:eth0", + "fec": "rs", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "Ethernet16", + "description": "Servers15:eth0", + "fec": "rs", + "index": "16", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet17": { + "admin_status": "up", + "alias": "Ethernet17", + "description": "Servers16:eth0", + "fec": "rs", + "index": "17", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet18": { + "admin_status": "up", + "alias": "Ethernet18", + "description": "Servers17:eth0", + "fec": "rs", + "index": "18", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet19": { + "admin_status": "up", + "alias": "Ethernet19", + "description": "Servers18:eth0", + "fec": "rs", + "index": "19", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "Ethernet20", + "description": "Servers19:eth0", + "fec": "rs", + "index": "20", + "lanes": "776,777,778,779", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet21": { + "admin_status": "up", + "alias": "Ethernet21", + "description": "Servers20:eth0", + "fec": "rs", + "index": "21", + "lanes": "768,769,770,771", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet22": { + "admin_status": "up", + "alias": "Ethernet22", + "description": "Servers21:eth0", + "fec": "rs", + "index": "22", + "lanes": "520,521,522,523", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet23": { + "admin_status": "up", + "alias": "Ethernet23", + "description": "Servers22:eth0", + "fec": "rs", + "index": "23", + "lanes": "512,513,514,515", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "Ethernet24", + "description": "Servers23:eth0", + "fec": "rs", + "index": "24", + "lanes": "1552,1553", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet25": { + "alias": "Ethernet25", + "description": "Ethernet25", + "fec": "rs", + "index": "25", + "lanes": "1808,1809", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet26": { + "alias": "Ethernet26", + "description": "Ethernet26", + "fec": "rs", + "index": "26", + "lanes": "1040,1041", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet27": { + "alias": "Ethernet27", + "description": "Ethernet27", + "fec": "rs", + "index": "27", + "lanes": "1296,1297", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "Ethernet28", + "description": "ARISTA01T1:Ethernet1", + "fec": "rs", + "index": "28", + "lanes": "528,529", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet29": { + "admin_status": "up", + "alias": "Ethernet29", + "description": "ARISTA02T1:Ethernet1", + "fec": "rs", + "index": "29", + "lanes": "784,785", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet30": { + "admin_status": "up", + "alias": "Ethernet30", + "description": "ARISTA03T1:Ethernet1", + "fec": "rs", + "index": "30", + "lanes": "16,17", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet31": { + "admin_status": "up", + "alias": "Ethernet31", + "description": "ARISTA04T1:Ethernet1", + "fec": "rs", + "index": "31", + "lanes": "272,273", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet32": { + "alias": "Ethernet32", + "description": "Ethernet32", + "fec": "rs", + "index": "32", + "lanes": "2576,2577", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet33": { + "alias": "Ethernet33", + "description": "Ethernet33", + "fec": "rs", + "index": "33", + "lanes": "2832,2833", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet34": { + "alias": "Ethernet34", + "description": "Ethernet34", + "fec": "rs", + "index": "34", + "lanes": "2064,2065", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet35": { + "alias": "Ethernet35", + "description": "Ethernet35", + "fec": "rs", + "index": "35", + "lanes": "2320,2321", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + } + }, + "PORTCHANNEL": { + "PortChannel0001": { + "admin_status": "up", + "members": [ + "Ethernet28" + ], + "min_links": "1", + "mtu": "9100" + }, + "PortChannel0002": { + "admin_status": "up", + "members": [ + "Ethernet29" + ], + "min_links": "1", + "mtu": "9100" + }, + "PortChannel0003": { + "admin_status": "up", + "members": [ + "Ethernet30" + ], + "min_links": "1", + "mtu": "9100" + }, + "PortChannel0004": { + "admin_status": "up", + "members": [ + "Ethernet31" + ], + "min_links": "1", + "mtu": "9100" + } + }, + "PORTCHANNEL_INTERFACE": { + "PortChannel0001": {}, + "PortChannel0002": {}, + "PortChannel0003": {}, + "PortChannel0004": {}, + "PortChannel0001|10.0.0.56/31": {}, + "PortChannel0001|FC00::71/126": {}, + "PortChannel0002|10.0.0.58/31": {}, + "PortChannel0002|FC00::75/126": {}, + "PortChannel0003|10.0.0.60/31": {}, + "PortChannel0003|FC00::79/126": {}, + "PortChannel0004|10.0.0.62/31": {}, + "PortChannel0004|FC00::7D/126": {} + }, + "PORTCHANNEL_MEMBER": { + "PortChannel0001|Ethernet28": {}, + "PortChannel0002|Ethernet29": {}, + "PortChannel0003|Ethernet30": {}, + "PortChannel0004|Ethernet31": {} + }, + "SYSLOG_SERVER": { + "10.0.0.5": {}, + "10.0.0.6": {} + }, + "TACPLUS_SERVER": { + "10.0.0.8": { + "priority": "1", + "tcp_port": "49" + }, + "10.0.0.9": { + "priority": "1", + "tcp_port": "49" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_1_0_4" + } + }, + "VLAN": { + "Vlan1000": { + "dhcp_servers": [ + "192.0.0.1", + "192.0.0.2", + "192.0.0.3", + "192.0.0.4" + ], + "vlanid": "1000" + } + }, + "VLAN_INTERFACE": { + "Vlan1000": {}, + "Vlan1000|192.168.0.1/21": {}, + "Vlan1000|fc02:1000::1/64": {} + }, + "VLAN_MEMBER": { + "Vlan1000|Ethernet1": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet2": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet3": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet5": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet6": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet7": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet9": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet10": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet11": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet13": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet14": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet15": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet17": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet18": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet19": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet21": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet22": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet23": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet24": { + "tagging_mode": "untagged" + } + } +} diff --git a/infra/sonic_dualtor_56/password.txt b/infra/sonic_dualtor_56/password.txt new file mode 100755 index 00000000000..9f358a4adde --- /dev/null +++ b/infra/sonic_dualtor_56/password.txt @@ -0,0 +1 @@ +123456 diff --git a/infra/sonic_dualtor_56/t0-leaf.j2 b/infra/sonic_dualtor_56/t0-leaf.j2 new file mode 100644 index 00000000000..87c60cec43d --- /dev/null +++ b/infra/sonic_dualtor_56/t0-leaf.j2 @@ -0,0 +1,136 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +aaa admin secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/infra/sonic_dualtor_56/testbed-mth32-t0-dualtor.yaml b/infra/sonic_dualtor_56/testbed-mth32-t0-dualtor.yaml new file mode 100644 index 00000000000..8c4937ed0dd --- /dev/null +++ b/infra/sonic_dualtor_56/testbed-mth32-t0-dualtor.yaml @@ -0,0 +1,379 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-0 + - mathilda-1 + vars: + hwsku: 32x100Gb + iface_speed: '100000' +devices: + mathilda-0: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + mathilda-1: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: mathilda-0 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t0 + type: Physical +topology: + mathilda-0: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_dualtor_56/testbed-mth64-t0-dualtor-4.yaml b/infra/sonic_dualtor_56/testbed-mth64-t0-dualtor-4.yaml new file mode 100644 index 00000000000..28eb82299cf --- /dev/null +++ b/infra/sonic_dualtor_56/testbed-mth64-t0-dualtor-4.yaml @@ -0,0 +1,370 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-0 + - mathilda-1 + vars: + hwsku: Cisco-8102-C64 + iface_speed: '100000' +devices: + mathilda-0: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8102-C64 + os: sonic + mathilda-1: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8102-C64 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: mathilda-0; mathilda-1 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: dualtor-56-4 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t0 + type: Physical +topology: + mathilda-0: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet2 + VlanID: 1682 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet2 + VlanID: 1684 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet2 + VlanID: 1686 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet2 + VlanID: 1688 + VlanMode: Access + Ethernet34: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet36: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access + Ethernet37: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet38: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet39: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet42: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet44: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet45: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet46: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet47: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet50: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet52: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet53: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet54: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet55: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet58: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet60: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet61: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet62: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet63: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + - dualtor-56-4 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_dualtor_56/testbed-mth64-t0-dualtor.yaml b/infra/sonic_dualtor_56/testbed-mth64-t0-dualtor.yaml new file mode 100644 index 00000000000..fd63313bc4b --- /dev/null +++ b/infra/sonic_dualtor_56/testbed-mth64-t0-dualtor.yaml @@ -0,0 +1,367 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-0 + - mathilda-1 + vars: + hwsku: Cisco-8102-C64 + iface_speed: '100000' +devices: + mathilda-0: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8102-C64 + os: sonic + mathilda-1: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8102-C64 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: mathilda-0; mathilda-1 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: dualtor-56 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t0 + type: Physical +topology: + mathilda-0: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet2 + VlanID: 1682 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet2 + VlanID: 1684 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet2 + VlanID: 1686 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet2 + VlanID: 1688 + VlanMode: Access + Ethernet34: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet36: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access + Ethernet37: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet38: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet39: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet42: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet44: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet45: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet46: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet47: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet50: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet52: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet53: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet54: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet55: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet58: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet60: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet61: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet62: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet63: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + - dualtor-56 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_dualtor_56/testbed-sherman-t0.yaml b/infra/sonic_dualtor_56/testbed-sherman-t0.yaml new file mode 100644 index 00000000000..f1fae618dae --- /dev/null +++ b/infra/sonic_dualtor_56/testbed-sherman-t0.yaml @@ -0,0 +1,365 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sherman-01 + vars: + hwsku: 36x100Gb + iface_speed: '100000' +devices: + sherman-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 36x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Sherman + dut: sherman-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sherman + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: ShermantopologyTestbed + name: testbed-sherman-t0 + type: Physical +topology: + sherman-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_dualtor_56/testbed_add_vm_topology.yml b/infra/sonic_dualtor_56/testbed_add_vm_topology.yml new file mode 100755 index 00000000000..8aae3bc35a0 --- /dev/null +++ b/infra/sonic_dualtor_56/testbed_add_vm_topology.yml @@ -0,0 +1,60 @@ +# This Playbook add a topology to a server +# +# Topologies are defined inside of vars/ directorie in files vars/topo_{{ topology_name}}.yml +# This file contains three structures: +# - topology +# - configuration property +# - configuration +# +# topology key contains a dictionary of hostnames with 'vm_offset' and 'vlans' keys in it. +# 'vm_offset' is used to map current hostname vm_set VM to server VM (like ARISTA01T0 -> VM0300). +# This offset is used on VM_base +# 'vlans' is a list of vlan offsets which helps us to calculate vlan numbers which will be connected to Eth1/1..Eth1/8 interfaces. +# These offsets are used with vlan_base +# +# Every topology should have a name to distinct one topology from another on the server +# Every topology contains a ptf container which will be used as placeholder for the injected interfaces from VMs, or direct connections to PTF host +# +# To add a topology please use following command +# ANSIBLE_SCP_IF_SSH=y ansible-playbook -i veos testbed_add_vm_topology.yml --vault-password-file=~/.password -l server_3 -e vm_set_name=first -e dut_name=str-msn2700-01 -e VM_base=VM0300 -e ptf_ip=10.255.0.255/23 -e topo=t0 -e ptf_imagename="docker_ptf" +# +# Parameters +# -l server_3 - this playbook have to be limited to run only on one server +# -e vm_set_name=first - the name of vm_set +# -e dut_name=str-msn2700-01 - the name of target dut +# -e VM_base=VM0300 - the VM name which is used to as base to calculate VM name for this set +# -e ptf_ip=10.255.0.255/23 - the ip address and prefix of ptf container mgmt interface +# -e topo=t0 - the name of removed topo +# -e ptf_imagename=docker-ptf - name of a docker-image which will be used for the ptf docker container +# -e vm_type=veos|ceos + +- hosts: servers:&eos + gather_facts: no + pre_tasks: + - name: Check that variable topo is defined + fail: msg="Define topo variable with -e topo=something" + when: topo is not defined + + - name: Check if it is a known topology + fail: msg="Unknown topology {{ topo }}" + when: topo not in topologies + + - name: Check that variable VM_base is defined + fail: msg="Define VM_base variable with -e VM_base=something" + when: VM_base is not defined + + - name: Load topo variables + include_vars: "vars/topo_{{ topo }}.yml" + + - name: Find current server group + set_fact: current_server={{ group_names | extract_by_prefix('server_') }} + + - name: Extract VM names from the inventory + set_fact: VM_hosts={{ groups[current_server] | filter_by_prefix('VM') }} + + - name: Generate vm list of target VMs + set_fact: VM_targets={{ VM_hosts | filter_vm_targets(topology['VMs'], VM_base) }} + when: topology['VMs'] is defined + + roles: + - { role: eos, when: topology.VMs is defined and inventory_hostname in VM_targets } # role eos will be executed in any case, and when will evaluate with every task diff --git a/infra/sonic_dualtor_56/veos.yml b/infra/sonic_dualtor_56/veos.yml new file mode 100755 index 00000000000..a16791eada5 --- /dev/null +++ b/infra/sonic_dualtor_56/veos.yml @@ -0,0 +1,26 @@ +- name: Set ansible login user name and password + set_fact: ansible_user="root" ansible_password={{ eos_root_password }} + +- name: Set EOS backplane port name + set_fact: bp_ifname="Ethernet9" + +- name: copy rc.eos + copy: src=rc.eos + dest=/mnt/flash/rc.eos + when: hostname in configuration + notify: + - Update VM state + +- name: copy boot-config + copy: src=boot-config + dest=/mnt/flash/boot-config + when: hostname in configuration + notify: + - Update VM state + +- name: update startup-config + template: src="{{ topo }}-{{ props.swrole }}.j2" + dest=/mnt/flash/startup-config + when: hostname in configuration + notify: + - Update VM state diff --git a/infra/sonic_lab_devices_churchill_mono.csv b/infra/sonic_lab_devices_churchill_mono.csv new file mode 100644 index 00000000000..49e2315c1e0 --- /dev/null +++ b/infra/sonic_lab_devices_churchill_mono.csv @@ -0,0 +1,6 @@ +Hostname,ManagementIp,HwSku,Type +lab-s6000-01,10.251.0.189,,blank +churchill-mono-01,192.168.122.177,Cisco-8101-O32,DevSonic +nexus-5,10.251.0.13/23,Arista-7260QX-64,FanoutLeaf +str-acs-serv-01,172.17.0.1/23,TestServ,server +str-7260-11,10.251.0.234/23,Arista-7260QX-64,FanoutRoot \ No newline at end of file diff --git a/infra/sonic_lab_devices_crocodile.csv b/infra/sonic_lab_devices_crocodile.csv new file mode 100644 index 00000000000..ceaa6fbc2d1 --- /dev/null +++ b/infra/sonic_lab_devices_crocodile.csv @@ -0,0 +1,5 @@ +Hostname,ManagementIp,HwSku,Type,CardType +str-acs-serv-01,172.17.0.1/23,TestServ,server, +docker-ptf,192.168.122.220/24,,blank, +nexus-5,10.251.0.13/23,Arista-7260QX-64,FanoutLeaf, +crocodile-01,192.168.122.51,Cisco-8111-O64,DevSonic, diff --git a/infra/sonic_lab_devices_lightning.csv b/infra/sonic_lab_devices_lightning.csv new file mode 100644 index 00000000000..b170d5a9b2b --- /dev/null +++ b/infra/sonic_lab_devices_lightning.csv @@ -0,0 +1,5 @@ +Hostname,ManagementIp,HwSku,Type,CardType +str-acs-serv-01,172.17.0.1/23,TestServ,server, +docker-ptf,192.168.122.220/24,,blank, +nexus-5,10.251.0.13/23,Arista-7260QX-64,FanoutLeaf, +lightning-01,192.168.122.51,Cisco-8122-O128S2,DevSonic diff --git a/infra/sonic_lab_devices_mth32.csv b/infra/sonic_lab_devices_mth32.csv new file mode 100644 index 00000000000..6eb00e97f53 --- /dev/null +++ b/infra/sonic_lab_devices_mth32.csv @@ -0,0 +1,6 @@ +Hostname,ManagementIp,HwSku,Type +lab-s6000-01,10.251.0.189,,blank +mathilda-01,192.168.122.177,32x100Gb,DevSonic +nexus-5,10.251.0.13/23,Arista-7260QX-64,FanoutLeaf +str-acs-serv-01,172.17.0.1/23,TestServ,server +str-7260-11,10.251.0.234/23,Arista-7260QX-64,FanoutRoot diff --git a/infra/sonic_lab_devices_siren.csv b/infra/sonic_lab_devices_siren.csv new file mode 100644 index 00000000000..6a4e31e99b5 --- /dev/null +++ b/infra/sonic_lab_devices_siren.csv @@ -0,0 +1,6 @@ +Hostname,ManagementIp,HwSku,Type +lab-s6000-01,10.251.0.189,,blank +siren-01,192.168.122.177,Cisco-HF6100-60S4D,DevSonic +nexus-5,10.251.0.13/23,Arista-7260QX-64,FanoutLeaf +str-acs-serv-01,172.17.0.1/23,TestServ,server +str-7260-11,10.251.0.234/23,Arista-7260QX-64,FanoutRoot diff --git a/infra/sonic_lab_links_churchill_mono.csv b/infra/sonic_lab_links_churchill_mono.csv new file mode 100644 index 00000000000..066ba30f123 --- /dev/null +++ b/infra/sonic_lab_links_churchill_mono.csv @@ -0,0 +1,33 @@ +StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode +churchill-mono-01,Ethernet8,VM0108,Ethernet1,40000,1689,Access +churchill-mono-01,Ethernet9,VM0109,Ethernet1,40000,1690,Access +churchill-mono-01,Ethernet2,VM0102,Ethernet1,40000,1683,Access +churchill-mono-01,Ethernet3,VM0103,Ethernet1,40000,1684,Access +churchill-mono-01,Ethernet0,VM0100,Ethernet1,40000,1681,Access +churchill-mono-01,Ethernet1,VM0101,Ethernet1,40000,1682,Access +churchill-mono-01,Ethernet6,VM0106,Ethernet1,40000,1687,Access +churchill-mono-01,Ethernet7,VM0107,Ethernet1,40000,1688,Access +churchill-mono-01,Ethernet4,VM0104,Ethernet1,40000,1685,Access +churchill-mono-01,Ethernet5,VM0105,Ethernet1,40000,1686,Access +churchill-mono-01,Ethernet18,VM0118,Ethernet1,40000,1699,Access +churchill-mono-01,Ethernet19,VM0119,Ethernet1,40000,1700,Access +churchill-mono-01,Ethernet14,VM0114,Ethernet1,40000,1695,Access +churchill-mono-01,Ethernet15,VM0115,Ethernet1,40000,1696,Access +churchill-mono-01,Ethernet16,VM0116,Ethernet1,40000,1697,Access +churchill-mono-01,Ethernet17,VM0117,Ethernet1,40000,1698,Access +churchill-mono-01,Ethernet10,VM0110,Ethernet1,40000,1691,Access +churchill-mono-01,Ethernet11,VM0111,Ethernet1,40000,1692,Access +churchill-mono-01,Ethernet12,VM0112,Ethernet1,40000,1693,Access +churchill-mono-01,Ethernet13,VM0113,Ethernet1,40000,1694,Access +churchill-mono-01,Ethernet30,VM0130,Ethernet1,40000,1711,Access +churchill-mono-01,Ethernet31,VM0131,Ethernet1,40000,1712,Access +churchill-mono-01,Ethernet29,VM0129,Ethernet1,40000,1710,Access +churchill-mono-01,Ethernet28,VM0128,Ethernet1,40000,1709,Access +churchill-mono-01,Ethernet21,VM0121,Ethernet1,40000,1702,Access +churchill-mono-01,Ethernet20,VM0120,Ethernet1,40000,1701,Access +churchill-mono-01,Ethernet23,VM0123,Ethernet1,40000,1704,Access +churchill-mono-01,Ethernet22,VM0122,Ethernet1,40000,1703,Access +churchill-mono-01,Ethernet25,VM0125,Ethernet1,40000,1706,Access +churchill-mono-01,Ethernet24,VM0124,Ethernet1,40000,1705,Access +churchill-mono-01,Ethernet27,VM0127,Ethernet1,40000,1708,Access +churchill-mono-01,Ethernet26,VM0126,Ethernet1,40000,1707,Access diff --git a/infra/sonic_lab_links_crocodile.csv b/infra/sonic_lab_links_crocodile.csv new file mode 100644 index 00000000000..c23caa01f3a --- /dev/null +++ b/infra/sonic_lab_links_crocodile.csv @@ -0,0 +1,33 @@ +StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode +crocodile-01,Ethernet8,VM0108,Ethernet1,40000,1689,Access +crocodile-01,Ethernet9,VM0109,Ethernet1,40000,1690,Access +crocodile-01,Ethernet2,VM0102,Ethernet1,40000,1683,Access +crocodile-01,Ethernet3,VM0103,Ethernet1,40000,1684,Access +crocodile-01,Ethernet0,VM0100,Ethernet1,40000,1681,Access +crocodile-01,Ethernet1,VM0101,Ethernet1,40000,1682,Access +crocodile-01,Ethernet6,VM0106,Ethernet1,40000,1687,Access +crocodile-01,Ethernet7,VM0107,Ethernet1,40000,1688,Access +crocodile-01,Ethernet4,VM0104,Ethernet1,40000,1685,Access +crocodile-01,Ethernet5,VM0105,Ethernet1,40000,1686,Access +crocodile-01,Ethernet18,VM0118,Ethernet1,40000,1699,Access +crocodile-01,Ethernet19,VM0119,Ethernet1,40000,1700,Access +crocodile-01,Ethernet14,VM0114,Ethernet1,40000,1695,Access +crocodile-01,Ethernet15,VM0115,Ethernet1,40000,1696,Access +crocodile-01,Ethernet16,VM0116,Ethernet1,40000,1697,Access +crocodile-01,Ethernet17,VM0117,Ethernet1,40000,1698,Access +crocodile-01,Ethernet10,VM0110,Ethernet1,40000,1691,Access +crocodile-01,Ethernet11,VM0111,Ethernet1,40000,1692,Access +crocodile-01,Ethernet12,VM0112,Ethernet1,40000,1693,Access +crocodile-01,Ethernet13,VM0113,Ethernet1,40000,1694,Access +crocodile-01,Ethernet30,VM0130,Ethernet1,40000,1711,Access +crocodile-01,Ethernet31,VM0131,Ethernet1,40000,1712,Access +crocodile-01,Ethernet29,VM0129,Ethernet1,40000,1710,Access +crocodile-01,Ethernet28,VM0128,Ethernet1,40000,1709,Access +crocodile-01,Ethernet21,VM0121,Ethernet1,40000,1702,Access +crocodile-01,Ethernet20,VM0120,Ethernet1,40000,1701,Access +crocodile-01,Ethernet23,VM0123,Ethernet1,40000,1704,Access +crocodile-01,Ethernet22,VM0122,Ethernet1,40000,1703,Access +crocodile-01,Ethernet25,VM0125,Ethernet1,40000,1706,Access +crocodile-01,Ethernet24,VM0124,Ethernet1,40000,1705,Access +crocodile-01,Ethernet27,VM0127,Ethernet1,40000,1708,Access +crocodile-01,Ethernet26,VM0126,Ethernet1,40000,1707,Access diff --git a/infra/sonic_lab_links_lightning.csv b/infra/sonic_lab_links_lightning.csv new file mode 100644 index 00000000000..b0c7de7071c --- /dev/null +++ b/infra/sonic_lab_links_lightning.csv @@ -0,0 +1,33 @@ +StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode +lightning-01,Ethernet8,VM0108,Ethernet1,40000,1689,Access +lightning-01,Ethernet9,VM0109,Ethernet1,40000,1690,Access +lightning-01,Ethernet2,VM0102,Ethernet1,40000,1683,Access +lightning-01,Ethernet3,VM0103,Ethernet1,40000,1684,Access +lightning-01,Ethernet0,VM0100,Ethernet1,40000,1681,Access +lightning-01,Ethernet1,VM0101,Ethernet1,40000,1682,Access +lightning-01,Ethernet6,VM0106,Ethernet1,40000,1687,Access +lightning-01,Ethernet7,VM0107,Ethernet1,40000,1688,Access +lightning-01,Ethernet4,VM0104,Ethernet1,40000,1685,Access +lightning-01,Ethernet5,VM0105,Ethernet1,40000,1686,Access +lightning-01,Ethernet18,VM0118,Ethernet1,40000,1699,Access +lightning-01,Ethernet19,VM0119,Ethernet1,40000,1700,Access +lightning-01,Ethernet14,VM0114,Ethernet1,40000,1695,Access +lightning-01,Ethernet15,VM0115,Ethernet1,40000,1696,Access +lightning-01,Ethernet16,VM0116,Ethernet1,40000,1697,Access +lightning-01,Ethernet17,VM0117,Ethernet1,40000,1698,Access +lightning-01,Ethernet10,VM0110,Ethernet1,40000,1691,Access +lightning-01,Ethernet11,VM0111,Ethernet1,40000,1692,Access +lightning-01,Ethernet12,VM0112,Ethernet1,40000,1693,Access +lightning-01,Ethernet13,VM0113,Ethernet1,40000,1694,Access +lightning-01,Ethernet30,VM0130,Ethernet1,40000,1711,Access +lightning-01,Ethernet31,VM0131,Ethernet1,40000,1712,Access +lightning-01,Ethernet29,VM0129,Ethernet1,40000,1710,Access +lightning-01,Ethernet28,VM0128,Ethernet1,40000,1709,Access +lightning-01,Ethernet21,VM0121,Ethernet1,40000,1702,Access +lightning-01,Ethernet20,VM0120,Ethernet1,40000,1701,Access +lightning-01,Ethernet23,VM0123,Ethernet1,40000,1704,Access +lightning-01,Ethernet22,VM0122,Ethernet1,40000,1703,Access +lightning-01,Ethernet25,VM0125,Ethernet1,40000,1706,Access +lightning-01,Ethernet24,VM0124,Ethernet1,40000,1705,Access +lightning-01,Ethernet27,VM0127,Ethernet1,40000,1708,Access +lightning-01,Ethernet26,VM0126,Ethernet1,40000,1707,Access diff --git a/infra/sonic_lab_links_mth32.csv b/infra/sonic_lab_links_mth32.csv new file mode 100644 index 00000000000..bb4ec084cf7 --- /dev/null +++ b/infra/sonic_lab_links_mth32.csv @@ -0,0 +1,33 @@ +StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode +mathilda-01,Ethernet8,VM0108,Ethernet1,40000,1689,Access +mathilda-01,Ethernet9,VM0109,Ethernet1,40000,1690,Access +mathilda-01,Ethernet2,VM0102,Ethernet1,40000,1683,Access +mathilda-01,Ethernet3,VM0103,Ethernet1,40000,1684,Access +mathilda-01,Ethernet0,VM0100,Ethernet1,40000,1681,Access +mathilda-01,Ethernet1,VM0101,Ethernet1,40000,1682,Access +mathilda-01,Ethernet6,VM0106,Ethernet1,40000,1687,Access +mathilda-01,Ethernet7,VM0107,Ethernet1,40000,1688,Access +mathilda-01,Ethernet4,VM0104,Ethernet1,40000,1685,Access +mathilda-01,Ethernet5,VM0105,Ethernet1,40000,1686,Access +mathilda-01,Ethernet18,VM0118,Ethernet1,40000,1699,Access +mathilda-01,Ethernet19,VM0119,Ethernet1,40000,1700,Access +mathilda-01,Ethernet14,VM0114,Ethernet1,40000,1695,Access +mathilda-01,Ethernet15,VM0115,Ethernet1,40000,1696,Access +mathilda-01,Ethernet16,VM0116,Ethernet1,40000,1697,Access +mathilda-01,Ethernet17,VM0117,Ethernet1,40000,1698,Access +mathilda-01,Ethernet10,VM0110,Ethernet1,40000,1691,Access +mathilda-01,Ethernet11,VM0111,Ethernet1,40000,1692,Access +mathilda-01,Ethernet12,VM0112,Ethernet1,40000,1693,Access +mathilda-01,Ethernet13,VM0113,Ethernet1,40000,1694,Access +mathilda-01,Ethernet30,VM0130,Ethernet1,40000,1711,Access +mathilda-01,Ethernet31,VM0131,Ethernet1,40000,1712,Access +mathilda-01,Ethernet29,VM0129,Ethernet1,40000,1710,Access +mathilda-01,Ethernet28,VM0128,Ethernet1,40000,1709,Access +mathilda-01,Ethernet21,VM0121,Ethernet1,40000,1702,Access +mathilda-01,Ethernet20,VM0120,Ethernet1,40000,1701,Access +mathilda-01,Ethernet23,VM0123,Ethernet1,40000,1704,Access +mathilda-01,Ethernet22,VM0122,Ethernet1,40000,1703,Access +mathilda-01,Ethernet25,VM0125,Ethernet1,40000,1706,Access +mathilda-01,Ethernet24,VM0124,Ethernet1,40000,1705,Access +mathilda-01,Ethernet27,VM0127,Ethernet1,40000,1708,Access +mathilda-01,Ethernet26,VM0126,Ethernet1,40000,1707,Access diff --git a/infra/sonic_lab_links_siren.csv b/infra/sonic_lab_links_siren.csv new file mode 100644 index 00000000000..615fcbeefa1 --- /dev/null +++ b/infra/sonic_lab_links_siren.csv @@ -0,0 +1,33 @@ +StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode +siren-01,Ethernet1_9,VM0108,Ethernet1,10000,1689,Access +siren-01,Ethernet1_10,VM0109,Ethernet1,10000,1690,Access +siren-01,Ethernet1_3,VM0102,Ethernet1,10000,1683,Access +siren-01,Ethernet1_4,VM0103,Ethernet1,10000,1684,Access +siren-01,Ethernet1_1,VM0100,Ethernet1,10000,1681,Access +siren-01,Ethernet1_2,VM0101,Ethernet1,10000,1682,Access +siren-01,Ethernet1_7,VM0106,Ethernet1,10000,1687,Access +siren-01,Ethernet1_8,VM0107,Ethernet1,10000,1688,Access +siren-01,Ethernet1_5,VM0104,Ethernet1,10000,1685,Access +siren-01,Ethernet1_6,VM0105,Ethernet1,10000,1686,Access +siren-01,Ethernet1_19,VM0118,Ethernet1,10000,1699,Access +siren-01,Ethernet1_20,VM0119,Ethernet1,10000,1700,Access +siren-01,Ethernet1_15,VM0114,Ethernet1,10000,1695,Access +siren-01,Ethernet1_16,VM0115,Ethernet1,10000,1696,Access +siren-01,Ethernet1_17,VM0116,Ethernet1,10000,1697,Access +siren-01,Ethernet1_18,VM0117,Ethernet1,10000,1698,Access +siren-01,Ethernet1_11,VM0110,Ethernet1,10000,1691,Access +siren-01,Ethernet1_12,VM0111,Ethernet1,10000,1692,Access +siren-01,Ethernet1_13,VM0112,Ethernet1,10000,1693,Access +siren-01,Ethernet1_14,VM0113,Ethernet1,10000,1694,Access +siren-01,Ethernet1_31,VM0130,Ethernet1,400000,1711,Access +siren-01,Ethernet1_32,VM0131,Ethernet1,400000,1712,Access +siren-01,Ethernet1_30,VM0129,Ethernet1,10000,1710,Access +siren-01,Ethernet1_29,VM0128,Ethernet1,10000,1709,Access +siren-01,Ethernet1_22,VM0121,Ethernet1,10000,1702,Access +siren-01,Ethernet1_21,VM0120,Ethernet1,10000,1701,Access +siren-01,Ethernet1_24,VM0123,Ethernet1,10000,1704,Access +siren-01,Ethernet1_23,VM0122,Ethernet1,10000,1703,Access +siren-01,Ethernet1_26,VM0125,Ethernet1,10000,1706,Access +siren-01,Ethernet1_25,VM0124,Ethernet1,10000,1705,Access +siren-01,Ethernet1_28,VM0127,Ethernet1,10000,1708,Access +siren-01,Ethernet1_27,VM0126,Ethernet1,10000,1707,Access diff --git a/infra/sonic_t0_topo/config_db.json b/infra/sonic_t0_topo/config_db.json new file mode 100644 index 00000000000..95545f60a47 --- /dev/null +++ b/infra/sonic_t0_topo/config_db.json @@ -0,0 +1,1019 @@ +{ + "ACL_TABLE": { + "DATAACL": { + "policy_desc": "DATAACL", + "ports": [ + "PortChannel0001", + "PortChannel0002", + "PortChannel0003", + "PortChannel0004" + ], + "stage": "ingress", + "type": "L3" + }, + "SNMP_ACL": { + "policy_desc": "SNMP_ACL", + "services": [ + "SNMP" + ], + "stage": "ingress", + "type": "CTRLPLANE" + }, + "SSH_ONLY": { + "policy_desc": "SSH_ONLY", + "services": [ + "SSH" + ], + "stage": "ingress", + "type": "CTRLPLANE" + } + }, + "BGP_NEIGHBOR": { + "10.0.0.57": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.56", + "name": "ARISTA01T1", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.59": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.58", + "name": "ARISTA02T1", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.61": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.60", + "name": "ARISTA03T1", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.63": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.62", + "name": "ARISTA04T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::7a": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::79", + "name": "ARISTA03T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::7e": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::7d", + "name": "ARISTA04T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::72": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::71", + "name": "ARISTA01T1", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::76": { + "asn": "64600", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::75", + "name": "ARISTA02T1", + "nhopself": "0", + "rrclient": "0" + } + }, + "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" + ], + "name": "BGPVac", + "src_address": "10.1.0.32" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "0", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "0", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "0", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "0", + "acl_table_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "0", + "fdb_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "0", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "0", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "0", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "0", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "0", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "0", + "ipv6_route_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "0", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "0", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300" + } + }, + "DEVICE_METADATA": { + "localhost": { + "asic": "cisco-8000", + "bgp_asn": "65100", + "cloudtype": "None", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "deployment_id": "1", + "docker_routing_config_mode": "separated", + "hostname": "sherman-01", + "hwsku": "36x100Gb", + "mac": "02:6c:c2:d3:1b:69", + "platform": "x86_64-8201_sys-r0", + "region": "None", + "type": "ToRRouter" + } + }, + "DEVICE_NEIGHBOR": { + "Ethernet1": { + "name": "Servers0", + "port": "eth0" + }, + "Ethernet2": { + "name": "Servers1", + "port": "eth0" + }, + "Ethernet3": { + "name": "Servers2", + "port": "eth0" + }, + "Ethernet4": { + "name": "Servers3", + "port": "eth0" + }, + "Ethernet5": { + "name": "Servers4", + "port": "eth0" + }, + "Ethernet6": { + "name": "Servers5", + "port": "eth0" + }, + "Ethernet7": { + "name": "Servers6", + "port": "eth0" + }, + "Ethernet8": { + "name": "Servers7", + "port": "eth0" + }, + "Ethernet9": { + "name": "Servers8", + "port": "eth0" + }, + "Ethernet10": { + "name": "Servers9", + "port": "eth0" + }, + "Ethernet11": { + "name": "Servers10", + "port": "eth0" + }, + "Ethernet12": { + "name": "Servers11", + "port": "eth0" + }, + "Ethernet13": { + "name": "Servers12", + "port": "eth0" + }, + "Ethernet14": { + "name": "Servers13", + "port": "eth0" + }, + "Ethernet15": { + "name": "Servers14", + "port": "eth0" + }, + "Ethernet16": { + "name": "Servers15", + "port": "eth0" + }, + "Ethernet17": { + "name": "Servers16", + "port": "eth0" + }, + "Ethernet18": { + "name": "Servers17", + "port": "eth0" + }, + "Ethernet19": { + "name": "Servers18", + "port": "eth0" + }, + "Ethernet20": { + "name": "Servers19", + "port": "eth0" + }, + "Ethernet21": { + "name": "Servers20", + "port": "eth0" + }, + "Ethernet22": { + "name": "Servers21", + "port": "eth0" + }, + "Ethernet23": { + "name": "Servers22", + "port": "eth0" + }, + "Ethernet24": { + "name": "Servers23", + "port": "eth0" + }, + "Ethernet28": { + "name": "ARISTA01T1", + "port": "Ethernet1" + }, + "Ethernet29": { + "name": "ARISTA02T1", + "port": "Ethernet1" + }, + "Ethernet30": { + "name": "ARISTA03T1", + "port": "Ethernet1" + }, + "Ethernet31": { + "name": "ARISTA04T1", + "port": "Ethernet1" + } + }, + "DEVICE_NEIGHBOR_METADATA": { + "ARISTA01T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.123", + "type": "LeafRouter" + }, + "ARISTA02T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.101", + "type": "LeafRouter" + }, + "ARISTA03T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.220", + "type": "LeafRouter" + }, + "ARISTA04T1": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.39", + "type": "LeafRouter" + } + }, + "DHCP_SERVER": { + "192.0.0.1": {}, + "192.0.0.2": {}, + "192.0.0.3": {}, + "192.0.0.4": {} + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "disabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "lldp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "status": "enabled" + } + }, + "LOOPBACK_INTERFACE": { + "Loopback0": {}, + "Loopback0|10.1.0.32/32": {}, + "Loopback0|FC00:1::32/128": {} + }, + "MGMT_INTERFACE": { + "eth0|192.168.122.45/24": { + "gwaddr": "192.168.122.1" + }, + "eth0|FC00:2::32/64": { + "gwaddr": "fc00:2::1" + } + }, + "MGMT_PORT": { + "eth0": { + "admin_status": "up", + "alias": "eth0" + } + }, + "NTP_SERVER": { + "10.0.0.1": {}, + "10.0.0.2": {} + }, + "PORT": { + "Ethernet0": { + "alias": "Ethernet0", + "description": "Ethernet0", + "fec": "rs", + "index": "0", + "lanes": "9,8,11,10", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet1": { + "admin_status": "up", + "alias": "Ethernet1", + "description": "Servers0:eth0", + "fec": "rs", + "index": "1", + "lanes": "1,0,3,2", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet2": { + "admin_status": "up", + "alias": "Ethernet2", + "description": "Servers1:eth0", + "fec": "rs", + "index": "2", + "lanes": "256,257,258,259", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet3": { + "admin_status": "up", + "alias": "Ethernet3", + "description": "Servers2:eth0", + "fec": "rs", + "index": "3", + "lanes": "264,265,266,267", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "Ethernet4", + "description": "Servers3:eth0", + "fec": "rs", + "index": "4", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet5": { + "admin_status": "up", + "alias": "Ethernet5", + "description": "Servers4:eth0", + "fec": "rs", + "index": "5", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet6": { + "admin_status": "up", + "alias": "Ethernet6", + "description": "Servers5:eth0", + "fec": "rs", + "index": "6", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet7": { + "admin_status": "up", + "alias": "Ethernet7", + "description": "Servers6:eth0", + "fec": "rs", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "Ethernet8", + "description": "Servers7:eth0", + "fec": "rs", + "index": "8", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet9": { + "admin_status": "up", + "alias": "Ethernet9", + "description": "Servers8:eth0", + "fec": "rs", + "index": "9", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet10": { + "admin_status": "up", + "alias": "Ethernet10", + "description": "Servers9:eth0", + "fec": "rs", + "index": "10", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet11": { + "admin_status": "up", + "alias": "Ethernet11", + "description": "Servers10:eth0", + "fec": "rs", + "index": "11", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "Ethernet12", + "description": "Servers11:eth0", + "fec": "rs", + "index": "12", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet13": { + "admin_status": "up", + "alias": "Ethernet13", + "description": "Servers12:eth0", + "fec": "rs", + "index": "13", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet14": { + "admin_status": "up", + "alias": "Ethernet14", + "description": "Servers13:eth0", + "fec": "rs", + "index": "14", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet15": { + "admin_status": "up", + "alias": "Ethernet15", + "description": "Servers14:eth0", + "fec": "rs", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "Ethernet16", + "description": "Servers15:eth0", + "fec": "rs", + "index": "16", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet17": { + "admin_status": "up", + "alias": "Ethernet17", + "description": "Servers16:eth0", + "fec": "rs", + "index": "17", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet18": { + "admin_status": "up", + "alias": "Ethernet18", + "description": "Servers17:eth0", + "fec": "rs", + "index": "18", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet19": { + "admin_status": "up", + "alias": "Ethernet19", + "description": "Servers18:eth0", + "fec": "rs", + "index": "19", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "Ethernet20", + "description": "Servers19:eth0", + "fec": "rs", + "index": "20", + "lanes": "776,777,778,779", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet21": { + "admin_status": "up", + "alias": "Ethernet21", + "description": "Servers20:eth0", + "fec": "rs", + "index": "21", + "lanes": "768,769,770,771", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet22": { + "admin_status": "up", + "alias": "Ethernet22", + "description": "Servers21:eth0", + "fec": "rs", + "index": "22", + "lanes": "520,521,522,523", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet23": { + "admin_status": "up", + "alias": "Ethernet23", + "description": "Servers22:eth0", + "fec": "rs", + "index": "23", + "lanes": "512,513,514,515", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "Ethernet24", + "description": "Servers23:eth0", + "fec": "rs", + "index": "24", + "lanes": "1552,1553", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet25": { + "alias": "Ethernet25", + "description": "Ethernet25", + "fec": "rs", + "index": "25", + "lanes": "1808,1809", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet26": { + "alias": "Ethernet26", + "description": "Ethernet26", + "fec": "rs", + "index": "26", + "lanes": "1040,1041", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet27": { + "alias": "Ethernet27", + "description": "Ethernet27", + "fec": "rs", + "index": "27", + "lanes": "1296,1297", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "Ethernet28", + "description": "ARISTA01T1:Ethernet1", + "fec": "rs", + "index": "28", + "lanes": "528,529", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet29": { + "admin_status": "up", + "alias": "Ethernet29", + "description": "ARISTA02T1:Ethernet1", + "fec": "rs", + "index": "29", + "lanes": "784,785", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet30": { + "admin_status": "up", + "alias": "Ethernet30", + "description": "ARISTA03T1:Ethernet1", + "fec": "rs", + "index": "30", + "lanes": "16,17", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet31": { + "admin_status": "up", + "alias": "Ethernet31", + "description": "ARISTA04T1:Ethernet1", + "fec": "rs", + "index": "31", + "lanes": "272,273", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet32": { + "alias": "Ethernet32", + "description": "Ethernet32", + "fec": "rs", + "index": "32", + "lanes": "2576,2577", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet33": { + "alias": "Ethernet33", + "description": "Ethernet33", + "fec": "rs", + "index": "33", + "lanes": "2832,2833", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet34": { + "alias": "Ethernet34", + "description": "Ethernet34", + "fec": "rs", + "index": "34", + "lanes": "2064,2065", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet35": { + "alias": "Ethernet35", + "description": "Ethernet35", + "fec": "rs", + "index": "35", + "lanes": "2320,2321", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + } + }, + "PORTCHANNEL": { + "PortChannel0001": { + "admin_status": "up", + "members": [ + "Ethernet28" + ], + "min_links": "1", + "mtu": "9100" + }, + "PortChannel0002": { + "admin_status": "up", + "members": [ + "Ethernet29" + ], + "min_links": "1", + "mtu": "9100" + }, + "PortChannel0003": { + "admin_status": "up", + "members": [ + "Ethernet30" + ], + "min_links": "1", + "mtu": "9100" + }, + "PortChannel0004": { + "admin_status": "up", + "members": [ + "Ethernet31" + ], + "min_links": "1", + "mtu": "9100" + } + }, + "PORTCHANNEL_INTERFACE": { + "PortChannel0001": {}, + "PortChannel0002": {}, + "PortChannel0003": {}, + "PortChannel0004": {}, + "PortChannel0001|10.0.0.56/31": {}, + "PortChannel0001|FC00::71/126": {}, + "PortChannel0002|10.0.0.58/31": {}, + "PortChannel0002|FC00::75/126": {}, + "PortChannel0003|10.0.0.60/31": {}, + "PortChannel0003|FC00::79/126": {}, + "PortChannel0004|10.0.0.62/31": {}, + "PortChannel0004|FC00::7D/126": {} + }, + "PORTCHANNEL_MEMBER": { + "PortChannel0001|Ethernet28": {}, + "PortChannel0002|Ethernet29": {}, + "PortChannel0003|Ethernet30": {}, + "PortChannel0004|Ethernet31": {} + }, + "SYSLOG_SERVER": { + "10.0.0.5": {}, + "10.0.0.6": {} + }, + "TACPLUS_SERVER": { + "10.0.0.8": { + "priority": "1", + "tcp_port": "49" + }, + "10.0.0.9": { + "priority": "1", + "tcp_port": "49" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_1_0_4" + } + }, + "VLAN": { + "Vlan1000": { + "dhcp_servers": [ + "192.0.0.1", + "192.0.0.2", + "192.0.0.3", + "192.0.0.4" + ], + "vlanid": "1000" + } + }, + "VLAN_INTERFACE": { + "Vlan1000": {}, + "Vlan1000|192.168.0.1/21": {}, + "Vlan1000|fc02:1000::1/64": {} + }, + "VLAN_MEMBER": { + "Vlan1000|Ethernet1": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet2": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet3": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet4": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet5": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet6": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet7": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet8": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet9": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet10": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet11": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet12": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet13": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet14": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet15": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet16": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet17": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet18": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet19": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet20": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet21": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet22": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet23": { + "tagging_mode": "untagged" + }, + "Vlan1000|Ethernet24": { + "tagging_mode": "untagged" + } + } +} diff --git a/infra/sonic_t0_topo/password.txt b/infra/sonic_t0_topo/password.txt new file mode 100755 index 00000000000..9f358a4adde --- /dev/null +++ b/infra/sonic_t0_topo/password.txt @@ -0,0 +1 @@ +123456 diff --git a/infra/sonic_t0_topo/t0-leaf.j2 b/infra/sonic_t0_topo/t0-leaf.j2 new file mode 100644 index 00000000000..87c60cec43d --- /dev/null +++ b/infra/sonic_t0_topo/t0-leaf.j2 @@ -0,0 +1,136 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +aaa admin secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/infra/sonic_t0_topo/testbed-churchill-mono-t0.yaml b/infra/sonic_t0_topo/testbed-churchill-mono-t0.yaml new file mode 100644 index 00000000000..10f01b6218b --- /dev/null +++ b/infra/sonic_t0_topo/testbed-churchill-mono-t0.yaml @@ -0,0 +1,382 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - churchill-mono-01 + vars: + hwsku: Cisco-8101-O32 + iface_speed: '400000' +devices: + churchill-mono-01: + alias: null + ansible: + ansible_host: 192.168.122.62 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8101-O32 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + docker-ptf: + device_type: blank + hwsku: null + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.75/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf churchill mono + dut: churchill-mono-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-churchill-mono + ptf_ip: 192.168.122.75/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.75/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: churchillMonotopologyTestbed + name: testbed-churchill-mono-t0 + type: Physical +topology: + churchill-mono-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet128: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet136: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet144: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet152: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet176: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet192: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet208: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet216: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet232: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet240: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet248: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 172.29.94.42 + vms_1: + VM0100: + ansible_host: 192.168.122.66 + VM0101: + ansible_host: 192.168.122.67 + VM0102: + ansible_host: 192.168.122.166 + VM0103: + ansible_host: 192.168.122.218 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_t0_topo/testbed-crocodile-t0.yaml b/infra/sonic_t0_topo/testbed-crocodile-t0.yaml new file mode 100644 index 00000000000..f487feac249 --- /dev/null +++ b/infra/sonic_t0_topo/testbed-crocodile-t0.yaml @@ -0,0 +1,382 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - crocodile-01 + vars: + hwsku: Cisco-8111-O64 + iface_speed: '400000' +devices: + crocodile-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8111-O64 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf crocodile + dut: crocodile-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-crocodile + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: crocodiletopologyTestbed + name: testbed-crocodile-t0 + type: Physical +topology: + crocodile-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet128: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet136: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet144: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet152: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet176: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet192: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet208: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet216: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet232: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet240: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet248: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_t0_topo/testbed-mth32-t0.yaml b/infra/sonic_t0_topo/testbed-mth32-t0.yaml new file mode 100644 index 00000000000..8ab2a9b6449 --- /dev/null +++ b/infra/sonic_t0_topo/testbed-mth32-t0.yaml @@ -0,0 +1,382 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: Cisco-8102-C32 + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t0 + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_t0_topo/testbed-mth64-t0-64.yaml b/infra/sonic_t0_topo/testbed-mth64-t0-64.yaml new file mode 100644 index 00000000000..72eb617ef2c --- /dev/null +++ b/infra/sonic_t0_topo/testbed-mth64-t0-64.yaml @@ -0,0 +1,574 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: Cisco-8102-C64 + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8102-C64 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0-64 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t0 + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet40: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet80: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet120: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet128: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/32 + VlanID: 2032 + VlanMode: Access + Ethernet132: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/33 + VlanID: 2033 + VlanMode: Access + Ethernet136: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/34 + VlanID: 2034 + VlanMode: Access + Ethernet140: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/35 + VlanID: 2035 + VlanMode: Access + Ethernet144: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/36 + VlanID: 2036 + VlanMode: Access + Ethernet148: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/37 + VlanID: 2037 + VlanMode: Access + Ethernet152: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/38 + VlanID: 2038 + VlanMode: Access + Ethernet156: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/39 + VlanID: 2039 + VlanMode: Access + Ethernet160: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/40 + VlanID: 2040 + VlanMode: Access + Ethernet164: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/41 + VlanID: 2041 + VlanMode: Access + Ethernet168: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/42 + VlanID: 2042 + VlanMode: Access + Ethernet172: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/43 + VlanID: 2043 + VlanMode: Access + Ethernet176: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/44 + VlanID: 2044 + VlanMode: Access + Ethernet180: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/45 + VlanID: 2045 + VlanMode: Access + Ethernet184: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/46 + VlanID: 2046 + VlanMode: Access + Ethernet188: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/47 + VlanID: 2047 + VlanMode: Access + Ethernet192: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/48 + VlanID: 2048 + VlanMode: Access + Ethernet196: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/49 + VlanID: 2049 + VlanMode: Access + Ethernet200: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/50 + VlanID: 2050 + VlanMode: Access + Ethernet204: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/51 + VlanID: 2051 + VlanMode: Access + Ethernet208: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/52 + VlanID: 2052 + VlanMode: Access + Ethernet212: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/53 + VlanID: 2053 + VlanMode: Access + Ethernet216: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/54 + VlanID: 2054 + VlanMode: Access + Ethernet220: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/55 + VlanID: 2055 + VlanMode: Access + Ethernet224: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/56 + VlanID: 2056 + VlanMode: Access + Ethernet228: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/57 + VlanID: 2057 + VlanMode: Access + Ethernet232: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/58 + VlanID: 2058 + VlanMode: Access + Ethernet236: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/59 + VlanID: 2059 + VlanMode: Access + Ethernet240: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/60 + VlanID: 2060 + VlanMode: Access + Ethernet244: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/61 + VlanID: 2061 + VlanMode: Access + Ethernet248: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/62 + VlanID: 2062 + VlanMode: Access + Ethernet252: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/63 + VlanID: 2063 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_t0_topo/testbed-sherman-t0.yaml b/infra/sonic_t0_topo/testbed-sherman-t0.yaml new file mode 100644 index 00000000000..f1fae618dae --- /dev/null +++ b/infra/sonic_t0_topo/testbed-sherman-t0.yaml @@ -0,0 +1,365 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sherman-01 + vars: + hwsku: 36x100Gb + iface_speed: '100000' +devices: + sherman-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 36x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Sherman + dut: sherman-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sherman + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t0 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: ShermantopologyTestbed + name: testbed-sherman-t0 + type: Physical +topology: + sherman-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_t0_topo/testbed_add_vm_topology.yml b/infra/sonic_t0_topo/testbed_add_vm_topology.yml new file mode 100755 index 00000000000..8aae3bc35a0 --- /dev/null +++ b/infra/sonic_t0_topo/testbed_add_vm_topology.yml @@ -0,0 +1,60 @@ +# This Playbook add a topology to a server +# +# Topologies are defined inside of vars/ directorie in files vars/topo_{{ topology_name}}.yml +# This file contains three structures: +# - topology +# - configuration property +# - configuration +# +# topology key contains a dictionary of hostnames with 'vm_offset' and 'vlans' keys in it. +# 'vm_offset' is used to map current hostname vm_set VM to server VM (like ARISTA01T0 -> VM0300). +# This offset is used on VM_base +# 'vlans' is a list of vlan offsets which helps us to calculate vlan numbers which will be connected to Eth1/1..Eth1/8 interfaces. +# These offsets are used with vlan_base +# +# Every topology should have a name to distinct one topology from another on the server +# Every topology contains a ptf container which will be used as placeholder for the injected interfaces from VMs, or direct connections to PTF host +# +# To add a topology please use following command +# ANSIBLE_SCP_IF_SSH=y ansible-playbook -i veos testbed_add_vm_topology.yml --vault-password-file=~/.password -l server_3 -e vm_set_name=first -e dut_name=str-msn2700-01 -e VM_base=VM0300 -e ptf_ip=10.255.0.255/23 -e topo=t0 -e ptf_imagename="docker_ptf" +# +# Parameters +# -l server_3 - this playbook have to be limited to run only on one server +# -e vm_set_name=first - the name of vm_set +# -e dut_name=str-msn2700-01 - the name of target dut +# -e VM_base=VM0300 - the VM name which is used to as base to calculate VM name for this set +# -e ptf_ip=10.255.0.255/23 - the ip address and prefix of ptf container mgmt interface +# -e topo=t0 - the name of removed topo +# -e ptf_imagename=docker-ptf - name of a docker-image which will be used for the ptf docker container +# -e vm_type=veos|ceos + +- hosts: servers:&eos + gather_facts: no + pre_tasks: + - name: Check that variable topo is defined + fail: msg="Define topo variable with -e topo=something" + when: topo is not defined + + - name: Check if it is a known topology + fail: msg="Unknown topology {{ topo }}" + when: topo not in topologies + + - name: Check that variable VM_base is defined + fail: msg="Define VM_base variable with -e VM_base=something" + when: VM_base is not defined + + - name: Load topo variables + include_vars: "vars/topo_{{ topo }}.yml" + + - name: Find current server group + set_fact: current_server={{ group_names | extract_by_prefix('server_') }} + + - name: Extract VM names from the inventory + set_fact: VM_hosts={{ groups[current_server] | filter_by_prefix('VM') }} + + - name: Generate vm list of target VMs + set_fact: VM_targets={{ VM_hosts | filter_vm_targets(topology['VMs'], VM_base) }} + when: topology['VMs'] is defined + + roles: + - { role: eos, when: topology.VMs is defined and inventory_hostname in VM_targets } # role eos will be executed in any case, and when will evaluate with every task diff --git a/infra/sonic_t0_topo/veos.yml b/infra/sonic_t0_topo/veos.yml new file mode 100755 index 00000000000..a16791eada5 --- /dev/null +++ b/infra/sonic_t0_topo/veos.yml @@ -0,0 +1,26 @@ +- name: Set ansible login user name and password + set_fact: ansible_user="root" ansible_password={{ eos_root_password }} + +- name: Set EOS backplane port name + set_fact: bp_ifname="Ethernet9" + +- name: copy rc.eos + copy: src=rc.eos + dest=/mnt/flash/rc.eos + when: hostname in configuration + notify: + - Update VM state + +- name: copy boot-config + copy: src=boot-config + dest=/mnt/flash/boot-config + when: hostname in configuration + notify: + - Update VM state + +- name: update startup-config + template: src="{{ topo }}-{{ props.swrole }}.j2" + dest=/mnt/flash/startup-config + when: hostname in configuration + notify: + - Update VM state diff --git a/infra/sonic_t1_topo/config_db.json b/infra/sonic_t1_topo/config_db.json new file mode 100755 index 00000000000..22c1c18cc1c --- /dev/null +++ b/infra/sonic_t1_topo/config_db.json @@ -0,0 +1,1716 @@ +{ + "BGP_NEIGHBOR": { + "10.0.0.1": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.0", + "name": "ARISTA01T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.3": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.2", + "name": "ARISTA02T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.5": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.4", + "name": "ARISTA03T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.7": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.6", + "name": "ARISTA04T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.9": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.8", + "name": "ARISTA05T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.11": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.10", + "name": "ARISTA06T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.13": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.12", + "name": "ARISTA07T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.15": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.14", + "name": "ARISTA08T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.17": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.16", + "name": "ARISTA09T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.19": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.18", + "name": "ARISTA10T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.21": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.20", + "name": "ARISTA11T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.23": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.22", + "name": "ARISTA12T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.25": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.24", + "name": "ARISTA13T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.27": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.26", + "name": "ARISTA14T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.29": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.28", + "name": "ARISTA15T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.31": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.30", + "name": "ARISTA16T2", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.33": { + "admin_status": "up", + "asn": "64001", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.32", + "name": "ARISTA01T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.35": { + "admin_status": "up", + "asn": "64002", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.34", + "name": "ARISTA02T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.37": { + "admin_status": "up", + "asn": "64003", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.36", + "name": "ARISTA03T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.39": { + "admin_status": "up", + "asn": "64004", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.38", + "name": "ARISTA04T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.41": { + "admin_status": "up", + "asn": "64005", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.40", + "name": "ARISTA05T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.43": { + "admin_status": "up", + "asn": "64006", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.42", + "name": "ARISTA06T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.45": { + "admin_status": "up", + "asn": "64007", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.44", + "name": "ARISTA07T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.47": { + "admin_status": "up", + "asn": "64008", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.46", + "name": "ARISTA08T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.49": { + "admin_status": "up", + "asn": "64009", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.48", + "name": "ARISTA09T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.51": { + "admin_status": "up", + "asn": "64010", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.50", + "name": "ARISTA10T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.53": { + "admin_status": "up", + "asn": "64011", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.52", + "name": "ARISTA11T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.55": { + "admin_status": "up", + "asn": "64012", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.54", + "name": "ARISTA12T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.57": { + "admin_status": "up", + "asn": "64013", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.56", + "name": "ARISTA13T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.59": { + "admin_status": "up", + "asn": "64014", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.58", + "name": "ARISTA14T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.61": { + "admin_status": "up", + "asn": "64015", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.60", + "name": "ARISTA15T0", + "nhopself": "0", + "rrclient": "0" + }, + "10.0.0.63": { + "admin_status": "up", + "asn": "64016", + "holdtime": "10", + "keepalive": "3", + "local_addr": "10.0.0.62", + "name": "ARISTA16T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::1a": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::19", + "name": "ARISTA07T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::1e": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::1d", + "name": "ARISTA08T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::2": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::1", + "name": "ARISTA01T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::2a": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::29", + "name": "ARISTA11T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::2e": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::2d", + "name": "ARISTA12T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::3a": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::39", + "name": "ARISTA15T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::3e": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::3d", + "name": "ARISTA16T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::4a": { + "admin_status": "up", + "asn": "64003", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::49", + "name": "ARISTA03T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::4e": { + "admin_status": "up", + "asn": "64004", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::4d", + "name": "ARISTA04T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::5a": { + "admin_status": "up", + "asn": "64007", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::59", + "name": "ARISTA07T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::5e": { + "admin_status": "up", + "asn": "64008", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::5d", + "name": "ARISTA08T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::6": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::5", + "name": "ARISTA02T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::6a": { + "admin_status": "up", + "asn": "64011", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::69", + "name": "ARISTA11T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::6e": { + "admin_status": "up", + "asn": "64012", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::6d", + "name": "ARISTA12T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::7a": { + "admin_status": "up", + "asn": "64015", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::79", + "name": "ARISTA15T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::7e": { + "admin_status": "up", + "asn": "64016", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::7d", + "name": "ARISTA16T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::12": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::11", + "name": "ARISTA05T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::16": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::15", + "name": "ARISTA06T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::22": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::21", + "name": "ARISTA09T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::26": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::25", + "name": "ARISTA10T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::32": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::31", + "name": "ARISTA13T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::36": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::35", + "name": "ARISTA14T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::42": { + "admin_status": "up", + "asn": "64001", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::41", + "name": "ARISTA01T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::46": { + "admin_status": "up", + "asn": "64002", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::45", + "name": "ARISTA02T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::52": { + "admin_status": "up", + "asn": "64005", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::51", + "name": "ARISTA05T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::56": { + "admin_status": "up", + "asn": "64006", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::55", + "name": "ARISTA06T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::62": { + "admin_status": "up", + "asn": "64009", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::61", + "name": "ARISTA09T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::66": { + "admin_status": "up", + "asn": "64010", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::65", + "name": "ARISTA10T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::72": { + "admin_status": "up", + "asn": "64013", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::71", + "name": "ARISTA13T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::76": { + "admin_status": "up", + "asn": "64014", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::75", + "name": "ARISTA14T0", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::a": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::9", + "name": "ARISTA03T2", + "nhopself": "0", + "rrclient": "0" + }, + "fc00::e": { + "admin_status": "up", + "asn": "65200", + "holdtime": "10", + "keepalive": "3", + "local_addr": "fc00::d", + "name": "ARISTA04T2", + "nhopself": "0", + "rrclient": "0" + } + }, + "BUFFER_POOL": { + "egress_pool": { + "mode": "dynamic", + "size": "67108864", + "type": "egress" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "0", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "0", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "0", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "0", + "acl_table_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "0", + "fdb_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "0", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "0", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "0", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "0", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "0", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "0", + "ipv6_route_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "0", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "0", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300" + } + }, + "DEVICE_METADATA": { + "localhost": { + "asic": "cisco-8000", + "bgp_asn": "65100", + "cloudtype": "None", + "default_bgp_status": "up", + "default_pfcwd_status": "disable", + "deployment_id": "1", + "docker_routing_config_mode": "separated", + "hostname": "sherman-01", + "hwsku": "36x100Gb", + "mac": "02:68:64:c5:72:a0", + "platform": "x86_64-8201_sys-r0", + "region": "None", + "type": "LeafRouter" + } + }, + "DEVICE_NEIGHBOR": { + "Ethernet0": { + "name": "ARISTA01T2", + "port": "Ethernet1" + }, + "Ethernet1": { + "name": "ARISTA02T2", + "port": "Ethernet1" + }, + "Ethernet2": { + "name": "ARISTA03T2", + "port": "Ethernet1" + }, + "Ethernet3": { + "name": "ARISTA04T2", + "port": "Ethernet1" + }, + "Ethernet4": { + "name": "ARISTA05T2", + "port": "Ethernet1" + }, + "Ethernet5": { + "name": "ARISTA06T2", + "port": "Ethernet1" + }, + "Ethernet6": { + "name": "ARISTA07T2", + "port": "Ethernet1" + }, + "Ethernet7": { + "name": "ARISTA08T2", + "port": "Ethernet1" + }, + "Ethernet8": { + "name": "ARISTA09T2", + "port": "Ethernet1" + }, + "Ethernet9": { + "name": "ARISTA10T2", + "port": "Ethernet1" + }, + "Ethernet10": { + "name": "ARISTA11T2", + "port": "Ethernet1" + }, + "Ethernet11": { + "name": "ARISTA12T2", + "port": "Ethernet1" + }, + "Ethernet12": { + "name": "ARISTA13T2", + "port": "Ethernet1" + }, + "Ethernet13": { + "name": "ARISTA14T2", + "port": "Ethernet1" + }, + "Ethernet14": { + "name": "ARISTA15T2", + "port": "Ethernet1" + }, + "Ethernet15": { + "name": "ARISTA16T2", + "port": "Ethernet1" + }, + "Ethernet16": { + "name": "ARISTA01T0", + "port": "Ethernet1" + }, + "Ethernet17": { + "name": "ARISTA02T0", + "port": "Ethernet1" + }, + "Ethernet18": { + "name": "ARISTA03T0", + "port": "Ethernet1" + }, + "Ethernet19": { + "name": "ARISTA04T0", + "port": "Ethernet1" + }, + "Ethernet20": { + "name": "ARISTA05T0", + "port": "Ethernet1" + }, + "Ethernet21": { + "name": "ARISTA06T0", + "port": "Ethernet1" + }, + "Ethernet22": { + "name": "ARISTA07T0", + "port": "Ethernet1" + }, + "Ethernet23": { + "name": "ARISTA08T0", + "port": "Ethernet1" + }, + "Ethernet24": { + "name": "ARISTA09T0", + "port": "Ethernet1" + }, + "Ethernet25": { + "name": "ARISTA10T0", + "port": "Ethernet1" + }, + "Ethernet26": { + "name": "ARISTA11T0", + "port": "Ethernet1" + }, + "Ethernet27": { + "name": "ARISTA12T0", + "port": "Ethernet1" + }, + "Ethernet28": { + "name": "ARISTA13T0", + "port": "Ethernet1" + }, + "Ethernet29": { + "name": "ARISTA14T0", + "port": "Ethernet1" + }, + "Ethernet30": { + "name": "ARISTA15T0", + "port": "Ethernet1" + }, + "Ethernet31": { + "name": "ARISTA16T0", + "port": "Ethernet1" + } + }, + "DEVICE_NEIGHBOR_METADATA": { + "ARISTA01T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.187", + "type": "ToRRouter" + }, + "ARISTA01T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.253", + "type": "SpineRouter" + }, + "ARISTA02T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.109", + "type": "ToRRouter" + }, + "ARISTA02T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.245", + "type": "SpineRouter" + }, + "ARISTA03T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.140", + "type": "ToRRouter" + }, + "ARISTA03T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.153", + "type": "SpineRouter" + }, + "ARISTA04T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.63", + "type": "ToRRouter" + }, + "ARISTA04T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.120", + "type": "SpineRouter" + }, + "ARISTA05T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.159", + "type": "ToRRouter" + }, + "ARISTA05T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.230", + "type": "SpineRouter" + }, + "ARISTA06T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.103", + "type": "ToRRouter" + }, + "ARISTA06T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.72", + "type": "SpineRouter" + }, + "ARISTA07T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.189", + "type": "ToRRouter" + }, + "ARISTA07T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.249", + "type": "SpineRouter" + }, + "ARISTA08T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.152", + "type": "ToRRouter" + }, + "ARISTA08T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.62", + "type": "SpineRouter" + }, + "ARISTA09T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.43", + "type": "ToRRouter" + }, + "ARISTA09T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.66", + "type": "SpineRouter" + }, + "ARISTA10T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.200", + "type": "ToRRouter" + }, + "ARISTA10T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.35", + "type": "SpineRouter" + }, + "ARISTA11T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.33", + "type": "ToRRouter" + }, + "ARISTA11T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.15", + "type": "SpineRouter" + }, + "ARISTA12T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.77", + "type": "ToRRouter" + }, + "ARISTA12T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.107", + "type": "SpineRouter" + }, + "ARISTA13T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.250", + "type": "ToRRouter" + }, + "ARISTA13T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.92", + "type": "SpineRouter" + }, + "ARISTA14T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.112", + "type": "ToRRouter" + }, + "ARISTA14T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.6", + "type": "SpineRouter" + }, + "ARISTA15T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.49", + "type": "ToRRouter" + }, + "ARISTA15T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.59", + "type": "SpineRouter" + }, + "ARISTA16T0": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.115", + "type": "ToRRouter" + }, + "ARISTA16T2": { + "hwsku": "Arista-VM", + "lo_addr": "None", + "mgmt_addr": "192.168.122.193", + "type": "SpineRouter" + } + }, + "DHCP_SERVER": { + "192.0.0.1": {}, + "192.0.0.2": {}, + "192.0.0.3": {}, + "192.0.0.4": {} + }, + "FEATURE": { + "bgp": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "database": { + "auto_restart": "disabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "lldp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "nat": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "pmon": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "radv": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "sflow": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "disabled" + }, + "snmp": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "swss": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "syncd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "teamd": { + "auto_restart": "enabled", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "has_timer": "False", + "high_mem_alert": "disabled", + "state": "enabled" + }, + "telemetry": { + "auto_restart": "enabled", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "has_timer": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "status": "enabled" + } + }, + "INTERFACE": { + "Ethernet0": {}, + "Ethernet1": {}, + "Ethernet2": {}, + "Ethernet3": {}, + "Ethernet4": {}, + "Ethernet5": {}, + "Ethernet6": {}, + "Ethernet7": {}, + "Ethernet8": {}, + "Ethernet9": {}, + "Ethernet10": {}, + "Ethernet11": {}, + "Ethernet12": {}, + "Ethernet13": {}, + "Ethernet14": {}, + "Ethernet15": {}, + "Ethernet16": {}, + "Ethernet17": {}, + "Ethernet18": {}, + "Ethernet19": {}, + "Ethernet20": {}, + "Ethernet21": {}, + "Ethernet22": {}, + "Ethernet23": {}, + "Ethernet24": {}, + "Ethernet25": {}, + "Ethernet26": {}, + "Ethernet27": {}, + "Ethernet28": {}, + "Ethernet29": {}, + "Ethernet30": {}, + "Ethernet31": {}, + "Ethernet0|10.0.0.0/31": {}, + "Ethernet0|FC00::1/126": {}, + "Ethernet1|10.0.0.2/31": {}, + "Ethernet1|FC00::5/126": {}, + "Ethernet2|10.0.0.4/31": {}, + "Ethernet2|FC00::9/126": {}, + "Ethernet3|10.0.0.6/31": {}, + "Ethernet3|FC00::D/126": {}, + "Ethernet4|10.0.0.8/31": {}, + "Ethernet4|FC00::11/126": {}, + "Ethernet5|10.0.0.10/31": {}, + "Ethernet5|FC00::15/126": {}, + "Ethernet6|10.0.0.12/31": {}, + "Ethernet6|FC00::19/126": {}, + "Ethernet7|10.0.0.14/31": {}, + "Ethernet7|FC00::1D/126": {}, + "Ethernet8|10.0.0.16/31": {}, + "Ethernet8|FC00::21/126": {}, + "Ethernet9|10.0.0.18/31": {}, + "Ethernet9|FC00::25/126": {}, + "Ethernet10|10.0.0.20/31": {}, + "Ethernet10|FC00::29/126": {}, + "Ethernet11|10.0.0.22/31": {}, + "Ethernet11|FC00::2D/126": {}, + "Ethernet12|10.0.0.24/31": {}, + "Ethernet12|FC00::31/126": {}, + "Ethernet13|10.0.0.26/31": {}, + "Ethernet13|FC00::35/126": {}, + "Ethernet14|10.0.0.28/31": {}, + "Ethernet14|FC00::39/126": {}, + "Ethernet15|10.0.0.30/31": {}, + "Ethernet15|FC00::3D/126": {}, + "Ethernet16|10.0.0.32/31": {}, + "Ethernet16|FC00::41/126": {}, + "Ethernet17|10.0.0.34/31": {}, + "Ethernet17|FC00::45/126": {}, + "Ethernet18|10.0.0.36/31": {}, + "Ethernet18|FC00::49/126": {}, + "Ethernet19|10.0.0.38/31": {}, + "Ethernet19|FC00::4D/126": {}, + "Ethernet20|10.0.0.40/31": {}, + "Ethernet20|FC00::51/126": {}, + "Ethernet21|10.0.0.42/31": {}, + "Ethernet21|FC00::55/126": {}, + "Ethernet22|10.0.0.44/31": {}, + "Ethernet22|FC00::59/126": {}, + "Ethernet23|10.0.0.46/31": {}, + "Ethernet23|FC00::5D/126": {}, + "Ethernet24|10.0.0.48/31": {}, + "Ethernet24|FC00::61/126": {}, + "Ethernet25|10.0.0.50/31": {}, + "Ethernet25|FC00::65/126": {}, + "Ethernet26|10.0.0.52/31": {}, + "Ethernet26|FC00::69/126": {}, + "Ethernet27|10.0.0.54/31": {}, + "Ethernet27|FC00::6D/126": {}, + "Ethernet28|10.0.0.56/31": {}, + "Ethernet28|FC00::71/126": {}, + "Ethernet29|10.0.0.58/31": {}, + "Ethernet29|FC00::75/126": {}, + "Ethernet30|10.0.0.60/31": {}, + "Ethernet30|FC00::79/126": {}, + "Ethernet31|10.0.0.62/31": {}, + "Ethernet31|FC00::7D/126": {} + }, + "LOOPBACK_INTERFACE": { + "Loopback0": {}, + "Loopback0|10.1.0.32/32": {}, + "Loopback0|FC00:1::32/128": {} + }, + "MGMT_INTERFACE": { + "eth0|192.168.122.122/24": { + "gwaddr": "192.168.122.1" + }, + "eth0|FC00:2::32/64": { + "gwaddr": "fc00:2::1" + } + }, + "MGMT_PORT": { + "eth0": { + "admin_status": "up", + "alias": "eth0" + } + }, + "NTP_SERVER": { + "10.0.0.1": {}, + "10.0.0.2": {} + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "Ethernet0", + "description": "ARISTA01T2:Ethernet1", + "fec": "rs", + "index": "0", + "lanes": "9,8,11,10", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet1": { + "admin_status": "up", + "alias": "Ethernet1", + "description": "ARISTA02T2:Ethernet1", + "fec": "rs", + "index": "1", + "lanes": "1,0,3,2", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet2": { + "admin_status": "up", + "alias": "Ethernet2", + "description": "ARISTA03T2:Ethernet1", + "fec": "rs", + "index": "2", + "lanes": "256,257,258,259", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet3": { + "admin_status": "up", + "alias": "Ethernet3", + "description": "ARISTA04T2:Ethernet1", + "fec": "rs", + "index": "3", + "lanes": "264,265,266,267", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "Ethernet4", + "description": "ARISTA05T2:Ethernet1", + "fec": "rs", + "index": "4", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet5": { + "admin_status": "up", + "alias": "Ethernet5", + "description": "ARISTA06T2:Ethernet1", + "fec": "rs", + "index": "5", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet6": { + "admin_status": "up", + "alias": "Ethernet6", + "description": "ARISTA07T2:Ethernet1", + "fec": "rs", + "index": "6", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet7": { + "admin_status": "up", + "alias": "Ethernet7", + "description": "ARISTA08T2:Ethernet1", + "fec": "rs", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "Ethernet8", + "description": "ARISTA09T2:Ethernet1", + "fec": "rs", + "index": "8", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet9": { + "admin_status": "up", + "alias": "Ethernet9", + "description": "ARISTA10T2:Ethernet1", + "fec": "rs", + "index": "9", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet10": { + "admin_status": "up", + "alias": "Ethernet10", + "description": "ARISTA11T2:Ethernet1", + "fec": "rs", + "index": "10", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet11": { + "admin_status": "up", + "alias": "Ethernet11", + "description": "ARISTA12T2:Ethernet1", + "fec": "rs", + "index": "11", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "Ethernet12", + "description": "ARISTA13T2:Ethernet1", + "fec": "rs", + "index": "12", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet13": { + "admin_status": "up", + "alias": "Ethernet13", + "description": "ARISTA14T2:Ethernet1", + "fec": "rs", + "index": "13", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet14": { + "admin_status": "up", + "alias": "Ethernet14", + "description": "ARISTA15T2:Ethernet1", + "fec": "rs", + "index": "14", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet15": { + "admin_status": "up", + "alias": "Ethernet15", + "description": "ARISTA16T2:Ethernet1", + "fec": "rs", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "Ethernet16", + "description": "ARISTA01T0:Ethernet1", + "fec": "rs", + "index": "16", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet17": { + "admin_status": "up", + "alias": "Ethernet17", + "description": "ARISTA02T0:Ethernet1", + "fec": "rs", + "index": "17", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet18": { + "admin_status": "up", + "alias": "Ethernet18", + "description": "ARISTA03T0:Ethernet1", + "fec": "rs", + "index": "18", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet19": { + "admin_status": "up", + "alias": "Ethernet19", + "description": "ARISTA04T0:Ethernet1", + "fec": "rs", + "index": "19", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "Ethernet20", + "description": "ARISTA05T0:Ethernet1", + "fec": "rs", + "index": "20", + "lanes": "776,777,778,779", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet21": { + "admin_status": "up", + "alias": "Ethernet21", + "description": "ARISTA06T0:Ethernet1", + "fec": "rs", + "index": "21", + "lanes": "768,769,770,771", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet22": { + "admin_status": "up", + "alias": "Ethernet22", + "description": "ARISTA07T0:Ethernet1", + "fec": "rs", + "index": "22", + "lanes": "520,521,522,523", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet23": { + "admin_status": "up", + "alias": "Ethernet23", + "description": "ARISTA08T0:Ethernet1", + "fec": "rs", + "index": "23", + "lanes": "512,513,514,515", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "Ethernet24", + "description": "ARISTA09T0:Ethernet1", + "fec": "rs", + "index": "24", + "lanes": "1552,1553", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet25": { + "admin_status": "up", + "alias": "Ethernet25", + "description": "ARISTA10T0:Ethernet1", + "fec": "rs", + "index": "25", + "lanes": "1808,1809", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet26": { + "admin_status": "up", + "alias": "Ethernet26", + "description": "ARISTA11T0:Ethernet1", + "fec": "rs", + "index": "26", + "lanes": "1040,1041", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet27": { + "admin_status": "up", + "alias": "Ethernet27", + "description": "ARISTA12T0:Ethernet1", + "fec": "rs", + "index": "27", + "lanes": "1296,1297", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "Ethernet28", + "description": "ARISTA13T0:Ethernet1", + "fec": "rs", + "index": "28", + "lanes": "528,529", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet29": { + "admin_status": "up", + "alias": "Ethernet29", + "description": "ARISTA14T0:Ethernet1", + "fec": "rs", + "index": "29", + "lanes": "784,785", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet30": { + "admin_status": "up", + "alias": "Ethernet30", + "description": "ARISTA15T0:Ethernet1", + "fec": "rs", + "index": "30", + "lanes": "16,17", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet31": { + "admin_status": "up", + "alias": "Ethernet31", + "description": "ARISTA16T0:Ethernet1", + "fec": "rs", + "index": "31", + "lanes": "272,273", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet32": { + "alias": "Ethernet32", + "description": "Ethernet32", + "fec": "rs", + "index": "32", + "lanes": "2576,2577", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet33": { + "alias": "Ethernet33", + "description": "Ethernet33", + "fec": "rs", + "index": "33", + "lanes": "2832,2833", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet34": { + "alias": "Ethernet34", + "description": "Ethernet34", + "fec": "rs", + "index": "34", + "lanes": "2064,2065", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + }, + "Ethernet35": { + "alias": "Ethernet35", + "description": "Ethernet35", + "fec": "rs", + "index": "35", + "lanes": "2320,2321", + "mtu": "9100", + "pfc_asym": "off", + "speed": "100000" + } + }, + "RESTAPI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/restapica.crt", + "client_crt_cname": "client.restapi.sonic", + "server_crt": "/etc/sonic/credentials/restapiserver.crt", + "server_key": "/etc/sonic/credentials/restapiserver.key" + }, + "config": { + "allow_insecure": "false", + "client_auth": "true", + "log_level": "trace" + } + }, + "SYSLOG_SERVER": { + "10.0.0.5": {}, + "10.0.0.6": {} + }, + "TACPLUS_SERVER": { + "10.0.0.8": { + "priority": "1", + "tcp_port": "49" + }, + "10.0.0.9": { + "priority": "1", + "tcp_port": "49" + } + }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_1_0_4" + } + } +} diff --git a/infra/sonic_t1_topo/password.txt b/infra/sonic_t1_topo/password.txt new file mode 100755 index 00000000000..9f358a4adde --- /dev/null +++ b/infra/sonic_t1_topo/password.txt @@ -0,0 +1 @@ +123456 diff --git a/infra/sonic_t1_topo/t1-28-lag-spine.j2 b/infra/sonic_t1_topo/t1-28-lag-spine.j2 new file mode 100644 index 00000000000..3e1d0f62d61 --- /dev/null +++ b/infra/sonic_t1_topo/t1-28-lag-spine.j2 @@ -0,0 +1,138 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + mtu 9214 + no switchport + no shutdown +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport + no shutdown +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/infra/sonic_t1_topo/t1-28-lag-tor.j2 b/infra/sonic_t1_topo/t1-28-lag-tor.j2 new file mode 100644 index 00000000000..be3dcc64397 --- /dev/null +++ b/infra/sonic_t1_topo/t1-28-lag-tor.j2 @@ -0,0 +1,142 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% set tornum = host['tornum'] %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH + {% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT + {% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + mtu 9214 + no switchport + no shutdown +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport + no shutdown +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! + graceful-restart restart-time {{ bgp_gr_timer }} + graceful-restart + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/infra/sonic_t1_topo/t1-64-lag-spine.j2 b/infra/sonic_t1_topo/t1-64-lag-spine.j2 new file mode 100644 index 00000000000..603bfe92cfe --- /dev/null +++ b/infra/sonic_t1_topo/t1-64-lag-spine.j2 @@ -0,0 +1,138 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +aaa admin secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport + no shutdown +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport + no shutdown +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/infra/sonic_t1_topo/t1-64-lag-tor.j2 b/infra/sonic_t1_topo/t1-64-lag-tor.j2 new file mode 100644 index 00000000000..e944eb712b4 --- /dev/null +++ b/infra/sonic_t1_topo/t1-64-lag-tor.j2 @@ -0,0 +1,142 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% set tornum = host['tornum'] %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +aaa admin secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH + {% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT + {% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport + no shutdown +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport + no shutdown +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! + graceful-restart restart-time {{ bgp_gr_timer }} + graceful-restart + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/infra/sonic_t1_topo/t1-spine.j2 b/infra/sonic_t1_topo/t1-spine.j2 new file mode 100755 index 00000000000..06cf11add7d --- /dev/null +++ b/infra/sonic_t1_topo/t1-spine.j2 @@ -0,0 +1,138 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +aaa admin secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport + no shutdown +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport + no shutdown +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end \ No newline at end of file diff --git a/infra/sonic_t1_topo/t1-tor.j2 b/infra/sonic_t1_topo/t1-tor.j2 new file mode 100755 index 00000000000..4f9a61aa199 --- /dev/null +++ b/infra/sonic_t1_topo/t1-tor.j2 @@ -0,0 +1,134 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +aaa admin secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport + no shutdown +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport + no shutdown +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! + graceful-restart restart-time {{ bgp_gr_timer }} + graceful-restart + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end \ No newline at end of file diff --git a/infra/sonic_t1_topo/testbed-churchill-mono-t1.yaml b/infra/sonic_t1_topo/testbed-churchill-mono-t1.yaml new file mode 100644 index 00000000000..cef5deca3c3 --- /dev/null +++ b/infra/sonic_t1_topo/testbed-churchill-mono-t1.yaml @@ -0,0 +1,466 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - churchill-mono-01 + vars: + hwsku: Cisco-8102-C32 + iface_speed: '400000' +devices: + churchill-mono-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8101-O32 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Churchill Mono + dut: churchill-mono-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-churchill-mono + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: churchillMonotopologyTestbed + name: testbed-churchill-mono-t1 + type: Physical +topology: + churchill-mono-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet128: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet136: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet144: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet152: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet176: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet192: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet208: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet216: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet232: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet240: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet248: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 + VM0121: + ansible_host: 192.168.122.214 + VM0122: + ansible_host: 192.168.122.27 + VM0123: + ansible_host: 192.168.122.210 + VM0124: + ansible_host: 192.168.122.23 + VM0125: + ansible_host: 192.168.122.167 + VM0126: + ansible_host: 192.168.122.249 + VM0127: + ansible_host: 192.168.122.87 + VM0128: + ansible_host: 192.168.122.227 + VM0129: + ansible_host: 192.168.122.135 + VM0130: + ansible_host: 192.168.122.209 + VM0131: + ansible_host: 192.168.122.110 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/sonic_t1_topo/testbed-mth32-t1-28-lag.yaml b/infra/sonic_t1_topo/testbed-mth32-t1-28-lag.yaml new file mode 100644 index 00000000000..a9b5c73b776 --- /dev/null +++ b/infra/sonic_t1_topo/testbed-mth32-t1-28-lag.yaml @@ -0,0 +1,396 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: 32x100Gb + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + + +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1-28-lag + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t1-28-lag + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet2 + VlanID: 1682 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet2 + VlanID: 1684 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet2 + VlanID: 1686 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet2 + VlanID: 1688 + VlanMode: Access + Ethernet34: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet36: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access + Ethernet37: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet38: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet39: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet42: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet44: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet45: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet46: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet47: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet50: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet52: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet53: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet54: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet55: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet58: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet60: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet61: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet62: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet63: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-28-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 diff --git a/infra/sonic_t1_topo/testbed-mth32-t1-lag-dash-4.yaml b/infra/sonic_t1_topo/testbed-mth32-t1-lag-dash-4.yaml new file mode 100644 index 00000000000..968396b9a1a --- /dev/null +++ b/infra/sonic_t1_topo/testbed-mth32-t1-lag-dash-4.yaml @@ -0,0 +1,376 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: 32x100Gb + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + + +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1-lag-dash-4 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t1-lag-dash-4 + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet2 + VlanID: 1682 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet2 + VlanID: 1684 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet2 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet2 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-lag-dash-4 + - t1-lag-dash-4 + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 \ No newline at end of file diff --git a/infra/sonic_t1_topo/testbed-mth32-t1.yaml b/infra/sonic_t1_topo/testbed-mth32-t1.yaml new file mode 100644 index 00000000000..b8edc899e64 --- /dev/null +++ b/infra/sonic_t1_topo/testbed-mth32-t1.yaml @@ -0,0 +1,466 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: Cisco-8102-C32 + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t1 + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 + VM0121: + ansible_host: 192.168.122.214 + VM0122: + ansible_host: 192.168.122.27 + VM0123: + ansible_host: 192.168.122.210 + VM0124: + ansible_host: 192.168.122.23 + VM0125: + ansible_host: 192.168.122.167 + VM0126: + ansible_host: 192.168.122.249 + VM0127: + ansible_host: 192.168.122.87 + VM0128: + ansible_host: 192.168.122.227 + VM0129: + ansible_host: 192.168.122.135 + VM0130: + ansible_host: 192.168.122.209 + VM0131: + ansible_host: 192.168.122.110 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/sonic_t1_topo/testbed-mth64-t1-64-lag.yaml b/infra/sonic_t1_topo/testbed-mth64-t1-64-lag.yaml new file mode 100644 index 00000000000..3bedee060d4 --- /dev/null +++ b/infra/sonic_t1_topo/testbed-mth64-t1-64-lag.yaml @@ -0,0 +1,637 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: Cisco-8102-C64 + iface_speed: '100000' + +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8102-C64 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + + +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1-64-lag + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t1-64-lag + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet40: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet80: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet120: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet128: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/32 + VlanID: 2032 + VlanMode: Access + Ethernet132: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/33 + VlanID: 2033 + VlanMode: Access + Ethernet136: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/34 + VlanID: 2034 + VlanMode: Access + Ethernet140: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/35 + VlanID: 2035 + VlanMode: Access + Ethernet144: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/36 + VlanID: 2036 + VlanMode: Access + Ethernet148: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/37 + VlanID: 2037 + VlanMode: Access + Ethernet152: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/38 + VlanID: 2038 + VlanMode: Access + Ethernet156: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/39 + VlanID: 2039 + VlanMode: Access + Ethernet160: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/40 + VlanID: 2040 + VlanMode: Access + Ethernet164: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/41 + VlanID: 2041 + VlanMode: Access + Ethernet168: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/42 + VlanID: 2042 + VlanMode: Access + Ethernet172: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/43 + VlanID: 2043 + VlanMode: Access + Ethernet176: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/44 + VlanID: 2044 + VlanMode: Access + Ethernet180: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/45 + VlanID: 2045 + VlanMode: Access + Ethernet184: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/46 + VlanID: 2046 + VlanMode: Access + Ethernet188: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/47 + VlanID: 2047 + VlanMode: Access + Ethernet192: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/48 + VlanID: 2048 + VlanMode: Access + Ethernet196: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/49 + VlanID: 2049 + VlanMode: Access + Ethernet200: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/50 + VlanID: 2050 + VlanMode: Access + Ethernet204: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/51 + VlanID: 2051 + VlanMode: Access + Ethernet208: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/52 + VlanID: 2052 + VlanMode: Access + Ethernet212: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/53 + VlanID: 2053 + VlanMode: Access + Ethernet216: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/54 + VlanID: 2054 + VlanMode: Access + Ethernet220: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/55 + VlanID: 2055 + VlanMode: Access + Ethernet224: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/56 + VlanID: 2056 + VlanMode: Access + Ethernet228: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/57 + VlanID: 2057 + VlanMode: Access + Ethernet232: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/58 + VlanID: 2058 + VlanMode: Access + Ethernet236: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/59 + VlanID: 2059 + VlanMode: Access + Ethernet240: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/60 + VlanID: 2060 + VlanMode: Access + Ethernet244: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/61 + VlanID: 2061 + VlanMode: Access + Ethernet248: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/62 + VlanID: 2062 + VlanMode: Access + Ethernet252: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/63 + VlanID: 2063 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 + VM0121: + ansible_host: 192.168.122.214 + VM0122: + ansible_host: 192.168.122.27 + VM0123: + ansible_host: 192.168.122.210 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 diff --git a/infra/sonic_t1_topo/testbed-mth64-t1-64-lag_bkp.yaml b/infra/sonic_t1_topo/testbed-mth64-t1-64-lag_bkp.yaml new file mode 100644 index 00000000000..02673e954f8 --- /dev/null +++ b/infra/sonic_t1_topo/testbed-mth64-t1-64-lag_bkp.yaml @@ -0,0 +1,721 @@ +device_groups: + fanout: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: 32x100Gb + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1-64-lag + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t1-64-lag + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet32: + Bandwidth: 40000 + EndDevice: VM0132 + EndPort: Ethernet1 + VlanID: 1713 + VlanMode: Access + Ethernet33: + Bandwidth: 40000 + EndDevice: VM0133 + EndPort: Ethernet1 + VlanID: 1714 + VlanMode: Access + Ethernet34: + Bandwidth: 40000 + EndDevice: VM0134 + EndPort: Ethernet1 + VlanID: 1715 + VlanMode: Access + Ethernet35: + Bandwidth: 40000 + EndDevice: VM0135 + EndPort: Ethernet1 + VlanID: 1716 + VlanMode: Access + Ethernet36: + Bandwidth: 40000 + EndDevice: VM0136 + EndPort: Ethernet1 + VlanID: 1717 + VlanMode: Access + Ethernet37: + Bandwidth: 40000 + EndDevice: VM0137 + EndPort: Ethernet1 + VlanID: 1718 + VlanMode: Access + Ethernet38: + Bandwidth: 40000 + EndDevice: VM0138 + EndPort: Ethernet1 + VlanID: 1719 + VlanMode: Access + Ethernet39: + Bandwidth: 40000 + EndDevice: VM0139 + EndPort: Ethernet1 + VlanID: 1720 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet40: + Bandwidth: 40000 + EndDevice: VM0140 + EndPort: Ethernet1 + VlanID: 1721 + VlanMode: Access + Ethernet41: + Bandwidth: 40000 + EndDevice: VM0141 + EndPort: Ethernet1 + VlanID: 1722 + VlanMode: Access + Ethernet42: + Bandwidth: 40000 + EndDevice: VM0142 + EndPort: Ethernet1 + VlanID: 1723 + VlanMode: Access + Ethernet43: + Bandwidth: 40000 + EndDevice: VM0143 + EndPort: Ethernet1 + VlanID: 1724 + VlanMode: Access + Ethernet44: + Bandwidth: 40000 + EndDevice: VM0144 + EndPort: Ethernet1 + VlanID: 1725 + VlanMode: Access + Ethernet45: + Bandwidth: 40000 + EndDevice: VM0145 + EndPort: Ethernet1 + VlanID: 1726 + VlanMode: Access + Ethernet46: + Bandwidth: 40000 + EndDevice: VM0146 + EndPort: Ethernet1 + VlanID: 1727 + VlanMode: Access + Ethernet47: + Bandwidth: 40000 + EndDevice: VM0147 + EndPort: Ethernet1 + VlanID: 1728 + VlanMode: Access + Ethernet48: + Bandwidth: 40000 + EndDevice: VM0148 + EndPort: Ethernet1 + VlanID: 1729 + VlanMode: Access + Ethernet49: + Bandwidth: 40000 + EndDevice: VM0149 + EndPort: Ethernet1 + VlanID: 1730 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet50: + Bandwidth: 40000 + EndDevice: VM0150 + EndPort: Ethernet1 + VlanID: 1731 + VlanMode: Access + Ethernet51: + Bandwidth: 40000 + EndDevice: VM0151 + EndPort: Ethernet1 + VlanID: 1732 + VlanMode: Access + Ethernet52: + Bandwidth: 40000 + EndDevice: VM0152 + EndPort: Ethernet1 + VlanID: 1733 + VlanMode: Access + Ethernet53: + Bandwidth: 40000 + EndDevice: VM0153 + EndPort: Ethernet1 + VlanID: 1734 + VlanMode: Access + Ethernet54: + Bandwidth: 40000 + EndDevice: VM0154 + EndPort: Ethernet1 + VlanID: 1735 + VlanMode: Access + Ethernet55: + Bandwidth: 40000 + EndDevice: VM0155 + EndPort: Ethernet1 + VlanID: 1736 + VlanMode: Access + Ethernet56: + Bandwidth: 40000 + EndDevice: VM0156 + EndPort: Ethernet1 + VlanID: 1737 + VlanMode: Access + Ethernet57: + Bandwidth: 40000 + EndDevice: VM0157 + EndPort: Ethernet1 + VlanID: 1738 + VlanMode: Access + Ethernet58: + Bandwidth: 40000 + EndDevice: VM0158 + EndPort: Ethernet1 + VlanID: 1739 + VlanMode: Access + Ethernet59: + Bandwidth: 40000 + EndDevice: VM0159 + EndPort: Ethernet1 + VlanID: 1740 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet60: + Bandwidth: 40000 + EndDevice: VM0160 + EndPort: Ethernet1 + VlanID: 1741 + VlanMode: Access + Ethernet61: + Bandwidth: 40000 + EndDevice: VM0161 + EndPort: Ethernet1 + VlanID: 1742 + VlanMode: Access + Ethernet62: + Bandwidth: 40000 + EndDevice: VM0162 + EndPort: Ethernet1 + VlanID: 1743 + VlanMode: Access + Ethernet63: + Bandwidth: 40000 + EndDevice: VM0163 + EndPort: Ethernet1 + VlanID: 1744 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 + VM0121: + ansible_host: 192.168.122.214 + VM0122: + ansible_host: 192.168.122.27 + VM0123: + ansible_host: 192.168.122.210 + VM0124: + ansible_host: 192.168.122.23 + VM0125: + ansible_host: 192.168.122.167 + VM0126: + ansible_host: 192.168.122.249 + VM0127: + ansible_host: 192.168.122.87 + VM0128: + ansible_host: 192.168.122.227 + VM0129: + ansible_host: 192.168.122.135 + VM0130: + ansible_host: 192.168.122.209 + VM0131: + ansible_host: 192.168.122.110 + VM0132: + ansible_host: 192.168.122.27 + VM0133: + ansible_host: 192.168.122.210 + VM0134: + ansible_host: 192.168.122.23 + VM0135: + ansible_host: 192.168.122.167 + VM0136: + ansible_host: 192.168.122.249 + VM0137: + ansible_host: 192.168.122.87 + VM0138: + ansible_host: 192.168.122.227 + VM0139: + ansible_host: 192.168.122.135 + VM0140: + ansible_host: 192.168.122.209 + VM0141: + ansible_host: 192.168.122.110 + VM0142: + ansible_host: 192.168.122.27 + VM0143: + ansible_host: 192.168.122.210 + VM0144: + ansible_host: 192.168.122.23 + VM0145: + ansible_host: 192.168.122.167 + VM0146: + ansible_host: 192.168.122.249 + VM0147: + ansible_host: 192.168.122.87 + VM0148: + ansible_host: 192.168.122.227 + VM0149: + ansible_host: 192.168.122.135 + VM0150: + ansible_host: 192.168.122.209 + VM0151: + ansible_host: 192.168.122.110 + VM0152: + ansible_host: 192.168.122.27 + VM0153: + ansible_host: 192.168.122.210 + VM0154: + ansible_host: 192.168.122.23 + VM0155: + ansible_host: 192.168.122.167 + VM0156: + ansible_host: 192.168.122.249 + VM0157: + ansible_host: 192.168.122.87 + VM0158: + ansible_host: 192.168.122.227 + VM0159: + ansible_host: 192.168.122.135 + VM0160: + ansible_host: 192.168.122.209 + VM0161: + ansible_host: 192.168.122.110 + VM0162: + ansible_host: 192.168.122.27 + VM0163: + ansible_host: 192.168.122.210 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 + - VM0132 + - VM0133 + - VM0134 + - VM0135 + - VM0136 + - VM0137 + - VM0138 + - VM0139 + - VM0140 + - VM0141 + - VM0142 + - VM0143 + - VM0144 + - VM0145 + - VM0146 + - VM0147 + - VM0148 + - VM0149 + - VM0150 + - VM0151 + - VM0152 + - VM0153 + - VM0154 + - VM0155 + - VM0156 + - VM0157 + - VM0158 + - VM0159 + - VM0160 + - VM0161 + - VM0162 + - VM0163 \ No newline at end of file diff --git a/infra/sonic_t1_topo/testbed-sherman-t1.yaml b/infra/sonic_t1_topo/testbed-sherman-t1.yaml new file mode 100755 index 00000000000..6455f425942 --- /dev/null +++ b/infra/sonic_t1_topo/testbed-sherman-t1.yaml @@ -0,0 +1,477 @@ +device_groups: + fanout: + host: + - nexus-5 + - str-7260-11 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sherman-01 + vars: + hwsku: 36x100Gb + iface_speed: '100000' +devices: + lab-s6000-01: + alias: null + ansible: + ansible_become_pass: null + ansible_host: 10.251.0.189 + ansible_ssh_pass: null + sonicadmin_initial_password: null + sonicadmin_password: null + sonicadmin_user: null + credentials: + password: null + username: null + device_type: blank + hwsku: null + sherman-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 36x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-7260-11: + alias: null + ansible: + ansible_host: 10.251.0.234/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutRoot + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Sherman + dut: sherman-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sherman + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1 + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: ShermantopologyTestbed + name: testbed-sherman-t1 + type: Physical +topology: + sherman-01: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1682 + VlanMode: Access + Ethernet10: + Bandwidth: 40000 + EndDevice: VM0110 + EndPort: Ethernet1 + VlanID: 1691 + VlanMode: Access + Ethernet11: + Bandwidth: 40000 + EndDevice: VM0111 + EndPort: Ethernet1 + VlanID: 1692 + VlanMode: Access + Ethernet12: + Bandwidth: 40000 + EndDevice: VM0112 + EndPort: Ethernet1 + VlanID: 1693 + VlanMode: Access + Ethernet13: + Bandwidth: 40000 + EndDevice: VM0113 + EndPort: Ethernet1 + VlanID: 1694 + VlanMode: Access + Ethernet14: + Bandwidth: 40000 + EndDevice: VM0114 + EndPort: Ethernet1 + VlanID: 1695 + VlanMode: Access + Ethernet15: + Bandwidth: 40000 + EndDevice: VM0115 + EndPort: Ethernet1 + VlanID: 1696 + VlanMode: Access + Ethernet16: + Bandwidth: 40000 + EndDevice: VM0116 + EndPort: Ethernet1 + VlanID: 1697 + VlanMode: Access + Ethernet17: + Bandwidth: 40000 + EndDevice: VM0117 + EndPort: Ethernet1 + VlanID: 1698 + VlanMode: Access + Ethernet18: + Bandwidth: 40000 + EndDevice: VM0118 + EndPort: Ethernet1 + VlanID: 1699 + VlanMode: Access + Ethernet19: + Bandwidth: 40000 + EndDevice: VM0119 + EndPort: Ethernet1 + VlanID: 1700 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet20: + Bandwidth: 40000 + EndDevice: VM0120 + EndPort: Ethernet1 + VlanID: 1701 + VlanMode: Access + Ethernet21: + Bandwidth: 40000 + EndDevice: VM0121 + EndPort: Ethernet1 + VlanID: 1702 + VlanMode: Access + Ethernet22: + Bandwidth: 40000 + EndDevice: VM0122 + EndPort: Ethernet1 + VlanID: 1703 + VlanMode: Access + Ethernet23: + Bandwidth: 40000 + EndDevice: VM0123 + EndPort: Ethernet1 + VlanID: 1704 + VlanMode: Access + Ethernet24: + Bandwidth: 40000 + EndDevice: VM0124 + EndPort: Ethernet1 + VlanID: 1705 + VlanMode: Access + Ethernet25: + Bandwidth: 40000 + EndDevice: VM0125 + EndPort: Ethernet1 + VlanID: 1706 + VlanMode: Access + Ethernet26: + Bandwidth: 40000 + EndDevice: VM0126 + EndPort: Ethernet1 + VlanID: 1707 + VlanMode: Access + Ethernet27: + Bandwidth: 40000 + EndDevice: VM0127 + EndPort: Ethernet1 + VlanID: 1708 + VlanMode: Access + Ethernet28: + Bandwidth: 40000 + EndDevice: VM0128 + EndPort: Ethernet1 + VlanID: 1709 + VlanMode: Access + Ethernet29: + Bandwidth: 40000 + EndDevice: VM0129 + EndPort: Ethernet1 + VlanID: 1710 + VlanMode: Access + Ethernet3: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1684 + VlanMode: Access + Ethernet30: + Bandwidth: 40000 + EndDevice: VM0130 + EndPort: Ethernet1 + VlanID: 1711 + VlanMode: Access + Ethernet31: + Bandwidth: 40000 + EndDevice: VM0131 + EndPort: Ethernet1 + VlanID: 1712 + VlanMode: Access + Ethernet4: + Bandwidth: 40000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 40000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 40000 + EndDevice: VM0106 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 40000 + EndDevice: VM0107 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access + Ethernet8: + Bandwidth: 40000 + EndDevice: VM0108 + EndPort: Ethernet1 + VlanID: 1689 + VlanMode: Access + Ethernet9: + Bandwidth: 40000 + EndDevice: VM0109 + EndPort: Ethernet1 + VlanID: 1690 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 + VM0106: + ansible_host: 192.168.122.107 + VM0107: + ansible_host: 192.168.122.191 + VM0108: + ansible_host: 192.168.122.28 + VM0109: + ansible_host: 192.168.122.190 + VM0110: + ansible_host: 192.168.122.52 + VM0111: + ansible_host: 192.168.122.29 + VM0112: + ansible_host: 192.168.122.68 + VM0113: + ansible_host: 192.168.122.14 + VM0114: + ansible_host: 192.168.122.203 + VM0115: + ansible_host: 192.168.122.218 + VM0116: + ansible_host: 192.168.122.207 + VM0117: + ansible_host: 192.168.122.75 + VM0118: + ansible_host: 192.168.122.187 + VM0119: + ansible_host: 192.168.122.76 + VM0120: + ansible_host: 192.168.122.84 + VM0121: + ansible_host: 192.168.122.214 + VM0122: + ansible_host: 192.168.122.27 + VM0123: + ansible_host: 192.168.122.210 + VM0124: + ansible_host: 192.168.122.23 + VM0125: + ansible_host: 192.168.122.167 + VM0126: + ansible_host: 192.168.122.249 + VM0127: + ansible_host: 192.168.122.87 + VM0128: + ansible_host: 192.168.122.227 + VM0129: + ansible_host: 192.168.122.135 + VM0130: + ansible_host: 192.168.122.209 + VM0131: + ansible_host: 192.168.122.110 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/sonic_t1_topo/testbed-t1-8-lag.yaml b/infra/sonic_t1_topo/testbed-t1-8-lag.yaml new file mode 100644 index 00000000000..77f29e2c6de --- /dev/null +++ b/infra/sonic_t1_topo/testbed-t1-8-lag.yaml @@ -0,0 +1,231 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mathilda-01 + vars: + hwsku: Cisco-8102-C64 + iface_speed: '100000' +devices: + mathilda-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 32x100Gb + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + + +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf Mathilda + dut: mathilda-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-mathilda + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t1-8-lag + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: mathildatopologyTestbed + name: testbed-mathilda-t1-64-lag + type: Physical +topology: + mathilda-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: VM0100 + EndPort: Ethernet1 + VlanID: 1681 + VlanMode: Access + Ethernet1: + Bandwidth: 100000 + EndDevice: VM0100 + EndPort: Ethernet2 + VlanID: 1682 + VlanMode: Access + Ethernet2: + Bandwidth: 100000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 1683 + VlanMode: Access + Ethernet3: + Bandwidth: 100000 + EndDevice: VM0101 + EndPort: Ethernet2 + VlanID: 1684 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: VM0102 + EndPort: Ethernet1 + VlanID: 1685 + VlanMode: Access + Ethernet5: + Bandwidth: 100000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 1686 + VlanMode: Access + Ethernet6: + Bandwidth: 100000 + EndDevice: VM0104 + EndPort: Ethernet1 + VlanID: 1687 + VlanMode: Access + Ethernet7: + Bandwidth: 100000 + EndDevice: VM0105 + EndPort: Ethernet1 + VlanID: 1688 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 + VM0104: + ansible_host: 192.168.122.92 + VM0105: + ansible_host: 192.168.122.22 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-8-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 diff --git a/infra/sonic_t1_topo/testbed_add_vm_topology.yml b/infra/sonic_t1_topo/testbed_add_vm_topology.yml new file mode 100755 index 00000000000..c46ec00cc36 --- /dev/null +++ b/infra/sonic_t1_topo/testbed_add_vm_topology.yml @@ -0,0 +1,75 @@ +# This Playbook add a topology to a server +# +# Topologies are defined inside of vars/ directorie in files vars/topo_{{ topology_name}}.yml +# This file contains three structures: +# - topology +# - configuration property +# - configuration +# +# topology key contains a dictionary of hostnames with 'vm_offset' and 'vlans' keys in it. +# 'vm_offset' is used to map current hostname vm_set VM to server VM (like ARISTA01T0 -> VM0300). +# This offset is used on VM_base +# 'vlans' is a list of vlan offsets which helps us to calculate vlan numbers which will be connected to Eth1/1..Eth1/8 interfaces. +# These offsets are used with vlan_base +# +# Every topology should have a name to distinct one topology from another on the server +# Every topology contains a ptf container which will be used as placeholder for the injected interfaces from VMs, or direct connections to PTF host +# +# To add a topology please use following command +# ANSIBLE_SCP_IF_SSH=y ansible-playbook -i veos testbed_add_vm_topology.yml --vault-password-file=~/.password -l server_3 -e vm_set_name=first -e dut_name=str-msn2700-01 -e VM_base=VM0300 -e ptf_ip=10.255.0.255/23 -e topo=t0 -e ptf_imagename="docker_ptf" +# +# Parameters +# -l server_3 - this playbook have to be limited to run only on one server +# -e vm_set_name=first - the name of vm_set +# -e dut_name=str-msn2700-01 - the name of target dut +# -e VM_base=VM0300 - the VM name which is used to as base to calculate VM name for this set +# -e ptf_ip=10.255.0.255/23 - the ip address and prefix of ptf container mgmt interface +# -e topo=t0 - the name of removed topo +# -e ptf_imagename=docker-ptf - name of a docker-image which will be used for the ptf docker container +# -e vm_type=veos|ceos + +- hosts: servers:&eos + gather_facts: no + pre_tasks: + - block: + - name: Check that variable topo is defined + fail: msg="Define topo variable with -e topo=something" + when: topo is not defined + + - set_fact: + base_topo: "{{ topo.split('_') | first }}" + + - name: Require VMs as VEOS by default + set_fact: + vm_type: "veos" + when: vm_type is not defined + + - name: Check if it is a known topology + fail: msg="Unknown topology {{ topo }}" + when: base_topo not in topologies + + - name: Check that variable VM_base is defined + fail: msg="Define VM_base variable with -e VM_base=something" + when: VM_base is not defined + + - name: Load topo variables + include_vars: "vars/topo_{{ topo }}.yml" + + - name: Find current server group + set_fact: current_server={{ group_names | extract_by_prefix('server_') }} + + - name: Extract VM names from the inventory + set_fact: VM_hosts={{ groups[current_server] | filter_by_prefix('VM') | sort }} + when: VM_base|length > 0 + + - name: Generate vm list of target VMs + set_fact: VM_targets={{ VM_hosts | filter_vm_targets(topology['VMs'], VM_base) }} + when: + - topology['VMs'] is defined + - VM_base|length > 0 + run_once: True + delegate_to: localhost + + roles: + - { role: eos, when: topology.VMs is defined and VM_targets is defined and inventory_hostname in VM_targets and (vm_type == "veos" or vm_type == "ceos" ) } # If the vm_type is eos based, role eos will be executed in any case, and when will evaluate with every task + - { role: sonic, when: topology.VMs is defined and VM_targets is defined and inventory_hostname in VM_targets and (vm_type == "vsonic" ) } # If the vm_type is sonic based, role sonic will be executed in any case, and when will evaluate with every task \ No newline at end of file diff --git a/infra/sonic_t1_topo/topo_t1-28-lag.yml b/infra/sonic_t1_topo/topo_t1-28-lag.yml new file mode 100644 index 00000000000..3081c6cd01c --- /dev/null +++ b/infra/sonic_t1_topo/topo_t1-28-lag.yml @@ -0,0 +1,603 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + - 1 + vm_offset: 0 + ARISTA03T2: + vlans: + - 2 + - 3 + vm_offset: 1 + ARISTA05T2: + vlans: + - 4 + - 5 + vm_offset: 2 + ARISTA07T2: + vlans: + - 6 + - 7 + vm_offset: 3 + ARISTA09T2: + vlans: + - 8 + - 9 + vm_offset: 4 + ARISTA11T2: + vlans: + - 10 + - 11 + vm_offset: 5 + ARISTA13T2: + vlans: + - 12 + - 13 + vm_offset: 6 + ARISTA01T0: + vlans: + - 14 + vm_offset: 7 + ARISTA02T0: + vlans: + - 15 + vm_offset: 8 + ARISTA03T0: + vlans: + - 16 + vm_offset: 9 + ARISTA04T0: + vlans: + - 17 + vm_offset: 10 + ARISTA05T0: + vlans: + - 18 + vm_offset: 11 + ARISTA06T0: + vlans: + - 19 + vm_offset: 12 + ARISTA07T0: + vlans: + - 20 + vm_offset: 13 + ARISTA08T0: + vlans: + - 21 + vm_offset: 14 + ARISTA09T0: + vlans: + - 22 + vm_offset: 15 + ARISTA10T0: + vlans: + - 23 + vm_offset: 16 + ARISTA11T0: + vlans: + - 24 + vm_offset: 17 + ARISTA12T0: + vlans: + - 25 + vm_offset: 18 + ARISTA13T0: + vlans: + - 26 + vm_offset: 19 + ARISTA14T0: + vlans: + - 27 + vm_offset: 20 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + ARISTA11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + ARISTA13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 diff --git a/infra/sonic_t1_topo/topo_t1-lag-dash-4.yml b/infra/sonic_t1_topo/topo_t1-lag-dash-4.yml new file mode 100644 index 00000000000..6c805ee8cec --- /dev/null +++ b/infra/sonic_t1_topo/topo_t1-lag-dash-4.yml @@ -0,0 +1,565 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + - 1 + vm_offset: 0 + ARISTA03T2: + vlans: + - 2 + - 3 + vm_offset: 1 + ARISTA05T2: + vlans: + - 4 + - 5 + vm_offset: 2 + ARISTA07T2: + vlans: + - 6 + - 7 + vm_offset: 3 + ARISTA01T0: + vlans: + - 8 + vm_offset: 4 + ARISTA02T0: + vlans: + - 9 + vm_offset: 5 + ARISTA03T0: + vlans: + - 10 + vm_offset: 6 + ARISTA04T0: + vlans: + - 11 + vm_offset: 7 + ARISTA05T0: + vlans: + - 12 + vm_offset: 8 + ARISTA06T0: + vlans: + - 13 + vm_offset: 9 + ARISTA07T0: + vlans: + - 14 + vm_offset: 10 + ARISTA08T0: + vlans: + - 15 + vm_offset: 11 + ARISTA09T0: + vlans: + - 16 + vm_offset: 12 + ARISTA10T0: + vlans: + - 17 + vm_offset: 13 + ARISTA11T0: + vlans: + - 18 + vm_offset: 14 + ARISTA12T0: + vlans: + - 19 + vm_offset: 15 + ARISTA13T0: + vlans: + - 20 + vm_offset: 16 + ARISTA14T0: + vlans: + - 21 + vm_offset: 17 + ARISTA15T0: + vlans: + - 22 + vm_offset: 18 + ARISTA16T0: + vlans: + - 23 + vm_offset: 19 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 + + ARISTA15T0: + properties: + - common + - tor + tornum: 15 + bgp: + asn: 64015 + peers: + 65100: + - 10.0.0.60 + - FC00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100::1f/128 + Ethernet1: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::3e/64 + + ARISTA16T0: + properties: + - common + - tor + tornum: 16 + bgp: + asn: 64016 + peers: + 65100: + - 10.0.0.62 + - FC00::7D + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100::20/128 + Ethernet1: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::41/64 \ No newline at end of file diff --git a/infra/sonic_t1_topo/topo_t1.yml b/infra/sonic_t1_topo/topo_t1.yml new file mode 100755 index 00000000000..7a147af6458 --- /dev/null +++ b/infra/sonic_t1_topo/topo_t1.yml @@ -0,0 +1,847 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + vm_offset: 0 + ARISTA02T2: + vlans: + - 1 + vm_offset: 1 + ARISTA03T2: + vlans: + - 2 + vm_offset: 2 + ARISTA04T2: + vlans: + - 3 + vm_offset: 3 + ARISTA05T2: + vlans: + - 4 + vm_offset: 4 + ARISTA06T2: + vlans: + - 5 + vm_offset: 5 + ARISTA07T2: + vlans: + - 6 + vm_offset: 6 + ARISTA08T2: + vlans: + - 7 + vm_offset: 7 + ARISTA09T2: + vlans: + - 8 + vm_offset: 8 + ARISTA10T2: + vlans: + - 9 + vm_offset: 9 + ARISTA11T2: + vlans: + - 10 + vm_offset: 10 + ARISTA12T2: + vlans: + - 11 + vm_offset: 11 + ARISTA13T2: + vlans: + - 12 + vm_offset: 12 + ARISTA14T2: + vlans: + - 13 + vm_offset: 13 + ARISTA15T2: + vlans: + - 14 + vm_offset: 14 + ARISTA16T2: + vlans: + - 15 + vm_offset: 15 + ARISTA01T0: + vlans: + - 16 + vm_offset: 16 + ARISTA02T0: + vlans: + - 17 + vm_offset: 17 + ARISTA03T0: + vlans: + - 18 + vm_offset: 18 + ARISTA04T0: + vlans: + - 19 + vm_offset: 19 + ARISTA05T0: + vlans: + - 20 + vm_offset: 20 + ARISTA06T0: + vlans: + - 21 + vm_offset: 21 + ARISTA07T0: + vlans: + - 22 + vm_offset: 22 + ARISTA08T0: + vlans: + - 23 + vm_offset: 23 + ARISTA09T0: + vlans: + - 24 + vm_offset: 24 + ARISTA10T0: + vlans: + - 25 + vm_offset: 25 + ARISTA11T0: + vlans: + - 26 + vm_offset: 26 + ARISTA12T0: + vlans: + - 27 + vm_offset: 27 + ARISTA13T0: + vlans: + - 28 + vm_offset: 28 + ARISTA14T0: + vlans: + - 29 + vm_offset: 29 + ARISTA15T0: + vlans: + - 30 + vm_offset: 30 + ARISTA16T0: + vlans: + - 31 + vm_offset: 31 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + spine: + swrole: spine + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + leaf_asn_start: 62001 + tor_asn_start: 65501 + failure_rate: 0 + tor: + swrole: tor + tor_subnet_number: 5 + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA02T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.2 + - FC00::5 + interfaces: + Loopback0: + ipv4: 100.1.0.2/32 + ipv6: 2064:100::2/128 + Ethernet1: + ipv4: 10.0.0.3/31 + ipv6: fc00::6/126 + bp_interface: + ipv4: 10.10.246.2/24 + ipv6: fc0a::5/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA04T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.6 + - FC00::D + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100::4/128 + Ethernet1: + ipv4: 10.0.0.7/31 + ipv6: fc00::e/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::9/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA06T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.10 + - FC00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100::6/128 + Ethernet1: + ipv4: 10.0.0.11/31 + ipv6: fc00::16/126 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::d/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA08T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.14 + - FC00::1D + interfaces: + Loopback0: + ipv4: 100.1.0.8/32 + ipv6: 2064:100::8/128 + Ethernet1: + ipv4: 10.0.0.15/31 + ipv6: fc00::1e/126 + bp_interface: + ipv4: 10.10.246.8/24 + ipv6: fc0a::11/64 + + ARISTA09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + ARISTA10T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.18 + - FC00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100::a/128 + Ethernet1: + ipv4: 10.0.0.19/31 + ipv6: fc00::26/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::15/64 + + ARISTA11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + Ethernet1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + ARISTA12T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.22 + - FC00::2D + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100::c/128 + Ethernet1: + ipv4: 10.0.0.23/31 + ipv6: fc00::2e/126 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::19/64 + + ARISTA13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + Ethernet1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + ARISTA14T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.26 + - FC00::35 + interfaces: + Loopback0: + ipv4: 100.1.0.14/32 + ipv6: 2064:100::e/128 + Ethernet1: + ipv4: 10.0.0.27/31 + ipv6: fc00::36/126 + bp_interface: + ipv4: 10.10.246.14/24 + ipv6: fc0a::1d/64 + + ARISTA15T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.28 + - FC00::39 + interfaces: + Loopback0: + ipv4: 100.1.0.15/32 + ipv6: 2064:100::f/128 + Ethernet1: + ipv4: 10.0.0.29/31 + ipv6: fc00::3a/126 + bp_interface: + ipv4: 10.10.246.15/24 + ipv6: fc0a::1e/64 + + ARISTA16T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.30 + - FC00::3D + interfaces: + Loopback0: + ipv4: 100.1.0.16/32 + ipv6: 2064:100::10/128 + Ethernet1: + ipv4: 10.0.0.31/31 + ipv6: fc00::3e/126 + bp_interface: + ipv4: 10.10.246.16/24 + ipv6: fc0a::21/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 + + ARISTA15T0: + properties: + - common + - tor + tornum: 15 + bgp: + asn: 64015 + peers: + 65100: + - 10.0.0.60 + - FC00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100::1f/128 + Ethernet1: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::3e/64 + + ARISTA16T0: + properties: + - common + - tor + tornum: 16 + bgp: + asn: 64016 + peers: + 65100: + - 10.0.0.62 + - FC00::7D + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100::20/128 + Ethernet1: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::41/64 diff --git a/infra/sonic_t1_topo/veos.yml b/infra/sonic_t1_topo/veos.yml new file mode 100755 index 00000000000..a16791eada5 --- /dev/null +++ b/infra/sonic_t1_topo/veos.yml @@ -0,0 +1,26 @@ +- name: Set ansible login user name and password + set_fact: ansible_user="root" ansible_password={{ eos_root_password }} + +- name: Set EOS backplane port name + set_fact: bp_ifname="Ethernet9" + +- name: copy rc.eos + copy: src=rc.eos + dest=/mnt/flash/rc.eos + when: hostname in configuration + notify: + - Update VM state + +- name: copy boot-config + copy: src=boot-config + dest=/mnt/flash/boot-config + when: hostname in configuration + notify: + - Update VM state + +- name: update startup-config + template: src="{{ topo }}-{{ props.swrole }}.j2" + dest=/mnt/flash/startup-config + when: hostname in configuration + notify: + - Update VM state diff --git a/infra/sonic_t2/password.txt b/infra/sonic_t2/password.txt new file mode 100755 index 00000000000..9f358a4adde --- /dev/null +++ b/infra/sonic_t2/password.txt @@ -0,0 +1 @@ +123456 diff --git a/infra/sonic_t2/testbed-t2-2lc-min-ports-gb-lc-LL.yaml b/infra/sonic_t2/testbed-t2-2lc-min-ports-gb-lc-LL.yaml new file mode 100644 index 00000000000..c64213d8ade --- /dev/null +++ b/infra/sonic_t2/testbed-t2-2lc-min-ports-gb-lc-LL.yaml @@ -0,0 +1,324 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sfd-lc0 + - sfd-lc1 + - sfd-01 + vars: + hwsku: msft_multi_asic_vs # TODO is this the correct SKU?? + iface_speed: '400000' +devices: + sfd-lc0: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-88-LC0-36FH-O36 + card_type: Linecard + num_asics: '3' + switch_type: 'chassis-packet' + slot_num: '1' + os: sonic + sfd-lc1: + alias: null + ansible: + ansible_host: 192.168.122.49 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-88-LC0-36FH-O36 + card_type: Linecard + num_asics: '3' + switch_type: 'chassis-packet' + slot_num: '2' + os: sonic + sfd-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-RP-O + os: sonic + card_type: supervisor + num_asics: '16' + asics_present: [0,1,2,3] + switch_type: 'chassis-packet' + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: + - sfd-lc0 + - sfd-lc1 + - sfd-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sfd + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t2_2lc_min_ports-masic + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: t22lcminvirtualswitchtopologyTestbed + name: testbed-t2-2lc-min-ports-gb-lc-400G + type: Physical +# t2-min-VL / t2-min-LL: LC0 ports Ethernet32,40,64,184,200,224 (400G); LC1 ports Ethernet16,24,48,160,168,224 (400G) +topology: + sfd-lc0: + interfaces: + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 0 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 1 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 3 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 4 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 5 + VlanMode: Access + sfd-lc1: + interfaces: + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 6 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 7 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 8 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 9 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 10 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 11 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.100 + VM0101: + ansible_host: 192.168.122.101 + VM0102: + ansible_host: 192.168.122.102 + VM0103: + ansible_host: 192.168.122.103 + VM0104: + ansible_host: 192.168.122.104 + VM0105: + ansible_host: 192.168.122.105 + VM0106: + ansible_host: 192.168.122.106 + VM0107: + ansible_host: 192.168.122.107 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + - dualtor-56 + - t2-vs + - t2 + - t2_2lc_min_ports-masic + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 diff --git a/infra/sonic_t2/testbed-t2-2lc-min-ports-gb-lc-VL.yaml b/infra/sonic_t2/testbed-t2-2lc-min-ports-gb-lc-VL.yaml new file mode 100644 index 00000000000..19382ee1c87 --- /dev/null +++ b/infra/sonic_t2/testbed-t2-2lc-min-ports-gb-lc-VL.yaml @@ -0,0 +1,324 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sfd-lc0 + - sfd-lc1 + - sfd-01 + vars: + hwsku: msft_multi_asic_vs # TODO is this the correct SKU?? + iface_speed: '400000' +devices: + sfd-lc0: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-88-LC0-36FH-M-O36 + card_type: Linecard + num_asics: '3' + switch_type: 'chassis-packet' + slot_num: '1' + os: sonic + sfd-lc1: + alias: null + ansible: + ansible_host: 192.168.122.49 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-88-LC0-36FH-O36 + card_type: Linecard + num_asics: '3' + switch_type: 'chassis-packet' + slot_num: '2' + os: sonic + sfd-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-RP-O + os: sonic + card_type: supervisor + num_asics: '16' + asics_present: [0,1,2,3] + switch_type: 'chassis-packet' + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: + - sfd-lc0 + - sfd-lc1 + - sfd-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sfd + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t2_2lc_min_ports-masic + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: t22lcminvirtualswitchtopologyTestbed + name: testbed-t2-2lc-min-ports-gb-lc-400G + type: Physical +# t2-min-VL / t2-min-LL: LC0 ports Ethernet32,40,64,184,200,224 (400G); LC1 ports Ethernet16,24,48,160,168,224 (400G) +topology: + sfd-lc0: + interfaces: + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 0 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 1 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 3 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 4 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 5 + VlanMode: Access + sfd-lc1: + interfaces: + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 6 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 7 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 8 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 9 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 10 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 11 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.100 + VM0101: + ansible_host: 192.168.122.101 + VM0102: + ansible_host: 192.168.122.102 + VM0103: + ansible_host: 192.168.122.103 + VM0104: + ansible_host: 192.168.122.104 + VM0105: + ansible_host: 192.168.122.105 + VM0106: + ansible_host: 192.168.122.106 + VM0107: + ansible_host: 192.168.122.107 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + - dualtor-56 + - t2-vs + - t2 + - t2_2lc_min_ports-masic + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 diff --git a/infra/sonic_t2/testbed-t2-2lc-min-ports.yaml b/infra/sonic_t2/testbed-t2-2lc-min-ports.yaml new file mode 100644 index 00000000000..dd328bc4c15 --- /dev/null +++ b/infra/sonic_t2/testbed-t2-2lc-min-ports.yaml @@ -0,0 +1,323 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sfd-lc0 + - sfd-lc1 + - sfd-01 + vars: + hwsku: msft_multi_asic_vs # TODO is this the correct SKU?? + iface_speed: '100000' +devices: + sfd-lc0: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-LC-48H-O + card_type: Linecard + num_asics: '2' + switch_type: 'chassis-packet' + slot_num: '1' + os: sonic + sfd-lc1: + alias: null + ansible: + ansible_host: 192.168.122.49 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-LC-48H-O + card_type: Linecard + num_asics: '2' + switch_type: 'chassis-packet' + slot_num: '2' + os: sonic + sfd-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-RP-O + os: sonic + card_type: supervisor + num_asics: '16' + asics_present: [0,1] + switch_type: 'chassis-packet' + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: + - sfd-lc0 + - sfd-lc1 + - sfd-01 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sfd + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t2_2lc_min_ports-masic + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: t22lcminvirtualswitchtopologyTestbed # does this value matter? + name: testbed-t2-2lc-min-ports # does this value matter? + type: Physical +topology: + sfd-lc0: + interfaces: + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 5 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 3 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 4 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 0 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet2/5 + VlanID: 1 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2 + VlanMode: Access + sfd-lc1: + interfaces: + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 6 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 9 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 10 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 11 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 7 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 8 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.100 + VM0101: + ansible_host: 192.168.122.101 + VM0102: + ansible_host: 192.168.122.102 + VM0103: + ansible_host: 192.168.122.103 + VM0104: + ansible_host: 192.168.122.104 + VM0105: + ansible_host: 192.168.122.105 + VM0106: + ansible_host: 192.168.122.106 + VM0107: + ansible_host: 192.168.122.107 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + - dualtor-56 + - t2-vs + - t2 + - t2_2lc_min_ports-masic + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 diff --git a/infra/sonic_t2/testbed-t2-vs.yaml b/infra/sonic_t2/testbed-t2-vs.yaml new file mode 100644 index 00000000000..f93057f5fb8 --- /dev/null +++ b/infra/sonic_t2/testbed-t2-vs.yaml @@ -0,0 +1,258 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - sfd-01 + - sfd-lc0 + - sfd-lc1 + vars: + hwsku: Cisco-8102-C64 # TODO change this + iface_speed: '100000' +devices: + sfd-01: + alias: null + ansible: + ansible_host: 192.168.122.47 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-RP-O + os: sonic + sfd-lc0: + alias: null + ansible: + ansible_host: 192.168.122.48 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-LC-48H-O + os: sonic + sfd-lc1: + alias: null + ansible: + ansible_host: 192.168.122.49 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: 8800-LC-48H-O + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + docker-ptf: + device_type: blank + hwsku: + ansible: + ansible_ssh_user: root + ansible_host: 1.74.23.21/16 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + comment: Test ptf mathilda + dut: sfd-01; sfd-lc0; sfd-lc1 + group-name: sonic_cisco + ptf_image_name: docker-ptf-sfd + ptf_ip: 192.168.122.66/24 + ptf_ipv6: fc0b::1/64 + ptf: docker-ptf + server: server_1 + topo: t2-vs + vm_base: VM0100 + ansible: + ansible_ssh_user: root + ansible_host: 192.168.122.66/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + credentials: + password: root + username: root + +testbed_config: + alias: t2virtualswitchtopologyTestbed # does this value matter? + name: testbed-t2-vs # does this value matter? + type: Physical +topology: + sfd-lc0: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0100 # Are the vEOS switches automatically named in this format? If so, how? + EndPort: Ethernet1 + VlanID: 0 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0100 + EndPort: Ethernet2 + VlanID: 1 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0101 + EndPort: Ethernet1 + VlanID: 2 + VlanMode: Access + sfd-lc1: + interfaces: + Ethernet0: + Bandwidth: 40000 + EndDevice: VM0102 # Are the vEOS switches automatically named in this format? If so, how? + EndPort: Ethernet1 + VlanID: 3 + VlanMode: Access + Ethernet1: + Bandwidth: 40000 + EndDevice: VM0102 + EndPort: Ethernet2 + VlanID: 4 + VlanMode: Access + Ethernet2: + Bandwidth: 40000 + EndDevice: VM0103 + EndPort: Ethernet1 + VlanID: 5 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 192.168.122.150 + vms_1: + VM0100: + ansible_host: 192.168.122.94 + VM0101: + ansible_host: 192.168.122.228 + VM0102: + ansible_host: 192.168.122.40 + VM0103: + ansible_host: 192.168.122.188 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: # Why are these listed here? + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + - dualtor-56 + - t2-vs + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/sonic_t2/testbed_add_vm_topology.yml b/infra/sonic_t2/testbed_add_vm_topology.yml new file mode 100755 index 00000000000..8aae3bc35a0 --- /dev/null +++ b/infra/sonic_t2/testbed_add_vm_topology.yml @@ -0,0 +1,60 @@ +# This Playbook add a topology to a server +# +# Topologies are defined inside of vars/ directorie in files vars/topo_{{ topology_name}}.yml +# This file contains three structures: +# - topology +# - configuration property +# - configuration +# +# topology key contains a dictionary of hostnames with 'vm_offset' and 'vlans' keys in it. +# 'vm_offset' is used to map current hostname vm_set VM to server VM (like ARISTA01T0 -> VM0300). +# This offset is used on VM_base +# 'vlans' is a list of vlan offsets which helps us to calculate vlan numbers which will be connected to Eth1/1..Eth1/8 interfaces. +# These offsets are used with vlan_base +# +# Every topology should have a name to distinct one topology from another on the server +# Every topology contains a ptf container which will be used as placeholder for the injected interfaces from VMs, or direct connections to PTF host +# +# To add a topology please use following command +# ANSIBLE_SCP_IF_SSH=y ansible-playbook -i veos testbed_add_vm_topology.yml --vault-password-file=~/.password -l server_3 -e vm_set_name=first -e dut_name=str-msn2700-01 -e VM_base=VM0300 -e ptf_ip=10.255.0.255/23 -e topo=t0 -e ptf_imagename="docker_ptf" +# +# Parameters +# -l server_3 - this playbook have to be limited to run only on one server +# -e vm_set_name=first - the name of vm_set +# -e dut_name=str-msn2700-01 - the name of target dut +# -e VM_base=VM0300 - the VM name which is used to as base to calculate VM name for this set +# -e ptf_ip=10.255.0.255/23 - the ip address and prefix of ptf container mgmt interface +# -e topo=t0 - the name of removed topo +# -e ptf_imagename=docker-ptf - name of a docker-image which will be used for the ptf docker container +# -e vm_type=veos|ceos + +- hosts: servers:&eos + gather_facts: no + pre_tasks: + - name: Check that variable topo is defined + fail: msg="Define topo variable with -e topo=something" + when: topo is not defined + + - name: Check if it is a known topology + fail: msg="Unknown topology {{ topo }}" + when: topo not in topologies + + - name: Check that variable VM_base is defined + fail: msg="Define VM_base variable with -e VM_base=something" + when: VM_base is not defined + + - name: Load topo variables + include_vars: "vars/topo_{{ topo }}.yml" + + - name: Find current server group + set_fact: current_server={{ group_names | extract_by_prefix('server_') }} + + - name: Extract VM names from the inventory + set_fact: VM_hosts={{ groups[current_server] | filter_by_prefix('VM') }} + + - name: Generate vm list of target VMs + set_fact: VM_targets={{ VM_hosts | filter_vm_targets(topology['VMs'], VM_base) }} + when: topology['VMs'] is defined + + roles: + - { role: eos, when: topology.VMs is defined and inventory_hostname in VM_targets } # role eos will be executed in any case, and when will evaluate with every task diff --git a/infra/sonic_t2/topo_8800-LC-GG.yml b/infra/sonic_t2/topo_8800-LC-GG.yml new file mode 100755 index 00000000000..be7d4e5ead9 --- /dev/null +++ b/infra/sonic_t2/topo_8800-LC-GG.yml @@ -0,0 +1,235 @@ + +slot1: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth290-ASIC0 + - Eth292-ASIC0 + - Eth294-ASIC0 + ASIC1: + asic_intfs: + - Eth192-ASIC0 + - Eth286-ASIC0 + - Eth288-ASIC0 + - Eth302-ASIC0 + ASIC2: + asic_intfs: + - Eth268-ASIC0 + - Eth272-ASIC0 + - Eth274-ASIC0 + ASIC3: + asic_intfs: + - Eth270-ASIC0 + - Eth296-ASIC0 + - Eth298-ASIC0 + - Eth300-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.1/24 + - 2603:10e2:400:1::1/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.1/24 + - 2603:10e2:400:2::1/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.1/24 + - 2603:10e2:400:3::1/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.1/24 + - 2603:10e2:400:4::1/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth288-ASIC1 + - Eth292-ASIC1 + - Eth294-ASIC1 + ASIC1: + asic_intfs: + - Eth192-ASIC1 + - Eth286-ASIC1 + - Eth290-ASIC1 + - Eth302-ASIC1 + ASIC2: + asic_intfs: + - Eth268-ASIC1 + - Eth272-ASIC1 + - Eth274-ASIC1 + ASIC3: + asic_intfs: + - Eth270-ASIC1 + - Eth296-ASIC1 + - Eth298-ASIC1 + - Eth300-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.2/24 + - 2603:10e2:400:1::2/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.2/24 + - 2603:10e2:400:2::2/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.2/24 + - 2603:10e2:400:3::2/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.2/24 + - 2603:10e2:400:4::2/64 +slot2: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth290-ASIC0 + - Eth292-ASIC0 + - Eth294-ASIC0 + ASIC1: + asic_intfs: + - Eth192-ASIC0 + - Eth286-ASIC0 + - Eth288-ASIC0 + - Eth302-ASIC0 + ASIC2: + asic_intfs: + - Eth268-ASIC0 + - Eth272-ASIC0 + - Eth274-ASIC0 + ASIC3: + asic_intfs: + - Eth270-ASIC0 + - Eth296-ASIC0 + - Eth298-ASIC0 + - Eth300-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.3/24 + - 2603:10e2:400:1::3/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.3/24 + - 2603:10e2:400:2::3/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.3/24 + - 2603:10e2:400:3::3/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.3/24 + - 2603:10e2:400:4::3/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth288-ASIC1 + - Eth292-ASIC1 + - Eth294-ASIC1 + ASIC1: + asic_intfs: + - Eth192-ASIC1 + - Eth286-ASIC1 + - Eth290-ASIC1 + - Eth302-ASIC1 + ASIC2: + asic_intfs: + - Eth268-ASIC1 + - Eth272-ASIC1 + - Eth274-ASIC1 + ASIC3: + asic_intfs: + - Eth270-ASIC1 + - Eth296-ASIC1 + - Eth298-ASIC1 + - Eth300-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.4/24 + - 2603:10e2:400:1::4/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.4/24 + - 2603:10e2:400:2::4/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.4/24 + - 2603:10e2:400:3::4/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.4/24 + - 2603:10e2:400:4::4/64 \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-LC-LL.yml b/infra/sonic_t2/topo_8800-LC-LL.yml new file mode 100644 index 00000000000..c58526373ed --- /dev/null +++ b/infra/sonic_t2/topo_8800-LC-LL.yml @@ -0,0 +1,314 @@ +slot1: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC0 + - Eth396-ASIC0 + ASIC1: + asic_intfs: + - Eth400-ASIC0 + - Eth404-ASIC0 + ASIC2: + asic_intfs: + - Eth408-ASIC0 + - Eth412-ASIC0 + ASIC3: + asic_intfs: + - Eth368-ASIC0 + - Eth372-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.1/24 + - 2603:10e2:400:1::1/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.1/24 + - 2603:10e2:400:2::1/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.1/24 + - 2603:10e2:400:3::1/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.1/24 + - 2603:10e2:400:4::1/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth400-ASIC1 + - Eth404-ASIC1 + ASIC1: + asic_intfs: + - Eth392-ASIC1 + - Eth396-ASIC1 + ASIC2: + asic_intfs: + - Eth408-ASIC1 + - Eth412-ASIC1 + ASIC3: + asic_intfs: + - Eth368-ASIC1 + - Eth372-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.2/24 + - 2603:10e2:400:1::2/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.2/24 + - 2603:10e2:400:2::2/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.2/24 + - 2603:10e2:400:3::2/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.2/24 + - 2603:10e2:400:4::2/64 + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC2 + - Eth396-ASIC2 + ASIC1: + asic_intfs: + - Eth400-ASIC2 + - Eth404-ASIC2 + ASIC2: + asic_intfs: + - Eth408-ASIC2 + - Eth412-ASIC2 + ASIC3: + asic_intfs: + - Eth368-ASIC2 + - Eth372-ASIC2 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.3/24 + - 2603:10e2:400:1::3/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.3/24 + - 2603:10e2:400:2::3/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.3/24 + - 2603:10e2:400:3::3/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.3/24 + - 2603:10e2:400:4::3/64 +slot2: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC0 + - Eth396-ASIC0 + ASIC1: + asic_intfs: + - Eth400-ASIC0 + - Eth404-ASIC0 + ASIC2: + asic_intfs: + - Eth408-ASIC0 + - Eth412-ASIC0 + ASIC3: + asic_intfs: + - Eth368-ASIC0 + - Eth372-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.4/24 + - 2603:10e2:400:1::4/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.4/24 + - 2603:10e2:400:2::4/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.4/24 + - 2603:10e2:400:3::4/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.4/24 + - 2603:10e2:400:4::4/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth400-ASIC1 + - Eth404-ASIC1 + ASIC1: + asic_intfs: + - Eth392-ASIC1 + - Eth396-ASIC1 + ASIC2: + asic_intfs: + - Eth408-ASIC1 + - Eth412-ASIC1 + ASIC3: + asic_intfs: + - Eth368-ASIC1 + - Eth372-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.5/24 + - 2603:10e2:400:1::5/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.5/24 + - 2603:10e2:400:2::5/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.5/24 + - 2603:10e2:400:3::5/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.5/24 + - 2603:10e2:400:4::5/64 + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC2 + - Eth396-ASIC2 + ASIC1: + asic_intfs: + - Eth400-ASIC2 + - Eth404-ASIC2 + ASIC2: + asic_intfs: + - Eth408-ASIC2 + - Eth412-ASIC2 + ASIC3: + asic_intfs: + - Eth368-ASIC2 + - Eth372-ASIC2 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.6/24 + - 2603:10e2:400:1::6/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.6/24 + - 2603:10e2:400:2::6/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.6/24 + - 2603:10e2:400:3::6/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.6/24 + - 2603:10e2:400:4::6/64 \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-LC-VG.yml b/infra/sonic_t2/topo_8800-LC-VG.yml new file mode 100644 index 00000000000..5bb89e53522 --- /dev/null +++ b/infra/sonic_t2/topo_8800-LC-VG.yml @@ -0,0 +1,275 @@ + +slot1: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC0 + - Eth396-ASIC0 + ASIC1: + asic_intfs: + - Eth400-ASIC0 + - Eth404-ASIC0 + ASIC2: + asic_intfs: + - Eth408-ASIC0 + - Eth412-ASIC0 + ASIC3: + asic_intfs: + - Eth368-ASIC0 + - Eth372-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.1/24 + - 2603:10e2:400:1::1/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.1/24 + - 2603:10e2:400:2::1/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.1/24 + - 2603:10e2:400:3::1/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.1/24 + - 2603:10e2:400:4::1/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth400-ASIC1 + - Eth404-ASIC1 + ASIC1: + asic_intfs: + - Eth392-ASIC1 + - Eth396-ASIC1 + ASIC2: + asic_intfs: + - Eth408-ASIC1 + - Eth412-ASIC1 + ASIC3: + asic_intfs: + - Eth368-ASIC1 + - Eth372-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.2/24 + - 2603:10e2:400:1::2/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.2/24 + - 2603:10e2:400:2::2/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.2/24 + - 2603:10e2:400:3::2/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.2/24 + - 2603:10e2:400:4::2/64 + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC2 + - Eth396-ASIC2 + ASIC1: + asic_intfs: + - Eth400-ASIC2 + - Eth404-ASIC2 + ASIC2: + asic_intfs: + - Eth408-ASIC2 + - Eth412-ASIC2 + ASIC3: + asic_intfs: + - Eth368-ASIC2 + - Eth372-ASIC2 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.3/24 + - 2603:10e2:400:1::3/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.3/24 + - 2603:10e2:400:2::3/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.3/24 + - 2603:10e2:400:3::3/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.3/24 + - 2603:10e2:400:4::3/64 +slot2: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth290-ASIC0 + - Eth292-ASIC0 + - Eth294-ASIC0 + ASIC1: + asic_intfs: + - Eth192-ASIC0 + - Eth286-ASIC0 + - Eth288-ASIC0 + - Eth302-ASIC0 + ASIC2: + asic_intfs: + - Eth268-ASIC0 + - Eth272-ASIC0 + - Eth274-ASIC0 + ASIC3: + asic_intfs: + - Eth270-ASIC0 + - Eth296-ASIC0 + - Eth298-ASIC0 + - Eth300-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.4/24 + - 2603:10e2:400:1::4/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.4/24 + - 2603:10e2:400:2::4/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.4/24 + - 2603:10e2:400:3::4/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.4/24 + - 2603:10e2:400:4::4/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth288-ASIC1 + - Eth292-ASIC1 + - Eth294-ASIC1 + ASIC1: + asic_intfs: + - Eth192-ASIC1 + - Eth286-ASIC1 + - Eth290-ASIC1 + - Eth302-ASIC1 + ASIC2: + asic_intfs: + - Eth268-ASIC1 + - Eth272-ASIC1 + - Eth274-ASIC1 + ASIC3: + asic_intfs: + - Eth270-ASIC1 + - Eth296-ASIC1 + - Eth298-ASIC1 + - Eth300-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.5/24 + - 2603:10e2:400:1::5/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.5/24 + - 2603:10e2:400:2::5/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.5/24 + - 2603:10e2:400:3::5/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.5/24 + - 2603:10e2:400:4::5/64 \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-LC-VL.yml b/infra/sonic_t2/topo_8800-LC-VL.yml new file mode 100644 index 00000000000..c58526373ed --- /dev/null +++ b/infra/sonic_t2/topo_8800-LC-VL.yml @@ -0,0 +1,314 @@ +slot1: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC0 + - Eth396-ASIC0 + ASIC1: + asic_intfs: + - Eth400-ASIC0 + - Eth404-ASIC0 + ASIC2: + asic_intfs: + - Eth408-ASIC0 + - Eth412-ASIC0 + ASIC3: + asic_intfs: + - Eth368-ASIC0 + - Eth372-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.1/24 + - 2603:10e2:400:1::1/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.1/24 + - 2603:10e2:400:2::1/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.1/24 + - 2603:10e2:400:3::1/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.1/24 + - 2603:10e2:400:4::1/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth400-ASIC1 + - Eth404-ASIC1 + ASIC1: + asic_intfs: + - Eth392-ASIC1 + - Eth396-ASIC1 + ASIC2: + asic_intfs: + - Eth408-ASIC1 + - Eth412-ASIC1 + ASIC3: + asic_intfs: + - Eth368-ASIC1 + - Eth372-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.2/24 + - 2603:10e2:400:1::2/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.2/24 + - 2603:10e2:400:2::2/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.2/24 + - 2603:10e2:400:3::2/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.2/24 + - 2603:10e2:400:4::2/64 + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC2 + - Eth396-ASIC2 + ASIC1: + asic_intfs: + - Eth400-ASIC2 + - Eth404-ASIC2 + ASIC2: + asic_intfs: + - Eth408-ASIC2 + - Eth412-ASIC2 + ASIC3: + asic_intfs: + - Eth368-ASIC2 + - Eth372-ASIC2 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.3/24 + - 2603:10e2:400:1::3/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.3/24 + - 2603:10e2:400:2::3/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.3/24 + - 2603:10e2:400:3::3/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.3/24 + - 2603:10e2:400:4::3/64 +slot2: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC0 + - Eth396-ASIC0 + ASIC1: + asic_intfs: + - Eth400-ASIC0 + - Eth404-ASIC0 + ASIC2: + asic_intfs: + - Eth408-ASIC0 + - Eth412-ASIC0 + ASIC3: + asic_intfs: + - Eth368-ASIC0 + - Eth372-ASIC0 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.4/24 + - 2603:10e2:400:1::4/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.4/24 + - 2603:10e2:400:2::4/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.4/24 + - 2603:10e2:400:3::4/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.4/24 + - 2603:10e2:400:4::4/64 + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth400-ASIC1 + - Eth404-ASIC1 + ASIC1: + asic_intfs: + - Eth392-ASIC1 + - Eth396-ASIC1 + ASIC2: + asic_intfs: + - Eth408-ASIC1 + - Eth412-ASIC1 + ASIC3: + asic_intfs: + - Eth368-ASIC1 + - Eth372-ASIC1 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.5/24 + - 2603:10e2:400:1::5/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.5/24 + - 2603:10e2:400:2::5/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.5/24 + - 2603:10e2:400:3::5/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.5/24 + - 2603:10e2:400:4::5/64 + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth392-ASIC2 + - Eth396-ASIC2 + ASIC1: + asic_intfs: + - Eth400-ASIC2 + - Eth404-ASIC2 + ASIC2: + asic_intfs: + - Eth408-ASIC2 + - Eth412-ASIC2 + ASIC3: + asic_intfs: + - Eth368-ASIC2 + - Eth372-ASIC2 + configuration_properties: + common: + dut_asn: 65100 + asic_type: FrontEnd + configuration: + ASIC0: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.1.6/24 + - 2603:10e2:400:1::6/64 + ASIC1: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.2.6/24 + - 2603:10e2:400:2::6/64 + ASIC2: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.3.6/24 + - 2603:10e2:400:3::6/64 + ASIC3: + bgp: + asn: 65100 + peers: + 65100: + - 20.0.4.6/24 + - 2603:10e2:400:4::6/64 \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-RP-GG.yml b/infra/sonic_t2/topo_8800-RP-GG.yml new file mode 100644 index 00000000000..8120e7eea13 --- /dev/null +++ b/infra/sonic_t2/topo_8800-RP-GG.yml @@ -0,0 +1,449 @@ +slot0: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC0 + - Eth234-ASIC0 + - Eth244-ASIC0 + ASIC1: + asic_intfs: + - Eth214-ASIC0 + - Eth232-ASIC0 + - Eth242-ASIC0 + ASIC2: + asic_intfs: + - Eth184-ASIC0 + - Eth194-ASIC0 + - Eth220-ASIC0 + ASIC3: + asic_intfs: + - Eth190-ASIC0 + - Eth192-ASIC0 + - Eth218-ASIC0 + configuration_properties: + common: + asic_type: BackEnd + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC1 + - Eth168-ASIC1 + - Eth172-ASIC1 + - Eth178-ASIC1 + ASIC1: + asic_intfs: + - Eth154-ASIC1 + - Eth174-ASIC1 + - Eth176-ASIC1 + - Eth180-ASIC1 + ASIC2: + asic_intfs: + - Eth208-ASIC1 + - Eth212-ASIC1 + - Eth234-ASIC1 + - Eth244-ASIC1 + ASIC3: + asic_intfs: + - Eth214-ASIC1 + - Eth232-ASIC1 + - Eth236-ASIC1 + - Eth242-ASIC1 + configuration_properties: + common: + asic_type: BackEnd + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC2 + - Eth234-ASIC2 + - Eth244-ASIC2 + ASIC1: + asic_intfs: + - Eth214-ASIC2 + - Eth232-ASIC2 + - Eth242-ASIC2 + ASIC2: + asic_intfs: + - Eth184-ASIC2 + - Eth194-ASIC2 + - Eth220-ASIC2 + ASIC3: + asic_intfs: + - Eth190-ASIC2 + - Eth192-ASIC2 + - Eth218-ASIC2 + configuration_properties: + common: + asic_type: BackEnd + ASIC3: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC3 + - Eth168-ASIC3 + - Eth172-ASIC3 + - Eth178-ASIC3 + ASIC1: + asic_intfs: + - Eth154-ASIC3 + - Eth174-ASIC3 + - Eth176-ASIC3 + - Eth180-ASIC3 + ASIC2: + asic_intfs: + - Eth208-ASIC3 + - Eth212-ASIC3 + - Eth234-ASIC3 + - Eth244-ASIC3 + ASIC3: + asic_intfs: + - Eth214-ASIC3 + - Eth232-ASIC3 + - Eth236-ASIC3 + - Eth242-ASIC3 + configuration_properties: + common: + asic_type: BackEnd + ASIC4: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC4 + - Eth234-ASIC4 + - Eth244-ASIC4 + ASIC1: + asic_intfs: + - Eth214-ASIC4 + - Eth232-ASIC4 + - Eth242-ASIC4 + ASIC2: + asic_intfs: + - Eth184-ASIC4 + - Eth194-ASIC4 + - Eth220-ASIC4 + ASIC3: + asic_intfs: + - Eth190-ASIC4 + - Eth192-ASIC4 + - Eth218-ASIC4 + configuration_properties: + common: + asic_type: BackEnd + ASIC5: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC5 + - Eth168-ASIC5 + - Eth172-ASIC5 + - Eth178-ASIC5 + ASIC1: + asic_intfs: + - Eth154-ASIC5 + - Eth174-ASIC5 + - Eth176-ASIC5 + - Eth180-ASIC5 + ASIC2: + asic_intfs: + - Eth208-ASIC5 + - Eth212-ASIC5 + - Eth234-ASIC5 + - Eth244-ASIC5 + ASIC3: + asic_intfs: + - Eth214-ASIC5 + - Eth232-ASIC5 + - Eth236-ASIC5 + - Eth242-ASIC5 + configuration_properties: + common: + asic_type: BackEnd + ASIC6: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC6 + - Eth234-ASIC6 + - Eth244-ASIC6 + ASIC1: + asic_intfs: + - Eth214-ASIC6 + - Eth232-ASIC6 + - Eth242-ASIC6 + ASIC2: + asic_intfs: + - Eth184-ASIC6 + - Eth194-ASIC6 + - Eth220-ASIC6 + ASIC3: + asic_intfs: + - Eth190-ASIC6 + - Eth192-ASIC6 + - Eth218-ASIC6 + configuration_properties: + common: + asic_type: BackEnd + ASIC7: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC7 + - Eth168-ASIC7 + - Eth172-ASIC7 + - Eth178-ASIC7 + ASIC1: + asic_intfs: + - Eth154-ASIC7 + - Eth174-ASIC7 + - Eth176-ASIC7 + - Eth180-ASIC7 + ASIC2: + asic_intfs: + - Eth208-ASIC7 + - Eth212-ASIC7 + - Eth234-ASIC7 + - Eth244-ASIC7 + ASIC3: + asic_intfs: + - Eth214-ASIC7 + - Eth232-ASIC7 + - Eth236-ASIC7 + - Eth242-ASIC7 + configuration_properties: + common: + asic_type: BackEnd + ASIC8: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC8 + - Eth234-ASIC8 + - Eth244-ASIC8 + ASIC1: + asic_intfs: + - Eth214-ASIC8 + - Eth232-ASIC8 + - Eth242-ASIC8 + ASIC2: + asic_intfs: + - Eth184-ASIC8 + - Eth194-ASIC8 + - Eth220-ASIC8 + ASIC3: + asic_intfs: + - Eth190-ASIC8 + - Eth192-ASIC8 + - Eth218-ASIC8 + configuration_properties: + common: + asic_type: BackEnd + ASIC9: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC9 + - Eth168-ASIC9 + - Eth172-ASIC9 + - Eth178-ASIC9 + ASIC1: + asic_intfs: + - Eth154-ASIC9 + - Eth174-ASIC9 + - Eth176-ASIC9 + - Eth180-ASIC9 + ASIC2: + asic_intfs: + - Eth208-ASIC9 + - Eth212-ASIC9 + - Eth234-ASIC9 + - Eth244-ASIC9 + ASIC3: + asic_intfs: + - Eth214-ASIC9 + - Eth232-ASIC9 + - Eth236-ASIC9 + - Eth242-ASIC9 + configuration_properties: + common: + asic_type: BackEnd + ASIC10: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC10 + - Eth234-ASIC10 + - Eth244-ASIC10 + ASIC1: + asic_intfs: + - Eth214-ASIC10 + - Eth232-ASIC10 + - Eth242-ASIC10 + ASIC2: + asic_intfs: + - Eth184-ASIC10 + - Eth194-ASIC10 + - Eth220-ASIC10 + ASIC3: + asic_intfs: + - Eth190-ASIC10 + - Eth192-ASIC10 + - Eth218-ASIC10 + configuration_properties: + common: + asic_type: BackEnd + ASIC11: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC11 + - Eth168-ASIC11 + - Eth172-ASIC11 + - Eth178-ASIC11 + ASIC1: + asic_intfs: + - Eth154-ASIC11 + - Eth174-ASIC11 + - Eth176-ASIC11 + - Eth180-ASIC11 + ASIC2: + asic_intfs: + - Eth208-ASIC11 + - Eth212-ASIC11 + - Eth234-ASIC11 + - Eth244-ASIC11 + ASIC3: + asic_intfs: + - Eth214-ASIC11 + - Eth232-ASIC11 + - Eth236-ASIC11 + - Eth242-ASIC11 + configuration_properties: + common: + asic_type: BackEnd + ASIC12: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC12 + - Eth234-ASIC12 + - Eth244-ASIC12 + ASIC1: + asic_intfs: + - Eth214-ASIC12 + - Eth232-ASIC12 + - Eth242-ASIC12 + ASIC2: + asic_intfs: + - Eth184-ASIC12 + - Eth194-ASIC12 + - Eth220-ASIC12 + ASIC3: + asic_intfs: + - Eth190-ASIC12 + - Eth192-ASIC12 + - Eth218-ASIC12 + configuration_properties: + common: + asic_type: BackEnd + ASIC13: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC13 + - Eth168-ASIC13 + - Eth172-ASIC13 + - Eth178-ASIC13 + ASIC1: + asic_intfs: + - Eth154-ASIC13 + - Eth174-ASIC13 + - Eth176-ASIC13 + - Eth180-ASIC13 + ASIC2: + asic_intfs: + - Eth208-ASIC13 + - Eth212-ASIC13 + - Eth234-ASIC13 + - Eth244-ASIC13 + ASIC3: + asic_intfs: + - Eth214-ASIC13 + - Eth232-ASIC13 + - Eth236-ASIC13 + - Eth242-ASIC13 + configuration_properties: + common: + asic_type: BackEnd + ASIC14: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC14 + - Eth234-ASIC14 + - Eth244-ASIC14 + ASIC1: + asic_intfs: + - Eth214-ASIC14 + - Eth232-ASIC14 + - Eth242-ASIC14 + ASIC2: + asic_intfs: + - Eth184-ASIC14 + - Eth194-ASIC14 + - Eth220-ASIC14 + ASIC3: + asic_intfs: + - Eth190-ASIC14 + - Eth192-ASIC14 + - Eth218-ASIC14 + configuration_properties: + common: + asic_type: BackEnd + ASIC15: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth156-ASIC15 + - Eth168-ASIC15 + - Eth172-ASIC15 + - Eth178-ASIC15 + ASIC1: + asic_intfs: + - Eth154-ASIC15 + - Eth174-ASIC15 + - Eth176-ASIC15 + - Eth180-ASIC15 + ASIC2: + asic_intfs: + - Eth208-ASIC15 + - Eth212-ASIC15 + - Eth234-ASIC15 + - Eth244-ASIC15 + ASIC3: + asic_intfs: + - Eth214-ASIC15 + - Eth232-ASIC15 + - Eth236-ASIC15 + - Eth242-ASIC15 + configuration_properties: + common: + asic_type: BackEnd \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-RP-LL.yml b/infra/sonic_t2/topo_8800-RP-LL.yml new file mode 100644 index 00000000000..0eefec4b899 --- /dev/null +++ b/infra/sonic_t2/topo_8800-RP-LL.yml @@ -0,0 +1,481 @@ +slot0: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC0 + - Eth212-ASIC0 + ASIC1: + asic_intfs: + - Eth232-ASIC0 + - Eth236-ASIC0 + ASIC2: + asic_intfs: + - Eth240-ASIC0 + - Eth244-ASIC0 + ASIC3: + asic_intfs: + - Eth184-ASIC0 + - Eth188-ASIC0 + ASIC4: + asic_intfs: + - Eth192-ASIC0 + - Eth196-ASIC0 + ASIC5: + asic_intfs: + - Eth216-ASIC0 + - Eth220-ASIC0 + configuration_properties: + common: + asic_type: BackEnd + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC1 + - Eth172-ASIC1 + ASIC1: + asic_intfs: + - Eth176-ASIC1 + - Eth180-ASIC1 + ASIC2: + asic_intfs: + - Eth152-ASIC1 + - Eth156-ASIC1 + ASIC3: + asic_intfs: + - Eth208-ASIC1 + - Eth212-ASIC1 + ASIC4: + asic_intfs: + - Eth232-ASIC1 + - Eth236-ASIC1 + ASIC5: + asic_intfs: + - Eth240-ASIC1 + - Eth244-ASIC1 + configuration_properties: + common: + asic_type: BackEnd + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC2 + - Eth212-ASIC2 + ASIC1: + asic_intfs: + - Eth232-ASIC2 + - Eth236-ASIC2 + ASIC2: + asic_intfs: + - Eth240-ASIC2 + - Eth244-ASIC2 + ASIC3: + asic_intfs: + - Eth184-ASIC2 + - Eth188-ASIC2 + ASIC4: + asic_intfs: + - Eth192-ASIC2 + - Eth196-ASIC2 + ASIC5: + asic_intfs: + - Eth216-ASIC2 + - Eth220-ASIC2 + configuration_properties: + common: + asic_type: BackEnd + ASIC3: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC3 + - Eth172-ASIC3 + ASIC1: + asic_intfs: + - Eth176-ASIC3 + - Eth180-ASIC3 + ASIC2: + asic_intfs: + - Eth152-ASIC3 + - Eth156-ASIC3 + ASIC3: + asic_intfs: + - Eth208-ASIC3 + - Eth212-ASIC3 + ASIC4: + asic_intfs: + - Eth232-ASIC3 + - Eth236-ASIC3 + ASIC5: + asic_intfs: + - Eth240-ASIC3 + - Eth244-ASIC3 + configuration_properties: + common: + asic_type: BackEnd + ASIC4: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC4 + - Eth212-ASIC4 + ASIC1: + asic_intfs: + - Eth232-ASIC4 + - Eth236-ASIC4 + ASIC2: + asic_intfs: + - Eth240-ASIC4 + - Eth244-ASIC4 + ASIC3: + asic_intfs: + - Eth184-ASIC4 + - Eth188-ASIC4 + ASIC4: + asic_intfs: + - Eth192-ASIC4 + - Eth196-ASIC4 + ASIC5: + asic_intfs: + - Eth216-ASIC4 + - Eth220-ASIC4 + configuration_properties: + common: + asic_type: BackEnd + ASIC5: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC5 + - Eth172-ASIC5 + ASIC1: + asic_intfs: + - Eth176-ASIC5 + - Eth180-ASIC5 + ASIC2: + asic_intfs: + - Eth152-ASIC5 + - Eth156-ASIC5 + ASIC3: + asic_intfs: + - Eth208-ASIC5 + - Eth212-ASIC5 + ASIC4: + asic_intfs: + - Eth232-ASIC5 + - Eth236-ASIC5 + ASIC5: + asic_intfs: + - Eth240-ASIC5 + - Eth244-ASIC5 + configuration_properties: + common: + asic_type: BackEnd + ASIC6: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC6 + - Eth212-ASIC6 + ASIC1: + asic_intfs: + - Eth232-ASIC6 + - Eth236-ASIC6 + ASIC2: + asic_intfs: + - Eth240-ASIC6 + - Eth244-ASIC6 + ASIC3: + asic_intfs: + - Eth184-ASIC6 + - Eth188-ASIC6 + ASIC4: + asic_intfs: + - Eth192-ASIC6 + - Eth196-ASIC6 + ASIC5: + asic_intfs: + - Eth216-ASIC6 + - Eth220-ASIC6 + configuration_properties: + common: + asic_type: BackEnd + ASIC7: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC7 + - Eth172-ASIC7 + ASIC1: + asic_intfs: + - Eth176-ASIC7 + - Eth180-ASIC7 + ASIC2: + asic_intfs: + - Eth152-ASIC7 + - Eth156-ASIC7 + ASIC3: + asic_intfs: + - Eth208-ASIC7 + - Eth212-ASIC7 + ASIC4: + asic_intfs: + - Eth232-ASIC7 + - Eth236-ASIC7 + ASIC5: + asic_intfs: + - Eth240-ASIC7 + - Eth244-ASIC7 + configuration_properties: + common: + asic_type: BackEnd + ASIC8: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC8 + - Eth212-ASIC8 + ASIC1: + asic_intfs: + - Eth232-ASIC8 + - Eth236-ASIC8 + ASIC2: + asic_intfs: + - Eth240-ASIC8 + - Eth244-ASIC8 + ASIC3: + asic_intfs: + - Eth184-ASIC8 + - Eth188-ASIC8 + ASIC4: + asic_intfs: + - Eth192-ASIC8 + - Eth196-ASIC8 + ASIC5: + asic_intfs: + - Eth216-ASIC8 + - Eth220-ASIC8 + configuration_properties: + common: + asic_type: BackEnd + ASIC9: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC9 + - Eth172-ASIC9 + ASIC1: + asic_intfs: + - Eth176-ASIC9 + - Eth180-ASIC9 + ASIC2: + asic_intfs: + - Eth152-ASIC9 + - Eth156-ASIC9 + ASIC3: + asic_intfs: + - Eth208-ASIC9 + - Eth212-ASIC9 + ASIC4: + asic_intfs: + - Eth232-ASIC9 + - Eth236-ASIC9 + ASIC5: + asic_intfs: + - Eth240-ASIC9 + - Eth244-ASIC9 + configuration_properties: + common: + asic_type: BackEnd + ASIC10: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC10 + - Eth212-ASIC10 + ASIC1: + asic_intfs: + - Eth232-ASIC10 + - Eth236-ASIC10 + ASIC2: + asic_intfs: + - Eth240-ASIC10 + - Eth244-ASIC10 + ASIC3: + asic_intfs: + - Eth184-ASIC10 + - Eth188-ASIC10 + ASIC4: + asic_intfs: + - Eth192-ASIC10 + - Eth196-ASIC10 + ASIC5: + asic_intfs: + - Eth216-ASIC10 + - Eth220-ASIC10 + configuration_properties: + common: + asic_type: BackEnd + ASIC11: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC11 + - Eth172-ASIC11 + ASIC1: + asic_intfs: + - Eth176-ASIC11 + - Eth180-ASIC11 + ASIC2: + asic_intfs: + - Eth152-ASIC11 + - Eth156-ASIC11 + ASIC3: + asic_intfs: + - Eth208-ASIC11 + - Eth212-ASIC11 + ASIC4: + asic_intfs: + - Eth232-ASIC11 + - Eth236-ASIC11 + ASIC5: + asic_intfs: + - Eth240-ASIC11 + - Eth244-ASIC11 + configuration_properties: + common: + asic_type: BackEnd + ASIC12: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC12 + - Eth212-ASIC12 + ASIC1: + asic_intfs: + - Eth232-ASIC12 + - Eth236-ASIC12 + ASIC2: + asic_intfs: + - Eth240-ASIC12 + - Eth244-ASIC12 + ASIC3: + asic_intfs: + - Eth184-ASIC12 + - Eth188-ASIC12 + ASIC4: + asic_intfs: + - Eth192-ASIC12 + - Eth196-ASIC12 + ASIC5: + asic_intfs: + - Eth216-ASIC12 + - Eth220-ASIC12 + configuration_properties: + common: + asic_type: BackEnd + ASIC13: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC13 + - Eth172-ASIC13 + ASIC1: + asic_intfs: + - Eth176-ASIC13 + - Eth180-ASIC13 + ASIC2: + asic_intfs: + - Eth152-ASIC13 + - Eth156-ASIC13 + ASIC3: + asic_intfs: + - Eth208-ASIC13 + - Eth212-ASIC13 + ASIC4: + asic_intfs: + - Eth232-ASIC13 + - Eth236-ASIC13 + ASIC5: + asic_intfs: + - Eth240-ASIC13 + - Eth244-ASIC13 + configuration_properties: + common: + asic_type: BackEnd + ASIC14: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC14 + - Eth212-ASIC14 + ASIC1: + asic_intfs: + - Eth232-ASIC14 + - Eth236-ASIC14 + ASIC2: + asic_intfs: + - Eth240-ASIC14 + - Eth244-ASIC14 + ASIC3: + asic_intfs: + - Eth184-ASIC14 + - Eth188-ASIC14 + ASIC4: + asic_intfs: + - Eth192-ASIC14 + - Eth196-ASIC14 + ASIC5: + asic_intfs: + - Eth216-ASIC14 + - Eth220-ASIC14 + configuration_properties: + common: + asic_type: BackEnd + ASIC15: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC15 + - Eth172-ASIC15 + ASIC1: + asic_intfs: + - Eth176-ASIC15 + - Eth180-ASIC15 + ASIC2: + asic_intfs: + - Eth152-ASIC15 + - Eth156-ASIC15 + ASIC3: + asic_intfs: + - Eth208-ASIC15 + - Eth212-ASIC15 + ASIC4: + asic_intfs: + - Eth232-ASIC15 + - Eth236-ASIC15 + ASIC5: + asic_intfs: + - Eth240-ASIC15 + - Eth244-ASIC15 + configuration_properties: + common: + asic_type: BackEnd \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-RP-VG.yml b/infra/sonic_t2/topo_8800-RP-VG.yml new file mode 100644 index 00000000000..f0f79243e3f --- /dev/null +++ b/infra/sonic_t2/topo_8800-RP-VG.yml @@ -0,0 +1,465 @@ +slot0: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC0 + - Eth212-ASIC0 + ASIC1: + asic_intfs: + - Eth232-ASIC0 + - Eth236-ASIC0 + ASIC2: + asic_intfs: + - Eth240-ASIC0 + - Eth244-ASIC0 + ASIC3: + asic_intfs: + - Eth184-ASIC0 + - Eth194-ASIC0 + - Eth220-ASIC0 + ASIC4: + asic_intfs: + - Eth190-ASIC0 + - Eth192-ASIC0 + - Eth218-ASIC0 + configuration_properties: + common: + asic_type: BackEnd + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC1 + - Eth172-ASIC1 + ASIC1: + asic_intfs: + - Eth176-ASIC1 + - Eth180-ASIC1 + ASIC2: + asic_intfs: + - Eth152-ASIC1 + - Eth156-ASIC1 + ASIC3: + asic_intfs: + - Eth208-ASIC1 + - Eth212-ASIC1 + - Eth234-ASIC1 + - Eth244-ASIC1 + ASIC4: + asic_intfs: + - Eth214-ASIC1 + - Eth232-ASIC1 + - Eth236-ASIC1 + - Eth242-ASIC1 + configuration_properties: + common: + asic_type: BackEnd + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC2 + - Eth212-ASIC2 + ASIC1: + asic_intfs: + - Eth232-ASIC2 + - Eth236-ASIC2 + ASIC2: + asic_intfs: + - Eth240-ASIC2 + - Eth244-ASIC2 + ASIC3: + asic_intfs: + - Eth184-ASIC2 + - Eth194-ASIC2 + - Eth220-ASIC2 + ASIC4: + asic_intfs: + - Eth190-ASIC2 + - Eth192-ASIC2 + - Eth218-ASIC2 + configuration_properties: + common: + asic_type: BackEnd + ASIC3: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC3 + - Eth172-ASIC3 + ASIC1: + asic_intfs: + - Eth176-ASIC3 + - Eth180-ASIC3 + ASIC2: + asic_intfs: + - Eth152-ASIC3 + - Eth156-ASIC3 + ASIC3: + asic_intfs: + - Eth208-ASIC3 + - Eth212-ASIC3 + - Eth234-ASIC3 + - Eth244-ASIC3 + ASIC4: + asic_intfs: + - Eth214-ASIC3 + - Eth232-ASIC3 + - Eth236-ASIC3 + - Eth242-ASIC3 + configuration_properties: + common: + asic_type: BackEnd + ASIC4: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC4 + - Eth212-ASIC4 + ASIC1: + asic_intfs: + - Eth232-ASIC4 + - Eth236-ASIC4 + ASIC2: + asic_intfs: + - Eth240-ASIC4 + - Eth244-ASIC4 + ASIC3: + asic_intfs: + - Eth184-ASIC4 + - Eth194-ASIC4 + - Eth220-ASIC4 + ASIC4: + asic_intfs: + - Eth190-ASIC4 + - Eth192-ASIC4 + - Eth218-ASIC4 + configuration_properties: + common: + asic_type: BackEnd + ASIC5: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC5 + - Eth172-ASIC5 + ASIC1: + asic_intfs: + - Eth176-ASIC5 + - Eth180-ASIC5 + ASIC2: + asic_intfs: + - Eth152-ASIC5 + - Eth156-ASIC5 + ASIC3: + asic_intfs: + - Eth208-ASIC5 + - Eth212-ASIC5 + - Eth234-ASIC5 + - Eth244-ASIC5 + ASIC4: + asic_intfs: + - Eth214-ASIC5 + - Eth232-ASIC5 + - Eth236-ASIC5 + - Eth242-ASIC5 + configuration_properties: + common: + asic_type: BackEnd + ASIC6: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC6 + - Eth212-ASIC6 + ASIC1: + asic_intfs: + - Eth232-ASIC6 + - Eth236-ASIC6 + ASIC2: + asic_intfs: + - Eth240-ASIC6 + - Eth244-ASIC6 + ASIC3: + asic_intfs: + - Eth184-ASIC6 + - Eth194-ASIC6 + - Eth220-ASIC6 + ASIC4: + asic_intfs: + - Eth190-ASIC6 + - Eth192-ASIC6 + - Eth218-ASIC6 + configuration_properties: + common: + asic_type: BackEnd + ASIC7: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC7 + - Eth172-ASIC7 + ASIC1: + asic_intfs: + - Eth176-ASIC7 + - Eth180-ASIC7 + ASIC2: + asic_intfs: + - Eth152-ASIC7 + - Eth156-ASIC7 + ASIC3: + asic_intfs: + - Eth208-ASIC7 + - Eth212-ASIC7 + - Eth234-ASIC7 + - Eth244-ASIC7 + ASIC4: + asic_intfs: + - Eth214-ASIC7 + - Eth232-ASIC7 + - Eth236-ASIC7 + - Eth242-ASIC7 + configuration_properties: + common: + asic_type: BackEnd + ASIC8: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC8 + - Eth212-ASIC8 + ASIC1: + asic_intfs: + - Eth232-ASIC8 + - Eth236-ASIC8 + ASIC2: + asic_intfs: + - Eth240-ASIC8 + - Eth244-ASIC8 + ASIC3: + asic_intfs: + - Eth184-ASIC8 + - Eth194-ASIC8 + - Eth220-ASIC8 + ASIC4: + asic_intfs: + - Eth190-ASIC8 + - Eth192-ASIC8 + - Eth218-ASIC8 + configuration_properties: + common: + asic_type: BackEnd + ASIC9: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC9 + - Eth172-ASIC9 + ASIC1: + asic_intfs: + - Eth176-ASIC9 + - Eth180-ASIC9 + ASIC2: + asic_intfs: + - Eth152-ASIC9 + - Eth156-ASIC9 + ASIC3: + asic_intfs: + - Eth208-ASIC9 + - Eth212-ASIC9 + - Eth234-ASIC9 + - Eth244-ASIC9 + ASIC4: + asic_intfs: + - Eth214-ASIC9 + - Eth232-ASIC9 + - Eth236-ASIC9 + - Eth242-ASIC9 + configuration_properties: + common: + asic_type: BackEnd + ASIC10: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC10 + - Eth212-ASIC10 + ASIC1: + asic_intfs: + - Eth232-ASIC10 + - Eth236-ASIC10 + ASIC2: + asic_intfs: + - Eth240-ASIC10 + - Eth244-ASIC10 + ASIC3: + asic_intfs: + - Eth184-ASIC10 + - Eth194-ASIC10 + - Eth220-ASIC10 + ASIC4: + asic_intfs: + - Eth190-ASIC10 + - Eth192-ASIC10 + - Eth218-ASIC10 + configuration_properties: + common: + asic_type: BackEnd + ASIC11: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC11 + - Eth172-ASIC11 + ASIC1: + asic_intfs: + - Eth176-ASIC11 + - Eth180-ASIC11 + ASIC2: + asic_intfs: + - Eth152-ASIC11 + - Eth156-ASIC11 + ASIC3: + asic_intfs: + - Eth208-ASIC11 + - Eth212-ASIC11 + - Eth234-ASIC11 + - Eth244-ASIC11 + ASIC4: + asic_intfs: + - Eth214-ASIC11 + - Eth232-ASIC11 + - Eth236-ASIC11 + - Eth242-ASIC11 + configuration_properties: + common: + asic_type: BackEnd + ASIC12: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC12 + - Eth212-ASIC12 + ASIC1: + asic_intfs: + - Eth232-ASIC12 + - Eth236-ASIC12 + ASIC2: + asic_intfs: + - Eth240-ASIC12 + - Eth244-ASIC12 + ASIC3: + asic_intfs: + - Eth184-ASIC12 + - Eth194-ASIC12 + - Eth220-ASIC12 + ASIC4: + asic_intfs: + - Eth190-ASIC12 + - Eth192-ASIC12 + - Eth218-ASIC12 + configuration_properties: + common: + asic_type: BackEnd + ASIC13: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC13 + - Eth172-ASIC13 + ASIC1: + asic_intfs: + - Eth176-ASIC13 + - Eth180-ASIC13 + ASIC2: + asic_intfs: + - Eth152-ASIC13 + - Eth156-ASIC13 + ASIC3: + asic_intfs: + - Eth208-ASIC13 + - Eth212-ASIC13 + - Eth234-ASIC13 + - Eth244-ASIC13 + ASIC4: + asic_intfs: + - Eth214-ASIC13 + - Eth232-ASIC13 + - Eth236-ASIC13 + - Eth242-ASIC13 + configuration_properties: + common: + asic_type: BackEnd + ASIC14: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC14 + - Eth212-ASIC14 + ASIC1: + asic_intfs: + - Eth232-ASIC14 + - Eth236-ASIC14 + ASIC2: + asic_intfs: + - Eth240-ASIC14 + - Eth244-ASIC14 + ASIC3: + asic_intfs: + - Eth184-ASIC14 + - Eth194-ASIC14 + - Eth220-ASIC14 + ASIC4: + asic_intfs: + - Eth190-ASIC14 + - Eth192-ASIC14 + - Eth218-ASIC14 + configuration_properties: + common: + asic_type: BackEnd + ASIC15: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC15 + - Eth172-ASIC15 + ASIC1: + asic_intfs: + - Eth176-ASIC15 + - Eth180-ASIC15 + ASIC2: + asic_intfs: + - Eth152-ASIC15 + - Eth156-ASIC15 + ASIC3: + asic_intfs: + - Eth208-ASIC15 + - Eth212-ASIC15 + - Eth234-ASIC15 + - Eth244-ASIC15 + ASIC4: + asic_intfs: + - Eth214-ASIC15 + - Eth232-ASIC15 + - Eth236-ASIC15 + - Eth242-ASIC15 + configuration_properties: + common: + asic_type: BackEnd \ No newline at end of file diff --git a/infra/sonic_t2/topo_8800-RP-VL.yml b/infra/sonic_t2/topo_8800-RP-VL.yml new file mode 100644 index 00000000000..0eefec4b899 --- /dev/null +++ b/infra/sonic_t2/topo_8800-RP-VL.yml @@ -0,0 +1,481 @@ +slot0: + ASIC0: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC0 + - Eth212-ASIC0 + ASIC1: + asic_intfs: + - Eth232-ASIC0 + - Eth236-ASIC0 + ASIC2: + asic_intfs: + - Eth240-ASIC0 + - Eth244-ASIC0 + ASIC3: + asic_intfs: + - Eth184-ASIC0 + - Eth188-ASIC0 + ASIC4: + asic_intfs: + - Eth192-ASIC0 + - Eth196-ASIC0 + ASIC5: + asic_intfs: + - Eth216-ASIC0 + - Eth220-ASIC0 + configuration_properties: + common: + asic_type: BackEnd + ASIC1: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC1 + - Eth172-ASIC1 + ASIC1: + asic_intfs: + - Eth176-ASIC1 + - Eth180-ASIC1 + ASIC2: + asic_intfs: + - Eth152-ASIC1 + - Eth156-ASIC1 + ASIC3: + asic_intfs: + - Eth208-ASIC1 + - Eth212-ASIC1 + ASIC4: + asic_intfs: + - Eth232-ASIC1 + - Eth236-ASIC1 + ASIC5: + asic_intfs: + - Eth240-ASIC1 + - Eth244-ASIC1 + configuration_properties: + common: + asic_type: BackEnd + ASIC2: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC2 + - Eth212-ASIC2 + ASIC1: + asic_intfs: + - Eth232-ASIC2 + - Eth236-ASIC2 + ASIC2: + asic_intfs: + - Eth240-ASIC2 + - Eth244-ASIC2 + ASIC3: + asic_intfs: + - Eth184-ASIC2 + - Eth188-ASIC2 + ASIC4: + asic_intfs: + - Eth192-ASIC2 + - Eth196-ASIC2 + ASIC5: + asic_intfs: + - Eth216-ASIC2 + - Eth220-ASIC2 + configuration_properties: + common: + asic_type: BackEnd + ASIC3: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC3 + - Eth172-ASIC3 + ASIC1: + asic_intfs: + - Eth176-ASIC3 + - Eth180-ASIC3 + ASIC2: + asic_intfs: + - Eth152-ASIC3 + - Eth156-ASIC3 + ASIC3: + asic_intfs: + - Eth208-ASIC3 + - Eth212-ASIC3 + ASIC4: + asic_intfs: + - Eth232-ASIC3 + - Eth236-ASIC3 + ASIC5: + asic_intfs: + - Eth240-ASIC3 + - Eth244-ASIC3 + configuration_properties: + common: + asic_type: BackEnd + ASIC4: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC4 + - Eth212-ASIC4 + ASIC1: + asic_intfs: + - Eth232-ASIC4 + - Eth236-ASIC4 + ASIC2: + asic_intfs: + - Eth240-ASIC4 + - Eth244-ASIC4 + ASIC3: + asic_intfs: + - Eth184-ASIC4 + - Eth188-ASIC4 + ASIC4: + asic_intfs: + - Eth192-ASIC4 + - Eth196-ASIC4 + ASIC5: + asic_intfs: + - Eth216-ASIC4 + - Eth220-ASIC4 + configuration_properties: + common: + asic_type: BackEnd + ASIC5: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC5 + - Eth172-ASIC5 + ASIC1: + asic_intfs: + - Eth176-ASIC5 + - Eth180-ASIC5 + ASIC2: + asic_intfs: + - Eth152-ASIC5 + - Eth156-ASIC5 + ASIC3: + asic_intfs: + - Eth208-ASIC5 + - Eth212-ASIC5 + ASIC4: + asic_intfs: + - Eth232-ASIC5 + - Eth236-ASIC5 + ASIC5: + asic_intfs: + - Eth240-ASIC5 + - Eth244-ASIC5 + configuration_properties: + common: + asic_type: BackEnd + ASIC6: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC6 + - Eth212-ASIC6 + ASIC1: + asic_intfs: + - Eth232-ASIC6 + - Eth236-ASIC6 + ASIC2: + asic_intfs: + - Eth240-ASIC6 + - Eth244-ASIC6 + ASIC3: + asic_intfs: + - Eth184-ASIC6 + - Eth188-ASIC6 + ASIC4: + asic_intfs: + - Eth192-ASIC6 + - Eth196-ASIC6 + ASIC5: + asic_intfs: + - Eth216-ASIC6 + - Eth220-ASIC6 + configuration_properties: + common: + asic_type: BackEnd + ASIC7: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC7 + - Eth172-ASIC7 + ASIC1: + asic_intfs: + - Eth176-ASIC7 + - Eth180-ASIC7 + ASIC2: + asic_intfs: + - Eth152-ASIC7 + - Eth156-ASIC7 + ASIC3: + asic_intfs: + - Eth208-ASIC7 + - Eth212-ASIC7 + ASIC4: + asic_intfs: + - Eth232-ASIC7 + - Eth236-ASIC7 + ASIC5: + asic_intfs: + - Eth240-ASIC7 + - Eth244-ASIC7 + configuration_properties: + common: + asic_type: BackEnd + ASIC8: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC8 + - Eth212-ASIC8 + ASIC1: + asic_intfs: + - Eth232-ASIC8 + - Eth236-ASIC8 + ASIC2: + asic_intfs: + - Eth240-ASIC8 + - Eth244-ASIC8 + ASIC3: + asic_intfs: + - Eth184-ASIC8 + - Eth188-ASIC8 + ASIC4: + asic_intfs: + - Eth192-ASIC8 + - Eth196-ASIC8 + ASIC5: + asic_intfs: + - Eth216-ASIC8 + - Eth220-ASIC8 + configuration_properties: + common: + asic_type: BackEnd + ASIC9: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC9 + - Eth172-ASIC9 + ASIC1: + asic_intfs: + - Eth176-ASIC9 + - Eth180-ASIC9 + ASIC2: + asic_intfs: + - Eth152-ASIC9 + - Eth156-ASIC9 + ASIC3: + asic_intfs: + - Eth208-ASIC9 + - Eth212-ASIC9 + ASIC4: + asic_intfs: + - Eth232-ASIC9 + - Eth236-ASIC9 + ASIC5: + asic_intfs: + - Eth240-ASIC9 + - Eth244-ASIC9 + configuration_properties: + common: + asic_type: BackEnd + ASIC10: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC10 + - Eth212-ASIC10 + ASIC1: + asic_intfs: + - Eth232-ASIC10 + - Eth236-ASIC10 + ASIC2: + asic_intfs: + - Eth240-ASIC10 + - Eth244-ASIC10 + ASIC3: + asic_intfs: + - Eth184-ASIC10 + - Eth188-ASIC10 + ASIC4: + asic_intfs: + - Eth192-ASIC10 + - Eth196-ASIC10 + ASIC5: + asic_intfs: + - Eth216-ASIC10 + - Eth220-ASIC10 + configuration_properties: + common: + asic_type: BackEnd + ASIC11: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC11 + - Eth172-ASIC11 + ASIC1: + asic_intfs: + - Eth176-ASIC11 + - Eth180-ASIC11 + ASIC2: + asic_intfs: + - Eth152-ASIC11 + - Eth156-ASIC11 + ASIC3: + asic_intfs: + - Eth208-ASIC11 + - Eth212-ASIC11 + ASIC4: + asic_intfs: + - Eth232-ASIC11 + - Eth236-ASIC11 + ASIC5: + asic_intfs: + - Eth240-ASIC11 + - Eth244-ASIC11 + configuration_properties: + common: + asic_type: BackEnd + ASIC12: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC12 + - Eth212-ASIC12 + ASIC1: + asic_intfs: + - Eth232-ASIC12 + - Eth236-ASIC12 + ASIC2: + asic_intfs: + - Eth240-ASIC12 + - Eth244-ASIC12 + ASIC3: + asic_intfs: + - Eth184-ASIC12 + - Eth188-ASIC12 + ASIC4: + asic_intfs: + - Eth192-ASIC12 + - Eth196-ASIC12 + ASIC5: + asic_intfs: + - Eth216-ASIC12 + - Eth220-ASIC12 + configuration_properties: + common: + asic_type: BackEnd + ASIC13: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC13 + - Eth172-ASIC13 + ASIC1: + asic_intfs: + - Eth176-ASIC13 + - Eth180-ASIC13 + ASIC2: + asic_intfs: + - Eth152-ASIC13 + - Eth156-ASIC13 + ASIC3: + asic_intfs: + - Eth208-ASIC13 + - Eth212-ASIC13 + ASIC4: + asic_intfs: + - Eth232-ASIC13 + - Eth236-ASIC13 + ASIC5: + asic_intfs: + - Eth240-ASIC13 + - Eth244-ASIC13 + configuration_properties: + common: + asic_type: BackEnd + ASIC14: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth208-ASIC14 + - Eth212-ASIC14 + ASIC1: + asic_intfs: + - Eth232-ASIC14 + - Eth236-ASIC14 + ASIC2: + asic_intfs: + - Eth240-ASIC14 + - Eth244-ASIC14 + ASIC3: + asic_intfs: + - Eth184-ASIC14 + - Eth188-ASIC14 + ASIC4: + asic_intfs: + - Eth192-ASIC14 + - Eth196-ASIC14 + ASIC5: + asic_intfs: + - Eth216-ASIC14 + - Eth220-ASIC14 + configuration_properties: + common: + asic_type: BackEnd + ASIC15: + topology: + NEIGH_ASIC: + ASIC0: + asic_intfs: + - Eth168-ASIC15 + - Eth172-ASIC15 + ASIC1: + asic_intfs: + - Eth176-ASIC15 + - Eth180-ASIC15 + ASIC2: + asic_intfs: + - Eth152-ASIC15 + - Eth156-ASIC15 + ASIC3: + asic_intfs: + - Eth208-ASIC15 + - Eth212-ASIC15 + ASIC4: + asic_intfs: + - Eth232-ASIC15 + - Eth236-ASIC15 + ASIC5: + asic_intfs: + - Eth240-ASIC15 + - Eth244-ASIC15 + configuration_properties: + common: + asic_type: BackEnd \ No newline at end of file diff --git a/infra/sonic_t2/topo_t2_2lc_min_ports-ll.yml b/infra/sonic_t2/topo_t2_2lc_min_ports-ll.yml new file mode 100644 index 00000000000..552075ef354 --- /dev/null +++ b/infra/sonic_t2/topo_t2_2lc_min_ports-ll.yml @@ -0,0 +1,286 @@ +topology: + # 3 DUTs - 2 linecards (dut 0, 1) and 1 Supervisor card (dut 2). Each linecard has 2 asics - asic0 and asic1 + # + # - asic0 on linecard dut0 connected to 2 T3 VMs - one on 2 port lag and one on a single routed port + # - asic1 on linecard dut0 connected to 2 T3 VMs - one on 2 port lag and one on a single routed port + # - asic0 on linecard dut1 connected to 2 T1 VMs- one on 2 port lag and one on a single routed port + # - asic1 on linecard dut1 connected to 2 T1 VMs - one on 2 port lag and one on a single routed port + # + # ptf ports are numbered 0-11 + + dut_num: 3 + VMs: + ARISTA01T3: + vlans: + - "0.4@0" + - "0.5@1" + vm_offset: 0 + ARISTA03T3: + vlans: + - "0.8@2" + vm_offset: 1 + ARISTA04T3: + vlans: + - "0.25@3" + - "0.28@4" + vm_offset: 2 + ARISTA06T3: + vlans: + - "0.23@5" + vm_offset: 3 + ARISTA01T1: + vlans: + - "1.2@6" + - "1.3@7" + vm_offset: 4 + ARISTA03T1: + vlans: + - "1.6@8" + vm_offset: 5 + ARISTA04T1: + vlans: + - "1.20@9" + - "1.21@10" + vm_offset: 6 + ARISTA06T1: + vlans: + - "1.28@11" + vm_offset: 7 + DUT: + loopback: + ipv4: + - 10.1.0.1/32 + - 10.1.0.2/32 + ipv6: + - FC00:10::1/128 + - FC00:11::1/128 + +configuration_properties: + common: + podset_number: 2 + tor_number: 2 + tor_subnet_number: 2 + max_tor_subnet_number: 32 + tor_subnet_size: 128 + dut_asn: 65100 + dut_type: SpineRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + core: + swrole: core + leaf: + swrole: leaf + +configuration: + ARISTA01T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + dut_index: 0 + Ethernet2: + lacp: 1 + dut_index: 0 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: FC00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + ipv4: 10.0.0.5/31 + ipv6: FC00::a/126 + dut_index: 0 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA04T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.6 + - FC00::d + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100::4/128 + Ethernet1: + lacp: 1 + dut_index: 0 + Ethernet2: + lacp: 1 + dut_index: 0 + Port-Channel1: + ipv4: 10.0.0.7/31 + ipv6: FC00::e/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::9/64 + + ARISTA06T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.10 + - FC00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100::6/128 + Ethernet1: + ipv4: 10.0.0.11/31 + ipv6: FC00::16/126 + dut_index: 0 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::d/64 + + ARISTA01T1: + properties: + - common + - leaf + bgp: + asn: 65000 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + dut_index: 1 + Ethernet2: + lacp: 1 + dut_index: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: FC00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA03T1: + properties: + - common + - leaf + bgp: + asn: 65001 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + ipv4: 10.0.0.17/31 + ipv6: FC00::22/126 + dut_index: 1 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA04T1: + properties: + - common + - leaf + bgp: + asn: 65002 + peers: + 65100: + - 10.0.0.18 + - FC00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100::a/128 + Ethernet1: + lacp: 1 + dut_index: 1 + Ethernet2: + lacp: 1 + dut_index: 1 + Port-Channel1: + ipv4: 10.0.0.19/31 + ipv6: FC00::26/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::15/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA06T1: + properties: + - common + - leaf + bgp: + asn: 65003 + peers: + 65100: + - 10.0.0.22 + - FC00::2d + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100::c/128 + Ethernet1: + ipv4: 10.0.0.23/31 + ipv6: FC00::2e/126 + dut_index: 1 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::19/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 diff --git a/infra/sonic_t2/topo_t2_2lc_min_ports-masic.yml b/infra/sonic_t2/topo_t2_2lc_min_ports-masic.yml new file mode 100644 index 00000000000..ff543f46a75 --- /dev/null +++ b/infra/sonic_t2/topo_t2_2lc_min_ports-masic.yml @@ -0,0 +1,286 @@ +topology: + # 3 DUTs - 2 linecards (dut 0, 1) and 1 Supervisor card (dut 2). Each linecard has 2 asics - asic0 and asic1 + # + # - asic0 on linecard dut0 connected to 2 T3 VMs - one on 2 port lag and one on a single routed port + # - asic1 on linecard dut0 connected to 2 T3 VMs - one on 2 port lag and one on a single routed port + # - asic0 on linecard dut1 connected to 2 T1 VMs- one on 2 port lag and one on a single routed port + # - asic1 on linecard dut1 connected to 2 T1 VMs - one on 2 port lag and one on a single routed port + # + # ptf ports are numbered 0-11 + + dut_num: 3 + VMs: + ARISTA01T3: + vlans: + - "0.4@0" + - "0.5@1" + vm_offset: 0 + ARISTA03T3: + vlans: + - "0.8@2" + vm_offset: 1 + ARISTA04T3: + vlans: + - "0.25@3" + - "0.28@4" + vm_offset: 2 + ARISTA06T3: + vlans: + - "0.23@5" + vm_offset: 3 + ARISTA01T1: + vlans: + - "1.2@6" + - "1.3@7" + vm_offset: 4 + ARISTA03T1: + vlans: + - "1.6@8" + vm_offset: 5 + ARISTA04T1: + vlans: + - "1.23@9" + - "1.25@10" + vm_offset: 6 + ARISTA06T1: + vlans: + - "1.28@11" + vm_offset: 7 + DUT: + loopback: + ipv4: + - 10.1.0.1/32 + - 10.1.0.2/32 + ipv6: + - FC00:10::1/128 + - FC00:11::1/128 + +configuration_properties: + common: + podset_number: 2 + tor_number: 2 + tor_subnet_number: 2 + max_tor_subnet_number: 32 + tor_subnet_size: 128 + dut_asn: 65100 + dut_type: SpineRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + core: + swrole: core + leaf: + swrole: leaf + +configuration: + ARISTA01T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + dut_index: 0 + Ethernet2: + lacp: 1 + dut_index: 0 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: FC00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + ipv4: 10.0.0.5/31 + ipv6: FC00::a/126 + dut_index: 0 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA04T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.6 + - FC00::d + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100::4/128 + Ethernet1: + lacp: 1 + dut_index: 0 + Ethernet2: + lacp: 1 + dut_index: 0 + Port-Channel1: + ipv4: 10.0.0.7/31 + ipv6: FC00::e/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::9/64 + + ARISTA06T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.10 + - FC00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100::6/128 + Ethernet1: + ipv4: 10.0.0.11/31 + ipv6: FC00::16/126 + dut_index: 0 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::d/64 + + ARISTA01T1: + properties: + - common + - leaf + bgp: + asn: 65000 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + dut_index: 1 + Ethernet2: + lacp: 1 + dut_index: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: FC00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA03T1: + properties: + - common + - leaf + bgp: + asn: 65001 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + ipv4: 10.0.0.17/31 + ipv6: FC00::22/126 + dut_index: 1 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA04T1: + properties: + - common + - leaf + bgp: + asn: 65002 + peers: + 65100: + - 10.0.0.18 + - FC00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100::a/128 + Ethernet1: + lacp: 1 + dut_index: 1 + Ethernet2: + lacp: 1 + dut_index: 1 + Port-Channel1: + ipv4: 10.0.0.19/31 + ipv6: FC00::26/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::15/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA06T1: + properties: + - common + - leaf + bgp: + asn: 65003 + peers: + 65100: + - 10.0.0.22 + - FC00::2d + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100::c/128 + Ethernet1: + ipv4: 10.0.0.23/31 + ipv6: FC00::2e/126 + dut_index: 1 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::19/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 diff --git a/infra/sonic_t2/topo_t2_2lc_min_ports-vl.yml b/infra/sonic_t2/topo_t2_2lc_min_ports-vl.yml new file mode 100644 index 00000000000..552075ef354 --- /dev/null +++ b/infra/sonic_t2/topo_t2_2lc_min_ports-vl.yml @@ -0,0 +1,286 @@ +topology: + # 3 DUTs - 2 linecards (dut 0, 1) and 1 Supervisor card (dut 2). Each linecard has 2 asics - asic0 and asic1 + # + # - asic0 on linecard dut0 connected to 2 T3 VMs - one on 2 port lag and one on a single routed port + # - asic1 on linecard dut0 connected to 2 T3 VMs - one on 2 port lag and one on a single routed port + # - asic0 on linecard dut1 connected to 2 T1 VMs- one on 2 port lag and one on a single routed port + # - asic1 on linecard dut1 connected to 2 T1 VMs - one on 2 port lag and one on a single routed port + # + # ptf ports are numbered 0-11 + + dut_num: 3 + VMs: + ARISTA01T3: + vlans: + - "0.4@0" + - "0.5@1" + vm_offset: 0 + ARISTA03T3: + vlans: + - "0.8@2" + vm_offset: 1 + ARISTA04T3: + vlans: + - "0.25@3" + - "0.28@4" + vm_offset: 2 + ARISTA06T3: + vlans: + - "0.23@5" + vm_offset: 3 + ARISTA01T1: + vlans: + - "1.2@6" + - "1.3@7" + vm_offset: 4 + ARISTA03T1: + vlans: + - "1.6@8" + vm_offset: 5 + ARISTA04T1: + vlans: + - "1.20@9" + - "1.21@10" + vm_offset: 6 + ARISTA06T1: + vlans: + - "1.28@11" + vm_offset: 7 + DUT: + loopback: + ipv4: + - 10.1.0.1/32 + - 10.1.0.2/32 + ipv6: + - FC00:10::1/128 + - FC00:11::1/128 + +configuration_properties: + common: + podset_number: 2 + tor_number: 2 + tor_subnet_number: 2 + max_tor_subnet_number: 32 + tor_subnet_size: 128 + dut_asn: 65100 + dut_type: SpineRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + core: + swrole: core + leaf: + swrole: leaf + +configuration: + ARISTA01T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + dut_index: 0 + Ethernet2: + lacp: 1 + dut_index: 0 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: FC00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + ipv4: 10.0.0.5/31 + ipv6: FC00::a/126 + dut_index: 0 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA04T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.6 + - FC00::d + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100::4/128 + Ethernet1: + lacp: 1 + dut_index: 0 + Ethernet2: + lacp: 1 + dut_index: 0 + Port-Channel1: + ipv4: 10.0.0.7/31 + ipv6: FC00::e/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::9/64 + + ARISTA06T3: + properties: + - common + - core + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.10 + - FC00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100::6/128 + Ethernet1: + ipv4: 10.0.0.11/31 + ipv6: FC00::16/126 + dut_index: 0 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::d/64 + + ARISTA01T1: + properties: + - common + - leaf + bgp: + asn: 65000 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + dut_index: 1 + Ethernet2: + lacp: 1 + dut_index: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: FC00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA03T1: + properties: + - common + - leaf + bgp: + asn: 65001 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + ipv4: 10.0.0.17/31 + ipv6: FC00::22/126 + dut_index: 1 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA04T1: + properties: + - common + - leaf + bgp: + asn: 65002 + peers: + 65100: + - 10.0.0.18 + - FC00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100::a/128 + Ethernet1: + lacp: 1 + dut_index: 1 + Ethernet2: + lacp: 1 + dut_index: 1 + Port-Channel1: + ipv4: 10.0.0.19/31 + ipv6: FC00::26/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::15/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + ARISTA06T1: + properties: + - common + - leaf + bgp: + asn: 65003 + peers: + 65100: + - 10.0.0.22 + - FC00::2d + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100::c/128 + Ethernet1: + ipv4: 10.0.0.23/31 + ipv6: FC00::2e/126 + dut_index: 1 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::19/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 diff --git a/infra/sonic_t2/veos.yml b/infra/sonic_t2/veos.yml new file mode 100755 index 00000000000..a16791eada5 --- /dev/null +++ b/infra/sonic_t2/veos.yml @@ -0,0 +1,26 @@ +- name: Set ansible login user name and password + set_fact: ansible_user="root" ansible_password={{ eos_root_password }} + +- name: Set EOS backplane port name + set_fact: bp_ifname="Ethernet9" + +- name: copy rc.eos + copy: src=rc.eos + dest=/mnt/flash/rc.eos + when: hostname in configuration + notify: + - Update VM state + +- name: copy boot-config + copy: src=boot-config + dest=/mnt/flash/boot-config + when: hostname in configuration + notify: + - Update VM state + +- name: update startup-config + template: src="{{ topo }}-{{ props.swrole }}.j2" + dest=/mnt/flash/startup-config + when: hostname in configuration + notify: + - Update VM state diff --git a/infra/t1_scripts.txt b/infra/t1_scripts.txt new file mode 100644 index 00000000000..dc480f7a3dc --- /dev/null +++ b/infra/t1_scripts.txt @@ -0,0 +1,115 @@ +test_announce_routes.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_pretest.py +test_procdockerstatsd.py +bgp/test_bgp_fact.py +bgp/test_bgp_bbr.py +bgp/test_bgp_multipath_relax.py +bgp/test_bgp_allow_list.py +bgp/test_traffic_shift.py +bgp/test_bgpmon.py +bgp/test_bgp_update_timer.py +#bgp/test_bgp_speaker.py +bgp/test_bgp_gr_helper.py +acl/test_acl.py +#arp/test_arp_dualtor.py +arp/test_arpall.py +arp/test_neighbor_mac.py +arp/test_neighbor_mac_noptf.py +arp/test_wr_arp.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +crm/test_crm.py +#copp/test_copp.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +drop_packets/test_configurable_drop_counters.py +drop_packets/test_drop_counters.py +#ecmp/test_fgnhg.py +#ecn/test_dequeue_ecn.py +#ecn/test_red_accuracy.py +#everflow/test_everflow_ipv6.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#fdb/test_fdb.py +#fdb/test_fdb_mac_expire.py +fib/test_fib.py +iface_namingmode/test_iface_namingmode.py +ipfwd/test_dip_sip.py +#ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +lldp/test_lldp.py +monit/test_monit_status.py +mvrf/test_mgmtvrf.py +#nat/test_dynamic_nat.py +#nat/test_static_nat.py +ntp/test_ntp.py +#pc/test_lag_2.py +#pc/test_po_cleanup.py +#pc/test_po_update.py +#pfc/test_global_pause.py +#pfc/test_pfc_pause_lossless.py +#pfc/test_pfc_pause_lossy.py +#pfc/test_unknown_mac.py +#pfc_asym/test_pfc_asym.py +#pfcwd/test_pfc_config.py +#pfcwd/test_pfcwd_all_port_storm.py +#pfcwd/test_pfcwd_function.py +#pfcwd/test_pfcwd_timer_accuracy.py +#pfcwd/test_pfcwd_warm_reboot.py +platform_tests/test_cont_warm_reboot.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_port_toggle.py +platform_tests/test_reboot.py::test_cold_reboot +platform_tests/test_reboot.py::test_fast_reboot +platform_tests/test_reload_config.py +platform_tests/test_sensors.py +platform_tests/test_sequential_restart.py +platform_tests/test_sfp.py +platform_tests/test_xcvr_info_in_db.py +platform_tests/api/test_chassis.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_module.py +platform_tests/api/test_psu.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_platform.py +portstat/test_portstat.py +#qos/test_buffer.py +#qos/test_pfc_counters.py +#qos/test_pfc_pause.py +#qos/test_qos_sai.py +#read_mac/test_read_mac_metadata.py +route/test_default_route.py +route/test_route_perf.py +#sflow/test_sflow.py +show_techsupport/test_techsupport.py +snmp/test_snmp_cpu.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +sub_port_interfaces/test_sub_port_interfaces.py +syslog/test_syslog.py +system_health/test_system_health.py +tacacs/test_ro_user.py +tacacs/test_rw_user.py +telemetry/test_telemetry.py +#testbed_setup/test_populate_fdb.py +#upgrade_path/test_upgrade_path.py +#vlan/test_vlan.py +test_posttest.py \ No newline at end of file diff --git a/infra/test_lldp_neighbor.patch b/infra/test_lldp_neighbor.patch new file mode 100644 index 00000000000..88f09d74683 --- /dev/null +++ b/infra/test_lldp_neighbor.patch @@ -0,0 +1,36 @@ +diff --git a/sonic-mgmt/tests/lldp/test_lldp.py b/sonic-mgmt/tests/lldp/test_lldp.py +index 0306763a16..02a4fa3d9f 100644 +--- a/sonic-mgmt/tests/lldp/test_lldp.py ++++ b/sonic-mgmt/tests/lldp/test_lldp.py +@@ -40,10 +40,11 @@ def test_lldp(duthosts, enum_rand_one_per_hwsku_frontend_hostname, localhost, + assert v['port']['descr'] == config_facts['DEVICE_NEIGHBOR'][k]['port'] + + +-def test_lldp_neighbor(duthosts, enum_rand_one_per_hwsku_frontend_hostname, localhost, eos, sonic, +- collect_techsupport_all_duts, loganalyzer, enum_frontend_asic_index, tbinfo, request): ++def test_lldp_neighbor(duthosts, enum_rand_one_per_hwsku_frontend_hostname, enum_rand_one_frontend_asic_index, ++ localhost, eos, sonic, collect_techsupport_all_duts, loganalyzer, tbinfo, request): + """ verify LLDP information on neighbors """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] ++ asic = enum_rand_one_frontend_asic_index + + if loganalyzer: + loganalyzer[enum_rand_one_per_hwsku_frontend_hostname].ignore_regex.extend([ +@@ -55,13 +56,13 @@ def test_lldp_neighbor(duthosts, enum_rand_one_per_hwsku_frontend_hostname, loca + ]) + + res = duthost.shell( +- "docker exec -i lldp lldpcli show chassis | grep \"SysDescr:\" | sed -e 's/^\\s*SysDescr:\\s*//g'") ++ "docker exec -i lldp{} lldpcli show chassis | grep \"SysDescr:\" | sed -e 's/^\\s*SysDescr:\\s*//g'".format( ++ '' if asic is None else asic)) + dut_system_description = res['stdout'] + lldpctl_facts = duthost.lldpctl_facts( +- asic_instance_id=enum_frontend_asic_index, ++ asic_instance_id=asic, + skip_interface_pattern_list=["eth0", "Ethernet-BP", "Ethernet-IB"])['ansible_facts'] +- config_facts = duthost.asic_instance(enum_frontend_asic_index).config_facts(host=duthost.hostname, +- source="running")['ansible_facts'] ++ config_facts = duthost.asic_instance(asic).config_facts(host=duthost.hostname, source="running")['ansible_facts'] + if not list(lldpctl_facts['lldpctl'].items()): + pytest.fail("No LLDP neighbors received (lldpctl_facts are empty)") + # We use the MAC of mgmt port to generate chassis ID as LLDPD dose. diff --git a/infra/test_snmp_lldp.patch b/infra/test_snmp_lldp.patch new file mode 100644 index 00000000000..e3665ffe319 --- /dev/null +++ b/infra/test_snmp_lldp.patch @@ -0,0 +1,25 @@ +diff --git a/sonic-mgmt/tests/snmp/test_snmp_lldp.py b/sonic-mgmt/tests/snmp/test_snmp_lldp.py +index 764ad3d26f..eace97278b 100644 +--- a/sonic-mgmt/tests/snmp/test_snmp_lldp.py ++++ b/sonic-mgmt/tests/snmp/test_snmp_lldp.py +@@ -65,12 +65,14 @@ def test_snmp_lldp(duthosts, enum_rand_one_per_hwsku_hostname, localhost, creds_ + assert "No Such Object currently exists" not in v[oid] + + # Check if lldpLocManAddrTable is present +- for k in ['lldpLocManAddrLen', +- 'lldpLocManAddrIfSubtype', +- 'lldpLocManAddrIfId', +- 'lldpLocManAddrOID']: +- assert snmp_facts['snmp_lldp'][k] +- assert "No Such Object currently exists" not in snmp_facts['snmp_lldp'][k] ++ if duthost.facts['modular_chassis'] == "False": ++ # Modular Chassis LCs do not run global lldp service ++ for k in ['lldpLocManAddrLen', ++ 'lldpLocManAddrIfSubtype', ++ 'lldpLocManAddrIfId', ++ 'lldpLocManAddrOID']: ++ assert snmp_facts['snmp_lldp'][k] ++ assert "No Such Object currently exists" not in snmp_facts['snmp_lldp'][k] + + minigraph_lldp_nei = [] + for k, v in list(mg_facts.items()): diff --git a/infra/testbed-lightning-t0.yaml b/infra/testbed-lightning-t0.yaml new file mode 100644 index 00000000000..c07593788fe --- /dev/null +++ b/infra/testbed-lightning-t0.yaml @@ -0,0 +1,381 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - lightning-01 + vars: + hwsku: Cisco-8122-O128S2 + iface_speed: '400000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.198/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + lightning-01: + alias: null + ansible: + ansible_host: 192.168.122.240 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8122-O128S2 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.198/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf lightning + credentials: + password: root + username: root + dut: lightning-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-lightning + ptf_ip: 192.168.122.198/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t0 + vm_base: VM0100 +testbed_config: + alias: lightningtopologyTestbed + name: testbed-lightning-t0 + type: Physical +topology: + lightning-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.171.220 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.18 + VM0101: + ansible_host: 192.168.122.141 + VM0102: + ansible_host: 192.168.122.250 + VM0103: + ansible_host: 192.168.122.236 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/testbed-lightning-t1.yaml b/infra/testbed-lightning-t1.yaml new file mode 100644 index 00000000000..9f8fdbd0d71 --- /dev/null +++ b/infra/testbed-lightning-t1.yaml @@ -0,0 +1,465 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - lightning-01 + vars: + hwsku: Cisco-8122-O128S2 + iface_speed: '400000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.211/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + lightning-01: + alias: null + ansible: + ansible_host: 192.168.122.240 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8122-O128S2 + os: sonic + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.211/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf lightning + credentials: + password: root + username: root + dut: lightning-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-lightning + ptf_ip: 192.168.122.211/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t1 + vm_base: VM0100 +testbed_config: + alias: lightningTestbed + name: testbed-lightning-t1 + type: Physical +topology: + lightning-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.88.23.69 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.21 + VM0101: + ansible_host: 192.168.122.191 + VM0102: + ansible_host: 192.168.122.212 + VM0103: + ansible_host: 192.168.122.34 + VM0104: + ansible_host: 192.168.122.141 + VM0105: + ansible_host: 192.168.122.188 + VM0106: + ansible_host: 192.168.122.221 + VM0107: + ansible_host: 192.168.122.105 + VM0108: + ansible_host: 192.168.122.96 + VM0109: + ansible_host: 192.168.122.112 + VM0110: + ansible_host: 192.168.122.65 + VM0111: + ansible_host: 192.168.122.195 + VM0112: + ansible_host: 192.168.122.29 + VM0113: + ansible_host: 192.168.122.218 + VM0114: + ansible_host: 192.168.122.217 + VM0115: + ansible_host: 192.168.122.68 + VM0116: + ansible_host: 192.168.122.100 + VM0117: + ansible_host: 192.168.122.119 + VM0118: + ansible_host: 192.168.122.27 + VM0119: + ansible_host: 192.168.122.213 + VM0120: + ansible_host: 192.168.122.228 + VM0121: + ansible_host: 192.168.122.88 + VM0122: + ansible_host: 192.168.122.102 + VM0123: + ansible_host: 192.168.122.215 + VM0124: + ansible_host: 192.168.122.214 + VM0125: + ansible_host: 192.168.122.58 + VM0126: + ansible_host: 192.168.122.162 + VM0127: + ansible_host: 192.168.122.117 + VM0128: + ansible_host: 192.168.122.97 + VM0129: + ansible_host: 192.168.122.76 + VM0130: + ansible_host: 192.168.122.10 + VM0131: + ansible_host: 192.168.122.33 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/testbed-mustang-t0.yaml b/infra/testbed-mustang-t0.yaml new file mode 100755 index 00000000000..d247f95350f --- /dev/null +++ b/infra/testbed-mustang-t0.yaml @@ -0,0 +1,573 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mustang-01 + vars: + hwsku: Cisco-8223-64EF-MO + iface_speed: '800000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.64/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: cisco123 + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: cisco123 + ansible_ssh_user: vxr + sonicadmin_initial_password: cisco123 + sonicadmin_password: cisco123 + sonicadmin_user: cisco + credentials: + password: cisco123 + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + mustang-01: + alias: null + ansible: + ansible_host: 192.168.122.220 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8223-64EF-MO + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.64/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf mustang + credentials: + password: root + username: root + dut: mustang-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-mustang + ptf_ip: 192.168.122.64/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t0 + vm_base: VM0100 +testbed_config: + alias: mustangtopologyTestbed + name: testbed-mustang-t0 + type: Physical +topology: + mustang-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet128: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/32 + VlanID: 2032 + VlanMode: Access + Ethernet132: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/33 + VlanID: 2033 + VlanMode: Access + Ethernet136: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/34 + VlanID: 2034 + VlanMode: Access + Ethernet140: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/35 + VlanID: 2035 + VlanMode: Access + Ethernet144: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/36 + VlanID: 2036 + VlanMode: Access + Ethernet148: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/37 + VlanID: 2037 + VlanMode: Access + Ethernet152: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/38 + VlanID: 2038 + VlanMode: Access + Ethernet156: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/39 + VlanID: 2039 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/40 + VlanID: 2040 + VlanMode: Access + Ethernet164: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/41 + VlanID: 2041 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/42 + VlanID: 2042 + VlanMode: Access + Ethernet172: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/43 + VlanID: 2043 + VlanMode: Access + Ethernet176: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/44 + VlanID: 2044 + VlanMode: Access + Ethernet180: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/45 + VlanID: 2045 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/46 + VlanID: 2046 + VlanMode: Access + Ethernet188: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/47 + VlanID: 2047 + VlanMode: Access + Ethernet192: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/48 + VlanID: 2048 + VlanMode: Access + Ethernet196: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/49 + VlanID: 2049 + VlanMode: Access + Ethernet20: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/50 + VlanID: 2050 + VlanMode: Access + Ethernet204: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/51 + VlanID: 2051 + VlanMode: Access + Ethernet208: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/52 + VlanID: 2052 + VlanMode: Access + Ethernet212: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/53 + VlanID: 2053 + VlanMode: Access + Ethernet216: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/54 + VlanID: 2054 + VlanMode: Access + Ethernet220: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/55 + VlanID: 2055 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/56 + VlanID: 2056 + VlanMode: Access + Ethernet228: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/57 + VlanID: 2057 + VlanMode: Access + Ethernet232: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/58 + VlanID: 2058 + VlanMode: Access + Ethernet236: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/59 + VlanID: 2059 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet240: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/60 + VlanID: 2060 + VlanMode: Access + Ethernet244: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/61 + VlanID: 2061 + VlanMode: Access + Ethernet248: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/62 + VlanID: 2062 + VlanMode: Access + Ethernet252: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/63 + VlanID: 2063 + VlanMode: Access + Ethernet28: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.88.23.66 + vm_host_ansible: + ansible_password: cisco123 + ansible_sudo_pass: cisco123 + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.38 + VM0101: + ansible_host: 192.168.122.134 + VM0102: + ansible_host: 192.168.122.135 + VM0103: + ansible_host: 192.168.122.167 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/testbed-mustang-t1.yaml b/infra/testbed-mustang-t1.yaml new file mode 100644 index 00000000000..f87c18d923d --- /dev/null +++ b/infra/testbed-mustang-t1.yaml @@ -0,0 +1,465 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - mustang-01 + vars: + hwsku: Cisco-8223-64EF-MO + iface_speed: '800000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.183/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: cisco123 + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: cisco123 + ansible_ssh_user: vxr + sonicadmin_initial_password: cisco123 + sonicadmin_password: cisco123 + sonicadmin_user: cisco + credentials: + password: cisco123 + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + mustang-01: + alias: null + ansible: + ansible_host: 192.168.122.33 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8223-64EF-MO + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.183/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf mustang + credentials: + password: root + username: root + dut: mustang-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-mustang + ptf_ip: 192.168.122.183/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t1 + vm_base: VM0100 +testbed_config: + alias: mustangTestbed + name: testbed-mustang-t1 + type: Physical +topology: + mustang-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.172.177 + vm_host_ansible: + ansible_password: cisco123 + ansible_sudo_pass: cisco123 + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.244 + VM0101: + ansible_host: 192.168.122.178 + VM0102: + ansible_host: 192.168.122.158 + VM0103: + ansible_host: 192.168.122.117 + VM0104: + ansible_host: 192.168.122.144 + VM0105: + ansible_host: 192.168.122.47 + VM0106: + ansible_host: 192.168.122.110 + VM0107: + ansible_host: 192.168.122.25 + VM0108: + ansible_host: 192.168.122.44 + VM0109: + ansible_host: 192.168.122.236 + VM0110: + ansible_host: 192.168.122.247 + VM0111: + ansible_host: 192.168.122.148 + VM0112: + ansible_host: 192.168.122.34 + VM0113: + ansible_host: 192.168.122.184 + VM0114: + ansible_host: 192.168.122.241 + VM0115: + ansible_host: 192.168.122.66 + VM0116: + ansible_host: 192.168.122.50 + VM0117: + ansible_host: 192.168.122.6 + VM0118: + ansible_host: 192.168.122.60 + VM0119: + ansible_host: 192.168.122.12 + VM0120: + ansible_host: 192.168.122.161 + VM0121: + ansible_host: 192.168.122.26 + VM0122: + ansible_host: 192.168.122.32 + VM0123: + ansible_host: 192.168.122.61 + VM0124: + ansible_host: 192.168.122.90 + VM0125: + ansible_host: 192.168.122.196 + VM0126: + ansible_host: 192.168.122.46 + VM0127: + ansible_host: 192.168.122.89 + VM0128: + ansible_host: 192.168.122.97 + VM0129: + ansible_host: 192.168.122.173 + VM0130: + ansible_host: 192.168.122.45 + VM0131: + ansible_host: 192.168.122.35 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/testbed-siren-t0.yaml b/infra/testbed-siren-t0.yaml new file mode 100644 index 00000000000..fdd8322f715 --- /dev/null +++ b/infra/testbed-siren-t0.yaml @@ -0,0 +1,381 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - siren-01 + vars: + hwsku: Cisco-HF6100-60S4D + iface_speed: '100000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.160/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + siren-01: + alias: null + ansible: + ansible_host: 192.168.122.84 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-HF6100-60S4D + os: sonic + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.160/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf siren + credentials: + password: root + username: root + dut: siren-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-siren + ptf_ip: 192.168.122.160/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t0 + vm_base: VM0100 +testbed_config: + alias: sirentopologyTestbed + name: testbed-siren-t0 + type: Physical +topology: + siren-01: + interfaces: + Ethernet1_1: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet1_10: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet1_11: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet1_12: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet1_13: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet1_14: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet1_15: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet1_16: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet1_17: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet1_18: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet1_19: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet1_2: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet1_20: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet1_21: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet1_22: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet1_23: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet1_24: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet1_25: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access + Ethernet1_26: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet1_27: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet1_28: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet1_29: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet1_3: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet1_30: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet1_31: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet1_32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet1_4: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet1_5: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet1_6: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet1_7: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet1_8: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet1_9: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.171.220 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.81 + VM0101: + ansible_host: 192.168.122.150 + VM0102: + ansible_host: 192.168.122.5 + VM0103: + ansible_host: 192.168.122.75 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/testbed-siren-t1.yaml b/infra/testbed-siren-t1.yaml new file mode 100644 index 00000000000..24fad2fef83 --- /dev/null +++ b/infra/testbed-siren-t1.yaml @@ -0,0 +1,465 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - siren-01 + vars: + hwsku: Cisco-HF6100-60S4D + iface_speed: '100000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.229/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + siren-01: + alias: null + ansible: + ansible_host: 192.168.122.102 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-HF6100-60S4D + os: sonic + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.229/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test sonic vs gb + credentials: + password: root + username: root + dut: siren-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-siren + ptf_ip: 192.168.122.229/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t1 + vm_base: VM0100 +testbed_config: + alias: sonicvstopologyTestbed + name: testbed-siren-t1 + type: Physical +topology: + siren-01: + interfaces: + Ethernet1_1: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2000 + VlanMode: Access + Ethernet1_10: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2009 + VlanMode: Access + Ethernet1_11: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2010 + VlanMode: Access + Ethernet1_12: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2011 + VlanMode: Access + Ethernet1_13: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2012 + VlanMode: Access + Ethernet1_14: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2013 + VlanMode: Access + Ethernet1_15: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2014 + VlanMode: Access + Ethernet1_16: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2015 + VlanMode: Access + Ethernet1_17: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2016 + VlanMode: Access + Ethernet1_18: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2017 + VlanMode: Access + Ethernet1_19: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2018 + VlanMode: Access + Ethernet1_2: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2001 + VlanMode: Access + Ethernet1_20: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2019 + VlanMode: Access + Ethernet1_21: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2020 + VlanMode: Access + Ethernet1_22: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2021 + VlanMode: Access + Ethernet1_23: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2022 + VlanMode: Access + Ethernet1_24: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2023 + VlanMode: Access + Ethernet1_25: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2024 + VlanMode: Access + Ethernet1_26: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2025 + VlanMode: Access + Ethernet1_27: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2026 + VlanMode: Access + Ethernet1_28: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2027 + VlanMode: Access + Ethernet1_29: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2028 + VlanMode: Access + Ethernet1_3: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2002 + VlanMode: Access + Ethernet1_30: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2029 + VlanMode: Access + Ethernet1_31: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2030 + VlanMode: Access + Ethernet1_32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2031 + VlanMode: Access + Ethernet1_4: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2003 + VlanMode: Access + Ethernet1_5: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2004 + VlanMode: Access + Ethernet1_6: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2005 + VlanMode: Access + Ethernet1_7: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2006 + VlanMode: Access + Ethernet1_8: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2007 + VlanMode: Access + Ethernet1_9: + Bandwidth: 10000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2008 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.88.23.52 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.84 + VM0101: + ansible_host: 192.168.122.103 + VM0102: + ansible_host: 192.168.122.213 + VM0103: + ansible_host: 192.168.122.13 + VM0104: + ansible_host: 192.168.122.49 + VM0105: + ansible_host: 192.168.122.30 + VM0106: + ansible_host: 192.168.122.27 + VM0107: + ansible_host: 192.168.122.113 + VM0108: + ansible_host: 192.168.122.100 + VM0109: + ansible_host: 192.168.122.35 + VM0110: + ansible_host: 192.168.122.147 + VM0111: + ansible_host: 192.168.122.111 + VM0112: + ansible_host: 192.168.122.2 + VM0113: + ansible_host: 192.168.122.105 + VM0114: + ansible_host: 192.168.122.149 + VM0115: + ansible_host: 192.168.122.58 + VM0116: + ansible_host: 192.168.122.121 + VM0117: + ansible_host: 192.168.122.32 + VM0118: + ansible_host: 192.168.122.234 + VM0119: + ansible_host: 192.168.122.44 + VM0120: + ansible_host: 192.168.122.219 + VM0121: + ansible_host: 192.168.122.195 + VM0122: + ansible_host: 192.168.122.54 + VM0123: + ansible_host: 192.168.122.148 + VM0124: + ansible_host: 192.168.122.120 + VM0125: + ansible_host: 192.168.122.217 + VM0126: + ansible_host: 192.168.122.172 + VM0127: + ansible_host: 192.168.122.173 + VM0128: + ansible_host: 192.168.122.191 + VM0129: + ansible_host: 192.168.122.169 + VM0130: + ansible_host: 192.168.122.87 + VM0131: + ansible_host: 192.168.122.46 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/testbed-superbolt-t0.yaml b/infra/testbed-superbolt-t0.yaml new file mode 100644 index 00000000000..02fc6ea4afa --- /dev/null +++ b/infra/testbed-superbolt-t0.yaml @@ -0,0 +1,381 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - superbolt-01 + vars: + hwsku: Cisco-8122-O128S2 + iface_speed: '400000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.218/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + superbolt-01: + alias: null + ansible: + ansible_host: 192.168.122.222 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8122-O128S2 + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.218/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf superbolt + credentials: + password: root + username: root + dut: superbolt-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-superbolt + ptf_ip: 192.168.122.218/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t0 + vm_base: VM0100 +testbed_config: + alias: superbolttopologyTestbed + name: testbed-superbolt-t0 + type: Physical +topology: + superbolt-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.171.129 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.101 + VM0101: + ansible_host: 192.168.122.246 + VM0102: + ansible_host: 192.168.122.242 + VM0103: + ansible_host: 192.168.122.105 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/testbed-superbolt-t1.yaml b/infra/testbed-superbolt-t1.yaml new file mode 100644 index 00000000000..68ff3c022bf --- /dev/null +++ b/infra/testbed-superbolt-t1.yaml @@ -0,0 +1,465 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - superbolt-01 + vars: + hwsku: Cisco-8122-O128S2 + iface_speed: '400000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.162/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + superbolt-01: + alias: null + ansible: + ansible_host: 192.168.122.117 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8122-O128S2 + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.162/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf superbolt + credentials: + password: root + username: root + dut: superbolt-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-superbolt + ptf_ip: 192.168.122.162/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t1 + vm_base: VM0100 +testbed_config: + alias: superboltTestbed + name: testbed-superbolt-t1 + type: Physical +topology: + superbolt-01: + interfaces: + Ethernet0: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 100000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.172.173 + vm_host_ansible: + ansible_password: password + ansible_sudo_pass: password + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.3 + VM0101: + ansible_host: 192.168.122.141 + VM0102: + ansible_host: 192.168.122.52 + VM0103: + ansible_host: 192.168.122.24 + VM0104: + ansible_host: 192.168.122.244 + VM0105: + ansible_host: 192.168.122.252 + VM0106: + ansible_host: 192.168.122.189 + VM0107: + ansible_host: 192.168.122.10 + VM0108: + ansible_host: 192.168.122.77 + VM0109: + ansible_host: 192.168.122.92 + VM0110: + ansible_host: 192.168.122.228 + VM0111: + ansible_host: 192.168.122.9 + VM0112: + ansible_host: 192.168.122.11 + VM0113: + ansible_host: 192.168.122.53 + VM0114: + ansible_host: 192.168.122.65 + VM0115: + ansible_host: 192.168.122.104 + VM0116: + ansible_host: 192.168.122.232 + VM0117: + ansible_host: 192.168.122.157 + VM0118: + ansible_host: 192.168.122.95 + VM0119: + ansible_host: 192.168.122.7 + VM0120: + ansible_host: 192.168.122.212 + VM0121: + ansible_host: 192.168.122.200 + VM0122: + ansible_host: 192.168.122.44 + VM0123: + ansible_host: 192.168.122.235 + VM0124: + ansible_host: 192.168.122.94 + VM0125: + ansible_host: 192.168.122.68 + VM0126: + ansible_host: 192.168.122.173 + VM0127: + ansible_host: 192.168.122.152 + VM0128: + ansible_host: 192.168.122.49 + VM0129: + ansible_host: 192.168.122.207 + VM0130: + ansible_host: 192.168.122.38 + VM0131: + ansible_host: 192.168.122.63 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/testbed-titan-t0.yaml b/infra/testbed-titan-t0.yaml new file mode 100644 index 00000000000..397716068e4 --- /dev/null +++ b/infra/testbed-titan-t0.yaml @@ -0,0 +1,573 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - titan-01 + vars: + hwsku: Cisco-8223-64E-MO + iface_speed: '800000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.64/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + titan-01: + alias: null + ansible: + ansible_host: 192.168.122.220 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8223-64E-MO + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.64/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf titan + credentials: + password: root + username: root + dut: titan-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-titan + ptf_ip: 192.168.122.64/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t0 + vm_base: VM0100 +testbed_config: + alias: titantopologyTestbed + name: testbed-titan-t0 + type: Physical +topology: + titan-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/0 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/25 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/26 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/27 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/28 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/29 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/3 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/30 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/31 + VlanID: 2031 + VlanMode: Access + Ethernet128: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/32 + VlanID: 2032 + VlanMode: Access + Ethernet132: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/33 + VlanID: 2033 + VlanMode: Access + Ethernet136: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/34 + VlanID: 2034 + VlanMode: Access + Ethernet140: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/35 + VlanID: 2035 + VlanMode: Access + Ethernet144: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/36 + VlanID: 2036 + VlanMode: Access + Ethernet148: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/37 + VlanID: 2037 + VlanMode: Access + Ethernet152: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/38 + VlanID: 2038 + VlanMode: Access + Ethernet156: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/39 + VlanID: 2039 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/4 + VlanID: 2004 + VlanMode: Access + Ethernet160: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/40 + VlanID: 2040 + VlanMode: Access + Ethernet164: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/41 + VlanID: 2041 + VlanMode: Access + Ethernet168: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/42 + VlanID: 2042 + VlanMode: Access + Ethernet172: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/43 + VlanID: 2043 + VlanMode: Access + Ethernet176: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/44 + VlanID: 2044 + VlanMode: Access + Ethernet180: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/45 + VlanID: 2045 + VlanMode: Access + Ethernet184: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/46 + VlanID: 2046 + VlanMode: Access + Ethernet188: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/47 + VlanID: 2047 + VlanMode: Access + Ethernet192: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/48 + VlanID: 2048 + VlanMode: Access + Ethernet196: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/49 + VlanID: 2049 + VlanMode: Access + Ethernet20: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/5 + VlanID: 2005 + VlanMode: Access + Ethernet200: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/50 + VlanID: 2050 + VlanMode: Access + Ethernet204: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/51 + VlanID: 2051 + VlanMode: Access + Ethernet208: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/52 + VlanID: 2052 + VlanMode: Access + Ethernet212: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/53 + VlanID: 2053 + VlanMode: Access + Ethernet216: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/54 + VlanID: 2054 + VlanMode: Access + Ethernet220: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/55 + VlanID: 2055 + VlanMode: Access + Ethernet224: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/56 + VlanID: 2056 + VlanMode: Access + Ethernet228: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/57 + VlanID: 2057 + VlanMode: Access + Ethernet232: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/58 + VlanID: 2058 + VlanMode: Access + Ethernet236: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/59 + VlanID: 2059 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/6 + VlanID: 2006 + VlanMode: Access + Ethernet240: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/60 + VlanID: 2060 + VlanMode: Access + Ethernet244: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/61 + VlanID: 2061 + VlanMode: Access + Ethernet248: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/62 + VlanID: 2062 + VlanMode: Access + Ethernet252: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/63 + VlanID: 2063 + VlanMode: Access + Ethernet28: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/7 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/8 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/9 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/10 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/11 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/12 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/13 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/14 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/15 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/16 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/17 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/18 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/19 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/2 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/20 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/21 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/22 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/23 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1/24 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.88.23.66 + vm_host_ansible: + ansible_password: cisco123 + ansible_sudo_pass: cisco123 + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.38 + VM0101: + ansible_host: 192.168.122.134 + VM0102: + ansible_host: 192.168.122.135 + VM0103: + ansible_host: 192.168.122.167 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 diff --git a/infra/testbed-titan-t1.yaml b/infra/testbed-titan-t1.yaml new file mode 100644 index 00000000000..25c8cc41122 --- /dev/null +++ b/infra/testbed-titan-t1.yaml @@ -0,0 +1,465 @@ +device_groups: + fanout: + children: + - fanout_cisco + fanout_cisco: + host: + - nexus-5 + lab: + children: + - sonic + - fanout + vars: + mgmt_subnet_mask_length: '24' + ptf: + host: + - docker-ptf + sonic: + children: + - sonic_cisco + sonic_cisco: + host: + - titan-01 + vars: + hwsku: Cisco-8223-64E-MO + iface_speed: '800000' +devices: + docker-ptf: + ansible: + ansible_host: 192.168.122.183/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + credentials: + password: root + username: root + device_type: blank + hwsku: null + nexus-5: + alias: null + ansible: + ansible_host: 10.251.0.13/23 + ansible_ssh_pass: password + ansible_ssh_user: user + fanout_sonic_password: password + fanout_sonic_user: admin + credentials: + password: null + username: null + device_type: FanoutLeaf + hwsku: Arista-7260QX-64 + str-acs-serv-01: + alias: null + ansible: + ansible_become_pass: password + ansible_host: 172.17.0.1/23 + ansible_ssh_pass: password + ansible_ssh_user: vxr + sonicadmin_initial_password: password + sonicadmin_password: password + sonicadmin_user: admin + credentials: + password: password + username: vxr + device_type: server + hwsku: TestServ + mgmt_subnet_mask_length: '24' + titan-01: + alias: null + ansible: + ansible_host: 192.168.122.33 + ansible_ssh_pass: password + ansible_ssh_user: admin + credentials: + enable_password: password + password: password + username: admin + device_type: DevSonic + hwsku: Cisco-8223-64E-MO + os: sonic +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 + docker_registry_password: sonic + docker_registry_username: 1dafc8d7-d19c-4f58-8653-e8d904f30dab +host_vars: + str-acs-serv-01: + external_port: eth0 + mgmt_bridge: br1 + mgmt_gw: 172.17.0.1 + mgmt_prefixlen: 24 +testbed: + docker-ptf: + ansible: + ansible_host: 192.168.122.183/24 + ansible_hostv6: fc0b::1/64 + ansible_ssh_pass: root + ansible_ssh_user: root + comment: Test ptf titan + credentials: + password: root + username: root + dut: titan-01 + group-name: sonic_cisco + ptf: docker-ptf + ptf_image_name: docker-ptf-titan + ptf_ip: 192.168.122.183/24 + ptf_ipv6: fc0b::1/64 + server: server_1 + topo: t1 + vm_base: VM0100 +testbed_config: + alias: titanTestbed + name: testbed-titan-t1 + type: Physical +topology: + titan-01: + interfaces: + Ethernet0: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2000 + VlanMode: Access + Ethernet100: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2025 + VlanMode: Access + Ethernet104: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2026 + VlanMode: Access + Ethernet108: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2027 + VlanMode: Access + Ethernet112: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2028 + VlanMode: Access + Ethernet116: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2029 + VlanMode: Access + Ethernet12: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2003 + VlanMode: Access + Ethernet120: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2030 + VlanMode: Access + Ethernet124: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2031 + VlanMode: Access + Ethernet16: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2004 + VlanMode: Access + Ethernet20: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2005 + VlanMode: Access + Ethernet24: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2006 + VlanMode: Access + Ethernet28: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2007 + VlanMode: Access + Ethernet32: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2008 + VlanMode: Access + Ethernet36: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2009 + VlanMode: Access + Ethernet4: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2001 + VlanMode: Access + Ethernet40: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2010 + VlanMode: Access + Ethernet44: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2011 + VlanMode: Access + Ethernet48: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2012 + VlanMode: Access + Ethernet52: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2013 + VlanMode: Access + Ethernet56: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2014 + VlanMode: Access + Ethernet60: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2015 + VlanMode: Access + Ethernet64: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2016 + VlanMode: Access + Ethernet68: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2017 + VlanMode: Access + Ethernet72: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2018 + VlanMode: Access + Ethernet76: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2019 + VlanMode: Access + Ethernet8: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2002 + VlanMode: Access + Ethernet80: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2020 + VlanMode: Access + Ethernet84: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2021 + VlanMode: Access + Ethernet88: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2022 + VlanMode: Access + Ethernet92: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2023 + VlanMode: Access + Ethernet96: + Bandwidth: 400000 + EndDevice: nexus-5 + EndPort: Ethernet1 + VlanID: 2024 + VlanMode: Access +veos: + cd_image_filename: Aboot-veos-serial-8.0.0.iso + credentials: + password: 123456 + username: admin + eos_ansible: + ansible_password: 123456 + ansible_user: admin + hdd_image_filename: vEOS-lab-4.20.15M.vmdk + max_fp_num: 4 + memory: 2097152 + proxy_env: + http_proxy: http://173.36.224.108:80 + https_proxy: http://173.36.224.108:80 + root_path: /home/azure/veos-vm + skip_image_downloading: false + vm_console_base: 7000 + vm_host_1: + STR-ACS-SERV-01: + ansible_host: 10.89.172.177 + vm_host_ansible: + ansible_password: cisco123 + ansible_sudo_pass: cisco123 + ansible_user: vxr + vm_images_url: https://acsbe.blob.core.windows.net/vmimages + vms_1: + VM0100: + ansible_host: 192.168.122.244 + VM0101: + ansible_host: 192.168.122.178 + VM0102: + ansible_host: 192.168.122.158 + VM0103: + ansible_host: 192.168.122.117 + VM0104: + ansible_host: 192.168.122.144 + VM0105: + ansible_host: 192.168.122.47 + VM0106: + ansible_host: 192.168.122.110 + VM0107: + ansible_host: 192.168.122.25 + VM0108: + ansible_host: 192.168.122.44 + VM0109: + ansible_host: 192.168.122.236 + VM0110: + ansible_host: 192.168.122.247 + VM0111: + ansible_host: 192.168.122.148 + VM0112: + ansible_host: 192.168.122.34 + VM0113: + ansible_host: 192.168.122.184 + VM0114: + ansible_host: 192.168.122.241 + VM0115: + ansible_host: 192.168.122.66 + VM0116: + ansible_host: 192.168.122.50 + VM0117: + ansible_host: 192.168.122.6 + VM0118: + ansible_host: 192.168.122.60 + VM0119: + ansible_host: 192.168.122.12 + VM0120: + ansible_host: 192.168.122.161 + VM0121: + ansible_host: 192.168.122.26 + VM0122: + ansible_host: 192.168.122.32 + VM0123: + ansible_host: 192.168.122.61 + VM0124: + ansible_host: 192.168.122.90 + VM0125: + ansible_host: 192.168.122.196 + VM0126: + ansible_host: 192.168.122.46 + VM0127: + ansible_host: 192.168.122.89 + VM0128: + ansible_host: 192.168.122.97 + VM0129: + ansible_host: 192.168.122.173 + VM0130: + ansible_host: 192.168.122.45 + VM0131: + ansible_host: 192.168.122.35 +veos_groups: + eos: + children: + - vms_1 + server_1: + children: + - vm_host_1 + - vms_1 + vars: + host_var_file: host_vars/STR-ACS-SERV-01.yml + servers: + children: + - server_1 + vars: + topologies: + - t1 + - t1-lag + - t1-64-lag + - t1-64-lag-clet + - t0 + - t0-56 + - t0-52 + - ptf32 + - ptf64 + - t0-64 + - t0-64-32 + - t0-116 + vm_host: + children: + - vm_host_1 + vm_host_1: + host: + - STR-ACS-SERV-01 + vms_1: + host: + - VM0100 + - VM0101 + - VM0102 + - VM0103 + - VM0104 + - VM0105 + - VM0106 + - VM0107 + - VM0108 + - VM0109 + - VM0110 + - VM0111 + - VM0112 + - VM0113 + - VM0114 + - VM0115 + - VM0116 + - VM0117 + - VM0118 + - VM0119 + - VM0120 + - VM0121 + - VM0122 + - VM0123 + - VM0124 + - VM0125 + - VM0126 + - VM0127 + - VM0128 + - VM0129 + - VM0130 + - VM0131 diff --git a/infra/testcases.txt b/infra/testcases.txt new file mode 100644 index 00000000000..56347b2ef08 --- /dev/null +++ b/infra/testcases.txt @@ -0,0 +1,119 @@ +test_announce_routes.py +test_features.py +test_interfaces.py +test_nbr_health.py +test_pretest.py +test_procdockerstatsd.py +test_posttest.py +bgp/test_bgp_fact.py +bgp/test_traffic_shift.py +bgp/test_bgpmon.py +bgp/test_bgp_update_timer.py +bgp/test_bgp_speaker.py +bgp/test_bgp_gr_helper.py +bgp/bgp_monitor_dump.py +acl/test_acl.py +arp/test_arp_dualtor.py +arp/test_arpall.py +arp/test_neighbor_mac.py +arp/test_neighbor_mac_noptf.py +arp/test_wr_arp.py +cacl/test_cacl_application.py +cacl/test_cacl_function.py +copp/test_copp.py +decap/test_decap.py +dhcp_relay/test_dhcp_pkt_fwd.py +dhcp_relay/test_dhcp_relay.py +drop_packets/test_configurable_drop_counters.py +drop_packets/test_drop_counters.py +#ecmp/test_fgnhg.py +#ecn/test_dequeue_ecn.py +#ecn/test_red_accuracy.py +#everflow/test_everflow_ipv6.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#everflow/test_everflow_testbed.py +#fdb/test_fdb.py +#fdb/test_fdb_mac_expire.py +fib/test_fib.py +iface_namingmode/test_iface_namingmode.py +ipfwd/test_dip_sip.py +#ipfwd/test_dir_bcast.py +ipfwd/test_mtu.py +lldp/test_lldp.py +monit/test_monit_status.py +mvrf/test_mgmtvrf.py +mvrf/test_mgmtvrf.py +mvrf/test_mgmtvrf.py +mvrf/test_mgmtvrf.py +#nat/test_dynamic_nat.py +#nat/test_static_nat.py +ntp/test_ntp.py +#pc/test_lag_2.py +#pc/test_po_cleanup.py +#pc/test_po_update.py +#pfc/test_global_pause.py +#pfc/test_pfc_pause_lossless.py +#pfc/test_pfc_pause_lossy.py +#pfc/test_unknown_mac.py +#pfc_asym/test_pfc_asym.py +#pfcwd/test_pfc_config.py +#pfcwd/test_pfcwd_all_port_storm.py +#pfcwd/test_pfcwd_function.py +#pfcwd/test_pfcwd_timer_accuracy.py +#pfcwd/test_pfcwd_warm_reboot.py +platform_tests/test_cont_warm_reboot.py +platform_tests/test_cpu_memory_usage.py +platform_tests/test_platform_info.py +platform_tests/test_port_toggle.py +platform_tests/test_reboot.py::test_cold_reboot +platform_tests/test_reboot.py::test_fast_reboot +platform_tests/test_reload_config.py +platform_tests/test_sensors.py +platform_tests/test_sequential_restart.py +platform_tests/test_sfp.py +platform_tests/test_xcvr_info_in_db.py +platform_tests/api/test_chassis.py +platform_tests/api/test_chassis_fans.py +platform_tests/api/test_component.py +platform_tests/api/test_fan_drawer.py +platform_tests/api/test_fan_drawer_fans.py +platform_tests/api/test_module.py +platform_tests/api/test_psu.py +platform_tests/api/test_psu_fans.py +platform_tests/api/test_sfp.py +platform_tests/api/test_thermal.py +platform_tests/api/test_watchdog.py +platform_tests/cli/test_show_platform.py +portstat/test_portstat.py +#qos/test_buffer.py +#qos/test_pfc_counters.py +#qos/test_pfc_pause.py +#qos/test_qos_sai.py +#read_mac/test_read_mac_metadata.py +route/test_default_route.py +route/test_route_perf.py +#sflow/test_sflow.py +#sflow/test_sflow.py +#sflow/test_sflow.py +#sflow/test_sflow.py +#sflow/test_sflow.py +show_techsupport/test_techsupport.py +snmp/test_snmp_cpu.py +snmp/test_snmp_interfaces.py +snmp/test_snmp_lldp.py +snmp/test_snmp_loopback.py +snmp/test_snmp_pfc_counters.py +snmp/test_snmp_phy_entity.py +snmp/test_snmp_psu.py +snmp/test_snmp_queue.py +sub_port_interfaces/test_sub_port_interfaces.py +syslog/test_syslog.py +system_health/test_system_health.py +tacacs/test_ro_user.py +tacacs/test_rw_user.py +telemetry/test_telemetry.py +#testbed_setup/test_populate_fdb.py +#upgrade_path/test_upgrade_path.py +#vlan/test_vlan.py \ No newline at end of file diff --git a/infra/topo_and_platform_to_filename_map.json b/infra/topo_and_platform_to_filename_map.json new file mode 100644 index 00000000000..56df928fd72 --- /dev/null +++ b/infra/topo_and_platform_to_filename_map.json @@ -0,0 +1,318 @@ +{ + "t0-t1-4d": { + "mth32": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_4d_single_link.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4d_single_link.yaml" + } + }, + "t0-t1-5d-carib": { + "mth32": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_stc_Carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_5d.yaml" + } + }, + "t0-t1-5d-spt": { + "mth32": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_stc.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_5d.yaml" + } + }, + "t0-t1-5d-ixia": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_lightning.yaml" + }, + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_cmono.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_cmono.yaml" + }, + "mth32": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_mathilda.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_cmono.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_laguna.yaml" + }, + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_mathilda.yaml" + } + }, + "t0-t1-5d-ixia_dhcp_relay": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_lightning.yaml" + }, + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_cmono.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_cmono.yaml" + }, + "mth32": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_mathilda.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_cmono.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_laguna.yaml" + }, + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_4D_ixia_mathilda.yaml" + } + }, + "t0-t1-5d-ixia_evpn_mh": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning_MH.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_EVPN_MH_lightning.yaml" + }, + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_cmono.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_EVPN_MH.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_EVPN_MH.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna_MH.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_EVPN_MH_laguna.yaml" + }, + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda_MH.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_EVPN_MH_mathilda.yaml" + } + }, + "t0-t1-8d-ixia_stp": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_lightning.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp_lightning.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_laguna.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp.yaml" + }, + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp_mathilda.yaml" + } + }, + "t0-t1-8d-ixia_L2": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_lightning.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp_lightning.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_laguna.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp.yaml" + }, + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp_mathilda.yaml" + } + }, + "t0-t1-8d-ixia_apm": { + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_carib.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_laguna.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp.yaml" + }, + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_mathilda.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_stp_mathilda.yaml" + } + }, + "4d-ixia-HW": { + "churchill-mono": { + "topo_file": "../spytest_tb_files/tortuga_cicd_2S2L_ixia.yaml" + } + }, + "t2-min-VG": { + "sfd": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/sonic_t2_2lc_min_ports-VG.yaml" + } + }, + "t2-min-VL": { + "sfd": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/sonic_t2_2lc_min_ports-VL.yaml" + } + }, + "t2-min-LL": { + "sfd": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/sonic_t2_2lc_min_ports-LL.yaml" + } + }, + "t2-min": { + "sfd": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/sonic_t2_2lc_min_ports-masic.yaml" + } + }, + "t0": { + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/churchill_mono_sonic_t0_topo.yaml" + }, + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/lightning_sonic_t0_topo.yaml" + }, + "superbolt": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/superbolt_sonic_t0_topo.yaml" + }, + "siren": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/siren_sonic_t0_topo.yaml" + }, + "titan": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/titan_sonic_t0_topo.yaml" + } + }, + "t0-64": { + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/mth64_sonic_t0-64_topo.yaml" + } + }, + "t1": { + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/churchill_mono_sonic_t1_topo.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/carib_sonic_t1_topo.yaml" + }, + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/lightning_sonic_t1_topo.yaml" + }, + "superbolt": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/superbolt_sonic_t1_topo.yaml" + }, + "siren": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/siren_sonic_t1_topo.yaml" + }, + "titan": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/titan_sonic_t1_topo.yaml" + } + }, + "t1-64-lag": { + "mth64": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml" + } + }, + "t0-t1-5d": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml", + "topo_file": "../spytest_tb_files/g200_udf_qpid_vxlan_topo.yaml" + } + }, + "t0-t1-5d-202505": { + "lightning": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_202505.yaml" + } + }, + "t0-t1-2d": { + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tgen_topo.yaml", + "topo_file": "../spytest_tb_files/tgen_2D.yaml" + } + }, + "tortuga-controller-2x2": { + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_2x2.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_2x2_carib.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_2x2_laguna.yaml" + } + }, + "tortuga-controller-2x3": { + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_2x3.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_2x3_carib.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_2x3_laguna.yaml" + } + }, + "tortuga-controller-1x3": { + "churchill-mono": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_1x3_carib.yaml" + }, + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_1x3_carib.yaml" + }, + "laguna": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_1x3_laguna.yaml" + } + }, + "tortuga-controller-dci1x2-2": { + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_dci1x2-2_carib.yaml" + } + }, + "tortuga-controller-dci2x2-2": { + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_dci2x2-2_carib.yaml" + } + }, + "tortuga-controller-dci1x2-3": { + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_controller_dci1x2-3_carib.yaml" + } + }, + "platform-test-HW": { + "siren": { + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_siren_only_HW.yaml" + + }, + "carib": { + "topo_file": "../spytest_tb_files/tortuga_spytest_topo_carib_only_HW.yaml" + + } + }, + "8d-3dc-sonic-dci": { + "carib": { + "pyvxr_yaml_file": "../pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ixia.yaml", + "topo_file": "../spytest_tb_files/tortuga_spytest_dci_3DC_8D_linux_ixia.yaml" + } + }, + "dev-cicd-b2b": { + "mtfuji": { + "topo_file": "../spytest_tb_files/spytest_fuji_1d_tgen.yaml" + }, + "lightning": { + "topo_file": "../spytest_tb_files/lightning_lightning_b2b_platform_hardening.yaml" + }, + "arctos": { + "topo_file": "../spytest_tb_files/arctos_dut.yaml" + }, + "superbolt-titan": { + "topo_file": "../spytest_tb_files/superbolt_titan_b2b_platform_hardening.yaml" + }, + "mtfuji-cmono": { + "topo_file": "../spytest_tb_files/mtfuji_cmono_b2b_platform_hardening.yaml" + }, + "titan": { + "topo_file": "../spytest_tb_files/titan_2by2_spytest.yaml" + } + } +} diff --git a/infra/tortuga_controller/.DS_Store b/infra/tortuga_controller/.DS_Store new file mode 100644 index 00000000000..5008ddfcf53 Binary files /dev/null and b/infra/tortuga_controller/.DS_Store differ diff --git a/infra/tortuga_controller/config-gen.pptx b/infra/tortuga_controller/config-gen.pptx new file mode 100644 index 00000000000..80cebfa0962 Binary files /dev/null and b/infra/tortuga_controller/config-gen.pptx differ diff --git a/infra/tortuga_controller/dci1x2-2-bgp-sim.yaml b/infra/tortuga_controller/dci1x2-2-bgp-sim.yaml new file mode 100644 index 00000000000..ce789e34739 --- /dev/null +++ b/infra/tortuga_controller/dci1x2-2-bgp-sim.yaml @@ -0,0 +1,317 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + + nexus1: + platform: nxos + image: /auto/vxr/images/nxos/nxos64-cs.10.4.4.qcow2 + xr_hostname: IPN + xr_username: cisco + xr_password: cisco123 + xr_port_redir: + - 22 + xr_config: | + interface Ethernet1/1 + no switchport + ip address 43.216.11.11 255.255.255.0 + no shutdown + interface Ethernet1/2 + no switchport + ip address 43.216.12.11 255.255.255.0 + no shutdown + interface Ethernet1/3 + no switchport + ip address 43.216.21.11 255.255.255.0 + no shutdown + interface Ethernet1/4 + no switchport + ip address 43.216.22.11 255.255.255.0 + no shutdown + feature bgp + router bgp 7000 + neighbor 43.216.11.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.12.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.21.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.22.10 remote-as 6002 + address-family ipv4 unicast + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DC1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + + # Fabric: DC2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth2 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S1_L2_conn1: + - S1.Ethernet1_1 + - L2.Ethernet1_1 + S1_L3_conn1: + - S1.Ethernet1_2 + - L3.Ethernet1_1 + + # DCI connections. + S0_nexus1_conn1: + - S0.Ethernet1_9 + - nexus1.Ethernet1/1 + S0_nexus1_conn2: + - S0.Ethernet1_10 + - nexus1.Ethernet1/2 + S1_nexus1_conn1: + - S1.Ethernet1_9 + - nexus1.Ethernet1/3 + S1_nexus1_conn2: + - S1.Ethernet1_10 + - nexus1.Ethernet1/4 diff --git a/infra/tortuga_controller/dci1x2-3-bgp-sim.yaml b/infra/tortuga_controller/dci1x2-3-bgp-sim.yaml new file mode 100644 index 00000000000..08e7ce55022 --- /dev/null +++ b/infra/tortuga_controller/dci1x2-3-bgp-sim.yaml @@ -0,0 +1,432 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + trex15: + <<: *host + trex16: + <<: *host + trex17: + <<: *host + trex18: + <<: *host + trex19: + <<: *host + trex20: + <<: *host + trex21: + <<: *host + + nexus1: + platform: nxos + image: /auto/vxr/images/nxos/nxos64-cs.10.4.4.qcow2 + xr_hostname: IPN + xr_username: cisco + xr_password: cisco123 + xr_port_redir: + - 22 + xr_config: | + interface Ethernet1/1 + no switchport + ip address 43.216.11.11 255.255.255.0 + no shutdown + interface Ethernet1/2 + no switchport + ip address 43.216.12.11 255.255.255.0 + no shutdown + interface Ethernet1/3 + no switchport + ip address 43.216.21.11 255.255.255.0 + no shutdown + interface Ethernet1/4 + no switchport + ip address 43.216.22.11 255.255.255.0 + no shutdown + interface Ethernet1/5 + no switchport + ip address 43.216.31.11 255.255.255.0 + no shutdown + interface Ethernet1/6 + no switchport + ip address 43.216.32.11 255.255.255.0 + no shutdown + feature bgp + router bgp 7000 + neighbor 43.216.11.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.12.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.21.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.22.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.31.10 remote-as 6003 + address-family ipv4 unicast + neighbor 43.216.32.10 remote-as 6003 + address-family ipv4 unicast + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L4: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L5: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DC1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + + # Fabric: DC2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth2 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S1_L2_conn1: + - S1.Ethernet1_1 + - L2.Ethernet1_1 + S1_L3_conn1: + - S1.Ethernet1_2 + - L3.Ethernet1_1 + + # Fabric: DC3 + L4_trex15_1: + - L4.Ethernet1_9 + - trex15.eth1 + L4_trex19_2: + - L4.Ethernet1_13 + - trex19.eth2 + L4_trex16_1: + - L4.Ethernet1_10 + - trex16.eth1 + L4_trex16_2: + - L4.Ethernet1_15 + - trex16.eth2 + L4_trex17_1: + - L4.Ethernet1_11 + - trex17.eth1 + L4_trex18_1: + - L4.Ethernet1_12 + - trex18.eth1 + L4_trex18_2: + - L4.Ethernet1_14 + - trex18.eth2 + L4_LOOP: + - L4.Ethernet1_16 + - L4.Ethernet1_17 + L5_trex19_1: + - L5.Ethernet1_9 + - trex19.eth1 + L5_trex15_2: + - L5.Ethernet1_13 + - trex15.eth2 + L5_trex20_1: + - L5.Ethernet1_10 + - trex20.eth1 + L5_trex20_2: + - L5.Ethernet1_15 + - trex20.eth2 + L5_trex21_1: + - L5.Ethernet1_11 + - trex21.eth1 + L5_trex21_2: + - L5.Ethernet1_14 + - trex21.eth2 + S2_L4_conn1: + - S2.Ethernet1_1 + - L4.Ethernet1_1 + S2_L5_conn1: + - S2.Ethernet1_2 + - L5.Ethernet1_1 + + # DCI connections. + S0_nexus1_conn1: + - S0.Ethernet1_9 + - nexus1.Ethernet1/1 + S0_nexus1_conn2: + - S0.Ethernet1_10 + - nexus1.Ethernet1/2 + S1_nexus1_conn1: + - S1.Ethernet1_9 + - nexus1.Ethernet1/3 + S1_nexus1_conn2: + - S1.Ethernet1_10 + - nexus1.Ethernet1/4 + S2_nexus1_conn1: + - S2.Ethernet1_9 + - nexus1.Ethernet1/5 + S2_nexus1_conn2: + - S2.Ethernet1_10 + - nexus1.Ethernet1/6 diff --git a/infra/tortuga_controller/dci1x2-3-static-sim.yaml b/infra/tortuga_controller/dci1x2-3-static-sim.yaml new file mode 100644 index 00000000000..0ccb262b4d6 --- /dev/null +++ b/infra/tortuga_controller/dci1x2-3-static-sim.yaml @@ -0,0 +1,411 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + trex15: + <<: *host + trex16: + <<: *host + trex17: + <<: *host + trex18: + <<: *host + trex19: + <<: *host + trex20: + <<: *host + trex21: + <<: *host + + cat9k: + platform: cat9kv + image: /auto/vxr/images/cat9kv/cat9kv-universalk9.17.15.01prd9.qcow2 + xr_hostname: IPN + xr_username: cisco + xr_password: cisco123 + xr_port_redir: + - 22 + xr_config: | + username cisco privilege 15 password cisco123 + ip domain-name cisco.com + crypto key generate rsa modulus 1024 + ip ssh version 2 + line vty 0 4 + login local + transport input ssh + interface range GigabitEthernet1/0/1 - 4 + switchport + switchport mode trunk + switchport trunk allowed vlan all + switchport trunk native vlan 1 + spanning-tree portfast trunk + no shutdown + lldp run + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigS1NplPath: /auto/vxr1/sonic-images/yucgu/202405/npl + ConfigS1NpsuiteVer: 1.184.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L4: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L5: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DC1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + + # Fabric: DC2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth12 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S1_L2_conn1: + - S1.Ethernet1_1 + - L2.Ethernet1_1 + S1_L3_conn1: + - S1.Ethernet1_2 + - L3.Ethernet1_1 + + # Fabric: DC3 + L4_trex15_1: + - L4.Ethernet1_9 + - trex15.eth1 + L4_trex19_2: + - L4.Ethernet1_13 + - trex19.eth2 + L4_trex16_1: + - L4.Ethernet1_10 + - trex16.eth1 + L4_trex16_2: + - L4.Ethernet1_15 + - trex16.eth2 + L4_trex17_1: + - L4.Ethernet1_11 + - trex17.eth1 + L4_trex18_1: + - L4.Ethernet1_12 + - trex18.eth1 + L4_trex18_2: + - L4.Ethernet1_14 + - trex18.eth2 + L4_LOOP: + - L4.Ethernet1_16 + - L4.Ethernet1_17 + L5_trex19_1: + - L5.Ethernet1_9 + - trex19.eth1 + L5_trex15_2: + - L5.Ethernet1_13 + - trex15.eth2 + L5_trex20_1: + - L5.Ethernet1_10 + - trex20.eth1 + L5_trex20_2: + - L5.Ethernet1_15 + - trex20.eth2 + L5_trex21_1: + - L5.Ethernet1_11 + - trex21.eth1 + L5_trex21_2: + - L5.Ethernet1_14 + - trex21.eth2 + S2_L4_conn1: + - S2.Ethernet1_1 + - L4.Ethernet1_1 + S2_L5_conn1: + - S2.Ethernet1_2 + - L5.Ethernet1_1 + + # DCI connections. + S0_cat9k_conn1: + - S0.Ethernet1_9 + - cat9k.GigabitEthernet0/1 + S0_cat9k_conn2: + - S0.Ethernet1_10 + - cat9k.GigabitEthernet0/2 + S1_cat9k_conn1: + - S1.Ethernet1_9 + - cat9k.GigabitEthernet0/3 + S1_cat9k_conn2: + - S1.Ethernet1_10 + - cat9k.GigabitEthernet0/4 + S2_cat9k_conn1: + - S2.Ethernet1_9 + - cat9k.GigabitEthernet0/5 + S2_cat9k_conn2: + - S2.Ethernet1_10 + - cat9k.GigabitEthernet0/6 diff --git a/infra/tortuga_controller/dci2x2-2-bgp-sim.yaml b/infra/tortuga_controller/dci2x2-2-bgp-sim.yaml new file mode 100644 index 00000000000..9e3346b1ab7 --- /dev/null +++ b/infra/tortuga_controller/dci2x2-2-bgp-sim.yaml @@ -0,0 +1,392 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + + nexus1: + platform: nxos + image: /auto/vxr/images/nxos/nxos64-cs.10.4.4.qcow2 + xr_hostname: IPN + xr_username: cisco + xr_password: cisco123 + xr_port_redir: + - 22 + xr_config: | + interface Ethernet1/1 + no switchport + ip address 43.216.11.11 255.255.255.0 + no shutdown + interface Ethernet1/2 + no switchport + ip address 43.216.12.11 255.255.255.0 + no shutdown + interface Ethernet1/3 + no switchport + ip address 43.216.13.11 255.255.255.0 + no shutdown + interface Ethernet1/4 + no switchport + ip address 43.216.14.11 255.255.255.0 + no shutdown + interface Ethernet1/5 + no switchport + ip address 43.216.21.11 255.255.255.0 + no shutdown + interface Ethernet1/6 + no switchport + ip address 43.216.22.11 255.255.255.0 + no shutdown + interface Ethernet1/7 + no switchport + ip address 43.216.23.11 255.255.255.0 + no shutdown + interface Ethernet1/8 + no switchport + ip address 43.216.24.11 255.255.255.0 + no shutdown + feature bgp + router bgp 7000 + neighbor 43.216.11.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.12.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.13.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.14.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.21.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.22.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.23.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.24.10 remote-as 6002 + address-family ipv4 unicast + + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DCI1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn2: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn2: + - S1.Ethernet1_2 + - L1.Ethernet1_2 + + # Fabric: DCI2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth2 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S2_L2_conn1: + - S2.Ethernet1_1 + - L2.Ethernet1_1 + S2_L3_conn1: + - S2.Ethernet1_2 + - L3.Ethernet1_1 + S3_L2_conn2: + - S3.Ethernet1_1 + - L2.Ethernet1_2 + S3_L3_conn2: + - S3.Ethernet1_2 + - L3.Ethernet1_2 + + # DCI connections. + S0_nexus1_conn1: + - S0.Ethernet1_9 + - nexus1.Ethernet1/1 + S0_nexus1_conn2: + - S0.Ethernet1_10 + - nexus1.Ethernet1/2 + S1_nexus1_conn1: + - S1.Ethernet1_9 + - nexus1.Ethernet1/3 + S1_nexus1_conn2: + - S1.Ethernet1_10 + - nexus1.Ethernet1/4 + S2_nexus1_conn1: + - S2.Ethernet1_9 + - nexus1.Ethernet1/5 + S2_nexus1_conn2: + - S2.Ethernet1_10 + - nexus1.Ethernet1/6 + S3_nexus1_conn1: + - S3.Ethernet1_9 + - nexus1.Ethernet1/7 + S3_nexus1_conn2: + - S3.Ethernet1_10 + - nexus1.Ethernet1/8 diff --git a/infra/tortuga_controller/g200-16-1x3-ref-sim.yaml b/infra/tortuga_controller/g200-16-1x3-ref-sim.yaml new file mode 100644 index 00000000000..bc7df0906a0 --- /dev/null +++ b/infra/tortuga_controller/g200-16-1x3-ref-sim.yaml @@ -0,0 +1,381 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: + - HF6100-64ED + port_breakout: + lc0: + 0..63: 1x800 + vxr_sim_config: + shelf: + # Following config prevents packet from reaching nsim before it is initialized. + # Sometimes, dsim crashes when the packets are sent before it is initialized. + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + ConfigEnableNgdp: 'true' + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 28GB + vcpu: 12 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + - Ethernet1_22 + - Ethernet1_23 + - Ethernet1_24 + - Ethernet1_25 + - Ethernet1_26 + - Ethernet1_27 + - Ethernet1_28 + - Ethernet1_29 + - Ethernet1_30 + - Ethernet1_31 + - Ethernet1_32 + - Ethernet1_33 + - Ethernet1_34 + - Ethernet1_35 + - Ethernet1_36 + - Ethernet1_37 + - Ethernet1_38 + - Ethernet1_39 + - Ethernet1_40 + - Ethernet1_41 + - Ethernet1_42 + - Ethernet1_43 + - Ethernet1_44 + - Ethernet1_45 + - Ethernet1_46 + - Ethernet1_47 + - Ethernet1_48 + - Ethernet1_49 + - Ethernet1_50 + - Ethernet1_51 + - Ethernet1_52 + - Ethernet1_53 + - Ethernet1_54 + - Ethernet1_55 + - Ethernet1_56 + - Ethernet1_57 + - Ethernet1_58 + - Ethernet1_59 + - Ethernet1_60 + - Ethernet1_61 + - Ethernet1_62 + - Ethernet1_63 + - Ethernet1_64 + xr_port_redir: + - 22 + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 + + # L0 ECMP connections 3-16 + S0_L0_conn3: + - S0.Ethernet1_9 + - L0.Ethernet1_33 + S0_L0_conn4: + - S0.Ethernet1_10 + - L0.Ethernet1_34 + S0_L0_conn5: + - S0.Ethernet1_11 + - L0.Ethernet1_35 + S0_L0_conn6: + - S0.Ethernet1_12 + - L0.Ethernet1_36 + S0_L0_conn7: + - S0.Ethernet1_13 + - L0.Ethernet1_37 + S0_L0_conn8: + - S0.Ethernet1_14 + - L0.Ethernet1_38 + S0_L0_conn9: + - S0.Ethernet1_15 + - L0.Ethernet1_39 + S0_L0_conn10: + - S0.Ethernet1_16 + - L0.Ethernet1_40 + S0_L0_conn11: + - S0.Ethernet1_17 + - L0.Ethernet1_41 + S0_L0_conn12: + - S0.Ethernet1_18 + - L0.Ethernet1_42 + S0_L0_conn13: + - S0.Ethernet1_19 + - L0.Ethernet1_43 + S0_L0_conn14: + - S0.Ethernet1_20 + - L0.Ethernet1_44 + S0_L0_conn15: + - S0.Ethernet1_21 + - L0.Ethernet1_45 + S0_L0_conn16: + - S0.Ethernet1_22 + - L0.Ethernet1_46 + + # L1 ECMP connections 3-16 + S0_L1_conn3: + - S0.Ethernet1_33 + - L1.Ethernet1_33 + S0_L1_conn4: + - S0.Ethernet1_34 + - L1.Ethernet1_34 + S0_L1_conn5: + - S0.Ethernet1_35 + - L1.Ethernet1_35 + S0_L1_conn6: + - S0.Ethernet1_36 + - L1.Ethernet1_36 + S0_L1_conn7: + - S0.Ethernet1_37 + - L1.Ethernet1_37 + S0_L1_conn8: + - S0.Ethernet1_38 + - L1.Ethernet1_38 + S0_L1_conn9: + - S0.Ethernet1_39 + - L1.Ethernet1_39 + S0_L1_conn10: + - S0.Ethernet1_40 + - L1.Ethernet1_40 + S0_L1_conn11: + - S0.Ethernet1_41 + - L1.Ethernet1_41 + S0_L1_conn12: + - S0.Ethernet1_42 + - L1.Ethernet1_42 + S0_L1_conn13: + - S0.Ethernet1_43 + - L1.Ethernet1_43 + S0_L1_conn14: + - S0.Ethernet1_44 + - L1.Ethernet1_44 + S0_L1_conn15: + - S0.Ethernet1_45 + - L1.Ethernet1_45 + S0_L1_conn16: + - S0.Ethernet1_46 + - L1.Ethernet1_46 + + # L2 ECMP connections 3-16 + S0_L2_conn3: + - S0.Ethernet1_47 + - L2.Ethernet1_33 + S0_L2_conn4: + - S0.Ethernet1_48 + - L2.Ethernet1_34 + S0_L2_conn5: + - S0.Ethernet1_49 + - L2.Ethernet1_35 + S0_L2_conn6: + - S0.Ethernet1_50 + - L2.Ethernet1_36 + S0_L2_conn7: + - S0.Ethernet1_51 + - L2.Ethernet1_37 + S0_L2_conn8: + - S0.Ethernet1_52 + - L2.Ethernet1_38 + S0_L2_conn9: + - S0.Ethernet1_53 + - L2.Ethernet1_39 + S0_L2_conn10: + - S0.Ethernet1_54 + - L2.Ethernet1_40 + S0_L2_conn11: + - S0.Ethernet1_55 + - L2.Ethernet1_41 + S0_L2_conn12: + - S0.Ethernet1_56 + - L2.Ethernet1_42 + S0_L2_conn13: + - S0.Ethernet1_57 + - L2.Ethernet1_43 + S0_L2_conn14: + - S0.Ethernet1_58 + - L2.Ethernet1_44 + S0_L2_conn15: + - S0.Ethernet1_59 + - L2.Ethernet1_45 + S0_L2_conn16: + - S0.Ethernet1_60 + - L2.Ethernet1_46 diff --git a/infra/tortuga_controller/g200-1x3-ref-sim.yaml b/infra/tortuga_controller/g200-1x3-ref-sim.yaml new file mode 100644 index 00000000000..79b4fa6da78 --- /dev/null +++ b/infra/tortuga_controller/g200-1x3-ref-sim.yaml @@ -0,0 +1,213 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: + - HF6100-64ED + port_breakout: + lc0: + 0..63: 1x800 + vxr_sim_config: + shelf: + # Following config prevents packet from reaching nsim before it is initialized. + # Sometimes, dsim crashes when the packets are sent before it is initialized. + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + ConfigEnableNgdp: 'true' + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 28GB + vcpu: 12 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + - Ethernet1_22 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/infra/tortuga_controller/g200-mesh2-ref-sim.yaml b/infra/tortuga_controller/g200-mesh2-ref-sim.yaml new file mode 100644 index 00000000000..41177c8acfb --- /dev/null +++ b/infra/tortuga_controller/g200-mesh2-ref-sim.yaml @@ -0,0 +1,290 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: + - HF6100-64ED + port_breakout: + lc0: + 0..63: 1x800 + vxr_sim_config: + shelf: + # Following config prevents packet from reaching nsim before it is initialized. + # Sometimes, dsim crashes when the packets are sent before it is initialized. + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + ConfigEnableNgdp: 'true' + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 32GB + vcpu: 12 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + - Ethernet1_22 + - Ethernet1_23 + - Ethernet1_24 + - Ethernet1_25 + - Ethernet1_26 + - Ethernet1_27 + - Ethernet1_28 + - Ethernet1_29 + - Ethernet1_30 + - Ethernet1_31 + - Ethernet1_32 + - Ethernet1_33 + - Ethernet1_34 + - Ethernet1_35 + - Ethernet1_36 + - Ethernet1_37 + - Ethernet1_38 + - Ethernet1_39 + - Ethernet1_40 + - Ethernet1_41 + - Ethernet1_42 + - Ethernet1_43 + - Ethernet1_44 + - Ethernet1_45 + - Ethernet1_46 + - Ethernet1_47 + - Ethernet1_48 + - Ethernet1_49 + - Ethernet1_50 + - Ethernet1_51 + - Ethernet1_52 + - Ethernet1_53 + - Ethernet1_54 + - Ethernet1_55 + - Ethernet1_56 + - Ethernet1_57 + - Ethernet1_58 + - Ethernet1_59 + - Ethernet1_60 + - Ethernet1_61 + - Ethernet1_62 + - Ethernet1_63 + - Ethernet1_64 + xr_port_redir: + - 22 + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + cli_commands: | + sleep 60 + sudo config hostname tortuga-mesh2-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-mesh2-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + + # Add 32 ECMP connections between L0 and L1. + L0_L1_conn1: + - L0.Ethernet1_33 + - L1.Ethernet1_33 + L0_L1_conn2: + - L0.Ethernet1_34 + - L1.Ethernet1_34 + L0_L1_conn3: + - L0.Ethernet1_35 + - L1.Ethernet1_35 + L0_L1_conn4: + - L0.Ethernet1_36 + - L1.Ethernet1_36 + L0_L1_conn5: + - L0.Ethernet1_37 + - L1.Ethernet1_37 + L0_L1_conn6: + - L0.Ethernet1_38 + - L1.Ethernet1_38 + L0_L1_conn7: + - L0.Ethernet1_39 + - L1.Ethernet1_39 + L0_L1_conn8: + - L0.Ethernet1_40 + - L1.Ethernet1_40 + L0_L1_conn9: + - L0.Ethernet1_41 + - L1.Ethernet1_41 + L0_L1_conn110: + - L0.Ethernet1_42 + - L1.Ethernet1_42 + L0_L1_conn11: + - L0.Ethernet1_43 + - L1.Ethernet1_43 + L0_L1_conn12: + - L0.Ethernet1_44 + - L1.Ethernet1_44 + L0_L1_conn13: + - L0.Ethernet1_45 + - L1.Ethernet1_45 + L0_L1_conn14: + - L0.Ethernet1_46 + - L1.Ethernet1_46 + L0_L1_conn15: + - L0.Ethernet1_47 + - L1.Ethernet1_47 + L0_L1_conn16: + - L0.Ethernet1_48 + - L1.Ethernet1_48 + L0_L1_conn17: + - L0.Ethernet1_49 + - L1.Ethernet1_49 + L0_L1_conn18: + - L0.Ethernet1_50 + - L1.Ethernet1_50 + L0_L1_conn19: + - L0.Ethernet1_51 + - L1.Ethernet1_51 + L0_L1_conn20: + - L0.Ethernet1_52 + - L1.Ethernet1_52 + L0_L1_conn21: + - L0.Ethernet1_53 + - L1.Ethernet1_53 + L0_L1_conn22: + - L0.Ethernet1_54 + - L1.Ethernet1_54 + L0_L1_conn23: + - L0.Ethernet1_55 + - L1.Ethernet1_55 + L0_L1_conn24: + - L0.Ethernet1_56 + - L1.Ethernet1_56 + L0_L1_conn25: + - L0.Ethernet1_57 + - L1.Ethernet1_57 + L0_L1_conn26: + - L0.Ethernet1_58 + - L1.Ethernet1_58 + L0_L1_conn27: + - L0.Ethernet1_59 + - L1.Ethernet1_59 + L0_L1_conn28: + - L0.Ethernet1_60 + - L1.Ethernet1_60 + L0_L1_conn29: + - L0.Ethernet1_61 + - L1.Ethernet1_61 + L0_L1_conn30: + - L0.Ethernet1_62 + - L1.Ethernet1_62 + L0_L1_conn31: + - L0.Ethernet1_63 + - L1.Ethernet1_63 + L0_L1_conn32: + - L0.Ethernet1_64 + - L1.Ethernet1_64 diff --git a/infra/tortuga_controller/g2001x3-ref-sim.yaml b/infra/tortuga_controller/g2001x3-ref-sim.yaml new file mode 100644 index 00000000000..b8c23332f21 --- /dev/null +++ b/infra/tortuga_controller/g2001x3-ref-sim.yaml @@ -0,0 +1,190 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: tortuga-1x3 + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: password + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: + - 8122-64EH-O + port_breakout: + lc0: + 0..63: 2x400 + vxr_sim_config: + shelf: + ConfigS1DsimBase: /ws/thgowda-sjc/misc/NPL2/npl + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 20GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1_1 + - Ethernet1_1_2 + - Ethernet1_2_1 + - Ethernet1_2_2 + - Ethernet1_3_1 + - Ethernet1_3_2 + - Ethernet1_4_1 + - Ethernet1_4_2 + - Ethernet1_5_1 + - Ethernet1_5_2 + - Ethernet1_6_1 + - Ethernet1_6_2 + - Ethernet1_7_1 + - Ethernet1_7_2 + - Ethernet1_8_1 + - Ethernet1_8_2 + - Ethernet1_9_1 + - Ethernet1_9_2 + - Ethernet1_10_1 + - Ethernet1_10_2 + - Ethernet1_11_1 + - Ethernet1_11_2 + xr_port_redir: + - 22 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_5_1 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_7_1 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_5_2 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_6_1 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_6_2 + - trex4.eth1 + L0_LOOP: + - L0.Ethernet1_8_2 + - L0.Ethernet1_9_1 + L1_trex5_1: + - L1.Ethernet1_5_1 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_7_1 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_5_2 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_6_1 + - trex7.eth1 + L2_trex8_1: + - L2.Ethernet1_5_1 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_7_1 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_5_2 + - trex9.eth1 + L2_trex10_1: + - L2.Ethernet1_6_1 + - trex10.eth1 + S0_L0_conn1: + - S0.Ethernet1_1_1 + - L0.Ethernet1_1_1 + S0_L0_conn2: + - S0.Ethernet1_1_2 + - L0.Ethernet1_1_2 + S0_L1_conn1: + - S0.Ethernet1_2_1 + - L1.Ethernet1_1_1 + S0_L1_conn2: + - S0.Ethernet1_2_2 + - L1.Ethernet1_1_2 + S0_L2_conn1: + - S0.Ethernet1_3_1 + - L2.Ethernet1_1_1 + S0_L2_conn2: + - S0.Ethernet1_3_2 + - L2.Ethernet1_1_2 diff --git a/infra/tortuga_controller/get_ports.sh b/infra/tortuga_controller/get_ports.sh new file mode 100755 index 00000000000..e0a2ba859ec --- /dev/null +++ b/infra/tortuga_controller/get_ports.sh @@ -0,0 +1,284 @@ +#!/bin/bash +# +# PROPRIETARY AND CONFIDENTIAL. Cisco Systems, Inc. considers the contents of this +# file to be highly confidential trade secret information. +# +# COPYRIGHT 2023-2025 Cisco Systems, Inc., All rights reserved. + +vxr=/auto/vxr/pyvxr/latest/vxr.py +host=$(hostname -s) +config=/nobackup/cfg + +pushd "${config}" || exit +ports=$($vxr ports) +popd || exit >& /dev/null + +s0=$(echo "${ports}" | jq .S0.xr_redir22) +s1=$(echo "${ports}" | jq .S1.xr_redir22) +s2=$(echo "${ports}" | jq .S2.xr_redir22) +s3=$(echo "${ports}" | jq .S3.xr_redir22) +l0=$(echo "${ports}" | jq .L0.xr_redir22) +l1=$(echo "${ports}" | jq .L1.xr_redir22) +l2=$(echo "${ports}" | jq .L2.xr_redir22) +l3=$(echo "${ports}" | jq .L3.xr_redir22) +l4=$(echo "${ports}" | jq .L4.xr_redir22) +l5=$(echo "${ports}" | jq .L5.xr_redir22) +l6=$(echo "${ports}" | jq .L6.xr_redir22) +l7=$(echo "${ports}" | jq .L7.xr_redir22) +l8=$(echo "${ports}" | jq .L8.xr_redir22) +n1=$(echo "${ports}" | jq .N1.xr_redir22) +h1=$(echo "${ports}" | jq .trex1.xr_redir22) +h2=$(echo "${ports}" | jq .trex2.xr_redir22) +h3=$(echo "${ports}" | jq .trex3.xr_redir22) +h4=$(echo "${ports}" | jq .trex4.xr_redir22) +h5=$(echo "${ports}" | jq .trex5.xr_redir22) +h6=$(echo "${ports}" | jq .trex6.xr_redir22) +h7=$(echo "${ports}" | jq .trex7.xr_redir22) +h8=$(echo "${ports}" | jq .trex8.xr_redir22) +h9=$(echo "${ports}" | jq .trex9.xr_redir22) +h10=$(echo "${ports}" | jq .trex10.xr_redir22) +h11=$(echo "${ports}" | jq .trex11.xr_redir22) +h12=$(echo "${ports}" | jq .trex12.xr_redir22) +h13=$(echo "${ports}" | jq .trex13.xr_redir22) +h14=$(echo "${ports}" | jq .trex14.xr_redir22) +h15=$(echo "${ports}" | jq .trex15.xr_redir22) +h16=$(echo "${ports}" | jq .trex16.xr_redir22) +h17=$(echo "${ports}" | jq .trex17.xr_redir22) +h18=$(echo "${ports}" | jq .trex18.xr_redir22) +h19=$(echo "${ports}" | jq .trex19.xr_redir22) +h20=$(echo "${ports}" | jq .trex20.xr_redir22) +h21=$(echo "${ports}" | jq .trex21.xr_redir22) +h22=$(echo "${ports}" | jq .trex22.xr_redir22) +h23=$(echo "${ports}" | jq .trex23.xr_redir22) +h24=$(echo "${ports}" | jq .trex24.xr_redir22) +h25=$(echo "${ports}" | jq .trex25.xr_redir22) +h26=$(echo "${ports}" | jq .trex26.xr_redir22) +h27=$(echo "${ports}" | jq .trex27.xr_redir22) +h28=$(echo "${ports}" | jq .trex28.xr_redir22) +bronco0=$(echo "${ports}" | jq .bronco0.xr_redir22) +bronco1=$(echo "${ports}" | jq .bronco1.xr_redir22) +bronco2=$(echo "${ports}" | jq .bronco2.xr_redir22) +bronco3=$(echo "${ports}" | jq .bronco3.xr_redir22) +bronco4=$(echo "${ports}" | jq .bronco4.xr_redir22) +bronco5=$(echo "${ports}" | jq .bronco5.xr_redir22) +bronco6=$(echo "${ports}" | jq .bronco6.xr_redir22) +bronco7=$(echo "${ports}" | jq .bronco7.xr_redir22) +bronco8=$(echo "${ports}" | jq .bronco8.xr_redir22) +bronco9=$(echo "${ports}" | jq .bronco9.xr_redir22) +c225s0=$(echo "${ports}" | jq .c225s0.xr_redir22) +c225s1=$(echo "${ports}" | jq .c225s1.xr_redir22) +c225s2=$(echo "${ports}" | jq .c225s2.xr_redir22) +c225s3=$(echo "${ports}" | jq .c225s3.xr_redir22) +c225s4=$(echo "${ports}" | jq .c225s4.xr_redir22) +c225s5=$(echo "${ports}" | jq .c225s5.xr_redir22) +c225s6=$(echo "${ports}" | jq .c225s6.xr_redir22) +c225s7=$(echo "${ports}" | jq .c225s7.xr_redir22) +c225s8=$(echo "${ports}" | jq .c225s8.xr_redir22) +c225s9=$(echo "${ports}" | jq .c225s9.xr_redir22) +nexus1=$(echo "${ports}" | jq .nexus1.xr_redir22) +nexus2=$(echo "${ports}" | jq .nexus2.xr_redir22) + +hosts= +if [[ "${h1}" != "null" ]]; then + hosts="--hosts ${h1}" +fi +if [[ "${h2}" != "null" ]]; then + hosts="${hosts},${h2}" +fi +if [[ "${h3}" != "null" ]]; then + hosts="${hosts},${h3}" +fi +if [[ "${h4}" != "null" ]]; then + hosts="${hosts},${h4}" +fi +if [[ "${h5}" != "null" ]]; then + hosts="${hosts},${h5}" +fi +if [[ "${h6}" != "null" ]]; then + hosts="${hosts},${h6}" +fi +if [[ "${h7}" != "null" ]]; then + hosts="${hosts},${h7}" +fi +if [[ "${h8}" != "null" ]]; then + hosts="${hosts},${h8}" +fi +if [[ "${h9}" != "null" ]]; then + hosts="${hosts},${h9}" +fi +if [[ "${h10}" != "null" ]]; then + hosts="${hosts},${h10}" +fi + +# Add additional hosts in non-switch mode. +if [[ "${n1}" == "null" ]]; then + if [[ "${h11}" != "null" ]]; then + hosts="${hosts},${h11}" + fi + if [[ "${h12}" != "null" ]]; then + hosts="${hosts},${h12}" + fi + if [[ "${h13}" != "null" ]]; then + hosts="${hosts},${h13}" + fi + if [[ "${h14}" != "null" ]]; then + hosts="${hosts},${h14}" + fi + if [[ "${h15}" != "null" ]]; then + hosts="${hosts},${h15}" + fi + if [[ "${h16}" != "null" ]]; then + hosts="${hosts},${h16}" + fi + if [[ "${h17}" != "null" ]]; then + hosts="${hosts},${h17}" + fi + if [[ "${h18}" != "null" ]]; then + hosts="${hosts},${h18}" + fi + if [[ "${h19}" != "null" ]]; then + hosts="${hosts},${h19}" + fi + if [[ "${h20}" != "null" ]]; then + hosts="${hosts},${h20}" + fi + if [[ "${h21}" != "null" ]]; then + hosts="${hosts},${h21}" + fi + if [[ "${h22}" != "null" ]]; then + hosts="${hosts},${h22}" + fi + if [[ "${h23}" != "null" ]]; then + hosts="${hosts},${h23}" + fi + if [[ "${h24}" != "null" ]]; then + hosts="${hosts},${h24}" + fi + if [[ "${h25}" != "null" ]]; then + hosts="${hosts},${h25}" + fi + if [[ "${h26}" != "null" ]]; then + hosts="${hosts},${h26}" + fi + if [[ "${h27}" != "null" ]]; then + hosts="${hosts},${h27}" + fi + if [[ "${h28}" != "null" ]]; then + hosts="${hosts},${h28}" + fi +fi + +spines= +if [[ "${s0}" != "null" ]]; then + spines="${s0}" +fi +if [[ "${s1}" != "null" ]]; then + spines="${spines},${s1}" +fi +if [[ "${s2}" != "null" ]]; then + spines="${spines},${s2}" +fi +if [[ "${s3}" != "null" ]]; then + spines="${spines},${s3}" +fi + +leaves="${l0},${l1}" +if [[ "${l2}" != "null" ]]; then + leaves="${leaves},${l2}" +fi +if [[ "${l3}" != "null" ]]; then + leaves="${leaves},${l3}" +fi +if [[ "${l4}" != "null" ]]; then + leaves="${leaves},${l4}" +fi +if [[ "${l5}" != "null" ]]; then + leaves="${leaves},${l5}" +fi +if [[ "${l6}" != "null" ]]; then + leaves="${leaves},${l6}" +fi +if [[ "${l7}" != "null" ]]; then + leaves="${leaves},${l7}" +fi +if [[ "${l8}" != "null" ]]; then + leaves="${leaves},${l8}" +fi + +if [[ "${bronco0}" != "null" ]]; then + hosts="${hosts} --bronco ${bronco0}" +fi +if [[ "${bronco1}" != "null" ]]; then + hosts="${hosts},${bronco1}" +fi +if [[ "${bronco2}" != "null" ]]; then + hosts="${hosts},${bronco2}" +fi +if [[ "${bronco3}" != "null" ]]; then + hosts="${hosts},${bronco3}" +fi +if [[ "${bronco4}" != "null" ]]; then + hosts="${hosts},${bronco4}" +fi +if [[ "${bronco5}" != "null" ]]; then + hosts="${hosts},${bronco5}" +fi +if [[ "${bronco6}" != "null" ]]; then + hosts="${hosts},${bronco6}" +fi +if [[ "${bronco7}" != "null" ]]; then + hosts="${hosts},${bronco7}" +fi +if [[ "${bronco8}" != "null" ]]; then + hosts="${hosts},${bronco8}" +fi +if [[ "${bronco9}" != "null" ]]; then + hosts="${hosts},${bronco9}" +fi + +if [[ "${c225s0}" != "null" ]]; then + hosts="${hosts} --c225s ${c225s0}" +fi +if [[ "${c225s1}" != "null" ]]; then + hosts="${hosts},${c225s1}" +fi +if [[ "${c225s2}" != "null" ]]; then + hosts="${hosts},${c225s2}" +fi +if [[ "${c225s3}" != "null" ]]; then + hosts="${hosts},${c225s3}" +fi +if [[ "${c225s4}" != "null" ]]; then + hosts="${hosts},${c225s4}" +fi +if [[ "${c225s5}" != "null" ]]; then + hosts="${hosts},${c225s5}" +fi +if [[ "${c225s6}" != "null" ]]; then + hosts="${hosts},${c225s6}" +fi +if [[ "${c225s7}" != "null" ]]; then + hosts="${hosts},${c225s7}" +fi +if [[ "${c225s8}" != "null" ]]; then + hosts="${hosts},${c225s8}" +fi +if [[ "${c225s9}" != "null" ]]; then + hosts="${hosts},${c225s9}" +fi + +if [[ "${nexus1}" != "null" ]]; then + hosts="${hosts} --nexus ${nexus1}" +fi +if [[ "${nexus2}" != "null" ]]; then + hosts="${hosts},${nexus2}" +fi + +if [[ "${n1}" != "null" ]] && [[ "${l0}" != "null" ]]; then + echo "--pyvxr ${host} --spines ${spines} --leaves ${leaves} ${hosts}" + echo "--pyvxr ${host} --spines 0 --leaves ${n1} --hosts ${h11},${h12},${h13},${h14}" +elif [[ "${n1}" != "null" ]]; then + echo "--pyvxr ${host} --spines 0 --leaves ${n1} ${hosts}" +else + echo "--pyvxr ${host} --spines ${spines} --leaves ${leaves} ${hosts}" +fi diff --git a/infra/tortuga_controller/make-tar.sh b/infra/tortuga_controller/make-tar.sh new file mode 100755 index 00000000000..0eec88dd3e4 --- /dev/null +++ b/infra/tortuga_controller/make-tar.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# +# PROPRIETARY AND CONFIDENTIAL. Cisco Systems, Inc. considers the contents of this +# file to be highly confidential trade secret information. +# +# COPYRIGHT 2023-2026 Cisco Systems, Inc., All rights reserved. + +if [[ -z "${WS_ROOT}" ]]; then + echo "Must execute from Tortuga source workspace" + exit 1 +fi + +DIR="${WS_ROOT}/sandbox/sonic-tests" + +# Make a temp directory. +mkdir -p "${DIR}/sandbox/certs" + +# Build a static Linux binary of config-gen. +pushd "${WS_ROOT}/cloud/tools/config-gen" || exit +env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o "${DIR}/config-gen" +popd || exit + +# Copy binary to ttg-fs1 in non-jenkins mode. +os=$(uname) +if [[ "${os}" == "Darwin" ]]; then + curl -i -X PUT -T "${DIR}/config-gen" http://ttg-fs1.cisco.com/ttg-images/config-gen + rm "${DIR}/config-gen" +fi + +cp "${WS_ROOT}/cloud/tests/for-sonic-team/"* "${DIR}/" +cp "${WS_ROOT}/cloud/tests/pyvxr/get_ports.sh" "${DIR}/" +cp "${WS_ROOT}/cloud/tests/pyvxr/reset_sim.sh" "${DIR}/" +cp "${WS_ROOT}/cloud/tests/pyvxr/sl1x3-ref-sim.yaml" "${DIR}/sonic-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/mesh3-ref-sim.yaml" "${DIR}/mesh3-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/sl1x3-ref-sim.yaml" "${DIR}/sl1x3-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/sl2x2-ref-sim.yaml" "${DIR}/sl2x2-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/sl2x2-lag-sim.yaml" "${DIR}/sl2x2-lag-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/sl2x3-ref-sim.yaml" "${DIR}/sl2x3-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/sl2x9-ref-sim.yaml" "${DIR}/sl2x9-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/g200-1x3-ref-sim.yaml" "${DIR}/g200-1x3-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/switch-ref-sim.yaml" "${DIR}/switch-ref-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/dci1x2-2-bgp-sim.yaml" "${DIR}/dci1x2-2-bgp-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/dci1x2-3-bgp-sim.yaml" "${DIR}/dci1x2-3-bgp-sim.yaml" +cp "${WS_ROOT}/cloud/tests/pyvxr/dci2x2-2-bgp-sim.yaml" "${DIR}/dci2x2-2-bgp-sim.yaml" +cp "${WS_ROOT}/sandbox/certs/cloud.crt" "${DIR}/sandbox/certs/cloud.crt" +cp "${WS_ROOT}/sandbox/certs/service.key" "${DIR}/sandbox/certs/service.key" + +tar -C "${DIR}" -cvzf "${WS_ROOT}/sandbox/sonic-tests-$(cat ${WS_ROOT}/sandbox/tortuga_agent_version).tar.gz" . diff --git a/infra/tortuga_controller/mesh3-ref-sim.yaml b/infra/tortuga_controller/mesh3-ref-sim.yaml new file mode 100644 index 00000000000..ff7a457f590 --- /dev/null +++ b/infra/tortuga_controller/mesh3-ref-sim.yaml @@ -0,0 +1,189 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-mesh3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-mesh3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-mesh3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + L0_L1_conn1: + - L0.Ethernet1_1 + - L1.Ethernet1_1 + L0_L2_conn1: + - L0.Ethernet1_2 + - L2.Ethernet1_1 + L1_L2_conn1: + - L1.Ethernet1_2 + - L2.Ethernet1_2 diff --git a/infra/tortuga_controller/readme.txt b/infra/tortuga_controller/readme.txt new file mode 100644 index 00000000000..d2e9970c442 --- /dev/null +++ b/infra/tortuga_controller/readme.txt @@ -0,0 +1,67 @@ +Using Tortuga cloud to configure PyVxr fabric. + +NOTES: + a. DO NOT USE tortuga-1x3 as fabric name in the PyVxr reference file. + b. Shell scripts (reset_sim.sh and get_ports.sh) are either in your current directory or in ../pyvxr directory. + +1) Create a PyVxr setup. + - Create /nobackup directory. SIM and SONiC images are going to be + in /nobackup directory. Therefore, ensure that you have enough storage. + - Create /nobackup/images and copy SONiC and Ubuntu images to it. + - ubuntu22.qcow2 (for hosts). You may download ubuntu22.qcow2 from following locations. + - cp /auto/vxr/images/linux/ubuntu22_tortuga.qcow2 /nobackup/images/ubuntu22.qcow2 + - scp tortuga@sf-fab2-host1.cisco.com:~/images/ubuntu22.qcow2 /nobackup/images/ubuntu22.qcow2 (password = cisco123) + - sonic-cisco-8000.bin (for switches) + - scp tortuga@sf-fab2-host1.cisco.com:~/pyvxr/sonic-cisco-8000.bin /nobackup/images/sonic-cisco-8000.bin (password = cisco123) + - Copy reset_sim.sh to /nobackup directory. + - Copy get_ports.sh to /nobackup directory. + - Create /nobackup/cfg directory. + - Create /nobackup/sim directory. This is where SIM gets copied to. + +2) Use one of the reference SIM YAML files for setting up PyVxr SIM. For example, to set up 1x3 fabric, + copy sl1x3-ref-sim.yaml to /nobackup/cfg/sonic-ref-sim.yaml + +3) Customize /nobackup/cfg/sonic-ref-sim.yaml to match your PyVxr setup + - Rename 'tortuga-1x3' to match your fabric name (E.g. bob-1x3). + - DO NOT use "tortuga" as fabric name. Why? Because we have a number of fabrics + that use tortuga as prefix. It may confuse UI developers, and they may end + up deleting or modifying your fabric. + + NOTES: + Rename hostnames of all nodes (spines and leaves) in the reference YAML from + tortuga-1x3-leaf[0-3]/spine[0] to -1x3-leaf[0-3]/spine[0]. If you + are sharing same PyVxr and creating multiple SIMs, then come up with a unique + prefix for node hostnames. E.g. -leaf[0-3]/spine[0]. + + Prefix of node hostname (E.g. ) must be set as FABRIC_NAME in + test.sh file. + +4) Execute /nobackup/reset_sim.sh to create PyVxr SIM. + - This may take up to 15m. + +5) Execute /nobackup/get_ports.sh to get PyVxr SIM ports. + - get_ports.sh prints out PyVxr ports for spines, leaves and hosts. + +6) Edit ./test.sh and replace variables. + - Set PyVxr hostname (without cisco.com) or the prefix (E.g. ) you used + for node hostnames to FABRIC_NAME. This is very important. Otherwise, config-gen will + not match discovered fabric with your fabric. + - Set full PyVxr hostname (with cisco.com) to PYVXR_HOST. + - Set host ports reported by get_ports.sh to HOST_PORTS. + - Set leaf ports reported by get_ports.sh to LEAF_PORTS. + - Set spine ports reported by get_ports.sh to SPINE_PORTS. + +7) Execute ./test.sh from your Linux dev machine to run tests. + - You may execute test.sh as many times as you want. + - Each run of test.sh will clear out switch configs and re-configure them. + - Each test.sh may take up to 25m. This includes time to reboot PyVxr nodes. + +8) You can also run ./test.sh using commandline arguments. This is useful when you don't + want to modify test.sh. In this case step #6 is not needed. + + ./test.sh -n -p -s -l -h + +Notes: + - You must execute reset_sim.sh when there is a new SONiC image. + - You must run edit and set HOST_PORTS variable in test.sh each time you run reset_sim.sh + - You don't have to reset PyVxr to repeat tests with the same SONiC image. diff --git a/infra/tortuga_controller/reset_sim.sh b/infra/tortuga_controller/reset_sim.sh new file mode 100755 index 00000000000..aff0ef752e6 --- /dev/null +++ b/infra/tortuga_controller/reset_sim.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# PROPRIETARY AND CONFIDENTIAL. Cisco Systems, Inc. considers the contents of this +# file to be highly confidential trade secret information. +# +# COPYRIGHT 2023-2024 Cisco Systems, Inc., All rights reserved. + +vxr=/auto/vxr/pyvxr/latest/vxr.py +config=/nobackup/cfg + +pushd "${config}" || exit + +$vxr stop +$vxr clean + +# start sim +echo "Starting sim, will take some time" +$vxr start sonic-ref-sim.yaml + +# get port info +/nobackup/get_ports.sh + +popd || exit >& /dev/null diff --git a/infra/tortuga_controller/sandbox/certs/cloud.crt b/infra/tortuga_controller/sandbox/certs/cloud.crt new file mode 100644 index 00000000000..0cea90baa31 --- /dev/null +++ b/infra/tortuga_controller/sandbox/certs/cloud.crt @@ -0,0 +1,95 @@ +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIUBMu03WsnNCdu4X/8ykG+8SqqA5swDQYJKoZIhvcNAQEL +BQAwaTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQwwCgYDVQQHEwNTSkMxDjAM +BgNVBAoTBUNpc2NvMQ8wDQYDVQQLEwZzZXJ2ZXIxHjAcBgNVBAMTFVRvcnR1Z2Eg +TG9jYWwgRGV2IENBIDAeFw0yNjA0MDIxNzU3MzVaFw0yODA3MDUxNzU3MzVaMIGL +MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExDDAKBgNVBAcMA1NKQzEOMAwGA1UE +CgwFQ2lzY28xDzANBgNVBAsMBnNlcnZlcjEeMBwGA1UEAwwVVG9ydHVnYSBMb2Nh +bCBEZXYgQ0EgMSAwHgYJKoZIhvcNAQkBFhF0b3J0dWdhQGNpc2NvLmNvbTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAME237Q15GaZCU3XonOqgEG9JjIx +fcCYcI6LX2INMiUuYLSL+YnLxDy4kNhJQ4vzQl2qTyAwUkOr0ljXggv/VujaN8UY +JS4jSVQyZX/qlHkhwhUbkcKqzUbUDEAIIliNqeSAYqx/Zu0sOzCHsZOfZwHZufWr +8zJxEj9I0AQoqR4qds2PId3MBdGVHQs1hMBIY4LSdFao/FfEBqMV5BtXrKGA42ty +q225TQEHBilHxCeCrOij9BzAhDzwggL+ZonSy5gAkP120I69NO2dBOhNIL/KgZSU +EWOpTM3/HjJAPiJ/3LiaornamOYp8HVzF2IVUcRUpCpAXIP75maspbsPIpUCAwEA +AaN7MHkwNwYDVR0RBDAwLocEfwAAAYIJbG9jYWxob3N0ghsqLmRlZmF1bHQuc3Zj +LmNsdXN0ZXIubG9jYWwwHQYDVR0OBBYEFADEE8N0Aw7qGHF9oIMPCUYD4C9gMB8G +A1UdIwQYMBaAFA0cB8BeD85+W1BZEDoABz8CqWm2MA0GCSqGSIb3DQEBCwUAA4IB +AQCte6E24rKoxAE/EULdFqwBDPmM7u5eJe81eMsrJXH7d1YfRSNw9PmUOskEZ5Hp +rJH/N8l8+SLZu13hg48YrP/JO+BVDMOb9V7L81ac3InMQs+/7K6C3bSqIPM8fwF6 +k67XOkWiroJgtr3jMohZpIKuW0Fy9Nw8SKC4UDduGVq4kjLNrGekQP1GIPKM84F7 +XIihwlDWiKp/QklYFqide+sAAGTtxMeeHEzB8KB2myPCM/d6reYVCo8rRDdgUnnq +AyqbCWQKf9ONrlUCoqHjstnlzCLNEO/FeSzr3J68SV7Xghm8qcU5X+UoFxVGG+Oi +McbRGLNA8i/J93H4Hwj0JezW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID6jCCAtKgAwIBAgIIGKKb73nIayswDQYJKoZIhvcNAQELBQAwgZsxCzAJBgNV +BAYTAlVTMQswCQYDVQQIDAJDQTEMMAoGA1UEBwwDU0pDMQ4wDAYDVQQKDAVDaXNj +bzEQMA4GA1UECwwHVG9ydHVnYTEtMCsGA1UEAwwkVG9ydHVnYSBEZXYgUEtJIFN1 +Ym9yZGluYXRlIENsb3VkIENBMSAwHgYJKoZIhvcNAQkBFhF0b3J0dWdhQGNpc2Nv +LmNvbTAeFw0yNjA0MDIxNzU3MzVaFw0yNzA0MDIxNzU3MzVaMGkxCzAJBgNVBAYT +AlVTMQswCQYDVQQIEwJDQTEMMAoGA1UEBxMDU0pDMQ4wDAYDVQQKEwVDaXNjbzEP +MA0GA1UECxMGc2VydmVyMR4wHAYDVQQDExVUb3J0dWdhIExvY2FsIERldiBDQSAw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPQjLVuZfqRJdYWdwkmdm1 +1Ngp5lj1bd3FkjGnZi41FiqPkcU2Lul2ivm0EewXCIY51Okvag8RoT5tso9JROaY +mfYYa/QxpeMDrXxUCClEhuI8Ubt0LWeUAjtFn+Ub3wZNmr/S/zBRg5uywVPDa4qp +uFBlGxnyQTWKDZlFCRLPSqZo0F3JuXokAcl8bX41IqR9lznIDVD8kInIWKGfcOt9 +4N0DHvkn48eVt+xHuW4gdK1LfO72dpovuK8Go4VXEMlOjR/Nep/d02k5/fIGp/Sz +FNpL+1Wi14InCsQuVMizNlgM+HPKZQER7h42c49aVtes/KB8gxWZIHXxqdMu7pd7 +AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwICrDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQNHAfAXg/OfltQWRA6AAc/AqlptjAfBgNVHSMEGDAWgBRJ2fmo93Lw2SkB +NVQsPARFfF/llTANBgkqhkiG9w0BAQsFAAOCAQEAarV2TF2NiczwqN0eZrvahtdE +MNP91fC25CR9Y6XpED0vBAY/0rtjLu4csGoud6IbwpyYVD9LBNn9uBJcBcTdWFAV +1pH41hF4caBPV+fXOfoK8fVaUiEe+Ixl3j1kzu8EHzIr4tqr5Swx+tgLbYiAxIhU +mUgPemCY94cKmLu79xwX25WoD1dp1vggUDt3JQ6Kf485GNe4agS5VcZei6p6LvrJ +o61BzyRgeb/KFlL6ADcUuRYE+QT8MQoLNRjeFzIRH8T66J8VcrQ0TjL3vQCT3lL6 +VzAgv3Jg5VBALt4JiZE0LE/I1vOxn+J8Yg6a0n5xCYVFEuBf7Ur691N0QVjRTg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwKgAwIBAgIUXk49H1iY9dkeZzIKPMLQS3LMkb0wDQYJKoZIhvcNAQEL +BQAwgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEMMAoGA1UEBwwDU0pDMQ4w +DAYDVQQKDAVDaXNjbzENMAsGA1UECwwEcm9vdDEhMB8GA1UEAwwYVG9ydHVnYSBE +ZXYgUEtJIFJvb3QgQ0EgMSAwHgYJKoZIhvcNAQkBFhF0b3J0dWdhQGNpc2NvLmNv +bTAeFw0yNDExMDgyMjE2MTBaFw0yOTExMDcyMjE2MTBaMIGbMQswCQYDVQQGEwJV +UzELMAkGA1UECAwCQ0ExDDAKBgNVBAcMA1NKQzEOMAwGA1UECgwFQ2lzY28xEDAO +BgNVBAsMB1RvcnR1Z2ExLTArBgNVBAMMJFRvcnR1Z2EgRGV2IFBLSSBTdWJvcmRp +bmF0ZSBDbG91ZCBDQTEgMB4GCSqGSIb3DQEJARYRdG9ydHVnYUBjaXNjby5jb20w +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWuQyRzBqtH2j6d07HyqY/ +Ian9BfgES3AV8nuIhDSlTAOigM63YCbhmGUR+IMTT5NXQ7wFhV+utGlYVV4V9dhA +lzQrBon1G7xyD3jDTLpN4Jn2Dm7XFex+4GpUE05L3oEj4mFjeO8QpojMfMdYXqI9 +CRfQYfU6GQPUt7SkkkP7P+DsaCJJgO5LdLeqfxzSlJUZuQYCLl7p2cuLVx/Casu5 +0622TdDXshgwkU1jKiAY18yLI+2I4wjx4PovB7+zA3HXmcJmjzRLrqoZuSORmiR4 +J6wQYc7BJX4VOlDbk6ZhL+CjTGYQk+fEcPz77aZXd2fWyftLJiHDXAmcWlYKriAZ +AgMBAAGjYzBhMB0GA1UdDgQWBBRJ2fmo93Lw2SkBNVQsPARFfF/llTAPBgNVHRMB +Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAfBgNVHSMEGDAWgBQh+wAHhezcbu7s +P8rTv0YsEsapHjANBgkqhkiG9w0BAQsFAAOCAQEAjLmz/f5YeBN7+WxxfIU49zar +IlXA98gYFfF4IMCnWP0wH+vWjLf4bFvY7UXlwV2KTKWTtREWYoShvyPxiO6l5Gyp +HtQvY8OxQyIvzWKu5CRXZ3Zf0tXV5F7DI1H/I2OQ0QzWxOQdc6IkKRdrbqRjzv4B ++Jx74QUndCGXvcNv0uWdzz/REI3ZlwjrWbMBq1MEplvRYGHVVIOk2+WSpXORP+jQ +Wfs4e0fERrP41ACAcA3QjA24hs1VUelFsBK2TVNXUKSudzkXm/IHtFEQJa3Xm0Ym +oVfgw7X/h87k+156HtHAWagKyiw4Gqzf2VSaFfA5tZcQvDoGPGDI/BQyYWWLEw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIUdn3uuzQsEiTMNuptEdchMHTxCp4wDQYJKoZIhvcNAQEL +BQAwgYwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEMMAoGA1UEBwwDU0pDMQ4w +DAYDVQQKDAVDaXNjbzENMAsGA1UECwwEcm9vdDEhMB8GA1UEAwwYVG9ydHVnYSBE +ZXYgUEtJIFJvb3QgQ0EgMSAwHgYJKoZIhvcNAQkBFhF0b3J0dWdhQGNpc2NvLmNv +bTAeFw0yNDExMDgyMjE2MTBaFw0zNDExMDYyMjE2MTBaMIGMMQswCQYDVQQGEwJV +UzELMAkGA1UECAwCQ0ExDDAKBgNVBAcMA1NKQzEOMAwGA1UECgwFQ2lzY28xDTAL +BgNVBAsMBHJvb3QxITAfBgNVBAMMGFRvcnR1Z2EgRGV2IFBLSSBSb290IENBIDEg +MB4GCSqGSIb3DQEJARYRdG9ydHVnYUBjaXNjby5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCNaZzONyucQW6l7W/KXwpFFPAyi6tT2O1KVDjlixbu +NQUdhrSgL3y/MV242vnlFVuRE32zz+VHW+703U5oNLmXbrimmK6jjdeK0LRZyChp +AN+/nRoZD5eHlMreAselVm1oqjsoK+MKaRreyE8IS+KifQnFRsimBG9hICjwmW+9 +6Pl2/U876n2s4Uobvs0Cg3oYsuQAm8aJyflaoBKc2pDM44iiEFnLyL7xQnB3EGMB +v/a41X5RpYSUBWs9iPoNQ+BsKlRozIUoiPE10MzLVSUq8hJa5FaWv0sMHE5w1DeR +TTtdTvYNrTrpom53Zp+G6qS27dL9DAw8rPjbwJoJ3hB3AgMBAAGjUzBRMB0GA1Ud +DgQWBBQh+wAHhezcbu7sP8rTv0YsEsapHjAfBgNVHSMEGDAWgBQh+wAHhezcbu7s +P8rTv0YsEsapHjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAS +bo0Lu2DRTOBSghZmiRI3U1rFFzUvmtTiiLqZ7Cm/OOs1Jal+PRsHKNMS657hH3ze +qEDXNDv4pNVKRm4EUp2voGNLVbln006eP1ZnymTAXLw4BmyrKr22w597WbuDhAQy +8uxESjZ20f/BXkAmhyetRXq367aB9wT0ZDmq+0BHWyGG84Nz84VbwKq35dFh5hTb +DwESjI2zRbDQoNcpqz+v/9dNqxkHwlzI14SqQQZXTenF09Aqt54JFuIMrBlXYQZW +MWN+4YPFCU62hWy7KUiMiEzFIKzTBD5nQBV5cadubviTN7cJQdy50018Glv0KKo/ +utMhT3uMfUptu/EI+hip +-----END CERTIFICATE----- diff --git a/infra/tortuga_controller/sandbox/certs/service.key b/infra/tortuga_controller/sandbox/certs/service.key new file mode 100644 index 00000000000..8a8613afe9c --- /dev/null +++ b/infra/tortuga_controller/sandbox/certs/service.key @@ -0,0 +1,4 @@ +-----BEGIN ED25519 PRIVATE KEY----- +0yXCdV/rvB61uHHJ/qaLfZlbN9AI4A0cZf/KoYlW5YiLJJtJoOcNeTZ9HyYe47OF +YZsOJQ3/vDR05c/l7gOupA== +-----END ED25519 PRIVATE KEY----- diff --git a/infra/tortuga_controller/sl1x3-ref-sim.yaml b/infra/tortuga_controller/sl1x3-ref-sim.yaml new file mode 100644 index 00000000000..2c48245cede --- /dev/null +++ b/infra/tortuga_controller/sl1x3-ref-sim.yaml @@ -0,0 +1,206 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigEnableNgdp: 'true' + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/infra/tortuga_controller/sl2x2-lag-sim.yaml b/infra/tortuga_controller/sl2x2-lag-sim.yaml new file mode 100644 index 00000000000..6e5db872aca --- /dev/null +++ b/infra/tortuga_controller/sl2x2-lag-sim.yaml @@ -0,0 +1,175 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-2x2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex1_2: + - L0.Ethernet1_13 + - trex1.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex5_2: + - L1.Ethernet1_13 + - trex5.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn1: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn1: + - S1.Ethernet1_2 + - L1.Ethernet1_2 diff --git a/infra/tortuga_controller/sl2x2-ref-sim.yaml b/infra/tortuga_controller/sl2x2-ref-sim.yaml new file mode 100644 index 00000000000..a288cfa1181 --- /dev/null +++ b/infra/tortuga_controller/sl2x2-ref-sim.yaml @@ -0,0 +1,175 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-2x2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn1: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn1: + - S1.Ethernet1_2 + - L1.Ethernet1_2 diff --git a/infra/tortuga_controller/sl2x3-ref-sim.yaml b/infra/tortuga_controller/sl2x3-ref-sim.yaml new file mode 100644 index 00000000000..b50963ac591 --- /dev/null +++ b/infra/tortuga_controller/sl2x3-ref-sim.yaml @@ -0,0 +1,206 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry-delay 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-2x3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L1_conn1: + - S1.Ethernet1_1 + - L1.Ethernet1_2 + S1_L2_conn1: + - S1.Ethernet1_2 + - L2.Ethernet1_1 diff --git a/infra/tortuga_controller/sl2x9-ref-sim.yaml b/infra/tortuga_controller/sl2x9-ref-sim.yaml new file mode 100644 index 00000000000..b2fc1e9d180 --- /dev/null +++ b/infra/tortuga_controller/sl2x9-ref-sim.yaml @@ -0,0 +1,452 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + trex15: + <<: *host + trex16: + <<: *host + trex17: + <<: *host + trex18: + <<: *host + trex19: + <<: *host + trex20: + <<: *host + trex21: + <<: *host + trex22: + <<: *host + trex23: + <<: *host + trex24: + <<: *host + trex25: + <<: *host + trex26: + <<: *host + trex27: + <<: *host + trex28: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + - Ethernet1_22 + - Ethernet1_23 + - Ethernet1_24 + - Ethernet1_25 + - Ethernet1_26 + - Ethernet1_27 + - Ethernet1_28 + - Ethernet1_29 + - Ethernet1_30 + - Ethernet1_31 + - Ethernet1_32 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-2x9-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf3 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L4: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf4 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L5: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf5 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L6: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf6 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L7: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf7 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L8: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-leaf8 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x9-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + # Group 1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + + # Group 2 -- does not have fourth host one first leaf. + L3_trex11_1: + - L3.Ethernet1_9 + - trex11.eth1 + L3_trex14_2: + - L3.Ethernet1_13 + - trex14.eth2 + L3_trex12_1: + - L3.Ethernet1_10 + - trex12.eth1 + L3_trex12_2: + - L3.Ethernet1_15 + - trex12.eth2 + L3_trex13_1: + - L3.Ethernet1_11 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_14 + - trex13.eth2 + L4_trex14_1: + - L4.Ethernet1_9 + - trex14.eth1 + L4_trex11_2: + - L4.Ethernet1_13 + - trex11.eth2 + L4_trex15_1: + - L4.Ethernet1_10 + - trex15.eth1 + L4_trex15_2: + - L4.Ethernet1_15 + - trex15.eth2 + L4_trex16_1: + - L4.Ethernet1_11 + - trex16.eth1 + L4_trex16_2: + - L4.Ethernet1_14 + - trex16.eth2 + L5_trex17_1: + - L5.Ethernet1_9 + - trex17.eth1 + L5_trex17_2: + - L5.Ethernet1_13 + - trex17.eth2 + L5_trex18_1: + - L5.Ethernet1_10 + - trex18.eth1 + L5_trex18_2: + - L5.Ethernet1_15 + - trex18.eth2 + L5_trex19_1: + - L5.Ethernet1_11 + - trex19.eth1 + L5_trex19_2: + - L5.Ethernet1_14 + - trex19.eth2 + + # Group 3 -- does not have fourth host on first leaf. + L6_trex20_1: + - L6.Ethernet1_9 + - trex20.eth1 + L6_trex23_2: + - L6.Ethernet1_13 + - trex23.eth2 + L6_trex21_1: + - L6.Ethernet1_10 + - trex21.eth1 + L6_trex21_2: + - L6.Ethernet1_15 + - trex21.eth2 + L6_trex22_1: + - L6.Ethernet1_11 + - trex22.eth1 + L6_trex22_2: + - L6.Ethernet1_14 + - trex22.eth2 + L7_trex23_1: + - L7.Ethernet1_9 + - trex23.eth1 + L7_trex20_2: + - L7.Ethernet1_13 + - trex20.eth2 + L7_trex24_1: + - L7.Ethernet1_10 + - trex24.eth1 + L7_trex24_2: + - L7.Ethernet1_15 + - trex24.eth2 + L7_trex25_1: + - L7.Ethernet1_11 + - trex25.eth1 + L7_trex25_2: + - L7.Ethernet1_14 + - trex25.eth2 + L8_trex26_1: + - L8.Ethernet1_9 + - trex26.eth1 + L8_trex26_2: + - L8.Ethernet1_13 + - trex26.eth2 + L8_trex27_1: + - L8.Ethernet1_10 + - trex27.eth1 + L8_trex27_2: + - L8.Ethernet1_15 + - trex27.eth2 + L8_trex28_1: + - L8.Ethernet1_11 + - trex28.eth1 + L8_trex28_2: + - L8.Ethernet1_14 + - trex28.eth2 + + # Fabric connections. + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S0_L2_conn1: + - S0.Ethernet1_3 + - L2.Ethernet1_1 + S0_L3_conn1: + - S0.Ethernet1_4 + - L3.Ethernet1_1 + S0_L4_conn1: + - S0.Ethernet1_5 + - L4.Ethernet1_1 + S0_L5_conn1: + - S0.Ethernet1_6 + - L5.Ethernet1_1 + S0_L6_conn1: + - S0.Ethernet1_7 + - L6.Ethernet1_1 + S0_L7_conn1: + - S0.Ethernet1_8 + - L7.Ethernet1_1 + S0_L8_conn1: + - S0.Ethernet1_9 + - L8.Ethernet1_1 + S1_L0_conn1: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn1: + - S1.Ethernet1_2 + - L1.Ethernet1_2 + S1_L2_conn1: + - S1.Ethernet1_3 + - L2.Ethernet1_2 + S1_L3_conn1: + - S1.Ethernet1_4 + - L3.Ethernet1_2 + S1_L4_conn1: + - S1.Ethernet1_5 + - L4.Ethernet1_2 + S1_L5_conn1: + - S1.Ethernet1_6 + - L5.Ethernet1_2 + S1_L6_conn1: + - S1.Ethernet1_7 + - L6.Ethernet1_2 + S1_L7_conn1: + - S1.Ethernet1_8 + - L7.Ethernet1_2 + S1_L8_conn1: + - S1.Ethernet1_9 + - L8.Ethernet1_2 diff --git a/infra/tortuga_controller/sonic-ref-sim.yaml b/infra/tortuga_controller/sonic-ref-sim.yaml new file mode 100644 index 00000000000..2c48245cede --- /dev/null +++ b/infra/tortuga_controller/sonic-ref-sim.yaml @@ -0,0 +1,206 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigEnableNgdp: 'true' + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/infra/tortuga_controller/switch-ref-sim.yaml b/infra/tortuga_controller/switch-ref-sim.yaml new file mode 100644 index 00000000000..cae7bb80ee6 --- /dev/null +++ b/infra/tortuga_controller/switch-ref-sim.yaml @@ -0,0 +1,119 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + sim_dir: /nobackup/sim + sim_host: localhost + skip_auto_bringup: false + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /nobackup/images/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + + N1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-switch-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + N1_trex1_1: + - N1.Ethernet1_9 + - trex1.eth1 + N1_trex1_2: + - N1.Ethernet1_13 + - trex1.eth2 + N1_trex2_1: + - N1.Ethernet1_10 + - trex2.eth1 + N1_trex2_2: + - N1.Ethernet1_15 + - trex2.eth2 + N1_trex3_1: + - N1.Ethernet1_11 + - trex3.eth1 + N1_trex4_1: + - N1.Ethernet1_12 + - trex4.eth1 + N1_trex4_2: + - N1.Ethernet1_14 + - trex4.eth2 + N1_LOOP: + - N1.Ethernet1_16 + - N1.Ethernet1_17 + diff --git a/infra/tortuga_controller/test.sh b/infra/tortuga_controller/test.sh new file mode 100755 index 00000000000..69d3e7f2565 --- /dev/null +++ b/infra/tortuga_controller/test.sh @@ -0,0 +1,450 @@ +#!/bin/bash +# +# PROPRIETARY AND CONFIDENTIAL. Cisco Systems, Inc. considers the contents of this +# file to be highly confidential trade secret information. +# +# COPYRIGHT 2023-2026 Cisco Systems, Inc., All rights reserved. +# +# Take a look at config-gen.pptx for more details on tests. +# +# Commandline arguments for single fabric tests. +# ./test.sh -n -p -s -l -h +# ./test.sh -n -p --spines --leaves --hosts +# +# Commandline arguments for DCI tests. Specify "-c" for number of fabrics in the DCI. +# For example, "-c 3" for dci1x2-3-static-sim.yaml, and "-c 2" for both dci1x2-2-bgp-sim.yaml +# and dci2x2-2-bgp-sim.yaml +# ./test.sh -n -p -c 2 -s -l -h +# ./test.sh -n -p -c 3 --spines --leaves --hosts +# +set -euo pipefail + +FABRIC_NAME=tortuga-1x3 +PYVXR_HOST=tortuga-1x3.cisco.com +HOST_PORTS=40409,39855,36427,41851,49665,56787,35027,56005,51299 +LEAF_PORTS=43039,45263,52467 +SPINE_PORTS=43541 +FABRIC_COUNT=1 + +# SONiC team should set the BIN_DIR. +BIN_DIR="." +CONFIG_GEN="${BIN_DIR}/config-gen" +if [[ -f ./sandbox/gobin/config-gen ]]; then + CONFIG_GEN=./sandbox/gobin/config-gen +elif [[ -d "${BIN_DIR}" ]]; then + curl http://ttg-fs1.cisco.com/ttg-images/config-gen --output "${CONFIG_GEN}" + chmod +x "${CONFIG_GEN}" +fi + +# Common sub-interfaces and routed port configs for PyVxr setups. +# Vrf40000 is automatically created by Tortuga when a L2VNI + SAG is added. +PYVXR_DHCPS="*" +PYVXR_BGPPEERS="*" +PYVXR_CHANNELS="*" +PYVXR_VRFS="" +PYVXR_STPS="*" +CLOUD_URL= +START_TIME=$(date +%s) +TEST_TAGS="ipv4,ipv6,bgp-debug" +CGEN_TEST=extended +ORG_NAME="Test" +HOST_USER="vxr" +STP=true +DHCP=vlan +EVPN_MH=MH +STP_SVI="true" +BREAKOUT="breakout" +LOADTEST="*" +BOOTUP="*" +TIMEOUT="15m" +BULK_PATCH=false # Enable bulk config patch. +LLDP_CHECK=true # Check and assert for LLDP system description. +IPSLA=true # Enable IpSla tests. +SB_PEER=true # Add southbound peers. +SB_SPINE=true # Use spine as southbound peer. +DSCP="no-dscp" # Enable DSCP/QoS tests. +SCALE_VLANS=8 # Number of host Vlans to be added. +SCALE_VNIS=8 # Number of VNIs to be added for scale testing. +SCALE_PCS=5 # Number of PortChannels to be added for scale testing. +SCALE_SUBINFS=8 # Number of host/switch routed sub-interfaces. +SCALE_ROUTES=8 # Number of FRR routes (Loopback IP + Static routes). + +# Test ports. +STP_PORT1="Ethernet1_16" +STP_PORT2="Ethernet1_17" +DHCP_PORT="Ethernet1_12" +SUBINF_PORT="Ethernet1_11" +LAG_PORT1="Ethernet1_9" +LAG_PORT2="Ethernet1_13" +ROUTED_PORT1="Ethernet1_14" +ROUTED_PORT2="Ethernet1_32" +VLAN_PORT1="Ethernet1_10" +VLAN_PORT2="Ethernet1_12" + +# Parse command line arguments. +while : +do + if [[ $# = 0 ]]; then + break; + fi + + case $1 in + -n|-name) + FABRIC_NAME="${2}" + shift; shift;; + -p|-pyvxr|--pyvxr) + PYVXR_HOST="${2}" + shift; shift;; + -h|-hosts|--hosts) + HOST_PORTS="${2}" + shift; shift;; + -l|-leaves|--leaves) + LEAF_PORTS="${2}" + shift; shift;; + -s|-spines|--spines) + SPINE_PORTS="${2}" + shift; shift;; + -b|--bootup) + BOOTUP="${2}" + shift; shift;; + -u|-url) + CLOUD_URL="${2}" + shift; shift;; + -o|-org) + ORG_NAME="${2}" + shift; shift;; + -prod) + TEST_TAGS="${TEST_TAGS},no-ssh" + shift;; + -no-arp-ping) + TEST_TAGS="${TEST_TAGS},no-arp-ping" + shift;; + -dup-ok) + TEST_TAGS="${TEST_TAGS},dup-ok" + shift;; + -dhcp) + DHCP="${2}" + shift; shift;; + -dscp) + DSCP="dscp" + shift;; + -no-stp) + STP=false + shift;; + -no-stp-svi) + STP_SVI="false" + shift;; + -no-mh) + EVPN_MH=NONE + TEST_TAGS="${TEST_TAGS},no-mh" + shift;; + -no-mh1) + EVPN_MH=ONE + TEST_TAGS="${TEST_TAGS},no-mh" + shift;; + -no-mh2) + EVPN_MH=TWO + TEST_TAGS="${TEST_TAGS},no-mh" + shift;; + -vrfs) + PYVXR_VRFS="${2}" + shift; shift;; + -vnis) + SCALE_VNIS="${2}" + shift; shift;; + -subinfs) + SCALE_SUBINFS="${2}" + shift; shift;; + -vlans) + SCALE_VLANS="${2}" + shift; shift;; + -routes) + SCALE_ROUTES="${2}" + shift; shift;; + -pcs) + SCALE_PCS="${2}" + shift; shift;; + -no-breakout) + BREAKOUT="no-breakout" + shift;; + -no-ipsla) + IPSLA=false + shift;; + -bulk-patch) + BULK_PATCH=true + shift;; + -no-lldp-sys) + LLDP_CHECK=false + shift;; + -t|-tags) + TEST_TAGS="${TEST_TAGS},${2}" + shift; shift;; + -a|-action) + CGEN_TEST="${2}" + shift; shift;; + -c|-count) + FABRIC_COUNT="${2}" + shift; shift;; + *) + shift;; + esac +done + +# Get URL from config file. +if [[ -z "${CLOUD_URL}" ]]; then + YAML=$(curl --retry 5 -s http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml 2>&1) + CLOUD_URL=$(echo ${YAML} | grep -Eo 'https://tortuga-k8s-a.cisco.com:[0-9]+') +fi +echo "Cloud URL = ${CLOUD_URL}" + +# Number of leaf switches - 1. +LENGTH=$(echo "${LEAF_PORTS}" | tr -cd , | wc -c) +LENGTH=$((LENGTH + 1)) +LENGTH=$((LENGTH / FABRIC_COUNT)) + +# Disable southbound spine peering in following cases. +# - If there is only one switch. +# - In mesh topology (no spines). +# - In DCI mode (spines cannot have VRF). +if [[ ${LENGTH} -eq 1 ]] || [[ ${SPINE_PORTS} -eq 0 ]] || [[ ${FABRIC_COUNT} -gt 1 ]]; then + SB_SPINE=false +fi + +# Enable bulk patch. +if [[ "${BULK_PATCH}" == true ]]; then + TEST_TAGS="${TEST_TAGS},bulk-patch" +fi + +# Enable LLDP system description check. +if [[ "${LLDP_CHECK}" == false ]]; then + TEST_TAGS="${TEST_TAGS},no-lldp-sys" +fi + +# Add sub-interfaces on hosts connected to the ports specified in SUBINF_PORT. +PYVXR_SUBINFS="Vrf40000|*|${SUBINF_PORT}|eth1#${SCALE_SUBINFS}|lo" + +# Add tagged vlans for host sub-interfaces. In case of a single switch setup, +# add tagged vlans on the DHCP host port so as to have connected vlan hosts. +PYVXR_VLANS="Vrf40000|*|${VLAN_PORT1}|eth1#${SCALE_VLANS}" +if [[ ${LENGTH} -eq 1 ]]; then + PYVXR_VLANS="${PYVXR_VLANS},Vrf40000|*|${VLAN_PORT2}|eth1#${SCALE_VLANS}" +fi + +# Add a routed port on leaf0 with point-to-point network. +PYVXR_PORTS="leaf0|${ROUTED_PORT1}#41.230.10.1/31#Vrf40000,leaf0|${ROUTED_PORT2}#41.240.10.1/28#Vrf12000000" + +# Add static routes -- one blackhole, one using point-to-point IP and two ECMP routes. +PYVXR_ROUTES="Vrf12000000|6.6.6.0/24#blackhole|10.10.10.0/24#41.240.10.2|10.10.10.0/24#41.240.10.3" + +# Add BGP peers and BGP policies. +# Northbound BGP peer is on a routed port using point-to-point connection. Northbound peer uses +# custom policies. Custom export policy re-writes next-hop to leaf0's Loopback IPs. By default, +# FRR assigns connected port's IP as next-hop, and that would create traffic failures. Following +# scripts add IP 41.230.10.0/31 on eth2 of host3. +PYVXR_POLICIES="export-nb#true#41.220.200.200#fc00:dead:face::200:200|false#*#9999:99|false#*#RED|true#*#PURPLE|true#*#8888:88|false#*#0.0.0.0/0#41.220.0.0/16@GE@16|true#*" +PYVXR_POLICIES="${PYVXR_POLICIES},import-nb#false#*|true#9999:99+" +PYVXR_BGPPEERS="Vrf40000|northbound#4000#*#host3@41.230.10.0/31@eth2#leaf0|41.230.10.0#4500|leaf0#${ROUTED_PORT1}|export-nb#import-nb" + +# Add a IPv6 northbound BGP peer on third host of last leaf. +V6HOST=host2 +V6LEAF=leaf0 +if [[ ${LENGTH} -eq 2 ]]; then + V6HOST=host6 + V6LEAF=leaf1 +elif [[ ${LENGTH} -gt 2 ]]; then + V6HOST=host9 + V6LEAF=leaf2 +fi + +# Add second northbound BGP peer with IPv6 address family. This peer uses default BGP policies. +PYVXR_PORTS="${PYVXR_PORTS},${V6LEAF}|${SUBINF_PORT}#50.50.50.1/28#5000::0/127#Vrf40000" +PYVXR_BGPPEERS="${PYVXR_BGPPEERS},Vrf40000|ipv6-nb#5000#*#${V6HOST}@50.50.50.2/28@5000::1/127@eth1#${V6LEAF}|5000::1/128#5500|${V6LEAF}#${SUBINF_PORT}" +PYVXR_ROUTES="${PYVXR_ROUTES},*#${V6HOST}|fc00:dead:face::0/96#5000::0" +PYVXR_IPS="50.50.50.2#5000::1/127" + +# We use leaf0 Loopback for southbound peering when spine based peering is disabled. +SB_ANNOTATIONS="host1@41.216.1.2#leaf0" +SB_NODE1=leaf0 +if [[ "${SB_SPINE}" == true ]]; then + SB_NODE1=spine0 +fi + +# Southbound BGP peer is on leaf0, and uses custom policies. +# Annotations are used by config-gen to configure FRR on hosts. +if [[ "${SB_PEER}" == true ]]; then + PYVXR_POLICIES="${PYVXR_POLICIES},export-sb#true#*|true#*#9999:99#8888:88|false#*#BLACK|false#*#0.0.0.0/0|true#*" + PYVXR_POLICIES="${PYVXR_POLICIES},import-sb#false#*|true#8888:88+" + PYVXR_BGPPEERS="${PYVXR_BGPPEERS},Vrf40000|southbound#3000#*#${SB_ANNOTATIONS}|41.216.1.0/28#3500#20|${SB_NODE1}#Loopback10" + PYVXR_BGPPEERS="${PYVXR_BGPPEERS}|export-sb#import-sb" +fi + +# Add static routes for Vrf40000 +PYVXR_IPS="${PYVXR_IPS}#7.7.7.1" +PYVXR_ROUTES="${PYVXR_ROUTES},Vrf40000|8.8.8.2/32#41.216.0.3#RED|8.8.8.3/32#41.216.0.3#GREEN|7.7.7.1/32#41.216.0.2#BLUE" + +# Add PortChannels for single switch setup. +PYVXR_CHANNELS="PortChannel1|leaf0:${LAG_PORT1}#leaf0:${LAG_PORT2}|10|false|eth1#eth2" + +# Add PortChannels for two leaves fabric. +if [[ ${LENGTH} -ge 2 ]]; then + if [[ ${EVPN_MH} == "TWO" ]]; then + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel10|leaf1:${LAG_PORT1}#leaf1:${LAG_PORT2}|10|false|eth1#eth2" + elif [[ ${EVPN_MH} == "MH" ]]; then + PYVXR_CHANNELS="PortChannel1|leaf0:${LAG_PORT1}#leaf1:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel10|leaf1:${LAG_PORT1}#leaf0:${LAG_PORT2}|10|false|eth1#eth2" + fi + PYVXR_IPS="${PYVXR_IPS}#7.7.7.2" + PYVXR_ROUTES="${PYVXR_ROUTES}|7.7.7.2/32#41.216.0.3#BLUE" +fi + +# Add PortChannels for three leaf fabric: MLAG on first and second leaves, and LAG on third leaf. +if [[ ${LENGTH} -gt 2 ]]; then + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel20|leaf2:${LAG_PORT1}#leaf2:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_IPS="${PYVXR_IPS}#7.7.7.3" + PYVXR_ROUTES="${PYVXR_ROUTES}|7.7.7.3/32#41.216.0.4#BLUE" +fi + +# Add PortChannels for six leaf fabric: MLAG on fourth and fifth leaves, and LAG on sixth leaf. +if [[ ${LENGTH} -gt 4 ]]; then + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel30|leaf3:${LAG_PORT1}#leaf4:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel40|leaf4:${LAG_PORT1}#leaf3:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel50|leaf5:${LAG_PORT1}#leaf5:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_IPS="${PYVXR_IPS}#7.7.7.4#7.7.7.5#7.7.7.6" + PYVXR_ROUTES="${PYVXR_ROUTES}|7.7.7.4/32#41.216.0.5#BLUE|7.7.7.5/32#41.216.0.6#3|7.7.7.6/32#41.216.0.7#BLUE" +fi + +# Add PortChannels for nine leaf fabric: MLAG on seventh and eighth leaves, and LAG on ninth leaf. +if [[ ${LENGTH} -gt 7 ]]; then + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel60|leaf6:${LAG_PORT1}#leaf7:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel70|leaf7:${LAG_PORT1}#leaf6:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_CHANNELS="${PYVXR_CHANNELS},PortChannel80|leaf8:${LAG_PORT1}#leaf8:${LAG_PORT2}|10|false|eth1#eth2" + PYVXR_IPS="${PYVXR_IPS}#7.7.7.7#7.7.7.8#7.7.7.9" + PYVXR_ROUTES="${PYVXR_ROUTES}|7.7.7.7/32#41.216.0.8#BLUE|7.7.7.8/32#41.216.0.9#3|7.7.7.9/32#41.216.0.10#BLUE" +fi + +# Enable STP for PyVxr. STP is always on leaf0. +if [[ "${STP}" == true ]]; then + HOST_SPECS="${HOST_PORTS},dummy/eth1|leaf0|${STP_PORT1}|80#true#${STP_SVI}" + HOST_SPECS="${HOST_SPECS},dummy/eth2|leaf0|${STP_PORT2}|80#true#${STP_SVI}" + PYVXR_STPS="true#00-00-00-00-00-01,leaf0|${STP_PORT1}#true##ROOT_GUARD|${STP_PORT2}#true#ROOT_GUARD" + PYVXR_VRFS="${PYVXR_VRFS},Vrf40001|80" + TEST_TAGS="${TEST_TAGS},stp" +else + HOST_SPECS="${HOST_PORTS}" + PYVXR_PORTS="${PYVXR_PORTS},leaf0|${STP_PORT1}#false|${STP_PORT2}#false" + TEST_TAGS="${TEST_TAGS},no-stp" +fi + +# Set up DHCP relay configs. DHCP server is on the fourth host of leaf0. +# Fourth host has an untagged Vlan 40. Vrf40000 has a Loopback with 41.217.217.0/24 as IP. +if [[ "${DHCP}" == "vlan" ]]; then + PYVXR_VRFS="${PYVXR_VRFS},Vrf40000|10#20#40|41.217.217.0/24#7000::2:0/112" + PYVXR_DHCPS="Vrf40000|relay-20|41.216.3.2|20" + + # Extend Vlan of DHCP relay to all leaves. + if [[ ${LENGTH} -gt 1 ]]; then + HOST_SPECS="${HOST_SPECS},dummy/eth1|leaf1|none|40#false" + fi + if [[ ${LENGTH} -gt 2 ]]; then + HOST_SPECS="${HOST_SPECS},dummy/eth1|leaf2|none|40#false" + fi +elif [[ "${DHCP}" == "port" ]]; then + PYVXR_VRFS="${PYVXR_VRFS},Vrf40000|10#20|41.217.217.0/24#7000::2:0/112" + PYVXR_DHCPS="Vrf40000|relay-20|41.216.3.2|20" + PYVXR_PORTS="${PYVXR_PORTS},leaf0|${DHCP_PORT}#41.216.3.1/24#fc00:dead:face::3:1/112#Vrf40000" +fi + +if [[ ${EVPN_MH} == "NONE" ]]; then + PYVXR_CHANNELS="*" +fi +if [[ -z "${PYVXR_VRFS}" ]]; then + PYVXR_VRFS="*" +fi + +# Add a routed port on leaf1 and add host IP to host6 (last host on leaf1). +# This route is going to be used as the IP/SLA route on leaf1. +if [[ ${LENGTH} -gt 1 ]]; then + PYVXR_PORTS="${PYVXR_PORTS},leaf1|${ROUTED_PORT1}#41.230.20.1/24#Vrf40000#host6@eth2@41.230.20.2/24" + PYVXR_IPS="${PYVXR_IPS}#41.230.20.2" +fi + +# Configure IP/SLA and static routes for traffic-gen running in host0 and +# host4. For single switch setup, enable traffic-gen on host0 and host1. +if [[ "${IPSLA}" == true ]]; then + if [[ ${LENGTH} -gt 2 ]]; then + PYVXR_ROUTES="${PYVXR_ROUTES},Vrf40000#ip-sla-routes#host0@host6@host7|20.20.20.2/32#41.216.0.2|20.20.20.2/32#41.230.20.2|20.20.20.2/32#41.216.0.4" + elif [[ ${LENGTH} -gt 1 ]]; then + PYVXR_ROUTES="${PYVXR_ROUTES},Vrf40000#ip-sla-routes#host0@host6|20.20.20.2/32#41.216.0.2|20.20.20.2/32#41.230.20.2" + else + PYVXR_ROUTES="${PYVXR_ROUTES},Vrf40000#ip-sla-routes#host0@host1|20.20.20.2/32#41.216.0.2|20.20.20.2/32#41.216.1.2" + fi + + PYVXR_IPSLAS="Vrf40000|ip-sla-1#TCP#9100#10#3#20.20.20.2/32" +else + PYVXR_IPSLAS="*" +fi + +# Append VLAN to the IPs. Following lines MUST BE the last lines before +# invoking config-gen. +PYVXR_IPS="Vrf40000|${PYVXR_IPS}|10" +TEST_TAGS="${TEST_TAGS},dhcp-${DHCP},${DSCP},${BREAKOUT}" + +function run_pyvxr() { + "${CONFIG_GEN}" \ + --lldp \ + --auto \ + --bootup "${BOOTUP}" \ + --orgName "${ORG_NAME}" \ + --hostUser "${HOST_USER}" \ + --test "${CGEN_TEST}" \ + --cloud "${CLOUD_URL}" \ + --fabric "${FABRIC_NAME}" \ + --count "${FABRIC_COUNT}" \ + --pyvxr "${PYVXR_HOST}" \ + --spines "${SPINE_PORTS}" \ + --leaves "${LEAF_PORTS}" \ + --hosts "${HOST_SPECS}" \ + --ports "${PYVXR_PORTS}" \ + --routes "${PYVXR_ROUTES}" \ + --pingIps "${PYVXR_IPS}" \ + --dhcpRelays "${PYVXR_DHCPS}" \ + --bgpPeers "${PYVXR_BGPPEERS}" \ + --bgpPolicies "${PYVXR_POLICIES}" \ + --subInterfaces "${PYVXR_SUBINFS}" \ + --hostVlans "${PYVXR_VLANS}" \ + --portChannels "${PYVXR_CHANNELS}" \ + --ipSlas "${PYVXR_IPSLAS}" \ + --vrfs "${PYVXR_VRFS}" \ + --vlanStp "${PYVXR_STPS}" \ + --timeout "${TIMEOUT}" \ + --input "${LOADTEST}" \ + --frrRoutes "${SCALE_ROUTES}" \ + --scaleVnis "${SCALE_VNIS}" \ + --scalePcs "${SCALE_PCS}" \ + --tags "${TEST_TAGS}" +} + +echo +echo "-------------------------SONiC regression tests-------------------------" +echo +if [[ "${CGEN_TEST}" != "ping" ]]; then + if [[ ${FABRIC_COUNT} -eq 1 ]]; then + "${CONFIG_GEN}" --cloud "${CLOUD_URL}" --reset --fabric "${FABRIC_NAME}" --orgName "${ORG_NAME}" --timeout "3m" + else + for ((i = 2; i <= FABRIC_COUNT; i++)); do + "${CONFIG_GEN}" --cloud "${CLOUD_URL}" --reset --fabric "${FABRIC_NAME}${i}" --orgName "${ORG_NAME}" --timeout "1s" + done + + # Delete the first DC. + "${CONFIG_GEN}" --cloud "${CLOUD_URL}" --reset --fabric "${FABRIC_NAME}1" --orgName "${ORG_NAME}" --timeout "3m" + fi + echo +fi + +run_pyvxr + +end=$(date +%s) +stm=$((end-START_TIME)) +echo +echo "Completed in ${stm}s" +echo diff --git a/infra/utils.py b/infra/utils.py new file mode 100644 index 00000000000..8e4e50ffc95 --- /dev/null +++ b/infra/utils.py @@ -0,0 +1,227 @@ +import logging +import datetime +import paramiko +import time +import os +import re +import argparse +import sys +import json +import yaml +import subprocess +import shutil +from enum import Enum + +BASE_LOG_PATH_HW = '/data/tests/' +BASE_UCS_HOME_DIR = '/home' +SANITY_LOG_TARBALL = 'sanity_logs.tar.gz' +WORKSPACE = os.getenv("WORKSPACE") +SANITY_LOGS_PATH = 'sanity_logs' + +def init_logging(name): + """ + initial logging + :param name: + :return: + """ + log = logging.getLogger('%s' % name) + log.setLevel(logging.DEBUG) + fileHander = logging.FileHandler(os.path.join('./', '%s.log' % name)) + fileHander.setLevel(logging.DEBUG) + streamHandler = logging.StreamHandler() + streamHandler.setLevel(logging.DEBUG) + formatter = logging.Formatter( + '%(asctime)s [%(filename)s:%(lineno)d] %(levelname)s: ' + '%(message)s') + fileHander.setFormatter(formatter) + streamHandler.setFormatter(formatter) + log.addHandler(fileHander) + log.addHandler(streamHandler) + log.info('Start log ################### %s ###################' % name) + return log + +log = init_logging("SANITY_LOGS") + +# Path to config file +ALLURE_CONFIG_FILE_NAME = "config/allure-config.yaml" +allure_config = {} +with open(ALLURE_CONFIG_FILE_NAME, "r") as config_file: + allure_config = yaml.load(config_file, Loader=yaml.FullLoader) + config_file.close() + +ALLURE_REPORT_URL_FILE = allure_config['allure']['report-url-file-path'] +CICD_LOG_DIR = "/auto/mb/sonic/workspace/sonic-cicd/sanity_logs" +CICD_LOG_URL = "https://allure.cisco.com/auto/mb/sonic/workspace/sonic-cicd/sanity_logs" + +SUCCESS_STATUS = "success" +FAILURE_STATUS = "failure" +SANITY_LOGS_PATH = 'sanity_logs' + +def _run_cmd_in_ssh(ssh, cmd, timeout=180): + """ + Run a command in remote host + """ + + if isinstance(cmd, str): + cmd_str = cmd + elif isinstance(cmd, list): + cmd_str = ';'.join(cmd) + else: + raise ValueError(f"command passed is neither list or str, cannot create command string. cmd: {cmd}, type: {type(cmd)}") + + # run command inside the container + stdin, stdout, stderr = ssh.exec_command(cmd_str, timeout=timeout) + + # to prevent buffer blockage + cmd_output = stdout.read().decode() + cmd_error = stderr.read().decode() + + # get the exit status + exit_status = stdout.channel.recv_exit_status() + + log.info(f"Output for command '{cmd_str}': exit_status:{exit_status}\n" + f"stdout: {cmd_output}\nstdout end ---\n" + f"stderr: {cmd_error}\nstderr end ---") + return cmd_output, cmd_error, exit_status + +def _run_cmd_in_ssh_container(ssh, container_name, cmd, timeout=180): + """ + Run a command in container + """ + + if isinstance(cmd, str): + cmd_str = cmd + elif isinstance(cmd, list): + cmd_str = ';'.join(cmd) + else: + raise ValueError(f"command passed is neither list or str, cannot create command string. cmd: {cmd}, type: {type(cmd)}") + # Escape internal double quotes for safe shell execution + cmd_str = cmd_str.replace('"', '\\"') + # run command inside the container + docker_exec_cmd = f'docker exec {container_name} sh -c "{cmd_str}"' + return _run_cmd_in_ssh(ssh, docker_exec_cmd, timeout) + +def copy_logfiles(ssh, docker_mgmt_container, filename, destination_path, hostname): + + log.debug("Entered copy_logfiles") + + try: + ftp_client=ssh.open_sftp() + # ftp_client.chdir(source) + + ucs_home_dir = f"{BASE_UCS_HOME_DIR}/{hostname}" + source_file_path = f"{BASE_LOG_PATH_HW}{filename}" + log.debug(f"log file path: {filename}") + + # copy allure report tar file to the VM + log.debug("Copying log files from container {}:{} to the UCS:{}".format(docker_mgmt_container, source_file_path, ucs_home_dir)) + cmd = 'docker cp {}:{} {}\n'.format(docker_mgmt_container, source_file_path, ucs_home_dir) + + log.debug(f"Execute cmd: {cmd}") + _, stdout, stderr = ssh.exec_command(cmd) + if stdout.channel.recv_exit_status() != 0: + log.error("Error! Could not copy allure report from {}:{} to {}: {}".format(docker_mgmt_container, source_file_path, ucs_home_dir, stderr.read().decode("ascii"))) + ssh.close() + ftp_client.close() + return -1 + + # get allure report tar file from the VM + dst_file_path = f"{destination_path}/{filename}" + ftp_client.chdir('.') + current_directory = ftp_client.getcwd() + log.debug(f"Current SFTP directory: {current_directory}") + log.debug("Getting log file from the UCS:{} to {}".format(filename, dst_file_path)) + try: + ftp_client.get(filename, dst_file_path) + except Exception as e: + raise Exception("Error! Could not get log file!") + # Close the SFTP session and SSH connection + ftp_client.close() + return 0 + + except Exception as e: + print(f"An error occurred in copy_logfiles: {e}") + return -1 + +def create_sanity_log_tarball(local_log_dir): + log.debug(f"Current working directory in create_sanity_log_tarball: {os.getcwd()}") + log.debug(f"CHeck params: tarball: {SANITY_LOG_TARBALL}, path: {SANITY_LOGS_PATH}, local_log_dir: {local_log_dir}") + tarball_path = f"{local_log_dir}/{SANITY_LOG_TARBALL}" + + try: + result = subprocess.run(['tar', '-czf', tarball_path, SANITY_LOGS_PATH], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) + log.debug("Created tarball sanity_logs.tar.gz") + log.debug(f"Return code: {result.returncode}") + log.debug(f"STDOUT: {result.stdout}\n") + log.debug(f"STDERR:{result.stderr}\n") + parent_dir = os.path.abspath(os.path.join(local_log_dir, "..")) + shutil.copy(SANITY_LOG_TARBALL, parent_dir) + except subprocess.CalledProcessError as e: + log.error(f"Error creating tarball: {e}") + +def upload_log_files_to_log_server(files_to_copy): + log.debug(f"Current working directory in upload_log_files_to_log_server: {os.getcwd()}") + + user = os.getenv("USER") + date_formatted = datetime.datetime.now().strftime('%Y%m%d%H%M%S') + pipeline_type = os.getenv("PIPELINE_TYPE", "manual_sanity") + build_id = os.getenv("BUILD_ID", f"{user}_{date_formatted}") + report_repo = os.getenv("REPORT_REPO", f"{CICD_LOG_DIR}/{pipeline_type}") + + # Create the build directory within the 'infra' directory + os.makedirs(build_id, exist_ok=True) + + log.debug(files_to_copy) + uploaded_files = [] + + # Copy each file from 'infra' to the build directory + for file_name in files_to_copy: + if os.path.exists(file_name): + if os.path.isdir(file_name): + dest = os.path.join(build_id, os.path.basename(file_name)) + if os.path.exists(dest): + shutil.rmtree(dest) + shutil.copytree(file_name, dest) + else: + shutil.copy(file_name, build_id) + uploaded_files.append(file_name) + else: + log.debug(f"Warning: {file_name} does not exist and was not copied.") + + + # Copy the build directory to the report repository + dest_dir = os.path.join(report_repo, build_id) + log.debug(f"Copy build dir to repo, build_id: {build_id}, dest_dir: {dest_dir}") + try: + if os.path.exists(dest_dir): + shutil.rmtree(dest_dir) + shutil.copytree(build_id, dest_dir) + log_url = f"{CICD_LOG_URL}/{pipeline_type}/{build_id}" + log.debug(f"uploaded files {uploaded_files} to url: {log_url}") + return log_url + except Exception as e: + log.error(f"Error copying build directory to report repo: {e}") + return None + +def print_folder_contents(folder_path): + """ + Prints the names of all files and subdirectories within a given folder. + + Args: + folder_path (str): The path to the folder. + """ + try: + # Get the list of all files and directories in the specified path + contents = os.listdir(folder_path) + print(f"Contents of '{folder_path}':") + if not contents: + print(" (Folder is empty)") + else: + for item in contents: + print(f" - {item}") + except FileNotFoundError: + print(f"Error: Folder '{folder_path}' not found.") + except NotADirectoryError: + print(f"Error: '{folder_path}' is not a directory.") + except Exception as e: + print(f"An unexpected error occurred: {e}") diff --git a/infra/vxr-sonic-R3.json b/infra/vxr-sonic-R3.json new file mode 100755 index 00000000000..b6fa81f0957 --- /dev/null +++ b/infra/vxr-sonic-R3.json @@ -0,0 +1,307 @@ +{ + "MGMT_INTERFACE": { + "eth0|172.27.147.50/25": { + "gwaddr": "172.27.147.1" + } + }, + "DEVICE_METADATA": { + "localhost": { + "bgp_asn": "65100", + "hostname": "sonic", + "hwsku": "36x100Gb", + "mac": "78:72:5d:53:6a:59", + "platform": "x86_64-8201_sys-r0", + "type": "LeafRouter" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "eth0", + "index": "0", + "lanes": "9,8,11,10", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1": { + "admin_status": "up", + "alias": "eth1", + "index": "1", + "lanes": "1,0,3,2", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet2": { + "admin_status": "up", + "alias": "eth2", + "index": "2", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet3": { + "admin_status": "up", + "alias": "eth3", + "index": "3", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "eth4", + "index": "4", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet5": { + "admin_status": "up", + "alias": "eth5", + "index": "5", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet6": { + "admin_status": "up", + "alias": "eth6", + "index": "6", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet7": { + "admin_status": "up", + "alias": "eth7", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "eth8", + "index": "8", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet9": { + "admin_status": "up", + "alias": "eth9", + "index": "9", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet10": { + "admin_status": "up", + "alias": "eth10", + "index": "10", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet11": { + "admin_status": "up", + "alias": "eth11", + "index": "11", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "eth12", + "index": "12", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet13": { + "admin_status": "up", + "alias": "eth13", + "index": "13", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet14": { + "admin_status": "up", + "alias": "eth14", + "index": "14", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet15": { + "admin_status": "up", + "alias": "eth15", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "eth16", + "index": "16", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet17": { + "admin_status": "up", + "alias": "eth17", + "index": "17", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet18": { + "admin_status": "up", + "alias": "eth18", + "index": "18", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet19": { + "admin_status": "up", + "alias": "eth19", + "index": "19", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "eth20", + "index": "20", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet21": { + "admin_status": "up", + "alias": "eth21", + "index": "21", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet22": { + "admin_status": "up", + "alias": "eth22", + "index": "22", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet23": { + "admin_status": "up", + "alias": "eth23", + "index": "23", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "eth24", + "index": "24", + "lanes": "1552,1553", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet25": { + "admin_status": "up", + "alias": "eth25", + "index": "25", + "lanes": "1808,1809", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet26": { + "admin_status": "up", + "alias": "eth26", + "index": "26", + "lanes": "1040,1041", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet27": { + "admin_status": "up", + "alias": "eth27", + "index": "27", + "lanes": "1296,1297", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "eth28", + "index": "28", + "lanes": "528,529", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet29": { + "admin_status": "up", + "alias": "eth29", + "index": "29", + "lanes": "784,785", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet30": { + "admin_status": "up", + "alias": "eth30", + "index": "30", + "lanes": "16,17", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet31": { + "admin_status": "up", + "alias": "eth31", + "index": "31", + "lanes": "272,273", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "eth32", + "index": "32", + "lanes": "2576,2577", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet33": { + "admin_status": "up", + "alias": "eth33", + "index": "33", + "lanes": "2832,2833", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet34": { + "admin_status": "up", + "alias": "eth34", + "index": "34", + "lanes": "2064,2065", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet35": { + "admin_status": "up", + "alias": "eth35", + "index": "35", + "lanes": "2320,2321", + "mtu": "9100", + "speed": "100000" + } + } +} diff --git a/infra/vxr-sonic-R4.json b/infra/vxr-sonic-R4.json new file mode 100755 index 00000000000..cd63340229b --- /dev/null +++ b/infra/vxr-sonic-R4.json @@ -0,0 +1,307 @@ +{ + "MGMT_INTERFACE": { + "eth0|172.27.147.27/25": { + "gwaddr": "172.27.147.1" + } + }, + "DEVICE_METADATA": { + "localhost": { + "bgp_asn": "65100", + "hostname": "sonic", + "hwsku": "36x100Gb", + "mac": "78:72:5d:53:6a:59", + "platform": "x86_64-8201_sys-r0", + "type": "LeafRouter" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "eth0", + "index": "0", + "lanes": "9,8,11,10", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1": { + "admin_status": "up", + "alias": "eth1", + "index": "1", + "lanes": "1,0,3,2", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet2": { + "admin_status": "up", + "alias": "eth2", + "index": "2", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet3": { + "admin_status": "up", + "alias": "eth3", + "index": "3", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "eth4", + "index": "4", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet5": { + "admin_status": "up", + "alias": "eth5", + "index": "5", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet6": { + "admin_status": "up", + "alias": "eth6", + "index": "6", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet7": { + "admin_status": "up", + "alias": "eth7", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "eth8", + "index": "8", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet9": { + "admin_status": "up", + "alias": "eth9", + "index": "9", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet10": { + "admin_status": "up", + "alias": "eth10", + "index": "10", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet11": { + "admin_status": "up", + "alias": "eth11", + "index": "11", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "eth12", + "index": "12", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet13": { + "admin_status": "up", + "alias": "eth13", + "index": "13", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet14": { + "admin_status": "up", + "alias": "eth14", + "index": "14", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet15": { + "admin_status": "up", + "alias": "eth15", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "eth16", + "index": "16", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet17": { + "admin_status": "up", + "alias": "eth17", + "index": "17", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet18": { + "admin_status": "up", + "alias": "eth18", + "index": "18", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet19": { + "admin_status": "up", + "alias": "eth19", + "index": "19", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "eth20", + "index": "20", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet21": { + "admin_status": "up", + "alias": "eth21", + "index": "21", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet22": { + "admin_status": "up", + "alias": "eth22", + "index": "22", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet23": { + "admin_status": "up", + "alias": "eth23", + "index": "23", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "eth24", + "index": "24", + "lanes": "1552,1553", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet25": { + "admin_status": "up", + "alias": "eth25", + "index": "25", + "lanes": "1808,1809", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet26": { + "admin_status": "up", + "alias": "eth26", + "index": "26", + "lanes": "1040,1041", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet27": { + "admin_status": "up", + "alias": "eth27", + "index": "27", + "lanes": "1296,1297", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "eth28", + "index": "28", + "lanes": "528,529", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet29": { + "admin_status": "up", + "alias": "eth29", + "index": "29", + "lanes": "784,785", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet30": { + "admin_status": "up", + "alias": "eth30", + "index": "30", + "lanes": "16,17", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet31": { + "admin_status": "up", + "alias": "eth31", + "index": "31", + "lanes": "272,273", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "eth32", + "index": "32", + "lanes": "2576,2577", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet33": { + "admin_status": "up", + "alias": "eth33", + "index": "33", + "lanes": "2832,2833", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet34": { + "admin_status": "up", + "alias": "eth34", + "index": "34", + "lanes": "2064,2065", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet35": { + "admin_status": "up", + "alias": "eth35", + "index": "35", + "lanes": "2320,2321", + "mtu": "9100", + "speed": "100000" + } + } +} diff --git a/infra/vxr-sonic.json b/infra/vxr-sonic.json new file mode 100755 index 00000000000..dde1c9f6faa --- /dev/null +++ b/infra/vxr-sonic.json @@ -0,0 +1,302 @@ +{ + "DEVICE_METADATA": { + "localhost": { + "bgp_asn": "65100", + "hostname": "sonic", + "hwsku": "36x100Gb", + "mac": "78:72:5d:53:6a:59", + "platform": "x86_64-8201_sys-r0", + "type": "LeafRouter" + } + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "eth0", + "index": "0", + "lanes": "9,8,11,10", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1": { + "admin_status": "up", + "alias": "eth1", + "index": "1", + "lanes": "1,0,3,2", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet2": { + "admin_status": "up", + "alias": "eth2", + "index": "2", + "lanes": "256,257,258,259", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet3": { + "admin_status": "up", + "alias": "eth3", + "index": "3", + "lanes": "264,265,266,267", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet4": { + "admin_status": "up", + "alias": "eth4", + "index": "4", + "lanes": "2568,2569,2570,2571", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet5": { + "admin_status": "up", + "alias": "eth5", + "index": "5", + "lanes": "2560,2561,2562,2563", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet6": { + "admin_status": "up", + "alias": "eth6", + "index": "6", + "lanes": "2816,2817,2818,2819", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet7": { + "admin_status": "up", + "alias": "eth7", + "index": "7", + "lanes": "2824,2825,2826,2827", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "eth8", + "index": "8", + "lanes": "2312,2313,2314,2315", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet9": { + "admin_status": "up", + "alias": "eth9", + "index": "9", + "lanes": "2304,2305,2306,2307", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet10": { + "admin_status": "up", + "alias": "eth10", + "index": "10", + "lanes": "2056,2057,2058,2059", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet11": { + "admin_status": "up", + "alias": "eth11", + "index": "11", + "lanes": "2048,2049,2050,2051", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet12": { + "admin_status": "up", + "alias": "eth12", + "index": "12", + "lanes": "1800,1801,1802,1803", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet13": { + "admin_status": "up", + "alias": "eth13", + "index": "13", + "lanes": "1792,1793,1794,1795", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet14": { + "admin_status": "up", + "alias": "eth14", + "index": "14", + "lanes": "1536,1537,1538,1539", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet15": { + "admin_status": "up", + "alias": "eth15", + "index": "15", + "lanes": "1544,1545,1546,1547", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "eth16", + "index": "16", + "lanes": "1288,1289,1290,1291", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet17": { + "admin_status": "up", + "alias": "eth17", + "index": "17", + "lanes": "1280,1281,1282,1283", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet18": { + "admin_status": "up", + "alias": "eth18", + "index": "18", + "lanes": "1032,1033,1034,1035", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet19": { + "admin_status": "up", + "alias": "eth19", + "index": "19", + "lanes": "1024,1025,1026,1027", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet20": { + "admin_status": "up", + "alias": "eth20", + "index": "20", + "lanes": "776,777,778,779", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet21": { + "admin_status": "up", + "alias": "eth21", + "index": "21", + "lanes": "768,769,770,771", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet22": { + "admin_status": "up", + "alias": "eth22", + "index": "22", + "lanes": "520,521,522,523", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet23": { + "admin_status": "up", + "alias": "eth23", + "index": "23", + "lanes": "512,513,514,515", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "eth24", + "index": "24", + "lanes": "1552,1553", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet25": { + "admin_status": "up", + "alias": "eth25", + "index": "25", + "lanes": "1808,1809", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet26": { + "admin_status": "up", + "alias": "eth26", + "index": "26", + "lanes": "1040,1041", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet27": { + "admin_status": "up", + "alias": "eth27", + "index": "27", + "lanes": "1296,1297", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet28": { + "admin_status": "up", + "alias": "eth28", + "index": "28", + "lanes": "528,529", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet29": { + "admin_status": "up", + "alias": "eth29", + "index": "29", + "lanes": "784,785", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet30": { + "admin_status": "up", + "alias": "eth30", + "index": "30", + "lanes": "16,17", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet31": { + "admin_status": "up", + "alias": "eth31", + "index": "31", + "lanes": "272,273", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "eth32", + "index": "32", + "lanes": "2576,2577", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet33": { + "admin_status": "up", + "alias": "eth33", + "index": "33", + "lanes": "2832,2833", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet34": { + "admin_status": "up", + "alias": "eth34", + "index": "34", + "lanes": "2064,2065", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet35": { + "admin_status": "up", + "alias": "eth35", + "index": "35", + "lanes": "2320,2321", + "mtu": "9100", + "speed": "100000" + } + } +} diff --git a/pyvxr_yaml_files/carib_sonic_t1_topo.yaml b/pyvxr_yaml_files/carib_sonic_t1_topo.yaml new file mode 100644 index 00000000000..4f21938576e --- /dev/null +++ b/pyvxr_yaml_files/carib_sonic_t1_topo.yaml @@ -0,0 +1,227 @@ +simulation: + no_image_copy: true + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6018/sonic-cisco-8000.bin + linecard_types: + - churchill + linecard_versions: [p4] + vxr_sim_config: + shelf: + ConfigCardPidOverride: 'HF6100-32D' + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 32 + memory: '64G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/churchill_mono_sonic_t0_topo.yaml b/pyvxr_yaml_files/churchill_mono_sonic_t0_topo.yaml new file mode 100644 index 00000000000..bcbdd4a33da --- /dev/null +++ b/pyvxr_yaml_files/churchill_mono_sonic_t0_topo.yaml @@ -0,0 +1,96 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + data_port_attributes: + transport: e1000 + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6018/sonic-cisco-8000.bin + linecard_types: [8101-32FH] + linecard_versions: [p4] + #workaround for (https://cdetsng.cisco.com/webui/#view=CSCwn14284) + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0: + - docker_ptf.eth[0..27] + - sonic_dut.Ethernet[0..27] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/churchill_mono_sonic_t1_topo.yaml b/pyvxr_yaml_files/churchill_mono_sonic_t1_topo.yaml new file mode 100644 index 00000000000..43162e82c9c --- /dev/null +++ b/pyvxr_yaml_files/churchill_mono_sonic_t1_topo.yaml @@ -0,0 +1,230 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6018/sonic-cisco-8000.bin + linecard_types: [8101-32FH] + linecard_versions: [p4] + #workaround for (https://cdetsng.cisco.com/webui/#view=CSCwn14284) + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/crocodile_sonic_t0_topo.yaml b/pyvxr_yaml_files/crocodile_sonic_t0_topo.yaml new file mode 100644 index 00000000000..74ead69377a --- /dev/null +++ b/pyvxr_yaml_files/crocodile_sonic_t0_topo.yaml @@ -0,0 +1,91 @@ +simulation: + no_image_copy: true + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /ws/prbikkan-sjc/sonic/images/Apr26/sonic-cisco-8000.bin + linecard_types: ['8111-32EH'] + vxr_sim_config: + shelf: + ConfigS1NplPath: /ws/prbikkan-sjc/sdk/sdk-1.64.99.3/npl + ConfigS1NpsuiteVer: 1.131.0 + + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 32 + memory: '64G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0: + - docker_ptf.eth[0..27] + - sonic_dut.Ethernet[0..27] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/evpn_D9.yaml b/pyvxr_yaml_files/evpn_D9.yaml new file mode 100644 index 00000000000..7799df00bc8 --- /dev/null +++ b/pyvxr_yaml_files/evpn_D9.yaml @@ -0,0 +1,150 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + +devices: + leaf0: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - matilda64 + linux_password: password + linux_username: admin + onie-install: /auto/vxr1/sonic-images/zhwang3/apple/sonic-cisco-8000.bin + os_type: sonic + memory: 40GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + leaf1: + <<: *sonic_router + + spine0: + <<: *sonic_router + + spine1: + <<: *sonic_router + + rs1: + <<: *sonic_router + + rs2: + <<: *sonic_router + + l3: + <<: *sonic_router + + bg1: &nxosbg + platform: nxos + image: /auto/andbeverlyhills7/release/kerry/nexus/REL_10_2_8_30/boot/nxosv/nexus9300v64.10.2.9.M.qcow2 # Update image based on need + memory: 10GB + vcpu: 4 + xr_port_redir: # Update the ports that are needed + - 22 + xr_hostname: admin + xr_password: cisco123 + #xr_config: | # Any config that you wish to apply immediately after bootup + # feature bash-shell + # feature nxapi + # feature netconf + # nxapi http port 80 + + bg2: + <<: *nxosbg + + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + data_ports: + - data[0..1] + + T1: + platform: ixia-web + ixia_images: + windows: /globalnobackup/jedebarr/IxNetworkWeb_KVM_10.00.2407.119.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_10.00_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_10.00_KVM.qcow2 + data_ports: + - data[0..7] + vcpu: 16 + memory: '16G' + + + + +connections: + hubs: + spine0_leaf0: + - spine0.Ethernet[0..3] + - leaf0.Ethernet[0..3] + spine0_leaf1: + - spine0.Ethernet[4..7] + - leaf1.Ethernet[0..3] + spine1_leaf0: + - spine1.Ethernet[0..3] + - leaf0.Ethernet[4..7] + spine1_leaf1: + - spine1.Ethernet[4..7] + - leaf1.Ethernet[4..7] + spine0_rs1: + - spine0.Ethernet8 + - rs1.Ethernet0 + spine0_rs2: + - spine0.Ethernet9 + - rs2.Ethernet0 + spine1_rs1: + - spine1.Ethernet8 + - rs1.Ethernet1 + spine1_rs2: + - spine1.Ethernet9 + - rs2.Ethernet1 + spine0_bg1: + - spine0.Ethernet10 + - bg1.Ethernet1/1 + spine0_bg2: + - spine0.Ethernet11 + - bg2.Ethernet1/1 + spine1_bg1: + - spine1.Ethernet10 + - bg1.Ethernet1/2 + spine1_bg2: + - spine1.Ethernet11 + - bg2.Ethernet1/2 + spine0_l3: + - spine0.Ethernet12 + - l3.Ethernet0 + spine1_l3: + - spine1.Ethernet12 + - l3.Ethernet1 + bg1_l3: + - bg1.Ethernet1/3 + - l3.Ethernet2 + bg2_l3: + - bg2.Ethernet1/3 + - l3.Ethernet3 + ixia_leaf0: + - leaf0.Ethernet8 + - T1.data0 + ixia_leaf1: + - leaf1.Ethernet8 + - T1.data1 + ixia_l3: + - l3.Ethernet[4..5] + - T1.data[2..3] diff --git a/pyvxr_yaml_files/g200_udf_qpid_vxlan_tb.yaml b/pyvxr_yaml_files/g200_udf_qpid_vxlan_tb.yaml new file mode 100644 index 00000000000..74d6734a048 --- /dev/null +++ b/pyvxr_yaml_files/g200_udf_qpid_vxlan_tb.yaml @@ -0,0 +1,88 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['8122-64EH-O'] + port_breakout: + lc0: + 0..63: 2x400 + linux_password: cisco123 + linux_username: cisco + onie-install: ./sonic-cisco-8000.bin + os_type: sonic + memory: 32GB + vcpu: 16 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 2 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet28/[0..1] + - SD3.Ethernet28/[0..1] + hub1_0: + - SD1.Ethernet29/[0..1] + - SD4.Ethernet28/[0..1] + hub2_0: + - SD2.Ethernet28/[0..1] + - SD3.Ethernet29/[0..1] + hub3_0: + - SD2.Ethernet29/[0..1] + - SD4.Ethernet29/[0..1] + hub4_0: + - SD3.Ethernet30/[0..1] + - ixia.data[0..1] + hub4_1: + - SD3.Ethernet31/[0..1] + - ixia.data[2..3] + hub5_0: + - SD4.Ethernet30/[0..1] + - ixia.data[4..5] + hub5_1: + - SD4.Ethernet31/[0..1] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/lightning_sonic_t0_topo.yaml b/pyvxr_yaml_files/lightning_sonic_t0_topo.yaml new file mode 100644 index 00000000000..e85f8ccc822 --- /dev/null +++ b/pyvxr_yaml_files/lightning_sonic_t0_topo.yaml @@ -0,0 +1,136 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + data_port_attributes: + transport: e1000 + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8122-64EH-O'] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/lightning/nightly/16519-202405-sonic-cisco-8000.bin + port_breakout: + lc0: + 0..63: 2x400 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0_0: + - docker_ptf.eth[0..1] + - sonic_dut.Ethernet0/[0..1] + hub0_1: + - docker_ptf.eth[2..3] + - sonic_dut.Ethernet1/[0..1] + hub0_2: + - docker_ptf.eth[4..5] + - sonic_dut.Ethernet2/[0..1] + hub0_3: + - docker_ptf.eth[6..7] + - sonic_dut.Ethernet3/[0..1] + hub0_4: + - docker_ptf.eth[8..9] + - sonic_dut.Ethernet4/[0..1] + hub0_5: + - docker_ptf.eth[10..11] + - sonic_dut.Ethernet5/[0..1] + hub0_6: + - docker_ptf.eth[12..13] + - sonic_dut.Ethernet6/[0..1] + hub0_7: + - docker_ptf.eth[14..15] + - sonic_dut.Ethernet7/[0..1] + hub0_8: + - docker_ptf.eth[16..17] + - sonic_dut.Ethernet8/[0..1] + hub0_9: + - docker_ptf.eth[18..19] + - sonic_dut.Ethernet9/[0..1] + hub0_10: + - docker_ptf.eth[20..21] + - sonic_dut.Ethernet10/[0..1] + hub0_11: + - docker_ptf.eth[22..23] + - sonic_dut.Ethernet11/[0..1] + hub0_12: + - docker_ptf.eth[24..25] + - sonic_dut.Ethernet12/[0..1] + hub0_13: + - docker_ptf.eth[26..27] + - sonic_dut.Ethernet13/[0..1] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet14/0 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet14/1 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet15/0 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet15/1 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/lightning_sonic_t1_topo.yaml b/pyvxr_yaml_files/lightning_sonic_t1_topo.yaml new file mode 100644 index 00000000000..86e554fb6b5 --- /dev/null +++ b/pyvxr_yaml_files/lightning_sonic_t1_topo.yaml @@ -0,0 +1,237 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8122-64EH-O'] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/lightning/nightly/16519-202405-sonic-cisco-8000.bin + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + port_breakout: + lc0: + 0..63: 2x400 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0/0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet0/1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet1/0 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet1/1 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet2/0 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet2/1 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet3/0 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet3/1 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet4/0 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet4/1 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet5/0 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet5/1 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet6/0 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet6/1 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet7/0 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet7/1 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet8/0 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet8/1 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet9/0 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet9/1 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet10/0 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet10/1 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet11/0 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet11/1 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet12/0 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet12/1 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet13/0 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet13/1 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet14/0 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet14/1 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet15/0 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet15/1 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mth32_sonic_t0_topo.yaml b/pyvxr_yaml_files/mth32_sonic_t0_topo.yaml new file mode 100644 index 00000000000..13f581d72e0 --- /dev/null +++ b/pyvxr_yaml_files/mth32_sonic_t0_topo.yaml @@ -0,0 +1,90 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + data_port_attributes: + transport: e1000 + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6018/sonic-cisco-8000.bin + linecard_types: [matilda32] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0: + - docker_ptf.eth[0..27] + - sonic_dut.Ethernet[0..27] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mth32_sonic_t1_28_lag_topo.yaml b/pyvxr_yaml_files/mth32_sonic_t1_28_lag_topo.yaml new file mode 100644 index 00000000000..a1153dd9953 --- /dev/null +++ b/pyvxr_yaml_files/mth32_sonic_t1_28_lag_topo.yaml @@ -0,0 +1,204 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6018/sonic-cisco-8000.bin + linecard_types: [matilda32] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..21]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos1.Ethernet2 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos2.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos2.Ethernet2 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos3.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos3.Ethernet2 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos4.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos4.Ethernet2 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos5.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos5.Ethernet2 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos6.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos6.Ethernet2 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos7.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos7.Ethernet2 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos8.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos9.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos10.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos11.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos12.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos13.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos14.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos15.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos16.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos17.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos18.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos19.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos20.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos21.Ethernet1 + backplane: + ports: + - veos[1..21].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mth32_sonic_t1_lag_dash_4_topo.yaml b/pyvxr_yaml_files/mth32_sonic_t1_lag_dash_4_topo.yaml new file mode 100644 index 00000000000..6d785be9a52 --- /dev/null +++ b/pyvxr_yaml_files/mth32_sonic_t1_lag_dash_4_topo.yaml @@ -0,0 +1,187 @@ +simulation: + no_image_copy: true + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6754/sonic-cisco-8000.bin + linecard_types: [matilda32] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup3/sonic/ubuntu1804_wr.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 32 + memory: '64G' + +device_groups: + veos: + devices: + - "veos[1..21]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos1.Ethernet2 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos2.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos2.Ethernet2 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos3.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos3.Ethernet2 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos4.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos4.Ethernet2 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos5.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos6.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos7.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos8.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos9.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos10.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos11.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos12.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos13.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos14.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos15.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos16.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos17.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos18.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos19.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos20.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos21.Ethernet1 + backplane: + ports: + - veos[1..21].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mth32_sonic_t1_topo.yaml b/pyvxr_yaml_files/mth32_sonic_t1_topo.yaml new file mode 100644 index 00000000000..cb5ca30102d --- /dev/null +++ b/pyvxr_yaml_files/mth32_sonic_t1_topo.yaml @@ -0,0 +1,223 @@ +simulation: + no_image_copy: false + slurm_flags: + hours: 120 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/6018/sonic-cisco-8000.bin + linecard_types: [matilda32] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mth32_spytest_topo2_vxr.yaml b/pyvxr_yaml_files/mth32_spytest_topo2_vxr.yaml new file mode 100644 index 00000000000..6574126dcda --- /dev/null +++ b/pyvxr_yaml_files/mth32_spytest_topo2_vxr.yaml @@ -0,0 +1,81 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + + +devices: + + SD1: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_7.0/sonic-cisco-8000.bin + linecard_types: [matilda32] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.38.1_NPS1.74.6/npl + ConfigS1NpsuiteVer: 1.74.6 + + + SD2: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_7.0/sonic-cisco-8000.bin + linecard_types: [matilda32] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.38.1_NPS1.74.6/npl + ConfigS1NpsuiteVer: 1.74.6 + + + spt: + platform: spirent_cafy1 + os_type: spirent + linux_username: admin + linux_password: spt_admin + linux_prompt: 'admin>>' + spirent_images: + windows: /auto/vxr/vxr_images/spirent/WindowsWithTestCenter_5_05 + api: /auto/vxr/vxr_images/spirent/Spirent_TestCenter_LabServer-5.05-dhcp.img + port: /auto/vxr/vxr_images/spirent/sptvm-5_05-dhcp.img + data_ports: + - data0 + - data1 + - data2 + - data3 + - data4 + - data5 + - data6 + - data7 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD2.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - spt.data[0..3] + hub2: + - SD2.Ethernet[4..7] + - spt.data[4..7] + + diff --git a/pyvxr_yaml_files/mth64_sonic_t0-64_topo.yaml b/pyvxr_yaml_files/mth64_sonic_t0-64_topo.yaml new file mode 100644 index 00000000000..47ed47cf805 --- /dev/null +++ b/pyvxr_yaml_files/mth64_sonic_t0-64_topo.yaml @@ -0,0 +1,117 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 48 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/22170/sonic-cisco-8000.bin + linecard_types: [matilda64] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0: + - docker_ptf.eth[2..3] + - sonic_dut.Ethernet[2..3] + hub1: + - docker_ptf.eth[6..15] + - sonic_dut.Ethernet[6..15] + hub2: + - docker_ptf.eth[18..19] + - sonic_dut.Ethernet[18..19] + hub3: + - docker_ptf.eth[22..63] + - sonic_dut.Ethernet[22..63] + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos1.Ethernet2 + ptf_injected3: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos2.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos2.Ethernet2 + ptf_injected5: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos3.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos3.Ethernet2 + ptf_injected7: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos4.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos4.Ethernet2 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml b/pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml new file mode 100644 index 00000000000..2956d5ec11f --- /dev/null +++ b/pyvxr_yaml_files/mth64_sonic_t1_64_lag_topo.yaml @@ -0,0 +1,209 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 48 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/7371/sonic-cisco-8000.bin + linecard_types: [matilda64] + #workaround for (https://cdetsng.cisco.com/webui/#view=CSCwn14284) + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..24]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos1.Ethernet2 + ptf_injected3: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos2.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos2.Ethernet2 + ptf_injected5: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos3.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos3.Ethernet2 + ptf_injected7: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos4.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos4.Ethernet2 + ptf_injected9: + ports: + - docker_ptf.eth34 + - sonic_dut.Ethernet34 + - veos5.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth36 + - sonic_dut.Ethernet36 + - veos6.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth37 + - sonic_dut.Ethernet37 + - veos7.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth38 + - sonic_dut.Ethernet38 + - veos8.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth39 + - sonic_dut.Ethernet39 + - veos9.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth42 + - sonic_dut.Ethernet42 + - veos10.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth44 + - sonic_dut.Ethernet44 + - veos11.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth45 + - sonic_dut.Ethernet45 + - veos12.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth46 + - sonic_dut.Ethernet46 + - veos13.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth47 + - sonic_dut.Ethernet47 + - veos14.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth50 + - sonic_dut.Ethernet50 + - veos15.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth52 + - sonic_dut.Ethernet52 + - veos16.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth53 + - sonic_dut.Ethernet53 + - veos17.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth54 + - sonic_dut.Ethernet54 + - veos18.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth55 + - sonic_dut.Ethernet55 + - veos19.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth58 + - sonic_dut.Ethernet58 + - veos20.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth60 + - sonic_dut.Ethernet60 + - veos21.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth61 + - sonic_dut.Ethernet61 + - veos22.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth62 + - sonic_dut.Ethernet62 + - veos23.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth63 + - sonic_dut.Ethernet63 + - veos24.Ethernet1 + backplane: + ports: + - veos[1..24].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mustang_sonic_t0_topo.yaml b/pyvxr_yaml_files/mustang_sonic_t0_topo.yaml new file mode 100755 index 00000000000..3b08e163d37 --- /dev/null +++ b/pyvxr_yaml_files/mustang_sonic_t0_topo.yaml @@ -0,0 +1,134 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + data_port_attributes: + transport: e1000 + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8223-64EF-MO'] + npu_asic_versions: [A0] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/titan_cicd/202511/sonic-cisco-8000.bin + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0_0: + - docker_ptf.eth[0..1] + - sonic_dut.Ethernet[0..1] + hub0_1: + - docker_ptf.eth[2..3] + - sonic_dut.Ethernet[2..3] + hub0_2: + - docker_ptf.eth[4..5] + - sonic_dut.Ethernet[4..5] + hub0_3: + - docker_ptf.eth[6..7] + - sonic_dut.Ethernet[6..7] + hub0_4: + - docker_ptf.eth[8..9] + - sonic_dut.Ethernet[8..9] + hub0_5: + - docker_ptf.eth[10..11] + - sonic_dut.Ethernet[10..11] + hub0_6: + - docker_ptf.eth[12..13] + - sonic_dut.Ethernet[12..13] + hub0_7: + - docker_ptf.eth[14..15] + - sonic_dut.Ethernet[14..15] + hub0_8: + - docker_ptf.eth[16..17] + - sonic_dut.Ethernet[16..17] + hub0_9: + - docker_ptf.eth[18..19] + - sonic_dut.Ethernet[18..19] + hub0_10: + - docker_ptf.eth[20..21] + - sonic_dut.Ethernet[20..21] + hub0_11: + - docker_ptf.eth[22..23] + - sonic_dut.Ethernet[22..23] + hub0_12: + - docker_ptf.eth[24..25] + - sonic_dut.Ethernet[24..25] + hub0_13: + - docker_ptf.eth[26..27] + - sonic_dut.Ethernet[26..27] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/mustang_sonic_t1_topo.yaml b/pyvxr_yaml_files/mustang_sonic_t1_topo.yaml new file mode 100644 index 00000000000..672f9fe2883 --- /dev/null +++ b/pyvxr_yaml_files/mustang_sonic_t1_topo.yaml @@ -0,0 +1,229 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: True + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8223-64EF-MO'] + npu_asic_versions: [A0] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/titan_cicd/202511/sonic-cisco-8000.bin + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/pins-p4-170.yaml b/pyvxr_yaml_files/pins-p4-170.yaml new file mode 100644 index 00000000000..ae020cb6dd2 --- /dev/null +++ b/pyvxr_yaml_files/pins-p4-170.yaml @@ -0,0 +1,50 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2.new + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22, 9559] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/pevenkat/pins-cisco-8000-diamantis-202012.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + ConfigS1SDkVer: 1.37.0 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - sonic_dut.Ethernet[0..3] + - docker_ptf.eth[0..3] diff --git a/pyvxr_yaml_files/pins-t1-topo.yaml b/pyvxr_yaml_files/pins-t1-topo.yaml new file mode 100644 index 00000000000..1a5a5e783ee --- /dev/null +++ b/pyvxr_yaml_files/pins-t1-topo.yaml @@ -0,0 +1,225 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + partition: bigmem_intel + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2.new + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.27.147.152/IMAGES/pins/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.38.1_NPS1.74.6/npl + ConfigS1NpsuiteVer: 1.74.6 + ConfigS1SDkVer: 1.38.1 + + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.eth32 diff --git a/pyvxr_yaml_files/q200_udf_qpid_vxlan_tb.yaml b/pyvxr_yaml_files/q200_udf_qpid_vxlan_tb.yaml new file mode 100644 index 00000000000..904e22e1992 --- /dev/null +++ b/pyvxr_yaml_files/q200_udf_qpid_vxlan_tb.yaml @@ -0,0 +1,90 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [8101-32FH] + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: cisco123 + linux_username: cisco + onie-install: ./sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub3: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub4: + - SD3.Ethernet[8..11] + - ixia.data[0..3] + hub5: + - SD4.Ethernet[8..9] + - ixia.data[4..5] + hub6: + - SD1.Ethernet[8..11] + - SD2.Ethernet[8..11] + hub7: + - SD2.Ethernet[12..13] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/siren_sonic_t0_topo.yaml b/pyvxr_yaml_files/siren_sonic_t0_topo.yaml new file mode 100644 index 00000000000..410cd72f255 --- /dev/null +++ b/pyvxr_yaml_files/siren_sonic_t0_topo.yaml @@ -0,0 +1,100 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + data_port_attributes: + transport: e1000 + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + linecard_types: [HF6100-60L4D] + npu_asic_versions: [A1] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/skorka/sonic-cisco-8000-tortuga.bin + pre_cli: | + # a workaround for skd bug https://cdetsng.cisco.com/webui/#view=CSCwn14284 + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + # a workaround for Siren's syncd.conf issue + sudo cp /usr/share/sonic/device/cisco-8000/syncd.conf /usr/share/sonic/device/x86_64-hf6100_60l4d-r0/syncd.conf + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + data_ports: + - Ethernet1_[1..64] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0_0: + - docker_ptf.eth[0..27] + - sonic_dut.Ethernet1_[1..28] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet1_29 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet1_30 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet1_31 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet1_32 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/siren_sonic_t1_topo.yaml b/pyvxr_yaml_files/siren_sonic_t1_topo.yaml new file mode 100644 index 00000000000..83d1ffa3932 --- /dev/null +++ b/pyvxr_yaml_files/siren_sonic_t1_topo.yaml @@ -0,0 +1,234 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + linecard_types: [HF6100-60L4D] + npu_asic_versions: [A1] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/skorka/sonic-cisco-8000-tortuga.bin + pre_cli: | + # a workaround for skd bug https://cdetsng.cisco.com/webui/#view=CSCwn14284 + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + # a workaround for Siren's syncd.conf issue + sudo cp /usr/share/sonic/device/cisco-8000/syncd.conf /usr/share/sonic/device/x86_64-hf6100_60l4d-r0/syncd.conf + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + data_ports: + - Ethernet1_[1..64] + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet1_1 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1_2 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet1_3 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet1_4 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet1_5 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet1_6 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet1_7 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet1_8 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet1_9 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet1_10 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet1_11 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet1_12 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet1_13 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet1_14 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet1_15 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet1_16 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet1_17 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet1_18 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet1_19 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet1_20 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet1_21 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet1_22 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet1_23 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet1_24 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet1_25 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet1_26 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet1_27 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet1_28 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet1_29 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet1_30 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet1_31 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet1_32 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/sonic-t2-vs.yaml b/pyvxr_yaml_files/sonic-t2-vs.yaml new file mode 100644 index 00000000000..5b6880558ba --- /dev/null +++ b/pyvxr_yaml_files/sonic-t2-vs.yaml @@ -0,0 +1,93 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 6 + partition: amd + pyvxr_flags: + sonic_lc_bringup: true + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..71] + - backplane + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 4 + memory: '4G' + + sonic_dut: + platform: spitfire_d + os_type: sonic + lcc_type: havoc-gb + num_linecards: 2 + linecard_types: ['gauntlet', 'gauntlet'] + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: + /ws/jusherma-sjc/sonic-buildimage-azure.master-p2-1260-20220711033048/sonic-cisco-8000.bin + vxr_sim_config: + shelf: + ConfigS1NplPath: + /auto/mb/sonic/workspace/sonic-ci-mp.cisco.com/corporate-code/leaba/sdk-customer-tarball-debians/sdk-customer-tarball-debians-1.0.0-gibraltar-1.50.10.4.12-1.9.0-buster-prod-25258/npl + ConfigS1NpsuiteVer: 1.90.0 + rp: + ConfigNicOrder: "mgmt-ce-punt" + lc: + ConfigNicOrder: "punt-ce-mgmt" + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +# ARISTA 01 T3: veos1 +# ARISTA 03 T3: veos2 +# ARISTA 01 T1: veos3 +# ARISTA 03 T1: veos4 +# Uses XR-style format "HundredGigE0//0/[0..47]" +connections: + hubs: + hub0: + - sonic_dut.HundredGigE0/0/0/0 + - veos1.Ethernet1 + hub1: + - sonic_dut.HundredGigE0/0/0/1 + - veos1.Ethernet2 + hub2: + - sonic_dut.HundredGigE0/0/0/2 + - veos2.Ethernet1 + hub3: + - sonic_dut.HundredGigE0/1/0/0 + - veos3.Ethernet1 + hub4: + - sonic_dut.HundredGigE0/1/0/1 + - veos3.Ethernet2 + hub5: + - sonic_dut.HundredGigE0/1/0/2 + - veos4.Ethernet1 diff --git a/pyvxr_yaml_files/sonic_b2b.yaml b/pyvxr_yaml_files/sonic_b2b.yaml new file mode 100644 index 00000000000..f6e4686f5ad --- /dev/null +++ b/pyvxr_yaml_files/sonic_b2b.yaml @@ -0,0 +1,24 @@ +simulation: + no_image_copy: true + sim_rel: /auto/vxr/vxr2_user/vxr2_npsuite_1.61.1 + sim_flags: [-k ConfigLeabaSdkVer=1.32.1 -k ConfigDsimNplPath=/ws/venkatg-sjc/sonic/for_devesh/npl -k ConfigNpsuiteVer=1.61.1] + +devices: + R0: &sonic_router + platform: spitfire_f + os_type: sonic + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /ws/venkatg-sjc/sonic/sonic-cisco-8000-nsim.bin + linecard_versions: [p7] + + R1: + <<: *sonic_router + + +connections: + hubs: + R0_R1: + - R0.Ethernet[0..35] + - R1.Ethernet[0..35] \ No newline at end of file diff --git a/pyvxr_yaml_files/sonic_dualtor_56.yaml b/pyvxr_yaml_files/sonic_dualtor_56.yaml new file mode 100644 index 00000000000..bd51b9cef2a --- /dev/null +++ b/pyvxr_yaml_files/sonic_dualtor_56.yaml @@ -0,0 +1,387 @@ +simulation: + slurm_flags: + partition: bigmem_intel + hours: 72 + +devices: + + mux_sim: + platform: linux + vcpu: 2 + image: /auto/vxr/vxr_images/onie-sonic/mux_sim_v5.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@ubuntu:~# + extended_pci_bus: True + xr_port_redir: [22, 8080] + xr_config: /home/vxr/restart_mux.sh vms_1 "0,2,4,6,8,10,16,18,20,22,24,26,28,30,32,34,36,38,44,46,48,50,52,54" + data_port_attributes: + transport: e1000 + data_ports: + - ptf[0..27] + - upper_tor[0..27] + - lower_tor[0..27] + + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: True + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..71] + - backplane + + sonic_dut_0: &dut + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + #linux_username: "admin" + #linux_password: "YourPaSsWoRd" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /auto/vxr1/sonic-images/devpatha/1905/sonic-cisco-8000.bin + linecard_types: [matilda64] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.57.10.10/npl + ConfigS1NpsuiteVer: 1.105.0 + + sonic_dut_1: + <<: *dut + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + mux_sim_to_ptf0: + - docker_ptf.eth0 + - mux_sim.ptf0 + mux_sim_to_ptf1: + - docker_ptf.eth2 + - mux_sim.ptf1 + mux_sim_to_ptf2: + - docker_ptf.eth4 + - mux_sim.ptf2 + mux_sim_to_ptf3: + - docker_ptf.eth6 + - mux_sim.ptf3 + mux_sim_to_ptf4: + - docker_ptf.eth8 + - mux_sim.ptf4 + mux_sim_to_ptf5: + - docker_ptf.eth10 + - mux_sim.ptf5 + mux_sim_to_ptf6: + - docker_ptf.eth16 + - mux_sim.ptf6 + mux_sim_to_ptf7: + - docker_ptf.eth18 + - mux_sim.ptf7 + mux_sim_to_ptf8: + - docker_ptf.eth20 + - mux_sim.ptf8 + mux_sim_to_ptf9: + - docker_ptf.eth22 + - mux_sim.ptf9 + mux_sim_to_ptf10: + - docker_ptf.eth24 + - mux_sim.ptf10 + mux_sim_to_ptf11: + - docker_ptf.eth26 + - mux_sim.ptf11 + mux_sim_to_ptf12: + - docker_ptf.eth28 + - mux_sim.ptf12 + mux_sim_to_ptf13: + - docker_ptf.eth30 + - mux_sim.ptf13 + mux_sim_to_ptf14: + - docker_ptf.eth32 + - mux_sim.ptf14 + mux_sim_to_ptf15: + - docker_ptf.eth34 + - mux_sim.ptf15 + mux_sim_to_ptf16: + - docker_ptf.eth36 + - mux_sim.ptf16 + mux_sim_to_ptf17: + - docker_ptf.eth38 + - mux_sim.ptf17 + mux_sim_to_ptf18: + - docker_ptf.eth44 + - mux_sim.ptf18 + mux_sim_to_ptf19: + - docker_ptf.eth46 + - mux_sim.ptf19 + mux_sim_to_ptf20: + - docker_ptf.eth48 + - mux_sim.ptf20 + mux_sim_to_ptf21: + - docker_ptf.eth50 + - mux_sim.ptf21 + mux_sim_to_ptf22: + - docker_ptf.eth52 + - mux_sim.ptf22 + mux_sim_to_ptf23: + - docker_ptf.eth54 + - mux_sim.ptf23 + + mux_sim_to_upper_tor0: + - mux_sim.upper_tor0 + - sonic_dut_0.Ethernet0 + mux_sim_to_upper_tor1: + - mux_sim.upper_tor1 + - sonic_dut_0.Ethernet2 + mux_sim_to_upper_tor2: + - mux_sim.upper_tor2 + - sonic_dut_0.Ethernet4 + mux_sim_to_upper_tor3: + - mux_sim.upper_tor3 + - sonic_dut_0.Ethernet6 + mux_sim_to_upper_tor4: + - mux_sim.upper_tor4 + - sonic_dut_0.Ethernet8 + mux_sim_to_upper_tor5: + - mux_sim.upper_tor5 + - sonic_dut_0.Ethernet10 + mux_sim_to_upper_tor6: + - mux_sim.upper_tor6 + - sonic_dut_0.Ethernet16 + mux_sim_to_upper_tor7: + - mux_sim.upper_tor7 + - sonic_dut_0.Ethernet18 + mux_sim_to_upper_tor8: + - mux_sim.upper_tor8 + - sonic_dut_0.Ethernet20 + mux_sim_to_upper_tor9: + - mux_sim.upper_tor9 + - sonic_dut_0.Ethernet22 + mux_sim_to_upper_tor10: + - mux_sim.upper_tor10 + - sonic_dut_0.Ethernet24 + mux_sim_to_upper_tor11: + - mux_sim.upper_tor11 + - sonic_dut_0.Ethernet26 + mux_sim_to_upper_tor12: + - mux_sim.upper_tor12 + - sonic_dut_0.Ethernet28 + mux_sim_to_upper_tor13: + - mux_sim.upper_tor13 + - sonic_dut_0.Ethernet30 + mux_sim_to_upper_tor14: + - mux_sim.upper_tor14 + - sonic_dut_0.Ethernet32 + mux_sim_to_upper_tor15: + - mux_sim.upper_tor15 + - sonic_dut_0.Ethernet34 + mux_sim_to_upper_tor16: + - mux_sim.upper_tor16 + - sonic_dut_0.Ethernet36 + mux_sim_to_upper_tor17: + - mux_sim.upper_tor17 + - sonic_dut_0.Ethernet38 + mux_sim_to_upper_tor18: + - mux_sim.upper_tor18 + - sonic_dut_0.Ethernet44 + mux_sim_to_upper_tor19: + - mux_sim.upper_tor19 + - sonic_dut_0.Ethernet46 + mux_sim_to_upper_tor20: + - mux_sim.upper_tor20 + - sonic_dut_0.Ethernet48 + mux_sim_to_upper_tor21: + - mux_sim.upper_tor21 + - sonic_dut_0.Ethernet50 + mux_sim_to_upper_tor22: + - mux_sim.upper_tor22 + - sonic_dut_0.Ethernet52 + mux_sim_to_upper_tor23: + - mux_sim.upper_tor23 + - sonic_dut_0.Ethernet54 + + mux_sim_to_lower_tor0: + - mux_sim.lower_tor0 + - sonic_dut_1.Ethernet0 + mux_sim_to_lower_tor1: + - mux_sim.lower_tor1 + - sonic_dut_1.Ethernet2 + mux_sim_to_lower_tor2: + - mux_sim.lower_tor2 + - sonic_dut_1.Ethernet4 + mux_sim_to_lower_tor3: + - mux_sim.lower_tor3 + - sonic_dut_1.Ethernet6 + mux_sim_to_lower_tor4: + - mux_sim.lower_tor4 + - sonic_dut_1.Ethernet8 + mux_sim_to_lower_tor5: + - mux_sim.lower_tor5 + - sonic_dut_1.Ethernet10 + mux_sim_to_lower_tor6: + - mux_sim.lower_tor6 + - sonic_dut_1.Ethernet16 + mux_sim_to_lower_tor7: + - mux_sim.lower_tor7 + - sonic_dut_1.Ethernet18 + mux_sim_to_lower_tor8: + - mux_sim.lower_tor8 + - sonic_dut_1.Ethernet20 + mux_sim_to_lower_tor9: + - mux_sim.lower_tor9 + - sonic_dut_1.Ethernet22 + mux_sim_to_lower_tor10: + - mux_sim.lower_tor10 + - sonic_dut_1.Ethernet24 + mux_sim_to_lower_tor11: + - mux_sim.lower_tor11 + - sonic_dut_1.Ethernet26 + mux_sim_to_lower_tor12: + - mux_sim.lower_tor12 + - sonic_dut_1.Ethernet28 + mux_sim_to_lower_tor13: + - mux_sim.lower_tor13 + - sonic_dut_1.Ethernet30 + mux_sim_to_lower_tor14: + - mux_sim.lower_tor14 + - sonic_dut_1.Ethernet32 + mux_sim_to_lower_tor15: + - mux_sim.lower_tor15 + - sonic_dut_1.Ethernet34 + mux_sim_to_lower_tor16: + - mux_sim.lower_tor16 + - sonic_dut_1.Ethernet36 + mux_sim_to_lower_tor17: + - mux_sim.lower_tor17 + - sonic_dut_1.Ethernet38 + mux_sim_to_lower_tor18: + - mux_sim.lower_tor18 + - sonic_dut_1.Ethernet44 + mux_sim_to_lower_tor19: + - mux_sim.lower_tor19 + - sonic_dut_1.Ethernet46 + mux_sim_to_lower_tor20: + - mux_sim.lower_tor20 + - sonic_dut_1.Ethernet48 + mux_sim_to_lower_tor21: + - mux_sim.lower_tor21 + - sonic_dut_1.Ethernet50 + mux_sim_to_lower_tor22: + - mux_sim.lower_tor22 + - sonic_dut_1.Ethernet52 + mux_sim_to_lower_tor23: + - mux_sim.lower_tor23 + - sonic_dut_1.Ethernet54 + + custom: + ptf_injected_dut_0_to_veos1_1: + ports: + - docker_ptf.eth56 + - sonic_dut_0.Ethernet12 + - veos1.Ethernet1 + ptf_injected_dut_0_to_veos1_2: + ports: + - docker_ptf.eth57 + - sonic_dut_0.Ethernet13 + - veos1.Ethernet2 + ptf_injected_dut_0_to_veos2_1: + ports: + - docker_ptf.eth60 + - sonic_dut_0.Ethernet14 + - veos2.Ethernet1 + ptf_injected_dut_0_to_veos2_2: + ports: + - docker_ptf.eth61 + - sonic_dut_0.Ethernet15 + - veos2.Ethernet2 + ptf_injected_dut_0_to_veos3_1: + ports: + - docker_ptf.eth64 + - sonic_dut_0.Ethernet40 + - veos3.Ethernet1 + ptf_injected_dut_0_to_veos3_2: + ports: + - docker_ptf.eth65 + - sonic_dut_0.Ethernet41 + - veos3.Ethernet2 + ptf_injected_dut_0_to_veos4_1: + ports: + - docker_ptf.eth68 + - sonic_dut_0.Ethernet42 + - veos4.Ethernet1 + ptf_injected_dut_0_to_veos4_2: + ports: + - docker_ptf.eth69 + - sonic_dut_0.Ethernet43 + - veos4.Ethernet2 + + ptf_injected_dut_1_to_veos1_1: + ports: + - docker_ptf.eth58 + - sonic_dut_1.Ethernet12 + - veos1.Ethernet3 + ptf_injected_dut_1_to_veos1_2: + ports: + - docker_ptf.eth59 + - sonic_dut_1.Ethernet13 + - veos1.Ethernet4 + ptf_injected_dut_1_to_veos2_1: + ports: + - docker_ptf.eth62 + - sonic_dut_1.Ethernet14 + - veos2.Ethernet3 + ptf_injected_dut_1_to_veos2_2: + ports: + - docker_ptf.eth63 + - sonic_dut_1.Ethernet15 + - veos2.Ethernet4 + ptf_injected_dut_1_to_veos3_1: + ports: + - docker_ptf.eth66 + - sonic_dut_1.Ethernet40 + - veos3.Ethernet3 + ptf_injected_dut_1_to_veos3_2: + ports: + - docker_ptf.eth67 + - sonic_dut_1.Ethernet41 + - veos3.Ethernet4 + ptf_injected_dut_1_to_veos4_1: + ports: + - docker_ptf.eth70 + - sonic_dut_1.Ethernet42 + - veos4.Ethernet3 + ptf_injected_dut_1_to_veos4_2: + ports: + - docker_ptf.eth71 + - sonic_dut_1.Ethernet43 + - veos4.Ethernet4 + + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane + diff --git a/pyvxr_yaml_files/sonic_sfxr_t1_topo.yaml b/pyvxr_yaml_files/sonic_sfxr_t1_topo.yaml new file mode 100644 index 00000000000..d8470ba5100 --- /dev/null +++ b/pyvxr_yaml_files/sonic_sfxr_t1_topo.yaml @@ -0,0 +1,226 @@ +simulation: + sim_rel: /auto/vxr/vxr2_user/vxr2_npsuite_1.50.0 + slurm_flags: + hours: 120 + cores: 80 + partition: bigmem_amd + +devices: + veos1: + platform: spitfire_f + xr_port_redir: [22] + image: /auto/vxr1/srini/images/sdk/1.29.0.1/xr-dev/8000-x64.iso + + ptf: + platform: linux + image: /auto/vxr1/skorka/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: True + vcpu: 4 + memory: '4G' + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/sonic-cisco-8000.bin.test + linecard_versions: [p7] + linux_username: admin + linux_password: YourPaSsWoRd + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[2..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - ptf.eth1 + - sonic_dut.Ethernet0 + - veos1.FourHundredGigE0/0/0/0 + ptf_injected2: + ports: + - ptf.eth2 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - ptf.eth3 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - ptf.eth4 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - ptf.eth5 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - ptf.eth6 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - ptf.eth7 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - ptf.eth8 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - ptf.eth9 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - ptf.eth10 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - ptf.eth11 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - ptf.eth12 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - ptf.eth13 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - ptf.eth14 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - ptf.eth15 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - ptf.eth16 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - ptf.eth17 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - ptf.eth18 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - ptf.eth19 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - ptf.eth20 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - ptf.eth21 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - ptf.eth22 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - ptf.eth23 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - ptf.eth24 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - ptf.eth25 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - ptf.eth26 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - ptf.eth27 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - ptf.eth28 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - ptf.eth29 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - ptf.eth30 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - ptf.eth31 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - ptf.eth32 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[2..32].Ethernet9 + - ptf.eth33 + - veos1.FourHundredGigE0/0/0/9 diff --git a/pyvxr_yaml_files/sonic_t0_topo.yaml b/pyvxr_yaml_files/sonic_t0_topo.yaml new file mode 100644 index 00000000000..d54aaec6291 --- /dev/null +++ b/pyvxr_yaml_files/sonic_t0_topo.yaml @@ -0,0 +1,86 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2.new + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0: + - docker_ptf.eth[0..26] + - sonic_dut.Ethernet[0..26] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.eth32 diff --git a/pyvxr_yaml_files/sonic_t1_8_lag_topo.yaml b/pyvxr_yaml_files/sonic_t1_8_lag_topo.yaml new file mode 100644 index 00000000000..1bd12687dda --- /dev/null +++ b/pyvxr_yaml_files/sonic_t1_8_lag_topo.yaml @@ -0,0 +1,98 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_22.4/sonic-cisco-8000.bin + linecard_types: [matilda32] + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 32 + memory: '64G' + +device_groups: + veos: + devices: + - "veos[1..6]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos1.Ethernet2 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos2.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos2.Ethernet2 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos3.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos4.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos5.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos6.Ethernet1 + backplane: + ports: + - veos[1..6].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/sonic_t1_topo.yaml b/pyvxr_yaml_files/sonic_t1_topo.yaml new file mode 100644 index 00000000000..6ed99b303c7 --- /dev/null +++ b/pyvxr_yaml_files/sonic_t1_topo.yaml @@ -0,0 +1,222 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v2.qcow2.new + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.eth32 diff --git a/pyvxr_yaml_files/sonic_t2_2lc_min_ports-LL.yaml b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-LL.yaml new file mode 100644 index 00000000000..94df901006e --- /dev/null +++ b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-LL.yaml @@ -0,0 +1,144 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 48 + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + pyvxr_flags: + sonic_lc_bringup: True + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: True + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_d + os_type: sonic + lcc_type: havoc-gb + num_linecards: 2 + linecard_types: [ 'lancer', 'lancer' ] + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + linux_config: udhcpc -q -s /lib/onie/udhcp4_net -n -i eth0 + image: /auto/sonic/anamehra/onie-recovery-x86_64-cisco_8000-r0.iso.unsigned + onie-install: ./sonic-cisco-8000.bin + vxr_sim_config: + shelf: + ConfigS1Setenv: "ENABLE_NSIM_LOG,disabled" + ConfigNsimLoggingLevel: "DISABLED" + ConfigS1LogLevel: "DISABLED" + rp: + ConfigNicOrder: "mgmt-ce-punt" + lc: + ConfigNicOrder: "mgmt-ce-punt" + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..8]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected_01_T3_1: + ports: + - sonic_dut.FourHundredGigE0/0/0/4 + - veos1.Ethernet1 + - docker_ptf.eth0 + ptf_injected_01_T3_2: + ports: + - sonic_dut.FourHundredGigE0/0/0/5 + - veos1.Ethernet2 + - docker_ptf.eth1 + + ptf_injected_03_T3: + ports: + - sonic_dut.FourHundredGigE0/0/0/8 + - veos2.Ethernet1 + - docker_ptf.eth2 + + ptf_injected_04_T3_1: + ports: + - sonic_dut.FourHundredGigE0/0/0/25 + - veos3.Ethernet1 + - docker_ptf.eth3 + ptf_injected_04_T3_2: + ports: + - sonic_dut.FourHundredGigE0/0/0/28 + - veos3.Ethernet2 + - docker_ptf.eth4 + + ptf_injected_06_T3: + ports: + - sonic_dut.FourHundredGigE0/0/0/23 + - veos4.Ethernet1 + - docker_ptf.eth5 + + ptf_injected_01_T1_1: + ports: + - sonic_dut.FourHundredGigE0/1/0/2 + - veos5.Ethernet1 + - docker_ptf.eth6 + ptf_injected_01_T1_2: + ports: + - sonic_dut.FourHundredGigE0/1/0/3 + - veos5.Ethernet2 + - docker_ptf.eth7 + + ptf_injected_03_T1: + ports: + - sonic_dut.FourHundredGigE0/1/0/6 + - veos6.Ethernet1 + - docker_ptf.eth8 + + ptf_injected_04_T1_1: + ports: + - sonic_dut.FourHundredGigE0/1/0/20 + - veos7.Ethernet1 + - docker_ptf.eth9 + ptf_injected_04_T1_2: + ports: + - sonic_dut.FourHundredGigE0/1/0/21 + - veos7.Ethernet2 + - docker_ptf.eth10 + + ptf_injected_06_T1: + ports: + - sonic_dut.FourHundredGigE0/1/0/28 + - veos8.Ethernet1 + - docker_ptf.eth11 + + backplane: + ports: + - veos[1..8].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/sonic_t2_2lc_min_ports-VG.yaml b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-VG.yaml new file mode 100644 index 00000000000..4362ba50830 --- /dev/null +++ b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-VG.yaml @@ -0,0 +1,152 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 48 + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + pyvxr_flags: + sonic_lc_bringup: true + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_d + os_type: sonic + lcc_type: havoc-gb + num_linecards: 2 + linecard_types: ['vanguard', 'gauntlet'] + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + linux_config: udhcpc -q -s /lib/onie/udhcp4_net -n -i eth0 + image: /auto/sonic/anamehra/onie-recovery-x86_64-cisco_8000-r0.iso.unsigned + onie-install: ./sonic-cisco-8000.bin + vxr_sim_config: + #shelf: + # ConfigS1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.11.80/npl + # ConfigS1NpsuiteVer: 1.137.1 + rp: + ConfigNicOrder: "mgmt-ce-punt" + lc: + ConfigNicOrder: "mgmt-ce-punt" + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..8]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +# ARISTA 01 T3: veos1 +# ARISTA 03 T3: veos2 +# ARISTA 04 T3: veos3 +# ARISTA 06 T3: veos4 +# +# ARISTA 01 T1: veos5 +# ARISTA 03 T1: veos6 +# ARISTA 04 T1: veos7 +# ARISTA 06 T1: veos8 +connections: + custom: + ptf_injected_01_T3_1: + ports: + - sonic_dut.FourHundredGigE0/0/0/4 + - veos1.Ethernet1 + - docker_ptf.eth0 + ptf_injected_01_T3_2: + ports: + - sonic_dut.FourHundredGigE0/0/0/5 + - veos1.Ethernet2 + - docker_ptf.eth1 + + ptf_injected_03_T3: + ports: + - sonic_dut.FourHundredGigE0/0/0/8 + - veos2.Ethernet1 + - docker_ptf.eth2 + + ptf_injected_04_T3_1: + ports: + - sonic_dut.FourHundredGigE0/0/0/25 + - veos3.Ethernet1 + - docker_ptf.eth3 + ptf_injected_04_T3_2: + ports: + - sonic_dut.FourHundredGigE0/0/0/28 + - veos3.Ethernet2 + - docker_ptf.eth4 + + ptf_injected_06_T3: + ports: + - sonic_dut.FourHundredGigE0/0/0/23 + - veos4.Ethernet1 + - docker_ptf.eth5 + + ptf_injected_01_T1_1: + ports: + - sonic_dut.HundredGigE0/1/0/2 + - veos5.Ethernet1 + - docker_ptf.eth6 + ptf_injected_01_T1_2: + ports: + - sonic_dut.HundredGigE0/1/0/3 + - veos5.Ethernet2 + - docker_ptf.eth7 + + ptf_injected_03_T1: + ports: + - sonic_dut.HundredGigE0/1/0/6 + - veos6.Ethernet1 + - docker_ptf.eth8 + + ptf_injected_04_T1_1: + ports: + - sonic_dut.HundredGigE0/1/0/23 + - veos7.Ethernet1 + - docker_ptf.eth9 + ptf_injected_04_T1_2: + ports: + - sonic_dut.HundredGigE0/1/0/25 + - veos7.Ethernet2 + - docker_ptf.eth10 + + ptf_injected_06_T1: + ports: + - sonic_dut.HundredGigE0/1/0/28 + - veos8.Ethernet1 + - docker_ptf.eth11 + + backplane: + ports: + - veos[1..8].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/sonic_t2_2lc_min_ports-VL.yaml b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-VL.yaml new file mode 100644 index 00000000000..239f9f301f1 --- /dev/null +++ b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-VL.yaml @@ -0,0 +1,144 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 48 + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + pyvxr_flags: + sonic_lc_bringup: True + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: True + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_d + os_type: sonic + lcc_type: havoc-gb + num_linecards: 2 + linecard_types: [ 'vanguard', 'lancer' ] + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + linux_config: udhcpc -q -s /lib/onie/udhcp4_net -n -i eth0 + image: /auto/sonic/anamehra/onie-recovery-x86_64-cisco_8000-r0.iso.unsigned + onie-install: ./sonic-cisco-8000.bin + vxr_sim_config: + shelf: + ConfigS1Setenv: "ENABLE_NSIM_LOG,disabled" + ConfigNsimLoggingLevel: "DISABLED" + ConfigS1LogLevel: "DISABLED" + rp: + ConfigNicOrder: "mgmt-ce-punt" + lc: + ConfigNicOrder: "mgmt-ce-punt" + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..8]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected_01_T3_1: + ports: + - sonic_dut.FourHundredGigE0/0/0/4 + - veos1.Ethernet1 + - docker_ptf.eth0 + ptf_injected_01_T3_2: + ports: + - sonic_dut.FourHundredGigE0/0/0/5 + - veos1.Ethernet2 + - docker_ptf.eth1 + + ptf_injected_03_T3: + ports: + - sonic_dut.FourHundredGigE0/0/0/8 + - veos2.Ethernet1 + - docker_ptf.eth2 + + ptf_injected_04_T3_1: + ports: + - sonic_dut.FourHundredGigE0/0/0/25 + - veos3.Ethernet1 + - docker_ptf.eth3 + ptf_injected_04_T3_2: + ports: + - sonic_dut.FourHundredGigE0/0/0/28 + - veos3.Ethernet2 + - docker_ptf.eth4 + + ptf_injected_06_T3: + ports: + - sonic_dut.FourHundredGigE0/0/0/23 + - veos4.Ethernet1 + - docker_ptf.eth5 + + ptf_injected_01_T1_1: + ports: + - sonic_dut.FourHundredGigE0/1/0/2 + - veos5.Ethernet1 + - docker_ptf.eth6 + ptf_injected_01_T1_2: + ports: + - sonic_dut.FourHundredGigE0/1/0/3 + - veos5.Ethernet2 + - docker_ptf.eth7 + + ptf_injected_03_T1: + ports: + - sonic_dut.FourHundredGigE0/1/0/6 + - veos6.Ethernet1 + - docker_ptf.eth8 + + ptf_injected_04_T1_1: + ports: + - sonic_dut.FourHundredGigE0/1/0/20 + - veos7.Ethernet1 + - docker_ptf.eth9 + ptf_injected_04_T1_2: + ports: + - sonic_dut.FourHundredGigE0/1/0/21 + - veos7.Ethernet2 + - docker_ptf.eth10 + + ptf_injected_06_T1: + ports: + - sonic_dut.FourHundredGigE0/1/0/28 + - veos8.Ethernet1 + - docker_ptf.eth11 + + backplane: + ports: + - veos[1..8].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/sonic_t2_2lc_min_ports-masic.yaml b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-masic.yaml new file mode 100644 index 00000000000..eb15e1fbe81 --- /dev/null +++ b/pyvxr_yaml_files/sonic_t2_2lc_min_ports-masic.yaml @@ -0,0 +1,149 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 26 + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + pyvxr_flags: + sonic_lc_bringup: true + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '4G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..64] + - backplane + + sonic_dut: + platform: spitfire_d + os_type: sonic + lcc_type: havoc-gb + num_linecards: 2 + linecard_types: ['gauntlet', 'gauntlet'] + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + linux_config: udhcpc -q -s /lib/onie/udhcp4_net -n -i eth0 + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: ./sonic-cisco-8000.bin + vxr_sim_config: + rp: + ConfigNicOrder: "mgmt-ce-punt" + lc: + ConfigNicOrder: "mgmt-ce-punt" + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + veos: + devices: + - "veos[1..8]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +# ARISTA 01 T3: veos1 +# ARISTA 03 T3: veos2 +# ARISTA 04 T3: veos3 +# ARISTA 06 T3: veos4 +# +# ARISTA 01 T1: veos5 +# ARISTA 03 T1: veos6 +# ARISTA 04 T1: veos7 +# ARISTA 06 T1: veos8 +connections: + custom: + ptf_injected_01_T3_1: + ports: + - sonic_dut.HundredGigE0/0/0/4 + - veos1.Ethernet1 + - docker_ptf.eth0 + ptf_injected_01_T3_2: + ports: + - sonic_dut.HundredGigE0/0/0/5 + - veos1.Ethernet2 + - docker_ptf.eth1 + + ptf_injected_03_T3: + ports: + - sonic_dut.HundredGigE0/0/0/8 + - veos2.Ethernet1 + - docker_ptf.eth2 + + ptf_injected_04_T3_1: + ports: + - sonic_dut.HundredGigE0/0/0/25 + - veos3.Ethernet1 + - docker_ptf.eth3 + ptf_injected_04_T3_2: + ports: + - sonic_dut.HundredGigE0/0/0/28 + - veos3.Ethernet2 + - docker_ptf.eth4 + + ptf_injected_06_T3: + ports: + - sonic_dut.HundredGigE0/0/0/23 + - veos4.Ethernet1 + - docker_ptf.eth5 + + ptf_injected_01_T1_1: + ports: + - sonic_dut.HundredGigE0/1/0/2 + - veos5.Ethernet1 + - docker_ptf.eth6 + ptf_injected_01_T1_2: + ports: + - sonic_dut.HundredGigE0/1/0/3 + - veos5.Ethernet2 + - docker_ptf.eth7 + + ptf_injected_03_T1: + ports: + - sonic_dut.HundredGigE0/1/0/6 + - veos6.Ethernet1 + - docker_ptf.eth8 + + ptf_injected_04_T1_1: + ports: + - sonic_dut.HundredGigE0/1/0/23 + - veos7.Ethernet1 + - docker_ptf.eth9 + ptf_injected_04_T1_2: + ports: + - sonic_dut.HundredGigE0/1/0/25 + - veos7.Ethernet2 + - docker_ptf.eth10 + + ptf_injected_06_T1: + ports: + - sonic_dut.HundredGigE0/1/0/28 + - veos8.Ethernet1 + - docker_ptf.eth11 + + backplane: + ports: + - veos[1..8].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/sonic_xr_t1_topo.yaml b/pyvxr_yaml_files/sonic_xr_t1_topo.yaml new file mode 100644 index 00000000000..e0a6389bd98 --- /dev/null +++ b/pyvxr_yaml_files/sonic_xr_t1_topo.yaml @@ -0,0 +1,218 @@ +simulation: + sim_rel: /auto/vxr/vxr2_user/vxr2_npsuite_1.50.0 + slurm_flags: + hours: 120 + partition: bigmem_intel + +devices: + + ptf: + platform: linux + image: /auto/vxr/images/onie-sonic/ptf_docker_v2.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: True + vcpu: 4 + memory: '4G' + + sonic_dut: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/sonic-cisco-8000.bin.test + linecard_versions: [p7] + linux_username: admin + linux_password: YourPaSsWoRd + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_sonic_mgmt_081320.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +device_groups: + xrv9k: + devices: + - "xrv9k[1..32]" + platform: xrv9k + vcpu: 2 + memory: "8G" + xr_port_redir: [22] + image: /auto/vxr/images/xrv9k/xrv9k-fullk9-x-7.0.1.138I.qcow2 + +connections: + custom: + ptf_injected1: + ports: + - ptf.eth1 + - sonic_dut.Ethernet0 + - xrv9k1.GigabitEthernet0/0/0/0 + ptf_injected2: + ports: + - ptf.eth2 + - sonic_dut.Ethernet1 + - xrv9k2.GigabitEthernet0/0/0/0 + ptf_injected3: + ports: + - ptf.eth3 + - sonic_dut.Ethernet2 + - xrv9k3.GigabitEthernet0/0/0/0 + ptf_injected4: + ports: + - ptf.eth4 + - sonic_dut.Ethernet3 + - xrv9k4.GigabitEthernet0/0/0/0 + ptf_injected5: + ports: + - ptf.eth5 + - sonic_dut.Ethernet4 + - xrv9k5.GigabitEthernet0/0/0/0 + ptf_injected6: + ports: + - ptf.eth6 + - sonic_dut.Ethernet5 + - xrv9k6.GigabitEthernet0/0/0/0 + ptf_injected7: + ports: + - ptf.eth7 + - sonic_dut.Ethernet6 + - xrv9k7.GigabitEthernet0/0/0/0 + ptf_injected8: + ports: + - ptf.eth8 + - sonic_dut.Ethernet7 + - xrv9k8.GigabitEthernet0/0/0/0 + ptf_injected9: + ports: + - ptf.eth9 + - sonic_dut.Ethernet8 + - xrv9k9.GigabitEthernet0/0/0/0 + ptf_injected10: + ports: + - ptf.eth10 + - sonic_dut.Ethernet9 + - xrv9k10.GigabitEthernet0/0/0/0 + ptf_injected11: + ports: + - ptf.eth11 + - sonic_dut.Ethernet10 + - xrv9k11.GigabitEthernet0/0/0/0 + ptf_injected12: + ports: + - ptf.eth12 + - sonic_dut.Ethernet11 + - xrv9k12.GigabitEthernet0/0/0/0 + ptf_injected13: + ports: + - ptf.eth13 + - sonic_dut.Ethernet12 + - xrv9k13.GigabitEthernet0/0/0/0 + ptf_injected14: + ports: + - ptf.eth14 + - sonic_dut.Ethernet13 + - xrv9k14.GigabitEthernet0/0/0/0 + ptf_injected15: + ports: + - ptf.eth15 + - sonic_dut.Ethernet14 + - xrv9k15.GigabitEthernet0/0/0/0 + ptf_injected16: + ports: + - ptf.eth16 + - sonic_dut.Ethernet15 + - xrv9k16.GigabitEthernet0/0/0/0 + ptf_injected17: + ports: + - ptf.eth17 + - sonic_dut.Ethernet16 + - xrv9k17.GigabitEthernet0/0/0/0 + ptf_injected18: + ports: + - ptf.eth18 + - sonic_dut.Ethernet17 + - xrv9k18.GigabitEthernet0/0/0/0 + ptf_injected19: + ports: + - ptf.eth19 + - sonic_dut.Ethernet18 + - xrv9k19.GigabitEthernet0/0/0/0 + ptf_injected20: + ports: + - ptf.eth20 + - sonic_dut.Ethernet19 + - xrv9k20.GigabitEthernet0/0/0/0 + ptf_injected21: + ports: + - ptf.eth21 + - sonic_dut.Ethernet20 + - xrv9k21.GigabitEthernet0/0/0/0 + ptf_injected22: + ports: + - ptf.eth22 + - sonic_dut.Ethernet21 + - xrv9k22.GigabitEthernet0/0/0/0 + ptf_injected23: + ports: + - ptf.eth23 + - sonic_dut.Ethernet22 + - xrv9k23.GigabitEthernet0/0/0/0 + ptf_injected24: + ports: + - ptf.eth24 + - sonic_dut.Ethernet23 + - xrv9k24.GigabitEthernet0/0/0/0 + ptf_injected25: + ports: + - ptf.eth25 + - sonic_dut.Ethernet24 + - xrv9k25.GigabitEthernet0/0/0/0 + ptf_injected26: + ports: + - ptf.eth26 + - sonic_dut.Ethernet25 + - xrv9k26.GigabitEthernet0/0/0/0 + ptf_injected27: + ports: + - ptf.eth27 + - sonic_dut.Ethernet26 + - xrv9k27.GigabitEthernet0/0/0/0 + ptf_injected28: + ports: + - ptf.eth28 + - sonic_dut.Ethernet27 + - xrv9k28.GigabitEthernet0/0/0/0 + ptf_injected29: + ports: + - ptf.eth29 + - sonic_dut.Ethernet28 + - xrv9k29.GigabitEthernet0/0/0/0 + ptf_injected30: + ports: + - ptf.eth30 + - sonic_dut.Ethernet29 + - xrv9k30.GigabitEthernet0/0/0/0 + ptf_injected31: + ports: + - ptf.eth31 + - sonic_dut.Ethernet30 + - xrv9k31.GigabitEthernet0/0/0/0 + ptf_injected32: + ports: + - ptf.eth32 + - sonic_dut.Ethernet31 + - xrv9k32.GigabitEthernet0/0/0/0 + backplane: + ports: + - xrv9k[1..32].GigabitEthernet0/0/0/9 + - ptf.eth33 diff --git a/pyvxr_yaml_files/spytest_2D_linux_cmono.yaml b/pyvxr_yaml_files/spytest_2D_linux_cmono.yaml new file mode 100644 index 00000000000..59b75da1093 --- /dev/null +++ b/pyvxr_yaml_files/spytest_2D_linux_cmono.yaml @@ -0,0 +1,55 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 60 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [8101-32FH] + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: cisco123 + linux_username: cisco + onie-install: /ws/stalarir-sjc/images/sonic-cisco-8000-tgen.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + vxr_sim_config: + shelf: + ConfigS1NpsuiteVer: '1.184.1' + ConfigS1SdkVer: '24.11.3000.27' + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azim + SD2: + <<: *sonic_router + + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..7] + - SD2.Ethernet[0..7] diff --git a/pyvxr_yaml_files/spytest_2d.yaml b/pyvxr_yaml_files/spytest_2d.yaml new file mode 100644 index 00000000000..59652037bfb --- /dev/null +++ b/pyvxr_yaml_files/spytest_2d.yaml @@ -0,0 +1,66 @@ +simulation: + sim_rel: /auto/vxr/vxr2_user/vxr2_npsuite_1.50.0 + slurm_flags: + hours: 120 + +devices: + + SD1: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/sonic-cisco-8000.bin.test + linecard_versions: [p7] + linux_username: admin + linux_password: YourPaSsWoRd + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + SD2: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/sonic-cisco-8000.bin.test + linecard_versions: [p7] + linux_username: admin + linux_password: YourPaSsWoRd + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + spt: + platform: spirent_cafy1 + spirent_images: + windows: /auto/vxr/vxr_images/spirent/WindowsWithTestCenter_5_05 + api: /auto/vxr/vxr_images/spirent/Spirent_TestCenter_LabServer-5.05.img + port: /auto/vxr/vxr_images/spirent/sptvm-5_05.img + data_ports: + - data0 + - data1 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet0 + - SD2.Ethernet0 + hub1: + - SD1.Ethernet1 + - spt.data0 + hub2: + - SD2.Ethernet1 + - spt.data1 + + diff --git a/pyvxr_yaml_files/spytest_4D_tgen_vxr.yaml b/pyvxr_yaml_files/spytest_4D_tgen_vxr.yaml new file mode 100644 index 00000000000..5594a910c81 --- /dev/null +++ b/pyvxr_yaml_files/spytest_4D_tgen_vxr.yaml @@ -0,0 +1,110 @@ +simulation: + slurm_flags: + hours: 120 + +devices: + + SD1: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + + SD2: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + + SD3: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + + SD4: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.37.0_NPS1.70.2/npl + ConfigS1NpsuiteVer: 1.70.1 + + spt: + platform: spirent_cafy1 + spirent_images: + windows: /auto/vxr/vxr_images/spirent/WindowsWithTestCenter_5_05 + api: /auto/vxr/vxr_images/spirent/Spirent_TestCenter_LabServer-5.05-dhcp.img + port: /auto/vxr/vxr_images/spirent/sptvm-5_05-dhcp.img + data_ports: + - data0 + - data1 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD2.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD3.Ethernet[0..3] + hub2: + - SD1.Ethernet[8..11] + - SD4.Ethernet[0..3] + hub3: + - SD2.Ethernet[4..7] + - SD3.Ethernet[4..7] + hub4: + - SD2.Ethernet[8..11] + - SD4.Ethernet[4..7] + hub5: + - SD3.Ethernet[8..11] + - SD4.Ethernet[8..11] + hub6: + - SD1.Ethernet12 + - spt.data0 + hub7: + - SD4.Ethernet12 + - spt.data1 + + diff --git a/pyvxr_yaml_files/spytest_4D_vxr.yaml b/pyvxr_yaml_files/spytest_4D_vxr.yaml new file mode 100644 index 00000000000..e7a791e4582 --- /dev/null +++ b/pyvxr_yaml_files/spytest_4D_vxr.yaml @@ -0,0 +1,92 @@ +simulation: + sim_rel: /auto/vxr/vxr2_user/vxr2_npsuite_1.61.1 + sim_flags: [-k ConfigLeabaSdkVer=1.32.1 -k ConfigDsimNplPath=/ws/venkatg-sjc/sonic/for_devesh/npl -k ConfigNpsuiteVer=1.61.1 -k ConfigLeabaLib=/auto/vxr1/srini/1.61.1_sonic/libdsim.so] + slurm_flags: + hours: 120 + +devices: + + SD1: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/pevenkat/sonic_nsim_oct2.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + SD2: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/pevenkat/sonic_nsim_oct2.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + SD3: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/pevenkat/sonic_nsim_oct2.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + SD4: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/pevenkat/sonic_nsim_oct2.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + vxr_sim_config: + shelf: + ConfigDsimNplPath: /auto/vxr/sonic_npl/1.50.0 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD2.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD3.Ethernet[0..3] + hub2: + - SD1.Ethernet[8..11] + - SD4.Ethernet[0..3] + hub3: + - SD2.Ethernet[4..7] + - SD3.Ethernet[4..7] + hub4: + - SD2.Ethernet[8..11] + - SD4.Ethernet[4..7] + hub5: + - SD3.Ethernet[8..11] + - SD4.Ethernet[8..11] + + diff --git a/pyvxr_yaml_files/spytest_4node_vxr.yaml b/pyvxr_yaml_files/spytest_4node_vxr.yaml new file mode 100644 index 00000000000..f9c07df2a92 --- /dev/null +++ b/pyvxr_yaml_files/spytest_4node_vxr.yaml @@ -0,0 +1,70 @@ +simulation: + no_image_copy: true + sim_rel: /auto/vxr/vxr2_user/vxr2_npsuite_1.61.5 + sim_flags: [-k ConfigLeabaSdkVer=1.33.1 -k ConfigNpsuiteVer=1.61.5 -k ConfigDsimNplPath=/auto/vxr1/sonic-images/SDK1.33_NPS1.61.5/npl] + slurm_flags: + hours: 120 + +devices: + + SD1: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /ws/venkatg-sjc/sonic/201911/IMAGES/dt_drop_2/sonic-cisco-8000.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + + SD2: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /ws/venkatg-sjc/sonic/201911/IMAGES/dt_drop_2/sonic-cisco-8000.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + + SD3: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /ws/venkatg-sjc/sonic/201911/IMAGES/dt_drop_2/sonic-cisco-8000.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + + SD4: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: /ws/venkatg-sjc/sonic/201911/IMAGES/dt_drop_2/sonic-cisco-8000.bin + linecard_versions: [p7] + linux_username: "cisco" + linux_password: "cisco123" + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /globalnobackup/sonic/ubuntu1804_spytest.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet1 + - SD2.Ethernet1 + hub1: + - SD2.Ethernet2 + - SD3.Ethernet1 + hub2: + - SD3.Ethernet2 + - SD4.Ethernet1 diff --git a/pyvxr_yaml_files/spytest_topo2_vxr.yaml b/pyvxr_yaml_files/spytest_topo2_vxr.yaml new file mode 100644 index 00000000000..3a103e73aee --- /dev/null +++ b/pyvxr_yaml_files/spytest_topo2_vxr.yaml @@ -0,0 +1,80 @@ +simulation: + no_image_copy: true + slurm_flags: + hours: 120 + partition: bigmem_intel + + +devices: + + SD1: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.50.0.4_NPS1.90.0/npl + ConfigS1NpsuiteVer: 1.70.1 + + SD2: + platform: spitfire_f + os_type: sonic + xr_port_redir: [22] + linux_username: "cisco" + linux_password: "cisco123" + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + onie-install: http://172.29.93.10/sonic-images/dt_drop_6.2/sonic-cisco-8000.bin + linecard_versions: [p7] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/vxr1/sonic-images/SDK1.50.0.4_NPS1.90.0/npl + ConfigS1NpsuiteVer: 1.70.1 + + spt: + platform: spirent_cafy1 + os_type: spirent + linux_username: admin + linux_password: spt_admin + linux_prompt: 'admin>>' + spirent_images: + windows: /auto/vxr/vxr_images/spirent/WindowsWithTestCenter_5_05 + api: /auto/vxr/vxr_images/spirent/Spirent_TestCenter_LabServer-5.05-dhcp.img + port: /auto/vxr/vxr_images/spirent/sptvm-5_05-dhcp.img + data_ports: + - data0 + - data1 + - data2 + - data3 + - data4 + - data5 + - data6 + - data7 + + sonic_mgmt : + platform: linux + xr_port_redir: [22] + image : /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD2.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - spt.data[0..3] + hub2: + - SD2.Ethernet[4..7] + - spt.data[4..7] + + diff --git a/pyvxr_yaml_files/superbolt_sonic_t0_topo.yaml b/pyvxr_yaml_files/superbolt_sonic_t0_topo.yaml new file mode 100644 index 00000000000..db071e36ddc --- /dev/null +++ b/pyvxr_yaml_files/superbolt_sonic_t0_topo.yaml @@ -0,0 +1,136 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v3.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + data_port_attributes: + transport: e1000 + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8122-64EHF-O'] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/mbagherz/sonic_images/202405/sonic-cisco-8000.bin + port_breakout: + lc0: + 0..63: 2x400 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0_0: + - docker_ptf.eth[0..1] + - sonic_dut.Ethernet0/[0..1] + hub0_1: + - docker_ptf.eth[2..3] + - sonic_dut.Ethernet1/[0..1] + hub0_2: + - docker_ptf.eth[4..5] + - sonic_dut.Ethernet2/[0..1] + hub0_3: + - docker_ptf.eth[6..7] + - sonic_dut.Ethernet3/[0..1] + hub0_4: + - docker_ptf.eth[8..9] + - sonic_dut.Ethernet4/[0..1] + hub0_5: + - docker_ptf.eth[10..11] + - sonic_dut.Ethernet5/[0..1] + hub0_6: + - docker_ptf.eth[12..13] + - sonic_dut.Ethernet6/[0..1] + hub0_7: + - docker_ptf.eth[14..15] + - sonic_dut.Ethernet7/[0..1] + hub0_8: + - docker_ptf.eth[16..17] + - sonic_dut.Ethernet8/[0..1] + hub0_9: + - docker_ptf.eth[18..19] + - sonic_dut.Ethernet9/[0..1] + hub0_10: + - docker_ptf.eth[20..21] + - sonic_dut.Ethernet10/[0..1] + hub0_11: + - docker_ptf.eth[22..23] + - sonic_dut.Ethernet11/[0..1] + hub0_12: + - docker_ptf.eth[24..25] + - sonic_dut.Ethernet12/[0..1] + hub0_13: + - docker_ptf.eth[26..27] + - sonic_dut.Ethernet13/[0..1] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet14/0 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet14/1 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet15/0 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet15/1 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/superbolt_sonic_t1_topo.yaml b/pyvxr_yaml_files/superbolt_sonic_t1_topo.yaml new file mode 100644 index 00000000000..1b5f6f125aa --- /dev/null +++ b/pyvxr_yaml_files/superbolt_sonic_t1_topo.yaml @@ -0,0 +1,231 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v3.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8122-64EHF-O'] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/mbagherz/sonic_images/202405/sonic-cisco-8000.bin + port_breakout: + lc0: + 0..63: 2x400 + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0/0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet0/1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet1/0 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet1/1 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet2/0 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet2/1 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet3/0 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet3/1 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet4/0 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet4/1 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet5/0 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet5/1 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet6/0 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet6/1 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet7/0 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet7/1 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet8/0 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet8/1 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet9/0 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet9/1 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet10/0 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet10/1 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet11/0 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet11/1 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet12/0 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet12/1 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet13/0 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet13/1 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet14/0 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet14/1 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet15/0 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet15/1 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/tgen_topo.yaml b/pyvxr_yaml_files/tgen_topo.yaml new file mode 100644 index 00000000000..8e99f85e81c --- /dev/null +++ b/pyvxr_yaml_files/tgen_topo.yaml @@ -0,0 +1,64 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [8101-32FH] + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: /ws/stalarir-sjc/images/sonic-cisco-8000-tgen.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azim + SD2: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..7] + - SD2.Ethernet[0..7] + hub6: + - SD1.Ethernet[8..9] + - ixia.data[6..7] + diff --git a/pyvxr_yaml_files/titan_sonic_t0_topo.yaml b/pyvxr_yaml_files/titan_sonic_t0_topo.yaml new file mode 100644 index 00000000000..2eea5e6a2a9 --- /dev/null +++ b/pyvxr_yaml_files/titan_sonic_t0_topo.yaml @@ -0,0 +1,132 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8223-64E-MO'] + npu_asic_versions: [A0] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/titan_cicd/202511/sonic-cisco-8000.bin + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..4]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + hubs: + hub0_0: + - docker_ptf.eth[0..1] + - sonic_dut.Ethernet[0..1] + hub0_1: + - docker_ptf.eth[2..3] + - sonic_dut.Ethernet[2..3] + hub0_2: + - docker_ptf.eth[4..5] + - sonic_dut.Ethernet[4..5] + hub0_3: + - docker_ptf.eth[6..7] + - sonic_dut.Ethernet[6..7] + hub0_4: + - docker_ptf.eth[8..9] + - sonic_dut.Ethernet[8..9] + hub0_5: + - docker_ptf.eth[10..11] + - sonic_dut.Ethernet[10..11] + hub0_6: + - docker_ptf.eth[12..13] + - sonic_dut.Ethernet[12..13] + hub0_7: + - docker_ptf.eth[14..15] + - sonic_dut.Ethernet[14..15] + hub0_8: + - docker_ptf.eth[16..17] + - sonic_dut.Ethernet[16..17] + hub0_9: + - docker_ptf.eth[18..19] + - sonic_dut.Ethernet[18..19] + hub0_10: + - docker_ptf.eth[20..21] + - sonic_dut.Ethernet[20..21] + hub0_11: + - docker_ptf.eth[22..23] + - sonic_dut.Ethernet[22..23] + hub0_12: + - docker_ptf.eth[24..25] + - sonic_dut.Ethernet[24..25] + hub0_13: + - docker_ptf.eth[26..27] + - sonic_dut.Ethernet[26..27] + custom: + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos1.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos2.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos3.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos4.Ethernet1 + backplane: + ports: + - veos[1..4].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/titan_sonic_t1_topo.yaml b/pyvxr_yaml_files/titan_sonic_t1_topo.yaml new file mode 100644 index 00000000000..15629cba43a --- /dev/null +++ b/pyvxr_yaml_files/titan_sonic_t1_topo.yaml @@ -0,0 +1,229 @@ +simulation: + no_image_copy: false + slurm_flags: + pending_timeout: 60 + hours: 20 + partition: regression + cluster: rch-slurm-m1 + +devices: + docker_ptf: + platform: linux + image: /auto/vxr/vxr_images/onie-sonic/ptf_docker_v4.qcow2 + linux_username: root + linux_password: lab + linux_prompt: root@docker-ptf:~# + xr_port_redir: [22] + extended_pci_bus: true + vcpu: 4 + memory: '8G' + mgmt_intf_name: mgmt + data_ports: + - eth[0..32] + - backplane + + sonic_dut: + platform: spitfire_f + os_type: sonic + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + xr_port_redir: [22] + linux_username: "admin" + linux_password: "password" + vcpu: 10 + memory: '20G' + linecard_types: ['8223-64E-MO'] + npu_asic_versions: [A0] + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + onie-install: /auto/vxr1/sonic-images/titan_cicd/202511/sonic-cisco-8000.bin + + sonic_mgmt: + platform: linux + xr_port_redir: [22] + image: /globalnobackup/sonic/ubuntu1804_mgt.qcow2 + linux_username: 'vxr' + linux_password: 'cisco123' + linux_prompt: 'vxr@vxr-vm:~\$' + vcpu: 10 + memory: '20G' + +device_groups: + veos: + devices: + - "veos[1..32]" + platform: veos + xr_port_redir: [22] + image: /auto/vxr/images/veos/Aboot-veos-serial-8.0.0.iso + disks: + - hda: + file: /auto/vxr/images/veos/vEOS-lab-4.24.1.1F.qcow2 + type: reference + +connections: + custom: + ptf_injected1: + ports: + - docker_ptf.eth0 + - sonic_dut.Ethernet0 + - veos1.Ethernet1 + ptf_injected2: + ports: + - docker_ptf.eth1 + - sonic_dut.Ethernet1 + - veos2.Ethernet1 + ptf_injected3: + ports: + - docker_ptf.eth2 + - sonic_dut.Ethernet2 + - veos3.Ethernet1 + ptf_injected4: + ports: + - docker_ptf.eth3 + - sonic_dut.Ethernet3 + - veos4.Ethernet1 + ptf_injected5: + ports: + - docker_ptf.eth4 + - sonic_dut.Ethernet4 + - veos5.Ethernet1 + ptf_injected6: + ports: + - docker_ptf.eth5 + - sonic_dut.Ethernet5 + - veos6.Ethernet1 + ptf_injected7: + ports: + - docker_ptf.eth6 + - sonic_dut.Ethernet6 + - veos7.Ethernet1 + ptf_injected8: + ports: + - docker_ptf.eth7 + - sonic_dut.Ethernet7 + - veos8.Ethernet1 + ptf_injected9: + ports: + - docker_ptf.eth8 + - sonic_dut.Ethernet8 + - veos9.Ethernet1 + ptf_injected10: + ports: + - docker_ptf.eth9 + - sonic_dut.Ethernet9 + - veos10.Ethernet1 + ptf_injected11: + ports: + - docker_ptf.eth10 + - sonic_dut.Ethernet10 + - veos11.Ethernet1 + ptf_injected12: + ports: + - docker_ptf.eth11 + - sonic_dut.Ethernet11 + - veos12.Ethernet1 + ptf_injected13: + ports: + - docker_ptf.eth12 + - sonic_dut.Ethernet12 + - veos13.Ethernet1 + ptf_injected14: + ports: + - docker_ptf.eth13 + - sonic_dut.Ethernet13 + - veos14.Ethernet1 + ptf_injected15: + ports: + - docker_ptf.eth14 + - sonic_dut.Ethernet14 + - veos15.Ethernet1 + ptf_injected16: + ports: + - docker_ptf.eth15 + - sonic_dut.Ethernet15 + - veos16.Ethernet1 + ptf_injected17: + ports: + - docker_ptf.eth16 + - sonic_dut.Ethernet16 + - veos17.Ethernet1 + ptf_injected18: + ports: + - docker_ptf.eth17 + - sonic_dut.Ethernet17 + - veos18.Ethernet1 + ptf_injected19: + ports: + - docker_ptf.eth18 + - sonic_dut.Ethernet18 + - veos19.Ethernet1 + ptf_injected20: + ports: + - docker_ptf.eth19 + - sonic_dut.Ethernet19 + - veos20.Ethernet1 + ptf_injected21: + ports: + - docker_ptf.eth20 + - sonic_dut.Ethernet20 + - veos21.Ethernet1 + ptf_injected22: + ports: + - docker_ptf.eth21 + - sonic_dut.Ethernet21 + - veos22.Ethernet1 + ptf_injected23: + ports: + - docker_ptf.eth22 + - sonic_dut.Ethernet22 + - veos23.Ethernet1 + ptf_injected24: + ports: + - docker_ptf.eth23 + - sonic_dut.Ethernet23 + - veos24.Ethernet1 + ptf_injected25: + ports: + - docker_ptf.eth24 + - sonic_dut.Ethernet24 + - veos25.Ethernet1 + ptf_injected26: + ports: + - docker_ptf.eth25 + - sonic_dut.Ethernet25 + - veos26.Ethernet1 + ptf_injected27: + ports: + - docker_ptf.eth26 + - sonic_dut.Ethernet26 + - veos27.Ethernet1 + ptf_injected28: + ports: + - docker_ptf.eth27 + - sonic_dut.Ethernet27 + - veos28.Ethernet1 + ptf_injected29: + ports: + - docker_ptf.eth28 + - sonic_dut.Ethernet28 + - veos29.Ethernet1 + ptf_injected30: + ports: + - docker_ptf.eth29 + - sonic_dut.Ethernet29 + - veos30.Ethernet1 + ptf_injected31: + ports: + - docker_ptf.eth30 + - sonic_dut.Ethernet30 + - veos31.Ethernet1 + ptf_injected32: + ports: + - docker_ptf.eth31 + - sonic_dut.Ethernet31 + - veos32.Ethernet1 + backplane: + ports: + - veos[1..32].Ethernet9 + - docker_ptf.backplane diff --git a/pyvxr_yaml_files/tortuga_4S4L_solution_testbed.yaml b/pyvxr_yaml_files/tortuga_4S4L_solution_testbed.yaml new file mode 100644 index 00000000000..23ac2c51335 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_4S4L_solution_testbed.yaml @@ -0,0 +1,194 @@ +simulation: + slurm_flags: + hours: 120 + cluster: multicluster + pending_timeout: 1200 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [8101-32FH] + linux_password: cisco123 + linux_username: cisco + onie-install: http://10.28.109.58/IMAGES/cmono_23860/sonic-buildimage-cisco.202305.1.tortuga-periodic/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + SD8: + <<: *sonic_router + + external_router: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..13] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + + host1: + platform: linux + image: /auto/vxr/images/linux/ubuntu-kne.qcow2 + linux_username: vxr + linux_password: "cisco123" + linux_prompt: 'vxr@vxr-vm:~\$' + xr_port_redir: [22] + +connections: + hubs: + #Spine0 to leafs + hub0: + - SD1.Ethernet0 + - SD5.Ethernet0 + hub1: + - SD1.Ethernet1 + - SD6.Ethernet0 + hub2: + - SD1.Ethernet2 + - SD7.Ethernet0 + hub3: + - SD1.Ethernet3 + - SD8.Ethernet0 + #Spine1 to leafs + hub4: + - SD2.Ethernet0 + - SD5.Ethernet1 + hub5: + - SD2.Ethernet1 + - SD6.Ethernet1 + hub6: + - SD2.Ethernet2 + - SD7.Ethernet1 + hub7: + - SD2.Ethernet3 + - SD8.Ethernet1 +#Spine2 to leafs + hub8: + - SD3.Ethernet0 + - SD5.Ethernet2 + hub9: + - SD3.Ethernet1 + - SD6.Ethernet2 + hub10: + - SD3.Ethernet2 + - SD7.Ethernet2 + hub11: + - SD3.Ethernet3 + - SD8.Ethernet2 +#Spine3 to leafs + hub12: + - SD4.Ethernet0 + - SD5.Ethernet3 + hub13: + - SD4.Ethernet1 + - SD6.Ethernet3 + hub14: + - SD4.Ethernet2 + - SD7.Ethernet3 + hub15: + - SD4.Ethernet3 + - SD8.Ethernet3 +# External router to leaf3 + hub16: + - external_router.Ethernet13 + - SD8.Ethernet13 +#ixia to leaf0 + hub17: + - SD5.Ethernet6 + - ixia.data0 + hub18: + - SD5.Ethernet7 + - ixia.data1 + hub19: + - SD5.Ethernet8 + - ixia.data2 +#ixia to leaf1 + hub20: + - SD6.Ethernet6 + - ixia.data3 + hub21: + - SD6.Ethernet7 + - ixia.data4 + hub22: + - SD6.Ethernet8 + - ixia.data5 +#ixia to leaf2 + hub23: + - SD7.Ethernet6 + - ixia.data6 + hub24: + - SD7.Ethernet7 + - ixia.data7 + hub25: + - SD7.Ethernet8 + - ixia.data8 +#ixia to leaf3 + hub26: + - SD8.Ethernet6 + - ixia.data9 + hub27: + - SD8.Ethernet7 + - ixia.data10 + hub28: + - SD8.Ethernet8 + - ixia.data11 +#ixia to external_router + hub29: + - external_router.Ethernet15 + - ixia.data12 +#ixia to spine + hub30: + - SD4.Ethernet7 + - ixia.data13 + hub31: + - SD2.Ethernet4 + - SD5.Ethernet4 + hub32: + - SD2.Ethernet5 + - SD6.Ethernet4 + hub33: + - SD3.Ethernet4 + - SD7.Ethernet4 \ No newline at end of file diff --git a/pyvxr_yaml_files/tortuga_controller.yaml b/pyvxr_yaml_files/tortuga_controller.yaml new file mode 100644 index 00000000000..29910017363 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller.yaml @@ -0,0 +1,450 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression +devices: + trex1: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex2: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex3: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex4: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex5: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex6: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex7: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex8: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex9: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex10: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + + L0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: cisco123 + linux_username: cisco + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet8 + - Ethernet16 + - Ethernet24 + - Ethernet32 + - Ethernet40 + - Ethernet48 + - Ethernet56 + - Ethernet64 + - Ethernet72 + - Ethernet80 + - Ethernet88 + - Ethernet96 + - Ethernet104 + - Ethernet112 + - Ethernet120 + - Ethernet128 + - Ethernet136 + - Ethernet144 + - Ethernet152 + - Ethernet160 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: cisco123 + linux_username: cisco + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet8 + - Ethernet16 + - Ethernet24 + - Ethernet32 + - Ethernet40 + - Ethernet48 + - Ethernet56 + - Ethernet64 + - Ethernet72 + - Ethernet80 + - Ethernet88 + - Ethernet96 + - Ethernet104 + - Ethernet112 + - Ethernet120 + - Ethernet128 + - Ethernet136 + - Ethernet144 + - Ethernet152 + - Ethernet160 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: cisco123 + linux_username: cisco + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet8 + - Ethernet16 + - Ethernet24 + - Ethernet32 + - Ethernet40 + - Ethernet48 + - Ethernet56 + - Ethernet64 + - Ethernet72 + - Ethernet80 + - Ethernet88 + - Ethernet96 + - Ethernet104 + - Ethernet112 + - Ethernet120 + - Ethernet128 + - Ethernet136 + - Ethernet144 + - Ethernet152 + - Ethernet160 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: cisco123 + linux_username: cisco + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet8 + - Ethernet16 + - Ethernet24 + - Ethernet32 + - Ethernet40 + - Ethernet48 + - Ethernet56 + - Ethernet64 + - Ethernet72 + - Ethernet80 + - Ethernet88 + - Ethernet96 + - Ethernet104 + - Ethernet112 + - Ethernet120 + - Ethernet128 + - Ethernet136 + - Ethernet144 + - Ethernet152 + - Ethernet160 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet64 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet96 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet72 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet80 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet88 + - trex4.eth1 + L0_LOOP: + - L0.Ethernet104 + - L0.Ethernet112 + L1_trex5_1: + - L1.Ethernet64 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet96 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet72 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet80 + - trex7.eth1 + L2_trex8_1: + - L2.Ethernet64 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet96 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet72 + - trex9.eth1 + L2_trex10_1: + - L2.Ethernet80 + - trex10.eth1 + S0_L0_conn1: + - S0.Ethernet0 + - L0.Ethernet0 + S0_L0_conn2: + - S0.Ethernet8 + - L0.Ethernet8 + S0_L1_conn1: + - S0.Ethernet16 + - L1.Ethernet0 + S0_L1_conn2: + - S0.Ethernet24 + - L1.Ethernet8 + S0_L2_conn1: + - S0.Ethernet32 + - L2.Ethernet0 + S0_L2_conn2: + - S0.Ethernet40 + - L2.Ethernet8 diff --git a/pyvxr_yaml_files/tortuga_controller_1x3_carib.yaml b/pyvxr_yaml_files/tortuga_controller_1x3_carib.yaml new file mode 100644 index 00000000000..5802ea0078f --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_1x3_carib.yaml @@ -0,0 +1,212 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config platform cisco sdk-debug disable + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_1x3_laguna.yaml b/pyvxr_yaml_files/tortuga_controller_1x3_laguna.yaml new file mode 100755 index 00000000000..d4ce9660eb9 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_1x3_laguna.yaml @@ -0,0 +1,223 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 1 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['HF6100-64ED'] + port_breakout: + lc0: + 0..63: 1x800 + linux_password: password + linux_username: admin + onie-install: /ws/yadeng-sjc/images/sonic-cisco-8000.bin.202405c + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + # ConfigEnableNgdp: 'true' + os_type: sonic + memory: 28GB + vcpu: 12 + platform: spitfire_f + data_ports: + - Ethernet1_[1..64] + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo systemctl disable systemd-networkd + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_2x2.yaml b/pyvxr_yaml_files/tortuga_controller_2x2.yaml new file mode 100644 index 00000000000..4f4f89ac60c --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_2x2.yaml @@ -0,0 +1,378 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression +devices: + trex1: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex2: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex3: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex4: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex5: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex6: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex7: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + + L0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname kindly-2x2-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname kindly-2x2-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname kindly-2x2-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname kindly-2x2-spine1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_LOOP: + - L0.Ethernet1_14 + - L0.Ethernet1_15 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn1: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn1: + - S1.Ethernet1_2 + - L1.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_2x2_carib.yaml b/pyvxr_yaml_files/tortuga_controller_2x2_carib.yaml new file mode 100644 index 00000000000..4c80d2305b4 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_2x2_carib.yaml @@ -0,0 +1,182 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-2x2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config platform cisco sdk-debug disable + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x2-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn1: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn1: + - S1.Ethernet1_2 + - L1.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_2x2_laguna.yaml b/pyvxr_yaml_files/tortuga_controller_2x2_laguna.yaml new file mode 100644 index 00000000000..593ddc54a7a --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_2x2_laguna.yaml @@ -0,0 +1,182 @@ +simulation: + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['HF6100-64ED'] + port_breakout: + lc0: + 0..63: 1x800 + linux_password: password + linux_username: admin + onie-install: /ws/yadeng-sjc/images/sonic-cisco-8000.bin.202405c + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + # ConfigEnableNgdp: 'true' + os_type: sonic + memory: 20GB + vcpu: 10 + platform: spitfire_f + data_ports: + - Ethernet1_[1..64] + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn1: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn1: + - S1.Ethernet1_2 + - L1.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_2x3.yaml b/pyvxr_yaml_files/tortuga_controller_2x3.yaml new file mode 100644 index 00000000000..e3f713f3d6c --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_2x3.yaml @@ -0,0 +1,492 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression +devices: + trex1: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex2: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex3: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex4: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex5: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex6: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex7: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex8: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex9: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + trex10: + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + + L0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-2x3-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-2x3-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-2x3-leaf2 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-2x3-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + - 23 + cli_commands: | + sleep 60 + sudo config hostname tortuga-2x3-spine1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_LOOP: + - L0.Ethernet1_14 + - L0.Ethernet1_15 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L1_conn1: + - S1.Ethernet1_1 + - L1.Ethernet1_2 + S1_L2_conn1: + - S1.Ethernet1_2 + - L2.Ethernet1_1 diff --git a/pyvxr_yaml_files/tortuga_controller_2x3_carib.yaml b/pyvxr_yaml_files/tortuga_controller_2x3_carib.yaml new file mode 100644 index 00000000000..77242a21f35 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_2x3_carib.yaml @@ -0,0 +1,214 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-2x3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config platform cisco sdk-debug disable + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-2x3-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L1_conn1: + - S1.Ethernet1_1 + - L1.Ethernet1_2 + S1_L2_conn1: + - S1.Ethernet1_2 + - L2.Ethernet1_1 diff --git a/pyvxr_yaml_files/tortuga_controller_2x3_laguna.yaml b/pyvxr_yaml_files/tortuga_controller_2x3_laguna.yaml new file mode 100644 index 00000000000..1249c280450 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_2x3_laguna.yaml @@ -0,0 +1,220 @@ +simulation: + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['HF6100-64ED'] + port_breakout: + lc0: + 0..63: 1x800 + linux_password: password + linux_username: admin + onie-install: /ws/yadeng-sjc/images/sonic-cisco-8000.bin.202405c + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + # ConfigEnableNgdp: 'true' + os_type: sonic + memory: 20GB + vcpu: 10 + platform: spitfire_f + data_ports: + - Ethernet1_[1..64] + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-leaf2 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + counterpoll port disable + counterpoll queue disable + counterpoll port-buffer-drop disable + counterpoll rif disable + counterpoll watermark disable + counterpoll pg-drop disable + counterpoll tunnel disable + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-deng-g200-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo config platform cisco sdk-debug disable + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex10_2: + - L2.Ethernet1_14 + - trex10.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L1_conn1: + - S1.Ethernet1_1 + - L1.Ethernet1_2 + S1_L2_conn1: + - S1.Ethernet1_2 + - L2.Ethernet1_1 diff --git a/pyvxr_yaml_files/tortuga_controller_carib.yaml b/pyvxr_yaml_files/tortuga_controller_carib.yaml new file mode 100644 index 00000000000..a4547279563 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_carib.yaml @@ -0,0 +1,192 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2.old + type: reference + memory: 2GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_carib_1x3.yaml b/pyvxr_yaml_files/tortuga_controller_carib_1x3.yaml new file mode 100644 index 00000000000..91f2aa42b8a --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_carib_1x3.yaml @@ -0,0 +1,192 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2.old + type: reference + memory: 2GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf0 + sudo config save -y + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf1 + sudo config save -y + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-leaf2 + sudo config save -y + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-1x3-spine0 + sudo config save -y + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex8_2: + - L2.Ethernet1_13 + - trex8.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L0_conn2: + - S0.Ethernet1_2 + - L0.Ethernet1_2 + S0_L1_conn1: + - S0.Ethernet1_3 + - L1.Ethernet1_1 + S0_L1_conn2: + - S0.Ethernet1_4 + - L1.Ethernet1_2 + S0_L2_conn1: + - S0.Ethernet1_5 + - L2.Ethernet1_1 + S0_L2_conn2: + - S0.Ethernet1_6 + - L2.Ethernet1_2 diff --git a/pyvxr_yaml_files/tortuga_controller_dci1x2-2_carib.yaml b/pyvxr_yaml_files/tortuga_controller_dci1x2-2_carib.yaml new file mode 100644 index 00000000000..014e3c3da85 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_dci1x2-2_carib.yaml @@ -0,0 +1,320 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + + nexus1: + platform: nxos + image: /auto/vxr/images/nxos/nxos64-cs.10.4.4.qcow2 + xr_hostname: IPN + xr_username: admin + xr_password: password + xr_port_redir: + - 22 + xr_config: | + interface Ethernet1/1 + no switchport + ip address 43.216.11.11 255.255.255.0 + no shutdown + interface Ethernet1/2 + no switchport + ip address 43.216.12.11 255.255.255.0 + no shutdown + interface Ethernet1/3 + no switchport + ip address 43.216.21.11 255.255.255.0 + no shutdown + interface Ethernet1/4 + no switchport + ip address 43.216.22.11 255.255.255.0 + no shutdown + feature bgp + router bgp 7000 + neighbor 43.216.11.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.12.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.21.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.22.10 remote-as 6002 + address-family ipv4 unicast + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DC1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + + # Fabric: DC2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth2 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S1_L2_conn1: + - S1.Ethernet1_1 + - L2.Ethernet1_1 + S1_L3_conn1: + - S1.Ethernet1_2 + - L3.Ethernet1_1 + + # DCI connections. + S0_nexus1_conn1: + - S0.Ethernet1_9 + - nexus1.Ethernet1/1 + S0_nexus1_conn2: + - S0.Ethernet1_10 + - nexus1.Ethernet1/2 + S1_nexus1_conn1: + - S1.Ethernet1_9 + - nexus1.Ethernet1/3 + S1_nexus1_conn2: + - S1.Ethernet1_10 + - nexus1.Ethernet1/4 diff --git a/pyvxr_yaml_files/tortuga_controller_dci1x2-3_carib.yaml b/pyvxr_yaml_files/tortuga_controller_dci1x2-3_carib.yaml new file mode 100644 index 00000000000..6a2e4a6a5ae --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_dci1x2-3_carib.yaml @@ -0,0 +1,435 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + trex15: + <<: *host + trex16: + <<: *host + trex17: + <<: *host + trex18: + <<: *host + trex19: + <<: *host + trex20: + <<: *host + trex21: + <<: *host + + nexus1: + platform: nxos + image: /auto/vxr/images/nxos/nxos64-cs.10.4.4.qcow2 + xr_hostname: IPN + xr_username: admin + xr_password: password + xr_port_redir: + - 22 + xr_config: | + interface Ethernet1/1 + no switchport + ip address 43.216.11.11 255.255.255.0 + no shutdown + interface Ethernet1/2 + no switchport + ip address 43.216.12.11 255.255.255.0 + no shutdown + interface Ethernet2/3 + no switchport + ip address 43.216.21.11 255.255.255.0 + no shutdown + interface Ethernet1/4 + no switchport + ip address 43.216.22.11 255.255.255.0 + no shutdown + interface Ethernet1/5 + no switchport + ip address 43.216.31.11 255.255.255.0 + no shutdown + interface Ethernet1/6 + no switchport + ip address 43.216.32.11 255.255.255.0 + no shutdown + feature bgp + router bgp 7000 + neighbor 43.216.11.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.12.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.21.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.22.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.31.10 remote-as 6003 + address-family ipv4 unicast + neighbor 43.216.32.10 remote-as 6003 + address-family ipv4 unicast + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L4: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L5: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc3-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep3.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DC1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + + # Fabric: DC2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth2 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S1_L2_conn1: + - S1.Ethernet1_1 + - L2.Ethernet1_1 + S1_L3_conn1: + - S1.Ethernet1_2 + - L3.Ethernet1_1 + + # Fabric: DC3 + L4_trex15_1: + - L4.Ethernet1_9 + - trex15.eth1 + L4_trex19_2: + - L4.Ethernet1_13 + - trex19.eth2 + L4_trex16_1: + - L4.Ethernet1_10 + - trex16.eth1 + L4_trex16_2: + - L4.Ethernet1_15 + - trex16.eth2 + L4_trex17_1: + - L4.Ethernet1_11 + - trex17.eth1 + L4_trex18_1: + - L4.Ethernet1_12 + - trex18.eth1 + L4_trex18_2: + - L4.Ethernet1_14 + - trex18.eth2 + L4_LOOP: + - L4.Ethernet1_16 + - L4.Ethernet1_17 + L5_trex19_1: + - L5.Ethernet1_9 + - trex19.eth1 + L5_trex15_2: + - L5.Ethernet1_13 + - trex15.eth2 + L5_trex20_1: + - L5.Ethernet1_10 + - trex20.eth1 + L5_trex20_2: + - L5.Ethernet1_15 + - trex20.eth2 + L5_trex21_1: + - L5.Ethernet1_11 + - trex21.eth1 + L5_trex21_2: + - L5.Ethernet1_14 + - trex21.eth2 + S2_L4_conn1: + - S2.Ethernet1_1 + - L4.Ethernet1_1 + S2_L5_conn1: + - S2.Ethernet1_2 + - L5.Ethernet1_1 + + # DCI connections. + S0_nexus1_conn1: + - S0.Ethernet1_9 + - nexus1.Ethernet1/1 + S0_nexus1_conn2: + - S0.Ethernet1_10 + - nexus1.Ethernet1/2 + S1_nexus1_conn1: + - S1.Ethernet1_9 + - nexus1.Ethernet1/3 + S1_nexus1_conn2: + - S1.Ethernet1_10 + - nexus1.Ethernet1/4 + S2_nexus1_conn1: + - S2.Ethernet1_9 + - nexus1.Ethernet1/5 + S2_nexus1_conn2: + - S2.Ethernet1_10 + - nexus1.Ethernet1/6 diff --git a/pyvxr_yaml_files/tortuga_controller_dci2x2-2_carib.yaml b/pyvxr_yaml_files/tortuga_controller_dci2x2-2_carib.yaml new file mode 100644 index 00000000000..d414a922d47 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_dci2x2-2_carib.yaml @@ -0,0 +1,395 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + cluster: rch-slurm-m1 + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 3GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + trex8: + <<: *host + trex9: + <<: *host + trex10: + <<: *host + trex11: + <<: *host + trex12: + <<: *host + trex13: + <<: *host + trex14: + <<: *host + + nexus1: + platform: nxos + image: /auto/vxr/images/nxos/nxos64-cs.10.4.4.qcow2 + xr_hostname: IPN + xr_username: admin + xr_password: password + xr_port_redir: + - 22 + xr_config: | + interface Ethernet1/1 + no switchport + ip address 43.216.11.11 255.255.255.0 + no shutdown + interface Ethernet1/2 + no switchport + ip address 43.216.12.11 255.255.255.0 + no shutdown + interface Ethernet1/3 + no switchport + ip address 43.216.13.11 255.255.255.0 + no shutdown + interface Ethernet1/4 + no switchport + ip address 43.216.14.11 255.255.255.0 + no shutdown + interface Ethernet1/5 + no switchport + ip address 43.216.21.11 255.255.255.0 + no shutdown + interface Ethernet1/6 + no switchport + ip address 43.216.22.11 255.255.255.0 + no shutdown + interface Ethernet1/7 + no switchport + ip address 43.216.23.11 255.255.255.0 + no shutdown + interface Ethernet1/8 + no switchport + ip address 43.216.24.11 255.255.255.0 + no shutdown + feature bgp + router bgp 7000 + neighbor 43.216.11.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.12.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.13.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.14.10 remote-as 6001 + address-family ipv4 unicast + neighbor 43.216.21.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.22.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.23.10 remote-as 6002 + address-family ipv4 unicast + neighbor 43.216.24.10 remote-as 6002 + address-family ipv4 unicast + + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + xr_port_redir: + - 22 + pre_cli: | + sleep 60 + curl --retry 10 --retry-delay 10 --retry-all-errors -O http://ttg-fs1.cisco.com/ttg-images/misc/pyvxr_gen_sw_sudi_cert.tar.gz + curl -O http://ttg-fs1.cisco.com/ttg-images/tortuga-agents_0.1-1_amd64.deb + tar -xzf pyvxr_gen_sw_sudi_cert.tar.gz + sudo ./pyvxr_gen_sw_sudi_cert.sh + cli_commands: | + sudo config hostname tortuga-dc1-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + L2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-leaf1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + + S0: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S1: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc1-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S2: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine0 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + S3: + <<: *switch + cli_commands: | + sudo config hostname tortuga-dc2-spine1 + sudo config save -y + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo systemctl stop drake + sudo curl http://ttg-fs1.cisco.com/ttg-images/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + +connections: + hubs: + # Fabric: DCI1 + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex2_2: + - L0.Ethernet1_15 + - trex2.eth2 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex6_2: + - L1.Ethernet1_15 + - trex6.eth2 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + S0_L0_conn1: + - S0.Ethernet1_1 + - L0.Ethernet1_1 + S0_L1_conn1: + - S0.Ethernet1_2 + - L1.Ethernet1_1 + S1_L0_conn2: + - S1.Ethernet1_1 + - L0.Ethernet1_2 + S1_L1_conn2: + - S1.Ethernet1_2 + - L1.Ethernet1_2 + + # Fabric: DCI2 + L2_trex8_1: + - L2.Ethernet1_9 + - trex8.eth1 + L2_trex12_2: + - L2.Ethernet1_13 + - trex12.eth2 + L2_trex9_1: + - L2.Ethernet1_10 + - trex9.eth1 + L2_trex9_2: + - L2.Ethernet1_15 + - trex9.eth2 + L2_trex10_1: + - L2.Ethernet1_11 + - trex10.eth1 + L2_trex11_1: + - L2.Ethernet1_12 + - trex11.eth1 + L2_trex11_2: + - L2.Ethernet1_14 + - trex11.eth2 + L2_LOOP: + - L2.Ethernet1_16 + - L2.Ethernet1_17 + L3_trex12_1: + - L3.Ethernet1_9 + - trex12.eth1 + L3_trex8_2: + - L3.Ethernet1_13 + - trex8.eth2 + L3_trex13_1: + - L3.Ethernet1_10 + - trex13.eth1 + L3_trex13_2: + - L3.Ethernet1_15 + - trex13.eth2 + L3_trex14_1: + - L3.Ethernet1_11 + - trex14.eth1 + L3_trex14_2: + - L3.Ethernet1_14 + - trex14.eth2 + S2_L2_conn1: + - S2.Ethernet1_1 + - L2.Ethernet1_1 + S2_L3_conn1: + - S2.Ethernet1_2 + - L3.Ethernet1_1 + S3_L2_conn2: + - S3.Ethernet1_1 + - L2.Ethernet1_2 + S3_L3_conn2: + - S3.Ethernet1_2 + - L3.Ethernet1_2 + + # DCI connections. + S0_nexus1_conn1: + - S0.Ethernet1_9 + - nexus1.Ethernet1/1 + S0_nexus1_conn2: + - S0.Ethernet1_10 + - nexus1.Ethernet1/2 + S1_nexus1_conn1: + - S1.Ethernet1_9 + - nexus1.Ethernet1/3 + S1_nexus1_conn2: + - S1.Ethernet1_10 + - nexus1.Ethernet1/4 + S2_nexus1_conn1: + - S2.Ethernet1_9 + - nexus1.Ethernet1/5 + S2_nexus1_conn2: + - S2.Ethernet1_10 + - nexus1.Ethernet1/6 + S3_nexus1_conn1: + - S3.Ethernet1_9 + - nexus1.Ethernet1/7 + S3_nexus1_conn2: + - S3.Ethernet1_10 + - nexus1.Ethernet1/8 diff --git a/pyvxr_yaml_files/tortuga_controller_mesh2_laguna.yaml b/pyvxr_yaml_files/tortuga_controller_mesh2_laguna.yaml new file mode 100644 index 00000000000..9cbff70407e --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_mesh2_laguna.yaml @@ -0,0 +1,293 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + + +devices: + trex1: &host + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr1/sonic-images/yadeng/ubuntu22.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 2 + xr_port_redir: + - 22 + + trex2: + <<: *host + trex3: + <<: *host + trex4: + <<: *host + trex5: + <<: *host + trex6: + <<: *host + trex7: + <<: *host + + L0: &switch + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: + - HF6100-64ED + port_breakout: + lc0: + 0..63: 1x800 + vxr_sim_config: + shelf: + # Following config prevents packet from reaching nsim before it is initialized. + # Sometimes, dsim crashes when the packets are sent before it is initialized. + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + ConfigEnableNgdp: 'true' + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/images/sonic-cisco-8000.bin + os_type: sonic + memory: 32GB + vcpu: 12 + platform: spitfire_f + data_ports: + - Ethernet1_1 + - Ethernet1_2 + - Ethernet1_3 + - Ethernet1_4 + - Ethernet1_5 + - Ethernet1_6 + - Ethernet1_7 + - Ethernet1_8 + - Ethernet1_9 + - Ethernet1_10 + - Ethernet1_11 + - Ethernet1_12 + - Ethernet1_13 + - Ethernet1_14 + - Ethernet1_15 + - Ethernet1_16 + - Ethernet1_17 + - Ethernet1_18 + - Ethernet1_19 + - Ethernet1_20 + - Ethernet1_21 + - Ethernet1_22 + - Ethernet1_23 + - Ethernet1_24 + - Ethernet1_25 + - Ethernet1_26 + - Ethernet1_27 + - Ethernet1_28 + - Ethernet1_29 + - Ethernet1_30 + - Ethernet1_31 + - Ethernet1_32 + - Ethernet1_33 + - Ethernet1_34 + - Ethernet1_35 + - Ethernet1_36 + - Ethernet1_37 + - Ethernet1_38 + - Ethernet1_39 + - Ethernet1_40 + - Ethernet1_41 + - Ethernet1_42 + - Ethernet1_43 + - Ethernet1_44 + - Ethernet1_45 + - Ethernet1_46 + - Ethernet1_47 + - Ethernet1_48 + - Ethernet1_49 + - Ethernet1_50 + - Ethernet1_51 + - Ethernet1_52 + - Ethernet1_53 + - Ethernet1_54 + - Ethernet1_55 + - Ethernet1_56 + - Ethernet1_57 + - Ethernet1_58 + - Ethernet1_59 + - Ethernet1_60 + - Ethernet1_61 + - Ethernet1_62 + - Ethernet1_63 + - Ethernet1_64 + xr_port_redir: + - 22 + pre_cli: | + sudo bash -c "echo 'net.core.rmem_default = 16777216' >> /etc/sysctl.conf" + sudo bash -c "echo 'net.core.wmem_default = 16777216' >> /etc/sysctl.conf" + sudo sysctl -p + cli_commands: | + sleep 60 + sudo config hostname tortuga-mesh2-leaf0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + + L1: + <<: *switch + cli_commands: | + sleep 60 + sudo config hostname tortuga-mesh2-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + +connections: + hubs: + L0_trex1_1: + - L0.Ethernet1_9 + - trex1.eth1 + L0_trex5_2: + - L0.Ethernet1_13 + - trex5.eth2 + L0_trex2_1: + - L0.Ethernet1_10 + - trex2.eth1 + L0_trex3_1: + - L0.Ethernet1_11 + - trex3.eth1 + L0_trex4_1: + - L0.Ethernet1_12 + - trex4.eth1 + L0_trex4_2: + - L0.Ethernet1_14 + - trex4.eth2 + L0_LOOP: + - L0.Ethernet1_16 + - L0.Ethernet1_17 + L1_trex5_1: + - L1.Ethernet1_9 + - trex5.eth1 + L1_trex1_2: + - L1.Ethernet1_13 + - trex1.eth2 + L1_trex6_1: + - L1.Ethernet1_10 + - trex6.eth1 + L1_trex7_1: + - L1.Ethernet1_11 + - trex7.eth1 + L1_trex7_2: + - L1.Ethernet1_14 + - trex7.eth2 + + # Add 32 ECMP connections between L0 and L1. + L0_L1_conn1: + - L0.Ethernet1_33 + - L1.Ethernet1_33 + L0_L1_conn2: + - L0.Ethernet1_34 + - L1.Ethernet1_34 + L0_L1_conn3: + - L0.Ethernet1_35 + - L1.Ethernet1_35 + L0_L1_conn4: + - L0.Ethernet1_36 + - L1.Ethernet1_36 + L0_L1_conn5: + - L0.Ethernet1_37 + - L1.Ethernet1_37 + L0_L1_conn6: + - L0.Ethernet1_38 + - L1.Ethernet1_38 + L0_L1_conn7: + - L0.Ethernet1_39 + - L1.Ethernet1_39 + L0_L1_conn8: + - L0.Ethernet1_40 + - L1.Ethernet1_40 + L0_L1_conn9: + - L0.Ethernet1_41 + - L1.Ethernet1_41 + L0_L1_conn110: + - L0.Ethernet1_42 + - L1.Ethernet1_42 + L0_L1_conn11: + - L0.Ethernet1_43 + - L1.Ethernet1_43 + L0_L1_conn12: + - L0.Ethernet1_44 + - L1.Ethernet1_44 + L0_L1_conn13: + - L0.Ethernet1_45 + - L1.Ethernet1_45 + L0_L1_conn14: + - L0.Ethernet1_46 + - L1.Ethernet1_46 + L0_L1_conn15: + - L0.Ethernet1_47 + - L1.Ethernet1_47 + L0_L1_conn16: + - L0.Ethernet1_48 + - L1.Ethernet1_48 + L0_L1_conn17: + - L0.Ethernet1_49 + - L1.Ethernet1_49 + L0_L1_conn18: + - L0.Ethernet1_50 + - L1.Ethernet1_50 + L0_L1_conn19: + - L0.Ethernet1_51 + - L1.Ethernet1_51 + L0_L1_conn20: + - L0.Ethernet1_52 + - L1.Ethernet1_52 + L0_L1_conn21: + - L0.Ethernet1_53 + - L1.Ethernet1_53 + L0_L1_conn22: + - L0.Ethernet1_54 + - L1.Ethernet1_54 + L0_L1_conn23: + - L0.Ethernet1_55 + - L1.Ethernet1_55 + L0_L1_conn24: + - L0.Ethernet1_56 + - L1.Ethernet1_56 + L0_L1_conn25: + - L0.Ethernet1_57 + - L1.Ethernet1_57 + L0_L1_conn26: + - L0.Ethernet1_58 + - L1.Ethernet1_58 + L0_L1_conn27: + - L0.Ethernet1_59 + - L1.Ethernet1_59 + L0_L1_conn28: + - L0.Ethernet1_60 + - L1.Ethernet1_60 + L0_L1_conn29: + - L0.Ethernet1_61 + - L1.Ethernet1_61 + L0_L1_conn30: + - L0.Ethernet1_62 + - L1.Ethernet1_62 + L0_L1_conn31: + - L0.Ethernet1_63 + - L1.Ethernet1_63 + L0_L1_conn32: + - L0.Ethernet1_64 + - L1.Ethernet1_64 diff --git a/pyvxr_yaml_files/tortuga_controller_vs.yaml b/pyvxr_yaml_files/tortuga_controller_vs.yaml new file mode 100644 index 00000000000..6311de52d73 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_controller_vs.yaml @@ -0,0 +1,342 @@ +simulation: + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression +devices: + trex1: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60001] + trex2: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60002] + trex3: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60003] + trex4: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60004] + trex5: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60005] + trex6: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60006] + trex7: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60007] + trex8: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60008] + trex9: + data_ports: + - eth1 + - eth2 + disks: + - hda_ref: + file: /auto/vxr1/images/linux/rhel7_serial.qcow2 + type: reference + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + console_ports: [60009] + + L0: + platform: linux + image: /auto/vxr1/for_tortuga/sonic-ngdp-vs-tortuga-no-agent.img + memory: 20GB + vcpu: 8 + extended_pci_bus: true + linux_username: cisco + linux_password: cisco123 + linux_prompt: 'cisco@sonic:~\$' + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + - Ethernet20 + - Ethernet24 + - Ethernet28 + - Ethernet32 + - Ethernet36 + xr_port_redir: + - 22 + - 23 + console_ports: [60010] + cli_commands: | + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sleep 30 + sudo config hostname lotr-1x3-leaf0 + sudo config save -y + cp /etc/sonic/config_db.json config_db.json.fresh + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep1.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config reload -y + sleep 45 + + + L1: + platform: linux + image: /auto/vxr1/for_tortuga/sonic-ngdp-vs-tortuga-no-agent.img + memory: 20GB + vcpu: 8 + extended_pci_bus: true + linux_username: cisco + linux_password: cisco123 + linux_prompt: 'cisco@sonic:~\$' + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + - Ethernet20 + - Ethernet24 + - Ethernet28 + - Ethernet32 + - Ethernet36 + xr_port_redir: + - 22 + - 23 + console_ports: [60011] + cli_commands: | + sudo config hostname lotr-1x3-leaf1 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sleep 30 + cp /etc/sonic/config_db.json config_db.json.fresh + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep2.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config reload -y + sleep 45 + + + L2: + platform: linux + image: /auto/vxr1/for_tortuga/sonic-ngdp-vs-tortuga-no-agent.img + memory: 20GB + vcpu: 8 + extended_pci_bus: true + linux_username: cisco + linux_password: cisco123 + linux_prompt: 'cisco@sonic:~\$' + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + - Ethernet20 + - Ethernet24 + - Ethernet28 + - Ethernet32 + - Ethernet36 + xr_port_redir: + - 22 + - 23 + console_ports: [60012] + cli_commands: | + sudo config hostname lotr-1x3-leaf2 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sleep 30 + cp /etc/sonic/config_db.json config_db.json.fresh + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep2.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config reload -y + sleep 45 + + S0: + platform: linux + image: /auto/vxr1/for_tortuga/sonic-ngdp-vs-tortuga-no-agent.img + memory: 20GB + vcpu: 8 + extended_pci_bus: true + linux_username: cisco + linux_password: cisco123 + linux_prompt: 'cisco@sonic:~\$' + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + - Ethernet20 + - Ethernet24 + - Ethernet28 + - Ethernet32 + - Ethernet36 + xr_port_redir: + - 22 + - 23 + console_ports: [60020] + cli_commands: | + sudo config hostname lotr-1x3-spine0 + sudo config save -y + curl http://ramius-fs1.cisco.com/cdi-images/tortuga/tortuga-agents_0.1-1_amd64.deb -o /home/cisco/tortuga-agents_0.1-1_amd64.deb + sleep 30 + cp /etc/sonic/config_db.json config_db.json.fresh + sudo dpkg -i /home/cisco/tortuga-agents_0.1-1_amd64.deb + sudo curl http://ramius-fs1.cisco.com/cdi-images/tortuga/drake-config-pradeep2.yml -o /opt/cisco/etc/tortuga/drake-config.yml + sudo systemctl daemon-reload + sudo systemctl restart drake + sudo systemctl restart lira + sudo systemctl restart azimuth + sudo config reload -y + sleep 45 + +connections: + hubs: + L0_trex1: + - L0.Ethernet24 + - trex1.eth1 + L0_trex2: + - L0.Ethernet28 + - trex2.eth1 + L0_trex3: + - L0.Ethernet32 + - trex3.eth1 + L1_trex4: + - L1.Ethernet24 + - trex4.eth1 + L1_trex5: + - L1.Ethernet28 + - trex5.eth1 + L1_trex6: + - L1.Ethernet32 + - trex6.eth1 + L2_trex7: + - L2.Ethernet24 + - trex7.eth1 + L2_trex8: + - L2.Ethernet28 + - trex8.eth1 + L2_trex9: + - L2.Ethernet32 + - trex9.eth1 + S0_L0_conn1: + - S0.Ethernet0 + - L0.Ethernet0 + S0_L0_conn2: + - S0.Ethernet4 + - L0.Ethernet4 + S0_L1_conn1: + - S0.Ethernet8 + - L1.Ethernet0 + S0_L1_conn2: + - S0.Ethernet12 + - L1.Ethernet4 + S0_L2_conn1: + - S0.Ethernet16 + - L2.Ethernet0 + S0_L2_conn2: + - S0.Ethernet20 + - L2.Ethernet4 \ No newline at end of file diff --git a/pyvxr_yaml_files/tortuga_spytest_4d_single_link.yaml b/pyvxr_yaml_files/tortuga_spytest_4d_single_link.yaml new file mode 100644 index 00000000000..af901481404 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_4d_single_link.yaml @@ -0,0 +1,137 @@ +simulation: + slurm_flags: + hours: 120 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false +devices: + leaf0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - matilda32 + vxr_sim_config: + shelf: + Configspine1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.69.7/npl + Configspine1NpsuiteVer: 1.137.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/thgowda/sonic-test/sim/sonic-buildimage-cisco.202205.dsf-p2/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + leaf1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - matilda32 + vxr_sim_config: + shelf: + Configspine1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.69.7/npl + Configspine1NpsuiteVer: 1.137.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/thgowda/sonic-test/sim/sonic-buildimage-cisco.202205.dsf-p2/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + spine0: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - matilda32 + vxr_sim_config: + shelf: + Configspine1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.69.7/npl + Configspine1NpsuiteVer: 1.137.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/thgowda/sonic-test/sim/sonic-buildimage-cisco.202205.dsf-p2/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + spine1: + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - matilda32 + vxr_sim_config: + shelf: + Configspine1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.69.7/npl + Configspine1NpsuiteVer: 1.137.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/thgowda/sonic-test/sim/sonic-buildimage-cisco.202205.dsf-p2/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + data_ports: + - Ethernet0 + - Ethernet4 + - Ethernet8 + - Ethernet12 + - Ethernet16 + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + spine0_leaf0_conn1: + - spine0.Ethernet0 + - leaf0.Ethernet0 + spine0_leaf1_conn1: + - spine0.Ethernet8 + - leaf1.Ethernet12 + spine1_leaf0_conn1: + - spine1.Ethernet0 + - leaf0.Ethernet12 + spine1_leaf1_conn1: + - spine1.Ethernet8 + - leaf1.Ethernet0 diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linear_conn.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linear_conn.yaml new file mode 100755 index 00000000000..75b3bcc65e1 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linear_conn.yaml @@ -0,0 +1,85 @@ +simulation: + no_image_copy: true + slurm_flags: + pending_timeout: 60 + hours: 48 + partition: regression + +devices: + CE1: &sonic_router + platform: spitfire_f + os_type: sonic + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + xr_config: | + snmp-server community public RO + ssh server vrf default + ssh server netconf vrf default + netconf-yang agent ssh + xr_port_redir: [22, 161, 830] + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + onie-install: /nobackup/athingal/image/sonic-buildimage-cisco.202305.1.tortuga-p2/sonic-cisco-8000.bin + linecard_types: [matilda32] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.85.10/npl + ConfigS1NpsuiteVer: 1.137.1 + data_ports: + - Ethernet0 + - Ethernet8 + - Ethernet16 + - Ethernet24 + - Ethernet32 + - Ethernet40 + - Ethernet48 + + PE1: + <<: *sonic_router + + P1: + <<: *sonic_router + + PE2: + <<: *sonic_router + + CE2: + <<: *sonic_router + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + CE1_PE1_CONN1: + - CE1.Ethernet0 + - PE1.Ethernet0 + CE1_P1_CONN2: + - CE1.Ethernet8 + - PE1.Ethernet16 + PE1_P1_CONN1: + - PE1.Ethernet8 + - P1.Ethernet0 + PE1_P1_CONN2: + - PE1.Ethernet24 + - P1.Ethernet16 + P1_PE2_CONN1: + - P1.Ethernet8 + - PE2.Ethernet0 + P1_PE2_CONN2: + - P1.Ethernet24 + - PE2.Ethernet16 + PE2_CE2_CONN1: + - PE2.Ethernet8 + - CE2.Ethernet0 + PE2_CE2_CONN2: + - PE2.Ethernet24 + - CE2.Ethernet8 diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_carib.yaml new file mode 100644 index 00000000000..7e8261f64df --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_carib.yaml @@ -0,0 +1,93 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [churchill] + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/10652/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + vxr_sim_config: + shelf: + ConfigCardPidOverride: 'HF6100-32D' + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub3: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub4: + - SD3.Ethernet[8..11] + - ixia.data[0..3] + hub5: + - SD4.Ethernet[8..9] + - ixia.data[4..5] + hub6: + - SD1.Ethernet[8..11] + - SD2.Ethernet[8..11] + hub7: + - SD2.Ethernet[12..13] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_cmono.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_cmono.yaml new file mode 100644 index 00000000000..34162c1f716 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_cmono.yaml @@ -0,0 +1,90 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [8101-32FH] + port_breakout: + lc0: + 0..7: 1x400 + 8..15: 1x100 + 16..23: 4x25 + 24..31: 4x10 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/10652/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub3: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub4: + - SD3.Ethernet[8..11] + - ixia.data[0..3] + hub5: + - SD4.Ethernet[8..9] + - ixia.data[4..5] + hub6: + - SD1.Ethernet[8..11] + - SD2.Ethernet[8..11] + hub7: + - SD2.Ethernet[12..13] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna.yaml new file mode 100644 index 00000000000..ff18e7fe0d4 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna.yaml @@ -0,0 +1,93 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['HF6100-64ED'] + port_breakout: + lc0: + 0..63: 1x800 + linux_password: password + linux_username: admin + onie-install: /auto/vxr1/sonic-images/jayakj/202405/nightly/25943/sonic-cisco-8000.bin + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + os_type: sonic + memory: 20GB + vcpu: 10 + platform: spitfire_f + data_ports: + - Ethernet1_[1..64] + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 2 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet1_[1..2] + - SD3.Ethernet1_[1..2] + hub1_0: + - SD1.Ethernet1_[3..4] + - SD4.Ethernet1_[3..4] + hub2_0: + - SD2.Ethernet1_[3..4] + - SD3.Ethernet1_[3..4] + hub3_0: + - SD2.Ethernet1_[1..2] + - SD4.Ethernet1_[1..2] + hub4_0: + - SD1.Ethernet1_[5..6] + - SD2.Ethernet1_[5..6] + hub5_0: + - SD3.Ethernet1_[5..8] + - ixia.data[0..3] + hub6_0: + - SD4.Ethernet1_[5..8] + - ixia.data[4..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna_MH.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna_MH.yaml new file mode 100644 index 00000000000..769f5579685 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_laguna_MH.yaml @@ -0,0 +1,96 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['HF6100-64ED'] + port_breakout: + lc0: + 0..63: 1x800 + linux_password: password + linux_username: admin + onie-install: /auto/vxr1/sonic-images/jayakj/202405/nightly/25943/sonic-cisco-8000.bin + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + os_type: sonic + memory: 20GB + vcpu: 10 + platform: spitfire_f + data_ports: + - Ethernet1_[1..64] + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 2 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet1_[1..2] + - SD2.Ethernet1_[1..2] + hub1_0: + - SD1.Ethernet1_[3..4] + - SD3.Ethernet1_[3..4] + hub2_0: + - SD1.Ethernet1_[5..6] + - SD4.Ethernet1_[5..6] + hub3_0: + - SD2.Ethernet1_[7..10] + - ixia.data[0..3] + hub4_0: + - SD3.Ethernet1_[7..8] + - ixia.data[4..5] + hub5_0: + - SD4.Ethernet1_[7..8] + - ixia.data[6..7] + hub0_1: + - SD1.Ethernet1_7 + - SD2.Ethernet1_11 + hub2_1: + - SD1.Ethernet1_8 + - SD4.Ethernet1_9 diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml new file mode 100644 index 00000000000..f3f3421e9ac --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning.yaml @@ -0,0 +1,88 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['8122-64EH-O'] + port_breakout: + lc0: + 0..63: 2x400 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/10652/sonic-cisco-8000.bin + os_type: sonic + memory: 32GB + vcpu: 16 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 2 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet28/[0..1] + - SD3.Ethernet28/[0..1] + hub1_0: + - SD1.Ethernet29/[0..1] + - SD4.Ethernet28/[0..1] + hub2_0: + - SD2.Ethernet28/[0..1] + - SD3.Ethernet29/[0..1] + hub3_0: + - SD2.Ethernet29/[0..1] + - SD4.Ethernet29/[0..1] + hub4_0: + - SD3.Ethernet30/[0..1] + - ixia.data[0..1] + hub4_1: + - SD3.Ethernet31/[0..1] + - ixia.data[2..3] + hub5_0: + - SD4.Ethernet30/[0..1] + - ixia.data[4..5] + hub5_1: + - SD4.Ethernet31/[0..1] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning_MH.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning_MH.yaml new file mode 100644 index 00000000000..7882572e3ff --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_lightning_MH.yaml @@ -0,0 +1,97 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['8122-64EH-O'] + port_breakout: + lc0: + 0..63: 2x400 + linux_password: password + linux_username: admin + onie-install: /auto/vxr1/sonic-images/jayakj/202405/nightly/25554/sonic-cisco-8000.bin + os_type: sonic + memory: 32GB + vcpu: 16 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 2 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet28/[0..1] + - SD2.Ethernet28/[0..1] + hub1_0: + - SD1.Ethernet29/[0..1] + - SD3.Ethernet28/[0..1] + hub2_0: + - SD4.Ethernet28/[0..1] + - SD2.Ethernet29/[0..1] + hub3_0: + - SD4.Ethernet29/[0..1] + - SD3.Ethernet29/[0..1] + hub3_1: + - SD1.Ethernet30/[0..1] + - SD4.Ethernet30/[0..1] + hub4_0: + - SD2.Ethernet30/[0..1] + - ixia.data[0..1] + hub4_1: + - SD2.Ethernet31/[0..1] + - ixia.data[2..3] + hub5_0: + - SD3.Ethernet30/[0..1] + - ixia.data[4..5] + hub5_1: + - SD4.Ethernet31/[0..1] + - ixia.data[6..7] + hub6_0: + - SD1.Ethernet31/[0..1] + - SD2.Ethernet32/[0..1] + hub6_1: + - SD1.Ethernet32/[0..1] + - SD4.Ethernet32/[0..1] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml new file mode 100644 index 00000000000..dbdbc733f0f --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda.yaml @@ -0,0 +1,79 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [matilda64] + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/10652/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub3: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub4: + - SD3.Ethernet[8..11] + - ixia.data[0..3] + hub5: + - SD4.Ethernet[8..11] + - ixia.data[4..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda_MH.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda_MH.yaml new file mode 100644 index 00000000000..b93ed062c75 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_ixia_mathilda_MH.yaml @@ -0,0 +1,84 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: [matilda64] + linux_password: password + linux_username: admin + onie-install: /auto/vxr1/sonic-images/zhwang3/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub3: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub4: + - SD3.Ethernet[8..11] + - ixia.data[0..3] + hub5: + - SD4.Ethernet[8..9] + - ixia.data[4..5] + hub6: + - SD1.Ethernet[8..11] + - SD2.Ethernet[8..11] + hub7: + - SD2.Ethernet[12..13] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_stc.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_stc.yaml new file mode 100755 index 00000000000..8509810d1d8 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_stc.yaml @@ -0,0 +1,99 @@ +simulation: + no_image_copy: true + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + +devices: + SD1: &sonic_router + platform: spitfire_f + os_type: sonic + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + xr_config: | + snmp-server community public RO + ssh server vrf default + ssh server netconf vrf default + netconf-yang agent ssh + xr_port_redir: [22, 161, 830] + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + onie-install: /users/yucgu/sonic-cisco-8000.bin + linecard_types: [matilda32] + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.69.7/npl + ConfigS1NpsuiteVer: 1.137.1 + + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + spt: + platform: spirent_cafy1 + spirent_license_override: + license_server: "10.22.181.32" + spirent_images: + windows: /auto/vxr/vxr_images/spirent/WindowsWithTestCenter_5_05 + api: /auto/vxr/vxr_images/spirent/Spirent_TestCenter_LabServer-5.05-dhcp.img + port: /auto/vxr/vxr_images/spirent/sptvm-5_05-dhcp.img + + data_ports: + - data0 + - data1 + - data2 + - data3 + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD1.Ethernet[8..11] + - SD5.Ethernet[0..3] + hub3: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub4: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub5: + - SD2.Ethernet[8..11] + - SD5.Ethernet[4..7] + hub6: + - SD3.Ethernet8 + - spt.data0 + hub7: + - SD3.Ethernet9 + - spt.data2 + hub8: + - SD4.Ethernet8 + - spt.data1 + hub9: + - SD4.Ethernet9 + - spt.data3 diff --git a/pyvxr_yaml_files/tortuga_spytest_5D_linux_stc_Carib.yaml b/pyvxr_yaml_files/tortuga_spytest_5D_linux_stc_Carib.yaml new file mode 100755 index 00000000000..6b326e9e172 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_5D_linux_stc_Carib.yaml @@ -0,0 +1,100 @@ +simulation: + no_image_copy: true + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + +devices: + SD1: &sonic_router + platform: spitfire_f + os_type: sonic + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + xr_config: | + snmp-server community public RO + ssh server vrf default + ssh server netconf vrf default + netconf-yang agent ssh + xr_port_redir: [22, 161, 830] + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + onie-install: /users/yucgu/sonic-cisco-8000.bin + linecard_types: churchill + vxr_sim_config: + shelf: + ConfigS1NplPath: /auto/mb/sonic/workspace/sonic-cicd/sdk/sdk-1.66.85.13/npl + ConfigS1NpsuiteVer: 1.137.1 + ConfigCardPidOverride: 'FAS1000-32D' + + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + spt: + platform: spirent_cafy1 + spirent_license_override: + license_server: "10.22.181.32" + spirent_images: + windows: /auto/vxr/vxr_images/spirent/WindowsWithTestCenter_5_05 + api: /auto/vxr/vxr_images/spirent/Spirent_TestCenter_LabServer-5.05-dhcp.img + port: /auto/vxr/vxr_images/spirent/sptvm-5_05-dhcp.img + + data_ports: + - data0 + - data1 + - data2 + - data3 + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..3] + - SD3.Ethernet[0..3] + hub1: + - SD1.Ethernet[4..7] + - SD4.Ethernet[0..3] + hub2: + - SD1.Ethernet[8..11] + - SD5.Ethernet[0..3] + hub3: + - SD2.Ethernet[0..3] + - SD3.Ethernet[4..7] + hub4: + - SD2.Ethernet[4..7] + - SD4.Ethernet[4..7] + hub5: + - SD2.Ethernet[8..11] + - SD5.Ethernet[4..7] + hub6: + - SD3.Ethernet8 + - spt.data0 + hub7: + - SD3.Ethernet9 + - spt.data2 + hub8: + - SD4.Ethernet8 + - spt.data1 + hub9: + - SD4.Ethernet9 + - spt.data3 diff --git a/pyvxr_yaml_files/tortuga_spytest_8D_2DC_linux_dci_ixia_carib_v2.yaml b/pyvxr_yaml_files/tortuga_spytest_8D_2DC_linux_dci_ixia_carib_v2.yaml new file mode 100644 index 00000000000..984fa69e4da --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_8D_2DC_linux_dci_ixia_carib_v2.yaml @@ -0,0 +1,129 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + staggered_boot_delay: 60 + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigS1NplPath: /auto/vxr1/sonic-images/yucgu/202405/npl + ConfigS1NpsuiteVer: 1.184.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /nobackup/sudharr/ws/test/1/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + SD8: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + ovs_hubs: + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + hub5: + - SD4.Ethernet[0..1] + - SD8.Ethernet[0..1] + hub6: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub7: + - SD1.Ethernet[9..10] + - SD4.Ethernet[7..8] + hub8: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + hub9: + - SD2.Ethernet[9..10] + - SD4.Ethernet[9..10] + hub10: + - SD3.Ethernet[10..11] + - SD4.Ethernet[10..11] + hub11: + - SD5.Ethernet12 + - ixia.data0 + hub12: + - SD5.Ethernet13 + - ixia.data1 + hub13: + - SD6.Ethernet12 + - ixia.data2 + hub14: + - SD7.Ethernet12 + - ixia.data3 + hub15: + - SD8.Ethernet12 + - ixia.data4 diff --git a/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_carib.yaml new file mode 100644 index 00000000000..ed86e101973 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_carib.yaml @@ -0,0 +1,247 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 24 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /nobackup/prashsr3/images/202405c/sonic-buildimage-cisco.202405c.2.tortuga-periodic/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: &linux_host + data_ports: + - eth1 + - eth2 + - eth3 + - eth4 + - eth5 + - eth6 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + cli_commands: | + rm -f /home/vxr/tcpserver.py + echo 'import socket' > /home/vxr/tcpserver.py + echo 'import threading' >> /home/vxr/tcpserver.py + echo 'import sys' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'def handle_client(conn, addr):' >> /home/vxr/tcpserver.py + echo ' print(f"Connected by {addr}")' >> /home/vxr/tcpserver.py + echo ' with conn:' >> /home/vxr/tcpserver.py + echo ' while True:' >> /home/vxr/tcpserver.py + echo ' data = conn.recv(1024)' >> /home/vxr/tcpserver.py + echo ' if not data:' >> /home/vxr/tcpserver.py + echo ' break' >> /home/vxr/tcpserver.py + echo ' conn.sendall(data) # Echo back' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'def start_server(host, port):' >> /home/vxr/tcpserver.py + echo ' # Determine address family (IPv4 or IPv6)' >> /home/vxr/tcpserver.py + echo ' family = socket.AF_INET6 if ":" in host else socket.AF_INET' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' with socket.socket(family, socket.SOCK_STREAM) as s:' >> /home/vxr/tcpserver.py + echo ' # Allow immediate reuse of the address after restart' >> /home/vxr/tcpserver.py + echo ' s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' # Bind and listen' >> /home/vxr/tcpserver.py + echo ' s.bind((host, port))' >> /home/vxr/tcpserver.py + echo ' s.listen()' >> /home/vxr/tcpserver.py + echo ' print(f"Server listening on {host}:{port}")' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' while True:' >> /home/vxr/tcpserver.py + echo ' conn, addr = s.accept()' >> /home/vxr/tcpserver.py + echo ' print(f"Accepted connection from {addr}")' >> /home/vxr/tcpserver.py + echo ' client_thread = threading.Thread(target=handle_client, args=(conn, addr))' >> /home/vxr/tcpserver.py + echo ' client_thread.daemon = True' >> /home/vxr/tcpserver.py + echo ' client_thread.start()' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'if __name__ == "__main__":' >> /home/vxr/tcpserver.py + echo ' if len(sys.argv) != 3:' >> /home/vxr/tcpserver.py + echo ' print(f"Usage: python3 {sys.argv[0]} ")' >> /home/vxr/tcpserver.py + echo ' sys.exit(1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' try:' >> /home/vxr/tcpserver.py + echo ' PORT = int(sys.argv[1])' >> /home/vxr/tcpserver.py + echo ' except ValueError:' >> /home/vxr/tcpserver.py + echo ' print("Port must be an integer")' >> /home/vxr/tcpserver.py + echo ' sys.exit(1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' HOST = sys.argv[2]' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' start_server(HOST, PORT)' >> /home/vxr/tcpserver.py + chmod +x /home/vxr/tcpserver.py + echo "TCP server file created successfully" + + SD8: + <<: *linux_host + + SD9: &pxe_client + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu:~\$ + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + qemu_args: "-boot order=n -boot menu=on -global iPXE.dhcp_timeout=60" + cli_commands: | + echo "cisco123" | sudo -S apt remove python2.7 -y + sudo apt autoremove -y + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..9] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..1] + - SD3.Ethernet[0..1] + hub1: + - SD1.Ethernet[2..3] + - SD4.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD3.Ethernet[2..3] + hub3: + - SD2.Ethernet[2..3] + - SD4.Ethernet[2..3] + hub4: + - SD3.Ethernet[4..5] + - SD5.Ethernet[0..1] + hub5: + - SD3.Ethernet[6..7] + - SD6.Ethernet[0..1] + hub6: + - SD4.Ethernet[4..5] + - SD5.Ethernet[2..3] + hub7: + - SD4.Ethernet[6..7] + - SD6.Ethernet[2..3] + hub8: + - SD5.Ethernet[4..7] + - SD6.Ethernet[4..7] + hub9: + - SD3.Ethernet[8..9] + - ixia.data[0..1] + hub10: + - SD4.Ethernet[8..9] + - ixia.data[2..3] + hub11: + - SD3.Ethernet10 + - SD7.eth1 + hub12: + - SD3.Ethernet11 + - SD8.eth1 + hub13: + - SD4.Ethernet10 + - SD7.eth2 + hub14: + - SD4.Ethernet11 + - SD8.eth2 + hub15: + - SD4.Ethernet12 + - SD7.eth3 + hub16: + - SD3.Ethernet12 + - SD3.Ethernet13 + hub17: + - SD1.Ethernet[4..5] + - ixia.data[4..5] + hub18: + - SD1.Ethernet6 + - SD9.eth1 + hub19: + - SD2.Ethernet[4..5] + - ixia.data[6..7] + hub20: + - SD2.Ethernet6 + - SD9.eth2 + hub21: + - SD5.Ethernet[8..9] + - ixia.data[8..9] + hub22: + - SD1.Ethernet7 + - SD2.Ethernet7 + hub23: + - SD2.Ethernet8 + - SD7.eth4 + hub24: + - SD2.Ethernet9 + - SD7.eth5 + hub25: + - SD3.Ethernet14 + - SD7.eth6 + hub26: + - SD4.Ethernet13 + - SD8.eth3 diff --git a/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_laguna.yaml b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_laguna.yaml new file mode 100644 index 00000000000..2cec2ce1afc --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_laguna.yaml @@ -0,0 +1,252 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['HF6100-64ED'] + port_breakout: + lc0: + 0..63: 1x800 + linux_password: password + linux_username: admin + onie-install: /nobackup/prashsr3/IPSLA/images/cisco.202405c.2.tortuga/sonic-buildimage-cisco.202405c.2.tortuga-periodic/sonic-cisco-8000.bin + vxr_sim_config: + shelf: + # the below config prevet packet reaching nsim before the full initialization. We observer dsim crash when the packets are sent before the full initialization. + # the below config can be removed when dsim issue is fixed + ConfigS1EgressSeen: 'true' + ConfigS1DelayAfterEgressSeen: '60' + os_type: sonic + memory: 20GB + platform: spitfire_f + data_ports: + - Ethernet1_[1..64] + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: &linux_host + data_ports: + - eth1 + - eth2 + - eth3 + - eth4 + - eth5 + - eth6 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + cli_commands: | + rm -f /home/vxr/tcpserver.py + echo 'import socket' > /home/vxr/tcpserver.py + echo 'import threading' >> /home/vxr/tcpserver.py + echo 'import sys' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'def handle_client(conn, addr):' >> /home/vxr/tcpserver.py + echo ' print(f"Connected by {addr}")' >> /home/vxr/tcpserver.py + echo ' with conn:' >> /home/vxr/tcpserver.py + echo ' while True:' >> /home/vxr/tcpserver.py + echo ' data = conn.recv(1024)' >> /home/vxr/tcpserver.py + echo ' if not data:' >> /home/vxr/tcpserver.py + echo ' break' >> /home/vxr/tcpserver.py + echo ' conn.sendall(data) # Echo back' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'def start_server(host, port):' >> /home/vxr/tcpserver.py + echo ' # Determine address family (IPv4 or IPv6)' >> /home/vxr/tcpserver.py + echo ' family = socket.AF_INET6 if ":" in host else socket.AF_INET' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' with socket.socket(family, socket.SOCK_STREAM) as s:' >> /home/vxr/tcpserver.py + echo ' # Allow immediate reuse of the address after restart' >> /home/vxr/tcpserver.py + echo ' s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' # Bind and listen' >> /home/vxr/tcpserver.py + echo ' s.bind((host, port))' >> /home/vxr/tcpserver.py + echo ' s.listen()' >> /home/vxr/tcpserver.py + echo ' print(f"Server listening on {host}:{port}")' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' while True:' >> /home/vxr/tcpserver.py + echo ' conn, addr = s.accept()' >> /home/vxr/tcpserver.py + echo ' print(f"Accepted connection from {addr}")' >> /home/vxr/tcpserver.py + echo ' client_thread = threading.Thread(target=handle_client, args=(conn, addr))' >> /home/vxr/tcpserver.py + echo ' client_thread.daemon = True' >> /home/vxr/tcpserver.py + echo ' client_thread.start()' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'if __name__ == "__main__":' >> /home/vxr/tcpserver.py + echo ' if len(sys.argv) != 3:' >> /home/vxr/tcpserver.py + echo ' print(f"Usage: python3 {sys.argv[0]} ")' >> /home/vxr/tcpserver.py + echo ' sys.exit(1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' try:' >> /home/vxr/tcpserver.py + echo ' PORT = int(sys.argv[1])' >> /home/vxr/tcpserver.py + echo ' except ValueError:' >> /home/vxr/tcpserver.py + echo ' print("Port must be an integer")' >> /home/vxr/tcpserver.py + echo ' sys.exit(1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' HOST = sys.argv[2]' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' start_server(HOST, PORT)' >> /home/vxr/tcpserver.py + chmod +x /home/vxr/tcpserver.py + echo "TCP server file created successfully" + + SD8: + <<: *linux_host + + SD9: &pxe_client + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu:~\$ + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + qemu_args: "-boot order=n -boot menu=on -global iPXE.dhcp_timeout=60" + cli_commands: | + echo "cisco123" | sudo -S apt remove python2.7 -y + sudo apt autoremove -y + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..9] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet1_[1..2] + - SD3.Ethernet1_[1..2] + hub0_1: + - SD1.Ethernet1_[3..4] + - SD4.Ethernet1_[1..2] + hub0_2: + - SD1.Ethernet1_[5..6] + - ixia.data[4..5] + hub1_0: + - SD2.Ethernet1_[1..2] + - SD3.Ethernet1_[3..4] + hub1_1: + - SD2.Ethernet1_[3..4] + - SD4.Ethernet1_[3..4] + hub1_2: + - SD2.Ethernet1_[5..6] + - ixia.data[6..7] + hub2_0: + - SD3.Ethernet1_[5..6] + - SD5.Ethernet1_[1..2] + hub2_1: + - SD3.Ethernet1_[7..8] + - SD6.Ethernet1_[1..2] + hub3_0: + - SD4.Ethernet1_[5..6] + - SD5.Ethernet1_[3..4] + hub3_1: + - SD4.Ethernet1_[7..8] + - SD6.Ethernet1_[3..4] + hub4_0: + - SD5.Ethernet1_[5..8] + - SD6.Ethernet1_[5..8] + hub4_1: + - SD5.Ethernet1_[9..10] + - ixia.data[8..9] + hub4_2: + - SD3.Ethernet1_[9..10] + - ixia.data[0..1] + hub5_0: + - SD4.Ethernet1_[9..10] + - ixia.data[2..3] + hub5_1: + - SD3.Ethernet1_11 + - SD7.eth1 + hub6_0: + - SD3.Ethernet1_12 + - SD8.eth1 + hub6_1: + - SD4.Ethernet1_11 + - SD7.eth2 + hub7_0: + - SD4.Ethernet1_12 + - SD8.eth2 + hub7_1: + - SD4.Ethernet1_13 + - SD7.eth3 + hub8_0: + - SD3.Ethernet1_13 + - SD3.Ethernet1_14 + hub9_0: + - SD1.Ethernet1_7 + - SD9.eth1 + hub9_1: + - SD2.Ethernet1_7 + - SD9.eth2 + hub10_0: + - SD1.Ethernet1_8 + - SD2.Ethernet1_8 + hub10_1: + - SD2.Ethernet1_9 + - SD7.eth4 + hub10_2: + - SD2.Ethernet1_10 + - SD7.eth5 + hub10_3: + - SD3.Ethernet1_15 + - SD7.eth6 + hub10_4: + - SD4.Ethernet1_14 + - SD8.eth3 diff --git a/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_lightning.yaml b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_lightning.yaml new file mode 100644 index 00000000000..49f119d48e7 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_lightning.yaml @@ -0,0 +1,140 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: ['8122-64EH-O'] + port_breakout: + lc0: + 0..63: 2x400 + linux_password: password + linux_username: admin + onie-install: http://172.29.93.10/sonic-images/10652/sonic-cisco-8000.bin + os_type: sonic + memory: 20GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: &linux_host + data_ports: + - eth1 + - eth2 + - eth3 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + + SD8: + <<: *linux_host + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet0/[0..1] + - SD3.Ethernet0/[0..1] + hub0_1: + - SD1.Ethernet1/[0..1] + - SD4.Ethernet0/[0..1] + hub1_0: + - SD2.Ethernet0/[0..1] + - SD3.Ethernet1/[0..1] + hub1_1: + - SD2.Ethernet1/[0..1] + - SD4.Ethernet1/[0..1] + hub2_0: + - SD3.Ethernet2/[0..1] + - SD5.Ethernet0/[0..1] + hub2_1: + - SD3.Ethernet3/[0..1] + - SD6.Ethernet0/[0..1] + hub3_0: + - SD4.Ethernet2/[0..1] + - SD5.Ethernet1/[0..1] + hub3_1: + - SD4.Ethernet3/[0..1] + - SD6.Ethernet1/[0..1] + hub4_0: + - SD5.Ethernet2/[0..1] + - SD6.Ethernet2/[0..1] + hub4_1: + - SD3.Ethernet4/[0..1] + - ixia.data[0..1] + hub5_0: + - SD4.Ethernet4/[0..1] + - ixia.data[2..3] + hub5_1: + - SD3.Ethernet5/0 + - SD7.eth1 + hub6_0: + - SD3.Ethernet5/1 + - SD8.eth1 + hub6_1: + - SD4.Ethernet5/0 + - SD7.eth2 + hub7_0: + - SD4.Ethernet5/1 + - SD8.eth2 + hub7_1: + - SD4.Ethernet6/0 + - SD7.eth3 + hub8_0: + - SD3.Ethernet6/0 + - SD3.Ethernet6/1 diff --git a/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_mathilda.yaml b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_mathilda.yaml new file mode 100644 index 00000000000..54efca31c23 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_8D_linux_ixia_mathilda.yaml @@ -0,0 +1,241 @@ +simulation: + slurm_flags: + pending_timeout: 60 + hours: 30 + partition: regression + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0-2020.11br.iso + linecard_types: [matilda64] + linux_password: password + linux_username: admin + onie-install: /nobackup/prashsr3/IPSLA/images/cisco.202405c.2.tortuga/sonic-buildimage-cisco.202405c.2.tortuga-periodic/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: &linux_host + data_ports: + - eth1 + - eth2 + - eth3 + - eth4 + - eth5 + - eth6 + data_port_attributes: + transport: e1000 + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + vcpu: 2 + xr_port_redir: + - 22 + cli_commands: | + rm -f /home/vxr/tcpserver.py + echo 'import socket' > /home/vxr/tcpserver.py + echo 'import threading' >> /home/vxr/tcpserver.py + echo 'import sys' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'def handle_client(conn, addr):' >> /home/vxr/tcpserver.py + echo ' print(f"Connected by {addr}")' >> /home/vxr/tcpserver.py + echo ' with conn:' >> /home/vxr/tcpserver.py + echo ' while True:' >> /home/vxr/tcpserver.py + echo ' data = conn.recv(1024)' >> /home/vxr/tcpserver.py + echo ' if not data:' >> /home/vxr/tcpserver.py + echo ' break' >> /home/vxr/tcpserver.py + echo ' conn.sendall(data) # Echo back' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'def start_server(host, port):' >> /home/vxr/tcpserver.py + echo ' # Determine address family (IPv4 or IPv6)' >> /home/vxr/tcpserver.py + echo ' family = socket.AF_INET6 if ":" in host else socket.AF_INET' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' with socket.socket(family, socket.SOCK_STREAM) as s:' >> /home/vxr/tcpserver.py + echo ' # Allow immediate reuse of the address after restart' >> /home/vxr/tcpserver.py + echo ' s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' # Bind and listen' >> /home/vxr/tcpserver.py + echo ' s.bind((host, port))' >> /home/vxr/tcpserver.py + echo ' s.listen()' >> /home/vxr/tcpserver.py + echo ' print(f"Server listening on {host}:{port}")' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' while True:' >> /home/vxr/tcpserver.py + echo ' conn, addr = s.accept()' >> /home/vxr/tcpserver.py + echo ' print(f"Accepted connection from {addr}")' >> /home/vxr/tcpserver.py + echo ' client_thread = threading.Thread(target=handle_client, args=(conn, addr))' >> /home/vxr/tcpserver.py + echo ' client_thread.daemon = True' >> /home/vxr/tcpserver.py + echo ' client_thread.start()' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo 'if __name__ == "__main__":' >> /home/vxr/tcpserver.py + echo ' if len(sys.argv) != 3:' >> /home/vxr/tcpserver.py + echo ' print(f"Usage: python3 {sys.argv[0]} ")' >> /home/vxr/tcpserver.py + echo ' sys.exit(1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' try:' >> /home/vxr/tcpserver.py + echo ' PORT = int(sys.argv[1])' >> /home/vxr/tcpserver.py + echo ' except ValueError:' >> /home/vxr/tcpserver.py + echo ' print("Port must be an integer")' >> /home/vxr/tcpserver.py + echo ' sys.exit(1)' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' HOST = sys.argv[2]' >> /home/vxr/tcpserver.py + echo '' >> /home/vxr/tcpserver.py + echo ' start_server(HOST, PORT)' >> /home/vxr/tcpserver.py + chmod +x /home/vxr/tcpserver.py + echo "TCP server file created successfully" + + SD8: + <<: *linux_host + + SD9: &pxe_client + data_ports: + - eth1 + - eth2 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu:~\$ + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + memory: 4GB + platform: linux + vcpu: 4 + xr_port_redir: + - 22 + qemu_args: "-boot order=n -boot menu=on -global iPXE.dhcp_timeout=60" + cli_commands: | + echo "cisco123" | sudo -S apt remove python2.7 -y + sudo apt autoremove -y + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..9] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0_0: + - SD1.Ethernet[0..1] + - SD3.Ethernet[0..1] + hub0_1: + - SD1.Ethernet[2..3] + - SD4.Ethernet[0..1] + hub0_2: + - SD1.Ethernet[4..5] + - ixia.data[4..5] + hub0_3: + - SD1.Ethernet6 + - SD9.eth1 + hub1_0: + - SD2.Ethernet[0..1] + - SD3.Ethernet[2..3] + hub1_1: + - SD2.Ethernet[2..3] + - SD4.Ethernet[2..3] + hub1_2: + - SD2.Ethernet[4..5] + - ixia.data[6..7] + hub1_3: + - SD2.Ethernet6 + - SD9.eth2 + hub2_0: + - SD3.Ethernet[4..5] + - SD5.Ethernet[0..1] + hub2_1: + - SD3.Ethernet[6..7] + - SD6.Ethernet[0..1] + hub3_0: + - SD4.Ethernet[4..5] + - SD5.Ethernet[2..3] + hub3_1: + - SD4.Ethernet[6..7] + - SD6.Ethernet[2..3] + hub4_0: + - SD5.Ethernet[4..7] + - SD6.Ethernet[4..7] + hub4_1: + - SD5.Ethernet[8..9] + - ixia.data[8..9] + hub4_2: + - SD3.Ethernet[8..9] + - ixia.data[0..1] + hub5_0: + - SD4.Ethernet[8..9] + - ixia.data[2..3] + hub5_1: + - SD3.Ethernet10 + - SD7.eth1 + hub6_0: + - SD3.Ethernet11 + - SD8.eth1 + hub6_1: + - SD4.Ethernet10 + - SD7.eth2 + hub7_0: + - SD4.Ethernet11 + - SD8.eth2 + hub7_1: + - SD4.Ethernet12 + - SD7.eth3 + hub8_0: + - SD3.Ethernet12 + - SD3.Ethernet13 + hub8_1: + - SD1.Ethernet7 + - SD2.Ethernet7 + hub8_2: + - SD2.Ethernet8 + - SD7.eth4 + hub8_3: + - SD2.Ethernet9 + - SD7.eth5 + hub8_4: + - SD3.Ethernet14 + - SD7.eth6 + hub8_5: + - SD4.Ethernet13 + - SD8.eth3 diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_2DC_6D_linux_ixia_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_6D_linux_ixia_carib.yaml new file mode 100644 index 00000000000..75421f7191b --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_6D_linux_ixia_carib.yaml @@ -0,0 +1,104 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + staggered_boot_delay: 60 + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /auto/vxr1/sonic-images/yadeng/sonic-cisco-8000.bin.202405c + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + hub8: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub10: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + hub12: + - SD5.Ethernet[12..13] + - ixia.data[0..1] + hub14: + - SD6.Ethernet[12..13] + - ixia.data[2..3] + hub15: + - SD7.Ethernet[12..13] + - ixia.data[4..5] diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_2DC_6D_linux_ubuntu_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_6D_linux_ubuntu_carib.yaml new file mode 100644 index 00000000000..684f7adab6c --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_6D_linux_ubuntu_carib.yaml @@ -0,0 +1,127 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + staggered_boot_delay: 60 + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigS1NplPath: /auto/vxr1/sonic-images/yucgu/202405/npl + ConfigS1NpsuiteVer: 1.184.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /auto/vxr1/sonic-images/mrghosh/sonic-cisco-8000_dci_9_24.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + + HOST1: &host + data_ports: + - eth1 + - eth2 + - eth3 + - eth4 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + vcpu: 1 + xr_port_redir: + - 22 + HOST2: + <<: *host + + HOST3: + <<: *host + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + hub8: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub10: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + hub12: + - SD5.Ethernet12 + - HOST1.eth1 + hub13: + - SD5.Ethernet13 + - HOST2.eth1 + hub14: + - SD6.Ethernet12 + - HOST2.eth2 + hub15: + - SD7.Ethernet12 + - HOST3.eth1 diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_2DC_8D_linux_ixia_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_8D_linux_ixia_carib.yaml new file mode 100644 index 00000000000..a608814e925 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_8D_linux_ixia_carib.yaml @@ -0,0 +1,128 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + staggered_boot_delay: 60 + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /auto/vxr1/sonic-images/yadeng/sonic-cisco-8000.bin.202405c + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + SD8: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + hub5: + - SD3.Ethernet[4..5] + - SD8.Ethernet[0..1] + hub6: + - SD4.Ethernet[0..1] + - SD7.Ethernet[4..5] + hub7: + - SD4.Ethernet[4..5] + - SD8.Ethernet[4..5] + hub8: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub9: + - SD1.Ethernet[9..10] + - SD4.Ethernet[7..8] + hub10: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + hub11: + - SD2.Ethernet[9..10] + - SD4.Ethernet[9..10] + hub12: + - SD5.Ethernet[12..13] + - ixia.data[0..1] + hub14: + - SD6.Ethernet[12..13] + - ixia.data[2..3] + hub15: + - SD7.Ethernet[12..13] + - ixia.data[4..5] + hub16: + - SD8.Ethernet[12..13] + - ixia.data[6..7] diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_2DC_8D_linux_ubuntu_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_8D_linux_ubuntu_carib.yaml new file mode 100644 index 00000000000..326cae72a15 --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_2DC_8D_linux_ubuntu_carib.yaml @@ -0,0 +1,153 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + staggered_boot_delay: 60 + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigS1NplPath: /auto/vxr1/sonic-images/yucgu/202405/npl + ConfigS1NpsuiteVer: 1.184.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /auto/vxr1/sonic-images/mrghosh/sonic-cisco-8000_dci_9_24.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + SD8: + <<: *sonic_router + + HOST1: &host + data_ports: + - eth1 + - eth2 + - eth3 + - eth4 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + vcpu: 1 + xr_port_redir: + - 22 + HOST2: + <<: *host + + HOST3: + <<: *host + + HOST4: + <<: *host + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + hub5: + - SD3.Ethernet[4..5] + - SD8.Ethernet[0..1] + hub6: + - SD4.Ethernet[0..1] + - SD7.Ethernet[4..5] + hub7: + - SD4.Ethernet[4..5] + - SD8.Ethernet[4..5] + hub8: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub9: + - SD1.Ethernet[9..10] + - SD4.Ethernet[7..8] + hub10: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + hub11: + - SD2.Ethernet[9..10] + - SD4.Ethernet[9..10] + hub12: + - SD5.Ethernet12 + - HOST1.eth1 + hub13: + - SD5.Ethernet13 + - HOST2.eth1 + hub14: + - SD6.Ethernet12 + - HOST2.eth2 + hub15: + - SD7.Ethernet12 + - HOST3.eth1 + hub16: + - SD8.Ethernet12 + - HOST4.eth1 diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_3DC_6D_linux_ixia_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_3DC_6D_linux_ixia_carib.yaml new file mode 100644 index 00000000000..e623bf2466a --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_3DC_6D_linux_ixia_carib.yaml @@ -0,0 +1,127 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + cluster: rch-slurm-m1 + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + staggered_boot_delay: 60 + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + ConfigS1NplPath: /auto/vxr1/sonic-images/yucgu/202405/npl + ConfigS1NpsuiteVer: 1.184.1 + linux_password: cisco123 + linux_username: cisco + onie-install: /auto/vxr1/sonic-images/mrghosh/sonic-cisco-8000_dci_9_24.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_9.20.2206.28.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.20_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.20_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + # DC1 Intra-fabric (SD1/SD2 <-> SD5/SD6) - Same for both 6D and 8D + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + + # DC1-DC2 Inter-DC WAN links - Same for both 6D and 8D + hub6: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub8: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + + # DC1-DC3 Inter-DC WAN links - Only for 8D topology + hub7: + - SD1.Ethernet[9..10] + - SD4.Ethernet[7..8] + hub9: + - SD2.Ethernet[9..10] + - SD4.Ethernet[9..10] + + # DC2-DC3 Inter-DC WAN links - Only for 8D topology + hub10: + - SD3.Ethernet[11..12] + - SD4.Ethernet[11..12] + + # Ixia connections - HOST1 and HOST2 (DC1), LEAF3 + HOST3 (DC2), LEAF4 + HOST4 (DC3) + hub11: + - SD5.Ethernet12 + - ixia.data0 + hub12: + - SD5.Ethernet13 + - ixia.data1 + hub13: + - SD6.Ethernet12 + - ixia.data2 + hub14: + - SD3.Ethernet1 + - ixia.data3 + hub15: + - SD4.Ethernet1 + - ixia.data4 diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ixia.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ixia.yaml new file mode 100644 index 00000000000..4fabfd8ec6d --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ixia.yaml @@ -0,0 +1,144 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: password + linux_username: admin + onie-install: /auto/vxr1/sonic-images/abramamu/test/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + SD8: + <<: *sonic_router + + ixia: + platform: ixia-web + vcpu: 12 + memory: '16G' + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_10.00.2407.119.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_10.00_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_10.00_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + # DC1 Intra-fabric (SD1/SD2 <-> SD5/SD6) - Same for both 6D and 8D + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + + # DC2 Intra-fabric (SD3 <-> SD7) - Same for both 6D and 8D + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + + # DC1-DC2 Inter-DC WAN links - Same for both 6D and 8D + hub6: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub8: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + + # DC3 Intra-fabric (SD4 <-> SD8) - Only for 8D topology + hub5: + - SD4.Ethernet[0..1] + - SD8.Ethernet[0..1] + + # DC1-DC3 Inter-DC WAN links - Only for 8D topology + hub7: + - SD1.Ethernet[9..10] + - SD4.Ethernet[7..8] + hub9: + - SD2.Ethernet[9..10] + - SD4.Ethernet[9..10] + + # DC2-DC3 Inter-DC WAN links - Only for 8D topology + hub10: + - SD3.Ethernet[11..12] + - SD4.Ethernet[11..12] + + # IXIA connections - HOST1 (DC1 Leaf1), HOST2 (DC1 Leaf1/Leaf2), HOST3 (DC2 Leaf), HOST4 (DC3 Leaf), HOST5 (DC1 GW) + hub11: + - SD5.Ethernet12 + - ixia.data0 + hub12: + - SD5.Ethernet13 + - ixia.data1 + hub13: + - SD6.Ethernet12 + - ixia.data2 + hub14: + - SD7.Ethernet12 + - ixia.data3 + hub15: + - SD8.Ethernet12 + - ixia.data4 + hub16: + - SD1.Ethernet15 + - ixia.data5 diff --git a/pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ubuntu_carib.yaml b/pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ubuntu_carib.yaml new file mode 100644 index 00000000000..3ab51c7afed --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_dci_3DC_8D_linux_ubuntu_carib.yaml @@ -0,0 +1,320 @@ +simulation: + slurm_flags: + pending_timeout: 60 + partition: regression + hours: 30 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false + + +devices: + SD1: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - 8101-32FH + port_breakout: + lc0: + 0..31: 1x400 + vxr_sim_config: + shelf: + ConfigCardPidOverride: HF6100-32D + linux_password: cisco123 + linux_username: cisco + onie-install: /auto/vxr1/sonic-images/abramamu/test/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + vcpu: 8 + platform: spitfire_f + xr_port_redir: + - 22 + pre_cli: | + sudo systemctl disable drake + sudo systemctl disable lira + sudo systemctl disable azimuth + + SD2: + <<: *sonic_router + + SD3: + <<: *sonic_router + + SD4: + <<: *sonic_router + + SD5: + <<: *sonic_router + + SD6: + <<: *sonic_router + + SD7: + <<: *sonic_router + + SD8: + <<: *sonic_router + + SD9: &host + data_ports: + - eth1 + - eth2 + - eth3 + - eth4 + data_port_attributes: + transport: e1000 + linux_username: vxr + linux_password: cisco123 + linux_prompt: vxr@ubuntu22:~\$ + disks: + - hda_ref: + file: /auto/vxr/images/linux/ubuntu22.qcow2 + type: reference + memory: 2GB + platform: linux + vcpu: 1 + xr_port_redir: + - 22 + cli_commands: | + sudo ifconfig eth1 up + sudo modprobe 8021q + sudo ip link add link eth1 name eth1.10 type vlan id 10 + sudo ip link add link eth1 name eth1.20 type vlan id 20 + sudo ip link add link eth1 name eth1.30 type vlan id 30 + sudo ip link add link eth1 name eth1.40 type vlan id 40 + sudo ip link add link eth1 name eth1.50 type vlan id 50 + sudo ip link add link eth1 name eth1.60 type vlan id 60 + sudo ip link add link eth1 name eth1.70 type vlan id 70 + sudo ip link add link eth1 name eth1.80 type vlan id 80 + sudo ip link add link eth1 name eth1.90 type vlan id 90 + sudo ip link add link eth1 name eth1.99 type vlan id 99 + sudo ip link set dev eth1.10 address 00:00:00:00:10:01 + sudo ip link set dev eth1.20 address 00:00:00:00:20:01 + sudo ip link set dev eth1.30 address 00:00:00:00:30:01 + sudo ip link set dev eth1.40 address 00:00:00:00:40:01 + sudo ip link set dev eth1.50 address 00:00:00:00:50:01 + sudo ip link set dev eth1.60 address 00:00:00:00:60:01 + sudo ip link set dev eth1.70 address 00:00:00:00:70:01 + sudo ip link set dev eth1.80 address 00:00:00:00:80:01 + sudo ip link set dev eth1.90 address 00:00:00:00:90:01 + sudo ip link set dev eth1.99 address 00:00:00:00:99:01 + sudo ip addr add 10.212.10.1/24 dev eth1.10 + sudo ip addr add 10.212.20.1/24 dev eth1.20 + sudo ip addr add 10.212.30.1/24 dev eth1.30 + sudo ip addr add 10.212.40.1/24 dev eth1.40 + sudo ip addr add 10.212.50.1/24 dev eth1.50 + sudo ip addr add 10.212.60.1/24 dev eth1.60 + sudo ip addr add 10.212.70.1/24 dev eth1.70 + sudo ip addr add 10.212.80.1/24 dev eth1.80 + sudo ip addr add 10.212.90.1/24 dev eth1.90 + sudo ip addr add 10.212.99.1/24 dev eth1.99 + sudo ip link set dev eth1.10 up + sudo ip link set dev eth1.20 up + sudo ip link set dev eth1.30 up + sudo ip link set dev eth1.40 up + sudo ip link set dev eth1.50 up + sudo ip link set dev eth1.60 up + sudo ip link set dev eth1.70 up + sudo ip link set dev eth1.80 up + sudo ip link set dev eth1.90 up + sudo ip link set dev eth1.99 up + ip addr + ping -c 1 10.212.10.10 + SD10: + <<: *host + cli_commands: | + echo -e "network:\n version: 2\n renderer: networkd\n ethernets:\n eth1:\n dhcp4: no\n eth2:\n dhcp4: no\n bonds:\n bond0:\n dhcp4: no\n interfaces:\n - eth1\n - eth2\n parameters:\n mode: 802.3ad\n transmit-hash-policy: layer3+4\n mii-monitor-interval: 100\n lacp-rate: fast\n vlans:\n bond0.10:\n id: 10\n link: bond0\n addresses:\n - 10.212.10.2/24\n macaddress: 00:00:00:00:10:02\n bond0.20:\n id: 20\n link: bond0\n addresses:\n - 10.212.20.2/24\n macaddress: 00:00:00:00:20:02\n bond0.30:\n id: 30\n link: bond0\n addresses:\n - 10.212.30.2/24\n macaddress: 00:00:00:00:30:02\n bond0.40:\n id: 40\n link: bond0\n addresses:\n - 10.212.40.2/24\n macaddress: 00:00:00:00:40:02\n bond0.50:\n id: 50\n link: bond0\n addresses:\n - 10.212.50.2/24\n macaddress: 00:00:00:00:50:02\n bond0.60:\n id: 60\n link: bond0\n addresses:\n - 10.212.60.2/24\n macaddress: 00:00:00:00:60:02\n bond0.70:\n id: 70\n link: bond0\n addresses:\n - 10.212.70.2/24\n macaddress: 00:00:00:00:70:02\n bond0.80:\n id: 80\n link: bond0\n addresses:\n - 10.212.80.2/24\n macaddress: 00:00:00:00:80:02\n bond0.90:\n id: 90\n link: bond0\n addresses:\n - 10.212.90.2/24\n macaddress: 00:00:00:00:90:02\n bond0.99:\n id: 99\n link: bond0\n addresses:\n - 10.212.99.2/24\n macaddress: 00:00:00:00:99:02" | sudo tee /etc/netplan/01-netcfg.yaml > /dev/null + sudo netplan apply + ip addr + ping -c 1 10.212.10.10 + + SD11: + <<: *host + cli_commands: | + sudo ifconfig eth1 up + sudo modprobe 8021q + sudo ip link add link eth1 name eth1.10 type vlan id 10 + sudo ip link add link eth1 name eth1.20 type vlan id 20 + sudo ip link add link eth1 name eth1.30 type vlan id 30 + sudo ip link add link eth1 name eth1.40 type vlan id 40 + sudo ip link add link eth1 name eth1.50 type vlan id 50 + sudo ip link add link eth1 name eth1.60 type vlan id 60 + sudo ip link add link eth1 name eth1.70 type vlan id 70 + sudo ip link add link eth1 name eth1.80 type vlan id 80 + sudo ip link add link eth1 name eth1.90 type vlan id 90 + sudo ip link add link eth1 name eth1.99 type vlan id 99 + sudo ip addr add 10.212.10.3/24 dev eth1.10 + sudo ip addr add 10.212.20.3/24 dev eth1.20 + sudo ip addr add 10.212.30.3/24 dev eth1.30 + sudo ip addr add 10.212.40.3/24 dev eth1.40 + sudo ip addr add 10.212.50.3/24 dev eth1.50 + sudo ip addr add 10.212.60.3/24 dev eth1.60 + sudo ip addr add 10.212.70.3/24 dev eth1.70 + sudo ip addr add 10.212.80.3/24 dev eth1.80 + sudo ip addr add 10.212.90.3/24 dev eth1.90 + sudo ip addr add 10.212.99.3/24 dev eth1.99 + sudo ip link set dev eth1.10 address 00:00:00:00:10:03 + sudo ip link set dev eth1.20 address 00:00:00:00:20:03 + sudo ip link set dev eth1.30 address 00:00:00:00:30:03 + sudo ip link set dev eth1.40 address 00:00:00:00:40:03 + sudo ip link set dev eth1.50 address 00:00:00:00:50:03 + sudo ip link set dev eth1.60 address 00:00:00:00:60:03 + sudo ip link set dev eth1.70 address 00:00:00:00:70:03 + sudo ip link set dev eth1.80 address 00:00:00:00:80:03 + sudo ip link set dev eth1.90 address 00:00:00:00:90:03 + sudo ip link set dev eth1.99 address 00:00:00:00:99:03 + sudo ip link set dev eth1.10 up + sudo ip link set dev eth1.20 up + sudo ip link set dev eth1.30 up + sudo ip link set dev eth1.40 up + sudo ip link set dev eth1.50 up + sudo ip link set dev eth1.60 up + sudo ip link set dev eth1.70 up + sudo ip link set dev eth1.80 up + sudo ip link set dev eth1.90 up + sudo ip link set dev eth1.99 up + ip addr + ping -c 1 10.212.10.10 + + SD12: + <<: *host + cli_commands: | + sudo ifconfig eth1 up + sudo modprobe 8021q + sudo ip link add link eth1 name eth1.10 type vlan id 10 + sudo ip link add link eth1 name eth1.20 type vlan id 20 + sudo ip link add link eth1 name eth1.30 type vlan id 30 + sudo ip link add link eth1 name eth1.40 type vlan id 40 + sudo ip link add link eth1 name eth1.50 type vlan id 50 + sudo ip link add link eth1 name eth1.60 type vlan id 60 + sudo ip link add link eth1 name eth1.70 type vlan id 70 + sudo ip link add link eth1 name eth1.80 type vlan id 80 + sudo ip link add link eth1 name eth1.90 type vlan id 90 + sudo ip link add link eth1 name eth1.99 type vlan id 99 + sudo ip addr add 10.212.10.4/24 dev eth1.10 + sudo ip addr add 10.212.20.4/24 dev eth1.20 + sudo ip addr add 10.212.30.4/24 dev eth1.30 + sudo ip addr add 10.212.40.4/24 dev eth1.40 + sudo ip addr add 10.212.50.4/24 dev eth1.50 + sudo ip addr add 10.212.60.4/24 dev eth1.60 + sudo ip addr add 10.212.70.4/24 dev eth1.70 + sudo ip addr add 10.212.80.4/24 dev eth1.80 + sudo ip addr add 10.212.90.4/24 dev eth1.90 + sudo ip addr add 10.212.99.4/24 dev eth1.99 + sudo ip link set dev eth1.10 address 00:00:00:00:10:04 + sudo ip link set dev eth1.20 address 00:00:00:00:20:04 + sudo ip link set dev eth1.30 address 00:00:00:00:30:04 + sudo ip link set dev eth1.40 address 00:00:00:00:40:04 + sudo ip link set dev eth1.50 address 00:00:00:00:50:04 + sudo ip link set dev eth1.60 address 00:00:00:00:60:04 + sudo ip link set dev eth1.70 address 00:00:00:00:70:04 + sudo ip link set dev eth1.80 address 00:00:00:00:80:04 + sudo ip link set dev eth1.90 address 00:00:00:00:90:04 + sudo ip link set dev eth1.99 address 00:00:00:00:99:04 + sudo ip link set dev eth1.10 up + sudo ip link set dev eth1.20 up + sudo ip link set dev eth1.30 up + sudo ip link set dev eth1.40 up + sudo ip link set dev eth1.50 up + sudo ip link set dev eth1.60 up + sudo ip link set dev eth1.70 up + sudo ip link set dev eth1.80 up + sudo ip link set dev eth1.90 up + sudo ip link set dev eth1.99 up + ip addr + ping -c 1 10.212.10.10 + + SD13: + <<: *host + cli_commands: | + sudo ifconfig eth1 up + sudo ip addr add 10.212.3.5/24 dev eth1 + sudo ip link set dev eth1 address 00:00:00:00:03:05 + ip addr + ping -c 1 10.212.3.10 + + ixia: + platform: ixia-web + ixia_images: + windows: /auto/vxr/images/ixia/IxNetworkWeb_KVM_10.00.2407.119.qcow2 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_10.00_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_10.00_KVM.qcow2 + data_ports: + - data[0..7] + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + +connections: + hubs: + # DC1 Intra-fabric (SD1/SD2 <-> SD5/SD6) - Same for both 6D and 8D + hub0: + - SD1.Ethernet[0..1] + - SD5.Ethernet[0..1] + hub1: + - SD1.Ethernet[4..5] + - SD6.Ethernet[0..1] + hub2: + - SD2.Ethernet[0..1] + - SD5.Ethernet[4..5] + hub3: + - SD2.Ethernet[4..5] + - SD6.Ethernet[4..5] + + # DC2 Intra-fabric (SD3 <-> SD7) - Same for both 6D and 8D + hub4: + - SD3.Ethernet[0..1] + - SD7.Ethernet[0..1] + + # DC1-DC2 Inter-DC WAN links - Same for both 6D and 8D + hub6: + - SD1.Ethernet[7..8] + - SD3.Ethernet[7..8] + hub8: + - SD2.Ethernet[7..8] + - SD3.Ethernet[9..10] + + # DC3 Intra-fabric (SD4 <-> SD8) - Only for 8D topology + hub5: + - SD4.Ethernet[0..1] + - SD8.Ethernet[0..1] + + # DC1-DC3 Inter-DC WAN links - Only for 8D topology + hub7: + - SD1.Ethernet[9..10] + - SD4.Ethernet[7..8] + hub9: + - SD2.Ethernet[9..10] + - SD4.Ethernet[9..10] + + # DC2-DC3 Inter-DC WAN links - Only for 8D topology + hub10: + - SD3.Ethernet[11..12] + - SD4.Ethernet[11..12] + + # Host connections - Consistent for both topologies + hub11: + - SD5.Ethernet12 + - HOST1.eth1 + hub12: + - SD5.Ethernet13 + - HOST2.eth1 + hub13: + - SD6.Ethernet12 + - HOST2.eth2 + hub14: + - SD7.Ethernet12 + - HOST3.eth1 + hub15: + - SD8.Ethernet12 + - HOST4.eth1 + hub16: + - SD1.Ethernet15 + - HOST5.eth1 diff --git a/pyvxr_yaml_files/tortuga_spytest_solution_tb.yaml b/pyvxr_yaml_files/tortuga_spytest_solution_tb.yaml new file mode 100644 index 00000000000..6d20958cead --- /dev/null +++ b/pyvxr_yaml_files/tortuga_spytest_solution_tb.yaml @@ -0,0 +1,77 @@ +simulation: + slurm_flags: + hours: 120 + no_image_copy: true + pyvxr_flags: + port_file_timeout: 1200 + skip_auto_bringup: false +devices: + leaf0: &sonic_router + image: /auto/vxr/images/onie-sonic/onie-recovery-x86_64-cisco_8000-r0.iso + linecard_types: + - churchill + linux_password: cisco123 + linux_username: cisco + onie-install: http://172.29.93.10/sonic-images/tortuga/sonic-cisco-8000.bin + os_type: sonic + memory: 12GB + platform: spitfire_f + xr_port_redir: + - 22 + + leaf1: + <<: *sonic_router + + spine0: + <<: *sonic_router + + spine1: + <<: *sonic_router + + sonic_mgmt : + platform: linux + image: /auto/vxr1/images/linux/ubuntu_serial.qcow2 + linux_username: 'vxr' + linux_password : 'cisco123' + linux_prompt: 'vxr@ubuntu:~\$' + xr_port_redir: [22] + vcpu: 4 + memory: '4G' + data_ports: + - data[0..1] + + ixia: + platform: ixia + ixia_images: + windows: /auto/vxr/images/ixia/WindowsWithIxNetwork_9.0 + chassis: /auto/vxr/images/ixia/Ixia_Virtual_Chassis_9.00_KVM.qcow2 + load: /auto/vxr/images/ixia/Ixia_Virtual_Load_Module_9.00_KVM.qcow2 + data_ports: + - data[0..7] + +connections: + hubs: + spine0_leaf0_conn1: + - spine0.Ethernet0 + - leaf0.Ethernet0 + spine0_leaf1_conn1: + - spine0.Ethernet1 + - leaf1.Ethernet1 + spine1_leaf0_conn1: + - spine1.Ethernet1 + - leaf0.Ethernet1 + spine1_leaf1_conn1: + - spine1.Ethernet0 + - leaf1.Ethernet0 + ixia_leaf0_conn0: + - leaf0.Ethernet[2..5] + - ixia.data[0..3] + ixia_leaf1_conn0: + - leaf1.Ethernet[2..5] + - ixia.data[4..7] + hub0: + - leaf0.Ethernet6 + - sonic_mgmt.data0 + hub1: + - leaf1.Ethernet6 + - sonic_mgmt.data1 diff --git a/sdn_tests/pins_ondatra/tests/cpu_sw_single_switch_test.go b/sdn_tests/pins_ondatra/tests/cpu_sw_single_switch_test.go deleted file mode 100644 index ed9818452ac..00000000000 --- a/sdn_tests/pins_ondatra/tests/cpu_sw_single_switch_test.go +++ /dev/null @@ -1,385 +0,0 @@ -package cpu_interface_test - -import ( - "net" - "testing" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/openconfig/ondatra" - "github.com/openconfig/ondatra/gnmi" - "github.com/openconfig/ondatra/gnmi/oc" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" -) - -var ( - cpuName = "CPU" - pktsPer uint64 = 7 - counterUpdateDelay time.Duration = 10000 * time.Millisecond -) - -func TestMain(m *testing.M) { - ondatra.RunTests(m, pinsbind.New) -} - -// TestGNMICPUName - Check that the CPU name is the expected value. -func TestGNMICPUName(t *testing.T) { - // Report results in TestTracker at the end - defer testhelper.NewTearDownOptions(t).WithID("f9c713f4-3b1e-4a08-82ae-8c82746160a4").Teardown(t) - - // Select the dut, or device under test. - dut := ondatra.DUT(t, "DUT") - - // Read the name via /state. - stateName := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Name().State()) - - // Verify the information received from the DUT. - if stateName != cpuName { - t.Errorf("CPU state Name is %v, wanted %v", stateName, cpuName) - } - - // Read the name via /config too. - configName := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Name().Config()) - - // Verify the information received from the DUT. - if configName != cpuName { - t.Errorf("CPU config Name is %v, wanted %v", configName, cpuName) - } -} - -// TestGNMICPUType - Check that the CPU type is 6=ethernetCsmacd. -func TestGNMICPUType(t *testing.T) { - // Report results in TestTracker at the end. - defer testhelper.NewTearDownOptions(t).WithID("4d8c458f-10cf-45eb-95d6-90911f05134a").Teardown(t) - - // Select the dut, or device under test. - dut := ondatra.DUT(t, "DUT") - - // Read the type via /state. - stateType := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Type().State()) - - // Verify the information received from the DUT. - if stateType != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { - t.Errorf("CPU state Type is %v, wanted %v", stateType, oc.IETFInterfaces_InterfaceType_ethernetCsmacd) - } - - // Read the type via /config. - configType := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Type().Config()) - - // Verify the information received from the DUT - if configType != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { - t.Errorf("CPU config Type is %v, wanted %v", configType, oc.IETFInterfaces_InterfaceType_ethernetCsmacd) - } - - // Verify that changing the value via config works, even if we can't - // set it other than to IETFInterfaces_InterfaceType_ethernetCsmacd - gnmi.Replace(t, dut, gnmi.OC().Interface(cpuName).Type().Config(), configType) - - // Read the type via /state again. - stateType = gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Type().State()) - - // Verify the information received from the DUT. - if stateType != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { - t.Errorf("CPU state Type is %v, wanted %v", stateType, oc.IETFInterfaces_InterfaceType_ethernetCsmacd) - } -} - -// TestGNMICPURole - Check the CPU interface role -// - management should be false -// - CPU should be true -func TestGNMICPURole(t *testing.T) { - // Reports results in TestTracker at the end. - defer testhelper.NewTearDownOptions(t).WithID("202484be-ff32-4aa2-b459-da1a586b1476").Teardown(t) - - // Select the dut, or device under test. - dut := ondatra.DUT(t, "DUT") - - // Read management via /state. Note that the config path for - // these doesn't exist since they're read-only. - stateMgmt := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Management().State()) - - // Verify the information received from the DUT - if stateMgmt != false { - t.Errorf("CPU state Management is %v, wanted false", stateMgmt) - } - - // Read the CPU via /state. - stateCPU := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Cpu().State()) - - // Verify the information received from the DUT. - if stateCPU != true { - t.Errorf("CPU state CPU is %v, wanted true", stateCPU) - } -} - -// TestGNMICPUParentPaths - Check the CPU parent paths. -func TestGNMICPUParentPaths(t *testing.T) { - // Reports results in TestTracker at the end. - defer testhelper.NewTearDownOptions(t).WithID("799e156c-0369-4969-b1f2-9c1197603131").Teardown(t) - - // Select the dut, or device under test. - dut := ondatra.DUT(t, "DUT") - - // Read the counters via /state. Note that the config path for - // these doesn't exist since they're read-only. The type - // for the return value is "type Interface_Counters struct" - stateCounters := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Counters().State()) - - // Verify the information received from the DUT. - - // CarrierTransitions isn't expected on CPU interface. - if stateCounters.CarrierTransitions != nil && stateCounters.GetCarrierTransitions() != 0 { - t.Errorf("CPU CarrierTransitions is non-zero: %v", stateCounters.GetCarrierTransitions()) - } - - if stateCounters.InBroadcastPkts == nil { - t.Error("CPU BroadcastPkts is nil") - } - - if stateCounters.InDiscards == nil { - t.Error("CPU InDicards is nil") - } - - // Errors on the CPU interface would be unexpected - if stateCounters.InErrors == nil { - t.Error("CPU InErrors is nil") - } - if stateCounters.GetInErrors() != 0 { - t.Errorf("CPU InErrors is non-zero: %v", stateCounters.GetInErrors()) - } - - // FCS errors aren't possible on the CPU interface. - if stateCounters.InFcsErrors == nil { - t.Error("CPU InFcsErrors is nil") - } else { - if stateCounters.GetInFcsErrors() != 0 { - t.Errorf("CPU InFcsErrors is non-zero: %v", stateCounters.GetInFcsErrors()) - } - } - - if stateCounters.InMulticastPkts == nil { - t.Error("CPU InMulticastPkts is nil") - } - - if stateCounters.InOctets == nil { - t.Error("CPU InOctets is nil") - } - - if stateCounters.InPkts == nil { - t.Error("CPU InPkts is nil") - } - - if stateCounters.InUnicastPkts == nil { - t.Error("CPU InUnicastPkts is nil") - } - - if stateCounters.InUnknownProtos == nil { - t.Error("CPU InUnknownProtos is nil") - } - - if stateCounters.LastClear == nil { - t.Error("CPU LastClear is nil") - } - - if stateCounters.OutBroadcastPkts == nil { - t.Error("CPU OutBroadcastPkts is nil") - } - - if stateCounters.OutDiscards == nil { - t.Error("CPU OutDiscards is nil") - } - - if stateCounters.OutErrors == nil { - t.Error("CPU OutErrors is nil") - } - - if stateCounters.OutMulticastPkts == nil { - t.Error("CPU OutMulticastPkts is nil") - } - - if stateCounters.OutOctets == nil { - t.Error("CPU OutOctets is nil") - } - - if stateCounters.OutPkts == nil { - t.Error("CPU OutPkts is nil") - } - - if stateCounters.OutUnicastPkts == nil { - t.Error("CPU OutUnicastPkts is nil") - } - - // Read the parent via /state. Note that the config path for - // this doesn't exist since it is read-only. The type - // for the return value is - // "type OpenconfigInterfaces_Interfaces_Interface_State struct" - stateIntf := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).State()) - - // Verify the information received from the DUT. - - // AdminStatus may not be valid for CPU so allow for both 0 (not set) - // or UP as valid options. - if stateIntf.AdminStatus != oc.Interface_AdminStatus_UNSET && stateIntf.AdminStatus != oc.Interface_AdminStatus_UP { - t.Errorf("CPU AdminStatus is unexpected: %v", stateIntf.AdminStatus) - } - - // Validate that Counters isn't nil. - if stateIntf.Counters == nil { - t.Error("CPU Counters is nil") - } - - // Enabled may not be valid for CPU, allow. - if stateIntf.Enabled != nil && stateIntf.GetEnabled() != true { - t.Error("CPU is not enabled") - } - - // LoopbackMode may not be valid for CPU, allow. - if lpMode := stateIntf.GetLoopbackMode(); lpMode != oc.Interfaces_LoopbackModeType_UNSET && lpMode != oc.Interfaces_LoopbackModeType_NONE { - t.Errorf("CPU LoopbackMode is not valid: got: %v, want: %v", lpMode, oc.Interfaces_LoopbackModeType_NONE) - } - - // MTU may not be valid for CPU, allow. - if stateIntf.Mtu != nil { - if stateIntf.GetMtu() < 1514 || stateIntf.GetMtu() > 9216 { - t.Errorf("CPU MTU is unexpected: %v (expected [1514-9216])", stateIntf.GetMtu()) - } - } - - // Validate the Name. - if stateIntf.Name == nil { - t.Error("CPU Name is nil") - } else { - name := stateIntf.GetName() - if name != cpuName { - t.Errorf("CPU Name is %v", name) - } - } - - // OperStatus may not be valid for CPU, allow nil (unset). - if stateIntf.OperStatus != oc.Interface_OperStatus_UNSET { - if stateIntf.OperStatus != - oc.Interface_OperStatus_UP { - t.Errorf("CPU OperStatus is unexpected: %v", stateIntf.OperStatus) - } - - } - - // Validate the Type. - if stateIntf.Type != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { - t.Errorf("CPU Type is unexpected: %v", stateIntf.Type) - } -} - -// TestGNMICPUInDiscards - Check CPU In-Discards -// Because the systems we're testing on have existing traffic flowing at random -// intervals, we'll run the test a number of times looking for the expected -// changes. If we get a run with the exact counter increments we expect then -// we exit successfully. If we get a run with more changes than expected to -// the counters then we try again up to the limit. -func TestGNMICPUInDiscards(t *testing.T) { - // Report results to TestTracker at the end. - defer testhelper.NewTearDownOptions(t).WithID("c6e2ef27-d893-451b-9f65-db3e742780fd").Teardown(t) - - // Select the dut, or device under test. - dut := ondatra.DUT(t, "DUT") - - var bad bool - var i int - - // Iterate up to 5 times to get a successful test. - for i = 1; i <= 5; i++ { - t.Logf("\n----- TestGNMICPUInDiscards: Iteration %v -----\n", i) - bad = false - - // Read all the relevant counters initial values. - cpuStruct := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Counters().State()) - beforeInDiscards := cpuStruct.GetInDiscards() - beforeOutDiscards := cpuStruct.GetOutDiscards() - beforeInPkts := cpuStruct.GetInPkts() - beforeInErrors := cpuStruct.GetInErrors() - - // Construct a simple IP packet to an address that the switch - // doesn't know how to route - eth := &layers.Ethernet{ - SrcMAC: net.HardwareAddr{0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, - DstMAC: net.HardwareAddr{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, - EthernetType: layers.EthernetTypeIPv4, - } - - ip := &layers.IPv4{ - Version: 4, - TTL: 0, - Protocol: layers.IPProtocol(0), - SrcIP: net.ParseIP("192.168.0.10").To4(), - DstIP: net.ParseIP("192.168.0.20").To4(), - } - - buf := gopacket.NewSerializeBuffer() - - // Enable reconstruction of length and checksum fields. - opts := gopacket.SerializeOptions{ - FixLengths: true, - ComputeChecksums: true, - } - - if err := gopacket.SerializeLayers(buf, opts, eth, ip); err != nil { - t.Fatalf("Failed to serialize packet (%v)", err) - } - - packetOut := &testhelper.PacketOut{ - SubmitToIngress: true, - Count: uint(pktsPer), - Interval: 1 * time.Millisecond, - Packet: buf.Bytes(), - } - - p4rtClient, err := testhelper.FetchP4RTClient(t, dut, dut.RawAPIs().P4RT(t), nil) - if err != nil { - t.Fatalf("Failed to create P4RT client: %v", err) - } - if err := p4rtClient.SendPacketOut(t, packetOut); err != nil { - t.Fatalf("SendPacketOut operation failed for %+v (%v)", packetOut, err) - } - - // Sleep for enough time that the counters are polled after the - // transmit completes sending bytes. At 500ms we frequently - // read the counters before they're updated. Even at 1 second - // I have seen counter increases show up on a subsequent - // iteration rather than this one. - time.Sleep(counterUpdateDelay) - - // Read all the relevant counters again. - cpuStruct = gnmi.Get(t, dut, gnmi.OC().Interface("CPU").Counters().State()) - afterInDiscards := cpuStruct.GetInDiscards() - afterOutDiscards := cpuStruct.GetOutDiscards() - afterInPkts := cpuStruct.GetInPkts() - afterInErrors := cpuStruct.GetInErrors() - deltaInDiscards := afterInDiscards - beforeInDiscards - deltaOutDiscards := afterOutDiscards - beforeOutDiscards - - if deltaInDiscards != pktsPer { - t.Logf("beforeIndiscards is %d, afterInDiscards is %d", beforeInDiscards, afterInDiscards) - t.Logf("beforeInPkts %d, afterInPkts %d, beforeInErrors %d, afterInErrors %d", - beforeInPkts, afterInPkts, beforeInErrors, afterInErrors) - t.Logf("deltaInDiscards is %d, expected %d", deltaInDiscards, pktsPer) - bad = true - } - if deltaOutDiscards != 0 { - t.Logf("beforeOutdiscards is %d, afterOutDiscards is %d", beforeOutDiscards, afterOutDiscards) - t.Logf("deltaOutDiscards is %d, expected %d", deltaOutDiscards, 0) - bad = true - } - - if !bad { - break - } - } - - if bad { - t.Fatalf("\n\n----- TestGNMICPUInDiscards: FAILED after %v Iterations -----\n\n", i-1) - } - - t.Logf("\n\n----- TestGNMICPUInDiscards: SUCCESS after %v Iteration(s) -----\n\n", i) -} diff --git a/sdn_tests/pins_ondatra/tests/gnmi_get_modes_test.go b/sdn_tests/pins_ondatra/tests/gnmi_get_modes_test.go deleted file mode 100644 index d5576721359..00000000000 --- a/sdn_tests/pins_ondatra/tests/gnmi_get_modes_test.go +++ /dev/null @@ -1,1115 +0,0 @@ -package gnmi_get_modes_test - -import ( - "fmt" - "context" - "encoding/json" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" - "github.com/openconfig/gnmi/value" - "github.com/openconfig/ondatra" - "github.com/openconfig/ygot/ygot" - "github.com/openconfig/ondatra/gnmi" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/encoding/prototext" - - gpb "github.com/openconfig/gnmi/proto/gnmi" -) - -const ( - compStatePath = "/components/component[name=%s]/state" - compFwVerPath = "/components/component[name=%s]/state/firmware-version" - compParentStatePath = "/components/component[name=%s]/state/parent" - intfPath = "/interfaces/interface[name=%s]" - intfMtuPath = "/interfaces/interface[name=%s]/%s/mtu" - intfNamePath = "/interfaces/interface[name=%s]/%s/name" - intfConfigPath = "/interfaces/interface[name=%s]/config" - intfStatePath = "/interfaces/interface[name=%s]/state" - intfCtrsPath = "/interfaces/interface[name=%s]/state/counters" - intfCtrsStatePath = "/interfaces/interface[name=%s]/state/counters/in-octets" - intfMgmtStatePath = "/interfaces/interface[name=%s]/state/management" -) - -var ignorePaths = []string{ - "/gnmi-pathz-policy-counters/paths/path", -} - -func TestMain(m *testing.M) { - ondatra.RunTests(m, pinsbind.New) -} - -/* - TODO: Refactor the code to remove getDataTypeTest, and have -different table-driven tests for different methods of getDataTypeTest. -*/ -type getDataTypeTest struct { - uuid string - reqPath string - dataType gpb.GetRequest_DataType - wantVal any - wantNotVal string -} - -func TestGNMIGetModes(t *testing.T) { - dut := ondatra.DUT(t, "DUT") - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Check if the switch is responsive with Get API, which will panic if the switch does not return - // state value for specified interface Openconfig path resulting in a test failure. - mtuVal := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().State()) - - testCases := []struct { - name string - function func(*testing.T) - }{ - { - name: "GetConfigTypeConfigLeaf", - function: getDataTypeTest{ - uuid: "89f2834b-9ce2-4347-ad08-aa2e5b44e994", - reqPath: fmt.Sprintf(intfMtuPath, intf, "config"), - dataType: gpb.GetRequest_CONFIG, - wantVal: uint64(mtuVal), - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetConfigTypeConfigSubtree", - function: getDataTypeTest{ - uuid: "7ee2bf60-8f55-4bdd-a56e-e9a7c37c0611", - reqPath: fmt.Sprintf(intfConfigPath, intf), - dataType: gpb.GetRequest_CONFIG, - wantVal: fmt.Sprintf(intfConfigPath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetConfigTypeStateLeaf", - function: getDataTypeTest{ - uuid: "6cd51db0-b1e5-405b-81b9-6d76b28014c3", - reqPath: fmt.Sprintf(intfMtuPath, intf, "state"), - dataType: gpb.GetRequest_CONFIG, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetConfigTypeStateSubtree", - function: getDataTypeTest{ - uuid: "5685f240-67ce-4eaf-a842-0ae5e5ff470b", - reqPath: fmt.Sprintf(intfStatePath, intf), - dataType: gpb.GetRequest_CONFIG, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetConfigTypeOperationalLeaf", - function: getDataTypeTest{ - uuid: "ab3bb6f3-a85b-4f61-a1fd-01b338aab111", - reqPath: fmt.Sprintf(intfCtrsStatePath, intf), - dataType: gpb.GetRequest_CONFIG, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetConfigTypeOperationalSubtree", - function: getDataTypeTest{ - uuid: "93eff08c-3177-4097-90d3-5bcf42756a96", - reqPath: fmt.Sprintf(intfCtrsPath, intf), - dataType: gpb.GetRequest_CONFIG, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetConfigTypeRoot", - function: getDataTypeTest{ - uuid: "88844ea0-328e-4b96-9454-b426d956a7c7", - dataType: gpb.GetRequest_CONFIG, - wantVal: []string{"/config/"}, - wantNotVal: "/state/", - }.dataTypeForRootNonEmpty, - }, - { - name: "GetStateTypeConfigLeaf", - function: getDataTypeTest{ - uuid: "fda99c23-3f28-49e9-9242-f116f633519a", - reqPath: fmt.Sprintf(intfMtuPath, intf, "config"), - dataType: gpb.GetRequest_STATE, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetStateTypeConfigSubtree", - function: getDataTypeTest{ - uuid: "089f5aca-a8ba-4862-9238-96424b67035f", - reqPath: fmt.Sprintf(intfConfigPath, intf), - dataType: gpb.GetRequest_STATE, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetStateTypeStateLeaf", - function: getDataTypeTest{ - uuid: "e091452a-ea18-423d-9c57-f42d8737012b", - reqPath: fmt.Sprintf(intfMtuPath, intf, "state"), - dataType: gpb.GetRequest_STATE, - wantVal: uint64(mtuVal), - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetStateTypeStateSubtree", - function: getDataTypeTest{ - uuid: "310a421e-eb94-4371-b0a4-557136f51ed9", - reqPath: fmt.Sprintf(intfStatePath, intf), - dataType: gpb.GetRequest_STATE, - wantVal: fmt.Sprintf(intfStatePath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetStateTypeOperationalLeaf", - function: getDataTypeTest{ - uuid: "3b0bd721-0778-4f01-b2ac-927c63f023e1", - reqPath: fmt.Sprintf(compParentStatePath, "os0"), - dataType: gpb.GetRequest_STATE, - wantVal: "chassis", - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetStateTypeOperationalSubtree", - function: getDataTypeTest{ - uuid: "3f937fa1-31ae-4338-b3d7-bc7408106040", - reqPath: fmt.Sprintf(intfCtrsPath, intf), - dataType: gpb.GetRequest_STATE, - wantVal: fmt.Sprintf(intfCtrsPath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetStateTypeRoot", - function: getDataTypeTest{ - uuid: "6b876b6c-e589-4611-a9eb-157fd5898e5d", - dataType: gpb.GetRequest_STATE, - wantVal: []string{"/state/"}, - wantNotVal: "/config/", - }.dataTypeForRootNonEmpty, - }, - { - name: "GetOperationalTypeConfigLeaf", - function: getDataTypeTest{ - uuid: "76209f70-069f-4bb0-b2b3-43e17c1ca955", - reqPath: fmt.Sprintf(intfNamePath, intf, "config"), - dataType: gpb.GetRequest_OPERATIONAL, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetOperationalTypeConfigSubtree", - function: getDataTypeTest{ - uuid: "a6bcac89-4cc4-42d9-b1b5-fe8c32389ae4", - reqPath: fmt.Sprintf(intfConfigPath, intf), - dataType: gpb.GetRequest_OPERATIONAL, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetOperationalTypeStateLeaf", - function: getDataTypeTest{ - uuid: "45013a6f-bdda-420d-9c7a-fc23e4946fac", - reqPath: fmt.Sprintf(intfNamePath, intf, "state"), - dataType: gpb.GetRequest_OPERATIONAL, - wantVal: `{}`, - }.dataTypeForPathEmpty, - }, - { - name: "GetOperationalTypeStateSubtree", - function: getDataTypeTest{ - uuid: "ccc00a4c-8c80-4379-bf41-eb5554a3fad0", - reqPath: fmt.Sprintf(intfStatePath, intf), - dataType: gpb.GetRequest_OPERATIONAL, - wantVal: fmt.Sprintf(intfStatePath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetOperationalTypeOperationalLeaf", - function: getDataTypeTest{ - uuid: "c829fd56-7452-4cf1-8a51-8b6ad80ed109", - reqPath: fmt.Sprintf(intfMgmtStatePath, intf), - dataType: gpb.GetRequest_OPERATIONAL, - wantVal: false, - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetOperationalTypeRoot", - function: getDataTypeTest{ - uuid: "1c27789a-de88-4cb4-9b17-6ecc2018423e", - reqPath: "/", - }.operationalUpdateNotInConfigCheck, - }, - { - name: "GetOperationalTypeSubTree", - function: getDataTypeTest{ - uuid: "f65f9291-b695-4f89-b9d8-26443bcd26d1", - reqPath: fmt.Sprintf(intfPath, intf), - }.operationalUpdateNotInConfigCheck, - }, - { - name: "GetAllTypeConfigLeaf", - function: getDataTypeTest{ - uuid: "acbc0dce-9e4c-4005-ae9d-b00e7bfb63ff", - reqPath: fmt.Sprintf(intfMtuPath, intf, "config"), - dataType: gpb.GetRequest_ALL, - wantVal: uint64(mtuVal), - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetAllTypeConfigSubtree", - function: getDataTypeTest{ - uuid: "b565e2cb-de9c-4ea1-99b2-88a63ea93981", - reqPath: fmt.Sprintf(intfConfigPath, intf), - dataType: gpb.GetRequest_ALL, - wantVal: fmt.Sprintf(intfConfigPath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetAllTypeStateLeaf", - function: getDataTypeTest{ - uuid: "f010154c-ef5b-4068-b4aa-c5dc54e02303", - reqPath: fmt.Sprintf(intfMtuPath, intf, "state"), - dataType: gpb.GetRequest_ALL, - wantVal: uint64(mtuVal), - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetAllTypeStateSubtree", - function: getDataTypeTest{ - uuid: "45e1f65e-02d3-4c7c-a1e0-f84ebcc6db93", - reqPath: fmt.Sprintf(intfStatePath, intf), - dataType: gpb.GetRequest_ALL, - wantVal: fmt.Sprintf(intfStatePath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetAllTypeOperationalLeaf", - function: getDataTypeTest{ - uuid: "35961781-c3d6-4c50-9ea2-bb1b9c09a6f2", - reqPath: fmt.Sprintf(compParentStatePath, "os0"), - dataType: gpb.GetRequest_ALL, - wantVal: "chassis", - }.dataTypeForLeafNonEmpty, - }, - { - name: "GetAllTypeOperationalSubtree", - function: getDataTypeTest{ - uuid: "f9e27f17-5bb6-4e04-b07a-181bdb6628b8", - reqPath: fmt.Sprintf(intfStatePath, intf), - dataType: gpb.GetRequest_ALL, - wantVal: fmt.Sprintf(intfStatePath, intf), - }.dataTypeForNonLeafNonEmpty, - }, - { - name: "GetAllTypeRoot", - function: getDataTypeTest{ - uuid: "0993eb99-ea29-485d-88b1-694f030ffa1c", - dataType: gpb.GetRequest_STATE, - wantVal: []string{"/state/", "/config/"}, - }.dataTypeForRootNonEmpty, - }, - { - name: "GetConsistencyConfigLeaf", - function: getDataTypeTest{ - uuid: "13068a17-affc-46dc-a9f4-ef8639d70c8f", - reqPath: fmt.Sprintf(intfMtuPath, intf, "config"), - dataType: gpb.GetRequest_CONFIG, - }.consistencyCheckLeafLevel, - }, - { - name: "GetConsistencyStateLeaf", - function: getDataTypeTest{ - uuid: "1db85b3d-ac1c-422e-a4ea-108a71393773", - reqPath: fmt.Sprintf(intfMtuPath, intf, "state"), - dataType: gpb.GetRequest_STATE, - }.consistencyCheckLeafLevel, - }, - { - name: "GetConsistencyOperationalLeaf", - function: getDataTypeTest{ - uuid: "319cb11c-70e2-4f59-a39c-8e804685728d", - reqPath: fmt.Sprintf(compFwVerPath, "chassis"), - dataType: gpb.GetRequest_OPERATIONAL, - }.consistencyCheckLeafLevel, - }, - { - name: "GetConsistencyConfigSubtree", - function: getDataTypeTest{ - uuid: "036b0a6f-91eb-41ce-9efa-92da9812cc29", - reqPath: fmt.Sprintf(intfConfigPath, intf), - dataType: gpb.GetRequest_CONFIG, - }.consistencyCheckSubtreeLevel, - }, - { - name: "GetConsistencyStateSubtree", - function: getDataTypeTest{ - uuid: "3b215c64-33c7-47b9-8ec5-01f378e09b68", - reqPath: fmt.Sprintf(compStatePath, "os0"), - dataType: gpb.GetRequest_STATE, - }.consistencyCheckSubtreeLevel, - }, - } - - for _, testCase := range testCases { - t.Run(testCase.name, testCase.function) // Calls the sub-test method. - } -} - -// Helper function to create the Get Request. -func createGetRequest(dut *ondatra.DUTDevice, paths []*gpb.Path, dataType gpb.GetRequest_DataType) *gpb.GetRequest { - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - // Create getRequest message with data type. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: paths, - Type: dataType, - Encoding: gpb.Encoding_PROTO, - } - return getRequest -} - -// Test for gNMI Get for Data Type for Leaf path when non-empty subtree is returned. -func (c getDataTypeTest) dataTypeForLeafNonEmpty(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Create Get Request. - sPath, err := ygot.StringToStructuredPath(c.reqPath) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - getRequest := createGetRequest(dut, paths, c.dataType) - t.Logf("GetRequest:\n%v", getRequest) - - // Send Get request using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("Error while calling Get Raw API: (%v)", err) - } - - if getResp == nil { - t.Fatalf("Get response is nil") - } - t.Logf("GetResponse:\n%v", getResp) - - // Validate GET response. - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - notif, updates := notifs[0], notifs[0].GetUpdate() - if len(updates) != 1 { - t.Fatalf("got %d updates in the notification, want 1", len(updates)) - } - pathStr, err := ygot.PathToString(&gpb.Path{Elem: notif.GetPrefix().GetElem()}) - if err != nil { - t.Fatalf("failed to convert elems (%v) to string: %v", notif.GetPrefix().GetElem(), err) - } - - updatePath, err := ygot.PathToString(updates[0].GetPath()) - if err != nil { - t.Fatalf("failed to convert path to string (%v): %v", updatePath, err) - } - gotPath := updatePath - if pathStr != "/" { - gotPath = pathStr + updatePath - } - if gotPath != c.reqPath { - t.Fatalf("got %s path, want %s path", gotPath, c.reqPath) - } - val := updates[0].GetVal() - - var gotVal any - if val.GetJsonIetfVal() == nil { - // Get Scalar value. - gotVal, err = value.ToScalar(val) - if err != nil { - t.Errorf("got %v, want scalar value", gotVal) - } - } else { - // Unmarshal json data to container. - if err := json.Unmarshal(val.GetJsonIetfVal(), &gotVal); err != nil { - t.Fatalf("could not unmarshal json data to container: %v", err) - } - var wantJSONStruct any - if err := json.Unmarshal([]byte(c.wantVal.(string)), &wantJSONStruct); err != nil { - t.Fatalf("could not unmarshal json data to container: %v", err) - } - c.wantVal = wantJSONStruct - } - if !cmp.Equal(gotVal, c.wantVal) { - t.Fatalf("got %v value with type %T, want %v value with type %T", gotVal, gotVal, c.wantVal, c.wantVal) - } -} - -// Test for gNMI Get for Data Type for path when empty subtree is returned. -func (c getDataTypeTest) dataTypeForPathEmpty(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Create Get Request. - sPath, err := ygot.StringToStructuredPath(c.reqPath) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - getRequest := createGetRequest(dut, paths, c.dataType) - t.Logf("GetRequest:\n%v", getRequest) - - // Send Get request using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("Error while calling Get Raw API: (%v)", err) - } - - if getResp == nil { - t.Fatalf("Get response is nil") - } - t.Logf("GetResponse:\n%v", getResp) - - // Validate GET response. - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - // Expect an empty subtree and zero updates in the notification response. - if updates := notifs[0].GetUpdate(); len(updates) != 0 { - t.Fatalf("Expected 0 updates, got (%v) updates", len(updates)) - } -} - -// Test for gNMI Get for Data Type for non-leaf path when non-empty subtree is returned. -func (c getDataTypeTest) dataTypeForNonLeafNonEmpty(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Create Get Request. - sPath, err := ygot.StringToStructuredPath(c.reqPath) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - getRequest := createGetRequest(dut, paths, c.dataType) - t.Logf("GetRequest:\n%v", getRequest) - - // Send Get request using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("Error while calling Get Raw API: (%v)", err) - } - t.Logf("GetResponse:\n%v", getResp) - - // Validate GET response. - want, ok := c.wantVal.(string) - if !ok { - t.Fatalf("Error with interface to string conversion (%v)", c.wantVal) - } - - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - notif, updates := notifs[0], notifs[0].GetUpdate() - if len(updates) == 0 { - t.Fatalf("got %d updates in the notification, want >= 1", len(updates)) - } - pathStr, err := ygot.PathToString(&gpb.Path{Elem: notif.GetPrefix().GetElem()}) - if err != nil { - t.Fatalf("failed to convert elems (%v) to string: %v", notif.GetPrefix().GetElem(), err) - } - - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("failed to convert path to string (%v): %v", updatePath, err) - } - fullPath := updatePath - if pathStr != "/" { - fullPath = pathStr + updatePath - } - if !strings.HasPrefix(fullPath, want) { - t.Fatalf("path compare failed to match; got (%v), want prefix (%v)", fullPath, want) - } - } -} - -func containsOneOfTheseSubstrings(haystack string, needles []string) bool { - for i := range needles { - if strings.Contains(haystack, needles[i]) { - return true - } - } - return false -} - -// Test for gNMI Get for Data Type for root path when non-empty subtree is returned. -func (c getDataTypeTest) dataTypeForRootNonEmpty(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - var paths []*gpb.Path - getRequest := createGetRequest(dut, paths, c.dataType) - t.Logf("GetRequest:\n%v", getRequest) - - // Send Get request using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("(%v): Error while calling Get Raw API: (%v)", "dataTypeForRootNonEmpty", err) - } - t.Logf("GetResponse:\n%v", getResp) - - // Validate GET response. - notifs := getResp.GetNotification() - if len(notifs) < 6 { - t.Fatalf("(%v): for path(%v) and type(%v), got %d notifications, want >= 6", - "dataTypeForRootNonEmpty", c.reqPath, c.dataType, len(notifs)) - } - wantVal, ok := c.wantVal.([]string) - if !ok { - t.Fatalf("(%v): Error with interface to map conversion (%v)", "dataTypeForRootNonEmpty", c.wantVal) - } - for u := range notifs { - updates := notifs[u].GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("(%v): failed to convert path (%v) to string (%v): %v", "dataTypeForRootNonEmpty", updatePath, prototext.Format(update), err) - } - if containsOneOfTheseSubstrings(updatePath, ignorePaths) { - continue - } - if !containsOneOfTheseSubstrings(updatePath, wantVal) { - if c.wantNotVal != "" && strings.Contains(updatePath, c.wantNotVal) { - t.Fatalf("(%v): path compare failed to match; got (%v), want contains (%v)", "dataTypeForRootNonEmpty", updatePath, c.wantNotVal) - } - } - } - } -} - -func notificationsFromGetRequest(t *testing.T, dut *ondatra.DUTDevice, getRequest *gpb.GetRequest) ([]*gpb.Notification, error) { - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - return nil, err - } - return getResp.GetNotification(), nil -} - -// Test for gNMI Get for Data Type for root path when non-empty subtree is returned. -func (c getDataTypeTest) operationalUpdateNotInConfigCheck(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - var paths []*gpb.Path - if c.reqPath != "/" { - sPath, err := ygot.StringToStructuredPath(c.reqPath) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths = []*gpb.Path{sPath} - } - configNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_CONFIG)) - if err != nil { - t.Fatalf(err.Error()) - } - operNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_OPERATIONAL)) - if err != nil { - t.Fatalf(err.Error()) - } - - if len(operNotifs) < 1 { - t.Fatalf("(%v): for path(%v) and type(%v), got %d notifications, want >= 1", - "operationalForRootNonEmpty", c.reqPath, gpb.GetRequest_OPERATIONAL, len(operNotifs)) - } - - // Build a set from the config updates - configUpdatesSet := make(map[string]bool) - for u := range configNotifs { - updates := configNotifs[u].GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("(%v): failed to convert path (%v) to string (%v): %v", "operationalRootCheck", updatePath, prototext.Format(update), err) - } - configUpdatesSet[updatePath] = true - } - } - - // Check for operational update leaves that have a corresponding config update, none should exist - for u := range operNotifs { - updates := operNotifs[u].GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("(%v): failed to convert path (%v) to string (%v): %v", "operationalRootCheck", updatePath, prototext.Format(update), err) - } - if strings.Contains(updatePath, "\\state\\") { - operPathAsConfig := strings.Replace(updatePath, "\\state\\", "\\config\\", 1) - if _, ok := configUpdatesSet[operPathAsConfig]; ok { - t.Fatalf("(%v): Found operational update with a corresponding config update: (%v)", "operationalRootCheck", updatePath) - } - } - } - } -} - -// Helper function to create and validate the GET request. -func createAndValidateLeafRequest(t *testing.T, dut *ondatra.DUTDevice, paths []*gpb.Path, dataType gpb.GetRequest_DataType, wantPath string) any { - t.Helper() - getReq := createGetRequest(dut, paths, dataType) - // Send Get request using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getReq) - if err != nil { - t.Fatalf("Error while calling Get Raw API: (%v)", err) - } - t.Logf("GetResponse %v for type %v", getResp, dataType) - - // Validate GET response. - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - notif, updates := notifs[0], notifs[0].GetUpdate() - if len(updates) != 1 { - t.Fatalf("got %d updates in the notification, want 1", len(updates)) - } - pathStr, err := ygot.PathToString(&gpb.Path{Elem: notif.GetPrefix().GetElem()}) - if err != nil { - t.Fatalf("failed to convert elems (%v) to string: %v", notif.GetPrefix().GetElem(), err) - } - updatePath, err := ygot.PathToString(updates[0].GetPath()) - if err != nil { - t.Fatalf("failed to convert path to string (%v): %v", updatePath, err) - } - gotPath := updatePath - if pathStr != "/" { - gotPath = pathStr + updatePath - } - if gotPath != wantPath { - t.Fatalf("got %s path, want %s path", gotPath, wantPath) - } - - val := updates[0].GetVal() - var gotVal any - if val.GetJsonIetfVal() == nil { - // Get Scalar value. - gotVal, err = value.ToScalar(val) - if err != nil { - t.Errorf("got %v, want scalar value", gotVal) - } - } else { - // Unmarshal json data to container. - if err := json.Unmarshal(val.GetJsonIetfVal(), &gotVal); err != nil { - t.Fatalf("could not unmarshal json data to container: %v", err) - } - } - return gotVal -} - -// Test for gNMI GET consistency for specified data type with ALL type at leaf level. -func (c getDataTypeTest) consistencyCheckLeafLevel(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - sPath, err := ygot.StringToStructuredPath(c.reqPath) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - wantVal := createAndValidateLeafRequest(t, dut, paths, gpb.GetRequest_ALL, c.reqPath) - gotVal := createAndValidateLeafRequest(t, dut, paths, c.dataType, c.reqPath) - if !cmp.Equal(gotVal, wantVal) { - t.Fatalf("(consistencyCheckLeafLevel): got %v value with type %T, want %v value with type %T", gotVal, gotVal, wantVal, wantVal) - } - if c.dataType == gpb.GetRequest_OPERATIONAL { - wantVal = createAndValidateLeafRequest(t, dut, paths, gpb.GetRequest_STATE, c.reqPath) - if !cmp.Equal(gotVal, wantVal) { - t.Fatalf("(consistencyCheckLeafLevel): got %v value with type %T, want %v value with type %T", gotVal, gotVal, wantVal, wantVal) - } - } -} - -// Helper function to create and validate the GET request for subtrees. -func createAndValidateSubtreeRequest(t *testing.T, dut *ondatra.DUTDevice, paths []*gpb.Path, dataType gpb.GetRequest_DataType, wantPath string) []*gpb.Update { - t.Helper() - getReq := createGetRequest(dut, paths, dataType) - // Send Get request using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getReq) - if err != nil { - t.Fatalf("Error while calling Get Raw API: (%v)", err) - } - t.Logf("GetResponse %v for type %v", getResp, dataType) - - // Validate GET response. - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - updates := notifs[0].GetUpdate() - if len(updates) == 0 { - t.Fatalf("got %d updates in the notification, want >= 1", len(updates)) - } - return updates -} - -// Test for gNMI GET consistency for specified data type with ALL type at subtree level. -func (c getDataTypeTest) consistencyCheckSubtreeLevel(t *testing.T) { - t.Helper() - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - sPath, err := ygot.StringToStructuredPath(c.reqPath) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - wantVal := createAndValidateSubtreeRequest(t, dut, paths, gpb.GetRequest_ALL, c.reqPath) - gotVal := createAndValidateSubtreeRequest(t, dut, paths, c.dataType, c.reqPath) - sortProtos := cmpopts.SortSlices(func(m1, m2 *gpb.Update) bool { return m1.String() < m2.String() }) - if diff := cmp.Diff(wantVal, gotVal, protocmp.Transform(), sortProtos); diff != "" { - t.Fatalf("(consistencyCheckSubtreeLevel) diff (-want +got):\n%s", diff) - } -} - -// This test exposes an issue with /system/mount-points paths -func TestGetAllEqualsConfigStateOperationalWithRoot(t *testing.T) { - t.Skip("This isn't a tracked test, but it reveals behavior that requires additional investigation") - var paths []*gpb.Path - verifyGetAllEqualsConfigStateOperational(t, "--Not currently a tracked test--", paths) -} - -func TestGetAllEqualsConfigStateOperational(t *testing.T) { - sPath, err := ygot.StringToStructuredPath("/interfaces/") - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - verifyGetAllEqualsConfigStateOperational(t, "f49b3091-97d9-4bf0-b82d-712acf7ffba8", []*gpb.Path{sPath}) -} - -func verifyGetAllEqualsConfigStateOperational(t *testing.T, tid string, paths []*gpb.Path) { - defer testhelper.NewTearDownOptions(t).WithID(tid).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - csoPathsSet := make(map[string]bool) - allPathsSet := make(map[string]bool) - - configNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_CONFIG)) - if err != nil { - t.Fatalf(err.Error()) - } - stateNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_STATE)) - if err != nil { - t.Fatalf(err.Error()) - } - operNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_OPERATIONAL)) - if err != nil { - t.Fatalf(err.Error()) - } - allNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_ALL)) - if err != nil { - t.Fatalf(err.Error()) - } - - // Build a set from the config, state, and operational updates - for _, notifs := range [][]*gpb.Notification{configNotifs, stateNotifs, operNotifs} { - for _, notif := range notifs { - updates := notif.GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("(%v): failed to convert path (%v) to string (%v): %v", t.Name(), updatePath, prototext.Format(update), err) - } - csoPathsSet[updatePath] = true - } - } - } - // Build a set from the all updates - for _, notif := range allNotifs { - updates := notif.GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("(%v): failed to convert path (%v) to string (%v): %v", t.Name(), updatePath, prototext.Format(update), err) - } - allPathsSet[updatePath] = true - } - } - - // Check that ALL update leaves that are present in the CSO updates, and vice versa - // Filter out `process` updates as they are too volatile. - var missesFromCSO []string - for path := range allPathsSet { - if _, ok := csoPathsSet[path]; !ok { - missesFromCSO = append(missesFromCSO, path) - } - } - var missesFromAll []string - for path := range csoPathsSet { - if _, ok := allPathsSet[path]; !ok { - missesFromAll = append(missesFromAll, path) - } - } - if len(missesFromCSO) > 0 || len(missesFromAll) > 0 { - t.Fatalf("(%v): Found %v ALL updates missing from CSO updates set:\n%v\n\nFound %v CSO updates missing from ALL updates set:\n%v", t.Name(), len(missesFromCSO), missesFromCSO, len(missesFromAll), missesFromAll) - } -} - -func TestGetConsistencyOperationalSubtree(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("b3bc19aa-defe-41be-8344-9ad30460136f").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - sPath, err := ygot.StringToStructuredPath(fmt.Sprintf(compStatePath, "os0")) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - - stateNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_STATE)) - if err != nil { - t.Fatalf(err.Error()) - } - operNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_OPERATIONAL)) - if err != nil { - t.Fatalf(err.Error()) - } - allNotifs, err := notificationsFromGetRequest(t, dut, createGetRequest(dut, paths, gpb.GetRequest_ALL)) - if err != nil { - t.Fatalf(err.Error()) - } - - // Build sets from both the STATE and ALL notifications - updateSetSlice := make([]map[string]bool, 2) - for i, notifs := range [][]*gpb.Notification{stateNotifs, allNotifs} { - updateSetSlice[i] = make(map[string]bool) - for _, notif := range notifs { - updates := notif.GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updateSetSlice[i][update.String()] = true - } - } - } - // Confirm that every OPERATIONAL update is present in both STATE/ALL updates - var misses []string - for i := range updateSetSlice { - for _, notif := range operNotifs { - updates := notif.GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - if _, ok := updateSetSlice[i][update.String()]; !ok { - misses = append(misses, update.String()) - } - } - } - } - if len(misses) > 0 { - t.Fatalf("(%v): Found %v OPER updates missing:\n%v", t.Name(), len(misses), misses) - } -} - -func TestGetInvalidLeaves(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("7e81cbdf-a113-47a4-851c-1df917646c01").Teardown(t) - dut := ondatra.DUT(t, "DUT") - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - types := []gpb.GetRequest_DataType{gpb.GetRequest_STATE, gpb.GetRequest_CONFIG, gpb.GetRequest_OPERATIONAL, gpb.GetRequest_ALL} - invalidPaths := []string{ - "/interfaces/interface[name=%s]/config/fake-leaf", - "/interfaces/interface[name=%s]/state/fake-leaf", - "/interfaces/interface[name=%s]/state/counters/fake-counter", - "/interfaces/interface[name=%s]/state/fake-leaf"} - if len(types) != len(invalidPaths) { - t.Fatalf("types and invalidPaths should be the same size") - } - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - for i := range invalidPaths { - sPath, err := ygot.StringToStructuredPath(fmt.Sprintf(invalidPaths[i], intf)) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - if _, err := gnmiClient.Get(ctx, createGetRequest(dut, paths, types[i])); err == nil { - t.Fatalf("Expected an error with this invalid path(%v)", invalidPaths[i]) - } - } -} - -func TestGetInvalidTypesReturnError(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("5a46b9d1-9f9a-4567-a852-93eb2548f3f6").Teardown(t) - dut := ondatra.DUT(t, "DUT") - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - types := []gpb.GetRequest_DataType{4, 5, 6, 7} - validPaths := []string{ - "/interfaces/interface[name=%s]/config", - "/interfaces/interface[name=%s]/state", - "/interfaces/interface[name=%s]/state/counters", - "/interfaces/interface[name=%s]/state"} - if len(types) != len(validPaths) { - t.Fatalf("types and invalidPaths should be the same size") - } - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - for i := range validPaths { - path := fmt.Sprintf(validPaths[i], intf) - sPath, err := ygot.StringToStructuredPath(path) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - - if _, err := gnmiClient.Get(ctx, createGetRequest(dut, paths, types[i])); err == nil { - t.Fatalf("No error received for Get with invalid type. Expected an error with invalid type (%v) for path (%v)", types[i], path) - } - } -} - -func TestMissingTypeAssumesAll(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("1f3f5692-47a6-4c47-ac05-96d705752883").Teardown(t) - dut := ondatra.DUT(t, "DUT") - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - types := []gpb.GetRequest_DataType{4, 5, 6, 7} - validPaths := []string{ - "/interfaces/interface[name=%s]/config", - "/interfaces/interface[name=%s]/state", - "/interfaces/interface[name=%s]/state/counters", - "/interfaces/interface[name=%s]/state"} - if len(types) != len(validPaths) { - t.Fatalf("types and invalidPaths should be the same size") - } - for i := range validPaths { - path := fmt.Sprintf(validPaths[i], intf) - sPath, err := ygot.StringToStructuredPath(path) - if err != nil { - t.Fatalf("Unable to convert string to path (%v)", err) - } - paths := []*gpb.Path{sPath} - - // Get notifications from a Get request without an explicit type specified - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - notifs, err := notificationsFromGetRequest(t, dut, - &gpb.GetRequest{ - Prefix: prefix, - Path: paths, - // Type: OMITED - Encoding: gpb.Encoding_PROTO, - }) - if err != nil { - t.Fatalf(err.Error()) - } - - // Verify response completeness - i := 0 - for _, notif := range notifs { - pathRootStr, err := ygot.PathToString(&gpb.Path{Elem: notif.GetPrefix().GetElem()}) - if err != nil { - t.Fatalf("failed to convert elems (%v) to string: %v", notif.GetPrefix().GetElem(), err) - } - updates := notif.GetUpdate() - if len(updates) == 0 { - continue - } - for _, update := range updates { - updatePath, err := ygot.PathToString(update.GetPath()) - if err != nil { - t.Fatalf("(%v): failed to convert path (%v) to string (%v): %v", t.Name(), updatePath, prototext.Format(update), err) - } - fullPath := pathRootStr + updatePath - if !strings.HasPrefix(fullPath, path) { - t.Fatalf("(%v): Expected path (%v) to have prefix(%v)", t.Name(), fullPath, path) - } - i++ - } - if i == 0 { - t.Fatalf("(%v): No updates returned for path (%v)", t.Name(), path) - } - } - } -} diff --git a/sdn_tests/pins_ondatra/tests/gnmi_set_get_test.go b/sdn_tests/pins_ondatra/tests/gnmi_set_get_test.go deleted file mode 100644 index ad35fd3f380..00000000000 --- a/sdn_tests/pins_ondatra/tests/gnmi_set_get_test.go +++ /dev/null @@ -1,1769 +0,0 @@ -package gnmi_set_get_test - -import ( - "context" - "fmt" - "strconv" - "testing" - "time" - - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" - "github.com/openconfig/ondatra" - "github.com/openconfig/ondatra/gnmi" - "github.com/openconfig/ondatra/gnmi/oc" - "github.com/openconfig/testt" - "github.com/openconfig/ygnmi/ygnmi" - "github.com/openconfig/ygot/ygot" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" - "golang.org/x/sync/errgroup" - "google.golang.org/grpc" - "google.golang.org/protobuf/encoding/prototext" - - gpb "github.com/openconfig/gnmi/proto/gnmi" -) - -const ( - testdataDir = "./" -) - -func TestMain(m *testing.M) { - ondatra.RunTests(m, pinsbind.New) -} - -/********************************************************** -* gNMI SET Update operations -**********************************************************/ -func TestGNMISetUpdateSingleLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("ffe66b7b-0e61-49bd-803d-0406a8c914d7").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - mtu := gnmi.Get(t, dut, mtuPath.Config()) - // Adding 22 bytes to the existing MTU value for the test. - newMtu := mtu + 22 - - defer func() { - // Replace the old value for the MTU field as a test cleanup. - gnmi.Replace(t, dut, mtuPath.Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) - }() - - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Update: []*gpb.Update{{ - Path: resolvedPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(newMtu), 10)), - }, - }, - }}, - } - - enabled := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()) - ctx := context.Background() - - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - setResp, err := gnmiClient.Set(ctx, setRequest) - if err != nil { - t.Fatalf("Unable to fetch set client (%v)", err) - } - t.Logf("SetResponse:\n%v", setResp) - - // Verify the value is being set properly using get. - if got := gnmi.Get(t, dut, mtuPath.Config()); got != newMtu { - t.Errorf("MTU matched failed! got:%v, want:%v", got, newMtu) - } - - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()); got != enabled { - t.Errorf("Enabled matched failed! got:%v, want:%v", got, enabled) - } -} - -func TestGNMISetUpdateNonExistingLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("408e875e-d00f-4071-acaf-204616800bee").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - descPath := gnmi.OC().Interface(intf).Description() - resolvedPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, errs) - } - ctx := context.Background() - var desc string = "description before reset" - var descExist bool = false - if res.Description != nil { - desc = *res.Description - descExist = true - var paths []*gpb.Path - paths = append(paths, resolvedPath) - - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: paths, - } - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - delResp, err := gnmiClient.Set(ctx, delRequest) - if err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - t.Logf("SetResponse:\n%v", delResp) - } - - wantDesc := "description after reset" - defer func() { - // Replace the id to original value if it exists before the test. - if descExist { - gnmi.Delete(t, dut, descPath.Config()) - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) - } - }() - - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Update: []*gpb.Update{{ - Path: resolvedPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(fmt.Sprintf("\"%s\"", wantDesc)), - }, - }, - }}, - } - - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(context.Background(), grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - setResp, err := gnmiClient.Set(ctx, setRequest) - if err != nil { - t.Fatalf("Unable to fetch set client (%v)", err) - } - t.Logf("SetResponse:\n%v", setResp) - // Verify the value is being set properly using get. - if got := gnmi.Get(t, dut, descPath.Config()); got != wantDesc { - t.Errorf("ID matched failed! got:%v, want: description after reset", got) - } - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU matched failed! mtuAfterSet:%v, want:%v", got, mtu) - } -} - -func TestGNMISetUpdateMultipleLeafs(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("fc046164-bd3f-44f5-8056-7ff8df404909").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Get fields from interface subtree. - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - descPath := gnmi.OC().Interface(intf).Description() - resolvedDescPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, err) - } - var desc string - desExist := false - - if res.Description != nil { - desc = *res.Description - desExist = true - } - - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedMtuPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - mtu := res.GetMtu() - // Adding 22 bytes to the existing MTU value for the test. - wantMtu := mtu + 22 - wantDesc := "This is a wanted description." - enabled := res.GetEnabled() - id := res.GetId() - fqin := testhelper.FullyQualifiedInterfaceName(t, dut, intf) - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - defer func() { - // Replace the old values for test cleanup. - gnmi.Replace(t, dut, mtuPath.Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) - if desExist { - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) - } else { - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedDescPath}, - } - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Set(ctx, delRequest); err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - } - }() - - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Update: []*gpb.Update{ - { - Path: resolvedMtuPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(wantMtu), 10)), - }, - }, - }, - { - Path: resolvedDescPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(fmt.Sprintf("\"%s\"", wantDesc)), - }, - }, - }, - }, - } - - // Fetch raw gNMI client and call Set API to send Set Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - setResp, err := gnmiClient.Set(ctx, setRequest) - if err != nil { - t.Fatalf("Error while calling Set Raw API: (%v)", err) - } - t.Logf("SetResponse:\n%v", setResp) - - // Verify the values are set properly using get. - // Get fields from interface subtree. - intfAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - if got := intfAfterSet.GetMtu(); got != wantMtu { - t.Errorf("MTU match failed! got: %v, want: %v", got, wantMtu) - } - if got := intfAfterSet.GetDescription(); got != wantDesc { - t.Errorf("Description match failed! got: %v, want: %v", got, wantDesc) - } - - // Verify that other leaf nodes are not changed. - if got := intfAfterSet.GetEnabled(); got != enabled { - t.Errorf("Enabled match failed! got %v, want %v", got, enabled) - } - if got := intfAfterSet.GetId(); got != id { - t.Errorf("ID match failed! got %v, want %v", got, id) - } - if got := testhelper.FullyQualifiedInterfaceName(t, dut, intf); got != fqin { - t.Errorf("FullyQualifiedInterfaceName match failed! got %v, want %v", got, fqin) - } -} - -func TestGNMISetUpdateInvalidDataLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("6dc4b8de-f5d8-406d-b9c1-9530eecefd3b").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - path := &gpb.Path{Elem: []*gpb.PathElem{{Name: "platform"}}} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Update: []*gpb.Update{{ - Path: path, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("{\"openconfig-interfaces:description:\":\"test\"}"), - }, - }, - }}, - } - - // Fetch raw gNMI client and call Set API to send Set Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Set(ctx, setRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } -} - -func TestGNMISetUpdateInvalidLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("6dcd41e7-a491-4d71-a52a-0ea4f446400a").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - path := &gpb.Path{Elem: []*gpb.PathElem{{Name: "interfaces"}, {Name: "interface", Key: map[string]string{"name": intf}}, {Name: "config"}, {Name: "xyz"}}} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Update: []*gpb.Update{{ - Path: path, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("123"), - }, - }, - }}, - } - - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - ctx := context.Background() - - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err = gnmiClient.Set(ctx, setRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } - - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU matched failed! mtuAfterSet:%v, want:%v", got, mtu) - } - -} - -/********************************************************** -* gNMI SET Replace operations -**********************************************************/ -// Sample test that performs gNMI SET replace on leaf. -func TestGNMISetReplaceSingleLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("162ec144-03b2-45ba-8bab-975ae4d09f7a").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - enabled := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()) - oldMtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - defer func() { - // Replace the old MTU value as a test cleanup. - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), oldMtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, oldMtu) - }() - - // Configure port MTU and verify that state path reflects configured MTU. - mtu := uint16(1500) - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) - - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU matched failed! got:%v, want:%v", got, mtu) - } - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()); got != enabled { - t.Errorf("enabled matched failed! idAfterSet:%v, want:%v", got, enabled) - } - -} - -func TestGNMISetReplaceMoreThanOneLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("d89eb043-3594-4265-bf91-5e71477f98b9").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - oldEnabled := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()) - oldMtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - intfType := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Type().Config()) - mtu := oldMtu + 22 - enabled := strconv.FormatBool(!oldEnabled) - - defer func() { - // Replace the old values as a test cleanup. - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Enabled().Config(), oldEnabled) - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), oldMtu) - // Wait for the port to be operationally up. - gnmi.Await(t, dut.GNMIOpts().WithYGNMIOpts(ygnmi.WithSubscriptionMode(gpb.SubscriptionMode_ON_CHANGE)), gnmi.OC().Interface(intf).OperStatus().State(), 30*time.Second, oc.Interface_OperStatus_UP) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Enabled().State(), 1*time.Second, oldEnabled) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, oldMtu) - }() - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - path := &gpb.Path{Elem: []*gpb.PathElem{{Name: "interfaces"}, {Name: "interface", Key: map[string]string{"name": intf}}, {Name: "openconfig-interfaces:config"}}} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{{ - Path: path, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("{\"enabled\":" + enabled + ",\"mtu\":" + strconv.FormatUint(uint64(mtu), 10) + "}"), - }, - }, - }}, - } - ctx := context.Background() - - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - setResp, err := gnmiClient.Set(ctx, setRequest) - if err != nil { - t.Fatalf("Unable to fetch set client (%v)", err) - } - t.Logf("SetResponse:\n%v", setResp) - - // Verify the value is being set properly using get. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU matched failed! got:%v, want:%v", got, mtu) - } - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()); got == oldEnabled { - t.Errorf("Enabled matched failed! got:%v, want:%v", got, !oldEnabled) - } - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Type().Config()); got != intfType { - t.Errorf("Type matched failed! got type :%v, want:%v", got, intfType) - } -} - -func TestGNMISetReplaceInvalidDataLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("31509436-ddc5-405b-9008-0b71d28fbb92").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - path := &gpb.Path{Elem: []*gpb.PathElem{{Name: "platform"}}} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{{ - Path: path, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("{\"openconfig-interfaces:description:\":\"test\"}"), - }, - }, - }}, - } - ctx := context.Background() - - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - setResp, err := gnmiClient.Set(ctx, setRequest) - if err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } - t.Logf("SetResponse:\n%v", setResp) -} - -func TestGNMISetReplaceInvalidLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("a9e707cf-4872-4066-ab38-8fe2c14af892").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - path := &gpb.Path{Elem: []*gpb.PathElem{{Name: "interfaces"}, {Name: "interface", Key: map[string]string{"name": intf}}, {Name: "config"}, {Name: "xyz"}}} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{{ - Path: path, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("123"), - }, - }, - }}, - } - - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - ctx := context.Background() - - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err = gnmiClient.Set(ctx, setRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } - - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU matched failed! got:%v, want:%v", got, mtu) - } - -} - -func TestGNMISetReplaceMultipleLeafsValid(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("c1f9dd81-d509-405f-bed2-e108e619b5f6").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Get fields from interface subtree. - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - descPath := gnmi.OC().Interface(intf).Description() - resolvedDescPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, err) - } - var desc, wantDesc string - descExist := false - if res.Description != nil { - desc = *res.Description - descExist = true - } - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedMtuPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - mtu := res.GetMtu() - // Adding 22 bytes to the existing MTU value for the test. - wantMtu := mtu + 22 - wantDesc = "wanted description" - enabled := res.GetEnabled() - fqin := testhelper.FullyQualifiedInterfaceName(t, dut, intf) - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - defer func() { - // Replace the old values for test cleanup. - gnmi.Replace(t, dut, mtuPath.Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) - if descExist { - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 20*time.Second, desc) - } else { - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedDescPath}, - } - // Fetch set client using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Set(ctx, delRequest); err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - } - }() - - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{ - { - Path: resolvedMtuPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(wantMtu), 10)), - }, - }, - }, - { - Path: resolvedDescPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(fmt.Sprintf("\"%s\"", wantDesc)), - }, - }, - }, - }, - } - - // Fetch raw gNMI client and call Set API to send Set Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - setResp, err := gnmiClient.Set(ctx, setRequest) - if err != nil { - t.Fatalf("Error while calling Set Raw API: (%v)", err) - } - t.Logf("SetResponse:\n%v", setResp) - - // Get fields from interface subtree. - intfAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - // Verify the values are set properly using get. - if got := intfAfterSet.GetMtu(); got != wantMtu { - t.Errorf("MTU match failed! got: %v, want: %v", got, wantMtu) - } - if got := intfAfterSet.GetDescription(); got != wantDesc { - t.Errorf("Description match failed! got %v, want %v", got, wantDesc) - } - - // Verify that other leaf nodes are not changed. - if got := intfAfterSet.GetEnabled(); got != enabled { - t.Errorf("Enabled match failed! got %v, want %v", got, enabled) - } - - if got := testhelper.FullyQualifiedInterfaceName(t, dut, intf); got != fqin { - t.Errorf("FullyQualifiedInterfaceName match failed! got %v, want %v", got, fqin) - } -} - -func TestGNMISetReplaceMultipleLeafsInvalid(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("c485b29b-7e1e-4b5a-bccd-797ced277008").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Get fields from interface subtree. - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - mtu := gnmi.Get(t, dut, mtuPath.Config()) - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{ - { - Path: resolvedPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(mtu+22), 10)), - }, - }, - }, - { - Path: &gpb.Path{ - Elem: []*gpb.PathElem{ - { - Name: "interfaces", - }, - { - Name: "interface", - Key: map[string]string{"name": intf}, - }, - { - Name: "config", - }, - { - Name: "openconfig-abc:xyz", - }, - }, - }, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("987"), - }, - }, - }, - }, - } - - // Fetch raw gNMI client and call Set API to send Set Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err = gnmiClient.Set(ctx, setRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } - - // Verify that the MTU value did not get changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU match failed! gotMtu %v, want %v", got, mtu) - } -} - -/********************************************************** -* gNMI SET Delete operations -**********************************************************/ -func TestGNMISetDeleteSingleLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("01850837-93b3-44a6-9d8f-84a0bd6c8725").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - desPath := gnmi.OC().Interface(intf).Description() - resolvedPath, _, errs := ygnmi.ResolvePath(desPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", desPath, err) - } - ctx := context.Background() - var des string = "" - var desExist bool = false - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - if res.Description != nil { - des = *res.Description - desExist = true - } else { - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Description().Config(), "Test description from ondatra test") - } - paths := []*gpb.Path{resolvedPath} - - defer func() { - // Replace the id to original value if it exists before the test. - if desExist { - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Description().Config(), des) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, des) - } - }() - - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: paths, - } - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - delResp, err := gnmiClient.Set(ctx, delRequest) - if err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - t.Logf("SetResponse:\n%v", delResp) - - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Errorf("MTU matched failed! got:%v, want:%v", got, mtu) - } -} - -func TestGNMISetDeleteMultipleLeafs(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("66addddd-df5d-4ff0-91ca-ff2a3582be69").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - ctx := context.Background() - - descPath := gnmi.OC().Interface(intf).Description() - resolvedDescPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, err) - } - var desc string - descExist := false - if res.Description != nil { - desc = *res.Description - descExist = true - } else { - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Description().Config(), "desc") - } - - defaultMtu := uint16(9100) - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedMtuPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - - if res.Mtu == nil { - t.Fatalf("MTU should not be nil!") - } - - mtu := uint16(2123) - nonDefaultMtu := false // Default value of MTU is 9100 - if *res.Mtu != defaultMtu { - mtu = *res.Mtu - nonDefaultMtu = true - } else { - gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 20*time.Second, mtu) - } - - defer func() { - // Replace the fields to original values if they existed before the test. - if descExist { - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) - } - if nonDefaultMtu { - gnmi.Replace(t, dut, mtuPath.Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) - } - }() - - paths := []*gpb.Path{resolvedDescPath, resolvedMtuPath} - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: paths, - } - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - delResp, err := gnmiClient.Set(ctx, delRequest) - if err != nil { - t.Fatalf("Error while calling Set Delete Raw API(%v)", err) - } - t.Logf("SetResponse:\n%v", delResp) - - // Verify desc leaf is deleted. - testt.ExpectFatal(t, func(t testing.TB) { - gnmi.Get(t, dut, descPath.Config()) - }) - // Verify MTU leaf is deleted (set to default value) - if gotMtu := gnmi.Get(t, dut, mtuPath.Config()); gotMtu != defaultMtu { - t.Fatalf("Default MTU matched failed! got:%v, want:%v", gotMtu, defaultMtu) - } -} - -func TestGNMISetDeleteInvalidLeaf(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("bc463964-5e63-417f-bd32-08f17faf84a3").Teardown(t) - dut := ondatra.DUT(t, "DUT") - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - path := &gpb.Path{Elem: []*gpb.PathElem{{Name: "interfaces"}, {Name: "interface", Key: map[string]string{"name": intf}}, {Name: "config"}, {Name: "xyz"}}} - ctx := context.Background() - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - - paths := []*gpb.Path{path} - - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: paths, - } - // Fetch raw gNMI client and call Set API to send Set Request. - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - delResp, err := gnmiClient.Set(ctx, delRequest) - if err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } - t.Logf("SetResponse:\n%v", delResp) - - // Verify that other leaf nodes are not changed. - if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { - t.Fatalf("MTU matched failed! got:%v, want:%v", got, mtu) - } -} - -/********************************************************** -* gNMI SET misc operations -**********************************************************/ - -/* Test to verify the order of SET operations in the same request. - * Verify that specified leaf has been deleted, and other specified leafs - * have been replaced, followed with updating of leaf values. - */ -func TestGNMISetDeleteReplaceUpdateOrderValid(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("fd8b8e2c-69dc-406c-99fd-6bdcf670e17d").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Get fields from interface subtree. - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedMtuPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - - mtuExist := false - mtu := uint16(9191) - if res.Mtu != nil { - mtu = *res.Mtu - mtuExist = true - } else { - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) - } - - descPath := gnmi.OC().Interface(intf).Description() - resolvedDescPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, err) - } - desc := "desc" - descExist := false - if res.Description != nil { - desc = *res.Description - descExist = true - } else { - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Description().Config(), desc) - } - - fqinPath := fmt.Sprintf("/interfaces/interface[name=%s]/config/fully-qualified-interface-name", intf) - resolvedFqinPath, errs := testhelper.StringToYgnmiPath(fqinPath) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", fqinPath, err) - } - fqin := "FQIN" - fqinExist := false - if name := testhelper.FullyQualifiedInterfaceName(t, dut, intf); name != "" { - fqin = name - fqinExist = true - } else { - testhelper.ReplaceFullyQualifiedInterfaceName(t, dut, intf, fqin) - } - wantFqin := "testFQIN" - wantMtu := mtu + 22 - - enabled := res.GetEnabled() - loopBack := res.GetLoopbackMode() - name := res.GetName() - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - defer func() { - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - - // Replace the old values for test cleanup. - if mtuExist { - gnmi.Replace(t, dut, mtuPath.Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) - } else { - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedMtuPath}, - } - // Fetch set client using the raw gNMI client. - if _, err := gnmiClient.Set(ctx, delRequest); err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - } - if descExist { - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) - } else { - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedDescPath}, - } - // Fetch set client using the raw gNMI client. - if _, err := gnmiClient.Set(ctx, delRequest); err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - } - if fqinExist { - testhelper.ReplaceFullyQualifiedInterfaceName(t, dut, intf, fqin) - } else { - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedFqinPath}, - } - // Fetch set client using the raw gNMI client. - if _, err := gnmiClient.Set(ctx, delRequest); err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - } - }() - - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedMtuPath, resolvedDescPath}, - Replace: []*gpb.Update{ - { - Path: resolvedMtuPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(wantMtu), 10)), - }, - }, - }, - { - Path: resolvedFqinPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte("\"tempFQIN\""), - }, - }, - }, - }, - Update: []*gpb.Update{{ - Path: resolvedFqinPath, - Val: &gpb.TypedValue{Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("\"" + wantFqin + "\"")}}, - }}, - } - - // Fetch raw gNMI client and call Set API to send Set Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Set(ctx, setRequest); err != nil { - t.Fatalf("Error while calling Set Raw API: (%v)", err) - } - - // Verify that the Description leaf is deleted. - testt.ExpectFatal(t, func(t testing.TB) { - gnmi.Get(t, dut, descPath.Config()) - }) - // Get fields from interface subtree. - intfAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).State()) - if got := testhelper.FullyQualifiedInterfaceName(t, dut, intf); got != wantFqin { - t.Errorf("FullyQualifiedInterfaceName match failed! got %v, want %v", got, wantFqin) - } - if got := intfAfterSet.GetMtu(); got != wantMtu { - t.Errorf("mtu match failed! got: %v, want: %v", got, wantMtu) - } - - // Verify that other leaf nodes are not changed. - if got := intfAfterSet.GetEnabled(); got != enabled { - t.Errorf("enabled match failed! got %v, want %v", got, enabled) - } - if got := intfAfterSet.GetLoopbackMode(); got != loopBack { - t.Errorf("loopback-mode match failed! got: %v, want: %v", got, loopBack) - } - if got := intfAfterSet.GetName(); got != name { - t.Errorf("name match failed! got: %v, want: %v", got, name) - } -} - -/* Test to verify the order of SET operations in the same request. - * Verify that the specified path has been deleted and other - * specified path attributes have been updated. */ -func TestGNMISetDeleteUpdateOrderValid(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("b7f99b79-f4fb-4c56-95be-602ad0361ec0").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Get fields from interface subtree. - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - descPath := gnmi.OC().Interface(intf).Description() - resolvedDescPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, err) - } - desc := "desc" - descExist := false - if res.Description != nil { - desc = *res.Description - descExist = true - } else { - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Description().Config(), desc) - } - wantDesc := "testDescription" - - enabled := res.GetEnabled() - mtu := res.GetMtu() - - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - defer func() { - // Replace the old values for test cleanup. - if descExist { - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) - } else { - delRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedDescPath}, - } - // Fetch set client using the raw gNMI client. - if _, err := gnmiClient.Set(ctx, delRequest); err != nil { - t.Fatalf("Unable to fetch set delete client (%v)", err) - } - } - }() - - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedDescPath}, - Update: []*gpb.Update{{ - Path: resolvedDescPath, - Val: &gpb.TypedValue{Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("\"" + wantDesc + "\"")}}, - }}, - } - - // Fetch raw gNMI client and call Set API to send Set Request. - if _, err := gnmiClient.Set(ctx, setRequest); err != nil { - t.Fatalf("Error while calling Set Raw API: (%v)", err) - } - - // Get fields from interface subtree. - intfAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - if got := intfAfterSet.GetDescription(); got != wantDesc { - t.Errorf("Description match failed! got %v, want %v", got, wantDesc) - } - - // Verify that other leaf nodes are not changed. - if got := intfAfterSet.GetEnabled(); got != enabled { - t.Errorf("Enabled match failed! got %v, want %v", got, enabled) - } - if got := intfAfterSet.GetMtu(); got != mtu { - t.Errorf("MTU match failed! got: %v, want: %v", got, mtu) - } -} - -/* Test to verify the order of SET operations in the same request. - * Verify that with delete followed by update in same SET Request, - * an error message related to the invalid update is returned. */ -func TestGNMISetDeleteUpdateOrderInvalid(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("b43ed0ae-22c2-4c25-b50a-96c7243255d9").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Get fields from interface subtree. - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - descPath := gnmi.OC().Interface(intf).Description() - resolvedDescPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", descPath, err) - } - desc := "desc" - descExist := false - if res.Description != nil { - desc = *res.Description - descExist = true - } - - enabled := res.GetEnabled() - mtu := res.GetMtu() - - defer func() { - // Replace the old values for test cleanup. - if descExist { - gnmi.Replace(t, dut, descPath.Config(), desc) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) - } - }() - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - setRequest := &gpb.SetRequest{ - Prefix: prefix, - Delete: []*gpb.Path{resolvedDescPath}, - Update: []*gpb.Update{{ - Path: resolvedDescPath, - Val: &gpb.TypedValue{Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("123")}}, - }}, - } - - // Verify that error message is returned for invalid update request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Set(ctx, setRequest); err == nil { - t.Fatalf("Error expected while calling Set Raw API") - } - - // Get fields from interface subtree. - intfAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - - // Verify that other leaf nodes are not changed. - if got := intfAfterSet.GetEnabled(); got != enabled { - t.Errorf("Enabled match failed! got %v, want %v", got, enabled) - } - if got := intfAfterSet.GetMtu(); got != mtu { - t.Errorf("MTU match failed! got: %v, want: %v", got, mtu) - } -} - -/* Test that performs gNMI SET for an empty path. Verify that there are no errors - * returned by the server and a valid response has been sent to the client, - * also verifies that none of the paths are changed. */ -func TestGNMISetEmptyPath(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("0b2e92b0-1295-4aa7-a27d-99073c09e2b7").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - // Get fields from interface subtree. - intfBeforeSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - - // Create setRequest message with an empty path. - setRequest := &gpb.SetRequest{ - Prefix: prefix, - } - - // Fetch set client using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Set(ctx, setRequest); err != nil { - t.Fatalf("Error while calling Set API with empty update: (%v)", err) - } - - // Verify that the leaf values did not change. - intfAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - cmpOptions := cmp.Options{cmpopts.IgnoreFields(oc.Interface_Ethernet{}, "Counters"), - cmpopts.IgnoreFields(oc.Interface{}, "Counters")} - if diff := cmp.Diff(intfBeforeSet, intfAfterSet, cmpOptions); diff != "" { - t.Fatalf("diff (-want +got): %v", diff) - } -} - -/* Test that performs gNMI SET with two gNMI clients. */ -func TestGNMIMultipleClientSet(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("753e4dfc-5dda-4bfe-8b1c-e377e6c458ad").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - mtuPath := gnmi.OC().Interface(intf).Mtu() - resolvedMtuPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) - if errs != nil { - t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) - } - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) - defer func() { - // Replace the old value for the MTU field as a test cleanup. - gnmi.Replace(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) - gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) - }() - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - setRequest1 := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{ - { - Path: resolvedMtuPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(9100), 10)), - }, - }, - }, - }, - } - setRequest2 := &gpb.SetRequest{ - Prefix: prefix, - Replace: []*gpb.Update{ - { - Path: resolvedMtuPath, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{ - JsonIetfVal: []byte(strconv.FormatUint(uint64(9122), 10)), - }, - }, - }, - }, - } - - ctx := context.Background() - newGNMIClient := func() gpb.GNMIClient { - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - return gnmiClient - } - clients := map[string]gpb.GNMIClient{ - "c1": newGNMIClient(), - "c2": newGNMIClient(), - } - - eg, ctx := errgroup.WithContext(context.Background()) - eg.Go(func() error { - _, err := clients["c1"].Set(ctx, setRequest1) - return err - }) - eg.Go(func() error { - _, err := clients["c2"].Set(ctx, setRequest2) - return err - }) - if err := eg.Wait(); err != nil { - t.Fatalf("Error while calling Multiple Set API %v", err) - } -} - -/********************************************************** -* gNMI GET operations -**********************************************************/ -// Sample test that performs gNMI GET using subscribe once on state paths. -func TestGNMIGetPaths(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("75e16f69-06ce-4e9a-bdbb-af50339ca8c4").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // The Get() APIs in this test would panic if the switch does not return - // state value for the Openconfig path, resulting in a test failure. - // The test validates that the switch returns state values for the - // specified interface Openconfig path. - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Fetch port MTU. - mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().State()) - t.Logf("MTU is %v", mtu) - - // Fetch /interfaces/interface[name=]/state subtree. - p := gnmi.Get(t, dut, gnmi.OC().Interface(intf).State()) - // All paths might not be present in the response. Therefore, validate members - // of GoStruct before accessing them. - if p.AdminStatus != oc.Interface_AdminStatus_UNSET { - t.Logf("admin-status: %v", p.AdminStatus) - } - if p.Enabled != nil { - t.Logf("enabled: %v", *p.Enabled) - } - if p.Mtu != nil { - t.Logf("mtu: %v", *p.Mtu) - } - if p.Id != nil { - t.Logf("ID: %v", *p.Id) - } - if p.HoldTime != nil { - h := *p.HoldTime - if h.Down != nil { - t.Logf("hold-time down: %v", *h.Down) - } - if h.Up != nil { - t.Logf("hold-time up: %v", *h.Up) - } - } - - // Fetch /interfaces/interface[name=]/config subtree. - res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) - // All paths might not be present in the response. Therefore, validate members - // of GoStruct before accessing them. - if res.AdminStatus != oc.Interface_AdminStatus_UNSET { - t.Logf("admin-status: %v", res.AdminStatus) - } - if res.Cpu != nil { - t.Logf("IsCpu: %v", *res.Cpu) - } - if res.Enabled != nil { - t.Logf("enabled: %v", *res.Enabled) - } - if res.Description != nil { - t.Logf("description: %v", *res.Description) - } -} - -// Test that performs gNMI GET at module level. -func TestGNMIGetModulePaths(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("66ae2d27-d50e-4012-8be7-5536eb43fae8").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - // Create getRequest message to fetch all components. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: []*gpb.Path{{ - Elem: []*gpb.PathElem{{ - Name: "components", - }, { - Name: "component", - }}, - }}, - Encoding: gpb.Encoding_PROTO, - } - - // Fetch raw gNMI client and call Get API to send Get Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("Unable to fetch get client (%v)", err) - } - if getResp == nil { - t.Fatal("Get response is nil") - } - - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - updates := notifs[0].GetUpdate() - if len(updates) == 0 { - t.Fatalf("got %d updates in the notification, want >=1", len(updates)) - } - for i := range updates { - update := updates[i].GetPath() - // Go through all the paths to make sure they are working fine. - if _, err := ygot.PathToString(update); err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, prototext.Format(update)) - } - } -} - -// Test that performs gNMI GET at root level. -func TestGNMIGetRootPath(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("dcc2805e-8dda-4899-99ad-3f5a42f1985b").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - // Create getRequest message to fetch root. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Encoding: gpb.Encoding_PROTO, - } - - // Fetch raw gNMI client and call Get API to send Get Request. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("Unable to fetch get client (%v)", err) - } - if getResp == nil { - t.Fatal("Get response is nil") - } - - notifs := getResp.GetNotification() - if len(notifs) < 6 { - t.Fatalf("got %d notifications, want >= 6", len(notifs)) - } - for updates := range notifs { - updates := notifs[updates].GetUpdate() - if len(updates) < 1 { - continue - } - for i := range updates { - update := updates[i].GetPath() - // Go through all the paths to make sure they are working fine. - if _, err := ygot.PathToString(update); err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, prototext.Format(update)) - } - } - } -} - -func TestGnmiProtoEncodingGet(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("0c25a72c-9b1a-4f80-90eb-177924f02802").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Create getRequest message with ASCII encoding. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: []*gpb.Path{{ - Elem: []*gpb.PathElem{{ - Name: "interfaces", - }, { - Name: "interface", - Key: map[string]string{"name": intf}, - }}, - }}, - Type: gpb.GetRequest_ALL, - Encoding: gpb.Encoding_PROTO, - } - t.Logf("GetRequest:\n%v", getRequest) - - // Fetch get client using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - if err != nil { - t.Fatalf("Unable to fetch get client (%v)", err) - } - if getResp == nil { - t.Fatalf("Unable to fetch get client, get response is nil") - } - - notifs := getResp.GetNotification() - if len(notifs) != 1 { - t.Fatalf("got %d notifications, want 1", len(notifs)) - } - updates := notifs[0].GetUpdate() - if len(updates) < 1 { - t.Fatalf("got %d updates in the notification, want >1", len(updates)) - } - for i := range updates { - update := updates[i].GetPath() - // Go through all the paths to make sure they are working fine. - pathStr, err := ygot.PathToString(update) - t.Logf("pathStr: %v", pathStr) - if err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, update) - } - } - -} - -func TestGnmiInvalidKeyGet(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("ca3d9356-ca81-482b-aa36-8be5ac9180ba").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Create getRequest message with ASCII encoding. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: []*gpb.Path{{ - Elem: []*gpb.PathElem{{ - Name: "interfaces", - }, { - Name: "interface", - Key: map[string]string{"name": "EthernetY"}, - }}, - }}, - Type: gpb.GetRequest_ALL, - Encoding: gpb.Encoding_PROTO, - } - t.Logf("GetRequest:\n%v", getRequest) - - // Fetch get client using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Get(ctx, getRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } -} - -func TestGnmiInvalidPathGet(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("8f834ec5-da76-4884-9d84-58fc687c4f8c").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Create getRequest message with ASCII encoding. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: []*gpb.Path{{ - Elem: []*gpb.PathElem{{ - Name: "xyz", - }}, - }}, - Type: gpb.GetRequest_ALL, - Encoding: gpb.Encoding_PROTO, - } - t.Logf("GetRequest:\n%v", getRequest) - - // Fetch get client using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err := gnmiClient.Get(ctx, getRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } -} - -func TestGnmiAsciiEncodingGet(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("104a2dbf-fb8d-40af-a592-99e2bfd868d2").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - // Select a random front panel interface EthernetX. - intf, err := testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - - // Create getRequest message with ASCII encoding. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: []*gpb.Path{{ - Elem: []*gpb.PathElem{{ - Name: "interfaces", - }, { - Name: "interface", - Key: map[string]string{"name": intf}, - }}, - }}, - Type: gpb.GetRequest_ALL, - Encoding: gpb.Encoding_ASCII, - } - t.Logf("GetRequest:\n%v", getRequest) - - // Fetch get client using the raw gNMI client. - ctx := context.Background() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - if _, err = gnmiClient.Get(ctx, getRequest); err == nil { - t.Fatalf("Set request is expected to fail but it didn't") - } -} - -// Test that performs gNMI SET Replace at root level. -// This test will fail till the binding issue for root path is fixed (b/200096572) -func TestGNMISetReplaceRootPath(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("09df0cd9-3e23-4f8c-8a0b-9105de3a83af").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - if err := testhelper.ConfigPush(t, dut, nil); err != nil { - t.Fatalf("Failed to push config: %v", err) - } - - // Select a random front panel interface EthernetX. - var intf string - - info, err := testhelper.FetchPortsOperStatus(t, dut) - if err != nil { - t.Fatalf("Failed to fetch port operation status: %v", err) - } - - if len(info.Up) == 0 { - t.Fatalf("Failed to fetch port with operation status UP: %v", err) - } - - for _, port := range info.Up { - if isParent, err := testhelper.IsParentPort(t, dut, port); err == nil && isParent { - intf = port - break - } - } - - // Get fields from interface subtree. - if intf != "" { - intfIDAfterSet := gnmi.Get(t, dut, gnmi.OC().Interface(intf).State()).GetId() - t.Logf("ID After Set is %v for interface %v", intfIDAfterSet, intf) - } else { - t.Fatalf("Failed to fetch valid parent interface.") - } -} diff --git a/sdn_tests/pins_ondatra/tests/gnmi_subscribe_modes_test.go b/sdn_tests/pins_ondatra/tests/gnmi_subscribe_modes_test.go deleted file mode 100644 index cc267429b31..00000000000 --- a/sdn_tests/pins_ondatra/tests/gnmi_subscribe_modes_test.go +++ /dev/null @@ -1,1037 +0,0 @@ -package gnmi_subscribe_modes_test - -import ( - "context" - "errors" - "fmt" - "strings" - "testing" - "time" - - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" - gpb "github.com/openconfig/gnmi/proto/gnmi" - "github.com/openconfig/ondatra" - "github.com/openconfig/ondatra/gnmi" - "github.com/openconfig/ygot/ygot" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" - "google.golang.org/grpc" - "google.golang.org/protobuf/encoding/prototext" -) - -const ( - deleteTreePath = "/system/config/" - deletePath = "/system/config/hostname" - timePath = "/system/state/current-datetime" - nodePath = "/system/state/hostname" - subTreePath = "/system/state" - containerPath = "/components" - rootPath = "/" - onChangePath = "/interfaces/interface[name=%s]/state/mtu" - errorResponse = "expectedError" - syncResponse = "expectedSync" - - shortTime = 5 * time.Second - mediumTime = 10 * time.Second - longTime = 30 * time.Second -) - -func TestMain(m *testing.M) { - ondatra.RunTests(m, pinsbind.New) -} - -type subscribeTest struct { - uuid string - reqPath string - mode gpb.SubscriptionList_Mode - updatesOnly bool - subMode gpb.SubscriptionMode - sampleInterval uint64 // nanoseconds - suppressRedundant bool - heartbeatInterval uint64 // nanoseconds - expectError bool - timeout time.Duration -} - -type operStatus struct { - match bool - delete bool - value string -} - -func ignorePaths(path string) bool { - // Paths that change during root and container level tests - subPaths := []string{ - // TODO Check back if lb/bond are needed after this bug is corrected. - "/ethernet/state/counters/", - "//interfaces/interface[name=Loopback0]", - "//interfaces/interface[name=bond0]", - "//qos/interfaces/interface", - "//snmp/engine/version/", - "//system/mount-points/mount-point", - "//system/processes/process", - "//system/cpus/cpu", - "//system/crm/threshold", - "//system/ntp/", - "//system/memory/", - "//system/ssh-server/ssh-server-vrfs", - "/subinterface[index=0]/ipv4/unnumbered/", - "/subinterface[index=0]/ipv4/sag-ipv4/", - "/subinterface[index=0]/ipv6/sag-ipv6/", - "/gnmi-pathz-policy-counters/paths/path", - "/system/state/boot-time", - "/system/state/uptime", - } - - for _, sub := range subPaths { - if strings.Contains(path, sub) { - return true - } - } - return false -} - -var skipTest = map[string]bool{ - // TODO Ondatra fails to delete subtree - "TestGNMISubscribeModes/subscribeDeleteNodeLevel": true, - "TestGNMISubscribeModes/subscribeDeleteSubtreeLevel": true, -} - -func TestGNMISubscribeModes(t *testing.T) { - testCases := []struct { - name string - function func(*testing.T) - }{ - { - "subscribeOnChange", - subscribeTest{ - uuid: "f3c55aed-6522-458d-a3cb-e9eca005bcf1", - reqPath: onChangePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_ON_CHANGE, - timeout: shortTime, - }.subModeOnChangeTest, - }, - { - "subscribeOnChangeHeartbeatInterval", - subscribeTest{ - uuid: "5defcb39-7ffa-4404-8eab-59499b50796e", - reqPath: onChangePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_ON_CHANGE, - heartbeatInterval: 2000000000, - timeout: shortTime, - }.subModeOnChangeTest, - }, - { - "subscribeOnChangeDefinedNode", - subscribeTest{ - uuid: "1092dc1a-42c8-4125-b2a0-64596dc340ab", - reqPath: onChangePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_TARGET_DEFINED, - timeout: shortTime, - }.subModeOnChangeTest, - }, - { // TODO UMF returns timeout instead of returning proper error code. - "subscribeOnChangeUnsupportedPath", - subscribeTest{ - uuid: "c003d854-6b41-4b0d-acdf-4cc77bd02252", - reqPath: subTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_ON_CHANGE, - sampleInterval: 2000000000, - expectError: true, - timeout: shortTime, - }.subModeOnChangeTest, - }, - { // TODO Updates_Only is not filtering properly. - "subscribeOnChangeUpdatesOnly", - subscribeTest{ - uuid: "a242c00e-74e7-4749-83cf-9ee724c64901", - reqPath: onChangePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_ON_CHANGE, - updatesOnly: true, - timeout: shortTime, - }.subModeOnChangeTest, - }, - { - "subscribeOnceRootLevel", - subscribeTest{ - uuid: "3507ab19-ffb9-4e30-8958-0bb2dc80b424", - reqPath: rootPath, - mode: gpb.SubscriptionList_ONCE, - timeout: longTime, - }.subModeOnceTest, - }, - { - "subscribeOnceContainerLevel", - subscribeTest{ - uuid: "42b4af42-2394-4945-b094-2a1130d2002d", - reqPath: containerPath, - mode: gpb.SubscriptionList_ONCE, - timeout: mediumTime, - }.subModeOnceTest, - }, - { - "subscribeOnceSubtreeLevel", - subscribeTest{ - uuid: "349ef06f-eeaa-45f0-b463-86505dc57131", - reqPath: subTreePath, - mode: gpb.SubscriptionList_ONCE, - timeout: shortTime, - }.subModeOnceTest, - }, - { - "subscribeOnceNodeLevel", - subscribeTest{ - uuid: "bc3c26cc-259c-4b98-8b96-8f98e084724c", - reqPath: nodePath, - mode: gpb.SubscriptionList_ONCE, - timeout: shortTime, - }.subModeOnceTest, - }, - { - "subscribePollRootLevel", - subscribeTest{ - uuid: "c658fc60-bd58-4fcc-970c-b994a0cf0e94", - reqPath: rootPath, - mode: gpb.SubscriptionList_POLL, - timeout: longTime, - }.subModePollTest, - }, - { - "subscribePollContainerLevel", - subscribeTest{ - uuid: "5f424b35-4d7f-44db-a4c2-0bd6f2370301", - reqPath: containerPath, - mode: gpb.SubscriptionList_POLL, - timeout: mediumTime, - }.subModePollTest, - }, - // TODO Updates_Only is not filtering properly. - { - "subscribeOnceUpdatesOnly", - subscribeTest{ - uuid: "88b334bd-e835-4cb9-975f-e7b01bd6e1bf", - reqPath: subTreePath, - mode: gpb.SubscriptionList_ONCE, - updatesOnly: true, - timeout: shortTime, - }.subModeUpdatesTest, - }, - { - "subscribePollUpdatesOnly", - subscribeTest{ - uuid: "177c8d8d-a51b-448d-96b1-ed3e1dde0629", - reqPath: subTreePath, - mode: gpb.SubscriptionList_POLL, - updatesOnly: true, - timeout: shortTime, - }.subModeUpdatesTest, - }, - { - "subscribeSampleUpdatesOnly", - subscribeTest{ - uuid: "ebb593da-4f24-4394-80b9-4463a96843bb", - reqPath: subTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - timeout: shortTime, - updatesOnly: true, - }.subModeUpdatesTest, - }, - { - "subscribePollSubtreeLevel", - subscribeTest{ - uuid: "d298894b-3110-4bb3-b13f-3e572d57791e", - reqPath: subTreePath, - mode: gpb.SubscriptionList_POLL, - timeout: shortTime, - }.subModePollTest, - }, - { - "subscribePollNodeLevel", - subscribeTest{ - uuid: "cb622b6e-5142-4c59-a6b9-603b45b8bcab", - reqPath: nodePath, - mode: gpb.SubscriptionList_POLL, - timeout: shortTime, - }.subModePollTest, - }, - { - "subscribeSampleSubtreeLevel", - subscribeTest{ - uuid: "899345da-b715-4caa-a02f-2d03d18c233e", - reqPath: subTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - timeout: shortTime, - }.subModeSampleTest, - }, - { // TODO UMF returns timeout instead of returning proper error code. - "subscribeSampleInvalidInterval", - subscribeTest{ - uuid: "8cf7ea62-5bda-4f71-bd86-fdce88ba2753", - reqPath: nodePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 1, - expectError: true, - timeout: shortTime, - }.subModeSampleTest, - }, - { - "subscribeSampleDefinedNode", - subscribeTest{ - uuid: "45305a9a-c602-421f-8f6a-21d520fea9f8", - reqPath: nodePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_TARGET_DEFINED, - sampleInterval: 2000000000, - timeout: shortTime, - }.subModeSampleTest, - }, - { - "subscribeMixedDefinedNode", - subscribeTest{ - uuid: "ae4c435a-9fa7-494a-94f7-75cd662c3d95", - reqPath: subTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_TARGET_DEFINED, - sampleInterval: 2000000000, - timeout: shortTime, - }.subModeSampleTest, - }, - { - "subscribeSampleRootLevel", - subscribeTest{ - uuid: "a495d0b5-482e-411b-9bac-2baa79776293", - reqPath: rootPath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 5000000000, - timeout: longTime, - }.subModeRootTest, - }, - { - "subscribeSampleContainerLevel", - subscribeTest{ - uuid: "aeff11b5-aee2-4689-85e0-a124b5d73506", - reqPath: containerPath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 5000000000, - timeout: longTime, - }.subModeSampleTest, - }, - { - "subscribeSampleNodeLevel", - subscribeTest{ - uuid: "880b3893-da72-44c5-998c-013f0303969f", - reqPath: nodePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - timeout: shortTime, - }.subModeSampleTest, - }, - { - "subscribeDeleteNodeLevel", - subscribeTest{ - uuid: "529f58c0-8b9b-4820-aeb6-94feb1a68198", - reqPath: deletePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - timeout: shortTime, - }.subModeDeleteTest, - }, - { - "subscribeDeleteSubtreeLevel", - subscribeTest{ - uuid: "e9d932d5-5fa5-4e00-8c60-cd8823fc34b2", - reqPath: deleteTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - timeout: shortTime, - }.subModeDeleteTest, - }, - { - "subscribeSampleSuppressRedundant", - subscribeTest{ - uuid: "5c6e0713-cb8d-43a5-bd8e-8a1ac395eab6", - reqPath: subTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - suppressRedundant: true, - timeout: shortTime, - }.subModeSuppressTest, - }, - { - "subscribeSampleHeartbeat", - subscribeTest{ - uuid: "8b58ff99-39fc-41e8-9589-b78da0aeca12", - reqPath: subTreePath, - mode: gpb.SubscriptionList_STREAM, - subMode: gpb.SubscriptionMode_SAMPLE, - sampleInterval: 2000000000, - suppressRedundant: true, - heartbeatInterval: 3000000000, - timeout: shortTime, - }.subModeSuppressTest, - }, - } - - dut := ondatra.DUT(t, "DUT") - - // Check if the switch is responsive with Get API, which will panic if the switch does not return - // state value for specified interface Openconfig path resulting in a test failure. - intf, err := testhelper.RandomInterface(t, dut, &testhelper.RandomInterfaceParams{OperDownOk: true}) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().State()) - - for _, testCase := range testCases { - t.Run(testCase.name, testCase.function) - } -} - -// Test for gNMI Subscribe Stream mode for OnChange subscriptions. -func (c subscribeTest) subModeOnChangeTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - var intf string - if c.expectError == false { - var err error - intf, err = testhelper.RandomInterface(t, dut, nil) - if err != nil { - t.Fatalf("Failed to fetch random interface: %v", err) - } - c.reqPath = fmt.Sprintf(c.reqPath, intf) - } - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := make(map[string]operStatus) - if !c.updatesOnly { - expectedPaths = c.buildExpectedPaths(t, dut) - } - expectedPaths[syncResponse] = operStatus{} - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if c.expectError { - foundErr, ok := foundPaths[errorResponse] - if !ok { - t.Fatal("Expected error but got none") - } - if !strings.Contains(foundErr.value, "InvalidArgument") { - t.Errorf("Error is not an InvalidArgument: %s", foundErr.value) - } - return - } - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - delete(expectedPaths, syncResponse) - - got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().State()) - defer gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), got) - mtu := uint16(1500) - if got == 1500 { - mtu = 9000 - } - if c.heartbeatInterval == 0 { - gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) - } - - foundPaths, delay := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - if c.heartbeatInterval != 0 { - if delay > time.Duration(c.heartbeatInterval+(c.heartbeatInterval/2)) { - t.Errorf("Failed sampleInterval with time of %v", delay) - } - gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - } -} - -// Test for gNMI Subscriptions with UpdatesOnly flag. -func (c subscribeTest) subModeUpdatesTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := make(map[string]operStatus) - - if c.mode != gpb.SubscriptionList_POLL { - expectedPaths = c.buildExpectedPaths(t, dut) // TODO remove once fixed - } - expectedPaths[syncResponse] = operStatus{} - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - if c.mode == gpb.SubscriptionList_ONCE { - return - } - - if c.mode == gpb.SubscriptionList_POLL { - subscribeClient.Send(&gpb.SubscribeRequest{Request: &gpb.SubscribeRequest_Poll{}}) - } - - expectedPaths = c.buildExpectedPaths(t, dut) - - foundPaths, delay := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - if c.mode == gpb.SubscriptionList_STREAM { - if delay > time.Duration(c.sampleInterval+(c.sampleInterval/2)) { - t.Errorf("Failed sampleInterval with time of %v", delay) - } - } -} - -// Test for gNMI Subscribe Stream mode for Sample subscriptions with suppression. -func (c subscribeTest) subModeSuppressTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := c.buildExpectedPaths(t, dut) - expectedPaths[syncResponse] = operStatus{} - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%v", expectedPaths, diff) - } - - updatedPaths := map[string]operStatus{timePath: operStatus{}} - - foundPaths, delay := collectResponse(t, subscribeClient, updatedPaths) - if diff := cmp.Diff(updatedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(updatedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", updatedPaths, diff) - } - if delay > time.Duration(c.sampleInterval+(c.sampleInterval/2)) { - t.Errorf("Failed sampleInterval with time of %v", delay) - } - - if c.heartbeatInterval != 0 { - delete(expectedPaths, syncResponse) - foundPaths, delay := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - if delay > time.Duration(c.heartbeatInterval+(c.heartbeatInterval/2)) { - t.Errorf("Failed heartbeatInterval with time of %v", delay) - } - } -} - -// Test for gNMI Subscribe Stream mode for Sample subscriptions. -func (c subscribeTest) subModeSampleTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := c.buildExpectedPaths(t, dut) - expectedPaths[syncResponse] = operStatus{} - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if c.expectError { - foundErr, ok := foundPaths[errorResponse] - if !ok { - t.Fatal("Expected error but got none") - } - if !strings.Contains(foundErr.value, "InvalidArgument") { - t.Errorf("Error is not an InvalidArgument: %s", foundErr.value) - } - return - } - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths): \nResponse mismatch (-missing +extra):\n%s", diff) - } - - delete(expectedPaths, syncResponse) - foundPaths, delay := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths): \nResponse mismatch (-missing +extra):\n%s", diff) - } - // Allow for plus roughly 50% of the sample interval - // because root level requests have much longer delays - if delay > time.Duration(c.sampleInterval+(c.sampleInterval/2)) { - t.Errorf("Failed sampleInterval with time of %v", delay) - } -} - -// Test for gNMI Subscribe Once mode for different levels. -func (c subscribeTest) subModeOnceTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := c.buildExpectedPaths(t, dut) - expectedPaths[syncResponse] = operStatus{} - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } -} - -// Test for gNMI Subscribe Stream mode node deletions. -func (c subscribeTest) subModeDeleteTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := c.buildExpectedPaths(t, dut) - expectedPaths[syncResponse] = operStatus{} - - gotName := gnmi.Get(t, dut, gnmi.OC().System().Hostname().State()) - defer gnmi.Update(t, dut, gnmi.OC().System().Hostname().Config(), gotName) - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - - if c.reqPath == deletePath { - gnmi.Delete(t, dut, gnmi.OC().System().Hostname().Config()) - } - if c.reqPath == deleteTreePath { - gnmi.Delete(t, dut, gnmi.OC().System().Config()) - } - delete(expectedPaths, syncResponse) - for _, v := range expectedPaths { - v.delete = true - } - - foundPaths, delay := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - if delay > time.Duration(c.sampleInterval+(c.sampleInterval/2)) { - t.Errorf("Failed sampleInterval with time of %v", delay) - } -} - -// Test for gNMI Subscribe Poll mode for different levels. -func (c subscribeTest) subModePollTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - subscribeRequest := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(subscribeRequest); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - expectedPaths := c.buildExpectedPaths(t, dut) - expectedPaths[syncResponse] = operStatus{} - - foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } - - delete(expectedPaths, syncResponse) - subscribeClient.Send(&gpb.SubscribeRequest{Request: &gpb.SubscribeRequest_Poll{}}) - foundPaths, _ = collectResponse(t, subscribeClient, expectedPaths) - if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { - t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) - } -} - -func (c subscribeTest) subModeRootTest(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) - if skipTest[t.Name()] { - t.Skip() - } - dut := ondatra.DUT(t, "DUT") - - req := buildRequest(t, c, dut.Name()) - t.Logf("SubscribeRequest:\n%v", prototext.Format(req)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - subscribeClient, err := gnmiClient.Subscribe(ctx) - if err != nil { - t.Fatalf("Unable to get subscribe client (%v)", err) - } - - if err := subscribeClient.Send(req); err != nil { - t.Fatalf("Failed to send gNMI subscribe request (%v)", err) - } - - // First listener returns after sync response - if err := clientListener(t, subscribeClient); err != nil { - t.Errorf("Initial Response failed (%v)", err) - } - - // Second listener returns after fixed time with no errors - if err := clientListener(t, subscribeClient); err != nil { - t.Errorf("Subscribe Response failed (%v)", err) - } - -} - -func collectResponse(t *testing.T, subClient gpb.GNMI_SubscribeClient, expectedPaths map[string]operStatus) (map[string]operStatus, time.Duration) { - t.Helper() - start := time.Now() - // Process response from DUT. - expectedCount := len(expectedPaths) - foundPaths := make(map[string]operStatus) - for pCount := 0; pCount < expectedCount; { - // Wait for response from DUT. - done := make(chan struct{}) - resCh := make(chan *gpb.SubscribeResponse, 1) - errCh := make(chan error, 1) - go func(subClient gpb.GNMI_SubscribeClient, resCh chan<- *gpb.SubscribeResponse, errCh chan<- error) { - res, err := subClient.Recv() - close(done) - resCh <- res - errCh <- err - }(subClient, resCh, errCh) - timer := time.NewTimer(mediumTime) - select { - case <-timer.C: - t.Fatalf("Timed out waiting on stream, expected: \n%+v, \nfound: \n%+v", expectedPaths, foundPaths) - case <-done: - if !timer.Stop() { - <-timer.C - } - } - res := <-resCh - err := <-errCh - if err != nil { - if _, ok := expectedPaths[errorResponse]; ok { - foundPaths[errorResponse] = operStatus{ - match: true, - value: err.Error(), - } - return foundPaths, 0 - } - t.Fatalf("Response error received from DUT (%v)", err) - } - switch v := res.Response.(type) { - case *gpb.SubscribeResponse_Update: - // Process Update message received in SubscribeResponse. - updates := v.Update - prefixStr, err := ygot.PathToString(updates.GetPrefix()) - if err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, updates.GetPrefix()) - } - for _, d := range updates.GetDelete() { - elemStr, err := ygot.PathToString(d) - if err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, d) - } - - pathStr := prefixStr + elemStr - if !ignorePaths(pathStr) { - _, ok := expectedPaths[syncResponse] - foundPaths[pathStr] = operStatus{match: ok, delete: true} - pCount++ - } - } - - // Perform basic sanity on the Update message. - for _, update := range updates.GetUpdate() { - if update.Path == nil { - t.Fatalf("Invalid nil Path in update: %v", prototext.Format(update)) - } - if update.Val == nil { - t.Fatalf("Invalid nil Val in update: %v", prototext.Format(update)) - } - // Path is partially present in Prefix and partially in Update in the response. - elemStr, err := ygot.PathToString(update.Path) - if err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, update.Path) - } - pathStr := prefixStr + elemStr - - if !ignorePaths(pathStr) { - _, ok := expectedPaths[syncResponse] - foundPaths[pathStr] = operStatus{ - match: ok, - value: update.GetVal().GetStringVal(), - } - pCount++ - } - } - - case *gpb.SubscribeResponse_SyncResponse: - _, ok := expectedPaths[syncResponse] - foundPaths[syncResponse] = operStatus{match: ok} - pCount++ - } - } - return foundPaths, time.Since(start) -} - -func clientListener(t *testing.T, sc gpb.GNMI_SubscribeClient) error { - t.Helper() - timeout := time.After(mediumTime) - for { - select { - case <-timeout: - return nil - default: - m, err := sc.Recv() - if err != nil { - if errors.Is(err, context.Canceled) { - return nil - } - return err - } - switch m.Response.(type) { - case *gpb.SubscribeResponse_SyncResponse: - return nil - } - } - } -} - -func (c *subscribeTest) buildExpectedPaths(t *testing.T, dut *ondatra.DUTDevice) map[string]operStatus { - t.Helper() - expectedPaths := make(map[string]operStatus) - if c.expectError { - expectedPaths[errorResponse] = operStatus{} - return expectedPaths - } - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - - resolvedPath, errs := ygot.StringToStructuredPath(c.reqPath) - if errs != nil { - t.Fatal(c.reqPath + " " + errs.Error()) - } - req := &gpb.GetRequest{ - Prefix: prefix, - Path: func(want string) []*gpb.Path { - if want == rootPath { - return nil - } - return []*gpb.Path{&gpb.Path{Elem: resolvedPath.Elem}} - }(c.reqPath), - Encoding: gpb.Encoding_PROTO, - } - - ctx, cancel := context.WithTimeout(context.Background(), c.timeout) - defer cancel() - gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - resp, err := gnmiClient.Get(ctx, req) - if err != nil { - t.Fatalf("GetResponse error received from DUT (%v)", err) - } - for _, notification := range resp.GetNotification() { - if notification == nil { - t.Fatalf("GetResponse contained no Notification (%v)", prototext.Format(resp)) - } - prefixStr, err := ygot.PathToString(notification.GetPrefix()) - if err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, notification.GetPrefix()) - } - for _, update := range notification.GetUpdate() { - if update.Path == nil { - t.Fatalf("Invalid nil Path in update: %v", prototext.Format(update)) - } - elemStr, err := ygot.PathToString(update.Path) - if err != nil { - t.Fatalf("Failed to convert path to string (%v) %v", err, update.Path) - } - path := prefixStr + elemStr - - if !ignorePaths(path) { - expectedPaths[path] = operStatus{} - } - } - } - return expectedPaths -} - -// buildRequest creates a SubscribeRequest message using the specified -// parameters that include the list of paths to be added in the request. -func buildRequest(t *testing.T, params subscribeTest, target string) *gpb.SubscribeRequest { - t.Helper() - resolvedPath, errs := ygot.StringToStructuredPath(params.reqPath) - if errs != nil { - t.Fatal(params.reqPath + " " + errs.Error()) - } - - prefix := &gpb.Path{Origin: "openconfig", Target: target} - return &gpb.SubscribeRequest{ - Request: &gpb.SubscribeRequest_Subscribe{ - Subscribe: &gpb.SubscriptionList{ - Prefix: prefix, - Subscription: []*gpb.Subscription{ - &gpb.Subscription{ - Path: &gpb.Path{Elem: resolvedPath.Elem}, - Mode: params.subMode, - SampleInterval: params.sampleInterval, - SuppressRedundant: params.suppressRedundant, - HeartbeatInterval: params.heartbeatInterval, - }}, - Mode: params.mode, - Encoding: gpb.Encoding_PROTO, - UpdatesOnly: params.updatesOnly, - }, - }, - } -} diff --git a/sdn_tests/pins_ondatra/tests/gnoi_reboot_test.go b/sdn_tests/pins_ondatra/tests/gnoi_reboot_test.go deleted file mode 100644 index d500ac80d28..00000000000 --- a/sdn_tests/pins_ondatra/tests/gnoi_reboot_test.go +++ /dev/null @@ -1,470 +0,0 @@ -package gnoi_reboot_test - -// This suite of tests is to end-to-end test the gNOI reboot. - -import ( - "context" - "regexp" - "strings" - "testing" - "time" - - "github.com/openconfig/ondatra" - "github.com/openconfig/ondatra/gnmi" - "github.com/openconfig/ygnmi/ygnmi" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" - "github.com/pkg/errors" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - - gpb "github.com/openconfig/gnmi/proto/gnmi" - syspb "github.com/openconfig/gnoi/system" -) - -type grpcErr struct { - code codes.Code - desc string -} - -func extractCanonicalCodeString(e error) string { - if e == nil { - return codes.OK.String() - } - re := regexp.MustCompile(`code = (\w+)`) - match := re.FindStringSubmatch(e.Error()) - if len(match) < 2 { - return codes.Unknown.String() - } - return match[1] -} - -func (e *grpcErr) Error() string { - if e == nil { - return "" - } - return "rpc error: code = " + e.code.String() + " desc = " + e.desc -} - -func (e *grpcErr) Is(o error) bool { - if e == nil || o == nil { - return e == o - } - - if extractCanonicalCodeString(o) != e.code.String() { - return false - } - if !strings.Contains(o.Error(), e.desc) { - return false - } - return true -} - -var ( - errStrRebootRPC = "reboot RPC failed: rpc error: " - errInvalidRequest = grpcErr{code: codes.InvalidArgument, desc: "Invalid request"} - errHostService = grpcErr{code: codes.Internal, desc: "Internal SONiC HostService failure: "} - errMethodNotSupported = grpcErr{code: codes.InvalidArgument, desc: "reboot method is not supported"} -) - -// attainGnoiStateParams specify the parameters used by attainGnoiStateDuringReboot. -type attainGnoiStateParams struct { - waitTime time.Duration - checkInterval time.Duration - timeBeforeReboot int64 - gnoiReachability bool -} - -func TestMain(m *testing.M) { - ondatra.RunTests(m, pinsbind.New) -} - -// Helper function to create the Get Request. -func createGetRequest(dut *ondatra.DUTDevice, paths []*gpb.Path, dataType gpb.GetRequest_DataType) *gpb.GetRequest { - // Add Prefix information for the GetRequest. - prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} - // Create getRequest message with data type. - getRequest := &gpb.GetRequest{ - Prefix: prefix, - Path: paths, - Type: dataType, - Encoding: gpb.Encoding_PROTO, - } - return getRequest -} - -// Helper function to get bootTime from chassis using a raw gNMI client: the intention is to not fatally -// fail is the chassis is unreachable. -// Return boot-time, true, nil if boot-time successfully retrieved from the switch. -// Return 0, false, nil if unable to retrieve boot-time. -// Return 0, false, error if an error occurred while retrieving boot-time. -func retrieveBootTime(t *testing.T, d *ondatra.DUTDevice) (uint64, bool, error) { - operStatusPath := gnmi.OC().System().BootTime().State().PathStruct() - resolvedPath, _, _ := ygnmi.ResolvePath(operStatusPath) - paths := []*gpb.Path{resolvedPath} - getRequest := createGetRequest(d, paths, gpb.GetRequest_STATE) - ctx := context.Background() - gnmiClient, err := d.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) - if err != nil { - t.Fatalf("Unable to get gNMI client (%v)", err) - } - getResp, err := gnmiClient.Get(ctx, getRequest) - - if err != nil { - // The inability to retrieve boot-time is not a fatal error and is an expected side effect - // of rebooting during reboot test. - t.Logf("error retrieving boot-time, err = (%v)", err) - return 0, false, nil - } - if getResp == nil { - return 0, false, errors.Errorf("retrieveBootTime: Get response is nil") - } - - notifs := getResp.GetNotification() - if len(notifs) != 1 { - return 0, false, errors.Errorf("retrieveBootTime: There should only be one notification: getResp = (%v)", getResp) - } - - update := notifs[0].GetUpdate() - if len(update) != 1 { - return 0, false, errors.Errorf("retrieveBootTime: There should only be one update: getResp = (%v)", getResp) - } - - bootTime := update[0].GetVal() - if bootTime == nil { - return 0, false, errors.Errorf("retrieveBootTime: Unable to GetVal from update: getResp = (%v)", getResp) - } - return bootTime.GetUintVal(), true, nil -} - -// attainGnoiStateDuringReboot polls the gNOI server and achieve the corresponding gNOI state depending on gnoiReachability during reboot -// If gnoiReachability is true, then this function will poll for gNOI server to be reachable and verifies the reboot. -// If gnoiReachability is false, then this function will poll for gNOI server to be unreachable and returns. -func attainGnoiStateDuringReboot(t *testing.T, d *ondatra.DUTDevice, params attainGnoiStateParams) error { - t.Helper() - t.Logf("Polling gNOI server reachability in %v intervals for max duration of %v", params.checkInterval, params.waitTime) - for timeout := time.Now().Add(params.waitTime); time.Now().Before(timeout); { - // The switch backend might not have processed the reboot request or might take - // sometime to execute the request. So wait for check interval time and - // later verify that the switch rebooted within the specified wait time. - time.Sleep(params.checkInterval) - timeElapsed := (time.Now().UnixNano() - params.timeBeforeReboot) / int64(time.Second) - - // An error returned by GNOIAble indicates we were unable to connect to the server. - gnoiErr := testhelper.GNOIAble(t, d) - - // Treat a non GNOIAble switch and an inability to query boot-time as a server not up condition. - if gnoiErr != nil { - t.Logf("gNOI server not up after %v seconds", timeElapsed) - if !params.gnoiReachability { - return nil - } - continue - } - - // An error returned by retrieveBootTime is a processing error to be treated as fatal. - bootTime, valid, bootErr := retrieveBootTime(t, d) - - if bootErr != nil { - return bootErr - } - - if !valid { - t.Logf("gNOI server not up after %v seconds", timeElapsed) - if !params.gnoiReachability { - return nil - } - continue - } - - t.Logf("gNOI server up after %v seconds", timeElapsed) - - // An extra check to ensure that the system has rebooted. - if bootTime < uint64(params.timeBeforeReboot) { - t.Logf("Switch has not rebooted after %v seconds", timeElapsed) - continue - } - - t.Logf("Switch rebooted after %v seconds", timeElapsed) - if !params.gnoiReachability { - return errors.Errorf("failed to reach gNOI unreachability") - } - return nil - } - return errors.Errorf("failed to reboot") -} - -func TestRebootSuccess(t *testing.T) { - // Validation for success of reboot after sending Reboot RPC. - ttID := "0dedda87-1b76-40a2-8712-24c1579987ee" - defer testhelper.NewTearDownOptions(t).WithID(ttID).Teardown(t) - dut := ondatra.DUT(t, "DUT") - - waitTime, err := testhelper.RebootTimeForDevice(t, dut) - if err != nil { - t.Fatalf("Unable to get reboot wait time: %v", err) - } - params := testhelper.NewRebootParams().WithWaitTime(waitTime).WithCheckInterval(30*time.Second).WithRequest(syspb.RebootMethod_COLD).WithLatencyMeasurement(ttID, "gNOI Reboot With Type: "+syspb.RebootMethod_COLD.String()) - if err := testhelper.Reboot(t, dut, params); err != nil { - t.Fatalf("Failed to reboot DUT: %v", err) - } -} - -func TestRebootStatus(t *testing.T) { - // Verify RebootStatus when there is no active reboot. - defer testhelper.NewTearDownOptions(t).WithID("dcc5d482-9417-42a5-9801-b51cbf7c9ff3").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - req := &syspb.RebootStatusRequest{} - - resp, err := dut.RawAPIs().GNOI(t).System().RebootStatus(context.Background(), req) - if err != nil { - t.Fatalf("Failed to send RebootStatus RPC: %v", err) - } - - if got, want := resp.GetActive(), false; got != want { - t.Errorf("RebootStatus(whenInactiveReboot).active = %v, want:%v", got, want) - } - if got, want := resp.GetWhen(), uint64(0); got != want { - t.Errorf("RebootStatus(whenInactiveReboot).when = %v, want:%v", got, want) - } - if got, want := resp.GetReason(), ""; got != want { - t.Errorf("RebootStatus(whenInactiveReboot).reason = %v, want:%v", got, want) - } -} - -func TestCancelRebootNotSupported(t *testing.T) { - // This test is Google specific as other vendors might support CancelReboot. - // Validate that CancelReboot RPC is not supported. - defer testhelper.NewTearDownOptions(t).WithID("54890e78-97c2-4c08-b03c-0822870691e7").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - req := &syspb.CancelRebootRequest{ - Message: "Test message to cancel reboot", - } - - wantError := grpcErr{code: codes.Unimplemented, desc: "Method System.CancelReboot is unimplemented"} - if _, err := dut.RawAPIs().GNOI(t).System().CancelReboot(context.Background(), req); !wantError.Is(err) { - t.Errorf("Failed to validate that CancelReboot is not supported: %v", err) - } -} - -func TestScheduledRebootNotSupported(t *testing.T) { - // Validate that scheduled Reboot RPC is not supported. - defer testhelper.NewTearDownOptions(t).WithID("9d5c0ded-7474-47cf-8310-9444189928cd").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - waitTime, err := testhelper.RebootTimeForDevice(t, dut) - if err != nil { - t.Fatalf("Unable to get reboot wait time: %v", err) - } - - req := &syspb.RebootRequest{ - Method: syspb.RebootMethod_COLD, - Delay: 10, // in nanoseconds - Message: "Test Delayed Reboot", - } - - params := testhelper.NewRebootParams().WithWaitTime(waitTime).WithCheckInterval(30 * time.Second).WithRequest(req) - if err := testhelper.Reboot(t, dut, params); err == nil || extractCanonicalCodeString(err) != codes.InvalidArgument.String() { - t.Errorf("Failed to validate that delayed reboot is not supported: %v", err) - } -} - -func TestRebootMethodsValidation(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("c416cba7-12f0-4efa-a341-0c5d1c806fc1").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - waitTime, err := testhelper.RebootTimeForDevice(t, dut) - if err != nil { - t.Fatalf("Unable to get reboot wait time: %v", err) - } - - tests := []struct { - method syspb.RebootMethod - wantErr grpcErr - }{ - { - method: syspb.RebootMethod_UNKNOWN, - wantErr: errMethodNotSupported, - }, - { - method: syspb.RebootMethod_HALT, - wantErr: errMethodNotSupported, - }, - { - method: syspb.RebootMethod_WARM, - wantErr: grpcErr{code: errHostService.code, desc: errHostService.desc + "Warm reboot is currently not supported."}, - }, - { - method: syspb.RebootMethod_NSF, - wantErr: errMethodNotSupported, - }, - { - method: syspb.RebootMethod_POWERUP, - wantErr: errMethodNotSupported, - }, - { - method: syspb.RebootMethod_POWERDOWN, - wantErr: grpcErr{code: errHostService.code, desc: errHostService.desc + "Invalid reboot method: 2"}, - }, - } - - for _, tt := range tests { - params := testhelper.NewRebootParams().WithWaitTime(waitTime).WithCheckInterval(30 * time.Second).WithRequest(tt.method) - if err := testhelper.Reboot(t, dut, params); !tt.wantErr.Is(err) { - t.Errorf("Failed to validate that %v reboot method is not supported: %v", tt.method, err) - } - } -} - -func TestRebootStatusWhenActiveReboot(t *testing.T) { - // Verify RebootStatus response when there is an active reboot. - defer testhelper.NewTearDownOptions(t).WithID("23bbc091-ba7f-4424-9db6-fe5e25274791").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - waitTime, err := testhelper.RebootTimeForDevice(t, dut) - if err != nil { - t.Fatalf("Unable to get reboot wait time: %v", err) - } - - rebootStatusReq := &syspb.RebootStatusRequest{} - - rebootReqMessage := "Test message to issue reboot." - rebootReq := &syspb.RebootRequest{ - Method: syspb.RebootMethod_COLD, - Message: rebootReqMessage, - } - - // Issue a reboot. - timeBeforeReboot := time.Now().UnixNano() - systemClient := dut.RawAPIs().GNOI(t).System() - if _, err := systemClient.Reboot(context.Background(), rebootReq); err != nil { - t.Fatalf("Failed to issue Reboot: %v", err) - } - - // Retrieve RebootStatus immediately after issuing reboot and verify the response. - resp, err := systemClient.RebootStatus(context.Background(), rebootStatusReq) - if err != nil { - t.Errorf("Failed to get RebootStatus: %v", err) - } else { - if got, want := resp.GetActive(), true; got != want { - t.Errorf("RebootStatus(whenActiveReboot).active = %v, want:%v", got, want) - } - if got, wantMin, wantMax := resp.GetWhen(), uint64(timeBeforeReboot), uint64(time.Now().UnixNano()); got >= wantMin && got <= wantMax { - t.Errorf("RebootStatus(whenActiveReboot).when = %v, wantMin:%v, wantMax:%v", got, wantMin, wantMax) - } - if got, want := resp.GetReason(), rebootReqMessage; got != want { - t.Errorf("RebootStatus(whenActiveReboot).reason = %v, want:%v", got, want) - } - } - - params := attainGnoiStateParams{ - waitTime: waitTime, - checkInterval: 30 * time.Second, - timeBeforeReboot: timeBeforeReboot, - gnoiReachability: true, - } - if err := attainGnoiStateDuringReboot(t, dut, params); err != nil { - t.Errorf("Failed to poll gNOI reachability and verify reboot: %v", err) - } -} - -func TestRebootRequestWhenActiveReboot(t *testing.T) { - // Verify that new Reboot request will be rejected during an active reboot. - defer testhelper.NewTearDownOptions(t).WithID("e399daad-f61e-4918-a02c-1802f27de983").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - waitTime, err := testhelper.RebootTimeForDevice(t, dut) - if err != nil { - t.Fatalf("Unable to get reboot wait time: %v", err) - } - - firstRebootReq := &syspb.RebootRequest{ - Method: syspb.RebootMethod_COLD, - Message: "First test message to issue reboot.", - } - - SecondRebootReq := &syspb.RebootRequest{ - Method: syspb.RebootMethod_COLD, - Message: "Second test message to issue reboot.", - } - - timeBeforeReboot := time.Now().UnixNano() - systemClient := dut.RawAPIs().GNOI(t).System() - - // Issue first reboot. - if _, err := systemClient.Reboot(context.Background(), firstRebootReq); err != nil { - t.Fatalf("Failed to issue Reboot: %v", err) - } - - wantErr := grpcErr{code: errHostService.code, desc: errHostService.desc + "Previous reboot is ongoing"} - // Issue another reboot immediately after issuing the first reboot and verify that the second reboot got rejected. - if _, err := systemClient.Reboot(context.Background(), SecondRebootReq); !wantErr.Is(err) { - t.Errorf("Failed to validate that the switch rejects second reboot: %v", err) - } - - params := attainGnoiStateParams{ - waitTime: waitTime, - checkInterval: 30 * time.Second, - timeBeforeReboot: timeBeforeReboot, - gnoiReachability: true, - } - if err := attainGnoiStateDuringReboot(t, dut, params); err != nil { - t.Errorf("Failed to poll gNOI reachability and verify reboot: %v", err) - } - -} - -func TestRebootRequestWhenGnoiUnreachable(t *testing.T) { - // Verify Reboot request will be rejected if issued when gNOI is unreachable. - defer testhelper.NewTearDownOptions(t).WithID("bfbe4e85-4559-4184-acf0-b00bb4bf46ba").Teardown(t) - dut := ondatra.DUT(t, "DUT") - - waitTime, err := testhelper.RebootTimeForDevice(t, dut) - if err != nil { - t.Fatalf("Unable to get reboot wait time: %v", err) - } - - firstRebootReq := &syspb.RebootRequest{ - Method: syspb.RebootMethod_COLD, - Message: "First test message to issue reboot.", - } - - SecondRebootReq := &syspb.RebootRequest{ - Method: syspb.RebootMethod_COLD, - Message: "Second test message to issue reboot.", - } - - timeBeforeReboot := time.Now().UnixNano() - systemClient := dut.RawAPIs().GNOI(t).System() - - // Issue first reboot. - if _, err := systemClient.Reboot(context.Background(), firstRebootReq); err != nil { - t.Fatalf("Failed to issue Reboot: %v", err) - } - - // Poll gNOI until it is unreachable and issue a second reboot. - params := attainGnoiStateParams{ - waitTime: waitTime, - checkInterval: 15 * time.Second, - timeBeforeReboot: timeBeforeReboot, - gnoiReachability: false, - } - if err := attainGnoiStateDuringReboot(t, dut, params); err != nil { - t.Fatalf("Failed to reach a state where GNOI is unreachable: %v", err) - } - - wantErr := grpcErr{code: codes.Unavailable} - // Issue second reboot while gNOI is unreachable and verify it's rejection. - if _, err := systemClient.Reboot(context.Background(), SecondRebootReq); !wantErr.Is(err) { - t.Errorf("Failed to validate that the switch rejects reboot when gNOI is unreachable: %v", err) - } - - params.checkInterval = 30 * time.Second - params.gnoiReachability = true - if err := attainGnoiStateDuringReboot(t, dut, params); err != nil { - t.Errorf("Failed to poll gNOI reachability and verify reboot: %v", err) - } - -} diff --git a/sdn_tests/pins_ondatra/tests/lacp_test.go b/sdn_tests/pins_ondatra/tests/lacp_test.go deleted file mode 100644 index 82e96af62c4..00000000000 --- a/sdn_tests/pins_ondatra/tests/lacp_test.go +++ /dev/null @@ -1,683 +0,0 @@ -package lacp_test - -import ( - "fmt" - "sort" - "strings" - "testing" - "time" - - log "github.com/golang/glog" - "github.com/google/go-cmp/cmp" - "github.com/openconfig/ondatra" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" - "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" - "github.com/pkg/errors" - - gpb "github.com/openconfig/gnmi/proto/gnmi" - "github.com/openconfig/ondatra/gnmi" - "github.com/openconfig/ondatra/gnmi/oc" - "github.com/openconfig/ygnmi/ygnmi" -) - -// gNMI can cache local state for up to 10 seconds. We therefore set our timeout to a little longer -// to handle any edge cases when verifying state. -const defaultGNMIWait = 15 * time.Second - -// IEEE 802.3ad defines the Link Aggregation standard used by LACP where connected ports can -// experimental control packets between each other. Based on these packets the switch can group matching -// ports into a LAG/Trunk/PortChannel. -// -// Local state is maintained for each member of a LAG to monitor the health of that given member. -type lacpMemberState struct { - activity oc.E_Lacp_LacpActivityType - timeout oc.E_Lacp_LacpTimeoutType - aggregatable bool - synchronization oc.E_Lacp_LacpSynchronizationType - collecting bool - distributing bool -} - -// Wait for the switch state of a specific PortChannel member to converge to a users expectations. -// If the switch state does not converge return a string detailing the difference between the final -// state received, and what the user wanted. -func compareLacpMemberState(t *testing.T, dut *ondatra.DUTDevice, pcName string, memberName string, want lacpMemberState) string { - t.Helper() - - // Wait for the switch value to match our expectation. - predicate := func(val *ygnmi.Value[*oc.Lacp_Interface_Member]) bool { - currentVal, present := val.Val() - if !present { - return false - } - return currentVal.GetActivity() == want.activity && - currentVal.GetTimeout() == want.timeout && - currentVal.GetAggregatable() == want.aggregatable && - currentVal.GetSynchronization() == want.synchronization && - currentVal.GetCollecting() == want.collecting && - currentVal.GetDistributing() == want.distributing - } - lastVal, match := gnmi.Watch(t, dut, gnmi.OC().Lacp().Interface(pcName).Member(memberName).State(), defaultGNMIWait, predicate).Await(t) - - state, ok := lastVal.Val() - if !ok { - return "no value for lacp interface member" - } - var diff strings.Builder - if !match { - fmt.Fprintf(&diff, "%v:%v:%v (-want, +got)", dut.Name(), pcName, memberName) - - if state.Activity == want.activity { - fmt.Fprintf(&diff, "\nactivity: %v", state.Activity) - } else if state.Activity == oc.Lacp_LacpActivityType_UNSET { - fmt.Fprintf(&diff, "\nactivity: -%v, +(unset)", want.activity) - } else { - fmt.Fprintf(&diff, "\nactivity: -%v, +%v", want.activity, state.Activity) - } - - if state.Timeout == want.timeout { - fmt.Fprintf(&diff, "\ntimeout: %v", state.Timeout) - } else if state.Timeout == oc.Lacp_LacpTimeoutType_UNSET { - fmt.Fprintf(&diff, "\ntimeout: -%v, +(unset)", want.timeout) - } else { - fmt.Fprintf(&diff, "\ntimeout: -%v, +%v", want.timeout, state.Timeout) - } - - if state.Aggregatable != nil && *state.Aggregatable == want.aggregatable { - fmt.Fprintf(&diff, "\naggregatable: %v", *state.Aggregatable) - } else if state.Aggregatable == nil { - fmt.Fprintf(&diff, "\naggregatable: -%v, +(unset)", want.aggregatable) - } else { - fmt.Fprintf(&diff, "\naggregatable: -%v, +%v", want.aggregatable, *state.Aggregatable) - } - - if state.Synchronization == want.synchronization { - fmt.Fprintf(&diff, "\nsynchronization: %v", state.Synchronization) - } else if state.Synchronization == oc.Lacp_LacpSynchronizationType_UNSET { - fmt.Fprintf(&diff, "\nsynchronization: -%v, +(unset)", want.synchronization) - } else { - fmt.Fprintf(&diff, "\nsynchronization: -%v, +%v", want.synchronization, state.Synchronization) - } - - if state.Collecting != nil && *state.Collecting == want.collecting { - fmt.Fprintf(&diff, "\ncollecting: %v", state.Collecting) - } else if state.Collecting == nil { - fmt.Fprintf(&diff, "\ncollecting: -%v, +(unset)", want.collecting) - } else { - fmt.Fprintf(&diff, "\ncollecting: -%v, -%v", want.collecting, *state.Collecting) - } - - if state.Distributing != nil && *state.Distributing == want.distributing { - fmt.Fprintf(&diff, "\ndistributing: %v", *state.Distributing) - } else if state.Distributing == nil { - fmt.Fprintf(&diff, "\ndistributing: -%v, +(unset)", want.distributing) - } else { - fmt.Fprintf(&diff, "\ndistributing: -%v, +%v", want.distributing, *state.Distributing) - } - } - return diff.String() -} - -// Blocking state happens when one side of the LACP connection is up, but the other is not. For -// example, a port is down, or not yet configured. When this happens we expect the member to still -// be active and aggregatable (i.e. waiting for the other end to come up), but not yet in-sync or -// collecting/distributing traffic. -func verifyBlockingState(t *testing.T, dut *ondatra.DUTDevice, pcName string, memberName string) error { - t.Helper() - - want := lacpMemberState{ - activity: oc.Lacp_LacpActivityType_ACTIVE, - timeout: oc.Lacp_LacpTimeoutType_LONG, - aggregatable: true, - synchronization: oc.Lacp_LacpSynchronizationType_OUT_SYNC, - collecting: false, - distributing: false, - } - - // gNMI does not support ON_CHANGE events for LACP paths, and SAMPLING can fatally fail if an - // entry doesn't yet exist (i.e. we call this too quickly after sending a config). So to prevent - // flakes we run this check twice in a row. - if firstDiff := compareLacpMemberState(t, dut, pcName, memberName, want); firstDiff != "" { - log.Warningf("Failed first blocking check: %s", firstDiff) - if secondDiff := compareLacpMemberState(t, dut, pcName, memberName, want); secondDiff != "" { - return errors.New(secondDiff) - } - } - return nil -} - -// In-Sync state happens when both side of the LACP connection are up and healthy. When in this -// state we expect the member to be active, aggregatable, in-sync, collecting, and distributing -// traffic. -func verifyInSyncState(t *testing.T, dut *ondatra.DUTDevice, pcName string, memberName string) error { - t.Helper() - - want := lacpMemberState{ - activity: oc.Lacp_LacpActivityType_ACTIVE, - timeout: oc.Lacp_LacpTimeoutType_LONG, - aggregatable: true, - synchronization: oc.Lacp_LacpSynchronizationType_IN_SYNC, - collecting: true, - distributing: true, - } - - // gNMI does not support ON_CHANGE events for LACP paths, and SAMPLING can fatally fail if an - // entry doesn't yet exist (i.e. we call this too quickly after sending a config). So to prevent - // flakes we run this check twice in a row. - if firstDiff := compareLacpMemberState(t, dut, pcName, memberName, want); firstDiff != "" { - log.Warningf("Failed first in-sync check: %s", firstDiff) - if secondDiff := compareLacpMemberState(t, dut, pcName, memberName, want); secondDiff != "" { - return errors.New(secondDiff) - } - } - return nil -} - -// gNMI does not specify an ordering for the member list of a PortChannel. To make tests -// reproducible we need to sort the member lists before comparing. -func comparePortChannelMemberList(t *testing.T, timeout time.Duration, dut *ondatra.DUTDevice, pcName string, members []string) error { - t.Helper() - - // Users do not have to pre-sort their list. - sort.Strings(members) - - predicate := func(val *ygnmi.Value[[]string]) bool { - got, present := val.Val() - // If the value isn't present then simply return false. - if !present { - return false - } - - // Otherwise, sort the values from the switch, and compare them to the expectations. - sort.Strings(got) - return cmp.Equal(members, got) - } - - // gNMI does not support ON_CHANGE events for LACP paths, and SAMPLING can fatally fail if an - // entry doesn't yet exist (i.e. we call this too quickly after sending a config). So to prevent - // flakes we run this check twice in a row. - if lastVal, matched := gnmi.Watch(t, dut, gnmi.OC().Interface(pcName).Aggregation().Member().State(), timeout, predicate).Await(t); !matched { - log.Warningf("Failed first membership check: %v", lastVal) - if lastVal, again := gnmi.Watch(t, dut, gnmi.OC().Interface(pcName).Aggregation().Member().State(), timeout, predicate).Await(t); !again { - return errors.Errorf("member state does not match %v:%v", members, lastVal) - } - } - return nil -} - -// Translates an openconfig ETHERNET_SPEED into Mbps which can be used to verify a LAG's speed. -func ethernetPortSpeedToMbps(speed oc.E_IfEthernet_ETHERNET_SPEED) (uint32, error) { - // Returns bits/sec. - bps, err := testhelper.EthernetSpeedToUint64(speed) - if err != nil { - return 0, err - } - return uint32(bps / 1_000_000), nil -} - -// Fetches the configured PortSpeed for a list of ports, and aggregates the values together. Can be -// be used to verify a PortChannel speed matches the total of all its member ports. -func aggregatedPortSpeed(t *testing.T, dut *ondatra.DUTDevice, ports []string) (uint32, error) { - lagSpeed := uint32(0) - - for _, port := range ports { - portSpeed, err := ethernetPortSpeedToMbps(gnmi.Get(t, dut, gnmi.OC().Interface(port).Ethernet().PortSpeed().Config())) - if err != nil { - return 0, errors.Wrapf(err, "could not get port speed for %s", port) - } - lagSpeed += portSpeed - } - - return lagSpeed, nil -} - -// Used by go/ondatra to automatically reserve an available testbed. -func TestMain(m *testing.M) { - ondatra.RunTests(m, pinsbind.New) -} - -func TestCreatingPortChannel(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("b280a73c-c8e9-411b-b5ef-a22240463377").Teardown(t) - - host := ondatra.DUT(t, "DUT") - peer := ondatra.DUT(t, "CONTROL") - t.Logf("Host Device: %v", host.Name()) - t.Logf("Peer Device: %v", peer.Name()) - - // Find a set of peer ports between the 2 switches. - peerPorts, err := testhelper.PeerPortGroupWithNumMembers(t, host, peer, 2) - if err != nil { - t.Fatalf("Failed to get enough peer ports: %v", err) - } - t.Logf("Using peer ports: %v", peerPorts) - - // The PortChannel configs will be the same on both the host and peer devices so we can reuse - // them. Since this is a sanity test to verify PortChannels can be created we manually set most of - // the configuration variables. - portChannel := "PortChannel200" - portChannelID := uint32(2001) - portChannelDescription := "PortChanne200 used for sanity testing." - portChannelMinLinks := uint16(2) - portChannelMtu := uint16(1514) - lacpInterval := oc.Lacp_LacpPeriodType_FAST - lacpMode := oc.Lacp_LacpActivityType_ACTIVE - lacpKey := uint16(85) - - portChannelConfig := testhelper.GeneratePortChannelInterface(portChannel) - portChannelConfig.Id = &portChannelID - portChannelConfig.Mtu = &portChannelMtu - portChannelConfig.Description = &portChannelDescription - portChannelConfig.Aggregation.MinLinks = &portChannelMinLinks - portChannelConfigs := map[string]*oc.Interface{portChannel: &portChannelConfig} - - lacpConfig := testhelper.GenerateLACPInterface(portChannel) - lacpConfig.Interval = lacpInterval - - lacpConfig.LacpMode = lacpMode - var lacpConfigs oc.Lacp - lacpConfigs.AppendInterface(&lacpConfig) - - deviceConfig := &oc.Root{ - Interface: portChannelConfigs, - Lacp: &lacpConfigs, - } - - // Push the same device config to both switches under test. - gnmi.Replace(t, host, gnmi.OC().Config(), deviceConfig) - testhelper.UpdateLacpKey(t, host, portChannel, lacpKey) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, host, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", host.Name(), portChannel, err) - } - }() - gnmi.Replace(t, peer, gnmi.OC().Config(), deviceConfig) - testhelper.UpdateLacpKey(t, peer, portChannel, lacpKey) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, peer, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", peer.Name(), portChannel, err) - } - }() - - // Ethernet ports are added to the PortChannel with its ID. Once this is done we expect the - // PortChannel to be active. Notice that the LAG member's MTU must match the PortChannel's. - // Otherwise, the FE will reject the request. - origMtuHostPort0 := gnmi.Get(t, host, gnmi.OC().Interface(peerPorts[0].Host).Mtu().Config()) - origMtuHostPort1 := gnmi.Get(t, host, gnmi.OC().Interface(peerPorts[1].Host).Mtu().Config()) - defer func() { - gnmi.Replace(t, host, gnmi.OC().Interface(peerPorts[0].Host).Mtu().Config(), origMtuHostPort0) - gnmi.Replace(t, host, gnmi.OC().Interface(peerPorts[1].Host).Mtu().Config(), origMtuHostPort1) - }() - gnmi.Replace(t, host, gnmi.OC().Interface(peerPorts[0].Host).Mtu().Config(), portChannelMtu) - gnmi.Replace(t, host, gnmi.OC().Interface(peerPorts[1].Host).Mtu().Config(), portChannelMtu) - testhelper.AssignPortsToAggregateID(t, host, portChannel, peerPorts[0].Host, peerPorts[1].Host) - - origMtuPeerPort0 := gnmi.Get(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Mtu().Config()) - origMtuPeerPort1 := gnmi.Get(t, peer, gnmi.OC().Interface(peerPorts[1].Peer).Mtu().Config()) - defer func() { - gnmi.Replace(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Mtu().Config(), origMtuPeerPort0) - gnmi.Replace(t, peer, gnmi.OC().Interface(peerPorts[1].Peer).Mtu().Config(), origMtuPeerPort1) - }() - gnmi.Replace(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Mtu().Config(), portChannelMtu) - gnmi.Replace(t, peer, gnmi.OC().Interface(peerPorts[1].Peer).Mtu().Config(), portChannelMtu) - testhelper.AssignPortsToAggregateID(t, peer, portChannel, peerPorts[0].Peer, peerPorts[1].Peer) - - // Verify that the Ethernet interfaces are enabled, and assigned to the correct PortChannel. - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Ethernet().AggregateId().State(), defaultGNMIWait, portChannel) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[1].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[1].Host).Ethernet().AggregateId().State(), defaultGNMIWait, portChannel) - - // Verify the PortChannel interface state. - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).AdminStatus().State(), defaultGNMIWait, oc.Interface_AdminStatus_UP) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).OperStatus().State(), defaultGNMIWait, oc.Interface_OperStatus_UP) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Type().State(), defaultGNMIWait, oc.IETFInterfaces_InterfaceType_ieee8023adLag) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Id().State(), defaultGNMIWait, portChannelID) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Description().State(), defaultGNMIWait, portChannelDescription) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Mtu().State(), defaultGNMIWait, portChannelMtu) - expectedHostPorts := []string{peerPorts[0].Host, peerPorts[1].Host} - if err := comparePortChannelMemberList(t, defaultGNMIWait, host, portChannel, expectedHostPorts); err != nil { - t.Errorf("PortChannel member list is invalid: %v", err) - } - // expectedLagSpeed, err := aggregatedPortSpeed(t, host, expectedHostPorts) - // if err != nil { - // t.Fatalf("Could not get expected LAG speed: %v", err) - // } - - // TODO: enable after the bug is fixed. - // Monitoring tools will SAMPLE data from /interfaces/interface[name=]/aggregation/state/, - // and the gNMI FE does not support ON_CHANGE in this case. So we update the subscription mode. - //gnmi.Await(t, host.GNMIOpts().WithYGNMIOpts(ygnmi.WithSubscriptionMode(gpb.SubscriptionMode_SAMPLE)), gnmi.OC().Interface(portChannel).Aggregation().LagSpeed().State(), defaultGNMIWait, expectedLagSpeed) - gnmi.Await(t, host.GNMIOpts().WithYGNMIOpts(ygnmi.WithSubscriptionMode(gpb.SubscriptionMode_SAMPLE)), gnmi.OC().Interface(portChannel).Aggregation().MinLinks().State(), defaultGNMIWait, portChannelMinLinks) - gnmi.Await(t, host.GNMIOpts().WithYGNMIOpts(ygnmi.WithSubscriptionMode(gpb.SubscriptionMode_SAMPLE)), gnmi.OC().Interface(portChannel).Aggregation().LagType().State(), defaultGNMIWait, oc.IfAggregate_AggregationType_LACP) - - // Verify the LACP settings for the PortChannel. - gnmi.Await(t, host, gnmi.OC().Lacp().Interface(portChannel).Interval().State(), defaultGNMIWait, lacpInterval) - gnmi.Await(t, host, gnmi.OC().Lacp().Interface(portChannel).LacpMode().State(), defaultGNMIWait, lacpMode) - testhelper.AwaitLacpKey(t, host, portChannel, defaultGNMIWait, lacpKey) - - // We don't explicitly configure the LACP system MAC or priority. Therefore, the MAC should match - // whatever the ethernet ports were configured to, and the priority will default to 0xFFFF. - expectedSystemMac := gnmi.Get(t, host, gnmi.OC().Interface(peerPorts[0].Host).Ethernet().MacAddress().State()) - gnmi.Await(t, host, gnmi.OC().Lacp().Interface(portChannel).SystemIdMac().State(), defaultGNMIWait, expectedSystemMac) - gnmi.Await(t, host, gnmi.OC().Lacp().Interface(portChannel).SystemPriority().State(), defaultGNMIWait, 0xFFFF) - - // Verify the LACP settings for each member of the PortChannel. - if err := verifyInSyncState(t, host, portChannel, peerPorts[0].Host); err != nil { - t.Errorf("LACP state is not in-sync: %v", err) - } - gnmi.Await(t, host, gnmi.OC().Lacp().Interface(portChannel).Member(peerPorts[0].Host).SystemId().State(), defaultGNMIWait, expectedSystemMac) - gnmi.Await(t, host, gnmi.OC().Lacp().Interface(portChannel).Member(peerPorts[0].Host).OperKey().State(), defaultGNMIWait, lacpKey) - gnmi.Await(t, peer, gnmi.OC().Lacp().Interface(portChannel).Member(peerPorts[0].Peer).PartnerId().State(), defaultGNMIWait, expectedSystemMac) - gnmi.Await(t, peer, gnmi.OC().Lacp().Interface(portChannel).Member(peerPorts[0].Peer).PartnerKey().State(), defaultGNMIWait, lacpKey) -} - -func TestAddingInterfaceToAnExistingPortChannel(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("cda6bc3d-9bfa-44f2-8851-53d42ab2c5bb").Teardown(t) - - host := ondatra.DUT(t, "DUT") - peer := ondatra.DUT(t, "CONTROL") - t.Logf("Host Device: %v", host.Name()) - t.Logf("Peer Device: %v", peer.Name()) - - // Find a set of peer ports between the 2 switches. - peerPorts, err := testhelper.PeerPortGroupWithNumMembers(t, host, peer, 2) - if err != nil { - t.Fatalf("Failed to get enough peer ports: %v", err) - } - t.Logf("Using peer ports: %v", peerPorts) - - // We bring up one PortChannel on both the host and peer device so we can reuse the same device - // configuration on both without issue. - portChannel := "PortChannel200" - portChannelConfig := testhelper.GeneratePortChannelInterface(portChannel) - portChannelConfigs := map[string]*oc.Interface{portChannel: &portChannelConfig} - - lacpConfig := testhelper.GenerateLACPInterface(portChannel) - var lacpConfigs oc.Lacp - lacpConfigs.AppendInterface(&lacpConfig) - - deviceConfig := &oc.Root{ - Interface: portChannelConfigs, - Lacp: &lacpConfigs, - } - - // Push the PortChannel configs and clean them up after the test finishes so they won't affect - // future tests - gnmi.Replace(t, host, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, host, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", host.Name(), portChannel, err) - } - }() - gnmi.Replace(t, peer, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, peer, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", peer.Name(), portChannel, err) - } - }() - - // Assign 1 port to each PortChannel so the interfaces become active. - testhelper.AssignPortsToAggregateID(t, host, portChannel, peerPorts[0].Host) - testhelper.AssignPortsToAggregateID(t, peer, portChannel, peerPorts[0].Peer) - - // Verify that the Ethernet and PortChannel interfaces are enabled, and that the correct member - // port is assigned. - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Ethernet().AggregateId().State(), defaultGNMIWait, portChannel) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Enabled().State(), defaultGNMIWait, true) - if err := comparePortChannelMemberList(t, defaultGNMIWait, host, portChannel, []string{peerPorts[0].Host}); err != nil { - t.Errorf("PortChannel member list is invalid: %v", err) - } - - // Assign additional ports to each PortChannel. - testhelper.AssignPortsToAggregateID(t, host, portChannel, peerPorts[1].Host) - testhelper.AssignPortsToAggregateID(t, peer, portChannel, peerPorts[1].Peer) - - // Verify that the new Ethernet interface is enabled, and the PortChannel has the correct member - // ports assigned. - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Ethernet().AggregateId().State(), defaultGNMIWait, portChannel) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[1].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[1].Host).Ethernet().AggregateId().State(), defaultGNMIWait, portChannel) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel).Enabled().State(), defaultGNMIWait, true) - if err := comparePortChannelMemberList(t, defaultGNMIWait, host, portChannel, []string{peerPorts[0].Host, peerPorts[1].Host}); err != nil { - t.Errorf("%s member list is invalid: %v", portChannel, err) - } -} - -func TestRemoveInterfaceFromAnExistingPortChannel(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("7e4936d3-2615-40b4-9cc0-e648c301f5df").Teardown(t) - - host := ondatra.DUT(t, "DUT") - peer := ondatra.DUT(t, "CONTROL") - t.Logf("Host Device: %v", host.Name()) - t.Logf("Peer Device: %v", peer.Name()) - - // Find a set of peer ports between the 2 switches. - peerPorts, err := testhelper.PeerPortGroupWithNumMembers(t, host, peer, 2) - if err != nil { - t.Fatalf("Failed to get enough peer ports: %v", err) - } - t.Logf("Using peer ports: %v", peerPorts) - - // We bring up one PortChannel on both the host and peer device so we can reuse the same device - // configuration on both without issue. - portChannel := "PortChannel200" - portChannelConfig := testhelper.GeneratePortChannelInterface(portChannel) - portChannelConfigs := map[string]*oc.Interface{portChannel: &portChannelConfig} - - var lacpConfigs oc.Lacp - portChannelLACPConfig := testhelper.GenerateLACPInterface(portChannel) - lacpConfigs.AppendInterface(&portChannelLACPConfig) - - deviceConfig := &oc.Root{ - Interface: portChannelConfigs, - Lacp: &lacpConfigs, - } - - // Push the PortChannel configs and clean them up after the test finishes so they won't affect - // future tests. - gnmi.Replace(t, host, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, host, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", host.Name(), portChannel, err) - } - }() - gnmi.Replace(t, peer, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, peer, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", peer.Name(), portChannel, err) - } - }() - - // Assign both member ports to each PortChannel, and verify their membership before trying to - // remove one. - testhelper.AssignPortsToAggregateID(t, host, portChannel, peerPorts[0].Host, peerPorts[1].Host) - testhelper.AssignPortsToAggregateID(t, peer, portChannel, peerPorts[0].Peer, peerPorts[1].Peer) - if err := comparePortChannelMemberList(t, defaultGNMIWait, host, portChannel, []string{peerPorts[0].Host, peerPorts[1].Host}); err != nil { - t.Errorf("PortChannel member list is invalid: %v", err) - } - - // Remove a port from the PortChannel and verify it was removed from the member list. - gnmi.Delete(t, host, gnmi.OC().Interface(peerPorts[1].Host).Ethernet().AggregateId().Config()) - gnmi.Delete(t, peer, gnmi.OC().Interface(peerPorts[1].Peer).Ethernet().AggregateId().Config()) - if err := comparePortChannelMemberList(t, defaultGNMIWait, host, portChannel, []string{peerPorts[0].Host}); err != nil { - t.Errorf("PortChannel member list is invalid: %v", err) - } -} - -func TestLacpConfiguredOnOnlyOneSwitch(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("71fb9896-993a-4a17-ab47-07b52cc184ee").Teardown(t) - - host := ondatra.DUT(t, "DUT") - peer := ondatra.DUT(t, "CONTROL") - t.Logf("Host Device: %v", host.Name()) - t.Logf("Peer Device: %v", peer.Name()) - - // Find a set of peer ports between the 2 switches. - peerPorts, err := testhelper.PeerPortGroupWithNumMembers(t, host, peer, 2) - if err != nil { - t.Fatalf("Failed to get enough peer ports: %v", err) - } - t.Logf("Using peer ports: %v", peerPorts) - - // We bring up the PortChannel on just the host. - portChannel := "PortChannel200" - portChannelConfig := testhelper.GeneratePortChannelInterface(portChannel) - portChannelConfigs := map[string]*oc.Interface{portChannel: &portChannelConfig} - - lacpConfig := testhelper.GenerateLACPInterface(portChannel) - var lacpConfigs oc.Lacp - lacpConfigs.AppendInterface(&lacpConfig) - - deviceConfig := &oc.Root{ - Interface: portChannelConfigs, - Lacp: &lacpConfigs, - } - gnmi.Replace(t, host, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, host, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", host.Name(), portChannel, err) - } - }() - - // Only assign the host port to a PortChannel. - testhelper.AssignPortsToAggregateID(t, host, portChannel, peerPorts[0].Host, peerPorts[1].Host) - - // Ensure ports are enabled before trying to verify state. - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[1].Host).Enabled().State(), defaultGNMIWait, true) - - if err := verifyBlockingState(t, host, portChannel, peerPorts[0].Host); err != nil { - t.Errorf("LACP state is not blocking: %v", err) - } - if err := verifyBlockingState(t, host, portChannel, peerPorts[1].Host); err != nil { - t.Errorf("LACP state is not blocking: %v", err) - } -} - -func TestMembersArePartiallyConfigured(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("42eea9f9-043c-45c4-95fd-5c1e00fef959").Teardown(t) - - host := ondatra.DUT(t, "DUT") - peer := ondatra.DUT(t, "CONTROL") - t.Logf("Host Device: %v", host.Name()) - t.Logf("Peer Device: %v", peer.Name()) - - // Find a set of peer ports between the 2 switches. - peerPorts, err := testhelper.PeerPortGroupWithNumMembers(t, host, peer, 2) - if err != nil { - t.Fatalf("Failed to get enough peer ports: %v", err) - } - t.Logf("Using peer ports: %v", peerPorts) - - // We bring up one PortChannel on both the host and peer device so we can reuse the same device - // configuration on both without issue. - portChannel := "PortChannel200" - portChannelConfig := testhelper.GeneratePortChannelInterface(portChannel) - portChannelConfigs := map[string]*oc.Interface{portChannel: &portChannelConfig} - - lacpConfig := testhelper.GenerateLACPInterface(portChannel) - var lacpConfigs oc.Lacp - lacpConfigs.AppendInterface(&lacpConfig) - - deviceConfig := &oc.Root{ - Interface: portChannelConfigs, - Lacp: &lacpConfigs, - } - - // Push the PortChannel configs and clean them up after the test finishes so they won't affect - // future tests - gnmi.Replace(t, host, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, host, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", host.Name(), portChannel, err) - } - }() - gnmi.Replace(t, peer, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, peer, portChannel); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", peer.Name(), portChannel, err) - } - }() - - // On the host assign both ports to the PortChannel, but on the peer only assign 1. - testhelper.AssignPortsToAggregateID(t, host, portChannel, peerPorts[0].Host, peerPorts[1].Host) - testhelper.AssignPortsToAggregateID(t, peer, portChannel, peerPorts[0].Peer) - - // Ensure ports are enabled before trying to verify state. - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[0].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, host, gnmi.OC().Interface(peerPorts[1].Host).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Enabled().State(), defaultGNMIWait, true) - - if err := verifyInSyncState(t, host, portChannel, peerPorts[0].Host); err != nil { - t.Errorf("LACP state is not in-sync: %v", err) - } - if err := verifyInSyncState(t, peer, portChannel, peerPorts[0].Peer); err != nil { - t.Errorf("LACP state is not in-sync: %v", err) - } - if err := verifyBlockingState(t, host, portChannel, peerPorts[1].Host); err != nil { - t.Errorf("LACP state is not blocking: %v", err) - } -} - -func TestPortDownEvent(t *testing.T) { - defer testhelper.NewTearDownOptions(t).WithID("8b585121-80c1-4ca1-9847-5433ded2ebe6").Teardown(t) - - host := ondatra.DUT(t, "DUT") - peer := ondatra.DUT(t, "CONTROL") - t.Logf("Host Device: %v", host.Name()) - t.Logf("Peer Device: %v", peer.Name()) - - // Find a set of peer ports between the 2 switches. - peerPorts, err := testhelper.PeerPortGroupWithNumMembers(t, host, peer, 2) - if err != nil { - t.Fatalf("Failed to get enough peer ports: %v", err) - } - t.Logf("Using peer ports: %v", peerPorts) - - // The same PortChannel settings will be used on the host and peer devices. - portChannel1 := "PortChannel200" - portChannelConfig := testhelper.GeneratePortChannelInterface(portChannel1) - portChannelConfigs := map[string]*oc.Interface{portChannel1: &portChannelConfig} - - var lacpConfigs oc.Lacp - lacpConfig := testhelper.GenerateLACPInterface(portChannel1) - lacpConfigs.AppendInterface(&lacpConfig) - - deviceConfig := &oc.Root{ - Interface: portChannelConfigs, - Lacp: &lacpConfigs, - } - gnmi.Replace(t, host, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, host, portChannel1); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", host.Name(), portChannel1, err) - } - }() - gnmi.Replace(t, peer, gnmi.OC().Config(), deviceConfig) - defer func() { - if err := testhelper.RemovePortChannelFromDevice(t, defaultGNMIWait, peer, portChannel1); err != nil { - t.Fatalf("Failed to remove %v:%v: %v", peer.Name(), portChannel1, err) - } - }() - - // Assign the port to each PortChannel and wait for the links to become active. - testhelper.AssignPortsToAggregateID(t, host, portChannel1, peerPorts[0].Host, peerPorts[1].Host) - testhelper.AssignPortsToAggregateID(t, peer, portChannel1, peerPorts[0].Peer, peerPorts[1].Peer) - gnmi.Await(t, host, gnmi.OC().Interface(portChannel1).Enabled().State(), defaultGNMIWait, true) - gnmi.Await(t, peer, gnmi.OC().Interface(portChannel1).Enabled().State(), defaultGNMIWait, true) - - // Bring the port down on the peer side. - gnmi.Replace(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Enabled().Config(), false) - defer func() { - gnmi.Replace(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Enabled().Config(), true) - }() - - // Wait for the port to go down on the peer then verify the host side is in a blocking state. - gnmi.Await(t, peer, gnmi.OC().Interface(peerPorts[0].Peer).Enabled().State(), defaultGNMIWait, false) - if err := verifyBlockingState(t, host, portChannel1, peerPorts[0].Host); err != nil { - t.Errorf("LACP state is not blocking: %v", err) - } -} diff --git a/sonic-mgmt-bringup b/sonic-mgmt-bringup new file mode 100644 index 00000000000..fa12fcb3c81 --- /dev/null +++ b/sonic-mgmt-bringup @@ -0,0 +1,83 @@ +# oci-sonic-mgmt + +## Important links +Testbed overview: https://github.com/sonic-net/sonic-mgmt/blob/master/docs/testbed/README.testbed.Overview.md +Testbed setup: https://github.com/sonic-net/sonic-mgmt/blob/master/docs/testbed/README.testbed.Setup.md + +Please make sure to install all the packages as described in Testbed setup link above + +## Setup Details: +### Important files one needs to know and modify for their testbed. + +- sonic-mgmt/ansible/files + - sonic_lab_console_links.csv + - sonic_lab_devices.csv + - sonic_lab_links.csv + - sonic_lab_pdu_links.csv + +- sonic-mgmt/ansible/group_vars + - all + - creds.yml + - labinfo.json + - fanout + - secrets.yml + - lab + - lab.yml + - secrets.yml + - vm_host + - creds.yml + - main.yml + +- sonic-mgmt/ansible/lab +- sonic-mgmt/ansible/testbed.yaml +- sonic-mgmt/ansible/veos +- sonic-mgmt/ansible/host_vars + - sonic-ucs-m6-23.yml +- sonic-mgmt/ansible/password.txt + + + +## Steps to bring up the topology + +## Load docker images on UCS docker repo: +- `docker load < sept090425-sonic-mgmt.tar.gz` (Sonic-mgmt container) +- `docker load < docker-ptf.gz` (PTF docker) +- `docker load < debian-bookworm.tar.gz` (Bookworm debian container for cEOS) +- `docker import cEOS64-lab-4.32.5M.tar.xz ceosimage:4.32.5M` +- `docker tag ceosimage:4.32.5M ceosimage:4.32.5M-1` +- `docker tag debian:bookworm sonicdev-microsoft.azurecr.io:443/debian:bookworm` + +## Bring up topology on UCS and connect with DUT + `./testbed-cli.sh -k ceos add-topo super-t1 ./lab -e 'root_fanout_connect=false' -vvv |& tee add-topo.log` + +## Deploy Minigraph file on the DUT - creates minigraph, loads it into the DUT, reloads the DUT + `./testbed-cli.sh deploy-mg super-t1 lab ./password.txt -vvvv |& tee deploy.log` + +## Running a nightly + `./run_tests.sh -n super-t1 -d m623-dut -m individual -t t1,any -p /run_logs/202505-oci/0906_nightly |& tee /run_logs/oci-nightly.log` + +## Runny specific test folder + `./run_tests.sh -n super-t1 -d m623-dut -m individual -t t1,any -p /run_logs/202505-oci/0906_nightly -c fib |& tee /run_logs/oci-fib.log` + +## Steps to make fanout switch as a passthrough + - docker exec -it syncd bash + - supervisorctl start dshell_client + #### Wait for 5 minutes + #### If it says it is already running, ignore and move to the next command. + /usr/bin/dshell_client.py -i + #### The following is inside the dshell Client. + - d0=sdk.la_get_device(0) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_L2CP0) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_LACP) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_ARP) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_L2CP2) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_DHCPV4_SERVER) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_DHCPV4_CLIENT) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_DHCPV6_SERVER) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_DHCPV6_CLIENT) + - d0.clear_trap_configuration(sdk.la_event_e_ETHERNET_CISCO_PROTOCOLS) + - d0.clear_trap_configuration(sdk.la_event_e_L3_ISIS_OVER_L3) + - quit() + - exit + + diff --git a/sonic-mgmt/.DS_Store b/sonic-mgmt/.DS_Store new file mode 100644 index 00000000000..e05c1fca61f Binary files /dev/null and b/sonic-mgmt/.DS_Store differ diff --git a/.azure-pipelines/baseline_test/baseline.test.mgmt.public.yml b/sonic-mgmt/.azure-pipelines/baseline_test/baseline.test.mgmt.public.yml similarity index 100% rename from .azure-pipelines/baseline_test/baseline.test.mgmt.public.yml rename to sonic-mgmt/.azure-pipelines/baseline_test/baseline.test.mgmt.public.yml diff --git a/.azure-pipelines/bgp_startup.py b/sonic-mgmt/.azure-pipelines/bgp_startup.py similarity index 100% rename from .azure-pipelines/bgp_startup.py rename to sonic-mgmt/.azure-pipelines/bgp_startup.py diff --git a/.azure-pipelines/cancel-previous-elastictest-testplan.yml b/sonic-mgmt/.azure-pipelines/cancel-previous-elastictest-testplan.yml similarity index 100% rename from .azure-pipelines/cancel-previous-elastictest-testplan.yml rename to sonic-mgmt/.azure-pipelines/cancel-previous-elastictest-testplan.yml diff --git a/.azure-pipelines/collect_dump.py b/sonic-mgmt/.azure-pipelines/collect_dump.py similarity index 100% rename from .azure-pipelines/collect_dump.py rename to sonic-mgmt/.azure-pipelines/collect_dump.py diff --git a/.azure-pipelines/common.py b/sonic-mgmt/.azure-pipelines/common.py similarity index 100% rename from .azure-pipelines/common.py rename to sonic-mgmt/.azure-pipelines/common.py diff --git a/.azure-pipelines/common2/jobs/run-analyze-code.yml b/sonic-mgmt/.azure-pipelines/common2/jobs/run-analyze-code.yml similarity index 100% rename from .azure-pipelines/common2/jobs/run-analyze-code.yml rename to sonic-mgmt/.azure-pipelines/common2/jobs/run-analyze-code.yml diff --git a/.azure-pipelines/common2/scripts/get-changed-python-files.sh b/sonic-mgmt/.azure-pipelines/common2/scripts/get-changed-python-files.sh similarity index 100% rename from .azure-pipelines/common2/scripts/get-changed-python-files.sh rename to sonic-mgmt/.azure-pipelines/common2/scripts/get-changed-python-files.sh diff --git a/.azure-pipelines/common2/stages/analyze-code.yml b/sonic-mgmt/.azure-pipelines/common2/stages/analyze-code.yml similarity index 100% rename from .azure-pipelines/common2/stages/analyze-code.yml rename to sonic-mgmt/.azure-pipelines/common2/stages/analyze-code.yml diff --git a/.azure-pipelines/common2/steps/run-black.yml b/sonic-mgmt/.azure-pipelines/common2/steps/run-black.yml similarity index 100% rename from .azure-pipelines/common2/steps/run-black.yml rename to sonic-mgmt/.azure-pipelines/common2/steps/run-black.yml diff --git a/.azure-pipelines/common2/steps/run-mypy.yml b/sonic-mgmt/.azure-pipelines/common2/steps/run-mypy.yml similarity index 100% rename from .azure-pipelines/common2/steps/run-mypy.yml rename to sonic-mgmt/.azure-pipelines/common2/steps/run-mypy.yml diff --git a/.azure-pipelines/common2/steps/run-precommit.yml b/sonic-mgmt/.azure-pipelines/common2/steps/run-precommit.yml similarity index 100% rename from .azure-pipelines/common2/steps/run-precommit.yml rename to sonic-mgmt/.azure-pipelines/common2/steps/run-precommit.yml diff --git a/.azure-pipelines/common2/steps/run-pylint.yml b/sonic-mgmt/.azure-pipelines/common2/steps/run-pylint.yml similarity index 100% rename from .azure-pipelines/common2/steps/run-pylint.yml rename to sonic-mgmt/.azure-pipelines/common2/steps/run-pylint.yml diff --git a/.azure-pipelines/common2/steps/run-unit-test.yml b/sonic-mgmt/.azure-pipelines/common2/steps/run-unit-test.yml similarity index 100% rename from .azure-pipelines/common2/steps/run-unit-test.yml rename to sonic-mgmt/.azure-pipelines/common2/steps/run-unit-test.yml diff --git a/.azure-pipelines/dependency-check.yml b/sonic-mgmt/.azure-pipelines/dependency-check.yml similarity index 100% rename from .azure-pipelines/dependency-check.yml rename to sonic-mgmt/.azure-pipelines/dependency-check.yml diff --git a/.azure-pipelines/dependency_check/README.md b/sonic-mgmt/.azure-pipelines/dependency_check/README.md similarity index 100% rename from .azure-pipelines/dependency_check/README.md rename to sonic-mgmt/.azure-pipelines/dependency_check/README.md diff --git a/.azure-pipelines/dependency_check/__init__.py b/sonic-mgmt/.azure-pipelines/dependency_check/__init__.py similarity index 100% rename from .azure-pipelines/dependency_check/__init__.py rename to sonic-mgmt/.azure-pipelines/dependency_check/__init__.py diff --git a/.azure-pipelines/dependency_check/dependency_check.py b/sonic-mgmt/.azure-pipelines/dependency_check/dependency_check.py similarity index 100% rename from .azure-pipelines/dependency_check/dependency_check.py rename to sonic-mgmt/.azure-pipelines/dependency_check/dependency_check.py diff --git a/.azure-pipelines/get_dut_version.py b/sonic-mgmt/.azure-pipelines/get_dut_version.py similarity index 100% rename from .azure-pipelines/get_dut_version.py rename to sonic-mgmt/.azure-pipelines/get_dut_version.py diff --git a/.azure-pipelines/impacted_area_testing/README.md b/sonic-mgmt/.azure-pipelines/impacted_area_testing/README.md similarity index 100% rename from .azure-pipelines/impacted_area_testing/README.md rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/README.md diff --git a/.azure-pipelines/impacted_area_testing/calculate-instance-numbers.yml b/sonic-mgmt/.azure-pipelines/impacted_area_testing/calculate-instance-numbers.yml similarity index 100% rename from .azure-pipelines/impacted_area_testing/calculate-instance-numbers.yml rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/calculate-instance-numbers.yml diff --git a/.azure-pipelines/impacted_area_testing/calculate_instance_number.py b/sonic-mgmt/.azure-pipelines/impacted_area_testing/calculate_instance_number.py similarity index 100% rename from .azure-pipelines/impacted_area_testing/calculate_instance_number.py rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/calculate_instance_number.py diff --git a/.azure-pipelines/impacted_area_testing/constant.py b/sonic-mgmt/.azure-pipelines/impacted_area_testing/constant.py similarity index 100% rename from .azure-pipelines/impacted_area_testing/constant.py rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/constant.py diff --git a/.azure-pipelines/impacted_area_testing/get-impacted-area.yml b/sonic-mgmt/.azure-pipelines/impacted_area_testing/get-impacted-area.yml similarity index 100% rename from .azure-pipelines/impacted_area_testing/get-impacted-area.yml rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/get-impacted-area.yml diff --git a/.azure-pipelines/impacted_area_testing/get_test_scripts.py b/sonic-mgmt/.azure-pipelines/impacted_area_testing/get_test_scripts.py similarity index 100% rename from .azure-pipelines/impacted_area_testing/get_test_scripts.py rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/get_test_scripts.py diff --git a/.azure-pipelines/impacted_area_testing/test_get_test_scripts.py b/sonic-mgmt/.azure-pipelines/impacted_area_testing/test_get_test_scripts.py similarity index 100% rename from .azure-pipelines/impacted_area_testing/test_get_test_scripts.py rename to sonic-mgmt/.azure-pipelines/impacted_area_testing/test_get_test_scripts.py diff --git a/.azure-pipelines/markers-check.yml b/sonic-mgmt/.azure-pipelines/markers-check.yml similarity index 100% rename from .azure-pipelines/markers-check.yml rename to sonic-mgmt/.azure-pipelines/markers-check.yml diff --git a/.azure-pipelines/markers_check/__init__.py b/sonic-mgmt/.azure-pipelines/markers_check/__init__.py similarity index 100% rename from .azure-pipelines/markers_check/__init__.py rename to sonic-mgmt/.azure-pipelines/markers_check/__init__.py diff --git a/.azure-pipelines/markers_check/markers_check.py b/sonic-mgmt/.azure-pipelines/markers_check/markers_check.py similarity index 100% rename from .azure-pipelines/markers_check/markers_check.py rename to sonic-mgmt/.azure-pipelines/markers_check/markers_check.py diff --git a/.azure-pipelines/meta-check.yml b/sonic-mgmt/.azure-pipelines/meta-check.yml similarity index 100% rename from .azure-pipelines/meta-check.yml rename to sonic-mgmt/.azure-pipelines/meta-check.yml diff --git a/.azure-pipelines/meta_validator.yml b/sonic-mgmt/.azure-pipelines/meta_validator.yml similarity index 100% rename from .azure-pipelines/meta_validator.yml rename to sonic-mgmt/.azure-pipelines/meta_validator.yml diff --git a/.azure-pipelines/pr_test_scripts.yaml b/sonic-mgmt/.azure-pipelines/pr_test_scripts.yaml similarity index 100% rename from .azure-pipelines/pr_test_scripts.yaml rename to sonic-mgmt/.azure-pipelines/pr_test_scripts.yaml diff --git a/.azure-pipelines/pr_test_skip_scripts.yaml b/sonic-mgmt/.azure-pipelines/pr_test_skip_scripts.yaml similarity index 100% rename from .azure-pipelines/pr_test_skip_scripts.yaml rename to sonic-mgmt/.azure-pipelines/pr_test_skip_scripts.yaml diff --git a/.azure-pipelines/pr_test_template.yml b/sonic-mgmt/.azure-pipelines/pr_test_template.yml similarity index 100% rename from .azure-pipelines/pr_test_template.yml rename to sonic-mgmt/.azure-pipelines/pr_test_template.yml diff --git a/.azure-pipelines/pre-commit-check.yml b/sonic-mgmt/.azure-pipelines/pre-commit-check.yml similarity index 100% rename from .azure-pipelines/pre-commit-check.yml rename to sonic-mgmt/.azure-pipelines/pre-commit-check.yml diff --git a/.azure-pipelines/pre_defined_pr_test.yml b/sonic-mgmt/.azure-pipelines/pre_defined_pr_test.yml similarity index 100% rename from .azure-pipelines/pre_defined_pr_test.yml rename to sonic-mgmt/.azure-pipelines/pre_defined_pr_test.yml diff --git a/.azure-pipelines/probe-tests/jobs/run-probe-tests.yml b/sonic-mgmt/.azure-pipelines/probe-tests/jobs/run-probe-tests.yml similarity index 100% rename from .azure-pipelines/probe-tests/jobs/run-probe-tests.yml rename to sonic-mgmt/.azure-pipelines/probe-tests/jobs/run-probe-tests.yml diff --git a/.azure-pipelines/probe-tests/scripts/get-changed-probe-files.sh b/sonic-mgmt/.azure-pipelines/probe-tests/scripts/get-changed-probe-files.sh similarity index 100% rename from .azure-pipelines/probe-tests/scripts/get-changed-probe-files.sh rename to sonic-mgmt/.azure-pipelines/probe-tests/scripts/get-changed-probe-files.sh diff --git a/.azure-pipelines/probe-tests/stages/probe-tests.yml b/sonic-mgmt/.azure-pipelines/probe-tests/stages/probe-tests.yml similarity index 100% rename from .azure-pipelines/probe-tests/stages/probe-tests.yml rename to sonic-mgmt/.azure-pipelines/probe-tests/stages/probe-tests.yml diff --git a/.azure-pipelines/probe-tests/steps/run-probe-tests.yml b/sonic-mgmt/.azure-pipelines/probe-tests/steps/run-probe-tests.yml similarity index 100% rename from .azure-pipelines/probe-tests/steps/run-probe-tests.yml rename to sonic-mgmt/.azure-pipelines/probe-tests/steps/run-probe-tests.yml diff --git a/.azure-pipelines/pytest-collect-only.yml b/sonic-mgmt/.azure-pipelines/pytest-collect-only.yml similarity index 100% rename from .azure-pipelines/pytest-collect-only.yml rename to sonic-mgmt/.azure-pipelines/pytest-collect-only.yml diff --git a/.azure-pipelines/recover_testbed/README.md b/sonic-mgmt/.azure-pipelines/recover_testbed/README.md similarity index 100% rename from .azure-pipelines/recover_testbed/README.md rename to sonic-mgmt/.azure-pipelines/recover_testbed/README.md diff --git a/.azure-pipelines/recover_testbed/common.py b/sonic-mgmt/.azure-pipelines/recover_testbed/common.py similarity index 100% rename from .azure-pipelines/recover_testbed/common.py rename to sonic-mgmt/.azure-pipelines/recover_testbed/common.py diff --git a/.azure-pipelines/recover_testbed/constants.py b/sonic-mgmt/.azure-pipelines/recover_testbed/constants.py similarity index 100% rename from .azure-pipelines/recover_testbed/constants.py rename to sonic-mgmt/.azure-pipelines/recover_testbed/constants.py diff --git a/.azure-pipelines/recover_testbed/dut_connection.py b/sonic-mgmt/.azure-pipelines/recover_testbed/dut_connection.py similarity index 98% rename from .azure-pipelines/recover_testbed/dut_connection.py rename to sonic-mgmt/.azure-pipelines/recover_testbed/dut_connection.py index 1c799ec5687..75728601509 100644 --- a/.azure-pipelines/recover_testbed/dut_connection.py +++ b/sonic-mgmt/.azure-pipelines/recover_testbed/dut_connection.py @@ -74,6 +74,8 @@ def creds_on_dut(sonichost): creds["console_login_options"] = hostvars.get("console_login_options", {}) + creds["console_login_options"] = hostvars.get("console_login_options", {}) + if "console_login" not in list(hostvars.keys()): console_login_creds = {} else: diff --git a/.azure-pipelines/recover_testbed/interfaces.j2 b/sonic-mgmt/.azure-pipelines/recover_testbed/interfaces.j2 similarity index 100% rename from .azure-pipelines/recover_testbed/interfaces.j2 rename to sonic-mgmt/.azure-pipelines/recover_testbed/interfaces.j2 diff --git a/.azure-pipelines/recover_testbed/recover_testbed.py b/sonic-mgmt/.azure-pipelines/recover_testbed/recover_testbed.py similarity index 100% rename from .azure-pipelines/recover_testbed/recover_testbed.py rename to sonic-mgmt/.azure-pipelines/recover_testbed/recover_testbed.py diff --git a/.azure-pipelines/recover_testbed/testbed_status.py b/sonic-mgmt/.azure-pipelines/recover_testbed/testbed_status.py similarity index 100% rename from .azure-pipelines/recover_testbed/testbed_status.py rename to sonic-mgmt/.azure-pipelines/recover_testbed/testbed_status.py diff --git a/.azure-pipelines/run-test-elastictest-template.yml b/sonic-mgmt/.azure-pipelines/run-test-elastictest-template.yml similarity index 100% rename from .azure-pipelines/run-test-elastictest-template.yml rename to sonic-mgmt/.azure-pipelines/run-test-elastictest-template.yml diff --git a/.azure-pipelines/sonic_l1_cli.py b/sonic-mgmt/.azure-pipelines/sonic_l1_cli.py similarity index 100% rename from .azure-pipelines/sonic_l1_cli.py rename to sonic-mgmt/.azure-pipelines/sonic_l1_cli.py diff --git a/.azure-pipelines/sonic_vpp/sonic-vpp-nightly.yml b/sonic-mgmt/.azure-pipelines/sonic_vpp/sonic-vpp-nightly.yml similarity index 100% rename from .azure-pipelines/sonic_vpp/sonic-vpp-nightly.yml rename to sonic-mgmt/.azure-pipelines/sonic_vpp/sonic-vpp-nightly.yml diff --git a/.azure-pipelines/test_plan.py b/sonic-mgmt/.azure-pipelines/test_plan.py similarity index 100% rename from .azure-pipelines/test_plan.py rename to sonic-mgmt/.azure-pipelines/test_plan.py diff --git a/.azure-pipelines/testbed_health_check.py b/sonic-mgmt/.azure-pipelines/testbed_health_check.py similarity index 100% rename from .azure-pipelines/testbed_health_check.py rename to sonic-mgmt/.azure-pipelines/testbed_health_check.py diff --git a/.azure-pipelines/upgrade_image.py b/sonic-mgmt/.azure-pipelines/upgrade_image.py similarity index 100% rename from .azure-pipelines/upgrade_image.py rename to sonic-mgmt/.azure-pipelines/upgrade_image.py diff --git a/.flake8 b/sonic-mgmt/.flake8 similarity index 100% rename from .flake8 rename to sonic-mgmt/.flake8 diff --git a/.github/.code-reviewers/auto-assign.py b/sonic-mgmt/.github/.code-reviewers/auto-assign.py similarity index 100% rename from .github/.code-reviewers/auto-assign.py rename to sonic-mgmt/.github/.code-reviewers/auto-assign.py diff --git a/.github/.code-reviewers/contributors.yaml b/sonic-mgmt/.github/.code-reviewers/contributors.yaml similarity index 100% rename from .github/.code-reviewers/contributors.yaml rename to sonic-mgmt/.github/.code-reviewers/contributors.yaml diff --git a/.github/.code-reviewers/folder_presets.yaml b/sonic-mgmt/.github/.code-reviewers/folder_presets.yaml similarity index 100% rename from .github/.code-reviewers/folder_presets.yaml rename to sonic-mgmt/.github/.code-reviewers/folder_presets.yaml diff --git a/.github/.code-reviewers/pr_reviewer-by-files.yml b/sonic-mgmt/.github/.code-reviewers/pr_reviewer-by-files.yml similarity index 100% rename from .github/.code-reviewers/pr_reviewer-by-files.yml rename to sonic-mgmt/.github/.code-reviewers/pr_reviewer-by-files.yml diff --git a/.github/.code-reviewers/run.sh b/sonic-mgmt/.github/.code-reviewers/run.sh similarity index 100% rename from .github/.code-reviewers/run.sh rename to sonic-mgmt/.github/.code-reviewers/run.sh diff --git a/.github/ISSUE_TEMPLATE/01-bug.yml b/sonic-mgmt/.github/ISSUE_TEMPLATE/01-bug.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/01-bug.yml rename to sonic-mgmt/.github/ISSUE_TEMPLATE/01-bug.yml diff --git a/.github/ISSUE_TEMPLATE/02-enhancement.yml b/sonic-mgmt/.github/ISSUE_TEMPLATE/02-enhancement.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/02-enhancement.yml rename to sonic-mgmt/.github/ISSUE_TEMPLATE/02-enhancement.yml diff --git a/.github/ISSUE_TEMPLATE/03-testgap.yml b/sonic-mgmt/.github/ISSUE_TEMPLATE/03-testgap.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/03-testgap.yml rename to sonic-mgmt/.github/ISSUE_TEMPLATE/03-testgap.yml diff --git a/.github/ISSUE_TEMPLATE/04-regression.yml b/sonic-mgmt/.github/ISSUE_TEMPLATE/04-regression.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/04-regression.yml rename to sonic-mgmt/.github/ISSUE_TEMPLATE/04-regression.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/sonic-mgmt/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/config.yml rename to sonic-mgmt/.github/ISSUE_TEMPLATE/config.yml diff --git a/sonic-mgmt/.github/PULL_REQUEST_TEMPLATE.md b/sonic-mgmt/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..c05019dac10 --- /dev/null +++ b/sonic-mgmt/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,57 @@ + +### Description of PR + + +Summary: +Fixes # (issue) + +### Type of change + + + +- [ ] Bug fix +- [ ] Testbed and Framework(new/improvement) +- [ ] New Test case + - [ ] Skipped for non-supported platforms +- [ ] Test case improvement + + +### Back port request +- [ ] 202311 +- [ ] 202405 +- [ ] 202411 +- [ ] 202505 +- [ ] 202511 +- [ ] 202512 +- [ ] 202605 + +### Approach +#### What is the motivation for this PR? + +#### How did you do it? + +#### How did you verify/test it? + +#### Any platform specific information? + +#### Supported testbed topology if it's a new test case? + +### Documentation + diff --git a/.github/SKIP_EXPIRY_CONFIG.yaml b/sonic-mgmt/.github/SKIP_EXPIRY_CONFIG.yaml similarity index 100% rename from .github/SKIP_EXPIRY_CONFIG.yaml rename to sonic-mgmt/.github/SKIP_EXPIRY_CONFIG.yaml diff --git a/.github/codeql/codeql-config.yml b/sonic-mgmt/.github/codeql/codeql-config.yml similarity index 100% rename from .github/codeql/codeql-config.yml rename to sonic-mgmt/.github/codeql/codeql-config.yml diff --git a/.github/copilot-instructions.md b/sonic-mgmt/.github/copilot-instructions.md similarity index 100% rename from .github/copilot-instructions.md rename to sonic-mgmt/.github/copilot-instructions.md diff --git a/.github/workflows/assignReviewers.yaml b/sonic-mgmt/.github/workflows/assignReviewers.yaml similarity index 100% rename from .github/workflows/assignReviewers.yaml rename to sonic-mgmt/.github/workflows/assignReviewers.yaml diff --git a/.github/workflows/automerge_scan.yml b/sonic-mgmt/.github/workflows/automerge_scan.yml similarity index 100% rename from .github/workflows/automerge_scan.yml rename to sonic-mgmt/.github/workflows/automerge_scan.yml diff --git a/.github/workflows/codeql-analysis.yml b/sonic-mgmt/.github/workflows/codeql-analysis.yml similarity index 100% rename from .github/workflows/codeql-analysis.yml rename to sonic-mgmt/.github/workflows/codeql-analysis.yml diff --git a/.github/workflows/pr_cherrypick_poststep.yml b/sonic-mgmt/.github/workflows/pr_cherrypick_poststep.yml similarity index 100% rename from .github/workflows/pr_cherrypick_poststep.yml rename to sonic-mgmt/.github/workflows/pr_cherrypick_poststep.yml diff --git a/.github/workflows/pr_cherrypick_prestep.yml b/sonic-mgmt/.github/workflows/pr_cherrypick_prestep.yml similarity index 100% rename from .github/workflows/pr_cherrypick_prestep.yml rename to sonic-mgmt/.github/workflows/pr_cherrypick_prestep.yml diff --git a/.github/workflows/sdn.yml b/sonic-mgmt/.github/workflows/sdn.yml similarity index 100% rename from .github/workflows/sdn.yml rename to sonic-mgmt/.github/workflows/sdn.yml diff --git a/.github/workflows/semgrep.yml b/sonic-mgmt/.github/workflows/semgrep.yml similarity index 100% rename from .github/workflows/semgrep.yml rename to sonic-mgmt/.github/workflows/semgrep.yml diff --git a/.github/workflows/skip_issue_expiry.yml b/sonic-mgmt/.github/workflows/skip_issue_expiry.yml similarity index 100% rename from .github/workflows/skip_issue_expiry.yml rename to sonic-mgmt/.github/workflows/skip_issue_expiry.yml diff --git a/sonic-mgmt/.gitignore b/sonic-mgmt/.gitignore new file mode 100644 index 00000000000..181521bbb50 --- /dev/null +++ b/sonic-mgmt/.gitignore @@ -0,0 +1,29 @@ +# Compiled Python files +*.pyc +**/__pycache__/ +**/.pytest_cache/ + +# Ansible files +.ansible +ansible.log + +# Test generated files +tests/logs +tests/_cache +tests/metadata +ansible/plugins/*/*.pyc +# Temporary trimmed inventory file +ansible/*_tmp + +# Dev tools +.vscode/ +.idea/ +**/.venv/ + +.python-version + +sonic-dump/ +**/common/sai_validation/generated/ +**/common/sai_validation/github.com/ +tests/pfc_headroom_test_params/*.json +tests/priority/*.json diff --git a/.hooks/pre_commit_hooks/__init__.py b/sonic-mgmt/.hooks/pre_commit_hooks/__init__.py similarity index 100% rename from .hooks/pre_commit_hooks/__init__.py rename to sonic-mgmt/.hooks/pre_commit_hooks/__init__.py diff --git a/.hooks/pre_commit_hooks/check_conditional_mark_sort.py b/sonic-mgmt/.hooks/pre_commit_hooks/check_conditional_mark_sort.py similarity index 100% rename from .hooks/pre_commit_hooks/check_conditional_mark_sort.py rename to sonic-mgmt/.hooks/pre_commit_hooks/check_conditional_mark_sort.py diff --git a/.markdownlint.json b/sonic-mgmt/.markdownlint.json similarity index 100% rename from .markdownlint.json rename to sonic-mgmt/.markdownlint.json diff --git a/.pre-commit-config.yaml b/sonic-mgmt/.pre-commit-config.yaml similarity index 100% rename from .pre-commit-config.yaml rename to sonic-mgmt/.pre-commit-config.yaml diff --git a/.pre-commit-hooks.yaml b/sonic-mgmt/.pre-commit-hooks.yaml similarity index 100% rename from .pre-commit-hooks.yaml rename to sonic-mgmt/.pre-commit-hooks.yaml diff --git a/LICENSE b/sonic-mgmt/LICENSE similarity index 100% rename from LICENSE rename to sonic-mgmt/LICENSE diff --git a/sonic-mgmt/Makefile b/sonic-mgmt/Makefile new file mode 100644 index 00000000000..bb050f84581 --- /dev/null +++ b/sonic-mgmt/Makefile @@ -0,0 +1,75 @@ +# Container +CONTAINER ?= sonic-mgmt +ANSIBLE_DIR := /data/sonic-mgmt/ansible +TESTS_DIR := /data/sonic-mgmt/tests + +# Testbed config +TOPO ?= vms-kvm-t0 +TESTBED ?= vtestbed.yaml +INVENTORY ?= veos_vtb +PASSFILE ?= password.txt +DUT ?= vlab-01 + +# Neighbor VM type (veos|ceos|vsonic) - simulated neighboring devices +NEIGHBOR ?= ceos + +# Test config +T ?= +EXTRA ?= -e "--skip_sanity --disable_loganalyzer" + +# TTY handling: use -t only if terminal is available (for CI compatibility) +TTY := $(shell test -t 0 && echo "-t") + +# Base exec +EXEC_ANSIBLE := docker exec $(TTY) -w $(ANSIBLE_DIR) $(CONTAINER) +EXEC_TESTS := docker exec $(TTY) -w $(TESTS_DIR) $(CONTAINER) + +.PHONY: help check-container shell add-topo remove-topo deploy-mg test + +help: + @echo "Usage: make [VARIABLE=value ...]" + @echo "" + @echo "Targets:" + @echo " shell - Enter sonic-mgmt container" + @echo " add-topo - Deploy topology" + @echo " remove-topo - Remove topology" + @echo " deploy-mg - Deploy minigraph to DUT" + @echo " test - Run tests (requires T=)" + @echo "" + @echo "Variables:" + @echo " TOPO - Topology name (default: vms-kvm-t0)" + @echo " TESTBED - Testbed file (default: vtestbed.yaml)" + @echo " INVENTORY - Inventory file (default: veos_vtb)" + @echo " DUT - DUT name (default: vlab-01)" + @echo " NEIGHBOR - Neighbor VM type: ceos|veos|vsonic (default: ceos)" + @echo " T - Test path for 'test' target" + @echo " EXTRA - Extra arguments for test (default: -e \"--skip_sanity --disable_loganalyzer\")" + @echo "" + @echo "Examples:" + @echo " make add-topo" + @echo " make add-topo TOPO=vms-kvm-t1" + @echo " make test T=bgp/test_bgp_fact.py" + @echo " make test T=bgp/test_bgp_fact.py EXTRA='-e \"--neighbor_type=sonic\"'" + +check-container: + @docker ps --format '{{.Names}}' | grep -q '^$(CONTAINER)$$' || \ + (echo "Error: Container '$(CONTAINER)' is not running." && \ + echo "Run: ./setup-container.sh -n $(CONTAINER) -d /data" && exit 1) + +shell: check-container + docker exec -it $(CONTAINER) bash + +add-topo: check-container + $(EXEC_ANSIBLE) ./testbed-cli.sh -t $(TESTBED) -m $(INVENTORY) -k $(NEIGHBOR) add-topo $(TOPO) $(PASSFILE) + +remove-topo: check-container + $(EXEC_ANSIBLE) ./testbed-cli.sh -t $(TESTBED) -m $(INVENTORY) -k $(NEIGHBOR) remove-topo $(TOPO) $(PASSFILE) + +deploy-mg: check-container + $(EXEC_ANSIBLE) ./testbed-cli.sh -t $(TESTBED) -m $(INVENTORY) deploy-mg $(TOPO) $(INVENTORY) $(PASSFILE) + +test: check-container +ifndef T + $(error T is required. Usage: make test T=bgp/test_bgp_fact.py) +endif + $(EXEC_TESTS) ./run_tests.sh -u -n $(TOPO) -d $(DUT) -f $(TESTBED) -i ../ansible/$(INVENTORY) -c $(T) $(EXTRA) diff --git a/sonic-mgmt/README.md b/sonic-mgmt/README.md new file mode 100644 index 00000000000..042b0bdca92 --- /dev/null +++ b/sonic-mgmt/README.md @@ -0,0 +1,48 @@ +# Software for Open Networking in the Cloud - SONiC + +# sonic-mgmt +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3933/badge)](https://bestpractices.coreinfrastructure.org/projects/3933) +[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/sonic-net/sonic-mgmt.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/sonic-net/sonic-mgmt/context:python) + +### Description +Management and automation code used for SONiC testbed deployment, tests and reporting. + +# Contribution guide +Please read the [contributor guide](https://github.com/sonic-net/SONiC/wiki/Becoming-a-contributor) for more details on how to contribute. + +All contributors must sign an [Individual Contributor License Agreement (ICLA)](https://docs.linuxfoundation.org/lfx/easycla/v2-current/contributors/individual-contributor) before contributions can be accepted. Visit [EasyCLA - Linux Foundation](https://docs.linuxfoundation.org/lfx/easycla) for more details. + +### GitHub Workflow + +We're following basic GitHub Flow. If you have no idea what we're talking about, check out [GitHub's official guide](https://guides.github.com/introduction/flow/). Note that merge is only performed by the repository maintainer. + +Guide for performing commits: + +* Isolate each commit to one component/bugfix/issue/feature +* Use a standard commit message format: + +> [component/folder touched]: Description intent of your changes +> +> [List of changes] +> +> Signed-off-by: Your Name your@email.com + +For example: + +> swss-common: Stabilize the ConsumerTable +> +> * Fixing autoreconf +> * Fixing unit-tests by adding checkers and initialize the DB before start +> * Adding the ability to select from multiple channels +> * Health-Monitor - The idea of the patch is that if something went wrong with the notification channel, +> we will have the option to know about it (Query the LLEN table length). +> +> Signed-off-by: user@dev.null + +* Each developer should fork this repository and [add the team as a Contributor](https://help.github.com/articles/adding-collaborators-to-a-personal-repository) +* Push your changes to your private fork and do "pull-request" to this repository +* Use a pull request to do code review +* Use issues to keep track of what is going on + +# Documentation +For more details on each component and the directory structure, please read [docs/README.md](docs/README.md) diff --git a/SECURITY.md b/sonic-mgmt/SECURITY.md similarity index 100% rename from SECURITY.md rename to sonic-mgmt/SECURITY.md diff --git a/ansible/.gitignore b/sonic-mgmt/ansible/.gitignore similarity index 100% rename from ansible/.gitignore rename to sonic-mgmt/ansible/.gitignore diff --git a/ansible/TestbedProcessing.py b/sonic-mgmt/ansible/TestbedProcessing.py similarity index 95% rename from ansible/TestbedProcessing.py rename to sonic-mgmt/ansible/TestbedProcessing.py index b1a833f84d5..90cf23cd6d0 100755 --- a/ansible/TestbedProcessing.py +++ b/sonic-mgmt/ansible/TestbedProcessing.py @@ -56,6 +56,7 @@ vmHostCreds_file = "group_vars/vm_host/creds.yml" labLinks_file = "files/sonic_lab_links.csv" testbed_file = "testbed.yaml" +testbed_csv_file = "testbed.csv" devices_file = "files/sonic_lab_devices.csv" console_links_file = "files/sonic_lab_console_links.csv" eosCred_file = "group_vars/eos/creds.yml" @@ -77,6 +78,7 @@ backupList.append(vmHostCreds_file) backupList.append(labLinks_file) backupList.append(testbed_file) +backupList.append(testbed_csv_file) backupList.append(devices_file) backupList.append(console_links_file) backupList.append(eosCred_file) @@ -346,6 +348,7 @@ def makeTestbed(data, outfile): dut = dut.__str__() dut = dut.replace(",", ";") dut = dut.replace(" ", "") + dut = dut.replace("'", "") row = confName + "," + groupName + "," + topo + "," + ptf_image_name + "," + ptf + \ "," + ptf_ip + "," + ptf_ipv6 + "," + server + \ @@ -354,6 +357,66 @@ def makeTestbed(data, outfile): except IOError: print("I/O error: issue creating testbed.yaml") +def makeTestbedYaml(data, outfile): + topology = data + csv_file = outfile + result = dict() + resultList = list() + + for group, groupDetails in topology.items(): + confName = group + groupName = groupDetails.get("group-name") + topo = groupDetails.get("topo") + ptf_image_name = groupDetails.get("ptf_image_name") + ptf_ip = groupDetails.get("ptf_ip") + ptf_ipv6 = groupDetails.get("ptf_ipv6") + server = groupDetails.get("server") + vm_base = groupDetails.get("vm_base") + dut = groupDetails.get("dut") + ptf = groupDetails.get("ptf") + comment = groupDetails.get("comment") + + # catch empty types + if not groupName: + groupName = "" + if not topo: + topo = "" + if not ptf_image_name: + ptf_image_name = "" + if not ptf_ip: + ptf_ip = "" + if not ptf_ipv6: + ptf_ipv6 = "" + if not server: + server = "" + if not vm_base: + vm_base = "" + if not dut: + dut = "" + if not ptf: + ptf = "" + if not comment: + comment = "" + if not isinstance(dut, list): + dut = [dut] + + result.update({'conf-name': confName, + 'group-name': groupName, + "topo": topo, + "ptf_image_name": ptf_image_name, + "ptf": ptf, + "ptf_ip": ptf_ip, + "ptf_ipv6": ptf_ipv6, + "server": server, + "vm_base": vm_base, + "dut": dut, + "inv_name": 'lab', + "auto_recover": 'True', + "comment": comment}) + resultList.append(result) + with open(outfile, "w") as toWrite: + yaml.dump(resultList, stream=toWrite, default_flow_style=False, sort_keys=False) + """ makeSonicLabLinks(data, outfile) @@ -1144,7 +1207,7 @@ def main(): # Load Data print("LOADING PROCESS STARTED") print("LOADING: " + args.i) - doc = yaml.safe_load(open(args.i, 'r')) + doc = yaml.load(open(args.i, 'r'), Loader=yaml.FullLoader) # dictionary contains information about devices devices = dict() generateDictionary(doc, devices, "devices") # load devices @@ -1187,6 +1250,8 @@ def main(): makeSonicLabConsoleLinks(devices, args.basedir + console_links_file) print("\tCREATING TEST BED: " + args.basedir + testbed_file) # Generate testbed.yaml (TESTBED) + #makeTestbed(testbed, args.basedir + testbed_csv_file) + #makeTestbedYaml(testbed, args.basedir + testbed_file) makeTestbed(testbed, args.basedir + testbed_file) print("\tCREATING VM_HOST/CREDS: " + args.basedir + vmHostCreds_file) # Generate vm_host\creds.yml (CREDS) @@ -1205,7 +1270,7 @@ def main(): print("\tCREATING LAB FILE: " + args.basedir + lab_file) if args.yaml: # Generate lab in YAML file format (LAB) - makeLabYAML(device_groups, devices, testbed, args.basedir + lab_file) + makeLab(device_groups, devices, testbed, args.basedir + lab_file) else: makeLab(device_groups, devices, testbed, args.basedir + lab_file) # Generate lab in INI file format (LAB) diff --git a/ansible/allocate_device_ip.py b/sonic-mgmt/ansible/allocate_device_ip.py similarity index 100% rename from ansible/allocate_device_ip.py rename to sonic-mgmt/ansible/allocate_device_ip.py diff --git a/ansible/ansible.cfg b/sonic-mgmt/ansible/ansible.cfg similarity index 100% rename from ansible/ansible.cfg rename to sonic-mgmt/ansible/ansible.cfg diff --git a/ansible/basic_check.yml b/sonic-mgmt/ansible/basic_check.yml similarity index 100% rename from ansible/basic_check.yml rename to sonic-mgmt/ansible/basic_check.yml diff --git a/ansible/boot_onie.yml b/sonic-mgmt/ansible/boot_onie.yml similarity index 100% rename from ansible/boot_onie.yml rename to sonic-mgmt/ansible/boot_onie.yml diff --git a/ansible/ceos_topo_converger.py b/sonic-mgmt/ansible/ceos_topo_converger.py similarity index 100% rename from ansible/ceos_topo_converger.py rename to sonic-mgmt/ansible/ceos_topo_converger.py diff --git a/ansible/cliconf_plugins/aos.py b/sonic-mgmt/ansible/cliconf_plugins/aos.py similarity index 100% rename from ansible/cliconf_plugins/aos.py rename to sonic-mgmt/ansible/cliconf_plugins/aos.py diff --git a/ansible/collect_show_tech.yml b/sonic-mgmt/ansible/collect_show_tech.yml similarity index 100% rename from ansible/collect_show_tech.yml rename to sonic-mgmt/ansible/collect_show_tech.yml diff --git a/ansible/config_connection_db.yml b/sonic-mgmt/ansible/config_connection_db.yml similarity index 100% rename from ansible/config_connection_db.yml rename to sonic-mgmt/ansible/config_connection_db.yml diff --git a/ansible/config_l1_testbed.yml b/sonic-mgmt/ansible/config_l1_testbed.yml similarity index 100% rename from ansible/config_l1_testbed.yml rename to sonic-mgmt/ansible/config_l1_testbed.yml diff --git a/ansible/config_ptf_network_for_ocs.sh b/sonic-mgmt/ansible/config_ptf_network_for_ocs.sh similarity index 100% rename from ansible/config_ptf_network_for_ocs.sh rename to sonic-mgmt/ansible/config_ptf_network_for_ocs.sh diff --git a/ansible/config_sonic_basedon_testbed.yml b/sonic-mgmt/ansible/config_sonic_basedon_testbed.yml similarity index 100% rename from ansible/config_sonic_basedon_testbed.yml rename to sonic-mgmt/ansible/config_sonic_basedon_testbed.yml diff --git a/ansible/config_y_cable.yml b/sonic-mgmt/ansible/config_y_cable.yml similarity index 100% rename from ansible/config_y_cable.yml rename to sonic-mgmt/ansible/config_y_cable.yml diff --git a/ansible/deploy_certs.yml b/sonic-mgmt/ansible/deploy_certs.yml similarity index 100% rename from ansible/deploy_certs.yml rename to sonic-mgmt/ansible/deploy_certs.yml diff --git a/ansible/deploy_config_on_testbed.yml b/sonic-mgmt/ansible/deploy_config_on_testbed.yml similarity index 100% rename from ansible/deploy_config_on_testbed.yml rename to sonic-mgmt/ansible/deploy_config_on_testbed.yml diff --git a/ansible/deploy_sonic.yml b/sonic-mgmt/ansible/deploy_sonic.yml similarity index 100% rename from ansible/deploy_sonic.yml rename to sonic-mgmt/ansible/deploy_sonic.yml diff --git a/ansible/devutil/__init__.py b/sonic-mgmt/ansible/devutil/__init__.py similarity index 100% rename from ansible/devutil/__init__.py rename to sonic-mgmt/ansible/devutil/__init__.py diff --git a/ansible/devutil/conn_graph_helper.py b/sonic-mgmt/ansible/devutil/conn_graph_helper.py similarity index 100% rename from ansible/devutil/conn_graph_helper.py rename to sonic-mgmt/ansible/devutil/conn_graph_helper.py diff --git a/ansible/devutil/device_inventory.py b/sonic-mgmt/ansible/devutil/device_inventory.py similarity index 100% rename from ansible/devutil/device_inventory.py rename to sonic-mgmt/ansible/devutil/device_inventory.py diff --git a/ansible/devutil/devices/__init__.py b/sonic-mgmt/ansible/devutil/devices/__init__.py similarity index 100% rename from ansible/devutil/devices/__init__.py rename to sonic-mgmt/ansible/devutil/devices/__init__.py diff --git a/ansible/devutil/devices/ansible_hosts.py b/sonic-mgmt/ansible/devutil/devices/ansible_hosts.py similarity index 100% rename from ansible/devutil/devices/ansible_hosts.py rename to sonic-mgmt/ansible/devutil/devices/ansible_hosts.py diff --git a/ansible/devutil/devices/chassis_utils.py b/sonic-mgmt/ansible/devutil/devices/chassis_utils.py similarity index 100% rename from ansible/devutil/devices/chassis_utils.py rename to sonic-mgmt/ansible/devutil/devices/chassis_utils.py diff --git a/ansible/devutil/devices/dpu_utils.py b/sonic-mgmt/ansible/devutil/devices/dpu_utils.py similarity index 100% rename from ansible/devutil/devices/dpu_utils.py rename to sonic-mgmt/ansible/devutil/devices/dpu_utils.py diff --git a/ansible/devutil/devices/factory.py b/sonic-mgmt/ansible/devutil/devices/factory.py similarity index 100% rename from ansible/devutil/devices/factory.py rename to sonic-mgmt/ansible/devutil/devices/factory.py diff --git a/ansible/devutil/devices/sonic.py b/sonic-mgmt/ansible/devutil/devices/sonic.py similarity index 66% rename from ansible/devutil/devices/sonic.py rename to sonic-mgmt/ansible/devutil/devices/sonic.py index 9f9749e8bbf..1168caaebbe 100644 --- a/ansible/devutil/devices/sonic.py +++ b/sonic-mgmt/ansible/devutil/devices/sonic.py @@ -1,4 +1,5 @@ import logging +import re import time import yaml @@ -213,6 +214,109 @@ def post_upgrade_actions(sonichosts, localhost, disk_used_percent): return False +def is_nat_enabled_for_dpu(npu_host): + """Check if NAT DNAT rules for DPU SSH access exist on *npu_host*.""" + try: + nat_output = npu_host.shell( + "sudo iptables -t nat -L", module_ignore_errors=True + ).get("stdout", "") + pattern = r'.*DNAT.*tcp.*anywhere.*anywhere.*tcp dpt:.* to:169\.254\.200.*22.*' + if re.search(pattern, nat_output): + logger.info("NAT is already enabled on %s", npu_host.hostname) + return True + except Exception as e: + logger.warning("Failed to check NAT status on %s: %s", npu_host.hostname, repr(e)) + return False + + +def get_dpu_name_ssh_port_dict(npu_host, inventories, dpu_hostnames): + """Build a {dpuN: ssh_port} dict for DPUs that belong to *npu_host*.""" + from .factory import init_host # local import to avoid circular dependency + + npu_hostname = npu_host.hostname + dpu_name_ssh_port_dict = {} + for dpu_hostname in dpu_hostnames: + if npu_hostname not in dpu_hostname: + continue + try: + dpu_host_obj = init_host(inventories, dpu_hostname) + if dpu_host_obj: + ssh_port = dpu_host_obj.get_host_visible_var(dpu_hostname, "ansible_ssh_port") + if ssh_port: + match = re.search(r"dpu[.-]?(\d+)", dpu_hostname, re.IGNORECASE) + if match: + dpu_name = "dpu{}".format(match.group(1)) + dpu_name_ssh_port_dict[dpu_name] = str(ssh_port) + logger.info("Found DPU %s with SSH port %s for NPU %s", + dpu_name, ssh_port, npu_hostname) + except Exception as e: + logger.warning("Failed to get SSH port for %s: %s", dpu_hostname, repr(e)) + return dpu_name_ssh_port_dict + + +def enable_nat_for_dpuhosts(npu_sonichosts, inventories, dpu_hostnames): + """Enable NAT on NPU hosts so DPU SSH proxy ports become reachable. + + This is the canonical implementation used by both ``upgrade_image.py`` + and ``testbed_health_check.py``. + + Args: + npu_sonichosts: Iterable of AnsibleHost objects for NPU hosts + (SonicHosts instance or plain list). + inventories: Ansible inventory path(s). + dpu_hostnames: List of DPU hostname strings. + """ + if not dpu_hostnames: + return + + logger.info("Enabling NAT for DPU hosts: %s", dpu_hostnames) + + for npu_host in npu_sonichosts: + npu_hostname = npu_host.hostname + + if is_nat_enabled_for_dpu(npu_host): + continue + + dpu_name_ssh_port_dict = get_dpu_name_ssh_port_dict(npu_host, inventories, dpu_hostnames) + if not dpu_name_ssh_port_dict: + logger.info("No DPUs found for NPU %s. Skipping NAT.", npu_hostname) + continue + + logger.info("Enabling NAT on %s for DPUs: %s", npu_hostname, dpu_name_ssh_port_dict) + try: + # Determine sysctl file based on OS version + os_release = npu_host.shell( + "cat /etc/os-release", module_ignore_errors=True + ).get("stdout", "") + is_bookworm = "bookworm" in os_release + sysctl_file = "/etc/sysctl.conf" if is_bookworm else "/usr/lib/sysctl.d/90-sonic.conf" + + # Enable IP forwarding + npu_host.shell("echo net.ipv4.ip_forward=1 >> {}".format(sysctl_file), + module_attrs={"become": True}) + npu_host.shell("echo net.ipv4.conf.eth0.forwarding=1 >> {}".format(sysctl_file), + module_attrs={"become": True}) + npu_host.shell("sysctl -p {}".format(sysctl_file), + module_attrs={"become": True}) + + # Set up DNAT rules via sonic-dpu-mgmt-traffic.sh + dpus_arg = ",".join(dpu_name_ssh_port_dict.keys()) + ports_arg = ",".join(dpu_name_ssh_port_dict.values()) + nat_cmd = "sonic-dpu-mgmt-traffic.sh inbound -e --dpus {} --ports {}".format(dpus_arg, ports_arg) + npu_host.shell(nat_cmd, module_attrs={"become": True}) + + # Persist iptables rules + npu_host.shell("iptables-save > /etc/iptables/rules.v4", + module_attrs={"become": True}) + + if is_nat_enabled_for_dpu(npu_host): + logger.info("Successfully enabled NAT on %s", npu_hostname) + else: + logger.warning("NAT enablement verification failed on %s", npu_hostname) + except Exception as e: + logger.error("Failed to enable NAT on %s: %s", npu_hostname, repr(e)) + + def upgrade_image(sonichosts, localhost, image_url, upgrade_type="sonic", disk_used_percent=50, onie_pause_time=0): if upgrade_type not in sonichosts.SUPPORTED_UPGRADE_TYPES: logger.error( diff --git a/ansible/devutil/inv_helpers.py b/sonic-mgmt/ansible/devutil/inv_helpers.py similarity index 100% rename from ansible/devutil/inv_helpers.py rename to sonic-mgmt/ansible/devutil/inv_helpers.py diff --git a/ansible/devutil/ssh_session_repo.py b/sonic-mgmt/ansible/devutil/ssh_session_repo.py similarity index 100% rename from ansible/devutil/ssh_session_repo.py rename to sonic-mgmt/ansible/devutil/ssh_session_repo.py diff --git a/ansible/devutil/ssh_utils.py b/sonic-mgmt/ansible/devutil/ssh_utils.py similarity index 100% rename from ansible/devutil/ssh_utils.py rename to sonic-mgmt/ansible/devutil/ssh_utils.py diff --git a/ansible/devutil/task_runner.py b/sonic-mgmt/ansible/devutil/task_runner.py similarity index 100% rename from ansible/devutil/task_runner.py rename to sonic-mgmt/ansible/devutil/task_runner.py diff --git a/ansible/devutil/testbed.py b/sonic-mgmt/ansible/devutil/testbed.py similarity index 100% rename from ansible/devutil/testbed.py rename to sonic-mgmt/ansible/devutil/testbed.py diff --git a/ansible/devutil/testbed_helper.py b/sonic-mgmt/ansible/devutil/testbed_helper.py similarity index 100% rename from ansible/devutil/testbed_helper.py rename to sonic-mgmt/ansible/devutil/testbed_helper.py diff --git a/ansible/devutils b/sonic-mgmt/ansible/devutils similarity index 100% rename from ansible/devutils rename to sonic-mgmt/ansible/devutils diff --git a/ansible/dualtor/config_simulated_y_cable.yml b/sonic-mgmt/ansible/dualtor/config_simulated_y_cable.yml similarity index 100% rename from ansible/dualtor/config_simulated_y_cable.yml rename to sonic-mgmt/ansible/dualtor/config_simulated_y_cable.yml diff --git a/ansible/dualtor/mux_simulator.json.j2 b/sonic-mgmt/ansible/dualtor/mux_simulator.json.j2 similarity index 100% rename from ansible/dualtor/mux_simulator.json.j2 rename to sonic-mgmt/ansible/dualtor/mux_simulator.json.j2 diff --git a/ansible/dualtor/nic_simulator/__init__.py b/sonic-mgmt/ansible/dualtor/nic_simulator/__init__.py similarity index 100% rename from ansible/dualtor/nic_simulator/__init__.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/__init__.py diff --git a/ansible/dualtor/nic_simulator/nic_simulator.py b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator.py similarity index 96% rename from ansible/dualtor/nic_simulator/nic_simulator.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator.py index 88520a498e9..fe14baa6986 100644 --- a/ansible/dualtor/nic_simulator/nic_simulator.py +++ b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator.py @@ -34,7 +34,6 @@ THREAD_CONCURRENCY_PER_SERVER = 2 -USE_HASH_SELECTION_METHOD_EXPLICITLY = False # name templates ACTIVE_ACTIVE_BRIDGE_TEMPLATE = r"baa-%s-%d" @@ -44,7 +43,6 @@ ACTIVE_ACTIVE_INTERFACE_PATTERN = r"iaa-[\w-]+-\d+" SERVER_NIC_INTERFACE_TEMPLATE = r"nic-%s-%d" SERVER_NIC_INTERFACE_PATTERN = r"nic-[\w-]+-\d+" -OVS_VERSION_PATTERN = r"ovs-vsctl \(Open vSwitch\) (.*)" # gRPC settings GRPC_TIMEOUT = 0.5 @@ -95,7 +93,6 @@ def run_command(cmd, check=True): class OVSCommand(object): """OVS related commands.""" - OVS_VSCTL_SHOW_VERSION_COMD = "ovs-vsctl -V" OVS_VSCTL_LIST_BR_CMD = "ovs-vsctl list-br" OVS_VSCTL_LIST_PORTS_CMD = "ovs-vsctl list-ports {bridge_name}" OVS_OFCTL_DEL_FLOWS_CMD = "ovs-ofctl del-flows {bridge_name}" @@ -105,26 +102,6 @@ class OVSCommand(object): OVS_OFCTL_ADD_GROUP_CMD = "ovs-ofctl -O OpenFlow13 add-group {bridge_name} {group}" OVS_OFCTL_MOD_GROUP_CMD = "ovs-ofctl -O OpenFlow13 mod-group {bridge_name} {group}" - @staticmethod - def setup_openflow_version(): - - def _versiontuple(v): - return tuple(map(int, (v.split(".")))) - - try: - out = run_command(OVSCommand.OVS_VSCTL_SHOW_VERSION_COMD) - first_line = out.stdout.splitlines()[0] - ovs_version = _versiontuple(re.search(OVS_VERSION_PATTERN, first_line).groups()[0]) - # NOTE: use openflow15 for OVS 2.10 and above - if ovs_version >= _versiontuple("2.10"): - global USE_HASH_SELECTION_METHOD_EXPLICITLY - USE_HASH_SELECTION_METHOD_EXPLICITLY = True - OVSCommand.OVS_OFCTL_DEL_GROUPS_CMD = "ovs-ofctl -O OpenFlow15 del-groups {bridge_name}" - OVSCommand.OVS_OFCTL_ADD_GROUP_CMD = "ovs-ofctl -O OpenFlow15 add-group {bridge_name} {group}" - OVSCommand.OVS_OFCTL_MOD_GROUP_CMD = "ovs-ofctl -O OpenFlow15 mod-group {bridge_name} {group}" - except Exception: - raise ValueError("Failed to find/setup openflow version: %s" % out.stdout) - @staticmethod def ovs_vsctl_list_br(): return run_command(OVSCommand.OVS_VSCTL_LIST_BR_CMD) @@ -184,18 +161,14 @@ def __repr__(self): class OVSGroup(StrObj): """Object to represent an OVS group.""" - __slots__ = ("group_id", "group_type", "output_ports", "_str_prefix", "optional_fields") + __slots__ = ("group_id", "group_type", "output_ports", "_str_prefix") - def __init__(self, group_id, group_type, output_ports=[], optional_fields=None): + def __init__(self, group_id, group_type, output_ports=[]): self.group_id = group_id self.group_type = group_type self.output_ports = set(output_ports) self._str_prefix = "group_id=%s,type=%s" % ( self.group_id, self.group_type) - if optional_fields: - self._str_prefix += "," - self._str_prefix += ",".join("%s=%s" % kv for kv in optional_fields.items()) - self.optional_fields = optional_fields or [] def to_string(self): group_parts = [self._str_prefix] @@ -323,10 +296,8 @@ def __init__( output_ports.append(upper_tor_port) if lower_tor_forwarding_state == ForwardingState.ACTIVE: output_ports.append(lower_tor_port) - optional_fields = {"selection_method": "hash"} if USE_HASH_SELECTION_METHOD_EXPLICITLY else None super(UpstreamECMPGroup, self).__init__( - group_id, "select", output_ports=output_ports, optional_fields=optional_fields - ) + group_id, "select", output_ports=output_ports) self.upper_tor_port = upper_tor_port self.lower_tor_port = lower_tor_port self.upper_tor_forwarding_state = upper_tor_forwarding_state @@ -1325,7 +1296,6 @@ def main(): logging.debug("Start nic_simulator with args: %s", args) config_env() config_logging(args.vm_set, args.log_level.upper(), args.stdout_log) - OVSCommand.setup_openflow_version() loopback_ips = args.loopback_ips.split(",") if len(loopback_ips) != 3: raise ValueError("Invalid loopback ips: {loopback_ips}".format(loopback_ips=loopback_ips)) diff --git a/ansible/dualtor/nic_simulator/nic_simulator_client.py b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_client.py similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_client.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_client.py diff --git a/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service.proto b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service.proto similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service.proto rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service.proto diff --git a/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2.py b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2.py similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2.py diff --git a/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2_grpc.py b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2_grpc.py similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2_grpc.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_mgmt_service_pb2_grpc.py diff --git a/ansible/dualtor/nic_simulator/nic_simulator_grpc_service.proto b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_service.proto similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_grpc_service.proto rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_service.proto diff --git a/ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2.py b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2.py similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2.py diff --git a/ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2_grpc.py b/sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2_grpc.py similarity index 100% rename from ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2_grpc.py rename to sonic-mgmt/ansible/dualtor/nic_simulator/nic_simulator_grpc_service_pb2_grpc.py diff --git a/ansible/eos.yml b/sonic-mgmt/ansible/eos.yml similarity index 100% rename from ansible/eos.yml rename to sonic-mgmt/ansible/eos.yml diff --git a/ansible/example_ixia b/sonic-mgmt/ansible/example_ixia similarity index 100% rename from ansible/example_ixia rename to sonic-mgmt/ansible/example_ixia diff --git a/ansible/fanout.yml b/sonic-mgmt/ansible/fanout.yml similarity index 100% rename from ansible/fanout.yml rename to sonic-mgmt/ansible/fanout.yml diff --git a/ansible/fanout_connect.yml b/sonic-mgmt/ansible/fanout_connect.yml similarity index 100% rename from ansible/fanout_connect.yml rename to sonic-mgmt/ansible/fanout_connect.yml diff --git a/ansible/files/check_testbed_and_inventory_file.py b/sonic-mgmt/ansible/files/check_testbed_and_inventory_file.py similarity index 100% rename from ansible/files/check_testbed_and_inventory_file.py rename to sonic-mgmt/ansible/files/check_testbed_and_inventory_file.py diff --git a/ansible/files/docker-chrony/Dockerfile b/sonic-mgmt/ansible/files/docker-chrony/Dockerfile similarity index 100% rename from ansible/files/docker-chrony/Dockerfile rename to sonic-mgmt/ansible/files/docker-chrony/Dockerfile diff --git a/ansible/files/docker-chrony/chrony.conf b/sonic-mgmt/ansible/files/docker-chrony/chrony.conf similarity index 100% rename from ansible/files/docker-chrony/chrony.conf rename to sonic-mgmt/ansible/files/docker-chrony/chrony.conf diff --git a/ansible/files/graph_groups.yml b/sonic-mgmt/ansible/files/graph_groups.yml similarity index 100% rename from ansible/files/graph_groups.yml rename to sonic-mgmt/ansible/files/graph_groups.yml diff --git a/ansible/files/sonic_lab_bmc_links.csv b/sonic-mgmt/ansible/files/sonic_lab_bmc_links.csv similarity index 100% rename from ansible/files/sonic_lab_bmc_links.csv rename to sonic-mgmt/ansible/files/sonic_lab_bmc_links.csv diff --git a/ansible/files/sonic_lab_console_links.csv b/sonic-mgmt/ansible/files/sonic_lab_console_links.csv similarity index 100% rename from ansible/files/sonic_lab_console_links.csv rename to sonic-mgmt/ansible/files/sonic_lab_console_links.csv diff --git a/ansible/files/sonic_lab_devices.csv b/sonic-mgmt/ansible/files/sonic_lab_devices.csv similarity index 77% rename from ansible/files/sonic_lab_devices.csv rename to sonic-mgmt/ansible/files/sonic_lab_devices.csv index 59a460c7b70..ba7a927d065 100644 --- a/ansible/files/sonic_lab_devices.csv +++ b/sonic-mgmt/ansible/files/sonic_lab_devices.csv @@ -11,6 +11,9 @@ management-1,192.168.10.3/23,Sonic,MgmtTsToRRouter,,sonic switch01,192.168.0.100/24,SKU,DevSonic,,sonic switch01-bmc,192.168.0.101/24,bmc,DevSonic,,sonic switch01-bmc-con,192.168.0.101/24,bmc,ConsoleServer,ssh,sonic +switch01,192.168.0.100/24,SKU,DevSonic,,sonic +switch01-bmc,192.168.0.101/24,bmc,DevSonic,,sonic +switch01-bmc-con,192.168.0.101/24,bmc,ConsoleServer,ssh,sonic vnut-t0-01,10.250.0.210/24,Force10-S6000,DevSonic,,sonic, vnut-t0-02,10.250.0.211/24,Force10-S6000,DevSonic,,sonic, vnut-t1-01,10.250.0.212/24,Force10-S6000,DevSonic,,sonic, @@ -19,3 +22,7 @@ vnut-l2snk-01,10.250.0.213/24,Force10-S6000,DevSonic,,sonic, vnut-l2msnk-01,10.250.0.214/24,Force10-S6000,DevSonic,,sonic, vnut-l2msnk-02,10.250.0.215/24,Force10-S6000,DevSonic,,sonic, vnut-l2snk-tg,10.250.0.221/24,IxiaChassis,DevIxiaChassis,,ixia, +sonic-ucs-m3-2,1.74.23.19,,blank,ssh,ubuntu +docker-ptf,192.168.122.133/24,,blank, +mathilda-01,192.168.122.42,Cisco-8102-C64,DevSonic, +nexus-5,10.251.0.13/23,Arista-7260QX-64,FanoutLeaf, diff --git a/ansible/files/sonic_lab_links.csv b/sonic-mgmt/ansible/files/sonic_lab_links.csv similarity index 55% rename from ansible/files/sonic_lab_links.csv rename to sonic-mgmt/ansible/files/sonic_lab_links.csv index 5e737cf99da..81ac7a9f6dd 100644 --- a/ansible/files/sonic_lab_links.csv +++ b/sonic-mgmt/ansible/files/sonic_lab_links.csv @@ -1,4 +1,68 @@ StartDevice,StartPort,EndDevice,EndPort,BandWidth,VlanID,VlanMode,AutoNeg +mathilda-01,Ethernet0,nexus-5,Ethernet1/0,100000,2000,Access +mathilda-01,Ethernet4,nexus-5,Ethernet1/1,100000,2001,Access +mathilda-01,Ethernet8,nexus-5,Ethernet1/2,100000,2002,Access +mathilda-01,Ethernet12,nexus-5,Ethernet1/3,100000,2003,Access +mathilda-01,Ethernet16,nexus-5,Ethernet1/4,100000,2004,Access +mathilda-01,Ethernet20,nexus-5,Ethernet1/5,100000,2005,Access +mathilda-01,Ethernet24,nexus-5,Ethernet1/6,100000,2006,Access +mathilda-01,Ethernet28,nexus-5,Ethernet1/7,100000,2007,Access +mathilda-01,Ethernet32,nexus-5,Ethernet1/8,100000,2008,Access +mathilda-01,Ethernet36,nexus-5,Ethernet1/9,100000,2009,Access +mathilda-01,Ethernet40,nexus-5,Ethernet1/10,100000,2010,Access +mathilda-01,Ethernet44,nexus-5,Ethernet1/11,100000,2011,Access +mathilda-01,Ethernet48,nexus-5,Ethernet1/12,100000,2012,Access +mathilda-01,Ethernet52,nexus-5,Ethernet1/13,100000,2013,Access +mathilda-01,Ethernet56,nexus-5,Ethernet1/14,100000,2014,Access +mathilda-01,Ethernet60,nexus-5,Ethernet1/15,100000,2015,Access +mathilda-01,Ethernet64,nexus-5,Ethernet1/16,100000,2016,Access +mathilda-01,Ethernet68,nexus-5,Ethernet1/17,100000,2017,Access +mathilda-01,Ethernet72,nexus-5,Ethernet1/18,100000,2018,Access +mathilda-01,Ethernet76,nexus-5,Ethernet1/19,100000,2019,Access +mathilda-01,Ethernet80,nexus-5,Ethernet1/20,100000,2020,Access +mathilda-01,Ethernet84,nexus-5,Ethernet1/21,100000,2021,Access +mathilda-01,Ethernet88,nexus-5,Ethernet1/22,100000,2022,Access +mathilda-01,Ethernet92,nexus-5,Ethernet1/23,100000,2023,Access +mathilda-01,Ethernet96,nexus-5,Ethernet1/24,100000,2024,Access +mathilda-01,Ethernet100,nexus-5,Ethernet1/25,100000,2025,Access +mathilda-01,Ethernet104,nexus-5,Ethernet1/26,100000,2026,Access +mathilda-01,Ethernet108,nexus-5,Ethernet1/27,100000,2027,Access +mathilda-01,Ethernet112,nexus-5,Ethernet1/28,100000,2028,Access +mathilda-01,Ethernet116,nexus-5,Ethernet1/29,100000,2029,Access +mathilda-01,Ethernet120,nexus-5,Ethernet1/30,100000,2030,Access +mathilda-01,Ethernet124,nexus-5,Ethernet1/31,100000,2031,Access +mathilda-01,Ethernet128,nexus-5,Ethernet1/32,100000,2032,Access +mathilda-01,Ethernet132,nexus-5,Ethernet1/33,100000,2033,Access +mathilda-01,Ethernet136,nexus-5,Ethernet1/34,100000,2034,Access +mathilda-01,Ethernet140,nexus-5,Ethernet1/35,100000,2035,Access +mathilda-01,Ethernet144,nexus-5,Ethernet1/36,100000,2036,Access +mathilda-01,Ethernet148,nexus-5,Ethernet1/37,100000,2037,Access +mathilda-01,Ethernet152,nexus-5,Ethernet1/38,100000,2038,Access +mathilda-01,Ethernet156,nexus-5,Ethernet1/39,100000,2039,Access +mathilda-01,Ethernet160,nexus-5,Ethernet1/40,100000,2040,Access +mathilda-01,Ethernet164,nexus-5,Ethernet1/41,100000,2041,Access +mathilda-01,Ethernet168,nexus-5,Ethernet1/42,100000,2042,Access +mathilda-01,Ethernet172,nexus-5,Ethernet1/43,100000,2043,Access +mathilda-01,Ethernet176,nexus-5,Ethernet1/44,100000,2044,Access +mathilda-01,Ethernet180,nexus-5,Ethernet1/45,100000,2045,Access +mathilda-01,Ethernet184,nexus-5,Ethernet1/46,100000,2046,Access +mathilda-01,Ethernet188,nexus-5,Ethernet1/47,100000,2047,Access +mathilda-01,Ethernet192,nexus-5,Ethernet1/48,100000,2048,Access +mathilda-01,Ethernet196,nexus-5,Ethernet1/49,100000,2049,Access +mathilda-01,Ethernet200,nexus-5,Ethernet1/50,100000,2050,Access +mathilda-01,Ethernet204,nexus-5,Ethernet1/51,100000,2051,Access +mathilda-01,Ethernet208,nexus-5,Ethernet1/52,100000,2052,Access +mathilda-01,Ethernet212,nexus-5,Ethernet1/53,100000,2053,Access +mathilda-01,Ethernet216,nexus-5,Ethernet1/54,100000,2054,Access +mathilda-01,Ethernet220,nexus-5,Ethernet1/55,100000,2055,Access +mathilda-01,Ethernet224,nexus-5,Ethernet1/56,100000,2056,Access +mathilda-01,Ethernet228,nexus-5,Ethernet1/57,100000,2057,Access +mathilda-01,Ethernet232,nexus-5,Ethernet1/58,100000,2058,Access +mathilda-01,Ethernet236,nexus-5,Ethernet1/59,100000,2059,Access +mathilda-01,Ethernet240,nexus-5,Ethernet1/60,100000,2060,Access +mathilda-01,Ethernet244,nexus-5,Ethernet1/61,100000,2061,Access +mathilda-01,Ethernet248,nexus-5,Ethernet1/62,100000,2062,Access +mathilda-01,Ethernet252,nexus-5,Ethernet1/63,100000,2063,Access str-msn2700-01,Ethernet0,str-7260-10,Ethernet1,40000,1681,Access,on str-msn2700-01,Ethernet4,str-7260-10,Ethernet2,40000,1682,Access,on str-msn2700-01,Ethernet8,str-7260-10,Ethernet3,40000,1683,Access,on diff --git a/ansible/files/sonic_lab_links_uhd.csv b/sonic-mgmt/ansible/files/sonic_lab_links_uhd.csv similarity index 100% rename from ansible/files/sonic_lab_links_uhd.csv rename to sonic-mgmt/ansible/files/sonic_lab_links_uhd.csv diff --git a/ansible/files/sonic_lab_pdu_links.csv b/sonic-mgmt/ansible/files/sonic_lab_pdu_links.csv similarity index 100% rename from ansible/files/sonic_lab_pdu_links.csv rename to sonic-mgmt/ansible/files/sonic_lab_pdu_links.csv diff --git a/ansible/files/sonic_lab_serial_links.csv b/sonic-mgmt/ansible/files/sonic_lab_serial_links.csv similarity index 100% rename from ansible/files/sonic_lab_serial_links.csv rename to sonic-mgmt/ansible/files/sonic_lab_serial_links.csv diff --git a/ansible/files/sonic_snappi-sonic_devices.csv b/sonic-mgmt/ansible/files/sonic_snappi-sonic_devices.csv similarity index 100% rename from ansible/files/sonic_snappi-sonic_devices.csv rename to sonic-mgmt/ansible/files/sonic_snappi-sonic_devices.csv diff --git a/ansible/files/sonic_snappi-sonic_links.csv b/sonic-mgmt/ansible/files/sonic_snappi-sonic_links.csv similarity index 100% rename from ansible/files/sonic_snappi-sonic_links.csv rename to sonic-mgmt/ansible/files/sonic_snappi-sonic_links.csv diff --git a/ansible/generate_topo.py b/sonic-mgmt/ansible/generate_topo.py similarity index 100% rename from ansible/generate_topo.py rename to sonic-mgmt/ansible/generate_topo.py diff --git a/ansible/golden_config_db/dhcp_server_mx.json b/sonic-mgmt/ansible/golden_config_db/dhcp_server_mx.json similarity index 100% rename from ansible/golden_config_db/dhcp_server_mx.json rename to sonic-mgmt/ansible/golden_config_db/dhcp_server_mx.json diff --git a/ansible/golden_config_db/smartswitch_dpu_extra.json b/sonic-mgmt/ansible/golden_config_db/smartswitch_dpu_extra.json similarity index 100% rename from ansible/golden_config_db/smartswitch_dpu_extra.json rename to sonic-mgmt/ansible/golden_config_db/smartswitch_dpu_extra.json diff --git a/ansible/golden_config_db/smartswitch_t1.json b/sonic-mgmt/ansible/golden_config_db/smartswitch_t1.json similarity index 100% rename from ansible/golden_config_db/smartswitch_t1.json rename to sonic-mgmt/ansible/golden_config_db/smartswitch_t1.json diff --git a/ansible/group_vars/all/connection_db.yml b/sonic-mgmt/ansible/group_vars/all/connection_db.yml similarity index 100% rename from ansible/group_vars/all/connection_db.yml rename to sonic-mgmt/ansible/group_vars/all/connection_db.yml diff --git a/ansible/group_vars/all/corefile_uploader.yml b/sonic-mgmt/ansible/group_vars/all/corefile_uploader.yml similarity index 100% rename from ansible/group_vars/all/corefile_uploader.yml rename to sonic-mgmt/ansible/group_vars/all/corefile_uploader.yml diff --git a/ansible/group_vars/all/creds.yml b/sonic-mgmt/ansible/group_vars/all/creds.yml similarity index 100% rename from ansible/group_vars/all/creds.yml rename to sonic-mgmt/ansible/group_vars/all/creds.yml diff --git a/ansible/group_vars/all/env.yml b/sonic-mgmt/ansible/group_vars/all/env.yml similarity index 100% rename from ansible/group_vars/all/env.yml rename to sonic-mgmt/ansible/group_vars/all/env.yml diff --git a/ansible/group_vars/all/inv_mapping.yml b/sonic-mgmt/ansible/group_vars/all/inv_mapping.yml similarity index 100% rename from ansible/group_vars/all/inv_mapping.yml rename to sonic-mgmt/ansible/group_vars/all/inv_mapping.yml diff --git a/ansible/group_vars/all/labinfo.json b/sonic-mgmt/ansible/group_vars/all/labinfo.json similarity index 100% rename from ansible/group_vars/all/labinfo.json rename to sonic-mgmt/ansible/group_vars/all/labinfo.json diff --git a/ansible/group_vars/all/mux_simulator_http_port_map.yml b/sonic-mgmt/ansible/group_vars/all/mux_simulator_http_port_map.yml similarity index 100% rename from ansible/group_vars/all/mux_simulator_http_port_map.yml rename to sonic-mgmt/ansible/group_vars/all/mux_simulator_http_port_map.yml diff --git a/ansible/group_vars/all/nic_simulator_grpc_port_map.yml b/sonic-mgmt/ansible/group_vars/all/nic_simulator_grpc_port_map.yml similarity index 100% rename from ansible/group_vars/all/nic_simulator_grpc_port_map.yml rename to sonic-mgmt/ansible/group_vars/all/nic_simulator_grpc_port_map.yml diff --git a/ansible/group_vars/all/public_docker_registry.yml b/sonic-mgmt/ansible/group_vars/all/public_docker_registry.yml similarity index 100% rename from ansible/group_vars/all/public_docker_registry.yml rename to sonic-mgmt/ansible/group_vars/all/public_docker_registry.yml diff --git a/ansible/group_vars/all/restapi_certs.yml b/sonic-mgmt/ansible/group_vars/all/restapi_certs.yml similarity index 100% rename from ansible/group_vars/all/restapi_certs.yml rename to sonic-mgmt/ansible/group_vars/all/restapi_certs.yml diff --git a/ansible/group_vars/all/telemetry_certs.yml b/sonic-mgmt/ansible/group_vars/all/telemetry_certs.yml similarity index 100% rename from ansible/group_vars/all/telemetry_certs.yml rename to sonic-mgmt/ansible/group_vars/all/telemetry_certs.yml diff --git a/ansible/group_vars/eos/eos.yml b/sonic-mgmt/ansible/group_vars/eos/eos.yml similarity index 100% rename from ansible/group_vars/eos/eos.yml rename to sonic-mgmt/ansible/group_vars/eos/eos.yml diff --git a/ansible/group_vars/example-ixia/example-ixia.yml b/sonic-mgmt/ansible/group_vars/example-ixia/example-ixia.yml similarity index 100% rename from ansible/group_vars/example-ixia/example-ixia.yml rename to sonic-mgmt/ansible/group_vars/example-ixia/example-ixia.yml diff --git a/ansible/group_vars/example-ixia/secrets.yml b/sonic-mgmt/ansible/group_vars/example-ixia/secrets.yml similarity index 100% rename from ansible/group_vars/example-ixia/secrets.yml rename to sonic-mgmt/ansible/group_vars/example-ixia/secrets.yml diff --git a/ansible/group_vars/fanout/secrets.yml b/sonic-mgmt/ansible/group_vars/fanout/secrets.yml similarity index 100% rename from ansible/group_vars/fanout/secrets.yml rename to sonic-mgmt/ansible/group_vars/fanout/secrets.yml diff --git a/sonic-mgmt/ansible/group_vars/iosxr/iosxr.yml b/sonic-mgmt/ansible/group_vars/iosxr/iosxr.yml new file mode 100644 index 00000000000..d0e2b4c2fa4 --- /dev/null +++ b/sonic-mgmt/ansible/group_vars/iosxr/iosxr.yml @@ -0,0 +1,5 @@ +# snmp variables +snmp_rocommunity: strcommunity +snmp_location: str +bgp_gr_timer: 700 + diff --git a/ansible/group_vars/ixia/creds.yml b/sonic-mgmt/ansible/group_vars/ixia/creds.yml similarity index 100% rename from ansible/group_vars/ixia/creds.yml rename to sonic-mgmt/ansible/group_vars/ixia/creds.yml diff --git a/ansible/group_vars/k8s_ubu/creds.yml b/sonic-mgmt/ansible/group_vars/k8s_ubu/creds.yml similarity index 100% rename from ansible/group_vars/k8s_ubu/creds.yml rename to sonic-mgmt/ansible/group_vars/k8s_ubu/creds.yml diff --git a/ansible/group_vars/k8s_vm_host/creds.yml b/sonic-mgmt/ansible/group_vars/k8s_vm_host/creds.yml similarity index 100% rename from ansible/group_vars/k8s_vm_host/creds.yml rename to sonic-mgmt/ansible/group_vars/k8s_vm_host/creds.yml diff --git a/ansible/group_vars/k8s_vm_host/main.yml b/sonic-mgmt/ansible/group_vars/k8s_vm_host/main.yml similarity index 100% rename from ansible/group_vars/k8s_vm_host/main.yml rename to sonic-mgmt/ansible/group_vars/k8s_vm_host/main.yml diff --git a/ansible/group_vars/l1_switch/secrets.yml b/sonic-mgmt/ansible/group_vars/l1_switch/secrets.yml similarity index 100% rename from ansible/group_vars/l1_switch/secrets.yml rename to sonic-mgmt/ansible/group_vars/l1_switch/secrets.yml diff --git a/ansible/group_vars/lab/ipv6.yml b/sonic-mgmt/ansible/group_vars/lab/ipv6.yml similarity index 100% rename from ansible/group_vars/lab/ipv6.yml rename to sonic-mgmt/ansible/group_vars/lab/ipv6.yml diff --git a/ansible/group_vars/lab/lab.yml b/sonic-mgmt/ansible/group_vars/lab/lab.yml similarity index 100% rename from ansible/group_vars/lab/lab.yml rename to sonic-mgmt/ansible/group_vars/lab/lab.yml diff --git a/ansible/group_vars/lab/secrets.yml b/sonic-mgmt/ansible/group_vars/lab/secrets.yml similarity index 100% rename from ansible/group_vars/lab/secrets.yml rename to sonic-mgmt/ansible/group_vars/lab/secrets.yml diff --git a/ansible/group_vars/ocs/creds.yml b/sonic-mgmt/ansible/group_vars/ocs/creds.yml similarity index 100% rename from ansible/group_vars/ocs/creds.yml rename to sonic-mgmt/ansible/group_vars/ocs/creds.yml diff --git a/ansible/group_vars/pdu/pdu.yml b/sonic-mgmt/ansible/group_vars/pdu/pdu.yml similarity index 100% rename from ansible/group_vars/pdu/pdu.yml rename to sonic-mgmt/ansible/group_vars/pdu/pdu.yml diff --git a/ansible/group_vars/ptf/secrets.yml b/sonic-mgmt/ansible/group_vars/ptf/secrets.yml similarity index 100% rename from ansible/group_vars/ptf/secrets.yml rename to sonic-mgmt/ansible/group_vars/ptf/secrets.yml diff --git a/ansible/group_vars/ptf/vars.yml b/sonic-mgmt/ansible/group_vars/ptf/vars.yml similarity index 100% rename from ansible/group_vars/ptf/vars.yml rename to sonic-mgmt/ansible/group_vars/ptf/vars.yml diff --git a/ansible/group_vars/snappi-sonic/secrets.yml b/sonic-mgmt/ansible/group_vars/snappi-sonic/secrets.yml similarity index 100% rename from ansible/group_vars/snappi-sonic/secrets.yml rename to sonic-mgmt/ansible/group_vars/snappi-sonic/secrets.yml diff --git a/ansible/group_vars/snappi-sonic/snappi-sonic.yml b/sonic-mgmt/ansible/group_vars/snappi-sonic/snappi-sonic.yml similarity index 100% rename from ansible/group_vars/snappi-sonic/snappi-sonic.yml rename to sonic-mgmt/ansible/group_vars/snappi-sonic/snappi-sonic.yml diff --git a/ansible/group_vars/sonic/breakout_speed.yml b/sonic-mgmt/ansible/group_vars/sonic/breakout_speed.yml similarity index 100% rename from ansible/group_vars/sonic/breakout_speed.yml rename to sonic-mgmt/ansible/group_vars/sonic/breakout_speed.yml diff --git a/ansible/group_vars/sonic/ipv6.yml b/sonic-mgmt/ansible/group_vars/sonic/ipv6.yml similarity index 100% rename from ansible/group_vars/sonic/ipv6.yml rename to sonic-mgmt/ansible/group_vars/sonic/ipv6.yml diff --git a/ansible/group_vars/sonic/sku-sensors-data.yml b/sonic-mgmt/ansible/group_vars/sonic/sku-sensors-data.yml similarity index 100% rename from ansible/group_vars/sonic/sku-sensors-data.yml rename to sonic-mgmt/ansible/group_vars/sonic/sku-sensors-data.yml diff --git a/sonic-mgmt/ansible/group_vars/sonic/sku-sensors-p1.yml b/sonic-mgmt/ansible/group_vars/sonic/sku-sensors-p1.yml new file mode 100644 index 00000000000..6eafb3e4971 --- /dev/null +++ b/sonic-mgmt/ansible/group_vars/sonic/sku-sensors-p1.yml @@ -0,0 +1,554 @@ +sensors_checks: + x86_64-8101_32h_o-r0: + alarms: + voltage: + - tps53679-i2c-21-58/CPU_U17_PVCCIN_VIN/in1_alarm + + - tps53679-i2c-21-58/CPU_U17_P1P05V_VIN/in2_alarm + + - tps53679-i2c-21-58/CPU_U17_PVCCIN_VOUT/in3_lcrit_alarm + - tps53679-i2c-21-58/CPU_U17_PVCCIN_VOUT/in3_crit_alarm + + - tps53679-i2c-21-58/CPU_U17_P1P05V_VOUT/in4_lcrit_alarm + - tps53679-i2c-21-58/CPU_U17_P1P05V_VOUT/in4_crit_alarm + + - tps53679-i2c-21-59/CPU_U117_P1P2V_VIN/in1_alarm + + - tps53679-i2c-21-59/CPU_U117_P1P05V_VIN/in2_alarm + + - tps53679-i2c-21-59/CPU_U117_P1P2V_VOUT/in3_lcrit_alarm + - tps53679-i2c-21-59/CPU_U117_P1P2V_VOUT/in3_crit_alarm + + - tps53679-i2c-21-59/CPU_U117_P1P05V_VOUT/in4_lcrit_alarm + - tps53679-i2c-21-59/CPU_U117_P1P05V_VOUT/in4_crit_alarm + + - tps53679-i2c-25-60/MB_GB_VDDS_L1_VIN/in1_alarm + + - tps53679-i2c-25-60/MB_GB_VDDA_L2_VIN/in2_alarm + + - tps53679-i2c-25-60/MB_GB_VDDS_L1_VOUT/in3_lcrit_alarm + - tps53679-i2c-25-60/MB_GB_VDDS_L1_VOUT/in3_crit_alarm + + - tps53679-i2c-25-60/MB_GB_VDDA_L2_VOUT/in4_lcrit_alarm + - tps53679-i2c-25-60/MB_GB_VDDA_L2_VOUT/in4_crit_alarm + + - pmbus-i2c-25-62/MB_GB_CORE_VIN_L1/in1_min_alarm + - pmbus-i2c-25-62/MB_GB_CORE_VIN_L1/in1_max_alarm + - pmbus-i2c-25-62/MB_GB_CORE_VIN_L1/in1_lcrit_alarm + - pmbus-i2c-25-62/MB_GB_CORE_VIN_L1/in1_crit_alarm + + - pmbus-i2c-25-62/MB_GB_CORE_VOUT_L1/in2_min_alarm + - pmbus-i2c-25-62/MB_GB_CORE_VOUT_L1/in2_max_alarm + - pmbus-i2c-25-62/MB_GB_CORE_VOUT_L1/in2_lcrit_alarm + - pmbus-i2c-25-62/MB_GB_CORE_VOUT_L1/in2_crit_alarm + + - tps53679-i2c-25-65/MB_3_3V_R_L1_VIN/in1_alarm + + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_VIN/in2_alarm + + - tps53679-i2c-25-65/MB_3_3V_R_L1_VOUT/in3_lcrit_alarm + - tps53679-i2c-25-65/MB_3_3V_R_L1_VOUT/in3_crit_alarm + + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_VOUT/in4_lcrit_alarm + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_VOUT/in4_crit_alarm + + - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_min_alarm + - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_max_alarm + - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_lcrit_alarm + - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_crit_alarm + + - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_min_alarm + - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_max_alarm + - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_lcrit_alarm + - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_crit_alarm + + - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_min_alarm + - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_max_alarm + - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_lcrit_alarm + - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_crit_alarm + + - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_min_alarm + - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_max_alarm + - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_lcrit_alarm + - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_crit_alarm + + - ltc2979-i2c-26-5e/MB_A1V8/in3_min_alarm + - ltc2979-i2c-26-5e/MB_A1V8/in3_max_alarm + - ltc2979-i2c-26-5e/MB_A1V8/in3_lcrit_alarm + - ltc2979-i2c-26-5e/MB_A1V8/in3_crit_alarm + + - ltc2979-i2c-26-5e/MB_A1V/in4_min_alarm + - ltc2979-i2c-26-5e/MB_A1V/in4_max_alarm + - ltc2979-i2c-26-5e/MB_A1V/in4_lcrit_alarm + - ltc2979-i2c-26-5e/MB_A1V/in4_crit_alarm + + - ltc2979-i2c-26-5e/MB_A3V3/in5_min_alarm + - ltc2979-i2c-26-5e/MB_A3V3/in5_max_alarm + - ltc2979-i2c-26-5e/MB_A3V3/in5_lcrit_alarm + - ltc2979-i2c-26-5e/MB_A3V3/in5_crit_alarm + + - ltc2979-i2c-26-5e/MB_A1V2/in6_min_alarm + - ltc2979-i2c-26-5e/MB_A1V2/in6_max_alarm + - ltc2979-i2c-26-5e/MB_A1V2/in6_lcrit_alarm + - ltc2979-i2c-26-5e/MB_A1V2/in6_crit_alarm + + - ltc2979-i2c-26-5e/MB_P3V3/in7_min_alarm + - ltc2979-i2c-26-5e/MB_P3V3/in7_max_alarm + - ltc2979-i2c-26-5e/MB_P3V3/in7_lcrit_alarm + - ltc2979-i2c-26-5e/MB_P3V3/in7_crit_alarm + + current: + - tps53679-i2c-21-58/CPU_U17_PVCCIN_IOUT/curr1_max_alarm + - tps53679-i2c-21-58/CPU_U17_PVCCIN_IOUT/curr1_crit_alarm + + - tps53679-i2c-21-58/CPU_U17_P1P05V_IOUT/curr2_max_alarm + - tps53679-i2c-21-58/CPU_U17_P1P05V_IOUT/curr2_crit_alarm + + - tps53679-i2c-21-59/CPU_U117_P1P2V_IOUT/curr1_max_alarm + - tps53679-i2c-21-59/CPU_U117_P1P2V_IOUT/curr1_crit_alarm + + - tps53679-i2c-21-59/CPU_U117_P1P05V_IOUT/curr2_max_alarm + - tps53679-i2c-21-59/CPU_U117_P1P05V_IOUT/curr2_crit_alarm + + - tps53679-i2c-25-60/MB_GB_VDDS_L1_IOUT/curr1_max_alarm + - tps53679-i2c-25-60/MB_GB_VDDS_L1_IOUT/curr1_max_alarm + + - tps53679-i2c-25-60/MB_GB_VDDA_L2_IOUT/curr2_max_alarm + - tps53679-i2c-25-60/MB_GB_VDDA_L2_IOUT/curr2_crit_alarm + + - pmbus-i2c-25-62/MB_GB_CORE_IIN_L1/curr1_max_alarm + - pmbus-i2c-25-62/MB_GB_CORE_IIN_L1/curr1_crit_alarm + + - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_max_alarm + - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_lcrit_alarm + - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_crit_alarm + + - tps53679-i2c-25-65/MB_3_3V_R_L1_IOUT/curr1_max_alarm + - tps53679-i2c-25-65/MB_3_3V_R_L1_IOUT/curr1_crit_alarm + + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_IOUT/curr2_max_alarm + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_IOUT/curr2_crit_alarm + + power: + - pmbus-i2c-25-62/pin/power1_alarm + + compares: + voltage: + - - tps53679-i2c-21-58/CPU_U17_PVCCIN_VIN/in1_input + - tps53679-i2c-21-58/CPU_U17_PVCCIN_VIN/in1_crit + + - - tps53679-i2c-21-58/CPU_U17_P1P05V_VIN/in2_input + - tps53679-i2c-21-58/CPU_U17_P1P05V_VIN/in2_crit + + - - tps53679-i2c-21-59/CPU_U117_P1P2V_VIN/in1_input + - tps53679-i2c-21-59/CPU_U117_P1P2V_VIN/in1_crit + + - - tps53679-i2c-21-59/CPU_U117_P1P05V_VIN/in2_input + - tps53679-i2c-21-59/CPU_U117_P1P05V_VIN/in2_crit + + - - tps53679-i2c-25-60/MB_GB_VDDS_L1_VIN/in1_input + - tps53679-i2c-25-60/MB_GB_VDDS_L1_VIN/in1_crit + + - - tps53679-i2c-25-60/MB_GB_VDDA_L2_VIN/in2_input + - tps53679-i2c-25-60/MB_GB_VDDA_L2_VIN/in2_crit + + - - pmbus-i2c-25-62/MB_GB_CORE_VIN_L1/in1_input + - pmbus-i2c-25-62/MB_GB_CORE_VIN_L1/in1_max + + - - tps53679-i2c-25-65/MB_3_3V_R_L1_VIN/in1_input + - tps53679-i2c-25-65/MB_3_3V_R_L1_VIN/in1_crit + + - - tps53679-i2c-25-65/MB_GB_VDDCK_L2_VIN/in2_input + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_VIN/in2_crit + + - - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_input + - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_max + - - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_input + - ltc2979-i2c-26-5d/GB_PCIE_VDDH/in2_crit + + - - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_input + - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_max + - - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_input + - ltc2979-i2c-26-5d/GB_PCIE_VDDACK/in3_crit + + - - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_input + - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_max + - - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_input + - ltc2979-i2c-26-5d/GB_P1V8_VDDIO/in5_crit + + - - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_input + - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_max + - - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_input + - ltc2979-i2c-26-5d/GB_P1V8_PLLVDD/in6_crit + + - - ltc2979-i2c-26-5e/MB_A1V8/in3_input + - ltc2979-i2c-26-5e/MB_A1V8/in3_max + - - ltc2979-i2c-26-5e/MB_A1V8/in3_input + - ltc2979-i2c-26-5e/MB_A1V8/in3_crit + + - - ltc2979-i2c-26-5e/MB_A1V/in4_input + - ltc2979-i2c-26-5e/MB_A1V/in4_max + - - ltc2979-i2c-26-5e/MB_A1V/in4_input + - ltc2979-i2c-26-5e/MB_A1V/in4_crit + + - - ltc2979-i2c-26-5e/MB_A3V3/in5_input + - ltc2979-i2c-26-5e/MB_A3V3/in5_max + - - ltc2979-i2c-26-5e/MB_A3V3/in5_input + - ltc2979-i2c-26-5e/MB_A3V3/in5_crit + + - - ltc2979-i2c-26-5e/MB_A1V2/in6_input + - ltc2979-i2c-26-5e/MB_A1V2/in6_max + - - ltc2979-i2c-26-5e/MB_A1V2/in6_input + - ltc2979-i2c-26-5e/MB_A1V2/in6_crit + + - - ltc2979-i2c-26-5e/MB_P3V3/in7_input + - ltc2979-i2c-26-5e/MB_P3V3/in7_max + - - ltc2979-i2c-26-5e/MB_P3V3/in7_input + - ltc2979-i2c-26-5e/MB_P3V3/in7_crit + + current: + - - tps53679-i2c-21-58/CPU_U17_PVCCIN_IOUT/curr1_input + - tps53679-i2c-21-58/CPU_U17_PVCCIN_IOUT/curr1_max + - - tps53679-i2c-21-58/CPU_U17_PVCCIN_IOUT/curr1_input + - tps53679-i2c-21-58/CPU_U17_PVCCIN_IOUT/curr1_crit + + - - tps53679-i2c-21-58/CPU_U17_P1P05V_IOUT/curr2_input + - tps53679-i2c-21-58/CPU_U17_P1P05V_IOUT/curr2_max + - - tps53679-i2c-21-58/CPU_U17_P1P05V_IOUT/curr2_input + - tps53679-i2c-21-58/CPU_U17_P1P05V_IOUT/curr2_crit + + - - tps53679-i2c-21-59/CPU_U117_P1P2V_IOUT/curr1_input + - tps53679-i2c-21-59/CPU_U117_P1P2V_IOUT/curr1_max + - - tps53679-i2c-21-59/CPU_U117_P1P2V_IOUT/curr1_input + - tps53679-i2c-21-59/CPU_U117_P1P2V_IOUT/curr1_crit + + - - tps53679-i2c-21-59/CPU_U117_P1P05V_IOUT/curr2_input + - tps53679-i2c-21-59/CPU_U117_P1P05V_IOUT/curr2_max + - - tps53679-i2c-21-59/CPU_U117_P1P05V_IOUT/curr2_input + - tps53679-i2c-21-59/CPU_U117_P1P05V_IOUT/curr2_crit + + - - tps53679-i2c-25-60/MB_GB_VDDS_L1_IOUT/curr1_input + - tps53679-i2c-25-60/MB_GB_VDDS_L1_IOUT/curr1_max + - - tps53679-i2c-25-60/MB_GB_VDDS_L1_IOUT/curr1_input + - tps53679-i2c-25-60/MB_GB_VDDS_L1_IOUT/curr1_crit + + - - tps53679-i2c-25-60/MB_GB_VDDA_L2_IOUT/curr2_input + - tps53679-i2c-25-60/MB_GB_VDDA_L2_IOUT/curr2_max + - - tps53679-i2c-25-60/MB_GB_VDDA_L2_IOUT/curr2_input + - tps53679-i2c-25-60/MB_GB_VDDA_L2_IOUT/curr2_crit + + - - pmbus-i2c-25-62/MB_GB_CORE_IIN_L1/curr1_input + - pmbus-i2c-25-62/MB_GB_CORE_IIN_L1/curr1_max + - - pmbus-i2c-25-62/MB_GB_CORE_IIN_L1/curr1_input + - pmbus-i2c-25-62/MB_GB_CORE_IIN_L1/curr1_crit + + - - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_input + - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_max + - - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_input + - pmbus-i2c-25-62/MB_GB_CORE_IOUT_L1/curr2_crit + + - - tps53679-i2c-25-65/MB_3_3V_R_L1_IOUT/curr1_input + - tps53679-i2c-25-65/MB_3_3V_R_L1_IOUT/curr1_max + - - tps53679-i2c-25-65/MB_3_3V_R_L1_IOUT/curr1_input + - tps53679-i2c-25-65/MB_3_3V_R_L1_IOUT/curr1_crit + + - - tps53679-i2c-25-65/MB_GB_VDDCK_L2_IOUT/curr2_input + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_IOUT/curr2_max + - - tps53679-i2c-25-65/MB_GB_VDDCK_L2_IOUT/curr2_input + - tps53679-i2c-25-65/MB_GB_VDDCK_L2_IOUT/curr2_crit + + power: + - - pmbus-i2c-25-62/pin/power1_input + - pmbus-i2c-25-62/pin/power1_max + + non_zero: + fan: [] + power: [] + temp: [] + psu_skips: {} + sensor_skip_per_version: {} + + x86_64-8102_64h_o-r0: + alarms: + voltage: + - tps53679-i2c-20-58/CPU_U17_PVCCIN_VIN/in1_alarm + + - tps53679-i2c-20-58/CPU_U17_P1P05V_VIN/in2_alarm + + - tps53679-i2c-20-58/CPU_U17_PVCCIN_VOUT/in3_lcrit_alarm + - tps53679-i2c-20-58/CPU_U17_PVCCIN_VOUT/in3_crit_alarm + + - tps53679-i2c-20-58/CPU_U17_P1P05V_VOUT/in4_lcrit_alarm + - tps53679-i2c-20-58/CPU_U17_P1P05V_VOUT/in4_crit_alarm + + - tps53679-i2c-20-59/CPU_U117_P1P2V_VIN/in1_alarm + + - tps53679-i2c-20-59/CPU_U117_P1P05V_VIN/in2_alarm + + - tps53679-i2c-20-59/CPU_U117_P1P2V_VOUT/in3_lcrit_alarm + - tps53679-i2c-20-59/CPU_U117_P1P2V_VOUT/in3_crit_alarm + + - tps53679-i2c-20-59/CPU_U117_P1P05V_VOUT/in4_lcrit_alarm + - tps53679-i2c-20-59/CPU_U117_P1P05V_VOUT/in4_crit_alarm + + - tps53679-i2c-24-60/MB_GB_VDDS_L1_VIN/in1_alarm + + - tps53679-i2c-24-60/MB_GB_VDDA_L2_VIN/in2_alarm + + - tps53679-i2c-24-60/MB_GB_VDDS_L1_VOUT/in3_lcrit_alarm + - tps53679-i2c-24-60/MB_GB_VDDS_L1_VOUT/in3_crit_alarm + + - tps53679-i2c-24-60/MB_GB_VDDA_L2_VOUT/in4_lcrit_alarm + - tps53679-i2c-24-60/MB_GB_VDDA_L2_VOUT/in4_crit_alarm + + - pmbus-i2c-24-62/MB_GB_CORE_VIN_L1/in1_min_alarm + - pmbus-i2c-24-62/MB_GB_CORE_VIN_L1/in1_max_alarm + - pmbus-i2c-24-62/MB_GB_CORE_VIN_L1/in1_lcrit_alarm + - pmbus-i2c-24-62/MB_GB_CORE_VIN_L1/in1_crit_alarm + + - pmbus-i2c-24-62/MB_GB_CORE_VOUT_L1/in2_min_alarm + - pmbus-i2c-24-62/MB_GB_CORE_VOUT_L1/in2_max_alarm + - pmbus-i2c-24-62/MB_GB_CORE_VOUT_L1/in2_lcrit_alarm + - pmbus-i2c-24-62/MB_GB_CORE_VOUT_L1/in2_crit_alarm + + - tps53679-i2c-24-65/MB_3_3V_R_L1_VIN/in1_alarm + + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_VIN/in2_alarm + + - tps53679-i2c-24-65/MB_3_3V_R_L1_VOUT/in3_lcrit_alarm + - tps53679-i2c-24-65/MB_3_3V_R_L1_VOUT/in3_crit_alarm + + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_VOUT/in4_lcrit_alarm + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_VOUT/in4_crit_alarm + + - tps53679-i2c-24-64/MB_3_3V_L_L1_VIN/in1_alarm + + - tps53679-i2c-24-64/MB_3_3V_L_L1_VOUT/in3_lcrit_alarm + - tps53679-i2c-24-64/MB_3_3V_L_L1_VOUT/in3_crit_alarm + + - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_min_alarm + - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_max_alarm + - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_lcrit_alarm + - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_crit_alarm + + - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_min_alarm + - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_max_alarm + - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_lcrit_alarm + - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_crit_alarm + + - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_min_alarm + - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_max_alarm + - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_lcrit_alarm + - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_crit_alarm + + - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_min_alarm + - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_max_alarm + - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_lcrit_alarm + - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_crit_alarm + + - ltc2979-i2c-25-5e/MB_A1V8/in3_min_alarm + - ltc2979-i2c-25-5e/MB_A1V8/in3_max_alarm + - ltc2979-i2c-25-5e/MB_A1V8/in3_lcrit_alarm + - ltc2979-i2c-25-5e/MB_A1V8/in3_crit_alarm + + - ltc2979-i2c-25-5e/MB_A1V/in4_min_alarm + - ltc2979-i2c-25-5e/MB_A1V/in4_max_alarm + - ltc2979-i2c-25-5e/MB_A1V/in4_lcrit_alarm + - ltc2979-i2c-25-5e/MB_A1V/in4_crit_alarm + + - ltc2979-i2c-25-5e/MB_A3V3/in5_min_alarm + - ltc2979-i2c-25-5e/MB_A3V3/in5_max_alarm + - ltc2979-i2c-25-5e/MB_A3V3/in5_lcrit_alarm + - ltc2979-i2c-25-5e/MB_A3V3/in5_crit_alarm + + - ltc2979-i2c-25-5e/MB_A1V2/in6_min_alarm + - ltc2979-i2c-25-5e/MB_A1V2/in6_max_alarm + - ltc2979-i2c-25-5e/MB_A1V2/in6_lcrit_alarm + - ltc2979-i2c-25-5e/MB_A1V2/in6_crit_alarm + + - ltc2979-i2c-25-5e/MB_P3V3/in7_min_alarm + - ltc2979-i2c-25-5e/MB_P3V3/in7_max_alarm + - ltc2979-i2c-25-5e/MB_P3V3/in7_lcrit_alarm + - ltc2979-i2c-25-5e/MB_P3V3/in7_crit_alarm + + current: + - tps53679-i2c-20-58/CPU_U17_PVCCIN_IOUT/curr1_max_alarm + - tps53679-i2c-20-58/CPU_U17_PVCCIN_IOUT/curr1_crit_alarm + + - tps53679-i2c-20-58/CPU_U17_P1P05V_IOUT/curr2_max_alarm + - tps53679-i2c-20-58/CPU_U17_P1P05V_IOUT/curr2_crit_alarm + + - tps53679-i2c-20-59/CPU_U117_P1P2V_IOUT/curr1_max_alarm + - tps53679-i2c-20-59/CPU_U117_P1P2V_IOUT/curr1_crit_alarm + + - tps53679-i2c-20-59/CPU_U117_P1P05V_IOUT/curr2_max_alarm + - tps53679-i2c-20-59/CPU_U117_P1P05V_IOUT/curr2_crit_alarm + + - tps53679-i2c-24-60/MB_GB_VDDS_L1_IOUT/curr1_max_alarm + - tps53679-i2c-24-60/MB_GB_VDDS_L1_IOUT/curr1_max_alarm + + - tps53679-i2c-24-60/MB_GB_VDDA_L2_IOUT/curr2_max_alarm + - tps53679-i2c-24-60/MB_GB_VDDA_L2_IOUT/curr2_crit_alarm + + - pmbus-i2c-24-62/MB_GB_CORE_IIN_L1/curr1_max_alarm + - pmbus-i2c-24-62/MB_GB_CORE_IIN_L1/curr1_crit_alarm + + - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_max_alarm + - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_lcrit_alarm + - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_crit_alarm + + - tps53679-i2c-24-65/MB_3_3V_R_L1_IOUT/curr1_max_alarm + - tps53679-i2c-24-65/MB_3_3V_R_L1_IOUT/curr1_crit_alarm + + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_IOUT/curr2_max_alarm + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_IOUT/curr2_crit_alarm + + - tps53679-i2c-24-64/MB_3_3V_L_L1_IOUT/curr1_max_alarm + - tps53679-i2c-24-64/MB_3_3V_L_L1_IOUT/curr1_crit_alarm + + power: + - pmbus-i2c-24-62/pin/power1_alarm + + compares: + voltage: + - - tps53679-i2c-20-58/CPU_U17_PVCCIN_VIN/in1_input + - tps53679-i2c-20-58/CPU_U17_PVCCIN_VIN/in1_crit + + - - tps53679-i2c-20-58/CPU_U17_P1P05V_VIN/in2_input + - tps53679-i2c-20-58/CPU_U17_P1P05V_VIN/in2_crit + + - - tps53679-i2c-20-59/CPU_U117_P1P2V_VIN/in1_input + - tps53679-i2c-20-59/CPU_U117_P1P2V_VIN/in1_crit + + - - tps53679-i2c-20-59/CPU_U117_P1P05V_VIN/in2_input + - tps53679-i2c-20-59/CPU_U117_P1P05V_VIN/in2_crit + + - - tps53679-i2c-24-60/MB_GB_VDDS_L1_VIN/in1_input + - tps53679-i2c-24-60/MB_GB_VDDS_L1_VIN/in1_crit + + - - tps53679-i2c-24-60/MB_GB_VDDA_L2_VIN/in2_input + - tps53679-i2c-24-60/MB_GB_VDDA_L2_VIN/in2_crit + + - - pmbus-i2c-24-62/MB_GB_CORE_VIN_L1/in1_input + - pmbus-i2c-24-62/MB_GB_CORE_VIN_L1/in1_max + + - - tps53679-i2c-24-65/MB_3_3V_R_L1_VIN/in1_input + - tps53679-i2c-24-65/MB_3_3V_R_L1_VIN/in1_crit + + - - tps53679-i2c-24-65/MB_GB_VDDCK_L2_VIN/in2_input + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_VIN/in2_crit + + - - tps53679-i2c-24-64/MB_3_3V_L_L1_VIN/in1_input + - tps53679-i2c-24-64/MB_3_3V_L_L1_VIN/in1_crit + + - - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_input + - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_max + - - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_input + - ltc2979-i2c-25-5d/GB_PCIE_VDDH/in2_crit + + - - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_input + - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_max + - - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_input + - ltc2979-i2c-25-5d/GB_PCIE_VDDACK/in3_crit + + - - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_input + - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_max + - - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_input + - ltc2979-i2c-25-5d/GB_P1V8_VDDIO/in5_crit + + - - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_input + - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_max + - - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_input + - ltc2979-i2c-25-5d/GB_P1V8_PLLVDD/in6_crit + + - - ltc2979-i2c-25-5e/MB_A1V8/in3_input + - ltc2979-i2c-25-5e/MB_A1V8/in3_max + - - ltc2979-i2c-25-5e/MB_A1V8/in3_input + - ltc2979-i2c-25-5e/MB_A1V8/in3_crit + + - - ltc2979-i2c-25-5e/MB_A1V/in4_input + - ltc2979-i2c-25-5e/MB_A1V/in4_max + - - ltc2979-i2c-25-5e/MB_A1V/in4_input + - ltc2979-i2c-25-5e/MB_A1V/in4_crit + + - - ltc2979-i2c-25-5e/MB_A3V3/in5_input + - ltc2979-i2c-25-5e/MB_A3V3/in5_max + - - ltc2979-i2c-25-5e/MB_A3V3/in5_input + - ltc2979-i2c-25-5e/MB_A3V3/in5_crit + + - - ltc2979-i2c-25-5e/MB_A1V2/in6_input + - ltc2979-i2c-25-5e/MB_A1V2/in6_max + - - ltc2979-i2c-25-5e/MB_A1V2/in6_input + - ltc2979-i2c-25-5e/MB_A1V2/in6_crit + + - - ltc2979-i2c-25-5e/MB_P3V3/in7_input + - ltc2979-i2c-25-5e/MB_P3V3/in7_max + - - ltc2979-i2c-25-5e/MB_P3V3/in7_input + - ltc2979-i2c-25-5e/MB_P3V3/in7_crit + + current: + - - tps53679-i2c-20-58/CPU_U17_PVCCIN_IOUT/curr1_input + - tps53679-i2c-20-58/CPU_U17_PVCCIN_IOUT/curr1_max + - - tps53679-i2c-20-58/CPU_U17_PVCCIN_IOUT/curr1_input + - tps53679-i2c-20-58/CPU_U17_PVCCIN_IOUT/curr1_crit + + - - tps53679-i2c-20-58/CPU_U17_P1P05V_IOUT/curr2_input + - tps53679-i2c-20-58/CPU_U17_P1P05V_IOUT/curr2_max + - - tps53679-i2c-20-58/CPU_U17_P1P05V_IOUT/curr2_input + - tps53679-i2c-20-58/CPU_U17_P1P05V_IOUT/curr2_crit + + - - tps53679-i2c-20-59/CPU_U117_P1P2V_IOUT/curr1_input + - tps53679-i2c-20-59/CPU_U117_P1P2V_IOUT/curr1_max + - - tps53679-i2c-20-59/CPU_U117_P1P2V_IOUT/curr1_input + - tps53679-i2c-20-59/CPU_U117_P1P2V_IOUT/curr1_crit + + - - tps53679-i2c-20-59/CPU_U117_P1P05V_IOUT/curr2_input + - tps53679-i2c-20-59/CPU_U117_P1P05V_IOUT/curr2_max + - - tps53679-i2c-20-59/CPU_U117_P1P05V_IOUT/curr2_input + - tps53679-i2c-20-59/CPU_U117_P1P05V_IOUT/curr2_crit + + - - tps53679-i2c-24-60/MB_GB_VDDS_L1_IOUT/curr1_input + - tps53679-i2c-24-60/MB_GB_VDDS_L1_IOUT/curr1_max + - - tps53679-i2c-24-60/MB_GB_VDDS_L1_IOUT/curr1_input + - tps53679-i2c-24-60/MB_GB_VDDS_L1_IOUT/curr1_crit + + - - tps53679-i2c-24-60/MB_GB_VDDA_L2_IOUT/curr2_input + - tps53679-i2c-24-60/MB_GB_VDDA_L2_IOUT/curr2_max + - - tps53679-i2c-24-60/MB_GB_VDDA_L2_IOUT/curr2_input + - tps53679-i2c-24-60/MB_GB_VDDA_L2_IOUT/curr2_crit + + - - pmbus-i2c-24-62/MB_GB_CORE_IIN_L1/curr1_input + - pmbus-i2c-24-62/MB_GB_CORE_IIN_L1/curr1_max + - - pmbus-i2c-24-62/MB_GB_CORE_IIN_L1/curr1_input + - pmbus-i2c-24-62/MB_GB_CORE_IIN_L1/curr1_crit + + - - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_input + - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_max + - - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_input + - pmbus-i2c-24-62/MB_GB_CORE_IOUT_L1/curr2_crit + + - - tps53679-i2c-24-65/MB_3_3V_R_L1_IOUT/curr1_input + - tps53679-i2c-24-65/MB_3_3V_R_L1_IOUT/curr1_max + - - tps53679-i2c-24-65/MB_3_3V_R_L1_IOUT/curr1_input + - tps53679-i2c-24-65/MB_3_3V_R_L1_IOUT/curr1_crit + + - - tps53679-i2c-24-65/MB_GB_VDDCK_L2_IOUT/curr2_input + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_IOUT/curr2_max + - - tps53679-i2c-24-65/MB_GB_VDDCK_L2_IOUT/curr2_input + - tps53679-i2c-24-65/MB_GB_VDDCK_L2_IOUT/curr2_crit + + - - tps53679-i2c-24-64/MB_3_3V_L_L1_IOUT/curr1_input + - tps53679-i2c-24-64/MB_3_3V_L_L1_IOUT/curr1_max + - - tps53679-i2c-24-64/MB_3_3V_L_L1_IOUT/curr1_input + - tps53679-i2c-24-64/MB_3_3V_L_L1_IOUT/curr1_crit + + power: + - - pmbus-i2c-24-62/pin/power1_input + - pmbus-i2c-24-62/pin/power1_max + + non_zero: + fan: [] + power: [] + temp: [] + psu_skips: {} + sensor_skip_per_version: {} diff --git a/ansible/group_vars/sonic/sonic.yml b/sonic-mgmt/ansible/group_vars/sonic/sonic.yml similarity index 100% rename from ansible/group_vars/sonic/sonic.yml rename to sonic-mgmt/ansible/group_vars/sonic/sonic.yml diff --git a/ansible/group_vars/sonic/variables b/sonic-mgmt/ansible/group_vars/sonic/variables similarity index 100% rename from ansible/group_vars/sonic/variables rename to sonic-mgmt/ansible/group_vars/sonic/variables diff --git a/ansible/group_vars/sonic_latest/package_versions.yml b/sonic-mgmt/ansible/group_vars/sonic_latest/package_versions.yml similarity index 100% rename from ansible/group_vars/sonic_latest/package_versions.yml rename to sonic-mgmt/ansible/group_vars/sonic_latest/package_versions.yml diff --git a/ansible/group_vars/veos_vtb/env.yml b/sonic-mgmt/ansible/group_vars/veos_vtb/env.yml similarity index 100% rename from ansible/group_vars/veos_vtb/env.yml rename to sonic-mgmt/ansible/group_vars/veos_vtb/env.yml diff --git a/ansible/group_vars/vm_host/ceos.yml b/sonic-mgmt/ansible/group_vars/vm_host/ceos.yml similarity index 100% rename from ansible/group_vars/vm_host/ceos.yml rename to sonic-mgmt/ansible/group_vars/vm_host/ceos.yml diff --git a/ansible/group_vars/vm_host/creds.yml b/sonic-mgmt/ansible/group_vars/vm_host/creds.yml similarity index 100% rename from ansible/group_vars/vm_host/creds.yml rename to sonic-mgmt/ansible/group_vars/vm_host/creds.yml diff --git a/ansible/group_vars/vm_host/csonic.yml b/sonic-mgmt/ansible/group_vars/vm_host/csonic.yml similarity index 100% rename from ansible/group_vars/vm_host/csonic.yml rename to sonic-mgmt/ansible/group_vars/vm_host/csonic.yml diff --git a/ansible/group_vars/vm_host/main.yml b/sonic-mgmt/ansible/group_vars/vm_host/main.yml similarity index 100% rename from ansible/group_vars/vm_host/main.yml rename to sonic-mgmt/ansible/group_vars/vm_host/main.yml diff --git a/ansible/group_vars/vm_host/vcisco.yml b/sonic-mgmt/ansible/group_vars/vm_host/vcisco.yml similarity index 100% rename from ansible/group_vars/vm_host/vcisco.yml rename to sonic-mgmt/ansible/group_vars/vm_host/vcisco.yml diff --git a/ansible/group_vars/vm_host/veos.yml b/sonic-mgmt/ansible/group_vars/vm_host/veos.yml similarity index 100% rename from ansible/group_vars/vm_host/veos.yml rename to sonic-mgmt/ansible/group_vars/vm_host/veos.yml diff --git a/ansible/group_vars/vm_host/vsonic.yml b/sonic-mgmt/ansible/group_vars/vm_host/vsonic.yml similarity index 100% rename from ansible/group_vars/vm_host/vsonic.yml rename to sonic-mgmt/ansible/group_vars/vm_host/vsonic.yml diff --git a/ansible/health_checker.py b/sonic-mgmt/ansible/health_checker.py similarity index 100% rename from ansible/health_checker.py rename to sonic-mgmt/ansible/health_checker.py diff --git a/ansible/host_vars/STR-ACS-SERV-01.yml b/sonic-mgmt/ansible/host_vars/STR-ACS-SERV-01.yml similarity index 100% rename from ansible/host_vars/STR-ACS-SERV-01.yml rename to sonic-mgmt/ansible/host_vars/STR-ACS-SERV-01.yml diff --git a/ansible/host_vars/STR-ACS-SERV-02.yml b/sonic-mgmt/ansible/host_vars/STR-ACS-SERV-02.yml similarity index 100% rename from ansible/host_vars/STR-ACS-SERV-02.yml rename to sonic-mgmt/ansible/host_vars/STR-ACS-SERV-02.yml diff --git a/ansible/host_vars/STR-ACS-SERV-19.yml b/sonic-mgmt/ansible/host_vars/STR-ACS-SERV-19.yml similarity index 100% rename from ansible/host_vars/STR-ACS-SERV-19.yml rename to sonic-mgmt/ansible/host_vars/STR-ACS-SERV-19.yml diff --git a/ansible/host_vars/STR-ACS-SERV-20.yml b/sonic-mgmt/ansible/host_vars/STR-ACS-SERV-20.yml similarity index 100% rename from ansible/host_vars/STR-ACS-SERV-20.yml rename to sonic-mgmt/ansible/host_vars/STR-ACS-SERV-20.yml diff --git a/ansible/host_vars/STR-ACS-VSERV-01.yml b/sonic-mgmt/ansible/host_vars/STR-ACS-VSERV-01.yml similarity index 100% rename from ansible/host_vars/STR-ACS-VSERV-01.yml rename to sonic-mgmt/ansible/host_vars/STR-ACS-VSERV-01.yml diff --git a/ansible/host_vars/STR-ACS-VSERV-21.yml b/sonic-mgmt/ansible/host_vars/STR-ACS-VSERV-21.yml similarity index 100% rename from ansible/host_vars/STR-ACS-VSERV-21.yml rename to sonic-mgmt/ansible/host_vars/STR-ACS-VSERV-21.yml diff --git a/ansible/inventory b/sonic-mgmt/ansible/inventory similarity index 100% rename from ansible/inventory rename to sonic-mgmt/ansible/inventory diff --git a/ansible/k8s_ubuntu b/sonic-mgmt/ansible/k8s_ubuntu similarity index 100% rename from ansible/k8s_ubuntu rename to sonic-mgmt/ansible/k8s_ubuntu diff --git a/ansible/k8s_ubuntu_vtb b/sonic-mgmt/ansible/k8s_ubuntu_vtb similarity index 100% rename from ansible/k8s_ubuntu_vtb rename to sonic-mgmt/ansible/k8s_ubuntu_vtb diff --git a/ansible/l1_port_mapper.py b/sonic-mgmt/ansible/l1_port_mapper.py similarity index 100% rename from ansible/l1_port_mapper.py rename to sonic-mgmt/ansible/l1_port_mapper.py diff --git a/ansible/lab b/sonic-mgmt/ansible/lab similarity index 100% rename from ansible/lab rename to sonic-mgmt/ansible/lab diff --git a/ansible/library/acl_capabilities_facts.py b/sonic-mgmt/ansible/library/acl_capabilities_facts.py similarity index 100% rename from ansible/library/acl_capabilities_facts.py rename to sonic-mgmt/ansible/library/acl_capabilities_facts.py diff --git a/ansible/library/acl_facts.py b/sonic-mgmt/ansible/library/acl_facts.py similarity index 100% rename from ansible/library/acl_facts.py rename to sonic-mgmt/ansible/library/acl_facts.py diff --git a/ansible/library/announce_routes.py b/sonic-mgmt/ansible/library/announce_routes.py similarity index 100% rename from ansible/library/announce_routes.py rename to sonic-mgmt/ansible/library/announce_routes.py diff --git a/ansible/library/aos/aos_command.py b/sonic-mgmt/ansible/library/aos/aos_command.py similarity index 100% rename from ansible/library/aos/aos_command.py rename to sonic-mgmt/ansible/library/aos/aos_command.py diff --git a/ansible/library/aos/aos_config.py b/sonic-mgmt/ansible/library/aos/aos_config.py similarity index 100% rename from ansible/library/aos/aos_config.py rename to sonic-mgmt/ansible/library/aos/aos_config.py diff --git a/ansible/library/bgp_facts.py b/sonic-mgmt/ansible/library/bgp_facts.py similarity index 100% rename from ansible/library/bgp_facts.py rename to sonic-mgmt/ansible/library/bgp_facts.py diff --git a/ansible/library/bgp_route.py b/sonic-mgmt/ansible/library/bgp_route.py similarity index 98% rename from ansible/library/bgp_route.py rename to sonic-mgmt/ansible/library/bgp_route.py index 1b96997fde7..76f1d573c24 100644 --- a/ansible/library/bgp_route.py +++ b/sonic-mgmt/ansible/library/bgp_route.py @@ -260,8 +260,9 @@ def parse_bgp_route_prefix(self, cmd_result): PREFIX_PATHS = 5 PREFIX_PATHS_FROM = 6 PREFIX_PATH_ORIGIN = 7 - PREFIX_PATH_TIMESTAMP = 8 - ERR = 9 + PREFIX_PATH_COMMUNITY = 8 + PREFIX_PATH_TIMESTAMP = 9 + ERR = 10 # line content pattern prefix = self.prefix regex_prefix_header = re.compile('BGP routing table entry for ') @@ -325,9 +326,14 @@ def parse_bgp_route_prefix(self, cmd_result): state = ERR elif state == PREFIX_PATH_ORIGIN: if regex_prefix_path_p2_origin.match(line): - state = PREFIX_PATH_TIMESTAMP + state = PREFIX_PATH_COMMUNITY else: state = ERR + elif state == PREFIX_PATH_COMMUNITY: + if regex_prefix_path_p2_community.match(line): + state = PREFIX_PATH_TIMESTAMP + else: + state = ERR elif state == PREFIX_PATH_TIMESTAMP: if regex_prefix_path_p3_timestamp.match(line): state = PREFIX_PATHS @@ -339,7 +345,6 @@ def parse_bgp_route_prefix(self, cmd_result): raise Exception( "cannot parse bgp prefix info correctly " + str(state) + str(self.facts)) - def main(): module = AnsibleModule( argument_spec=dict( diff --git a/ansible/library/breakout_config_db.py b/sonic-mgmt/ansible/library/breakout_config_db.py similarity index 100% rename from ansible/library/breakout_config_db.py rename to sonic-mgmt/ansible/library/breakout_config_db.py diff --git a/ansible/library/check_bgp_ipv6_routes_converged.py b/sonic-mgmt/ansible/library/check_bgp_ipv6_routes_converged.py similarity index 100% rename from ansible/library/check_bgp_ipv6_routes_converged.py rename to sonic-mgmt/ansible/library/check_bgp_ipv6_routes_converged.py diff --git a/ansible/library/combine_list_to_dict.py b/sonic-mgmt/ansible/library/combine_list_to_dict.py similarity index 100% rename from ansible/library/combine_list_to_dict.py rename to sonic-mgmt/ansible/library/combine_list_to_dict.py diff --git a/ansible/library/config_facts.py b/sonic-mgmt/ansible/library/config_facts.py similarity index 100% rename from ansible/library/config_facts.py rename to sonic-mgmt/ansible/library/config_facts.py diff --git a/ansible/library/configure_vms.py b/sonic-mgmt/ansible/library/configure_vms.py similarity index 100% rename from ansible/library/configure_vms.py rename to sonic-mgmt/ansible/library/configure_vms.py diff --git a/ansible/library/conn_graph_facts.py b/sonic-mgmt/ansible/library/conn_graph_facts.py similarity index 100% rename from ansible/library/conn_graph_facts.py rename to sonic-mgmt/ansible/library/conn_graph_facts.py diff --git a/ansible/library/console_facts.py b/sonic-mgmt/ansible/library/console_facts.py similarity index 100% rename from ansible/library/console_facts.py rename to sonic-mgmt/ansible/library/console_facts.py diff --git a/ansible/library/counter_facts.py b/sonic-mgmt/ansible/library/counter_facts.py similarity index 100% rename from ansible/library/counter_facts.py rename to sonic-mgmt/ansible/library/counter_facts.py diff --git a/ansible/library/dual_tor_facts.py b/sonic-mgmt/ansible/library/dual_tor_facts.py similarity index 100% rename from ansible/library/dual_tor_facts.py rename to sonic-mgmt/ansible/library/dual_tor_facts.py diff --git a/ansible/library/dut_basic_facts.py b/sonic-mgmt/ansible/library/dut_basic_facts.py similarity index 100% rename from ansible/library/dut_basic_facts.py rename to sonic-mgmt/ansible/library/dut_basic_facts.py diff --git a/ansible/library/exabgp.py b/sonic-mgmt/ansible/library/exabgp.py similarity index 100% rename from ansible/library/exabgp.py rename to sonic-mgmt/ansible/library/exabgp.py diff --git a/ansible/library/extract_log.py b/sonic-mgmt/ansible/library/extract_log.py similarity index 100% rename from ansible/library/extract_log.py rename to sonic-mgmt/ansible/library/extract_log.py diff --git a/ansible/library/fabric_info.py b/sonic-mgmt/ansible/library/fabric_info.py similarity index 100% rename from ansible/library/fabric_info.py rename to sonic-mgmt/ansible/library/fabric_info.py diff --git a/ansible/library/fdb_facts.py b/sonic-mgmt/ansible/library/fdb_facts.py similarity index 100% rename from ansible/library/fdb_facts.py rename to sonic-mgmt/ansible/library/fdb_facts.py diff --git a/ansible/library/feature_facts.py b/sonic-mgmt/ansible/library/feature_facts.py similarity index 100% rename from ansible/library/feature_facts.py rename to sonic-mgmt/ansible/library/feature_facts.py diff --git a/ansible/library/fetch_no_slurp.py b/sonic-mgmt/ansible/library/fetch_no_slurp.py similarity index 100% rename from ansible/library/fetch_no_slurp.py rename to sonic-mgmt/ansible/library/fetch_no_slurp.py diff --git a/ansible/library/generate_golden_config_db.py b/sonic-mgmt/ansible/library/generate_golden_config_db.py similarity index 96% rename from ansible/library/generate_golden_config_db.py rename to sonic-mgmt/ansible/library/generate_golden_config_db.py index 3667347c070..5c81e6c1004 100644 --- a/ansible/library/generate_golden_config_db.py +++ b/sonic-mgmt/ansible/library/generate_golden_config_db.py @@ -1228,6 +1228,56 @@ def generate_c0_golden_config_db(self): return json.dumps(golden_config_db, indent=4) + def generate_t0_f2_golden_config_db(self): + """ + Generate golden_config for t0-f2 to enable link_training on server facing ports. + """ + SUPPORTED_TOPO = ["t0-f2-d40u8"] + if self.topo_name not in SUPPORTED_TOPO: + return "{}" + ori_config = json.loads(self.get_config_from_minigraph()) + golden_config = ori_config + golden_config["PORT"] = ori_config.get("PORT", {}) + for _, config in golden_config["PORT"].items(): + # Enable link_training for server facing ports + if "Server" in config.get("description", ""): + config["link_training"] = "on" + + return json.dumps({'PORT': golden_config['PORT']}, indent=4) + + def generate_c0_golden_config_db(self): + """ + Generate golden_config_db for C0 topology. + Add CONSOLE_PORT and CONSOLE_SWITCH config based on serial_links data + passed via the console_ports parameter from device_serial_link fact. + """ + rc, out, err = self.module.run_command("sonic-cfggen -H -m -j /etc/sonic/init_cfg.json --print-data") + if rc != 0: + self.module.fail_json(msg="Failed to get config from minigraph: {}".format(err)) + + ori_config_db = json.loads(out) + + golden_config_db = {} + if "DEVICE_METADATA" in ori_config_db: + golden_config_db["DEVICE_METADATA"] = ori_config_db["DEVICE_METADATA"] + + if self.console_ports: + console_port_config = {} + for port, link_info in self.console_ports.items(): + console_port_config[str(port)] = { + "baud_rate": str(link_info.get("baud_rate", "9600")), + "flow_control": str(link_info.get("flow_control", "0")), + "remote_device": link_info.get("peerdevice", "") + } + golden_config_db["CONSOLE_PORT"] = console_port_config + golden_config_db["CONSOLE_SWITCH"] = { + "console_mgmt": { + "enabled": "yes" + } + } + + return json.dumps(golden_config_db, indent=4) + def generate(self): module_msg = "Success to generate golden_config_db.json" # topo check diff --git a/ansible/library/get_interface.py b/sonic-mgmt/ansible/library/get_interface.py similarity index 100% rename from ansible/library/get_interface.py rename to sonic-mgmt/ansible/library/get_interface.py diff --git a/ansible/library/get_ip_in_range.py b/sonic-mgmt/ansible/library/get_ip_in_range.py similarity index 100% rename from ansible/library/get_ip_in_range.py rename to sonic-mgmt/ansible/library/get_ip_in_range.py diff --git a/ansible/library/get_macsec_profile.py b/sonic-mgmt/ansible/library/get_macsec_profile.py similarity index 100% rename from ansible/library/get_macsec_profile.py rename to sonic-mgmt/ansible/library/get_macsec_profile.py diff --git a/ansible/library/image_facts.py b/sonic-mgmt/ansible/library/image_facts.py similarity index 100% rename from ansible/library/image_facts.py rename to sonic-mgmt/ansible/library/image_facts.py diff --git a/ansible/library/interface_facts.py b/sonic-mgmt/ansible/library/interface_facts.py similarity index 100% rename from ansible/library/interface_facts.py rename to sonic-mgmt/ansible/library/interface_facts.py diff --git a/ansible/library/interface_up_down_data_struct_facts.py b/sonic-mgmt/ansible/library/interface_up_down_data_struct_facts.py similarity index 100% rename from ansible/library/interface_up_down_data_struct_facts.py rename to sonic-mgmt/ansible/library/interface_up_down_data_struct_facts.py diff --git a/ansible/library/ip_route.py b/sonic-mgmt/ansible/library/ip_route.py similarity index 100% rename from ansible/library/ip_route.py rename to sonic-mgmt/ansible/library/ip_route.py diff --git a/ansible/library/isis_facts.py b/sonic-mgmt/ansible/library/isis_facts.py similarity index 100% rename from ansible/library/isis_facts.py rename to sonic-mgmt/ansible/library/isis_facts.py diff --git a/ansible/library/lag_facts.py b/sonic-mgmt/ansible/library/lag_facts.py similarity index 100% rename from ansible/library/lag_facts.py rename to sonic-mgmt/ansible/library/lag_facts.py diff --git a/ansible/library/lldp_facts.py b/sonic-mgmt/ansible/library/lldp_facts.py similarity index 100% rename from ansible/library/lldp_facts.py rename to sonic-mgmt/ansible/library/lldp_facts.py diff --git a/ansible/library/lldpctl_facts.py b/sonic-mgmt/ansible/library/lldpctl_facts.py similarity index 100% rename from ansible/library/lldpctl_facts.py rename to sonic-mgmt/ansible/library/lldpctl_facts.py diff --git a/ansible/library/load_extra_dpu_config.py b/sonic-mgmt/ansible/library/load_extra_dpu_config.py similarity index 100% rename from ansible/library/load_extra_dpu_config.py rename to sonic-mgmt/ansible/library/load_extra_dpu_config.py diff --git a/ansible/library/minigraph_facts.py b/sonic-mgmt/ansible/library/minigraph_facts.py similarity index 100% rename from ansible/library/minigraph_facts.py rename to sonic-mgmt/ansible/library/minigraph_facts.py diff --git a/ansible/library/monit_process.py b/sonic-mgmt/ansible/library/monit_process.py similarity index 100% rename from ansible/library/monit_process.py rename to sonic-mgmt/ansible/library/monit_process.py diff --git a/ansible/library/multi-asic_aware_module_requirements.md b/sonic-mgmt/ansible/library/multi-asic_aware_module_requirements.md similarity index 100% rename from ansible/library/multi-asic_aware_module_requirements.md rename to sonic-mgmt/ansible/library/multi-asic_aware_module_requirements.md diff --git a/ansible/library/mux_cable_facts.py b/sonic-mgmt/ansible/library/mux_cable_facts.py similarity index 100% rename from ansible/library/mux_cable_facts.py rename to sonic-mgmt/ansible/library/mux_cable_facts.py diff --git a/ansible/library/nut_allocate_ip.py b/sonic-mgmt/ansible/library/nut_allocate_ip.py similarity index 100% rename from ansible/library/nut_allocate_ip.py rename to sonic-mgmt/ansible/library/nut_allocate_ip.py diff --git a/ansible/library/nut_test_facts.py b/sonic-mgmt/ansible/library/nut_test_facts.py similarity index 100% rename from ansible/library/nut_test_facts.py rename to sonic-mgmt/ansible/library/nut_test_facts.py diff --git a/ansible/library/ocs_cross_connect.py b/sonic-mgmt/ansible/library/ocs_cross_connect.py similarity index 100% rename from ansible/library/ocs_cross_connect.py rename to sonic-mgmt/ansible/library/ocs_cross_connect.py diff --git a/ansible/library/port_alias.py b/sonic-mgmt/ansible/library/port_alias.py similarity index 100% rename from ansible/library/port_alias.py rename to sonic-mgmt/ansible/library/port_alias.py diff --git a/ansible/library/ptf_portchannel.py b/sonic-mgmt/ansible/library/ptf_portchannel.py similarity index 100% rename from ansible/library/ptf_portchannel.py rename to sonic-mgmt/ansible/library/ptf_portchannel.py diff --git a/ansible/library/reduce_and_add_sonic_images.py b/sonic-mgmt/ansible/library/reduce_and_add_sonic_images.py similarity index 100% rename from ansible/library/reduce_and_add_sonic_images.py rename to sonic-mgmt/ansible/library/reduce_and_add_sonic_images.py diff --git a/ansible/library/sensors_facts.py b/sonic-mgmt/ansible/library/sensors_facts.py similarity index 100% rename from ansible/library/sensors_facts.py rename to sonic-mgmt/ansible/library/sensors_facts.py diff --git a/ansible/library/shell_cmds.py b/sonic-mgmt/ansible/library/shell_cmds.py similarity index 100% rename from ansible/library/shell_cmds.py rename to sonic-mgmt/ansible/library/shell_cmds.py diff --git a/ansible/library/show_interface.py b/sonic-mgmt/ansible/library/show_interface.py similarity index 100% rename from ansible/library/show_interface.py rename to sonic-mgmt/ansible/library/show_interface.py diff --git a/ansible/library/show_ip_interface.py b/sonic-mgmt/ansible/library/show_ip_interface.py similarity index 100% rename from ansible/library/show_ip_interface.py rename to sonic-mgmt/ansible/library/show_ip_interface.py diff --git a/ansible/library/show_ipv6_interface.py b/sonic-mgmt/ansible/library/show_ipv6_interface.py similarity index 100% rename from ansible/library/show_ipv6_interface.py rename to sonic-mgmt/ansible/library/show_ipv6_interface.py diff --git a/ansible/library/snmp_facts.py b/sonic-mgmt/ansible/library/snmp_facts.py similarity index 100% rename from ansible/library/snmp_facts.py rename to sonic-mgmt/ansible/library/snmp_facts.py diff --git a/ansible/library/sonic_basic_facts.py b/sonic-mgmt/ansible/library/sonic_basic_facts.py similarity index 100% rename from ansible/library/sonic_basic_facts.py rename to sonic-mgmt/ansible/library/sonic_basic_facts.py diff --git a/ansible/library/sonic_pfc_counters.py b/sonic-mgmt/ansible/library/sonic_pfc_counters.py similarity index 100% rename from ansible/library/sonic_pfc_counters.py rename to sonic-mgmt/ansible/library/sonic_pfc_counters.py diff --git a/ansible/library/sonic_release.py b/sonic-mgmt/ansible/library/sonic_release.py similarity index 100% rename from ansible/library/sonic_release.py rename to sonic-mgmt/ansible/library/sonic_release.py diff --git a/ansible/library/switch_arptable.py b/sonic-mgmt/ansible/library/switch_arptable.py similarity index 100% rename from ansible/library/switch_arptable.py rename to sonic-mgmt/ansible/library/switch_arptable.py diff --git a/ansible/library/switch_capabilities_facts.py b/sonic-mgmt/ansible/library/switch_capabilities_facts.py similarity index 100% rename from ansible/library/switch_capabilities_facts.py rename to sonic-mgmt/ansible/library/switch_capabilities_facts.py diff --git a/ansible/library/switch_tables.py b/sonic-mgmt/ansible/library/switch_tables.py similarity index 100% rename from ansible/library/switch_tables.py rename to sonic-mgmt/ansible/library/switch_tables.py diff --git a/ansible/library/sysfs_facts.py b/sonic-mgmt/ansible/library/sysfs_facts.py similarity index 100% rename from ansible/library/sysfs_facts.py rename to sonic-mgmt/ansible/library/sysfs_facts.py diff --git a/ansible/library/test_facts.py b/sonic-mgmt/ansible/library/test_facts.py similarity index 100% rename from ansible/library/test_facts.py rename to sonic-mgmt/ansible/library/test_facts.py diff --git a/ansible/library/testbed_vm_info.py b/sonic-mgmt/ansible/library/testbed_vm_info.py similarity index 100% rename from ansible/library/testbed_vm_info.py rename to sonic-mgmt/ansible/library/testbed_vm_info.py diff --git a/ansible/library/testing_port_ip_facts.py b/sonic-mgmt/ansible/library/testing_port_ip_facts.py similarity index 100% rename from ansible/library/testing_port_ip_facts.py rename to sonic-mgmt/ansible/library/testing_port_ip_facts.py diff --git a/ansible/library/topo_facts.py b/sonic-mgmt/ansible/library/topo_facts.py similarity index 100% rename from ansible/library/topo_facts.py rename to sonic-mgmt/ansible/library/topo_facts.py diff --git a/ansible/library/tunnel_config.py b/sonic-mgmt/ansible/library/tunnel_config.py similarity index 100% rename from ansible/library/tunnel_config.py rename to sonic-mgmt/ansible/library/tunnel_config.py diff --git a/ansible/library/upgrade_dpu_sonic_image.py b/sonic-mgmt/ansible/library/upgrade_dpu_sonic_image.py similarity index 100% rename from ansible/library/upgrade_dpu_sonic_image.py rename to sonic-mgmt/ansible/library/upgrade_dpu_sonic_image.py diff --git a/ansible/library/vlan_config.py b/sonic-mgmt/ansible/library/vlan_config.py similarity index 100% rename from ansible/library/vlan_config.py rename to sonic-mgmt/ansible/library/vlan_config.py diff --git a/ansible/library/vlan_facts.py b/sonic-mgmt/ansible/library/vlan_facts.py similarity index 100% rename from ansible/library/vlan_facts.py rename to sonic-mgmt/ansible/library/vlan_facts.py diff --git a/ansible/library/vnut_network.py b/sonic-mgmt/ansible/library/vnut_network.py similarity index 100% rename from ansible/library/vnut_network.py rename to sonic-mgmt/ansible/library/vnut_network.py diff --git a/ansible/linkstate/down.yml b/sonic-mgmt/ansible/linkstate/down.yml similarity index 100% rename from ansible/linkstate/down.yml rename to sonic-mgmt/ansible/linkstate/down.yml diff --git a/ansible/linkstate/scripts/fanout_listener.py b/sonic-mgmt/ansible/linkstate/scripts/fanout_listener.py similarity index 100% rename from ansible/linkstate/scripts/fanout_listener.py rename to sonic-mgmt/ansible/linkstate/scripts/fanout_listener.py diff --git a/ansible/linkstate/scripts/mlnx/fanout_listener.py b/sonic-mgmt/ansible/linkstate/scripts/mlnx/fanout_listener.py similarity index 100% rename from ansible/linkstate/scripts/mlnx/fanout_listener.py rename to sonic-mgmt/ansible/linkstate/scripts/mlnx/fanout_listener.py diff --git a/ansible/linkstate/scripts/ptf_proxy.py b/sonic-mgmt/ansible/linkstate/scripts/ptf_proxy.py similarity index 100% rename from ansible/linkstate/scripts/ptf_proxy.py rename to sonic-mgmt/ansible/linkstate/scripts/ptf_proxy.py diff --git a/ansible/linkstate/scripts/vm_state_changer.py b/sonic-mgmt/ansible/linkstate/scripts/vm_state_changer.py similarity index 100% rename from ansible/linkstate/scripts/vm_state_changer.py rename to sonic-mgmt/ansible/linkstate/scripts/vm_state_changer.py diff --git a/ansible/linkstate/scripts/vm_tcp_listener.py b/sonic-mgmt/ansible/linkstate/scripts/vm_tcp_listener.py similarity index 100% rename from ansible/linkstate/scripts/vm_tcp_listener.py rename to sonic-mgmt/ansible/linkstate/scripts/vm_tcp_listener.py diff --git a/ansible/linkstate/testbed_inv.ini b/sonic-mgmt/ansible/linkstate/testbed_inv.ini similarity index 100% rename from ansible/linkstate/testbed_inv.ini rename to sonic-mgmt/ansible/linkstate/testbed_inv.ini diff --git a/ansible/linkstate/testbed_inv.py b/sonic-mgmt/ansible/linkstate/testbed_inv.py similarity index 100% rename from ansible/linkstate/testbed_inv.py rename to sonic-mgmt/ansible/linkstate/testbed_inv.py diff --git a/ansible/linkstate/up.yml b/sonic-mgmt/ansible/linkstate/up.yml similarity index 100% rename from ansible/linkstate/up.yml rename to sonic-mgmt/ansible/linkstate/up.yml diff --git a/ansible/load_single_dpu_config.yml b/sonic-mgmt/ansible/load_single_dpu_config.yml similarity index 100% rename from ansible/load_single_dpu_config.yml rename to sonic-mgmt/ansible/load_single_dpu_config.yml diff --git a/ansible/mcx.yml b/sonic-mgmt/ansible/mcx.yml similarity index 100% rename from ansible/mcx.yml rename to sonic-mgmt/ansible/mcx.yml diff --git a/ansible/minigraph/SONIC01DPU.xml b/sonic-mgmt/ansible/minigraph/SONIC01DPU.xml similarity index 100% rename from ansible/minigraph/SONIC01DPU.xml rename to sonic-mgmt/ansible/minigraph/SONIC01DPU.xml diff --git a/ansible/module_utils/__init__.py b/sonic-mgmt/ansible/module_utils/__init__.py similarity index 100% rename from ansible/module_utils/__init__.py rename to sonic-mgmt/ansible/module_utils/__init__.py diff --git a/ansible/module_utils/aos/__init__.py b/sonic-mgmt/ansible/module_utils/aos/__init__.py similarity index 100% rename from ansible/module_utils/aos/__init__.py rename to sonic-mgmt/ansible/module_utils/aos/__init__.py diff --git a/ansible/module_utils/aos/aos.py b/sonic-mgmt/ansible/module_utils/aos/aos.py similarity index 100% rename from ansible/module_utils/aos/aos.py rename to sonic-mgmt/ansible/module_utils/aos/aos.py diff --git a/ansible/module_utils/debug_utils.py b/sonic-mgmt/ansible/module_utils/debug_utils.py similarity index 100% rename from ansible/module_utils/debug_utils.py rename to sonic-mgmt/ansible/module_utils/debug_utils.py diff --git a/ansible/module_utils/dualtor_utils.py b/sonic-mgmt/ansible/module_utils/dualtor_utils.py similarity index 100% rename from ansible/module_utils/dualtor_utils.py rename to sonic-mgmt/ansible/module_utils/dualtor_utils.py diff --git a/ansible/module_utils/graph_utils.py b/sonic-mgmt/ansible/module_utils/graph_utils.py similarity index 100% rename from ansible/module_utils/graph_utils.py rename to sonic-mgmt/ansible/module_utils/graph_utils.py diff --git a/ansible/module_utils/misc_utils.py b/sonic-mgmt/ansible/module_utils/misc_utils.py similarity index 100% rename from ansible/module_utils/misc_utils.py rename to sonic-mgmt/ansible/module_utils/misc_utils.py diff --git a/ansible/module_utils/multi_asic_utils.py b/sonic-mgmt/ansible/module_utils/multi_asic_utils.py similarity index 100% rename from ansible/module_utils/multi_asic_utils.py rename to sonic-mgmt/ansible/module_utils/multi_asic_utils.py diff --git a/ansible/module_utils/multi_servers_utils.py b/sonic-mgmt/ansible/module_utils/multi_servers_utils.py similarity index 100% rename from ansible/module_utils/multi_servers_utils.py rename to sonic-mgmt/ansible/module_utils/multi_servers_utils.py diff --git a/ansible/module_utils/parse_utils.py b/sonic-mgmt/ansible/module_utils/parse_utils.py similarity index 100% rename from ansible/module_utils/parse_utils.py rename to sonic-mgmt/ansible/module_utils/parse_utils.py diff --git a/ansible/module_utils/port_utils.py b/sonic-mgmt/ansible/module_utils/port_utils.py similarity index 99% rename from ansible/module_utils/port_utils.py rename to sonic-mgmt/ansible/module_utils/port_utils.py index 1a330625677..329b8e47f44 100644 --- a/ansible/module_utils/port_utils.py +++ b/sonic-mgmt/ansible/module_utils/port_utils.py @@ -474,6 +474,12 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): elif hwsku in ["Cisco-8111-O64"]: for i in range(0, 64): port_alias_to_name_map["etp%d" % i] = "Ethernet%d" % (i * 4) + elif hwsku in ["Cisco-8122-O128S2"]: + for i in range(0, 128): + port_alias_to_name_map["etp%d" % i] = "Ethernet%d" % (i * 4) + elif hwsku == "Cisco-HF6100-60S4D": + for i in range(0, 64): + port_alias_to_name_map["etp%d" % i] = "Ethernet1_%d" % (i + 1) elif hwsku in ["Cisco-8101-O8C48", "Cisco-8101-O8V48"]: for i in range(0, 12): port_alias_to_name_map["etp%da" % i] = "Ethernet%d" % (i * 4 * 2) @@ -490,7 +496,7 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): elif hwsku in ["Cisco-8122-O64", 'Cisco-8122-O64S2']: for i in range(0, 64): port_alias_to_name_map["etp%d" % i] = "Ethernet%d" % (i * 8) - elif hwsku in ["Cisco-8122-O128"]: + elif hwsku in ["Cisco-8122-O128S2", "Cisco-8223-64E-MO", "Cisco-8223-64EF-MO"]: for i in range(0, 64): port_alias_to_name_map["etp%da" % i] = "Ethernet%d" % (i * 4 * 2) port_alias_to_name_map["etp%db" % i] = "Ethernet%d" % ((i * 4 * 2) + 4) diff --git a/ansible/module_utils/serial_utils.py b/sonic-mgmt/ansible/module_utils/serial_utils.py similarity index 100% rename from ansible/module_utils/serial_utils.py rename to sonic-mgmt/ansible/module_utils/serial_utils.py diff --git a/ansible/module_utils/smartswitch_utils.py b/sonic-mgmt/ansible/module_utils/smartswitch_utils.py similarity index 100% rename from ansible/module_utils/smartswitch_utils.py rename to sonic-mgmt/ansible/module_utils/smartswitch_utils.py diff --git a/ansible/ocp b/sonic-mgmt/ansible/ocp similarity index 100% rename from ansible/ocp rename to sonic-mgmt/ansible/ocp diff --git a/ansible/plugins/action/apswitch.py b/sonic-mgmt/ansible/plugins/action/apswitch.py similarity index 100% rename from ansible/plugins/action/apswitch.py rename to sonic-mgmt/ansible/plugins/action/apswitch.py diff --git a/ansible/plugins/action/current_password.py b/sonic-mgmt/ansible/plugins/action/current_password.py similarity index 100% rename from ansible/plugins/action/current_password.py rename to sonic-mgmt/ansible/plugins/action/current_password.py diff --git a/ansible/plugins/action/fetch_no_slurp.py b/sonic-mgmt/ansible/plugins/action/fetch_no_slurp.py similarity index 100% rename from ansible/plugins/action/fetch_no_slurp.py rename to sonic-mgmt/ansible/plugins/action/fetch_no_slurp.py diff --git a/ansible/plugins/action/onie.py b/sonic-mgmt/ansible/plugins/action/onie.py similarity index 100% rename from ansible/plugins/action/onie.py rename to sonic-mgmt/ansible/plugins/action/onie.py diff --git a/ansible/plugins/callback/yaml.py b/sonic-mgmt/ansible/plugins/callback/yaml.py similarity index 100% rename from ansible/plugins/callback/yaml.py rename to sonic-mgmt/ansible/plugins/callback/yaml.py diff --git a/ansible/plugins/connection/multi_passwd_ssh.py b/sonic-mgmt/ansible/plugins/connection/multi_passwd_ssh.py similarity index 100% rename from ansible/plugins/connection/multi_passwd_ssh.py rename to sonic-mgmt/ansible/plugins/connection/multi_passwd_ssh.py diff --git a/ansible/plugins/connection/onie.py b/sonic-mgmt/ansible/plugins/connection/onie.py similarity index 100% rename from ansible/plugins/connection/onie.py rename to sonic-mgmt/ansible/plugins/connection/onie.py diff --git a/ansible/plugins/connection/switch.py b/sonic-mgmt/ansible/plugins/connection/switch.py similarity index 98% rename from ansible/plugins/connection/switch.py rename to sonic-mgmt/ansible/plugins/connection/switch.py index a652e907ee6..61440013a45 100644 --- a/ansible/plugins/connection/switch.py +++ b/sonic-mgmt/ansible/plugins/connection/switch.py @@ -33,10 +33,7 @@ def _connect(self): def _build_command(self): self._ssh_command = ['ssh', '-tt', '-q'] - if hasattr(C, 'ANSIBLE_SSH_ARGS'): - ansible_ssh_args = C.ANSIBLE_SSH_ARGS - else: - ansible_ssh_args = None + ansible_ssh_args = C.ANSIBLE_SSH_ARGS if ansible_ssh_args: self._ssh_command += shlex.split(ansible_ssh_args) else: @@ -121,6 +118,7 @@ def _spawn_connect(self): self.before_backup = client.before.decode().split() # determine the sku + client.sendline('terminal length 0') client.sendline('show version') while True: client.expect(['#', '>']) diff --git a/ansible/plugins/filter/filters.py b/sonic-mgmt/ansible/plugins/filter/filters.py similarity index 100% rename from ansible/plugins/filter/filters.py rename to sonic-mgmt/ansible/plugins/filter/filters.py diff --git a/ansible/plugins/lookup/graphfile.py b/sonic-mgmt/ansible/plugins/lookup/graphfile.py similarity index 100% rename from ansible/plugins/lookup/graphfile.py rename to sonic-mgmt/ansible/plugins/lookup/graphfile.py diff --git a/ansible/plugins/lookup/servercfgd_client.py b/sonic-mgmt/ansible/plugins/lookup/servercfgd_client.py similarity index 100% rename from ansible/plugins/lookup/servercfgd_client.py rename to sonic-mgmt/ansible/plugins/lookup/servercfgd_client.py diff --git a/ansible/recover_server.py b/sonic-mgmt/ansible/recover_server.py similarity index 100% rename from ansible/recover_server.py rename to sonic-mgmt/ansible/recover_server.py diff --git a/ansible/restart_nightly_ptf.py b/sonic-mgmt/ansible/restart_nightly_ptf.py similarity index 100% rename from ansible/restart_nightly_ptf.py rename to sonic-mgmt/ansible/restart_nightly_ptf.py diff --git a/ansible/revert_syncd.yml b/sonic-mgmt/ansible/revert_syncd.yml similarity index 100% rename from ansible/revert_syncd.yml rename to sonic-mgmt/ansible/revert_syncd.yml diff --git a/ansible/roles/cisco/tasks/main.yml b/sonic-mgmt/ansible/roles/cisco/tasks/main.yml similarity index 100% rename from ansible/roles/cisco/tasks/main.yml rename to sonic-mgmt/ansible/roles/cisco/tasks/main.yml diff --git a/ansible/roles/cisco/tasks/vcisco.yml b/sonic-mgmt/ansible/roles/cisco/tasks/vcisco.yml similarity index 100% rename from ansible/roles/cisco/tasks/vcisco.yml rename to sonic-mgmt/ansible/roles/cisco/tasks/vcisco.yml diff --git a/ansible/roles/cisco/templates/wan-pub-core.j2 b/sonic-mgmt/ansible/roles/cisco/templates/wan-pub-core.j2 similarity index 100% rename from ansible/roles/cisco/templates/wan-pub-core.j2 rename to sonic-mgmt/ansible/roles/cisco/templates/wan-pub-core.j2 diff --git a/ansible/roles/connection_db/files/add_console_server.lua b/sonic-mgmt/ansible/roles/connection_db/files/add_console_server.lua similarity index 100% rename from ansible/roles/connection_db/files/add_console_server.lua rename to sonic-mgmt/ansible/roles/connection_db/files/add_console_server.lua diff --git a/ansible/roles/connection_db/files/add_pdu.lua b/sonic-mgmt/ansible/roles/connection_db/files/add_pdu.lua similarity index 100% rename from ansible/roles/connection_db/files/add_pdu.lua rename to sonic-mgmt/ansible/roles/connection_db/files/add_pdu.lua diff --git a/ansible/roles/connection_db/files/add_phy_link.lua b/sonic-mgmt/ansible/roles/connection_db/files/add_phy_link.lua similarity index 100% rename from ansible/roles/connection_db/files/add_phy_link.lua rename to sonic-mgmt/ansible/roles/connection_db/files/add_phy_link.lua diff --git a/ansible/roles/connection_db/files/add_switch.lua b/sonic-mgmt/ansible/roles/connection_db/files/add_switch.lua similarity index 100% rename from ansible/roles/connection_db/files/add_switch.lua rename to sonic-mgmt/ansible/roles/connection_db/files/add_switch.lua diff --git a/ansible/roles/connection_db/files/add_test_server.lua b/sonic-mgmt/ansible/roles/connection_db/files/add_test_server.lua similarity index 100% rename from ansible/roles/connection_db/files/add_test_server.lua rename to sonic-mgmt/ansible/roles/connection_db/files/add_test_server.lua diff --git a/ansible/roles/connection_db/files/cleanup.lua b/sonic-mgmt/ansible/roles/connection_db/files/cleanup.lua similarity index 100% rename from ansible/roles/connection_db/files/cleanup.lua rename to sonic-mgmt/ansible/roles/connection_db/files/cleanup.lua diff --git a/ansible/roles/connection_db/files/redis.conf b/sonic-mgmt/ansible/roles/connection_db/files/redis.conf similarity index 100% rename from ansible/roles/connection_db/files/redis.conf rename to sonic-mgmt/ansible/roles/connection_db/files/redis.conf diff --git a/ansible/roles/connection_db/files/servercfgd.py b/sonic-mgmt/ansible/roles/connection_db/files/servercfgd.py similarity index 100% rename from ansible/roles/connection_db/files/servercfgd.py rename to sonic-mgmt/ansible/roles/connection_db/files/servercfgd.py diff --git a/ansible/roles/connection_db/files/update_console.lua b/sonic-mgmt/ansible/roles/connection_db/files/update_console.lua similarity index 100% rename from ansible/roles/connection_db/files/update_console.lua rename to sonic-mgmt/ansible/roles/connection_db/files/update_console.lua diff --git a/ansible/roles/connection_db/files/update_device_psu.lua b/sonic-mgmt/ansible/roles/connection_db/files/update_device_psu.lua similarity index 100% rename from ansible/roles/connection_db/files/update_device_psu.lua rename to sonic-mgmt/ansible/roles/connection_db/files/update_device_psu.lua diff --git a/ansible/roles/connection_db/files/update_vlanid.lua b/sonic-mgmt/ansible/roles/connection_db/files/update_vlanid.lua similarity index 100% rename from ansible/roles/connection_db/files/update_vlanid.lua rename to sonic-mgmt/ansible/roles/connection_db/files/update_vlanid.lua diff --git a/ansible/roles/connection_db/handlers/main.yml b/sonic-mgmt/ansible/roles/connection_db/handlers/main.yml similarity index 100% rename from ansible/roles/connection_db/handlers/main.yml rename to sonic-mgmt/ansible/roles/connection_db/handlers/main.yml diff --git a/ansible/roles/connection_db/tasks/main.yml b/sonic-mgmt/ansible/roles/connection_db/tasks/main.yml similarity index 100% rename from ansible/roles/connection_db/tasks/main.yml rename to sonic-mgmt/ansible/roles/connection_db/tasks/main.yml diff --git a/ansible/roles/connection_db/tasks/provision_db.yml b/sonic-mgmt/ansible/roles/connection_db/tasks/provision_db.yml similarity index 100% rename from ansible/roles/connection_db/tasks/provision_db.yml rename to sonic-mgmt/ansible/roles/connection_db/tasks/provision_db.yml diff --git a/ansible/roles/connection_db/tasks/start_db.yml b/sonic-mgmt/ansible/roles/connection_db/tasks/start_db.yml similarity index 100% rename from ansible/roles/connection_db/tasks/start_db.yml rename to sonic-mgmt/ansible/roles/connection_db/tasks/start_db.yml diff --git a/ansible/roles/connection_db/tasks/stop_db.yml b/sonic-mgmt/ansible/roles/connection_db/tasks/stop_db.yml similarity index 100% rename from ansible/roles/connection_db/tasks/stop_db.yml rename to sonic-mgmt/ansible/roles/connection_db/tasks/stop_db.yml diff --git a/ansible/roles/connection_db/templates/servercfgd.service.j2 b/sonic-mgmt/ansible/roles/connection_db/templates/servercfgd.service.j2 similarity index 100% rename from ansible/roles/connection_db/templates/servercfgd.service.j2 rename to sonic-mgmt/ansible/roles/connection_db/templates/servercfgd.service.j2 diff --git a/ansible/roles/eos/files/boot-config b/sonic-mgmt/ansible/roles/eos/files/boot-config similarity index 100% rename from ansible/roles/eos/files/boot-config rename to sonic-mgmt/ansible/roles/eos/files/boot-config diff --git a/ansible/roles/eos/files/rc.eos b/sonic-mgmt/ansible/roles/eos/files/rc.eos similarity index 100% rename from ansible/roles/eos/files/rc.eos rename to sonic-mgmt/ansible/roles/eos/files/rc.eos diff --git a/ansible/roles/eos/handlers/main.yml b/sonic-mgmt/ansible/roles/eos/handlers/main.yml similarity index 100% rename from ansible/roles/eos/handlers/main.yml rename to sonic-mgmt/ansible/roles/eos/handlers/main.yml diff --git a/ansible/roles/eos/tasks/ceos.yml b/sonic-mgmt/ansible/roles/eos/tasks/ceos.yml similarity index 100% rename from ansible/roles/eos/tasks/ceos.yml rename to sonic-mgmt/ansible/roles/eos/tasks/ceos.yml diff --git a/ansible/roles/eos/tasks/ceos_config.yml b/sonic-mgmt/ansible/roles/eos/tasks/ceos_config.yml similarity index 100% rename from ansible/roles/eos/tasks/ceos_config.yml rename to sonic-mgmt/ansible/roles/eos/tasks/ceos_config.yml diff --git a/ansible/roles/eos/tasks/ceos_ensure_reachable.yml b/sonic-mgmt/ansible/roles/eos/tasks/ceos_ensure_reachable.yml similarity index 100% rename from ansible/roles/eos/tasks/ceos_ensure_reachable.yml rename to sonic-mgmt/ansible/roles/eos/tasks/ceos_ensure_reachable.yml diff --git a/ansible/roles/eos/tasks/main.yml b/sonic-mgmt/ansible/roles/eos/tasks/main.yml similarity index 100% rename from ansible/roles/eos/tasks/main.yml rename to sonic-mgmt/ansible/roles/eos/tasks/main.yml diff --git a/ansible/roles/eos/tasks/veos.yml b/sonic-mgmt/ansible/roles/eos/tasks/veos.yml similarity index 100% rename from ansible/roles/eos/tasks/veos.yml rename to sonic-mgmt/ansible/roles/eos/tasks/veos.yml diff --git a/ansible/roles/eos/templates/c0-c1.j2 b/sonic-mgmt/ansible/roles/eos/templates/c0-c1.j2 similarity index 100% rename from ansible/roles/eos/templates/c0-c1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/c0-c1.j2 diff --git a/ansible/roles/eos/templates/c0-lo-c1.j2 b/sonic-mgmt/ansible/roles/eos/templates/c0-lo-c1.j2 similarity index 100% rename from ansible/roles/eos/templates/c0-lo-c1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/c0-lo-c1.j2 diff --git a/ansible/roles/eos/templates/c0-lo-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/c0-lo-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/c0-lo-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/c0-lo-m0.j2 diff --git a/ansible/roles/eos/templates/c0-lo-m1.j2 b/sonic-mgmt/ansible/roles/eos/templates/c0-lo-m1.j2 similarity index 100% rename from ansible/roles/eos/templates/c0-lo-m1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/c0-lo-m1.j2 diff --git a/ansible/roles/eos/templates/c0-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/c0-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/c0-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/c0-m0.j2 diff --git a/ansible/roles/eos/templates/c0-m1.j2 b/sonic-mgmt/ansible/roles/eos/templates/c0-m1.j2 similarity index 100% rename from ansible/roles/eos/templates/c0-m1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/c0-m1.j2 diff --git a/ansible/roles/eos/templates/ceos_bp_compat.j2 b/sonic-mgmt/ansible/roles/eos/templates/ceos_bp_compat.j2 similarity index 100% rename from ansible/roles/eos/templates/ceos_bp_compat.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ceos_bp_compat.j2 diff --git a/ansible/roles/eos/templates/ceos_converged.j2 b/sonic-mgmt/ansible/roles/eos/templates/ceos_converged.j2 similarity index 100% rename from ansible/roles/eos/templates/ceos_converged.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ceos_converged.j2 diff --git a/ansible/roles/eos/templates/dpu-1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/dpu-1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/dpu-1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dpu-1-tor.j2 diff --git a/ansible/roles/eos/templates/dpu-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/dpu-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/dpu-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dpu-tor.j2 diff --git a/ansible/roles/eos/templates/dualtor-120-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-120-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-120-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-120-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-56-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-56-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-56-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-56-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-64-breakout-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-64-breakout-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-64-breakout-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-64-breakout-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-64-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-64-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-64-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-64-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-aa-120-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-120-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-aa-120-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-120-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-aa-56-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-56-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-aa-56-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-56-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-aa-64-breakout-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-64-breakout-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-aa-64-breakout-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-64-breakout-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-aa-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-aa-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-aa-vpp-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-vpp-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-aa-vpp-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-aa-vpp-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-mixed-120-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-mixed-120-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-mixed-120-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-mixed-120-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-mixed-56-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-mixed-56-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-mixed-56-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-mixed-56-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-mixed-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-mixed-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-mixed-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-mixed-leaf.j2 diff --git a/ansible/roles/eos/templates/dualtor-vpp-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/dualtor-vpp-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/dualtor-vpp-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/dualtor-vpp-leaf.j2 diff --git a/ansible/roles/eos/templates/ft2-16-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/ft2-16-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/ft2-16-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ft2-16-leaf.j2 diff --git a/ansible/roles/eos/templates/ft2-16-lowerspine.j2 b/sonic-mgmt/ansible/roles/eos/templates/ft2-16-lowerspine.j2 similarity index 100% rename from ansible/roles/eos/templates/ft2-16-lowerspine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ft2-16-lowerspine.j2 diff --git a/ansible/roles/eos/templates/ft2-64-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/ft2-64-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/ft2-64-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ft2-64-leaf.j2 diff --git a/ansible/roles/eos/templates/ft2-64-lowerspine.j2 b/sonic-mgmt/ansible/roles/eos/templates/ft2-64-lowerspine.j2 similarity index 100% rename from ansible/roles/eos/templates/ft2-64-lowerspine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ft2-64-lowerspine.j2 diff --git a/ansible/roles/eos/templates/ft2-o128-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/ft2-o128-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/ft2-o128-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ft2-o128-leaf.j2 diff --git a/ansible/roles/eos/templates/ft2-o128-lowerspine.j2 b/sonic-mgmt/ansible/roles/eos/templates/ft2-o128-lowerspine.j2 similarity index 100% rename from ansible/roles/eos/templates/ft2-o128-lowerspine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/ft2-o128-lowerspine.j2 diff --git a/ansible/roles/eos/templates/lrh-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/lrh-core.j2 similarity index 100% rename from ansible/roles/eos/templates/lrh-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lrh-core.j2 diff --git a/ansible/roles/eos/templates/lrh-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/lrh-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/lrh-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lrh-leaf.j2 diff --git a/ansible/roles/eos/templates/lrh_min-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/lrh_min-core.j2 similarity index 100% rename from ansible/roles/eos/templates/lrh_min-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lrh_min-core.j2 diff --git a/ansible/roles/eos/templates/lrh_min-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/lrh_min-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/lrh_min-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lrh_min-leaf.j2 diff --git a/ansible/roles/eos/templates/lt2-o128-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-o128-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-o128-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-o128-leaf.j2 diff --git a/ansible/roles/eos/templates/lt2-o128-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-o128-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-o128-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-o128-spine.j2 diff --git a/ansible/roles/eos/templates/lt2-o128-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-o128-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-o128-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-o128-tor.j2 diff --git a/ansible/roles/eos/templates/lt2-o256-u32d224-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-o256-u32d224-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-o256-u32d224-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-o256-u32d224-leaf.j2 diff --git a/ansible/roles/eos/templates/lt2-o256-u32d224-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-o256-u32d224-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-o256-u32d224-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-o256-u32d224-spine.j2 diff --git a/ansible/roles/eos/templates/lt2-p32o64-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-p32o64-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-p32o64-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-p32o64-leaf.j2 diff --git a/ansible/roles/eos/templates/lt2-p32o64-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/lt2-p32o64-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/lt2-p32o64-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/lt2-p32o64-spine.j2 diff --git a/ansible/roles/eos/templates/m0-2vlan-m1.j2 b/sonic-mgmt/ansible/roles/eos/templates/m0-2vlan-m1.j2 similarity index 100% rename from ansible/roles/eos/templates/m0-2vlan-m1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m0-2vlan-m1.j2 diff --git a/ansible/roles/eos/templates/m0-2vlan-mx.j2 b/sonic-mgmt/ansible/roles/eos/templates/m0-2vlan-mx.j2 similarity index 100% rename from ansible/roles/eos/templates/m0-2vlan-mx.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m0-2vlan-mx.j2 diff --git a/ansible/roles/eos/templates/m0-m1.j2 b/sonic-mgmt/ansible/roles/eos/templates/m0-m1.j2 similarity index 100% rename from ansible/roles/eos/templates/m0-m1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m0-m1.j2 diff --git a/ansible/roles/eos/templates/m0-mx.j2 b/sonic-mgmt/ansible/roles/eos/templates/m0-mx.j2 similarity index 100% rename from ansible/roles/eos/templates/m0-mx.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m0-mx.j2 diff --git a/ansible/roles/eos/templates/m1-108-c0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-108-c0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-108-c0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-108-c0.j2 diff --git a/ansible/roles/eos/templates/m1-108-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-108-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-108-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-108-m0.j2 diff --git a/ansible/roles/eos/templates/m1-108-ma.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-108-ma.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-108-ma.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-108-ma.j2 diff --git a/ansible/roles/eos/templates/m1-108-mb.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-108-mb.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-108-mb.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-108-mb.j2 diff --git a/ansible/roles/eos/templates/m1-128-c0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-128-c0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-128-c0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-128-c0.j2 diff --git a/ansible/roles/eos/templates/m1-128-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-128-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-128-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-128-m0.j2 diff --git a/ansible/roles/eos/templates/m1-128-ma.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-128-ma.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-128-ma.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-128-ma.j2 diff --git a/ansible/roles/eos/templates/m1-128-mb.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-128-mb.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-128-mb.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-128-mb.j2 diff --git a/ansible/roles/eos/templates/m1-44-c0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-44-c0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-44-c0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-44-c0.j2 diff --git a/ansible/roles/eos/templates/m1-44-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-44-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-44-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-44-m0.j2 diff --git a/ansible/roles/eos/templates/m1-44-ma.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-44-ma.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-44-ma.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-44-ma.j2 diff --git a/ansible/roles/eos/templates/m1-44-mb.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-44-mb.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-44-mb.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-44-mb.j2 diff --git a/ansible/roles/eos/templates/m1-48-c0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-48-c0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-48-c0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-48-c0.j2 diff --git a/ansible/roles/eos/templates/m1-48-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-48-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-48-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-48-m0.j2 diff --git a/ansible/roles/eos/templates/m1-48-ma.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-48-ma.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-48-ma.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-48-ma.j2 diff --git a/ansible/roles/eos/templates/m1-48-mb.j2 b/sonic-mgmt/ansible/roles/eos/templates/m1-48-mb.j2 similarity index 100% rename from ansible/roles/eos/templates/m1-48-mb.j2 rename to sonic-mgmt/ansible/roles/eos/templates/m1-48-mb.j2 diff --git a/ansible/roles/eos/templates/mc0-m1.j2 b/sonic-mgmt/ansible/roles/eos/templates/mc0-m1.j2 similarity index 100% rename from ansible/roles/eos/templates/mc0-m1.j2 rename to sonic-mgmt/ansible/roles/eos/templates/mc0-m1.j2 diff --git a/ansible/roles/eos/templates/mc0-mx.j2 b/sonic-mgmt/ansible/roles/eos/templates/mc0-mx.j2 similarity index 100% rename from ansible/roles/eos/templates/mc0-mx.j2 rename to sonic-mgmt/ansible/roles/eos/templates/mc0-mx.j2 diff --git a/ansible/roles/eos/templates/mgmttor-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/mgmttor-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/mgmttor-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/mgmttor-leaf.j2 diff --git a/ansible/roles/eos/templates/mx-m0.j2 b/sonic-mgmt/ansible/roles/eos/templates/mx-m0.j2 similarity index 100% rename from ansible/roles/eos/templates/mx-m0.j2 rename to sonic-mgmt/ansible/roles/eos/templates/mx-m0.j2 diff --git a/ansible/roles/eos/templates/smartswitch-t1-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/smartswitch-t1-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/smartswitch-t1-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/smartswitch-t1-spine.j2 diff --git a/ansible/roles/eos/templates/smartswitch-t1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/smartswitch-t1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/smartswitch-t1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/smartswitch-t1-tor.j2 diff --git a/ansible/roles/eos/templates/t0-104-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-104-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-104-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-104-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-116-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-116-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-116-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-116-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-118-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-118-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-118-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-118-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-120-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-120-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-120-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-120-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-16-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-16-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-16-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-16-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-28-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-28-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-28-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-28-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-52-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-52-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-52-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-52-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-54-po2vlan-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-54-po2vlan-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-54-po2vlan-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-54-po2vlan-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-56-d48c8-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-56-d48c8-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-56-d48c8-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-56-d48c8-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-56-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-56-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-56-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-56-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-56-o8v48-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-56-o8v48-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-56-o8v48-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-56-o8v48-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-56-po2vlan-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-56-po2vlan-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-56-po2vlan-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-56-po2vlan-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-64-32-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-64-32-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-64-32-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-64-32-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-64-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-64-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-64-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-64-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-8-lag-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-8-lag-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-8-lag-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-8-lag-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-80-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-80-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-80-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-80-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-88-o8c80-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-88-o8c80-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-88-o8c80-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-88-o8c80-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-backend-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-backend-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-backend-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-backend-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-d18u8s4-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-d18u8s4-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-d18u8s4-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-d18u8s4-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-f2-d40u8-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-f2-d40u8-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-f2-d40u8-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-f2-d40u8-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-f2-d40u8-po2vlan-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-f2-d40u8-po2vlan-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-f2-d40u8-po2vlan-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-f2-d40u8-po2vlan-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d128u128s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d128u128s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d128u128s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d128u128s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d16u16s1-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d16u16s1-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d16u16s1-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d16u16s1-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d16u16s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d16u16s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d16u16s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d16u16s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d16u16s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d16u16s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d16u16s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d16u16s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d256u256s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d256u256s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d256u256s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d256u256s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d256u256s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d256u256s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d256u256s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d256u256s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u254-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u254-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u254s1-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s1-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u254s1-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s1-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u254s1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u254s1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s1-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u254s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u254s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u254s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u254s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u254s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u510-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u510-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u510-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u510-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u510s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u510s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u510s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u510s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d2u510s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u510s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d2u510s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d2u510s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d32u32s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d32u32s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-spine.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-mix-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d32u32s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d32u32s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d32u32s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d96u32s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d96u32s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d96u32s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d96u32s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d96u32s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d96u32s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-d96u32s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-d96u32s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d128u128s1-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d128u128s1-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d128u128s1-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d128u128s1-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d128u128s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d16u16s1-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d16u16s1-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d16u16s1-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d16u16s1-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d16u16s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d256u256s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d32u32s2-tor.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-v6-d96u32s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d96u32s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-isolated-v6-d96u32s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-isolated-v6-d96u32s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-leaf-lag-2.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-leaf-lag-2.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-leaf-lag-2.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-leaf-lag-2.j2 diff --git a/ansible/roles/eos/templates/t0-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-mclag-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-mclag-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-mclag-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-mclag-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-v6-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-v6-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-v6-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-v6-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-vpp-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t0-vpp-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t0-vpp-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t0-vpp-leaf.j2 diff --git a/ansible/roles/eos/templates/t1-28-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-28-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-28-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-28-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-28-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-32-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-32-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-32-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-32-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-32-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-32-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-32-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-32-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-48-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-48-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-48-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-48-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-48-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-48-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-48-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-48-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-56-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-56-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-56-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-56-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-56-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-56-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-56-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-56-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-64-lag-clet-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-clet-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-64-lag-clet-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-clet-spine.j2 diff --git a/ansible/roles/eos/templates/t1-64-lag-clet-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-clet-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-64-lag-clet-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-clet-tor.j2 diff --git a/ansible/roles/eos/templates/t1-64-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-64-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-64-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-64-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-64-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-8-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-8-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-8-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-8-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-8-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-8-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-8-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-8-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-backend-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-backend-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-backend-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-backend-tor.j2 diff --git a/ansible/roles/eos/templates/t1-f2-d10u8-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-f2-d10u8-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-f2-d10u8-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-f2-d10u8-spine.j2 diff --git a/ansible/roles/eos/templates/t1-f2-d10u8-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-f2-d10u8-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-f2-d10u8-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-f2-d10u8-tor.j2 diff --git a/ansible/roles/eos/templates/t1-filterleaf-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-filterleaf-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-filterleaf-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-filterleaf-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-filterleaf-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-filterleaf-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-filterleaf-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-filterleaf-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d128-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d128-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d128-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d128-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d224u8-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d224u8-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d224u8-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d224u8-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d224u8-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d224u8-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d224u8-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d224u8-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d254u2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d254u2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d254u2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d254u2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d254u2s1-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s1-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d254u2s1-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s1-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d254u2s1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d254u2s1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s1-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d254u2s2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d254u2s2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d254u2s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d254u2s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d254u2s2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d28u1-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u1-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d28u1-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u1-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d28u1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d28u1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u1-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d28u4-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u4-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d28u4-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u4-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d28u4-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u4-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d28u4-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d28u4-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d32-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d32-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d32u1s2-pleaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32u1s2-pleaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d32u1s2-pleaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32u1s2-pleaf.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d32u1s2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32u1s2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d32u1s2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32u1s2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d32u1s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32u1s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d32u1s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d32u1s2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d448u15-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u15-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d448u15-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u15-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d448u15-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u15-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d448u15-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u15-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d448u16-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u16-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d448u16-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u16-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d448u16-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u16-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d448u16-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d448u16-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d508u1s2-pleaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d508u1s2-pleaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d508u1s2-pleaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d508u1s2-pleaf.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d508u1s2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d508u1s2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d508u1s2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d508u1s2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d508u1s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d508u1s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d508u1s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d508u1s2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d510u2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d510u2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d510u2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d510u2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d510u2s2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2s2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d510u2s2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2s2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d510u2s2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2s2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d510u2s2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d510u2s2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d56u1-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u1-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d56u1-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u1-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d56u1-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u1-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d56u1-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u1-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d56u2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d56u2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-d56u2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-d56u2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-d56u2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d128-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d128-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d128-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d128-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d128-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d128-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d128-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d128-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d224u8-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d224u8-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d224u8-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d224u8-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d224u8-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d224u8-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d224u8-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d224u8-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d28u1-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d28u1-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d28u1-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d28u1-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d28u1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d28u1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d28u1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d28u1-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u15-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d448u16-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u16-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d448u16-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u16-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d448u16-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u16-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d448u16-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d448u16-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u1-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d56u2-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u2-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d56u2-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u2-spine.j2 diff --git a/ansible/roles/eos/templates/t1-isolated-v6-d56u2-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u2-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-isolated-v6-d56u2-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-isolated-v6-d56u2-tor.j2 diff --git a/ansible/roles/eos/templates/t1-lag-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-lag-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-lag-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-lag-spine.j2 diff --git a/ansible/roles/eos/templates/t1-lag-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-lag-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-lag-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-lag-tor.j2 diff --git a/ansible/roles/eos/templates/t1-lag-vpp-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-lag-vpp-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-lag-vpp-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-lag-vpp-spine.j2 diff --git a/ansible/roles/eos/templates/t1-lag-vpp-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-lag-vpp-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-lag-vpp-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-lag-vpp-tor.j2 diff --git a/ansible/roles/eos/templates/t1-smartswitch-ha-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-ha-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-smartswitch-ha-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-ha-spine.j2 diff --git a/ansible/roles/eos/templates/t1-smartswitch-ha-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-ha-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-smartswitch-ha-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-ha-tor.j2 diff --git a/ansible/roles/eos/templates/t1-smartswitch-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-smartswitch-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-spine.j2 diff --git a/ansible/roles/eos/templates/t1-smartswitch-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-smartswitch-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-smartswitch-tor.j2 diff --git a/ansible/roles/eos/templates/t1-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-spine.j2 diff --git a/ansible/roles/eos/templates/t1-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-tor.j2 diff --git a/ansible/roles/eos/templates/t1-vpp-spine.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-vpp-spine.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-vpp-spine.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-vpp-spine.j2 diff --git a/ansible/roles/eos/templates/t1-vpp-tor.j2 b/sonic-mgmt/ansible/roles/eos/templates/t1-vpp-tor.j2 similarity index 100% rename from ansible/roles/eos/templates/t1-vpp-tor.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t1-vpp-tor.j2 diff --git a/ansible/roles/eos/templates/t2-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-core.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-core.j2 diff --git a/ansible/roles/eos/templates/t2-isolated-d128s2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-isolated-d128s2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-isolated-d128s2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-isolated-d128s2-leaf.j2 diff --git a/ansible/roles/eos/templates/t2-isolated-d128s2-peer-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-isolated-d128s2-peer-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-isolated-d128s2-peer-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-isolated-d128s2-peer-leaf.j2 diff --git a/ansible/roles/eos/templates/t2-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-leaf.j2 diff --git a/ansible/roles/eos/templates/t2-single-node-max-64p-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-single-node-max-64p-core.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-single-node-max-64p-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-single-node-max-64p-core.j2 diff --git a/ansible/roles/eos/templates/t2-single-node-max-64p-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-single-node-max-64p-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-single-node-max-64p-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-single-node-max-64p-leaf.j2 diff --git a/ansible/roles/eos/templates/t2-single-node-min-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-single-node-min-core.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-single-node-min-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-single-node-min-core.j2 diff --git a/ansible/roles/eos/templates/t2-single-node-min-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-single-node-min-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-single-node-min-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-single-node-min-leaf.j2 diff --git a/ansible/roles/eos/templates/t2-vs-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-vs-core.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-vs-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-vs-core.j2 diff --git a/ansible/roles/eos/templates/t2-vs-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2-vs-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/t2-vs-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/t2-vs-leaf.j2 diff --git a/sonic-mgmt/ansible/roles/eos/templates/t2_2lc_min_ports-masic-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2_2lc_min_ports-masic-core.j2 new file mode 100644 index 00000000000..192236da66e --- /dev/null +++ b/sonic-mgmt/ansible/roles/eos/templates/t2_2lc_min_ports-masic-core.j2 @@ -0,0 +1,139 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + mtu 9214 + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} maximum-routes 0 + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} maximum-routes 0 + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} maximum-routes 0 + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/eos/templates/t2_2lc_min_ports-masic-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/t2_2lc_min_ports-masic-leaf.j2 new file mode 100644 index 00000000000..8e22919b356 --- /dev/null +++ b/sonic-mgmt/ansible/roles/eos/templates/t2_2lc_min_ports-masic-leaf.j2 @@ -0,0 +1,137 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + mtu 9214 + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} maximum-routes 0 + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/ansible/roles/eos/templates/urh-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/urh-core.j2 similarity index 100% rename from ansible/roles/eos/templates/urh-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/urh-core.j2 diff --git a/ansible/roles/eos/templates/urh-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/urh-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/urh-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/urh-leaf.j2 diff --git a/ansible/roles/eos/templates/urh_min-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/urh_min-core.j2 similarity index 100% rename from ansible/roles/eos/templates/urh_min-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/urh_min-core.j2 diff --git a/ansible/roles/eos/templates/urh_min-leaf.j2 b/sonic-mgmt/ansible/roles/eos/templates/urh_min-leaf.j2 similarity index 100% rename from ansible/roles/eos/templates/urh_min-leaf.j2 rename to sonic-mgmt/ansible/roles/eos/templates/urh_min-leaf.j2 diff --git a/ansible/roles/eos/templates/wan-2dut-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/wan-2dut-core.j2 similarity index 100% rename from ansible/roles/eos/templates/wan-2dut-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/wan-2dut-core.j2 diff --git a/ansible/roles/eos/templates/wan-3link-tg-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/wan-3link-tg-core.j2 similarity index 100% rename from ansible/roles/eos/templates/wan-3link-tg-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/wan-3link-tg-core.j2 diff --git a/ansible/roles/eos/templates/wan-4link-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/wan-4link-core.j2 similarity index 100% rename from ansible/roles/eos/templates/wan-4link-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/wan-4link-core.j2 diff --git a/ansible/roles/eos/templates/wan-ecmp-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/wan-ecmp-core.j2 similarity index 100% rename from ansible/roles/eos/templates/wan-ecmp-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/wan-ecmp-core.j2 diff --git a/ansible/roles/eos/templates/wan-pub-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/wan-pub-core.j2 similarity index 100% rename from ansible/roles/eos/templates/wan-pub-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/wan-pub-core.j2 diff --git a/ansible/roles/eos/templates/wan-pub-isis-core.j2 b/sonic-mgmt/ansible/roles/eos/templates/wan-pub-isis-core.j2 similarity index 100% rename from ansible/roles/eos/templates/wan-pub-isis-core.j2 rename to sonic-mgmt/ansible/roles/eos/templates/wan-pub-isis-core.j2 diff --git a/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.py b/sonic-mgmt/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.py similarity index 99% rename from ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.py rename to sonic-mgmt/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.py index 45430edf783..330fff8fc0b 100644 --- a/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.py +++ b/sonic-mgmt/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.py @@ -46,7 +46,6 @@ sys.exit(1) """ - def start_dshell_client(): """ Starts the dshell_client service inside the syncd container. @@ -77,7 +76,6 @@ def start_dshell_client(): print(f"CRITICAL: Execution error while starting dshell_client: {e}") sys.exit(1) - def attempt_trap_clear(): # Strip empty lines and append quit() lines = [line for line in DSHELL_PAYLOAD.splitlines() if line.strip()] @@ -105,7 +103,6 @@ def attempt_trap_clear(): print(f"Execution error: {e}") return False - def main(): print("Starting Cisco 8102 Trap Clear Sequence...") @@ -126,6 +123,5 @@ def main(): print("Timeout: Failed to clear traps after 10 minutes.") sys.exit(1) - if __name__ == "__main__": main() diff --git a/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.service b/sonic-mgmt/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.service similarity index 100% rename from ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.service rename to sonic-mgmt/ansible/roles/fanout/files/cisco/cisco_fanout_traps_clear.service diff --git a/ansible/roles/fanout/files/x86_64-arista_7060_cx32s.json b/sonic-mgmt/ansible/roles/fanout/files/x86_64-arista_7060_cx32s.json similarity index 100% rename from ansible/roles/fanout/files/x86_64-arista_7060_cx32s.json rename to sonic-mgmt/ansible/roles/fanout/files/x86_64-arista_7060_cx32s.json diff --git a/ansible/roles/fanout/handlers/main.yml b/sonic-mgmt/ansible/roles/fanout/handlers/main.yml similarity index 100% rename from ansible/roles/fanout/handlers/main.yml rename to sonic-mgmt/ansible/roles/fanout/handlers/main.yml diff --git a/ansible/roles/fanout/library/port_config_gen.py b/sonic-mgmt/ansible/roles/fanout/library/port_config_gen.py similarity index 100% rename from ansible/roles/fanout/library/port_config_gen.py rename to sonic-mgmt/ansible/roles/fanout/library/port_config_gen.py diff --git a/ansible/roles/fanout/library/set_port_tpid.py b/sonic-mgmt/ansible/roles/fanout/library/set_port_tpid.py similarity index 100% rename from ansible/roles/fanout/library/set_port_tpid.py rename to sonic-mgmt/ansible/roles/fanout/library/set_port_tpid.py diff --git a/ansible/roles/fanout/library/sonic_sku_create.py b/sonic-mgmt/ansible/roles/fanout/library/sonic_sku_create.py similarity index 100% rename from ansible/roles/fanout/library/sonic_sku_create.py rename to sonic-mgmt/ansible/roles/fanout/library/sonic_sku_create.py diff --git a/ansible/roles/fanout/tasks/cisco/fanout_sonic_cisco_minimal.yml b/sonic-mgmt/ansible/roles/fanout/tasks/cisco/fanout_sonic_cisco_minimal.yml similarity index 100% rename from ansible/roles/fanout/tasks/cisco/fanout_sonic_cisco_minimal.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/cisco/fanout_sonic_cisco_minimal.yml diff --git a/ansible/roles/fanout/tasks/fanout_eos.yml b/sonic-mgmt/ansible/roles/fanout/tasks/fanout_eos.yml similarity index 100% rename from ansible/roles/fanout/tasks/fanout_eos.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/fanout_eos.yml diff --git a/ansible/roles/fanout/tasks/fanout_mlnx.yml b/sonic-mgmt/ansible/roles/fanout/tasks/fanout_mlnx.yml similarity index 100% rename from ansible/roles/fanout/tasks/fanout_mlnx.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/fanout_mlnx.yml diff --git a/ansible/roles/fanout/tasks/fanout_sonic.yml b/sonic-mgmt/ansible/roles/fanout/tasks/fanout_sonic.yml similarity index 100% rename from ansible/roles/fanout/tasks/fanout_sonic.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/fanout_sonic.yml diff --git a/ansible/roles/fanout/tasks/main.yml b/sonic-mgmt/ansible/roles/fanout/tasks/main.yml similarity index 96% rename from ansible/roles/fanout/tasks/main.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/main.yml index f4078602d97..2797f127c14 100644 --- a/ansible/roles/fanout/tasks/main.yml +++ b/sonic-mgmt/ansible/roles/fanout/tasks/main.yml @@ -13,6 +13,9 @@ - set_fact: sw_type="{{ device_info[inventory_hostname]['Type'] }}" +- set_fact: sw_type='FanoutLeaf' + when: sw_type is not defined + # fanout_tacacs_user can override fanout_tacacs_sonic_user, # fanout_tacacs_sonic_user can override fanout_sonic_user - name: set login info if fanout_tacacs_user and fanout_tacacs_password is defined diff --git a/ansible/roles/fanout/tasks/mlnx/check_pfcwd_fanout.yml b/sonic-mgmt/ansible/roles/fanout/tasks/mlnx/check_pfcwd_fanout.yml similarity index 100% rename from ansible/roles/fanout/tasks/mlnx/check_pfcwd_fanout.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/mlnx/check_pfcwd_fanout.yml diff --git a/ansible/roles/fanout/tasks/mlnx/deploy_pfcwd_fanout.yml b/sonic-mgmt/ansible/roles/fanout/tasks/mlnx/deploy_pfcwd_fanout.yml similarity index 100% rename from ansible/roles/fanout/tasks/mlnx/deploy_pfcwd_fanout.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/mlnx/deploy_pfcwd_fanout.yml diff --git a/ansible/roles/fanout/tasks/mlnx/download_copy_image_fanout.yml b/sonic-mgmt/ansible/roles/fanout/tasks/mlnx/download_copy_image_fanout.yml similarity index 100% rename from ansible/roles/fanout/tasks/mlnx/download_copy_image_fanout.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/mlnx/download_copy_image_fanout.yml diff --git a/ansible/roles/fanout/tasks/mlnx/get_onyx_os_version.yml b/sonic-mgmt/ansible/roles/fanout/tasks/mlnx/get_onyx_os_version.yml similarity index 100% rename from ansible/roles/fanout/tasks/mlnx/get_onyx_os_version.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/mlnx/get_onyx_os_version.yml diff --git a/ansible/roles/fanout/tasks/mlnx/scp_copy.yml b/sonic-mgmt/ansible/roles/fanout/tasks/mlnx/scp_copy.yml similarity index 100% rename from ansible/roles/fanout/tasks/mlnx/scp_copy.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/mlnx/scp_copy.yml diff --git a/ansible/roles/fanout/tasks/mlnx/upgrade_onyx.yml b/sonic-mgmt/ansible/roles/fanout/tasks/mlnx/upgrade_onyx.yml similarity index 100% rename from ansible/roles/fanout/tasks/mlnx/upgrade_onyx.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/mlnx/upgrade_onyx.yml diff --git a/ansible/roles/fanout/tasks/rootfanout_connect.yml b/sonic-mgmt/ansible/roles/fanout/tasks/rootfanout_connect.yml similarity index 100% rename from ansible/roles/fanout/tasks/rootfanout_connect.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/rootfanout_connect.yml diff --git a/ansible/roles/fanout/tasks/sonic/copp_cfg_mlnx.j2 b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/copp_cfg_mlnx.j2 similarity index 100% rename from ansible/roles/fanout/tasks/sonic/copp_cfg_mlnx.j2 rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/copp_cfg_mlnx.j2 diff --git a/ansible/roles/fanout/tasks/sonic/copp_cfg_mrvl_teralynx.j2 b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/copp_cfg_mrvl_teralynx.j2 similarity index 100% rename from ansible/roles/fanout/tasks/sonic/copp_cfg_mrvl_teralynx.j2 rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/copp_cfg_mrvl_teralynx.j2 diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_201811.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_201811.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_201811.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_201811.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202012.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202012.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202012.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202012.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202205.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202205.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202205.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202205.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202305.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202305.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202305.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202305.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202311.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202311.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202311.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202311.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202505.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202505.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202505.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202505.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202511.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202511.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_202511.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_202511.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_dry_run_202205.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_dry_run_202205.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_dry_run_202205.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_dry_run_202205.yml diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_incremental_202205.yml b/sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_incremental_202205.yml similarity index 100% rename from ansible/roles/fanout/tasks/sonic/fanout_sonic_incremental_202205.yml rename to sonic-mgmt/ansible/roles/fanout/tasks/sonic/fanout_sonic_incremental_202205.yml diff --git a/ansible/roles/fanout/templates/arista_7060_deploy.j2 b/sonic-mgmt/ansible/roles/fanout/templates/arista_7060_deploy.j2 similarity index 100% rename from ansible/roles/fanout/templates/arista_7060_deploy.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/arista_7060_deploy.j2 diff --git a/ansible/roles/fanout/templates/arista_7260_connect.j2 b/sonic-mgmt/ansible/roles/fanout/templates/arista_7260_connect.j2 similarity index 100% rename from ansible/roles/fanout/templates/arista_7260_connect.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/arista_7260_connect.j2 diff --git a/ansible/roles/fanout/templates/arista_7260_deploy.j2 b/sonic-mgmt/ansible/roles/fanout/templates/arista_7260_deploy.j2 similarity index 100% rename from ansible/roles/fanout/templates/arista_7260_deploy.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/arista_7260_deploy.j2 diff --git a/ansible/roles/fanout/templates/arista_7260cx3_deploy.j2 b/sonic-mgmt/ansible/roles/fanout/templates/arista_7260cx3_deploy.j2 similarity index 100% rename from ansible/roles/fanout/templates/arista_7260cx3_deploy.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/arista_7260cx3_deploy.j2 diff --git a/ansible/roles/fanout/templates/force10_s6100.j2 b/sonic-mgmt/ansible/roles/fanout/templates/force10_s6100.j2 similarity index 100% rename from ansible/roles/fanout/templates/force10_s6100.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/force10_s6100.j2 diff --git a/ansible/roles/fanout/templates/force10_s6100_deploy.j2 b/sonic-mgmt/ansible/roles/fanout/templates/force10_s6100_deploy.j2 similarity index 100% rename from ansible/roles/fanout/templates/force10_s6100_deploy.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/force10_s6100_deploy.j2 diff --git a/ansible/roles/fanout/templates/lag_fn_ports.j2 b/sonic-mgmt/ansible/roles/fanout/templates/lag_fn_ports.j2 similarity index 100% rename from ansible/roles/fanout/templates/lag_fn_ports.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/lag_fn_ports.j2 diff --git a/ansible/roles/fanout/templates/mlnx_check_pfcwd_fanout.j2 b/sonic-mgmt/ansible/roles/fanout/templates/mlnx_check_pfcwd_fanout.j2 similarity index 100% rename from ansible/roles/fanout/templates/mlnx_check_pfcwd_fanout.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/mlnx_check_pfcwd_fanout.j2 diff --git a/ansible/roles/fanout/templates/mlnx_deploy_pfcwd_fanout.j2 b/sonic-mgmt/ansible/roles/fanout/templates/mlnx_deploy_pfcwd_fanout.j2 similarity index 100% rename from ansible/roles/fanout/templates/mlnx_deploy_pfcwd_fanout.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/mlnx_deploy_pfcwd_fanout.j2 diff --git a/ansible/roles/fanout/templates/mlnx_fanout.j2 b/sonic-mgmt/ansible/roles/fanout/templates/mlnx_fanout.j2 similarity index 100% rename from ansible/roles/fanout/templates/mlnx_fanout.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/mlnx_fanout.j2 diff --git a/ansible/roles/fanout/templates/mlnx_show_version.j2 b/sonic-mgmt/ansible/roles/fanout/templates/mlnx_show_version.j2 similarity index 100% rename from ansible/roles/fanout/templates/mlnx_show_version.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/mlnx_show_version.j2 diff --git a/ansible/roles/fanout/templates/mlnx_upgrade_onyx.j2 b/sonic-mgmt/ansible/roles/fanout/templates/mlnx_upgrade_onyx.j2 similarity index 100% rename from ansible/roles/fanout/templates/mlnx_upgrade_onyx.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/mlnx_upgrade_onyx.j2 diff --git a/ansible/roles/fanout/templates/rc.eos.j2 b/sonic-mgmt/ansible/roles/fanout/templates/rc.eos.j2 similarity index 100% rename from ansible/roles/fanout/templates/rc.eos.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/rc.eos.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202012.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202012.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202012.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202012.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202205.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202205.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202205.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202205.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202305.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202305.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202305.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202305.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202311.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202311.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202311.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202311.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202405.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202405.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202405.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202405.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202505.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202505.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202505.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202505.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_202511.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202511.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_202511.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_202511.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_arista_7060.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_arista_7060.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_arista_7060.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_arista_7060.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_cisco_minimal.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_cisco_minimal.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_cisco_minimal.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_cisco_minimal.j2 diff --git a/ansible/roles/fanout/templates/sonic_deploy_incremental_202205.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_incremental_202205.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_deploy_incremental_202205.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_deploy_incremental_202205.j2 diff --git a/ansible/roles/fanout/templates/sonic_mlnx_copp_cfg.j2 b/sonic-mgmt/ansible/roles/fanout/templates/sonic_mlnx_copp_cfg.j2 similarity index 100% rename from ansible/roles/fanout/templates/sonic_mlnx_copp_cfg.j2 rename to sonic-mgmt/ansible/roles/fanout/templates/sonic_mlnx_copp_cfg.j2 diff --git a/sonic-mgmt/ansible/roles/iosxr/handlers/main.yml b/sonic-mgmt/ansible/roles/iosxr/handlers/main.yml new file mode 100755 index 00000000000..505639403a4 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/handlers/main.yml @@ -0,0 +1,29 @@ +# Notify handlers are always run in the same order they are defined, not in the order listed in the notify-statement. +# This is also the case for handlers using listen. + +- name: Reboot the VM + command: /sbin/shutdown -r now "Ansible updates triggered" + async: 300 + poll: 0 + ignore_errors: true + listen: "Update VM state" + +- name: Wait for VM to shutdown + wait_for: + host: "{{ ansible_host }}" + port: 22 + state: stopped + delay: 10 + timeout: 300 + delegate_to: "{{ VM_host[0] }}" + listen: "Update VM state" + +- name: Wait for VM to startup + wait_for: + host: "{{ ansible_host }}" + port: 22 + state: started + delay: 10 + timeout: 1200 + delegate_to: "{{ VM_host[0] }}" + listen: "Update VM state" diff --git a/sonic-mgmt/ansible/roles/iosxr/tasks/ceos.yml b/sonic-mgmt/ansible/roles/iosxr/tasks/ceos.yml new file mode 100644 index 00000000000..bb18d5bff45 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/tasks/ceos.yml @@ -0,0 +1,28 @@ +- include_tasks: ceos_config.yml + +- name: Create cEOS container ceos_{{ vm_set_name }}_{{ inventory_hostname }} + become: yes + docker_container: + name: ceos_{{ vm_set_name }}_{{ inventory_hostname }} + image: "{{ ceos_image }}" + command: /sbin/init systemd.setenv=INTFTYPE=eth systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 systemd.setenv=EOS_PLATFORM=ceoslab systemd.setenv=container=docker systemd.setenv=MGMT_INTF=eth0 + pull: no + state: started + restart: yes + tty: yes + network_mode: container:net_{{ vm_set_name }}_{{ inventory_hostname }} + detach: True + capabilities: + - net_admin + privileged: yes + env: + CEOS=1 + container=docker + EOS_PLATFORM=ceoslab + SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 + ETBA=1 + INTFTYPE=eth + MGMT_INTF=eth0 + volumes: + - /{{ ceos_image_mount_dir }}/ceos_{{ vm_set_name }}_{{ inventory_hostname }}:/mnt/flash + delegate_to: "{{ VM_host[0] }}" diff --git a/sonic-mgmt/ansible/roles/iosxr/tasks/ceos_config.yml b/sonic-mgmt/ansible/roles/iosxr/tasks/ceos_config.yml new file mode 100644 index 00000000000..67497c1dff7 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/tasks/ceos_config.yml @@ -0,0 +1,32 @@ +- name: Get netbase container info + docker_container_info: + name: net_{{ vm_set_name }}_{{ inventory_hostname }} + register: ctninfo + delegate_to: "{{ VM_host[0] }}" + become: yes + +- debug: msg="{{ ctninfo.container.State.Pid }}" + +- name: Get front panel port in netbase container + shell: nsenter -t {{ ctninfo.container.State.Pid }} -n ip link show | grep -E eth[0-9]+ | wc -l + register: fp_num + delegate_to: "{{ VM_host[0] }}" + become: yes + +- debug: msg="{{ fp_num }}" + +- name: Set EOS backplane port name + set_fact: bp_ifname="Ethernet{{ fp_num.stdout|int - 1}}" + +- name: create directory for ceos config + become: yes + file: + path: "/{{ ceos_image_mount_dir }}/ceos_{{ vm_set_name }}_{{ inventory_hostname }}/" + state: directory + delegate_to: "{{ VM_host[0] }}" + +- name: update startup-config + become: yes + template: src="{{ topo }}-{{ props.swrole }}.j2" + dest="/{{ ceos_image_mount_dir }}/ceos_{{ vm_set_name }}_{{ inventory_hostname }}/startup-config" + delegate_to: "{{ VM_host[0] }}" diff --git a/sonic-mgmt/ansible/roles/iosxr/tasks/iosxr.yml b/sonic-mgmt/ansible/roles/iosxr/tasks/iosxr.yml new file mode 100644 index 00000000000..dfa371e7d6b --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/tasks/iosxr.yml @@ -0,0 +1,28 @@ +- name: Set ansible login user name and password + set_fact: ansible_user="cisco" ansible_password={{ iosxr_root_password }} + +- name: Set EOS backplane port name + set_fact: bp_ifname="GigabitEthernet0/0/0/9" + +- name: for idempotency, use full-form commands + iosxr_config: + lines: + - no shutdown + parents: interface GigabitEthernet0/0/0/0 + +- name: update startup-config + template: src="{{ topo }}-{{ props.swrole }}.j2" + dest=startup.cfg + when: hostname in configuration + +- name: Give insecure permissions to an existing file + file: + path: startup.cfg + mode: '1777' + +- name: load a config from disk and replace the current config + iosxr_config: + src: startup.cfg + replace: config + backup: yes + diff --git a/sonic-mgmt/ansible/roles/iosxr/tasks/main.yml b/sonic-mgmt/ansible/roles/iosxr/tasks/main.yml new file mode 100644 index 00000000000..9e57dff0280 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/tasks/main.yml @@ -0,0 +1,41 @@ +- debug: msg="{{ vm_type }}" +- debug: msg="{{ vm_set_name }}" + +- name: Load topo variables + include_vars: "vars/topo_{{ topo }}.yml" + +- name: Include server vars + include_vars: "{{ host_var_file }}" + +- name: Find current server group + set_fact: current_server={{ group_names | extract_by_prefix('server_') }} + +- name: Extract VM names from the inventory + set_fact: VM_list={{ groups[current_server] | filter_by_prefix('VM') }} + +- name: Get VM host name + set_fact: VM_host={{ groups[current_server] | difference(VM_list) }} + +- name: Generate hostname for target VM + set_fact: hostname={{ VM_list | extract_hostname(topology['VMs'], VM_base, inventory_hostname) }} + when: topology['VMs'] is defined + +- fail: + msg: "cannot find {{ inventory_hostname }} in the topology" + when: hostname == "hostname not found" + +- name: Set properties list to default value, when properties are not defined + set_fact: properties_list=[] + when: configuration is not defined or configuration[hostname] is not defined or configuration[hostname]['properties'] is not defined + +- name: Set properties list to values, when they're defined + set_fact: properties_list="{{ configuration[hostname]['properties'] }}" + when: configuration and configuration[hostname] and configuration[hostname]['properties'] is defined + +- name: Expand {{ hostname }} properties into props + set_fact: props="{{ configuration_properties[item] | combine(props | default({})) }}" + with_items: "{{ properties_list }}" + when: hostname in configuration and configuration_properties[item] is defined + +- include_tasks: iosxr.yml + when: vm_type == "iosxr" diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-104-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-104-leaf.j2 new file mode 100644 index 00000000000..6e7d28cdd2d --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-104-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-116-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-116-leaf.j2 new file mode 100644 index 00000000000..6e7d28cdd2d --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-116-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-16-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-16-leaf.j2 new file mode 100644 index 00000000000..50694063a1e --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-16-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-52-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-52-leaf.j2 new file mode 100644 index 00000000000..50694063a1e --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-52-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-56-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-56-leaf.j2 new file mode 100644 index 00000000000..50694063a1e --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-56-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-64-32-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-64-32-leaf.j2 new file mode 100644 index 00000000000..6e7d28cdd2d --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-64-32-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-64-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-64-leaf.j2 new file mode 100644 index 00000000000..6e7d28cdd2d --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-64-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-leaf-lag-2.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-leaf-lag-2.j2 new file mode 100644 index 00000000000..6e7d28cdd2d --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-leaf-lag-2.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t0-leaf.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t0-leaf.j2 new file mode 100644 index 00000000000..50694063a1e --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t0-leaf.j2 @@ -0,0 +1,135 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +{% if vm_mgmt_gw is defined %} +ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }} +{% else %} +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +{% endif %} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-clet-spine.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-clet-spine.j2 new file mode 100644 index 00000000000..316918fcc74 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-clet-spine.j2 @@ -0,0 +1,145 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +no schedule tech-support +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management1 +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +! +route-map DEFAULT_ROUTES permit +! +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +{% for subnet in range(0, props.tor_subnet_number) %} +ip route 192.168.{{ podset }}.{{ tor * 16 + subnet }}/32 {{ props.nhipv4 }} +ipv6 route 20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16 + subnet)}}::/64 {{ props.nhipv6 }} +{% endfor %} +{% endfor %} +{% endfor %} +! +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +ip prefix-list test_ipv4_{{ podset}}_{{ tor }} seq 10 permit 192.168.{{ podset }}.{{ tor * 16 }}/28 ge 28 +ipv6 prefix-list test_ipv6_{{ podset}}_{{ tor }} + seq 10 permit 20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16) }}::/60 ge 60 +exit +{% endfor %} +{% endfor %} +! +interface Management 1 + description TO LAB MGMT SWITCH + vrf forwarding MGMT + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% for podset in range(0, props.podset_number) %} +{% if range(0, 1000)|random() >= props.failure_rate %} +{% for tor in range(0, props.tor_number) %} +{% set leafasn = props.leaf_asn_start + podset %} +{% set torasn = props.tor_asn_start + tor %} +route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) }} + match ip address prefix-list test_ipv4_{{ podset }}_{{ tor }} + set as-path prepend {{ leafasn }} {{ torasn }} +! +route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) + 1 }} + match ipv6 address prefix-list test_ipv6_{{ podset }}_{{ tor }} + set as-path prepend {{ leafasn }} {{ torasn }} +! +{% endfor %} +{% endif %} +{% endfor %} +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} + neighbor {{ remote_ip }} default-originate route-map DEFAULT_ROUTES +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} + redistribute static route-map PREPENDAS +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end + diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-clet-tor.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-clet-tor.j2 new file mode 100644 index 00000000000..eb720966201 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-clet-tor.j2 @@ -0,0 +1,140 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% set tornum = host['tornum'] %} +no schedule tech-support +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management1 +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +! +{% for subnet in range(0, props.tor_subnet_number) %} +ip route 172.16.{{ tornum }}.{{ subnet }}/32 {{ props.nhipv4 }} +ipv6 route 20AC:10{{ '%02X' % tornum }}:0:{{ '%02X' % subnet }}::/64 {{ props.nhipv6 }} +{% endfor %} +! +{% if 'vips' in host %} +{% for subnet in host['vips']['ipv4']['prefixes'] %} +ip route {{ subnet }} {{ props.nhipv4 }} +{% endfor %} +{% set index = 1 %} +{% for subnet in host['vips']['ipv4']['prefixes'] %} +ip prefix-list test_vip_{{ index }} seq 1{{ index }} permit {{ subnet }} +{% set index = index + 1 %} +{% endfor %} +{% set index = 1 %} +{% for subnet in host['vips']['ipv4']['prefixes'] %} +route-map PREPENDAS permit 2{{ index }} + match ip address prefix-list test_vip_{{ index }} + set as-path prepend {{ host['vips']['ipv4']['asn'] }} +{% set index = index + 1 %} +{% endfor %} +{% endif %} +! +interface Management 1 + description TO LAB MGMT SWITCH + vrf forwarding MGMT + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! + graceful-restart restart-time {{ bgp_gr_timer }} + graceful-restart + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} +! +{% if 'vips' in host %} +redistribute static route-map PREPENDAS +{% endif %} +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +{% for subnet in range(0, props.tor_subnet_number) %} + network 172.16.{{ tornum }}.{{ subnet }}/32 + network 20AC:10{{ '%02X' % tornum }}:0:{{ '%02X' % subnet }}::/64 +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end + diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-spine.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-spine.j2 new file mode 100644 index 00000000000..316918fcc74 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-spine.j2 @@ -0,0 +1,145 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +no schedule tech-support +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management1 +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +! +route-map DEFAULT_ROUTES permit +! +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +{% for subnet in range(0, props.tor_subnet_number) %} +ip route 192.168.{{ podset }}.{{ tor * 16 + subnet }}/32 {{ props.nhipv4 }} +ipv6 route 20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16 + subnet)}}::/64 {{ props.nhipv6 }} +{% endfor %} +{% endfor %} +{% endfor %} +! +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +ip prefix-list test_ipv4_{{ podset}}_{{ tor }} seq 10 permit 192.168.{{ podset }}.{{ tor * 16 }}/28 ge 28 +ipv6 prefix-list test_ipv6_{{ podset}}_{{ tor }} + seq 10 permit 20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16) }}::/60 ge 60 +exit +{% endfor %} +{% endfor %} +! +interface Management 1 + description TO LAB MGMT SWITCH + vrf forwarding MGMT + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% for podset in range(0, props.podset_number) %} +{% if range(0, 1000)|random() >= props.failure_rate %} +{% for tor in range(0, props.tor_number) %} +{% set leafasn = props.leaf_asn_start + podset %} +{% set torasn = props.tor_asn_start + tor %} +route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) }} + match ip address prefix-list test_ipv4_{{ podset }}_{{ tor }} + set as-path prepend {{ leafasn }} {{ torasn }} +! +route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) + 1 }} + match ipv6 address prefix-list test_ipv6_{{ podset }}_{{ tor }} + set as-path prepend {{ leafasn }} {{ torasn }} +! +{% endfor %} +{% endif %} +{% endfor %} +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} + neighbor {{ remote_ip }} default-originate route-map DEFAULT_ROUTES +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} + redistribute static route-map PREPENDAS +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end + diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-tor.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-tor.j2 new file mode 100644 index 00000000000..eb720966201 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-64-lag-tor.j2 @@ -0,0 +1,140 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% set tornum = host['tornum'] %} +no schedule tech-support +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management1 +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +! +{% for subnet in range(0, props.tor_subnet_number) %} +ip route 172.16.{{ tornum }}.{{ subnet }}/32 {{ props.nhipv4 }} +ipv6 route 20AC:10{{ '%02X' % tornum }}:0:{{ '%02X' % subnet }}::/64 {{ props.nhipv6 }} +{% endfor %} +! +{% if 'vips' in host %} +{% for subnet in host['vips']['ipv4']['prefixes'] %} +ip route {{ subnet }} {{ props.nhipv4 }} +{% endfor %} +{% set index = 1 %} +{% for subnet in host['vips']['ipv4']['prefixes'] %} +ip prefix-list test_vip_{{ index }} seq 1{{ index }} permit {{ subnet }} +{% set index = index + 1 %} +{% endfor %} +{% set index = 1 %} +{% for subnet in host['vips']['ipv4']['prefixes'] %} +route-map PREPENDAS permit 2{{ index }} + match ip address prefix-list test_vip_{{ index }} + set as-path prepend {{ host['vips']['ipv4']['asn'] }} +{% set index = index + 1 %} +{% endfor %} +{% endif %} +! +interface Management 1 + description TO LAB MGMT SWITCH + vrf forwarding MGMT + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 1 +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! + graceful-restart restart-time {{ bgp_gr_timer }} + graceful-restart + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} +! +{% if 'vips' in host %} +redistribute static route-map PREPENDAS +{% endif %} +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +{% for subnet in range(0, props.tor_subnet_number) %} + network 172.16.{{ tornum }}.{{ subnet }}/32 + network 20AC:10{{ '%02X' % tornum }}:0:{{ '%02X' % subnet }}::/64 +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end + diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-lag-spine.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-lag-spine.j2 new file mode 100644 index 00000000000..a673d12618c --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-lag-spine.j2 @@ -0,0 +1,131 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if name.startswith('Port-Channel') %} + port-channel min-links 2 +{% endif %} +{% if iface['lacp'] is defined %} + channel-group {{ iface['lacp'] }} mode active + lacp rate normal +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-lag-tor.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-lag-tor.j2 new file mode 100644 index 00000000000..d92746b4563 --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-lag-tor.j2 @@ -0,0 +1,127 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +{% if vm_type is defined and vm_type == "ceos" %} +{% set mgmt_if_index = 0 %} +{% else %} +{% set mgmt_if_index = 1 %} +{% endif %} +no schedule tech-support +! +{% if vm_type is defined and vm_type == "ceos" %} +agent LicenseManager shutdown +agent PowerFuse shutdown +agent PowerManager shutdown +agent Thermostat shutdown +agent LedPolicy shutdown +agent StandbyCpld shutdown +agent Bfd shutdown +{% endif %} +! +hostname {{ hostname }} +! +vrf definition MGMT + rd 1:1 +! +spanning-tree mode mstp +! +aaa root secret 0 123456 +! +username admin privilege 15 role network-admin secret 0 123456 +! +clock timezone UTC +! +lldp run +lldp management-address Management{{ mgmt_if_index }} +lldp management-address vrf MGMT +! +snmp-server community {{ snmp_rocommunity }} ro +snmp-server vrf MGMT +! +ip routing +ip routing vrf MGMT +ipv6 unicast-routing +! +ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }} +! +interface Management {{ mgmt_if_index }} + description TO LAB MGMT SWITCH +{% if vm_type is defined and vm_type == "ceos" %} + vrf MGMT +{% else %} + vrf forwarding MGMT +{% endif %} + ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }} + no shutdown +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% else %} + no switchport +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane + no switchport +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd ra suppress +{% endif %} + no shutdown +! +router bgp {{ host['bgp']['asn'] }} + router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }} + ! + graceful-restart restart-time {{ bgp_gr_timer }} + graceful-restart + ! +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} + neighbor {{ remote_ip }} remote-as {{ asn }} + neighbor {{ remote_ip }} description {{ asn }} +{% if remote_ip | ipv6 %} + address-family ipv6 + neighbor {{ remote_ip }} activate + exit +{% endif %} +{% endfor %} +{% endfor %} + neighbor {{ props.nhipv4 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv4 }} description exabgp_v4 + neighbor {{ props.nhipv6 }} remote-as {{ host['bgp']['asn'] }} + neighbor {{ props.nhipv6 }} description exabgp_v6 + address-family ipv6 + neighbor {{ props.nhipv6 }} activate + exit + ! +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + network {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + network {{ iface['ipv6'] }} +{% endif %} +{% endfor %} +! +management api http-commands + no protocol https + protocol http + no shutdown +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-spine.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-spine.j2 new file mode 100644 index 00000000000..69d4f5f6a1c --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-spine.j2 @@ -0,0 +1,172 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +hostname {{ hostname }} +! +username cisco + group root-lr + group cisco-support + secret 10 $6$gvHzc1yoDuxXCc1.$79owP79DB4fxgLUN/ad22EN1wrxQOFjA5xghKi1ES23q8UR.6U20DqPqY4pgP8uld9qWgmA/zGsTKMCbvoRkN/ +! +line console + exec-timeout 0 0 + absolute-timeout 0 + session-timeout 0 +! +line default + exec-timeout 0 0 + absolute-timeout 0 + session-timeout 0 +! +snmp-server community {{ snmp_rocommunity }} ro +! +! +interface MgmtEth0/RP0/CPU0/0 + ipv4 address dhcp +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + {% if not name.startswith('Loopback') %} + ipv6 nd suppress-ra +{% endif %} +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd suppress-ra +{% endif %} + no shutdown +! +! +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +prefix-set test_ipv4_{{ podset}}_{{ tor }} + 192.168.{{ podset }}.{{ tor * 16 }}/28 ge 28 +end-set +! +prefix-set test_ipv6_{{ podset}}_{{ tor }} + 20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16) }}::/60 ge 60 +end-set +! +{% endfor %} +{% endfor %} +! +! +route-policy PREPENDAS_V4 +{% for podset in range(0, props.podset_number) %} +{% if range(0, 1000)|random() >= props.failure_rate %} +{% for tor in range(0, props.tor_number) %} +{% set leafasn = props.leaf_asn_start + podset %} +{% set torasn = props.tor_asn_start + tor %} + if destination in test_ipv4_{{ podset }}_{{ tor }} then + prepend as-path {{ leafasn }} + prepend as-path {{ torasn }} + else + pass + endif +{% endfor %} +{% endif %} +{% endfor %} +end-policy +! +route-policy PREPENDAS_V6 +{% for podset in range(0, props.podset_number) %} +{% if range(0, 1000)|random() >= props.failure_rate %} +{% for tor in range(0, props.tor_number) %} +{% set leafasn = props.leaf_asn_start + podset %} +{% set torasn = props.tor_asn_start + tor %} + if destination in test_ipv6_{{ podset }}_{{ tor }} then + prepend as-path {{ leafasn }} + prepend as-path {{ torasn }} + else + pass + endif +{% endfor %} +{% endif %} +{% endfor %} +end-policy +! +route-policy DEFAULT_ROUTES + done +end-policy +! +router static + address-family ipv4 unicast +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +{% for subnet in range(0, props.tor_subnet_number) %} + 192.168.{{ podset }}.{{ tor * 16 + subnet }}/32 {{ props.nhipv4 }} +{% endfor %} +{% endfor %} +{% endfor %} + ! + address-family ipv6 unicast +{% for podset in range(0, props.podset_number) %} +{% for tor in range(0, props.tor_number) %} +{% for subnet in range(0, props.tor_subnet_number) %} + 20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16 + subnet)}}::/64 {{ props.nhipv6 }} +{% endfor %} +{% endfor %} +{% endfor %} +! +router bgp {{ host['bgp']['asn'] }} +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + address-family ipv4 unicast + network {{ iface['ipv4'] }} + redistribute static + exit +{% endif %} +{% if iface['ipv6'] is defined %} + address-family ipv6 unicast + network {{ iface['ipv6'] }} + redistribute static + exit +{% endif %} +{% endfor %} +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} +{% if remote_ip | ipv4 %} + neighbor {{ remote_ip }} + remote-as {{ asn }} + description {{ asn }} + address-family ipv4 unicast + route-policy DEFAULT_ROUTES in + maximum-prefix 12000 75 + route-policy PREPENDAS_V4 out + default-originate route-policy DEFAULT_ROUTES +{% endif %} +{% if remote_ip | ipv6 %} + neighbor {{ remote_ip }} + remote-as {{ asn }} + description {{ asn }} + address-family ipv6 unicast + route-policy DEFAULT_ROUTES in + maximum-prefix 12000 75 + route-policy PREPENDAS_V6 out + default-originate route-policy DEFAULT_ROUTES +{% endif %} +{% endfor %} +{% endfor %} + ! +! +ssh server v2 +! +end diff --git a/sonic-mgmt/ansible/roles/iosxr/templates/t1-tor.j2 b/sonic-mgmt/ansible/roles/iosxr/templates/t1-tor.j2 new file mode 100644 index 00000000000..78be786b83f --- /dev/null +++ b/sonic-mgmt/ansible/roles/iosxr/templates/t1-tor.j2 @@ -0,0 +1,95 @@ +{% set host = configuration[hostname] %} +{% set mgmt_ip = ansible_host %} +hostname {{ hostname }} +! +username cisco + group root-lr + group cisco-support + secret 10 $6$gvHzc1yoDuxXCc1.$79owP79DB4fxgLUN/ad22EN1wrxQOFjA5xghKi1ES23q8UR.6U20DqPqY4pgP8uld9qWgmA/zGsTKMCbvoRkN/ +! +line console + exec-timeout 0 0 + absolute-timeout 0 + session-timeout 0 +! +line default + exec-timeout 0 0 + absolute-timeout 0 + session-timeout 0 +! +snmp-server community {{ snmp_rocommunity }} ro +! +! +interface MgmtEth0/RP0/CPU0/0 + ipv4 address dhcp +! +{% for name, iface in host['interfaces'].items() %} +interface {{ name }} +{% if name.startswith('Loopback') %} + description LOOPBACK +{% endif %} +{% if iface['ipv4'] is defined %} + ip address {{ iface['ipv4'] }} +{% endif %} +{% if iface['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ iface['ipv6'] }} + {% if not name.startswith('Loopback') %} + ipv6 nd suppress-ra +{% endif %} +{% endif %} + no shutdown +! +{% endfor %} +! +interface {{ bp_ifname }} + description backplane +{% if host['bp_interface']['ipv4'] is defined %} + ip address {{ host['bp_interface']['ipv4'] }} +{% endif %} +{% if host['bp_interface']['ipv6'] is defined %} + ipv6 enable + ipv6 address {{ host['bp_interface']['ipv6'] }} + ipv6 nd suppress-ra +{% endif %} + no shutdown +! +! +router bgp {{ host['bgp']['asn'] }} + bgp graceful-restart restart-time {{ bgp_gr_timer }} + bgp graceful-restart +{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %} +{% if iface['ipv4'] is defined %} + address-family ipv4 unicast + network {{ iface['ipv4'] }} + exit +{% endif %} +{% if iface['ipv6'] is defined %} + address-family ipv6 unicast + network {{ iface['ipv6'] }} + exit +{% endif %} +{% endfor %} +{% for asn, remote_ips in host['bgp']['peers'].items() %} +{% for remote_ip in remote_ips %} +{% if remote_ip | ipv4 %} + neighbor {{ remote_ip }} + remote-as {{ asn }} + description exabgp_v4 + address-family ipv4 unicast + maximum-prefix 12000 75 +{% endif %} +{% if remote_ip | ipv6 %} + neighbor {{ remote_ip }} + remote-as {{ asn }} + description exabgp_v6 + address-family ipv6 unicast + maximum-prefix 12000 75 +{% endif %} +{% endfor %} +{% endfor %} + ! +! +ssh server v2 +! +end diff --git a/ansible/roles/k8s_haproxy/tasks/main.yml b/sonic-mgmt/ansible/roles/k8s_haproxy/tasks/main.yml similarity index 100% rename from ansible/roles/k8s_haproxy/tasks/main.yml rename to sonic-mgmt/ansible/roles/k8s_haproxy/tasks/main.yml diff --git a/ansible/roles/k8s_haproxy/templates/default-ssl.conf.j2 b/sonic-mgmt/ansible/roles/k8s_haproxy/templates/default-ssl.conf.j2 similarity index 100% rename from ansible/roles/k8s_haproxy/templates/default-ssl.conf.j2 rename to sonic-mgmt/ansible/roles/k8s_haproxy/templates/default-ssl.conf.j2 diff --git a/ansible/roles/k8s_haproxy/templates/haproxy.j2 b/sonic-mgmt/ansible/roles/k8s_haproxy/templates/haproxy.j2 similarity index 100% rename from ansible/roles/k8s_haproxy/templates/haproxy.j2 rename to sonic-mgmt/ansible/roles/k8s_haproxy/templates/haproxy.j2 diff --git a/ansible/roles/k8s_haproxy/vars/main.yml b/sonic-mgmt/ansible/roles/k8s_haproxy/vars/main.yml similarity index 100% rename from ansible/roles/k8s_haproxy/vars/main.yml rename to sonic-mgmt/ansible/roles/k8s_haproxy/vars/main.yml diff --git a/ansible/roles/k8s_master/files/10-flannel.conflist b/sonic-mgmt/ansible/roles/k8s_master/files/10-flannel.conflist similarity index 100% rename from ansible/roles/k8s_master/files/10-flannel.conflist rename to sonic-mgmt/ansible/roles/k8s_master/files/10-flannel.conflist diff --git a/ansible/roles/k8s_master/files/daemon.json b/sonic-mgmt/ansible/roles/k8s_master/files/daemon.json similarity index 100% rename from ansible/roles/k8s_master/files/daemon.json rename to sonic-mgmt/ansible/roles/k8s_master/files/daemon.json diff --git a/ansible/roles/k8s_master/tasks/init_master_leader.yml b/sonic-mgmt/ansible/roles/k8s_master/tasks/init_master_leader.yml similarity index 100% rename from ansible/roles/k8s_master/tasks/init_master_leader.yml rename to sonic-mgmt/ansible/roles/k8s_master/tasks/init_master_leader.yml diff --git a/ansible/roles/k8s_master/tasks/join_master_member.yml b/sonic-mgmt/ansible/roles/k8s_master/tasks/join_master_member.yml similarity index 100% rename from ansible/roles/k8s_master/tasks/join_master_member.yml rename to sonic-mgmt/ansible/roles/k8s_master/tasks/join_master_member.yml diff --git a/ansible/roles/k8s_master/tasks/main.yml b/sonic-mgmt/ansible/roles/k8s_master/tasks/main.yml similarity index 100% rename from ansible/roles/k8s_master/tasks/main.yml rename to sonic-mgmt/ansible/roles/k8s_master/tasks/main.yml diff --git a/ansible/roles/k8s_master/templates/docker-proxy.j2 b/sonic-mgmt/ansible/roles/k8s_master/templates/docker-proxy.j2 similarity index 100% rename from ansible/roles/k8s_master/templates/docker-proxy.j2 rename to sonic-mgmt/ansible/roles/k8s_master/templates/docker-proxy.j2 diff --git a/ansible/roles/k8s_master/vars/main.yml b/sonic-mgmt/ansible/roles/k8s_master/vars/main.yml similarity index 100% rename from ansible/roles/k8s_master/vars/main.yml rename to sonic-mgmt/ansible/roles/k8s_master/vars/main.yml diff --git a/ansible/roles/mcx/tasks/dry_run_incremental.yml b/sonic-mgmt/ansible/roles/mcx/tasks/dry_run_incremental.yml similarity index 100% rename from ansible/roles/mcx/tasks/dry_run_incremental.yml rename to sonic-mgmt/ansible/roles/mcx/tasks/dry_run_incremental.yml diff --git a/ansible/roles/mcx/tasks/dry_run_reset.yml b/sonic-mgmt/ansible/roles/mcx/tasks/dry_run_reset.yml similarity index 100% rename from ansible/roles/mcx/tasks/dry_run_reset.yml rename to sonic-mgmt/ansible/roles/mcx/tasks/dry_run_reset.yml diff --git a/ansible/roles/mcx/tasks/incremental_update.yml b/sonic-mgmt/ansible/roles/mcx/tasks/incremental_update.yml similarity index 100% rename from ansible/roles/mcx/tasks/incremental_update.yml rename to sonic-mgmt/ansible/roles/mcx/tasks/incremental_update.yml diff --git a/ansible/roles/mcx/tasks/main.yml b/sonic-mgmt/ansible/roles/mcx/tasks/main.yml similarity index 100% rename from ansible/roles/mcx/tasks/main.yml rename to sonic-mgmt/ansible/roles/mcx/tasks/main.yml diff --git a/ansible/roles/mcx/tasks/reset_update.yml b/sonic-mgmt/ansible/roles/mcx/tasks/reset_update.yml similarity index 100% rename from ansible/roles/mcx/tasks/reset_update.yml rename to sonic-mgmt/ansible/roles/mcx/tasks/reset_update.yml diff --git a/ansible/roles/mcx/templates/incremental_mcx_config.j2 b/sonic-mgmt/ansible/roles/mcx/templates/incremental_mcx_config.j2 similarity index 100% rename from ansible/roles/mcx/templates/incremental_mcx_config.j2 rename to sonic-mgmt/ansible/roles/mcx/templates/incremental_mcx_config.j2 diff --git a/ansible/roles/mcx/templates/mcx_config.j2 b/sonic-mgmt/ansible/roles/mcx/templates/mcx_config.j2 similarity index 100% rename from ansible/roles/mcx/templates/mcx_config.j2 rename to sonic-mgmt/ansible/roles/mcx/templates/mcx_config.j2 diff --git a/ansible/roles/sonic-common/files/apt/sonic-dev.gpg.key b/sonic-mgmt/ansible/roles/sonic-common/files/apt/sonic-dev.gpg.key similarity index 100% rename from ansible/roles/sonic-common/files/apt/sonic-dev.gpg.key rename to sonic-mgmt/ansible/roles/sonic-common/files/apt/sonic-dev.gpg.key diff --git a/ansible/roles/sonic-common/files/apt/sources.list b/sonic-mgmt/ansible/roles/sonic-common/files/apt/sources.list similarity index 100% rename from ansible/roles/sonic-common/files/apt/sources.list rename to sonic-mgmt/ansible/roles/sonic-common/files/apt/sources.list diff --git a/ansible/roles/sonic-common/files/bin/lldpctl b/sonic-mgmt/ansible/roles/sonic-common/files/bin/lldpctl similarity index 100% rename from ansible/roles/sonic-common/files/bin/lldpctl rename to sonic-mgmt/ansible/roles/sonic-common/files/bin/lldpctl diff --git a/ansible/roles/sonic-common/files/bin/sensors b/sonic-mgmt/ansible/roles/sonic-common/files/bin/sensors similarity index 100% rename from ansible/roles/sonic-common/files/bin/sensors rename to sonic-mgmt/ansible/roles/sonic-common/files/bin/sensors diff --git a/ansible/roles/sonic-common/files/bin/vtysh b/sonic-mgmt/ansible/roles/sonic-common/files/bin/vtysh similarity index 100% rename from ansible/roles/sonic-common/files/bin/vtysh rename to sonic-mgmt/ansible/roles/sonic-common/files/bin/vtysh diff --git a/ansible/roles/sonic-common/files/cron.logrotate b/sonic-mgmt/ansible/roles/sonic-common/files/cron.logrotate similarity index 100% rename from ansible/roles/sonic-common/files/cron.logrotate rename to sonic-mgmt/ansible/roles/sonic-common/files/cron.logrotate diff --git a/ansible/roles/sonic-common/files/docker_clean.sh b/sonic-mgmt/ansible/roles/sonic-common/files/docker_clean.sh similarity index 100% rename from ansible/roles/sonic-common/files/docker_clean.sh rename to sonic-mgmt/ansible/roles/sonic-common/files/docker_clean.sh diff --git a/ansible/roles/sonic-common/files/environment b/sonic-mgmt/ansible/roles/sonic-common/files/environment similarity index 100% rename from ansible/roles/sonic-common/files/environment rename to sonic-mgmt/ansible/roles/sonic-common/files/environment diff --git a/ansible/roles/sonic-common/files/etc/motd b/sonic-mgmt/ansible/roles/sonic-common/files/etc/motd similarity index 100% rename from ansible/roles/sonic-common/files/etc/motd rename to sonic-mgmt/ansible/roles/sonic-common/files/etc/motd diff --git a/ansible/roles/sonic-common/files/rsyslog.d/00-acs.conf b/sonic-mgmt/ansible/roles/sonic-common/files/rsyslog.d/00-acs.conf similarity index 100% rename from ansible/roles/sonic-common/files/rsyslog.d/00-acs.conf rename to sonic-mgmt/ansible/roles/sonic-common/files/rsyslog.d/00-acs.conf diff --git a/ansible/roles/sonic-common/files/rsyslog.d/99-default.conf b/sonic-mgmt/ansible/roles/sonic-common/files/rsyslog.d/99-default.conf similarity index 100% rename from ansible/roles/sonic-common/files/rsyslog.d/99-default.conf rename to sonic-mgmt/ansible/roles/sonic-common/files/rsyslog.d/99-default.conf diff --git a/ansible/roles/sonic-common/files/rsyslog.logrotate b/sonic-mgmt/ansible/roles/sonic-common/files/rsyslog.logrotate similarity index 100% rename from ansible/roles/sonic-common/files/rsyslog.logrotate rename to sonic-mgmt/ansible/roles/sonic-common/files/rsyslog.logrotate diff --git a/ansible/roles/sonic-common/files/ssw/ACS-MSN2700/etc/sensors.conf b/sonic-mgmt/ansible/roles/sonic-common/files/ssw/ACS-MSN2700/etc/sensors.conf similarity index 100% rename from ansible/roles/sonic-common/files/ssw/ACS-MSN2700/etc/sensors.conf rename to sonic-mgmt/ansible/roles/sonic-common/files/ssw/ACS-MSN2700/etc/sensors.conf diff --git a/ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/lldpd.conf b/sonic-mgmt/ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/lldpd.conf similarity index 100% rename from ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/lldpd.conf rename to sonic-mgmt/ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/lldpd.conf diff --git a/ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/sensors.conf b/sonic-mgmt/ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/sensors.conf similarity index 100% rename from ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/sensors.conf rename to sonic-mgmt/ansible/roles/sonic-common/files/ssw/Force10-S6000/etc/sensors.conf diff --git a/ansible/roles/sonic-common/handlers/main.yml b/sonic-mgmt/ansible/roles/sonic-common/handlers/main.yml similarity index 100% rename from ansible/roles/sonic-common/handlers/main.yml rename to sonic-mgmt/ansible/roles/sonic-common/handlers/main.yml diff --git a/ansible/roles/sonic-common/tasks/aptrepo.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/aptrepo.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/aptrepo.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/aptrepo.yml diff --git a/ansible/roles/sonic-common/tasks/database.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/database.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/database.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/database.yml diff --git a/ansible/roles/sonic-common/tasks/dhcp_relay.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/dhcp_relay.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/dhcp_relay.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/dhcp_relay.yml diff --git a/ansible/roles/sonic-common/tasks/docker.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/docker.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/docker.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/docker.yml diff --git a/ansible/roles/sonic-common/tasks/lldp.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/lldp.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/lldp.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/lldp.yml diff --git a/ansible/roles/sonic-common/tasks/logrotate.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/logrotate.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/logrotate.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/logrotate.yml diff --git a/ansible/roles/sonic-common/tasks/main.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/main.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/main.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/main.yml diff --git a/ansible/roles/sonic-common/tasks/passwd.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/passwd.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/passwd.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/passwd.yml diff --git a/ansible/roles/sonic-common/tasks/platform-cavm.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/platform-cavm.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/platform-cavm.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/platform-cavm.yml diff --git a/ansible/roles/sonic-common/tasks/platform-dell.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/platform-dell.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/platform-dell.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/platform-dell.yml diff --git a/ansible/roles/sonic-common/tasks/platform-mlnx.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/platform-mlnx.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/platform-mlnx.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/platform-mlnx.yml diff --git a/ansible/roles/sonic-common/tasks/platform.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/platform.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/platform.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/platform.yml diff --git a/ansible/roles/sonic-common/tasks/sensors_check.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/sensors_check.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/sensors_check.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/sensors_check.yml diff --git a/ansible/roles/sonic-common/tasks/snmp.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/snmp.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/snmp.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/snmp.yml diff --git a/ansible/roles/sonic-common/tasks/sonicdocker.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/sonicdocker.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/sonicdocker.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/sonicdocker.yml diff --git a/ansible/roles/sonic-common/tasks/sonicdocker_clean.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/sonicdocker_clean.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/sonicdocker_clean.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/sonicdocker_clean.yml diff --git a/ansible/roles/sonic-common/tasks/sudoers.yml b/sonic-mgmt/ansible/roles/sonic-common/tasks/sudoers.yml similarity index 100% rename from ansible/roles/sonic-common/tasks/sudoers.yml rename to sonic-mgmt/ansible/roles/sonic-common/tasks/sudoers.yml diff --git a/ansible/roles/sonic-common/templates/default/snmpd.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/default/snmpd.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/default/snmpd.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/default/snmpd.j2 diff --git a/ansible/roles/sonic-common/templates/dhclient-exit-hook-hostname b/sonic-mgmt/ansible/roles/sonic-common/templates/dhclient-exit-hook-hostname similarity index 100% rename from ansible/roles/sonic-common/templates/dhclient-exit-hook-hostname rename to sonic-mgmt/ansible/roles/sonic-common/templates/dhclient-exit-hook-hostname diff --git a/ansible/roles/sonic-common/templates/dhcp_relay.yml.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/dhcp_relay.yml.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/dhcp_relay.yml.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/dhcp_relay.yml.j2 diff --git a/ansible/roles/sonic-common/templates/etc/systemd/system/database.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/database.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/etc/systemd/system/database.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/database.j2 diff --git a/ansible/roles/sonic-common/templates/etc/systemd/system/dhcp_relay.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/dhcp_relay.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/etc/systemd/system/dhcp_relay.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/dhcp_relay.j2 diff --git a/ansible/roles/sonic-common/templates/etc/systemd/system/docker.service.d/http-proxy.conf.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/docker.service.d/http-proxy.conf.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/etc/systemd/system/docker.service.d/http-proxy.conf.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/docker.service.d/http-proxy.conf.j2 diff --git a/ansible/roles/sonic-common/templates/etc/systemd/system/lldp.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/lldp.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/etc/systemd/system/lldp.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/lldp.j2 diff --git a/ansible/roles/sonic-common/templates/etc/systemd/system/snmp.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/snmp.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/etc/systemd/system/snmp.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/etc/systemd/system/snmp.j2 diff --git a/ansible/roles/sonic-common/templates/hosts.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/hosts.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/hosts.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/hosts.j2 diff --git a/ansible/roles/sonic-common/templates/interfaces.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/interfaces.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/interfaces.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/interfaces.j2 diff --git a/ansible/roles/sonic-common/templates/lldpd b/sonic-mgmt/ansible/roles/sonic-common/templates/lldpd similarity index 100% rename from ansible/roles/sonic-common/templates/lldpd rename to sonic-mgmt/ansible/roles/sonic-common/templates/lldpd diff --git a/ansible/roles/sonic-common/templates/ntp.conf.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/ntp.conf.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/ntp.conf.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/ntp.conf.j2 diff --git a/ansible/roles/sonic-common/templates/rsyslog.conf.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/rsyslog.conf.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/rsyslog.conf.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/rsyslog.conf.j2 diff --git a/ansible/roles/sonic-common/templates/snmp.yml.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/snmp.yml.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/snmp.yml.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/snmp.yml.j2 diff --git a/ansible/roles/sonic-common/templates/snmpd.conf.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/snmpd.conf.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/snmpd.conf.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/snmpd.conf.j2 diff --git a/ansible/roles/sonic-common/templates/sonic_version.yml.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/sonic_version.yml.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/sonic_version.yml.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/sonic_version.yml.j2 diff --git a/ansible/roles/sonic-common/templates/sudoers.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/sudoers.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/sudoers.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/sudoers.j2 diff --git a/ansible/roles/sonic-common/templates/sysDescription.j2 b/sonic-mgmt/ansible/roles/sonic-common/templates/sysDescription.j2 similarity index 100% rename from ansible/roles/sonic-common/templates/sysDescription.j2 rename to sonic-mgmt/ansible/roles/sonic-common/templates/sysDescription.j2 diff --git a/ansible/roles/sonic/handlers/main.yml b/sonic-mgmt/ansible/roles/sonic/handlers/main.yml similarity index 100% rename from ansible/roles/sonic/handlers/main.yml rename to sonic-mgmt/ansible/roles/sonic/handlers/main.yml diff --git a/ansible/roles/sonic/tasks/csonic.yml b/sonic-mgmt/ansible/roles/sonic/tasks/csonic.yml similarity index 100% rename from ansible/roles/sonic/tasks/csonic.yml rename to sonic-mgmt/ansible/roles/sonic/tasks/csonic.yml diff --git a/ansible/roles/sonic/tasks/csonic_config.yml b/sonic-mgmt/ansible/roles/sonic/tasks/csonic_config.yml similarity index 100% rename from ansible/roles/sonic/tasks/csonic_config.yml rename to sonic-mgmt/ansible/roles/sonic/tasks/csonic_config.yml diff --git a/ansible/roles/sonic/tasks/main.yml b/sonic-mgmt/ansible/roles/sonic/tasks/main.yml similarity index 100% rename from ansible/roles/sonic/tasks/main.yml rename to sonic-mgmt/ansible/roles/sonic/tasks/main.yml diff --git a/ansible/roles/sonic/tasks/vsonic.yml b/sonic-mgmt/ansible/roles/sonic/tasks/vsonic.yml similarity index 98% rename from ansible/roles/sonic/tasks/vsonic.yml rename to sonic-mgmt/ansible/roles/sonic/tasks/vsonic.yml index 46f117b75d2..ebccd2e1fe3 100644 --- a/ansible/roles/sonic/tasks/vsonic.yml +++ b/sonic-mgmt/ansible/roles/sonic/tasks/vsonic.yml @@ -107,4 +107,3 @@ - copy: src="docker-ptf.tar" dest="docker-ptf.tar" - shell: docker load -i docker-ptf.tar || true - shell: rm -f docker-ptf.tar - when: ptf_on_neighbor is defined and ptf_on_neighbor|bool == true diff --git a/ansible/roles/sonic/templates/configdb-csonic.j2 b/sonic-mgmt/ansible/roles/sonic/templates/configdb-csonic.j2 similarity index 100% rename from ansible/roles/sonic/templates/configdb-csonic.j2 rename to sonic-mgmt/ansible/roles/sonic/templates/configdb-csonic.j2 diff --git a/ansible/roles/sonic/templates/configdb-mgmt.j2 b/sonic-mgmt/ansible/roles/sonic/templates/configdb-mgmt.j2 similarity index 100% rename from ansible/roles/sonic/templates/configdb-mgmt.j2 rename to sonic-mgmt/ansible/roles/sonic/templates/configdb-mgmt.j2 diff --git a/ansible/roles/sonic/templates/configdb-t0-leaf.j2 b/sonic-mgmt/ansible/roles/sonic/templates/configdb-t0-leaf.j2 similarity index 100% rename from ansible/roles/sonic/templates/configdb-t0-leaf.j2 rename to sonic-mgmt/ansible/roles/sonic/templates/configdb-t0-leaf.j2 diff --git a/ansible/roles/sonic/templates/configdb.j2 b/sonic-mgmt/ansible/roles/sonic/templates/configdb.j2 similarity index 100% rename from ansible/roles/sonic/templates/configdb.j2 rename to sonic-mgmt/ansible/roles/sonic/templates/configdb.j2 diff --git a/ansible/roles/sonic/templates/tests/test_configdb_csonic.py b/sonic-mgmt/ansible/roles/sonic/templates/tests/test_configdb_csonic.py similarity index 100% rename from ansible/roles/sonic/templates/tests/test_configdb_csonic.py rename to sonic-mgmt/ansible/roles/sonic/templates/tests/test_configdb_csonic.py diff --git a/ansible/roles/sonicv2/files/bin/bcmcmd.v2 b/sonic-mgmt/ansible/roles/sonicv2/files/bin/bcmcmd.v2 similarity index 100% rename from ansible/roles/sonicv2/files/bin/bcmcmd.v2 rename to sonic-mgmt/ansible/roles/sonicv2/files/bin/bcmcmd.v2 diff --git a/ansible/roles/sonicv2/files/bin/sonic_support b/sonic-mgmt/ansible/roles/sonicv2/files/bin/sonic_support similarity index 100% rename from ansible/roles/sonicv2/files/bin/sonic_support rename to sonic-mgmt/ansible/roles/sonicv2/files/bin/sonic_support diff --git a/ansible/roles/sonicv2/files/bin/vtysh b/sonic-mgmt/ansible/roles/sonicv2/files/bin/vtysh similarity index 100% rename from ansible/roles/sonicv2/files/bin/vtysh rename to sonic-mgmt/ansible/roles/sonicv2/files/bin/vtysh diff --git a/ansible/roles/sonicv2/files/docker_clean.sh b/sonic-mgmt/ansible/roles/sonicv2/files/docker_clean.sh similarity index 100% rename from ansible/roles/sonicv2/files/docker_clean.sh rename to sonic-mgmt/ansible/roles/sonicv2/files/docker_clean.sh diff --git a/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_map.json b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_map.json similarity index 100% rename from ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_map.json rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_map.json diff --git a/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_reverse_map.json b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_reverse_map.json similarity index 100% rename from ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_reverse_map.json rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/alias_reverse_map.json diff --git a/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/port_config.ini b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/port_config.ini similarity index 100% rename from ansible/roles/sonicv2/files/ssw/ACS-MSN2700/port_config.ini rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-MSN2700/port_config.ini diff --git a/ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_map.json b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_map.json similarity index 100% rename from ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_map.json rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_map.json diff --git a/ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_reverse_map.json b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_reverse_map.json similarity index 100% rename from ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_reverse_map.json rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-S6000/alias_reverse_map.json diff --git a/ansible/roles/sonicv2/files/ssw/ACS-S6000/port_config.ini b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-S6000/port_config.ini similarity index 100% rename from ansible/roles/sonicv2/files/ssw/ACS-S6000/port_config.ini rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/ACS-S6000/port_config.ini diff --git a/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_map.json b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_map.json similarity index 100% rename from ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_map.json rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_map.json diff --git a/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_reverse_map.json b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_reverse_map.json similarity index 100% rename from ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_reverse_map.json rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/alias_reverse_map.json diff --git a/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/port_config.ini b/sonic-mgmt/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/port_config.ini similarity index 100% rename from ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/port_config.ini rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw/Arista-7050-QX32/port_config.ini diff --git a/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_128x10.ini b/sonic-mgmt/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_128x10.ini similarity index 100% rename from ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_128x10.ini rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_128x10.ini diff --git a/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x100.ini b/sonic-mgmt/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x100.ini similarity index 100% rename from ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x100.ini rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x100.ini diff --git a/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x40.ini b/sonic-mgmt/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x40.ini similarity index 100% rename from ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x40.ini rename to sonic-mgmt/ansible/roles/sonicv2/files/ssw_extra/AS7512/port_config_32x40.ini diff --git a/ansible/roles/sonicv2/handlers/main.yml b/sonic-mgmt/ansible/roles/sonicv2/handlers/main.yml similarity index 100% rename from ansible/roles/sonicv2/handlers/main.yml rename to sonic-mgmt/ansible/roles/sonicv2/handlers/main.yml diff --git a/ansible/roles/sonicv2/tasks/main.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/main.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/main.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/main.yml diff --git a/ansible/roles/sonicv2/tasks/quagga.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/quagga.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/quagga.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/quagga.yml diff --git a/ansible/roles/sonicv2/tasks/sonic-brcm.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/sonic-brcm.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/sonic-brcm.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/sonic-brcm.yml diff --git a/ansible/roles/sonicv2/tasks/sonic-cavm.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/sonic-cavm.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/sonic-cavm.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/sonic-cavm.yml diff --git a/ansible/roles/sonicv2/tasks/sonic-mlnx.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/sonic-mlnx.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/sonic-mlnx.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/sonic-mlnx.yml diff --git a/ansible/roles/sonicv2/tasks/sonicdocker.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/sonicdocker.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/sonicdocker.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/sonicdocker.yml diff --git a/ansible/roles/sonicv2/tasks/sonicdocker_clean.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/sonicdocker_clean.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/sonicdocker_clean.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/sonicdocker_clean.yml diff --git a/ansible/roles/sonicv2/tasks/teamd.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/teamd.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/teamd.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/teamd.yml diff --git a/ansible/roles/sonicv2/tasks/teamd_interface.yml b/sonic-mgmt/ansible/roles/sonicv2/tasks/teamd_interface.yml similarity index 100% rename from ansible/roles/sonicv2/tasks/teamd_interface.yml rename to sonic-mgmt/ansible/roles/sonicv2/tasks/teamd_interface.yml diff --git a/ansible/roles/sonicv2/templates/etc/ssw/AS7512/profile.ini.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/etc/ssw/AS7512/profile.ini.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/etc/ssw/AS7512/profile.ini.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/etc/ssw/AS7512/profile.ini.j2 diff --git a/ansible/roles/sonicv2/templates/etc/ssw/XP-SIM/profile.ini.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/etc/ssw/XP-SIM/profile.ini.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/etc/ssw/XP-SIM/profile.ini.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/etc/ssw/XP-SIM/profile.ini.j2 diff --git a/ansible/roles/sonicv2/templates/etc/systemd/system/bgp.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/bgp.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/etc/systemd/system/bgp.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/bgp.j2 diff --git a/ansible/roles/sonicv2/templates/etc/systemd/system/swss.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/swss.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/etc/systemd/system/swss.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/swss.j2 diff --git a/ansible/roles/sonicv2/templates/etc/systemd/system/syncd.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/syncd.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/etc/systemd/system/syncd.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/syncd.j2 diff --git a/ansible/roles/sonicv2/templates/etc/systemd/system/teamd.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/teamd.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/etc/systemd/system/teamd.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/etc/systemd/system/teamd.j2 diff --git a/ansible/roles/sonicv2/templates/lag_interfaces.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/lag_interfaces.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/lag_interfaces.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/lag_interfaces.j2 diff --git a/ansible/roles/sonicv2/templates/quagga/bgpd.conf.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/quagga/bgpd.conf.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/quagga/bgpd.conf.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/quagga/bgpd.conf.j2 diff --git a/ansible/roles/sonicv2/templates/quagga/daemons b/sonic-mgmt/ansible/roles/sonicv2/templates/quagga/daemons similarity index 100% rename from ansible/roles/sonicv2/templates/quagga/daemons rename to sonic-mgmt/ansible/roles/sonicv2/templates/quagga/daemons diff --git a/ansible/roles/sonicv2/templates/quagga/isolate.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/quagga/isolate.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/quagga/isolate.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/quagga/isolate.j2 diff --git a/ansible/roles/sonicv2/templates/quagga/unisolate.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/quagga/unisolate.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/quagga/unisolate.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/quagga/unisolate.j2 diff --git a/ansible/roles/sonicv2/templates/quagga/zebra.conf.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/quagga/zebra.conf.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/quagga/zebra.conf.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/quagga/zebra.conf.j2 diff --git a/ansible/roles/sonicv2/templates/teamd.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/teamd.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/teamd.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/teamd.j2 diff --git a/ansible/roles/sonicv2/templates/vlan_interfaces.j2 b/sonic-mgmt/ansible/roles/sonicv2/templates/vlan_interfaces.j2 similarity index 100% rename from ansible/roles/sonicv2/templates/vlan_interfaces.j2 rename to sonic-mgmt/ansible/roles/sonicv2/templates/vlan_interfaces.j2 diff --git a/ansible/roles/test/files/acstests/IP_decap_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/IP_decap_test.py similarity index 100% rename from ansible/roles/test/files/acstests/IP_decap_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/IP_decap_test.py diff --git a/ansible/roles/test/files/acstests/acl_port_range_traffic_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/acl_port_range_traffic_test.py similarity index 100% rename from ansible/roles/test/files/acstests/acl_port_range_traffic_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/acl_port_range_traffic_test.py diff --git a/ansible/roles/test/files/acstests/acl_tcp_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/acl_tcp_test.py similarity index 100% rename from ansible/roles/test/files/acstests/acl_tcp_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/acl_tcp_test.py diff --git a/ansible/roles/test/files/acstests/acltb_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/acltb_test.py similarity index 100% rename from ansible/roles/test/files/acstests/acltb_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/acltb_test.py diff --git a/ansible/roles/test/files/acstests/acs_base_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/acs_base_test.py similarity index 100% rename from ansible/roles/test/files/acstests/acs_base_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/acs_base_test.py diff --git a/ansible/roles/test/files/acstests/dscp_ecn_send.py b/sonic-mgmt/ansible/roles/test/files/acstests/dscp_ecn_send.py similarity index 100% rename from ansible/roles/test/files/acstests/dscp_ecn_send.py rename to sonic-mgmt/ansible/roles/test/files/acstests/dscp_ecn_send.py diff --git a/ansible/roles/test/files/acstests/dscp_mapping.py b/sonic-mgmt/ansible/roles/test/files/acstests/dscp_mapping.py similarity index 100% rename from ansible/roles/test/files/acstests/dscp_mapping.py rename to sonic-mgmt/ansible/roles/test/files/acstests/dscp_mapping.py diff --git a/ansible/roles/test/files/acstests/everflow_policer_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/everflow_policer_test.py similarity index 100% rename from ansible/roles/test/files/acstests/everflow_policer_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/everflow_policer_test.py diff --git a/ansible/roles/test/files/acstests/everflow_tb_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/everflow_tb_test.py similarity index 100% rename from ansible/roles/test/files/acstests/everflow_tb_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/everflow_tb_test.py diff --git a/ansible/roles/test/files/acstests/py3/lag_test.py b/sonic-mgmt/ansible/roles/test/files/acstests/py3/lag_test.py similarity index 100% rename from ansible/roles/test/files/acstests/py3/lag_test.py rename to sonic-mgmt/ansible/roles/test/files/acstests/py3/lag_test.py diff --git a/ansible/roles/test/files/acstests/py3/macsec.py b/sonic-mgmt/ansible/roles/test/files/acstests/py3/macsec.py similarity index 100% rename from ansible/roles/test/files/acstests/py3/macsec.py rename to sonic-mgmt/ansible/roles/test/files/acstests/py3/macsec.py diff --git a/ansible/roles/test/files/acstests/py3/router_utils.py b/sonic-mgmt/ansible/roles/test/files/acstests/py3/router_utils.py similarity index 100% rename from ansible/roles/test/files/acstests/py3/router_utils.py rename to sonic-mgmt/ansible/roles/test/files/acstests/py3/router_utils.py diff --git a/ansible/roles/test/files/acstests/router_utils.py b/sonic-mgmt/ansible/roles/test/files/acstests/router_utils.py similarity index 100% rename from ansible/roles/test/files/acstests/router_utils.py rename to sonic-mgmt/ansible/roles/test/files/acstests/router_utils.py diff --git a/ansible/roles/test/files/brcm/64_interface_to_front_map.ini b/sonic-mgmt/ansible/roles/test/files/brcm/64_interface_to_front_map.ini similarity index 100% rename from ansible/roles/test/files/brcm/64_interface_to_front_map.ini rename to sonic-mgmt/ansible/roles/test/files/brcm/64_interface_to_front_map.ini diff --git a/ansible/roles/test/files/brcm/66_interface_to_front_map.ini b/sonic-mgmt/ansible/roles/test/files/brcm/66_interface_to_front_map.ini similarity index 100% rename from ansible/roles/test/files/brcm/66_interface_to_front_map.ini rename to sonic-mgmt/ansible/roles/test/files/brcm/66_interface_to_front_map.ini diff --git a/ansible/roles/test/files/brcm/d108c8_interface_to_front_map.ini b/sonic-mgmt/ansible/roles/test/files/brcm/d108c8_interface_to_front_map.ini similarity index 100% rename from ansible/roles/test/files/brcm/d108c8_interface_to_front_map.ini rename to sonic-mgmt/ansible/roles/test/files/brcm/d108c8_interface_to_front_map.ini diff --git a/ansible/roles/test/files/docker_clean.sh b/sonic-mgmt/ansible/roles/test/files/docker_clean.sh similarity index 100% rename from ansible/roles/test/files/docker_clean.sh rename to sonic-mgmt/ansible/roles/test/files/docker_clean.sh diff --git a/ansible/roles/test/files/helpers/add_ip.sh b/sonic-mgmt/ansible/roles/test/files/helpers/add_ip.sh similarity index 100% rename from ansible/roles/test/files/helpers/add_ip.sh rename to sonic-mgmt/ansible/roles/test/files/helpers/add_ip.sh diff --git a/ansible/roles/test/files/helpers/announce_routes.py b/sonic-mgmt/ansible/roles/test/files/helpers/announce_routes.py similarity index 100% rename from ansible/roles/test/files/helpers/announce_routes.py rename to sonic-mgmt/ansible/roles/test/files/helpers/announce_routes.py diff --git a/ansible/roles/test/files/helpers/arp_responder.py b/sonic-mgmt/ansible/roles/test/files/helpers/arp_responder.py similarity index 100% rename from ansible/roles/test/files/helpers/arp_responder.py rename to sonic-mgmt/ansible/roles/test/files/helpers/arp_responder.py diff --git a/ansible/roles/test/files/helpers/bfd_responder.py b/sonic-mgmt/ansible/roles/test/files/helpers/bfd_responder.py similarity index 100% rename from ansible/roles/test/files/helpers/bfd_responder.py rename to sonic-mgmt/ansible/roles/test/files/helpers/bfd_responder.py diff --git a/ansible/roles/test/files/helpers/change_mac.sh b/sonic-mgmt/ansible/roles/test/files/helpers/change_mac.sh similarity index 100% rename from ansible/roles/test/files/helpers/change_mac.sh rename to sonic-mgmt/ansible/roles/test/files/helpers/change_mac.sh diff --git a/ansible/roles/test/files/helpers/config_service_acls.sh b/sonic-mgmt/ansible/roles/test/files/helpers/config_service_acls.sh similarity index 100% rename from ansible/roles/test/files/helpers/config_service_acls.sh rename to sonic-mgmt/ansible/roles/test/files/helpers/config_service_acls.sh diff --git a/ansible/roles/test/files/helpers/dump.py b/sonic-mgmt/ansible/roles/test/files/helpers/dump.py similarity index 100% rename from ansible/roles/test/files/helpers/dump.py rename to sonic-mgmt/ansible/roles/test/files/helpers/dump.py diff --git a/ansible/roles/test/files/helpers/ferret.py b/sonic-mgmt/ansible/roles/test/files/helpers/ferret.py similarity index 100% rename from ansible/roles/test/files/helpers/ferret.py rename to sonic-mgmt/ansible/roles/test/files/helpers/ferret.py diff --git a/ansible/roles/test/files/helpers/http_api.py b/sonic-mgmt/ansible/roles/test/files/helpers/http_api.py similarity index 100% rename from ansible/roles/test/files/helpers/http_api.py rename to sonic-mgmt/ansible/roles/test/files/helpers/http_api.py diff --git a/ansible/roles/test/files/helpers/invert_iface_behind_lag_member.yml b/sonic-mgmt/ansible/roles/test/files/helpers/invert_iface_behind_lag_member.yml similarity index 100% rename from ansible/roles/test/files/helpers/invert_iface_behind_lag_member.yml rename to sonic-mgmt/ansible/roles/test/files/helpers/invert_iface_behind_lag_member.yml diff --git a/ansible/roles/test/files/helpers/pfc_gen.py b/sonic-mgmt/ansible/roles/test/files/helpers/pfc_gen.py similarity index 100% rename from ansible/roles/test/files/helpers/pfc_gen.py rename to sonic-mgmt/ansible/roles/test/files/helpers/pfc_gen.py diff --git a/ansible/roles/test/files/helpers/remove_ip.sh b/sonic-mgmt/ansible/roles/test/files/helpers/remove_ip.sh similarity index 100% rename from ansible/roles/test/files/helpers/remove_ip.sh rename to sonic-mgmt/ansible/roles/test/files/helpers/remove_ip.sh diff --git a/ansible/roles/test/files/mlnx/default_interface_to_front_map.ini b/sonic-mgmt/ansible/roles/test/files/mlnx/default_interface_to_front_map.ini similarity index 100% rename from ansible/roles/test/files/mlnx/default_interface_to_front_map.ini rename to sonic-mgmt/ansible/roles/test/files/mlnx/default_interface_to_front_map.ini diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Dockerfile b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Dockerfile similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Dockerfile rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Dockerfile diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Makefile b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Makefile similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Makefile rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/Makefile diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/install.sh b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/install.sh similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/install.sh rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/install.sh diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pfc_gen.py b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pfc_gen.py similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pfc_gen.py rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pfc_gen.py diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/applibs_1.mlnx.4.5.4414_amd64.deb b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/applibs_1.mlnx.4.5.4414_amd64.deb similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/applibs_1.mlnx.4.5.4414_amd64.deb rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/applibs_1.mlnx.4.5.4414_amd64.deb diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/libnl-3-200_3.5.0-1_amd64.deb b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/libnl-3-200_3.5.0-1_amd64.deb similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/libnl-3-200_3.5.0-1_amd64.deb rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/libnl-3-200_3.5.0-1_amd64.deb diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/python-sdk-api_1.mlnx.4.5.4414_amd64.deb b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/python-sdk-api_1.mlnx.4.5.4414_amd64.deb similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/python-sdk-api_1.mlnx.4.5.4414_amd64.deb rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/python-sdk-api_1.mlnx.4.5.4414_amd64.deb diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-complib_1.mlnx.4.5.4414_amd64.deb b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-complib_1.mlnx.4.5.4414_amd64.deb similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-complib_1.mlnx.4.5.4414_amd64.deb rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-complib_1.mlnx.4.5.4414_amd64.deb diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-gen-utils_1.mlnx.4.5.4414_amd64.deb b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-gen-utils_1.mlnx.4.5.4414_amd64.deb similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-gen-utils_1.mlnx.4.5.4414_amd64.deb rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sx-gen-utils_1.mlnx.4.5.4414_amd64.deb diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sxd-libs_1.mlnx.4.5.4414_amd64.deb b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sxd-libs_1.mlnx.4.5.4414_amd64.deb similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sxd-libs_1.mlnx.4.5.4414_amd64.deb rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/pkgs/sxd-libs_1.mlnx.4.5.4414_amd64.deb diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/start.sh b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/start.sh similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/start.sh rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen-asic/start.sh diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen/Dockerfile b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen/Dockerfile similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen/Dockerfile rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen/Dockerfile diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen/Makefile b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen/Makefile similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen/Makefile rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen/Makefile diff --git a/ansible/roles/test/files/mlnx/docker-tests-pfcgen/start.sh b/sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen/start.sh similarity index 100% rename from ansible/roles/test/files/mlnx/docker-tests-pfcgen/start.sh rename to sonic-mgmt/ansible/roles/test/files/mlnx/docker-tests-pfcgen/start.sh diff --git a/ansible/roles/test/files/mlnx/packets_aging.py b/sonic-mgmt/ansible/roles/test/files/mlnx/packets_aging.py similarity index 100% rename from ansible/roles/test/files/mlnx/packets_aging.py rename to sonic-mgmt/ansible/roles/test/files/mlnx/packets_aging.py diff --git a/ansible/roles/test/files/mlnx/upgrade_mlnx_fw.sh b/sonic-mgmt/ansible/roles/test/files/mlnx/upgrade_mlnx_fw.sh similarity index 100% rename from ansible/roles/test/files/mlnx/upgrade_mlnx_fw.sh rename to sonic-mgmt/ansible/roles/test/files/mlnx/upgrade_mlnx_fw.sh diff --git a/ansible/roles/test/files/ptftests/arista.py b/sonic-mgmt/ansible/roles/test/files/ptftests/arista.py similarity index 100% rename from ansible/roles/test/files/ptftests/arista.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/arista.py diff --git a/ansible/roles/test/files/ptftests/device_connection.py b/sonic-mgmt/ansible/roles/test/files/ptftests/device_connection.py similarity index 100% rename from ansible/roles/test/files/ptftests/device_connection.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/device_connection.py diff --git a/ansible/roles/test/files/ptftests/fib.py b/sonic-mgmt/ansible/roles/test/files/ptftests/fib.py similarity index 100% rename from ansible/roles/test/files/ptftests/fib.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/fib.py diff --git a/ansible/roles/test/files/ptftests/fib_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/fib_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/fib_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/fib_test.py diff --git a/ansible/roles/test/files/ptftests/host_device.py b/sonic-mgmt/ansible/roles/test/files/ptftests/host_device.py similarity index 100% rename from ansible/roles/test/files/ptftests/host_device.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/host_device.py diff --git a/ansible/roles/test/files/ptftests/lpm.py b/sonic-mgmt/ansible/roles/test/files/ptftests/lpm.py similarity index 100% rename from ansible/roles/test/files/ptftests/lpm.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/lpm.py diff --git a/ansible/roles/test/files/ptftests/macsec.py b/sonic-mgmt/ansible/roles/test/files/ptftests/macsec.py similarity index 100% rename from ansible/roles/test/files/ptftests/macsec.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/macsec.py diff --git a/ansible/roles/test/files/ptftests/py3/IP_decap_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/IP_decap_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/IP_decap_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/IP_decap_test.py diff --git a/ansible/roles/test/files/ptftests/py3/README.md b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/README.md similarity index 100% rename from ansible/roles/test/files/ptftests/py3/README.md rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/README.md diff --git a/ansible/roles/test/files/ptftests/py3/advanced-reboot.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/advanced-reboot.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/advanced-reboot.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/advanced-reboot.py diff --git a/ansible/roles/test/files/ptftests/py3/arista.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/arista.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/arista.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/arista.py diff --git a/ansible/roles/test/files/ptftests/py3/arptest.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/arptest.py similarity index 99% rename from ansible/roles/test/files/ptftests/py3/arptest.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/arptest.py index d4630ea1019..838fa3cbd32 100644 --- a/ansible/roles/test/files/ptftests/py3/arptest.py +++ b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/arptest.py @@ -227,3 +227,5 @@ def runTest(self): ) send_packet(self, self.test_params['port'], pkt) verify_no_packet(self, exp_pkt, self.test_params['port']) + + diff --git a/ansible/roles/test/files/ptftests/py3/bfd_responder.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/bfd_responder.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/bfd_responder.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/bfd_responder.py diff --git a/ansible/roles/test/files/ptftests/py3/copp_tests.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/copp_tests.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/copp_tests.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/copp_tests.py diff --git a/ansible/roles/test/files/ptftests/py3/device_connection.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/device_connection.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/device_connection.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/device_connection.py diff --git a/ansible/roles/test/files/ptftests/py3/dhcp_relay_stress_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcp_relay_stress_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/dhcp_relay_stress_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcp_relay_stress_test.py diff --git a/ansible/roles/test/files/ptftests/py3/dhcp_relay_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcp_relay_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/dhcp_relay_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcp_relay_test.py diff --git a/ansible/roles/test/files/ptftests/py3/dhcpv6_counter_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcpv6_counter_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/dhcpv6_counter_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcpv6_counter_test.py diff --git a/ansible/roles/test/files/ptftests/py3/dhcpv6_relay_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcpv6_relay_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/dhcpv6_relay_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/dhcpv6_relay_test.py diff --git a/ansible/roles/test/files/ptftests/py3/dir_bcast_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/dir_bcast_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/dir_bcast_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/dir_bcast_test.py diff --git a/ansible/roles/test/files/ptftests/py3/fdb.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fdb.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb.py diff --git a/ansible/roles/test/files/ptftests/py3/fdb_flush_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_flush_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fdb_flush_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_flush_test.py diff --git a/ansible/roles/test/files/ptftests/py3/fdb_mac_expire_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_mac_expire_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fdb_mac_expire_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_mac_expire_test.py diff --git a/ansible/roles/test/files/ptftests/py3/fdb_mac_learning_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_mac_learning_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fdb_mac_learning_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_mac_learning_test.py diff --git a/ansible/roles/test/files/ptftests/py3/fdb_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fdb_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fdb_test.py diff --git a/ansible/roles/test/files/ptftests/py3/fg_ecmp_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fg_ecmp_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fg_ecmp_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fg_ecmp_test.py diff --git a/ansible/roles/test/files/ptftests/py3/fib.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fib.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fib.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fib.py diff --git a/ansible/roles/test/files/ptftests/py3/fib_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/fib_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/fib_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/fib_test.py diff --git a/ansible/roles/test/files/ptftests/py3/generic_hash_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/generic_hash_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/generic_hash_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/generic_hash_test.py diff --git a/ansible/roles/test/files/ptftests/py3/hash_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/hash_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/hash_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/hash_test.py diff --git a/ansible/roles/test/files/ptftests/py3/host_device.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/host_device.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/host_device.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/host_device.py diff --git a/ansible/roles/test/files/ptftests/py3/inner_hash_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/inner_hash_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/inner_hash_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/inner_hash_test.py diff --git a/ansible/roles/test/files/ptftests/py3/ip_in_ip_tunnel_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/ip_in_ip_tunnel_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/ip_in_ip_tunnel_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/ip_in_ip_tunnel_test.py diff --git a/ansible/roles/test/files/ptftests/py3/lpm.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/lpm.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/lpm.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/lpm.py diff --git a/ansible/roles/test/files/ptftests/py3/macsec.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/macsec.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/macsec.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/macsec.py diff --git a/ansible/roles/test/files/ptftests/py3/mtu_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/mtu_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/mtu_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/mtu_test.py diff --git a/ansible/roles/test/files/ptftests/py3/pfc_pause_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfc_pause_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/pfc_pause_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfc_pause_test.py diff --git a/ansible/roles/test/files/ptftests/py3/pfc_wd.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfc_wd.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/pfc_wd.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfc_wd.py diff --git a/ansible/roles/test/files/ptftests/py3/pfc_wd_background_traffic.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfc_wd_background_traffic.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/pfc_wd_background_traffic.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfc_wd_background_traffic.py diff --git a/ansible/roles/test/files/ptftests/py3/pfcwd_background_traffic.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfcwd_background_traffic.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/pfcwd_background_traffic.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/pfcwd_background_traffic.py diff --git a/ansible/roles/test/files/ptftests/py3/populate_fdb.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/populate_fdb.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/populate_fdb.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/populate_fdb.py diff --git a/ansible/roles/test/files/ptftests/py3/pvst_bpdu_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/pvst_bpdu_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/pvst_bpdu_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/pvst_bpdu_test.py diff --git a/ansible/roles/test/files/ptftests/py3/radv_ipv6_ra_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/radv_ipv6_ra_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/radv_ipv6_ra_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/radv_ipv6_ra_test.py diff --git a/ansible/roles/test/files/ptftests/py3/router_adv_mflag_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/router_adv_mflag_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/router_adv_mflag_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/router_adv_mflag_test.py diff --git a/ansible/roles/test/files/ptftests/py3/sad_path.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/sad_path.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/sad_path.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/sad_path.py diff --git a/ansible/roles/test/files/ptftests/py3/sflow_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/sflow_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/sflow_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/sflow_test.py diff --git a/ansible/roles/test/files/ptftests/py3/sonic.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/sonic.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/sonic.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/sonic.py diff --git a/ansible/roles/test/files/ptftests/py3/utilities.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/utilities.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/utilities.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/utilities.py diff --git a/ansible/roles/test/files/ptftests/py3/vlan_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vlan_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vlan_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vlan_test.py diff --git a/ansible/roles/test/files/ptftests/py3/vnet_bgp_scale_dataplane.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vnet_bgp_scale_dataplane.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vnet_bgp_scale_dataplane.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vnet_bgp_scale_dataplane.py diff --git a/ansible/roles/test/files/ptftests/py3/vnet_vxlan.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vnet_vxlan.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vnet_vxlan.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vnet_vxlan.py diff --git a/ansible/roles/test/files/ptftests/py3/voq.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/voq.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/voq.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/voq.py diff --git a/ansible/roles/test/files/ptftests/py3/vrf_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vrf_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vrf_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vrf_test.py diff --git a/ansible/roles/test/files/ptftests/py3/vxlan-decap.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan-decap.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vxlan-decap.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan-decap.py diff --git a/ansible/roles/test/files/ptftests/py3/vxlan_ecmp_ptftest.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan_ecmp_ptftest.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vxlan_ecmp_ptftest.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan_ecmp_ptftest.py diff --git a/ansible/roles/test/files/ptftests/py3/vxlan_traffic.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan_traffic.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vxlan_traffic.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan_traffic.py diff --git a/ansible/roles/test/files/ptftests/py3/vxlan_traffic_scale.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan_traffic_scale.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/vxlan_traffic_scale.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/vxlan_traffic_scale.py diff --git a/ansible/roles/test/files/ptftests/py3/wr_arp.py b/sonic-mgmt/ansible/roles/test/files/ptftests/py3/wr_arp.py similarity index 100% rename from ansible/roles/test/files/ptftests/py3/wr_arp.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/py3/wr_arp.py diff --git a/ansible/roles/test/files/ptftests/radv_ipv6_ra_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/radv_ipv6_ra_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/radv_ipv6_ra_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/radv_ipv6_ra_test.py diff --git a/ansible/roles/test/files/ptftests/remote.py b/sonic-mgmt/ansible/roles/test/files/ptftests/remote.py similarity index 100% rename from ansible/roles/test/files/ptftests/remote.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/remote.py diff --git a/ansible/roles/test/files/ptftests/router_adv_mflag_test.py b/sonic-mgmt/ansible/roles/test/files/ptftests/router_adv_mflag_test.py similarity index 100% rename from ansible/roles/test/files/ptftests/router_adv_mflag_test.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/router_adv_mflag_test.py diff --git a/ansible/roles/test/files/ptftests/sad_path.py b/sonic-mgmt/ansible/roles/test/files/ptftests/sad_path.py similarity index 100% rename from ansible/roles/test/files/ptftests/sad_path.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/sad_path.py diff --git a/ansible/roles/test/files/ptftests/sonic.py b/sonic-mgmt/ansible/roles/test/files/ptftests/sonic.py similarity index 100% rename from ansible/roles/test/files/ptftests/sonic.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/sonic.py diff --git a/ansible/roles/test/files/ptftests/utilities.py b/sonic-mgmt/ansible/roles/test/files/ptftests/utilities.py similarity index 100% rename from ansible/roles/test/files/ptftests/utilities.py rename to sonic-mgmt/ansible/roles/test/files/ptftests/utilities.py diff --git a/sonic-mgmt/ansible/roles/test/files/ptftests/vnet_vxlan_ecmp.py b/sonic-mgmt/ansible/roles/test/files/ptftests/vnet_vxlan_ecmp.py new file mode 100644 index 00000000000..0cfc70c5ef9 --- /dev/null +++ b/sonic-mgmt/ansible/roles/test/files/ptftests/vnet_vxlan_ecmp.py @@ -0,0 +1,494 @@ +# ptf -t "config_file='/tmp/vnet_vxlan.json';vxlan_enabled=True" --platform-dir ptftests --test-dir ptftests --platform remote vnet-vxlan + +# The test checks vxlan encapsulation/decapsulation for the dataplane. +# The test runs three tests for each vlan on the DUT: +# 1. 'FromVM' : Sends encapsulated packets to PortChannel interfaces and expects to see the decapsulated inner packets on the vlan interface. +# 2. 'FromServer' : Sends regular packets to Vlan member interface and expects to see the encapsulated packets on the corresponding PortChannel interface. +# 3. 'Serv2Serv': Sends regular packets to Vlan member interfaces and expects to see the regular packets on the one of Vlan interfaces. +# +# The test has the following parameters: +# 1. 'config_file' is a filename of a file which contains all necessary information to run the test. The file is populated by ansible. This parameter is mandatory. + +import sys +import os.path +import json +import ptf +import ptf.packet as scapy +from ptf.base_tests import BaseTest +from ptf import config +import ptf.testutils as testutils +from ptf.testutils import * +from ptf.dataplane import match_exp_pkt +from ptf.mask import Mask +import datetime +import subprocess +import ipaddress +from pprint import pprint +from ipaddress import ip_address, ip_network +import random +VARS = {} +VARS['tcp_sport'] = 1234 +VARS['tcp_dport'] = 5000 + +def get_incremental_value(key): + return random.randint(0,65535) + + global VARS + VARS[key] = VARS[key] + 2 + return VARS[key] + + +class VNET(BaseTest): + def __init__(self): + BaseTest.__init__(self) + + self.vxlan_enabled = False + self.routes_removed = False + self.random_mac = '00:01:02:03:04:05' + self.vxlan_router_mac = '00:aa:bb:cc:78:9a' + self.vxlan_port = 13330 + self.DEFAULT_PKT_LEN = 100 + self.max_routes_wo_scaling = 1000 + self.vnet_batch = 8 + self.packets = [] + self.vxlan_srcport_range_enabled = False + self.vxlan_srcport_lower_bound = 0 + self.vxlan_srcport_upper_bound = 65535 + + def cmd(self, cmds): + process = subprocess.Popen(cmds, + shell=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + return_code = process.returncode + + return stdout, stderr, return_code + + def readMacs(self): + addrs = {} + for intf in os.listdir('/sys/class/net'): + if os.path.isdir('/sys/class/net/%s' % intf): + with open('/sys/class/net/%s/address' % intf) as fp: + addrs[intf] = fp.read().strip() + + return addrs + + def generate_ArpResponderConfig(self): + config = {} + for nbr in self.nbr_info: + if nbr[1] != 0: + key = 'eth%d@%d' % (nbr[2],nbr[1]) + else: + key = 'eth%d' % (nbr[2]) + if key in config: + config[key].append(nbr[0]) + else: + config[key] = [nbr[0]] + + with open('/tmp/vnet_arpresponder.conf', 'w') as fp: + json.dump(config, fp) + + return + + def getSrvInfo(self, vnet, ifname=''): + ret_list = [] + for item in self.serv_info[vnet]: + # There may be one or more... + if ifname == '' or item['ifname'] == ifname: + ret_list.append((item['ip'], item['port'], item['vlan_id'], item['vni'])) + + + return ret_list + + def checkPeer(self, test): + if self.peering is None: + return + for peers in self.peering: + for key, peer in peers.items(): + if test['name'] == key: + for info in self.getSrvInfo(ptest['name']): + ptest = dict(test) + ptest['name'] = peer + ptest['src'], ptest['port'], ptest['vlan'], ptest['vni'] = info + if 'dst_vni' in test: + ptest['dst_vni'] = test['dst_vni'] + self.tests.append(ptest) + + def checklocal(self, graph, test): + for routes in graph['vnet_local_routes']: + for name, rt_list in routes.items(): + if test['name'] == name.split('_')[0]: + if self.total_routes <= self.max_routes_wo_scaling: + for entry in rt_list: + self.addLocalTest(test, entry) + else: + vnet_id = int(name.split('_')[0][4:]) + rt_idx = ((vnet_id-1)//4)%len(rt_list) + entry = rt_list[rt_idx] + self.addLocalTest(test, entry) + + def getPeerTest(self, test): + peer_vnets = [] + peer_tests = [] + for peers in self.peering: + for key, peer in peers.items(): + if test['name'] == key: + peer_vnets.append(peer) + + for peer_test in self.tests: + if peer_test['name'] not in peer_vnets: + continue + peer_tests.append(peer_test) + + return peer_tests + + def getRifTests(self, test): + neighbor_rifs = self.serv_info[test['name']] + rif_tests = [] + + for rif in neighbor_rifs: + if rif['vlan_id'] != test['vlan']: + new_test = {} + new_test['src'] = rif['ip'] + new_test['port'] = rif['port'] + new_test['vlan'] = rif['vlan_id'] + + rif_tests.append(new_test) + + return rif_tests + + def addTest(self, graph, name, entry): + for info in self.getSrvInfo(name.split('_')[0]): + test = {} + test['name'] = name.split('_')[0] + test['dst'] = entry['pfx'].split('/')[0] + test['host'] = entry['end'] + if 'mac' in entry: + test['mac'] = entry['mac'] + else: + test['mac'] = self.vxlan_router_mac + test['src'], test['port'], test['vlan'], test['vni'] = info + if 'vni' in entry: + test['dst_vni'] = entry['vni'] + self.tests.append(test) + self.checkPeer(test) + #self.checklocal(graph, test) + + def addLocalTest(self, test, entry): + nhtest = dict(test) + for info in self.getSrvInfo(nhtest['name'], entry['ifname']): + nhtest['src'], nhtest['port'], nhtest['vlan'], nhtest['vni'] = info + prefix = ip_network(unicode(entry['pfx'])) + nhtest['src'] = str(list(prefix.hosts())[0]) + self.tests.append(nhtest) + + def calculateTotalRoutes(self, graph): + self.total_routes = 0 + for routes in graph['vnet_routes']: + for name, rt_list in routes.items(): + self.total_routes += len(rt_list) + if graph['vnet_peers'] is not None: + for peers in graph['vnet_peers']: + for key, peer in peers.items(): + if name.split('_')[0] == key: + self.total_routes += len(rt_list) + + def setUp(self): + self.dataplane = ptf.dataplane_instance + + #self.test_params = testutils.test_params_get() + self.test_params = test_params_get() + + if 'config_file' not in self.test_params: + raise Exception("required parameter 'config_file' is not present") + + if 'vxlan_enabled' in self.test_params and self.test_params['vxlan_enabled']: + self.vxlan_enabled = True + + if 'routes_removed' in self.test_params and self.test_params['routes_removed']: + self.routes_removed = True + + if 'vxlan_srcport_range_enabled' in self.test_params and self.test_params['vxlan_srcport_range_enabled']: + self.vxlan_srcport_range_enabled = self.test_params['vxlan_srcport_range_enabled'] + + if 'lower_bound_port' in self.test_params and self.test_params['lower_bound_port']: + self.vxlan_srcport_lower_bound = self.test_params['lower_bound_port'] + + if 'upper_bound_port' in self.test_params and self.test_params['upper_bound_port']: + self.vxlan_srcport_upper_bound = self.test_params['upper_bound_port'] + + config = self.test_params['config_file'] + + if not os.path.isfile(config): + raise Exception("the config file %s doesn't exist" % config) + + with open(config) as fp: + graph = json.load(fp) + + self.pc_info = [] + self.net_ports = [] + for name, val in graph['minigraph_portchannels'].items(): + members = [graph['minigraph_port_indices'][member] for member in val['members']] + self.net_ports.extend(members) + ip = None + + for d in graph['minigraph_portchannel_interfaces']: + if d['attachto'] == name: + ip = d['peer_addr'] + break + else: + raise Exception("Portchannel '%s' ip address is not found" % name) + + self.pc_info.append((ip, members)) + + self.acc_ports = [] + for name, data in graph['minigraph_vlans'].items(): + ports = [graph['minigraph_port_indices'][member] for member in data['members'][1:]] + self.acc_ports.extend(ports) + + vni_base = 10000 + self.serv_info = {} + self.nbr_info = [] + acc_ports_size = len(self.acc_ports) + for idx, data in enumerate(graph['vnet_interfaces']): + if data['vnet'] not in self.serv_info: + self.serv_info[data['vnet']] = [] + ports = self.acc_ports[idx % acc_ports_size] + elif self.serv_info[data['vnet']]: + # Specify the port when there are multiple RIFs per VNET + # We want all RIFs in one VNET to use the same port/interface + # If we have already seen a RIF from this VNET, use the port of the previously seen RIF for consistency + ports = self.serv_info[data['vnet']][0].get('port', ports) + for nbr in graph['vnet_neighbors']: + if nbr['ifname'] == data['ifname']: + if 'Vlan' in data['ifname']: + vlan_id = int(data['ifname'].replace('Vlan', '')) + else: + vlan_id = 0 + ip = nbr['ip'] + self.nbr_info.append((ip, vlan_id, ports)) + # Moved these to inside the block, since it is possible to have more than one route info per interface + serv_info = {} + serv_info['ifname'] = data['ifname'] + serv_info['vlan_id'] = vlan_id + serv_info['ip'] = ip + serv_info['port'] = ports + serv_info['vni'] = data['vni'] + self.serv_info[data['vnet']].extend([serv_info]) + + self.peering = graph['vnet_peers'] + self.calculateTotalRoutes(graph) + + self.tests = [] + for routes in graph['vnet_routes']: + for name, rt_list in routes.items(): + for entry in rt_list: + self.addTest(graph, name, entry) + + self.dut_mac = graph['dut_mac'] + + ipv4 = None + ipv6 = None + for data in graph['minigraph_lo_interfaces']: + if data['prefixlen'] == 32: + ipv4 = data['addr'] + elif data['prefixlen'] == 128: + ipv6 = data['addr'] + if ipv4 is None: + raise Exception("ipv4 lo interface not found") + if ipv6 is None: + raise Exception("ipv6 lo interface not found") + + self.loopback_ipv4 = ipv4 + self.loopback_ipv6 = ipv6 + + self.ptf_mac_addrs = self.readMacs() + + self.generate_ArpResponderConfig() + + self.cmd(["supervisorctl", "start", "arp_responder"]) + + self.dataplane.flush() + + return + + def tearDown(self): + if self.vxlan_enabled: + self.cmd(["supervisorctl", "stop", "arp_responder"]) + + json.dump(self.packets, open("/tmp/vnet_pkts.json", 'w')) + + return + + def runTest(self): + if not self.vxlan_enabled: + return + + print + for test in self.tests: + if isinstance(ip_address(test['dst']), ipaddress.IPv4Address) != isinstance(ip_address(test['src']), ipaddress.IPv6Address): + self.FromServer(test) + print " FromServer passed" + #self.FromVM(test) + #print " FromVM passed" + #self.Serv2Serv(test) + #print " Serv2Serv passed" + + def FromServer(self, test): + rv = True + try: + pkt_len = self.DEFAULT_PKT_LEN + if test['vlan'] != 0: + tagged = True + pkt_len += 4 + else: + tagged = False + + vni = int(test['vni']) + if 'dst_vni' in test: + vni = int(test['dst_vni']) + + + # ECMP support, assume it is a string of comma seperated list of addresses. + host_addresses = test['host'].split(',') + returned_ip_addresses = {} + check_ecmp = 0 + for host_address in host_addresses: + check_ecmp = 1 + # This will ensure that every nh is used atleast once. + for i in range(8): + tcp_sport = get_incremental_value('tcp_sport') + #tcp_dport = get_incremental_value('tcp_dport') + tcp_dport = 5000 + valid_combination = True + if isinstance(ip_address(test['dst']), ipaddress.IPv4Address) and isinstance(ip_address(test['src']), ipaddress.IPv4Address): + pkt = simple_tcp_packet( + pktlen=pkt_len, + eth_dst=self.dut_mac, + eth_src=self.ptf_mac_addrs['eth%d' % test['port']], + dl_vlan_enable=tagged, + vlan_vid=test['vlan'], + ip_dst=test['dst'], + ip_src=test['src'], + ip_id=105, + ip_ttl=64, + tcp_sport=tcp_sport, + tcp_dport=tcp_dport) + exp_pkt = simple_tcp_packet( + eth_dst=test['mac'], + eth_src=self.dut_mac, + ip_dst=test['dst'], + ip_src=test['src'], + ip_id=105, + ip_ttl=63, + tcp_sport=tcp_sport, + tcp_dport=tcp_dport) + elif isinstance(ip_address(test['dst']), ipaddress.IPv6Address) and isinstance(ip_address(test['src']), ipaddress.IPv6Address): + pkt = simple_tcpv6_packet( + pktlen=pkt_len, + eth_dst=self.dut_mac, + eth_src=self.ptf_mac_addrs['eth%d' % test['port']], + dl_vlan_enable=tagged, + vlan_vid=test['vlan'], + ipv6_dst=test['dst'], + ipv6_src=test['src'], + ipv6_hlim=64, + tcp_sport=tcp_sport, + tcp_dport=tcp_dport) + exp_pkt = simple_tcpv6_packet( + eth_dst=test['mac'], + eth_src=self.dut_mac, + ipv6_dst=test['dst'], + ipv6_src=test['src'], + ipv6_hlim=63, + tcp_sport=tcp_sport, + tcp_dport=tcp_dport) + else: + valid_combination = False + print("Unusable combination:src:{} and dst:{}".format(test['src'], test['dst'])) + udp_sport = 1234 # Use entropy_hash(pkt), it will be ignored in the test later. + udp_dport = self.vxlan_port + if isinstance(ip_address(host_address), ipaddress.IPv4Address): + encap_pkt = simple_vxlan_packet( + eth_src=self.dut_mac, + eth_dst=self.random_mac, + ip_id=0, + ip_src=self.loopback_ipv4, + ip_dst=host_address, + ip_ttl=128, + udp_sport=udp_sport, + udp_dport=udp_dport, + with_udp_chksum=False, + vxlan_vni=vni, + inner_frame=exp_pkt) + encap_pkt[IP].flags = 0x2 + elif isinstance(ip_address(host_address), ipaddress.IPv6Address): + encap_pkt = simple_vxlanv6_packet( + eth_src=self.dut_mac, + eth_dst=self.random_mac, + ipv6_src=self.loopback_ipv6, + ipv6_dst=host_address, + udp_sport=udp_sport, + udp_dport=udp_dport, + with_udp_chksum=False, + vxlan_vni=vni, + inner_frame=exp_pkt) + else: + print("Unusable combination:src:{} and dst:{}".format(test['src'], test['dst'])) + #raise Exception("Found invalid IP address in test") + send_packet(self, test['port'], str(pkt), count=10) + + masked_exp_pkt = Mask(encap_pkt) + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "src") + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "dst") + if isinstance(ip_address(host_address), ipaddress.IPv4Address): + masked_exp_pkt.set_do_not_care_scapy(scapy.IP, "ttl") + masked_exp_pkt.set_do_not_care_scapy(scapy.IP, "chksum") + masked_exp_pkt.set_do_not_care_scapy(scapy.IP, "dst") + else: + masked_exp_pkt.set_do_not_care_scapy(scapy.IPv6, "hlim") + masked_exp_pkt.set_do_not_care_scapy(scapy.IPv6, "chksum") + masked_exp_pkt.set_do_not_care_scapy(scapy.IPv6, "dst") + masked_exp_pkt.set_do_not_care_scapy(scapy.UDP, "sport") + + log_str = "Sending packet from port " + str('eth%d' % test['port']) + " to " + test['dst'] + logging.info(log_str) + + if not self.routes_removed: + status, received_pkt = verify_packet_any_port(self, masked_exp_pkt, self.net_ports) + scapy_pkt = Ether(received_pkt) + # Store every destination that was received. + try: + dest_ip = scapy_pkt['IP'].dst + except IndexError: + dest_ip = scapy_pkt['IPv6'].dst + try: + returned_ip_addresses[dest_ip] = returned_ip_addresses[dest_ip] + 1 + except KeyError: + returned_ip_addresses[dest_ip] = 1 + + if self.vxlan_srcport_range_enabled: + assert (self.vxlan_srcport_lower_bound <= scapy_pkt.sport) and (self.vxlan_srcport_upper_bound >= scapy_pkt.sport), ("Received packet has UDP src port {} " + "that is not in expected range {} - {}".format(scapy_pkt.sport, self.vxlan_srcport_lower_bound, self.vxlan_srcport_upper_bound)) + else: + print ("Verifying no packet") + verify_no_packet_any(self, masked_exp_pkt, self.net_ports) + + # Verify ECMP: + # The number of returned IP addresses should be same as the number of ip addresses in NH group. + #assert len(returned_ip_addresses.keys()) == len(host_addresses), "{}, {}".format(len(returned_ip_addresses.keys()), len(host_addresses)) + if check_ecmp == 1 and not self.routes_removed: + if set(host_addresses) - set(returned_ip_addresses.keys()) == set([]): + print ("Each address has been used") + else: + raise RuntimeError('''ECMP might have failed for:{}, we expected every ip address in the nexthop group({} of them) + to be used, but only {} are used:\nUsed addresses:{}\nUnused Addresses:{}'''.format(test['dst'], + len(host_addresses), len(returned_ip_addresses.keys()), + returned_ip_addresses.keys(), set(host_addresses)-set(returned_ip_addresses.keys()))) + pkt.load = '0' * 60 + str(len(self.packets)) + self.packets.append((test['port'], str(pkt).encode("base64"))) + + finally: + print + diff --git a/ansible/roles/test/files/saitests b/sonic-mgmt/ansible/roles/test/files/saitests similarity index 100% rename from ansible/roles/test/files/saitests rename to sonic-mgmt/ansible/roles/test/files/saitests diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer.py b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer.py similarity index 100% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer.py rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer.py diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_analyze.yml b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_analyze.yml similarity index 100% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer_analyze.yml rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_analyze.yml diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_expect.txt b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_expect.txt similarity index 100% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_expect.txt rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_expect.txt diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt similarity index 98% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt index cba2d5a43cd..a45270e8fbd 100644 --- a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +++ b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt @@ -26,6 +26,8 @@ r, ".* ERR swss\d*#buffermgrd:.* doTask: Failed to process invalid entry, drop i r, ".* ERR syncd\d*#SDK: :- .*: Queue.* RID oid:.* can't provide the statistic.*" r, ".* INFO kernel:.*" r, ".* ERR kernel: .*leaba_module_device .*: .*: leaba_hostif_get_by_port: Port gid out of range port_gid=.*" +r, ".* ERR kernel:.*leaba_module_device.*received packets while buffer is full.*" +r, ".* ERR kernel:.*leaba_module_device.*free skb.*on error.*" r, ".* INFO systemd.*" r, ".* ERR kernel:.* Module gpio_ich is blacklisted.*" r, ".* skipping since it causes crash: SAI_STP_ATTR_BRIDGE_ID.*" @@ -397,6 +399,9 @@ r, ".* ERR hostcfgd: \['sonic-kdump-config'[^]]*\] - failed.*" # https://github.com/sonic-net/sonic-buildimage/issues/22348 r, ".* ERR pmon#chassis_db_init: Failed to load chassis due to ModuleNotFoundError.*" +# Errors for config reload +r, ".* ERR monit.*: 'rsyslog' process with pid .* is a zombie" + # https://msazure.visualstudio.com/One/_workitems/edit/33411748 r, ".* NOTICE kernel:.*exe=\"/usr/bin/kill\".*" @@ -456,6 +461,13 @@ r, ".*ERR pmon.*Failed to freeze VDM stats in contextmanager for port.*" r, ".*ERR pmon.*Failed to freeze VDM stats for port.*" r, ".*ERR pmon.*Failed to confirm VDM unfreeze status for port.*" r, ".*ERR pmon.*Failed to unfreeze VDM stats in contextmanager for port.*" +# https://github.com/aristanetworks/sonic-qual.msft/issues/1156 +r, ".*ERR pmon#DomInfoUpdateTask.*Failed to get VDM basic real values for port.*" + +# Ignore PIE port error log on set pfc mode +r, ".* ERR syncd#syncd: :- sendApiResponse: api SAI_COMMON_API_SET failed in syncd mode: SAI_STATUS_NOT_SUPPORTED.*" +r, ".* ERR syncd#syncd: :- processQuadEvent: VID: oid:0x.*" +r, ".* ERR syncd#syncd: :- processQuadEvent: attr: SAI_PORT_ATTR_PRIORITY_FLOW_CONTROL_MODE: SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED.*" # Ignore PIE port error log on set pfc mode r, ".* ERR syncd#syncd: :- sendApiResponse: api SAI_COMMON_API_SET failed in syncd mode: SAI_STATUS_NOT_SUPPORTED.*" diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_match.txt b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_match.txt similarity index 100% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_match.txt rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_match.txt diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_end.yml b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_end.yml similarity index 100% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer_end.yml rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_end.yml diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_init.yml b/sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_init.yml similarity index 100% rename from ansible/roles/test/files/tools/loganalyzer/loganalyzer_init.yml rename to sonic-mgmt/ansible/roles/test/files/tools/loganalyzer/loganalyzer_init.yml diff --git a/ansible/roles/test/handlers/main.yml b/sonic-mgmt/ansible/roles/test/handlers/main.yml similarity index 100% rename from ansible/roles/test/handlers/main.yml rename to sonic-mgmt/ansible/roles/test/handlers/main.yml diff --git a/ansible/roles/test/tasks/acl.yml b/sonic-mgmt/ansible/roles/test/tasks/acl.yml similarity index 100% rename from ansible/roles/test/tasks/acl.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl.yml diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_check_db.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_check_db.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_check_db.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_check_db.yml diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_counter_traffic_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_counter_traffic_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_counter_traffic_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/acl_counter_traffic_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_mirror_session.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_mirror_session.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_mirror_session.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_mirror_session.json diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule.json diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_delete.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_delete.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_delete.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_delete.json diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror.json diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror_delete.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror_delete.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror_delete.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_rule_mirror_delete.json diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_l3.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_l3.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_l3.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_l3.json diff --git a/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_mirror.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_mirror.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_mirror.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_counter_traffic_test/config_table_type_mirror.json diff --git a/ansible/roles/test/tasks/acl/acl_input_test/acl_config_invalid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_input_test/acl_config_invalid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_input_test/acl_config_invalid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_input_test/acl_config_invalid.json diff --git a/ansible/roles/test/tasks/acl/acl_input_test/acl_config_valid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_input_test/acl_config_valid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_input_test/acl_config_valid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_input_test/acl_config_valid.json diff --git a/ansible/roles/test/tasks/acl/acl_input_test/acl_input_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_input_test/acl_input_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_input_test/acl_input_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_input_test/acl_input_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/acl_orchagent_logic_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/acl_orchagent_logic_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/acl_orchagent_logic_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/acl_orchagent_logic_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_non_existing.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_non_existing.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_non_existing.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_non_existing.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_valid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_valid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_valid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_rule_valid.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_diff_fields.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_diff_fields.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_diff_fields.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_diff_fields.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_non_existing.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_non_existing.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_non_existing.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_non_existing.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_valid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_valid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_valid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_valid.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_with_rules.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_with_rules.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_with_rules.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_del_table_with_rules.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_dscp_in_l3_table_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_duplicate_rule_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_duplicate_rule_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_duplicate_rule_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_duplicate_rule_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_empty_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_empty_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_empty_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_empty_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ether_type_valid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_invalid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_invalid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_invalid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_extra_field_invalid.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_3.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_4.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_4.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_4.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_4.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_5.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_5.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_5.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_5.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_6.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_6.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_6.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_6.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_7.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_7.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_7.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_invalid_7.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_addr_valid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_proto_valid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_ip_type_valid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_invalid_3.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_valid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_valid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_valid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_l4_port_valid.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_operation_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_valid.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_valid.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_valid.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_packet_action_valid.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_port_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_valid_max.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_valid_max.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_valid_max.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_priority_valid_max.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_empty_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_rule_in_non_existing_table_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_l3.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_l3.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_l3.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_table_type_l3.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_orchagent_logic_test/config_tcp_flags_valid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/acl_port_bind_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/acl_port_bind_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/acl_port_bind_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/acl_port_bind_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port.json diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_duplicate_port_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port.json diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_unknown_port_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_valid_port.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_valid_port.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_valid_port.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_bind_valid_port.json diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_empty_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_empty_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_empty_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_empty_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_port_bind_test/config_unbind_port.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_unbind_port.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_bind_test/config_unbind_port.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_bind_test/config_unbind_port.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/acl_port_range_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/acl_port_range_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/acl_port_range_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/acl_port_range_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_different_port_range.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_different_port_range.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_different_port_range.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_different_port_range.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_limited_port_range.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_limited_port_range.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_limited_port_range.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_delete_limited_port_range.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_empty_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_empty_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_empty_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_empty_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_full_port_range.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_full_port_range.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_full_port_range.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_full_port_range.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_limited_port_range.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_limited_port_range.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_limited_port_range.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_limited_port_range.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_1_on_l3_table.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_1_on_l3_table.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_1_on_l3_table.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_1_on_l3_table.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_2_on_l3_table.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_2_on_l3_table.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_2_on_l3_table.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_2_on_l3_table.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_1.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_2.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_3.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_4.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_4.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_4.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_4.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_5.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_5.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_5.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_5.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_6.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_6.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_6.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_6.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_7.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_7.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_7.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_7.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_8.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_8.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_8.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_invalid_8.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_on_mirror_table.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_on_mirror_table.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_on_mirror_table.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_l4_port_range_on_mirror_table.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_mirror_session.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_mirror_session.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_mirror_session.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_mirror_session.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_rule_mirror.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_rule_mirror.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_rule_mirror.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_rule_mirror.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_l3.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_l3.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_l3.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_l3.json diff --git a/ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_mirror.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_mirror.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_mirror.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_port_range_test/config_table_type_mirror.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/acl_traffic_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/acl_traffic_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/acl_traffic_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/acl_traffic_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_empty_expect_file b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_empty_expect_file similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_empty_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_empty_expect_file diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_dst_ip.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_dst_ip.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_dst_ip.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_dst_ip.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ether_ip.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ether_ip.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ether_ip.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ether_ip.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_protocol.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_protocol.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_protocol.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_protocol.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_type.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_type.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_type.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_ip_type.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_dst_port.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_dst_port.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_dst_port.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_dst_port.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_src_port.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_src_port.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_src_port.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_l4_src_port.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_priority.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_priority.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_priority.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_priority.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_src_ip.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_src_ip.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_src_ip.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_src_ip.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_tcp_flags.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_tcp_flags.json similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_tcp_flags.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/config_traffic_drop_tcp_flags.json diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/run_ping_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/run_ping_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/run_ping_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/run_ping_test.yml diff --git a/ansible/roles/test/tasks/acl/acl_traffic_test/run_ptf_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/run_ptf_test.yml similarity index 100% rename from ansible/roles/test/tasks/acl/acl_traffic_test/run_ptf_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acl/acl_traffic_test/run_ptf_test.yml diff --git a/ansible/roles/test/tasks/acl/acltb_expect_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_expect_messages.txt similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_expect_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_expect_messages.txt diff --git a/ansible/roles/test/tasks/acl/acltb_ignore_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_ignore_messages.txt similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_ignore_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_ignore_messages.txt diff --git a/ansible/roles/test/tasks/acl/acltb_match_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_match_messages.txt similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_match_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_match_messages.txt diff --git a/ansible/roles/test/tasks/acl/acltb_test_rules-del.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules-del.json similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_test_rules-del.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules-del.json diff --git a/ansible/roles/test/tasks/acl/acltb_test_rules.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules.json similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_test_rules.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules.json diff --git a/ansible/roles/test/tasks/acl/acltb_test_rules_part_1.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules_part_1.json similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_test_rules_part_1.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules_part_1.json diff --git a/ansible/roles/test/tasks/acl/acltb_test_rules_part_2.json b/sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules_part_2.json similarity index 100% rename from ansible/roles/test/tasks/acl/acltb_test_rules_part_2.json rename to sonic-mgmt/ansible/roles/test/tasks/acl/acltb_test_rules_part_2.json diff --git a/ansible/roles/test/tasks/acltb.yml b/sonic-mgmt/ansible/roles/test/tasks/acltb.yml similarity index 100% rename from ansible/roles/test/tasks/acltb.yml rename to sonic-mgmt/ansible/roles/test/tasks/acltb.yml diff --git a/ansible/roles/test/tasks/acltb_ranges_test.yml b/sonic-mgmt/ansible/roles/test/tasks/acltb_ranges_test.yml similarity index 100% rename from ansible/roles/test/tasks/acltb_ranges_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/acltb_ranges_test.yml diff --git a/ansible/roles/test/tasks/add_container_to_inventory.yml b/sonic-mgmt/ansible/roles/test/tasks/add_container_to_inventory.yml similarity index 100% rename from ansible/roles/test/tasks/add_container_to_inventory.yml rename to sonic-mgmt/ansible/roles/test/tasks/add_container_to_inventory.yml diff --git a/ansible/roles/test/tasks/advanced-reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/advanced-reboot.yml similarity index 100% rename from ansible/roles/test/tasks/advanced-reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/advanced-reboot.yml diff --git a/ansible/roles/test/tasks/advanced_reboot/reboot-image-handle.yml b/sonic-mgmt/ansible/roles/test/tasks/advanced_reboot/reboot-image-handle.yml similarity index 100% rename from ansible/roles/test/tasks/advanced_reboot/reboot-image-handle.yml rename to sonic-mgmt/ansible/roles/test/tasks/advanced_reboot/reboot-image-handle.yml diff --git a/ansible/roles/test/tasks/advanced_reboot/upgrade_mlnx_fw.yml b/sonic-mgmt/ansible/roles/test/tasks/advanced_reboot/upgrade_mlnx_fw.yml similarity index 100% rename from ansible/roles/test/tasks/advanced_reboot/upgrade_mlnx_fw.yml rename to sonic-mgmt/ansible/roles/test/tasks/advanced_reboot/upgrade_mlnx_fw.yml diff --git a/ansible/roles/test/tasks/advanced_reboot/validate_sad_list.yml b/sonic-mgmt/ansible/roles/test/tasks/advanced_reboot/validate_sad_list.yml similarity index 100% rename from ansible/roles/test/tasks/advanced_reboot/validate_sad_list.yml rename to sonic-mgmt/ansible/roles/test/tasks/advanced_reboot/validate_sad_list.yml diff --git a/ansible/roles/test/tasks/arpall.yml b/sonic-mgmt/ansible/roles/test/tasks/arpall.yml similarity index 100% rename from ansible/roles/test/tasks/arpall.yml rename to sonic-mgmt/ansible/roles/test/tasks/arpall.yml diff --git a/ansible/roles/test/tasks/base_sanity.yml b/sonic-mgmt/ansible/roles/test/tasks/base_sanity.yml similarity index 100% rename from ansible/roles/test/tasks/base_sanity.yml rename to sonic-mgmt/ansible/roles/test/tasks/base_sanity.yml diff --git a/ansible/roles/test/tasks/bgp_bounce.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_bounce.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_bounce.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_bounce.yml diff --git a/ansible/roles/test/tasks/bgp_entry_flap.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_entry_flap.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_entry_flap.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_entry_flap.yml diff --git a/ansible/roles/test/tasks/bgp_fact.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_fact.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_fact.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_fact.yml diff --git a/ansible/roles/test/tasks/bgp_flap.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_flap.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_flap.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_flap.yml diff --git a/ansible/roles/test/tasks/bgp_gr_helper.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_gr_helper.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper.yml diff --git a/ansible/roles/test/tasks/bgp_gr_helper/get_vm_info.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper/get_vm_info.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_gr_helper/get_vm_info.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper/get_vm_info.yml diff --git a/ansible/roles/test/tasks/bgp_gr_helper/routes_update_expect.txt b/sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper/routes_update_expect.txt similarity index 100% rename from ansible/roles/test/tasks/bgp_gr_helper/routes_update_expect.txt rename to sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper/routes_update_expect.txt diff --git a/ansible/roles/test/tasks/bgp_gr_helper/routes_update_match.txt b/sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper/routes_update_match.txt similarity index 100% rename from ansible/roles/test/tasks/bgp_gr_helper/routes_update_match.txt rename to sonic-mgmt/ansible/roles/test/tasks/bgp_gr_helper/routes_update_match.txt diff --git a/ansible/roles/test/tasks/bgp_multipath_relax.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_multipath_relax.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_multipath_relax.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_multipath_relax.yml diff --git a/ansible/roles/test/tasks/bgp_nei_up.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_nei_up.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_nei_up.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_nei_up.yml diff --git a/ansible/roles/test/tasks/bgp_speaker.yml b/sonic-mgmt/ansible/roles/test/tasks/bgp_speaker.yml similarity index 100% rename from ansible/roles/test/tasks/bgp_speaker.yml rename to sonic-mgmt/ansible/roles/test/tasks/bgp_speaker.yml diff --git a/ansible/roles/test/tasks/buff_wm.yml b/sonic-mgmt/ansible/roles/test/tasks/buff_wm.yml similarity index 100% rename from ansible/roles/test/tasks/buff_wm.yml rename to sonic-mgmt/ansible/roles/test/tasks/buff_wm.yml diff --git a/ansible/roles/test/tasks/check_fanout_interfaces.yml b/sonic-mgmt/ansible/roles/test/tasks/check_fanout_interfaces.yml similarity index 100% rename from ansible/roles/test/tasks/check_fanout_interfaces.yml rename to sonic-mgmt/ansible/roles/test/tasks/check_fanout_interfaces.yml diff --git a/ansible/roles/test/tasks/check_sw_vm_interfaces.yml b/sonic-mgmt/ansible/roles/test/tasks/check_sw_vm_interfaces.yml similarity index 100% rename from ansible/roles/test/tasks/check_sw_vm_interfaces.yml rename to sonic-mgmt/ansible/roles/test/tasks/check_sw_vm_interfaces.yml diff --git a/ansible/roles/test/tasks/common_tasks/reboot_sonic.yml b/sonic-mgmt/ansible/roles/test/tasks/common_tasks/reboot_sonic.yml similarity index 100% rename from ansible/roles/test/tasks/common_tasks/reboot_sonic.yml rename to sonic-mgmt/ansible/roles/test/tasks/common_tasks/reboot_sonic.yml diff --git a/ansible/roles/test/tasks/common_tasks/reload_config.yml b/sonic-mgmt/ansible/roles/test/tasks/common_tasks/reload_config.yml similarity index 100% rename from ansible/roles/test/tasks/common_tasks/reload_config.yml rename to sonic-mgmt/ansible/roles/test/tasks/common_tasks/reload_config.yml diff --git a/ansible/roles/test/tasks/common_tasks/update_supervisor.yml b/sonic-mgmt/ansible/roles/test/tasks/common_tasks/update_supervisor.yml similarity index 100% rename from ansible/roles/test/tasks/common_tasks/update_supervisor.yml rename to sonic-mgmt/ansible/roles/test/tasks/common_tasks/update_supervisor.yml diff --git a/ansible/roles/test/tasks/config.yml b/sonic-mgmt/ansible/roles/test/tasks/config.yml similarity index 100% rename from ansible/roles/test/tasks/config.yml rename to sonic-mgmt/ansible/roles/test/tasks/config.yml diff --git a/ansible/roles/test/tasks/continuous_link_flap.yml b/sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap.yml similarity index 100% rename from ansible/roles/test/tasks/continuous_link_flap.yml rename to sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap.yml diff --git a/ansible/roles/test/tasks/continuous_link_flap/continuous_link_flap_helper.yml b/sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap/continuous_link_flap_helper.yml similarity index 100% rename from ansible/roles/test/tasks/continuous_link_flap/continuous_link_flap_helper.yml rename to sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap/continuous_link_flap_helper.yml diff --git a/ansible/roles/test/tasks/continuous_link_flap/continuous_peer_link_flap_helper.yml b/sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap/continuous_peer_link_flap_helper.yml similarity index 92% rename from ansible/roles/test/tasks/continuous_link_flap/continuous_peer_link_flap_helper.yml rename to sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap/continuous_peer_link_flap_helper.yml index 5355cdea4ee..03a2777b8c2 100644 --- a/ansible/roles/test/tasks/continuous_link_flap/continuous_peer_link_flap_helper.yml +++ b/sonic-mgmt/ansible/roles/test/tasks/continuous_link_flap/continuous_peer_link_flap_helper.yml @@ -9,10 +9,10 @@ delegate_to: localhost - set_fact: - peer_host: "{{device_info['mgmtip']}}" - peer_hwsku: "{{device_info['HwSku']}}" - peer_type: "{{device_info['Type']}}" - + peer_host: "{{device_info[ peer_device ]['mgmtip']}}" + peer_hwsku: "{{device_info[ peer_device ]['HwSku']}}" + peer_type: "{{device_info[ peer_device ]['Type']}}" + - set_fact: intfs_to_exclude: "{{interface}}" diff --git a/ansible/roles/test/tasks/continuous_reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/continuous_reboot.yml similarity index 100% rename from ansible/roles/test/tasks/continuous_reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/continuous_reboot.yml diff --git a/ansible/roles/test/tasks/copp.yml b/sonic-mgmt/ansible/roles/test/tasks/copp.yml similarity index 100% rename from ansible/roles/test/tasks/copp.yml rename to sonic-mgmt/ansible/roles/test/tasks/copp.yml diff --git a/ansible/roles/test/tasks/copp/ip2me_600.json b/sonic-mgmt/ansible/roles/test/tasks/copp/ip2me_600.json similarity index 100% rename from ansible/roles/test/tasks/copp/ip2me_600.json rename to sonic-mgmt/ansible/roles/test/tasks/copp/ip2me_600.json diff --git a/ansible/roles/test/tasks/copp/ip2me_6000.json b/sonic-mgmt/ansible/roles/test/tasks/copp/ip2me_6000.json similarity index 100% rename from ansible/roles/test/tasks/copp/ip2me_6000.json rename to sonic-mgmt/ansible/roles/test/tasks/copp/ip2me_6000.json diff --git a/ansible/roles/test/tasks/crm.yml b/sonic-mgmt/ansible/roles/test/tasks/crm.yml similarity index 100% rename from ansible/roles/test/tasks/crm.yml rename to sonic-mgmt/ansible/roles/test/tasks/crm.yml diff --git a/ansible/roles/test/tasks/decap.yml b/sonic-mgmt/ansible/roles/test/tasks/decap.yml similarity index 100% rename from ansible/roles/test/tasks/decap.yml rename to sonic-mgmt/ansible/roles/test/tasks/decap.yml diff --git a/ansible/roles/test/tasks/deinit_config_test.yml b/sonic-mgmt/ansible/roles/test/tasks/deinit_config_test.yml similarity index 100% rename from ansible/roles/test/tasks/deinit_config_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/deinit_config_test.yml diff --git a/ansible/roles/test/tasks/dhcp_relay.yml b/sonic-mgmt/ansible/roles/test/tasks/dhcp_relay.yml similarity index 100% rename from ansible/roles/test/tasks/dhcp_relay.yml rename to sonic-mgmt/ansible/roles/test/tasks/dhcp_relay.yml diff --git a/ansible/roles/test/tasks/dip_sip.yml b/sonic-mgmt/ansible/roles/test/tasks/dip_sip.yml similarity index 100% rename from ansible/roles/test/tasks/dip_sip.yml rename to sonic-mgmt/ansible/roles/test/tasks/dip_sip.yml diff --git a/ansible/roles/test/tasks/dir_bcast.yml b/sonic-mgmt/ansible/roles/test/tasks/dir_bcast.yml similarity index 100% rename from ansible/roles/test/tasks/dir_bcast.yml rename to sonic-mgmt/ansible/roles/test/tasks/dir_bcast.yml diff --git a/ansible/roles/test/tasks/dscp_mapping.yml b/sonic-mgmt/ansible/roles/test/tasks/dscp_mapping.yml similarity index 100% rename from ansible/roles/test/tasks/dscp_mapping.yml rename to sonic-mgmt/ansible/roles/test/tasks/dscp_mapping.yml diff --git a/ansible/roles/test/tasks/ecmp.yml b/sonic-mgmt/ansible/roles/test/tasks/ecmp.yml similarity index 100% rename from ansible/roles/test/tasks/ecmp.yml rename to sonic-mgmt/ansible/roles/test/tasks/ecmp.yml diff --git a/ansible/roles/test/tasks/ecmp/link_down.yml b/sonic-mgmt/ansible/roles/test/tasks/ecmp/link_down.yml similarity index 100% rename from ansible/roles/test/tasks/ecmp/link_down.yml rename to sonic-mgmt/ansible/roles/test/tasks/ecmp/link_down.yml diff --git a/ansible/roles/test/tasks/ecmp/link_up.yml b/sonic-mgmt/ansible/roles/test/tasks/ecmp/link_up.yml similarity index 100% rename from ansible/roles/test/tasks/ecmp/link_up.yml rename to sonic-mgmt/ansible/roles/test/tasks/ecmp/link_up.yml diff --git a/ansible/roles/test/tasks/ecmp/paths_up.yml b/sonic-mgmt/ansible/roles/test/tasks/ecmp/paths_up.yml similarity index 100% rename from ansible/roles/test/tasks/ecmp/paths_up.yml rename to sonic-mgmt/ansible/roles/test/tasks/ecmp/paths_up.yml diff --git a/ansible/roles/test/tasks/ecn_wred.yml b/sonic-mgmt/ansible/roles/test/tasks/ecn_wred.yml similarity index 100% rename from ansible/roles/test/tasks/ecn_wred.yml rename to sonic-mgmt/ansible/roles/test/tasks/ecn_wred.yml diff --git a/ansible/roles/test/tasks/ecn_wred_worker.yml b/sonic-mgmt/ansible/roles/test/tasks/ecn_wred_worker.yml similarity index 100% rename from ansible/roles/test/tasks/ecn_wred_worker.yml rename to sonic-mgmt/ansible/roles/test/tasks/ecn_wred_worker.yml diff --git a/ansible/roles/test/tasks/everflow.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow.yml similarity index 100% rename from ansible/roles/test/tasks/everflow.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow.yml diff --git a/ansible/roles/test/tasks/everflow/config_test/config_delete.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_delete.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_delete.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_delete.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_2.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dscp_invalid_3.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_dst_ip_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dst_ip_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_dst_ip_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_dst_ip_invalid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_2.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_gre_type_invalid_3.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_2.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_queue_invalid_3.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_src_ip_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_src_ip_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_src_ip_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_src_ip_invalid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_test.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_test.yml similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_test.yml diff --git a/ansible/roles/test/tasks/everflow/config_test/config_test_expect_file b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_test_expect_file similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_test_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_test_expect_file diff --git a/ansible/roles/test/tasks/everflow/config_test/config_test_update_expect_file b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_test_update_expect_file similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_test_update_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_test_update_expect_file diff --git a/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_2.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_2.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_2.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_3.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_3.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_3.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_ttl_invalid_3.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_valid_1.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_valid_1.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_valid_1.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_valid_1.json diff --git a/ansible/roles/test/tasks/everflow/config_test/config_valid_2.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_valid_2.json similarity index 100% rename from ansible/roles/test/tasks/everflow/config_test/config_valid_2.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/config_test/config_valid_2.json diff --git a/ansible/roles/test/tasks/everflow/create_session_expect_file b/sonic-mgmt/ansible/roles/test/tasks/everflow/create_session_expect_file similarity index 100% rename from ansible/roles/test/tasks/everflow/create_session_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/everflow/create_session_expect_file diff --git a/ansible/roles/test/tasks/everflow/logic_test/config_valid.json b/sonic-mgmt/ansible/roles/test/tasks/everflow/logic_test/config_valid.json similarity index 100% rename from ansible/roles/test/tasks/everflow/logic_test/config_valid.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow/logic_test/config_valid.json diff --git a/ansible/roles/test/tasks/everflow/logic_test/create_session_expect_file b/sonic-mgmt/ansible/roles/test/tasks/everflow/logic_test/create_session_expect_file similarity index 100% rename from ansible/roles/test/tasks/everflow/logic_test/create_session_expect_file rename to sonic-mgmt/ansible/roles/test/tasks/everflow/logic_test/create_session_expect_file diff --git a/ansible/roles/test/tasks/everflow/logic_test/logic_test.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow/logic_test/logic_test.yml similarity index 100% rename from ansible/roles/test/tasks/everflow/logic_test/logic_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow/logic_test/logic_test.yml diff --git a/ansible/roles/test/tasks/everflow_testbed.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/apply_config.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/apply_config.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/apply_config.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/apply_config.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/apply_config/acl_rule_persistent.json.j2 b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/apply_config/acl_rule_persistent.json.j2 similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/apply_config/acl_rule_persistent.json.j2 rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/apply_config/acl_rule_persistent.json.j2 diff --git a/ansible/roles/test/tasks/everflow_testbed/apply_config/expect_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/apply_config/expect_messages.txt similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/apply_config/expect_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/apply_config/expect_messages.txt diff --git a/ansible/roles/test/tasks/everflow_testbed/del_config.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/del_config.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent-del.json b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent-del.json similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent-del.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent-del.json diff --git a/ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent.json b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent.json similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/acl_rule_persistent.json diff --git a/ansible/roles/test/tasks/everflow_testbed/del_config/acl_table.json b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/acl_table.json similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/del_config/acl_table.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/acl_table.json diff --git a/ansible/roles/test/tasks/everflow_testbed/del_config/expect_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/expect_messages.txt similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/del_config/expect_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/expect_messages.txt diff --git a/ansible/roles/test/tasks/everflow_testbed/del_config/session.json b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/session.json similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/del_config/session.json rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/del_config/session.json diff --git a/ansible/roles/test/tasks/everflow_testbed/everflow_main.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/everflow_main.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/everflow_main.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/everflow_main.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/everflow_ptf.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/everflow_ptf.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/everflow_ptf.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/everflow_ptf.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/get_capabilities_info.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_capabilities_info.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/get_capabilities_info.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_capabilities_info.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/get_general_port_info.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_general_port_info.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/get_general_port_info.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_general_port_info.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/get_neighbor_info.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_neighbor_info.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/get_neighbor_info.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_neighbor_info.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/get_port_info.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_port_info.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/get_port_info.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_port_info.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/get_session_info.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_session_info.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/get_session_info.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/get_session_info.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/run_test.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/run_test.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/run_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/run_test.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/testcase_1.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_1.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/testcase_1.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_1.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/testcase_2.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_2.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/testcase_2.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_2.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/testcase_3.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_3.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/testcase_3.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_3.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/testcase_4.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_4.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/testcase_4.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_4.yml diff --git a/ansible/roles/test/tasks/everflow_testbed/testcase_5.yml b/sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_5.yml similarity index 100% rename from ansible/roles/test/tasks/everflow_testbed/testcase_5.yml rename to sonic-mgmt/ansible/roles/test/tasks/everflow_testbed/testcase_5.yml diff --git a/ansible/roles/test/tasks/fast-reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/fast-reboot.yml similarity index 100% rename from ansible/roles/test/tasks/fast-reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/fast-reboot.yml diff --git a/ansible/roles/test/tasks/fdb.yml b/sonic-mgmt/ansible/roles/test/tasks/fdb.yml similarity index 100% rename from ansible/roles/test/tasks/fdb.yml rename to sonic-mgmt/ansible/roles/test/tasks/fdb.yml diff --git a/ansible/roles/test/tasks/fdb_mac_expire.yml b/sonic-mgmt/ansible/roles/test/tasks/fdb_mac_expire.yml similarity index 100% rename from ansible/roles/test/tasks/fdb_mac_expire.yml rename to sonic-mgmt/ansible/roles/test/tasks/fdb_mac_expire.yml diff --git a/ansible/roles/test/tasks/fib/fib_expect_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/fib/fib_expect_messages.txt similarity index 100% rename from ansible/roles/test/tasks/fib/fib_expect_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/fib/fib_expect_messages.txt diff --git a/ansible/roles/test/tasks/fib/fib_ignore_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/fib/fib_ignore_messages.txt similarity index 100% rename from ansible/roles/test/tasks/fib/fib_ignore_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/fib/fib_ignore_messages.txt diff --git a/ansible/roles/test/tasks/fib/fib_match_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/fib/fib_match_messages.txt similarity index 100% rename from ansible/roles/test/tasks/fib/fib_match_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/fib/fib_match_messages.txt diff --git a/ansible/roles/test/tasks/hash.yml b/sonic-mgmt/ansible/roles/test/tasks/hash.yml similarity index 100% rename from ansible/roles/test/tasks/hash.yml rename to sonic-mgmt/ansible/roles/test/tasks/hash.yml diff --git a/ansible/roles/test/tasks/iface_naming_mode.yml b/sonic-mgmt/ansible/roles/test/tasks/iface_naming_mode.yml similarity index 100% rename from ansible/roles/test/tasks/iface_naming_mode.yml rename to sonic-mgmt/ansible/roles/test/tasks/iface_naming_mode.yml diff --git a/ansible/roles/test/tasks/init_config_test.yml b/sonic-mgmt/ansible/roles/test/tasks/init_config_test.yml similarity index 100% rename from ansible/roles/test/tasks/init_config_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/init_config_test.yml diff --git a/ansible/roles/test/tasks/interface.yml b/sonic-mgmt/ansible/roles/test/tasks/interface.yml similarity index 100% rename from ansible/roles/test/tasks/interface.yml rename to sonic-mgmt/ansible/roles/test/tasks/interface.yml diff --git a/ansible/roles/test/tasks/interface_counters.yml b/sonic-mgmt/ansible/roles/test/tasks/interface_counters.yml similarity index 100% rename from ansible/roles/test/tasks/interface_counters.yml rename to sonic-mgmt/ansible/roles/test/tasks/interface_counters.yml diff --git a/ansible/roles/test/tasks/interface_up_down.yml b/sonic-mgmt/ansible/roles/test/tasks/interface_up_down.yml similarity index 100% rename from ansible/roles/test/tasks/interface_up_down.yml rename to sonic-mgmt/ansible/roles/test/tasks/interface_up_down.yml diff --git a/ansible/roles/test/tasks/lag.yml b/sonic-mgmt/ansible/roles/test/tasks/lag.yml similarity index 100% rename from ansible/roles/test/tasks/lag.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag.yml diff --git a/ansible/roles/test/tasks/lag/lag_expect_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/lag/lag_expect_messages.txt similarity index 100% rename from ansible/roles/test/tasks/lag/lag_expect_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/lag/lag_expect_messages.txt diff --git a/ansible/roles/test/tasks/lag/lag_ignore_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/lag/lag_ignore_messages.txt similarity index 100% rename from ansible/roles/test/tasks/lag/lag_ignore_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/lag/lag_ignore_messages.txt diff --git a/ansible/roles/test/tasks/lag/lag_match_messages.txt b/sonic-mgmt/ansible/roles/test/tasks/lag/lag_match_messages.txt similarity index 100% rename from ansible/roles/test/tasks/lag/lag_match_messages.txt rename to sonic-mgmt/ansible/roles/test/tasks/lag/lag_match_messages.txt diff --git a/ansible/roles/test/tasks/lag_2.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_2.yml similarity index 100% rename from ansible/roles/test/tasks/lag_2.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_2.yml diff --git a/ansible/roles/test/tasks/lag_dut_lacp_test.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_dut_lacp_test.yml similarity index 100% rename from ansible/roles/test/tasks/lag_dut_lacp_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_dut_lacp_test.yml diff --git a/ansible/roles/test/tasks/lag_fanout_ports_test.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_fanout_ports_test.yml similarity index 100% rename from ansible/roles/test/tasks/lag_fanout_ports_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_fanout_ports_test.yml diff --git a/ansible/roles/test/tasks/lag_lacp_timing_test.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_lacp_timing_test.yml similarity index 100% rename from ansible/roles/test/tasks/lag_lacp_timing_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_lacp_timing_test.yml diff --git a/ansible/roles/test/tasks/lag_minlink.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_minlink.yml similarity index 100% rename from ansible/roles/test/tasks/lag_minlink.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_minlink.yml diff --git a/ansible/roles/test/tasks/lag_run_ptf.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_run_ptf.yml similarity index 100% rename from ansible/roles/test/tasks/lag_run_ptf.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_run_ptf.yml diff --git a/ansible/roles/test/tasks/lag_vm_lacp_test.yml b/sonic-mgmt/ansible/roles/test/tasks/lag_vm_lacp_test.yml similarity index 100% rename from ansible/roles/test/tasks/lag_vm_lacp_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/lag_vm_lacp_test.yml diff --git a/ansible/roles/test/tasks/lagall.yml b/sonic-mgmt/ansible/roles/test/tasks/lagall.yml similarity index 100% rename from ansible/roles/test/tasks/lagall.yml rename to sonic-mgmt/ansible/roles/test/tasks/lagall.yml diff --git a/ansible/roles/test/tasks/link_entry_flap.yml b/sonic-mgmt/ansible/roles/test/tasks/link_entry_flap.yml similarity index 100% rename from ansible/roles/test/tasks/link_entry_flap.yml rename to sonic-mgmt/ansible/roles/test/tasks/link_entry_flap.yml diff --git a/ansible/roles/test/tasks/link_flap.yml b/sonic-mgmt/ansible/roles/test/tasks/link_flap.yml similarity index 100% rename from ansible/roles/test/tasks/link_flap.yml rename to sonic-mgmt/ansible/roles/test/tasks/link_flap.yml diff --git a/ansible/roles/test/tasks/link_flap/link_flap_helper.yml b/sonic-mgmt/ansible/roles/test/tasks/link_flap/link_flap_helper.yml similarity index 95% rename from ansible/roles/test/tasks/link_flap/link_flap_helper.yml rename to sonic-mgmt/ansible/roles/test/tasks/link_flap/link_flap_helper.yml index 0cbaab99b49..8d634cbf585 100644 --- a/ansible/roles/test/tasks/link_flap/link_flap_helper.yml +++ b/sonic-mgmt/ansible/roles/test/tasks/link_flap/link_flap_helper.yml @@ -24,10 +24,10 @@ delegate_to: localhost - set_fact: - peer_host: "{{device_info['mgmtip']}}" - peer_hwsku: "{{device_info['HwSku']}}" - peer_type: "{{device_info['Type']}}" - + peer_host: "{{device_info[peer_device]['mgmtip']}}" + peer_hwsku: "{{device_info[peer_device]['HwSku']}}" + peer_type: "{{device_info[peer_device]['Type']}}" + - set_fact: intfs_to_exclude: "{{interface}}" diff --git a/ansible/roles/test/tasks/lldp.yml b/sonic-mgmt/ansible/roles/test/tasks/lldp.yml similarity index 100% rename from ansible/roles/test/tasks/lldp.yml rename to sonic-mgmt/ansible/roles/test/tasks/lldp.yml diff --git a/ansible/roles/test/tasks/mac_entry_update.yml b/sonic-mgmt/ansible/roles/test/tasks/mac_entry_update.yml similarity index 100% rename from ansible/roles/test/tasks/mac_entry_update.yml rename to sonic-mgmt/ansible/roles/test/tasks/mac_entry_update.yml diff --git a/ansible/roles/test/tasks/mac_update.yml b/sonic-mgmt/ansible/roles/test/tasks/mac_update.yml similarity index 100% rename from ansible/roles/test/tasks/mac_update.yml rename to sonic-mgmt/ansible/roles/test/tasks/mac_update.yml diff --git a/ansible/roles/test/tasks/main.yml b/sonic-mgmt/ansible/roles/test/tasks/main.yml similarity index 100% rename from ansible/roles/test/tasks/main.yml rename to sonic-mgmt/ansible/roles/test/tasks/main.yml diff --git a/ansible/roles/test/tasks/mtu.yml b/sonic-mgmt/ansible/roles/test/tasks/mtu.yml similarity index 100% rename from ansible/roles/test/tasks/mtu.yml rename to sonic-mgmt/ansible/roles/test/tasks/mtu.yml diff --git a/ansible/roles/test/tasks/neighbour-mac-noptf.yml b/sonic-mgmt/ansible/roles/test/tasks/neighbour-mac-noptf.yml similarity index 100% rename from ansible/roles/test/tasks/neighbour-mac-noptf.yml rename to sonic-mgmt/ansible/roles/test/tasks/neighbour-mac-noptf.yml diff --git a/ansible/roles/test/tasks/neighbour-mac.yml b/sonic-mgmt/ansible/roles/test/tasks/neighbour-mac.yml similarity index 100% rename from ansible/roles/test/tasks/neighbour-mac.yml rename to sonic-mgmt/ansible/roles/test/tasks/neighbour-mac.yml diff --git a/ansible/roles/test/tasks/ntp.yml b/sonic-mgmt/ansible/roles/test/tasks/ntp.yml similarity index 100% rename from ansible/roles/test/tasks/ntp.yml rename to sonic-mgmt/ansible/roles/test/tasks/ntp.yml diff --git a/ansible/roles/test/tasks/per_lag_member_test.yml b/sonic-mgmt/ansible/roles/test/tasks/per_lag_member_test.yml similarity index 100% rename from ansible/roles/test/tasks/per_lag_member_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/per_lag_member_test.yml diff --git a/ansible/roles/test/tasks/per_lag_test.yml b/sonic-mgmt/ansible/roles/test/tasks/per_lag_test.yml similarity index 100% rename from ansible/roles/test/tasks/per_lag_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/per_lag_test.yml diff --git a/ansible/roles/test/tasks/pfc_asym.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_asym.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_asym.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_asym.yml diff --git a/ansible/roles/test/tasks/pfc_wd.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd.yml diff --git a/ansible/roles/test/tasks/pfc_wd/choose_test_port.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/choose_test_port.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/choose_test_port.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/choose_test_port.yml diff --git a/ansible/roles/test/tasks/pfc_wd/config_test/config_test.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/config_test/config_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test.yml diff --git a/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_action b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_action similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_action rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_action diff --git a/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_detect_time b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_detect_time similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_detect_time rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_detect_time diff --git a/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_restore_time b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_restore_time similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_restore_time rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_expect_invalid_restore_time diff --git a/ansible/roles/test/tasks/pfc_wd/config_test/config_test_ignore_messages b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_ignore_messages similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/config_test/config_test_ignore_messages rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/config_test/config_test_ignore_messages diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/check_timer_accuracy_test.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/check_timer_accuracy_test.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/check_timer_accuracy_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/check_timer_accuracy_test.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/deploy_pfc_pktgen.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/deploy_pfc_pktgen.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/deploy_pfc_pktgen.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/deploy_pfc_pktgen.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_detect b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_detect similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_detect rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_detect diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_restore b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_restore similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_restore rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/expect_pfc_wd_restore diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/functional_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore_perq.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore_perq.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore_perq.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_restore_perq.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm_perq.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm_perq.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm_perq.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_storm_perq.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_warm_reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_warm_reboot.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_warm_reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/functional_test_warm_reboot.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/ignore_pfc_wd_messages b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/ignore_pfc_wd_messages similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/ignore_pfc_wd_messages rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/ignore_pfc_wd_messages diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/set_pfc_storm_templates.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/set_pfc_storm_templates.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/set_pfc_storm_templates.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/set_pfc_storm_templates.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_action.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_action.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_action.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_action.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_test.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_test.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_all_test.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor_perq.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor_perq.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor_perq.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/storm_from_neighbor_perq.yml diff --git a/ansible/roles/test/tasks/pfc_wd/functional_test/timer_test.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/timer_test.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/functional_test/timer_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/functional_test/timer_test.yml diff --git a/ansible/roles/test/tasks/pfc_wd/iterate_interfaces.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/iterate_interfaces.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/iterate_interfaces.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/iterate_interfaces.yml diff --git a/ansible/roles/test/tasks/pfc_wd/iterate_portchannels.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/iterate_portchannels.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/iterate_portchannels.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/iterate_portchannels.yml diff --git a/ansible/roles/test/tasks/pfc_wd/iterate_vlans.yml b/sonic-mgmt/ansible/roles/test/tasks/pfc_wd/iterate_vlans.yml similarity index 100% rename from ansible/roles/test/tasks/pfc_wd/iterate_vlans.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfc_wd/iterate_vlans.yml diff --git a/ansible/roles/test/tasks/pfcwd/config_shape_rate.yml b/sonic-mgmt/ansible/roles/test/tasks/pfcwd/config_shape_rate.yml similarity index 100% rename from ansible/roles/test/tasks/pfcwd/config_shape_rate.yml rename to sonic-mgmt/ansible/roles/test/tasks/pfcwd/config_shape_rate.yml diff --git a/ansible/roles/test/tasks/port_toggle.yml b/sonic-mgmt/ansible/roles/test/tasks/port_toggle.yml similarity index 100% rename from ansible/roles/test/tasks/port_toggle.yml rename to sonic-mgmt/ansible/roles/test/tasks/port_toggle.yml diff --git a/ansible/roles/test/tasks/portstat.yml b/sonic-mgmt/ansible/roles/test/tasks/portstat.yml similarity index 100% rename from ansible/roles/test/tasks/portstat.yml rename to sonic-mgmt/ansible/roles/test/tasks/portstat.yml diff --git a/ansible/roles/test/tasks/process_checker.yml b/sonic-mgmt/ansible/roles/test/tasks/process_checker.yml similarity index 100% rename from ansible/roles/test/tasks/process_checker.yml rename to sonic-mgmt/ansible/roles/test/tasks/process_checker.yml diff --git a/ansible/roles/test/tasks/ptf_runner.yml b/sonic-mgmt/ansible/roles/test/tasks/ptf_runner.yml similarity index 100% rename from ansible/roles/test/tasks/ptf_runner.yml rename to sonic-mgmt/ansible/roles/test/tasks/ptf_runner.yml diff --git a/ansible/roles/test/tasks/ptf_runner_reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/ptf_runner_reboot.yml similarity index 100% rename from ansible/roles/test/tasks/ptf_runner_reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/ptf_runner_reboot.yml diff --git a/ansible/roles/test/tasks/pytest_runner.yml b/sonic-mgmt/ansible/roles/test/tasks/pytest_runner.yml similarity index 100% rename from ansible/roles/test/tasks/pytest_runner.yml rename to sonic-mgmt/ansible/roles/test/tasks/pytest_runner.yml diff --git a/ansible/roles/test/tasks/qos/get_red_min.lua b/sonic-mgmt/ansible/roles/test/tasks/qos/get_red_min.lua similarity index 100% rename from ansible/roles/test/tasks/qos/get_red_min.lua rename to sonic-mgmt/ansible/roles/test/tasks/qos/get_red_min.lua diff --git a/ansible/roles/test/tasks/qos_get_max_buff_size.yml b/sonic-mgmt/ansible/roles/test/tasks/qos_get_max_buff_size.yml similarity index 100% rename from ansible/roles/test/tasks/qos_get_max_buff_size.yml rename to sonic-mgmt/ansible/roles/test/tasks/qos_get_max_buff_size.yml diff --git a/ansible/roles/test/tasks/qos_get_ports.yml b/sonic-mgmt/ansible/roles/test/tasks/qos_get_ports.yml similarity index 100% rename from ansible/roles/test/tasks/qos_get_ports.yml rename to sonic-mgmt/ansible/roles/test/tasks/qos_get_ports.yml diff --git a/ansible/roles/test/tasks/qos_sai.yml b/sonic-mgmt/ansible/roles/test/tasks/qos_sai.yml similarity index 100% rename from ansible/roles/test/tasks/qos_sai.yml rename to sonic-mgmt/ansible/roles/test/tasks/qos_sai.yml diff --git a/ansible/roles/test/tasks/qos_sai_ptf.yml b/sonic-mgmt/ansible/roles/test/tasks/qos_sai_ptf.yml similarity index 100% rename from ansible/roles/test/tasks/qos_sai_ptf.yml rename to sonic-mgmt/ansible/roles/test/tasks/qos_sai_ptf.yml diff --git a/ansible/roles/test/tasks/read_mac_metadata.yml b/sonic-mgmt/ansible/roles/test/tasks/read_mac_metadata.yml similarity index 100% rename from ansible/roles/test/tasks/read_mac_metadata.yml rename to sonic-mgmt/ansible/roles/test/tasks/read_mac_metadata.yml diff --git a/ansible/roles/test/tasks/reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/reboot.yml similarity index 100% rename from ansible/roles/test/tasks/reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/reboot.yml diff --git a/ansible/roles/test/tasks/repeat_harness.yml b/sonic-mgmt/ansible/roles/test/tasks/repeat_harness.yml similarity index 100% rename from ansible/roles/test/tasks/repeat_harness.yml rename to sonic-mgmt/ansible/roles/test/tasks/repeat_harness.yml diff --git a/ansible/roles/test/tasks/repeat_tasks.yml b/sonic-mgmt/ansible/roles/test/tasks/repeat_tasks.yml similarity index 100% rename from ansible/roles/test/tasks/repeat_tasks.yml rename to sonic-mgmt/ansible/roles/test/tasks/repeat_tasks.yml diff --git a/ansible/roles/test/tasks/restart_swss.yml b/sonic-mgmt/ansible/roles/test/tasks/restart_swss.yml similarity index 100% rename from ansible/roles/test/tasks/restart_swss.yml rename to sonic-mgmt/ansible/roles/test/tasks/restart_swss.yml diff --git a/ansible/roles/test/tasks/restart_syncd.yml b/sonic-mgmt/ansible/roles/test/tasks/restart_syncd.yml similarity index 100% rename from ansible/roles/test/tasks/restart_syncd.yml rename to sonic-mgmt/ansible/roles/test/tasks/restart_syncd.yml diff --git a/ansible/roles/test/tasks/resume_fanout_ports.yml b/sonic-mgmt/ansible/roles/test/tasks/resume_fanout_ports.yml similarity index 100% rename from ansible/roles/test/tasks/resume_fanout_ports.yml rename to sonic-mgmt/ansible/roles/test/tasks/resume_fanout_ports.yml diff --git a/ansible/roles/test/tasks/run_analyze_and_check.yml b/sonic-mgmt/ansible/roles/test/tasks/run_analyze_and_check.yml similarity index 100% rename from ansible/roles/test/tasks/run_analyze_and_check.yml rename to sonic-mgmt/ansible/roles/test/tasks/run_analyze_and_check.yml diff --git a/ansible/roles/test/tasks/run_cisco_script.yml b/sonic-mgmt/ansible/roles/test/tasks/run_cisco_script.yml similarity index 100% rename from ansible/roles/test/tasks/run_cisco_script.yml rename to sonic-mgmt/ansible/roles/test/tasks/run_cisco_script.yml diff --git a/ansible/roles/test/tasks/run_command_with_log_analyzer.yml b/sonic-mgmt/ansible/roles/test/tasks/run_command_with_log_analyzer.yml similarity index 100% rename from ansible/roles/test/tasks/run_command_with_log_analyzer.yml rename to sonic-mgmt/ansible/roles/test/tasks/run_command_with_log_analyzer.yml diff --git a/ansible/roles/test/tasks/run_config_cleanup.yml b/sonic-mgmt/ansible/roles/test/tasks/run_config_cleanup.yml similarity index 100% rename from ansible/roles/test/tasks/run_config_cleanup.yml rename to sonic-mgmt/ansible/roles/test/tasks/run_config_cleanup.yml diff --git a/ansible/roles/test/tasks/run_config_test.yml b/sonic-mgmt/ansible/roles/test/tasks/run_config_test.yml similarity index 100% rename from ansible/roles/test/tasks/run_config_test.yml rename to sonic-mgmt/ansible/roles/test/tasks/run_config_test.yml diff --git a/ansible/roles/test/tasks/run_loganalyzer.yml b/sonic-mgmt/ansible/roles/test/tasks/run_loganalyzer.yml similarity index 100% rename from ansible/roles/test/tasks/run_loganalyzer.yml rename to sonic-mgmt/ansible/roles/test/tasks/run_loganalyzer.yml diff --git a/ansible/roles/test/tasks/saiserver.yml b/sonic-mgmt/ansible/roles/test/tasks/saiserver.yml similarity index 100% rename from ansible/roles/test/tasks/saiserver.yml rename to sonic-mgmt/ansible/roles/test/tasks/saiserver.yml diff --git a/ansible/roles/test/tasks/sensors_check.yml b/sonic-mgmt/ansible/roles/test/tasks/sensors_check.yml similarity index 100% rename from ansible/roles/test/tasks/sensors_check.yml rename to sonic-mgmt/ansible/roles/test/tasks/sensors_check.yml diff --git a/ansible/roles/test/tasks/service_acl.yml b/sonic-mgmt/ansible/roles/test/tasks/service_acl.yml similarity index 100% rename from ansible/roles/test/tasks/service_acl.yml rename to sonic-mgmt/ansible/roles/test/tasks/service_acl.yml diff --git a/ansible/roles/test/tasks/shared-fib.yml b/sonic-mgmt/ansible/roles/test/tasks/shared-fib.yml similarity index 100% rename from ansible/roles/test/tasks/shared-fib.yml rename to sonic-mgmt/ansible/roles/test/tasks/shared-fib.yml diff --git a/ansible/roles/test/tasks/simple-fib.yml b/sonic-mgmt/ansible/roles/test/tasks/simple-fib.yml similarity index 100% rename from ansible/roles/test/tasks/simple-fib.yml rename to sonic-mgmt/ansible/roles/test/tasks/simple-fib.yml diff --git a/ansible/roles/test/tasks/snmp.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp.yml similarity index 100% rename from ansible/roles/test/tasks/snmp.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp.yml diff --git a/ansible/roles/test/tasks/snmp/cpu.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/cpu.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/cpu.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/cpu.yml diff --git a/ansible/roles/test/tasks/snmp/interfaces.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/interfaces.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/interfaces.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/interfaces.yml diff --git a/ansible/roles/test/tasks/snmp/lldp.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/lldp.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/lldp.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/lldp.yml diff --git a/ansible/roles/test/tasks/snmp/memory.py b/sonic-mgmt/ansible/roles/test/tasks/snmp/memory.py similarity index 100% rename from ansible/roles/test/tasks/snmp/memory.py rename to sonic-mgmt/ansible/roles/test/tasks/snmp/memory.py diff --git a/ansible/roles/test/tasks/snmp/memory.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/memory.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/memory.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/memory.yml diff --git a/ansible/roles/test/tasks/snmp/pfc_counters.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/pfc_counters.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/pfc_counters.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/pfc_counters.yml diff --git a/ansible/roles/test/tasks/snmp/phys_table.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/phys_table.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/phys_table.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/phys_table.yml diff --git a/ansible/roles/test/tasks/snmp/psu.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/psu.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/psu.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/psu.yml diff --git a/ansible/roles/test/tasks/snmp/queues.yml b/sonic-mgmt/ansible/roles/test/tasks/snmp/queues.yml similarity index 100% rename from ansible/roles/test/tasks/snmp/queues.yml rename to sonic-mgmt/ansible/roles/test/tasks/snmp/queues.yml diff --git a/ansible/roles/test/tasks/sonic.yml b/sonic-mgmt/ansible/roles/test/tasks/sonic.yml similarity index 100% rename from ansible/roles/test/tasks/sonic.yml rename to sonic-mgmt/ansible/roles/test/tasks/sonic.yml diff --git a/ansible/roles/test/tasks/syslog.yml b/sonic-mgmt/ansible/roles/test/tasks/syslog.yml similarity index 100% rename from ansible/roles/test/tasks/syslog.yml rename to sonic-mgmt/ansible/roles/test/tasks/syslog.yml diff --git a/ansible/roles/test/tasks/test_sonic_by_tag.yml b/sonic-mgmt/ansible/roles/test/tasks/test_sonic_by_tag.yml similarity index 100% rename from ansible/roles/test/tasks/test_sonic_by_tag.yml rename to sonic-mgmt/ansible/roles/test/tasks/test_sonic_by_tag.yml diff --git a/ansible/roles/test/tasks/test_sonic_by_testname.yml b/sonic-mgmt/ansible/roles/test/tasks/test_sonic_by_testname.yml similarity index 100% rename from ansible/roles/test/tasks/test_sonic_by_testname.yml rename to sonic-mgmt/ansible/roles/test/tasks/test_sonic_by_testname.yml diff --git a/ansible/roles/test/tasks/vlantb.yml b/sonic-mgmt/ansible/roles/test/tasks/vlantb.yml similarity index 100% rename from ansible/roles/test/tasks/vlantb.yml rename to sonic-mgmt/ansible/roles/test/tasks/vlantb.yml diff --git a/ansible/roles/test/tasks/vnet_vxlan.yml b/sonic-mgmt/ansible/roles/test/tasks/vnet_vxlan.yml similarity index 100% rename from ansible/roles/test/tasks/vnet_vxlan.yml rename to sonic-mgmt/ansible/roles/test/tasks/vnet_vxlan.yml diff --git a/ansible/roles/test/tasks/vxlan-decap.yml b/sonic-mgmt/ansible/roles/test/tasks/vxlan-decap.yml similarity index 100% rename from ansible/roles/test/tasks/vxlan-decap.yml rename to sonic-mgmt/ansible/roles/test/tasks/vxlan-decap.yml diff --git a/ansible/roles/test/tasks/warm-reboot-fib.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-fib.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-fib.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-fib.yml diff --git a/ansible/roles/test/tasks/warm-reboot-multi-sad-inboot.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-multi-sad-inboot.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-multi-sad-inboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-multi-sad-inboot.yml diff --git a/ansible/roles/test/tasks/warm-reboot-multi-sad.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-multi-sad.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-multi-sad.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-multi-sad.yml diff --git a/ansible/roles/test/tasks/warm-reboot-sad-bgp.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-bgp.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-sad-bgp.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-bgp.yml diff --git a/ansible/roles/test/tasks/warm-reboot-sad-lag-member.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-lag-member.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-sad-lag-member.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-lag-member.yml diff --git a/ansible/roles/test/tasks/warm-reboot-sad-lag.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-lag.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-sad-lag.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-lag.yml diff --git a/ansible/roles/test/tasks/warm-reboot-sad-vlan-port.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-vlan-port.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-sad-vlan-port.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad-vlan-port.yml diff --git a/ansible/roles/test/tasks/warm-reboot-sad.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-sad.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-sad.yml diff --git a/ansible/roles/test/tasks/warm-reboot-vnet.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot-vnet.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot-vnet.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot-vnet.yml diff --git a/ansible/roles/test/tasks/warm-reboot.yml b/sonic-mgmt/ansible/roles/test/tasks/warm-reboot.yml similarity index 100% rename from ansible/roles/test/tasks/warm-reboot.yml rename to sonic-mgmt/ansible/roles/test/tasks/warm-reboot.yml diff --git a/ansible/roles/test/tasks/wr_arp.yml b/sonic-mgmt/ansible/roles/test/tasks/wr_arp.yml similarity index 100% rename from ansible/roles/test/tasks/wr_arp.yml rename to sonic-mgmt/ansible/roles/test/tasks/wr_arp.yml diff --git a/ansible/roles/test/templates/acl_ranges_rules.j2 b/sonic-mgmt/ansible/roles/test/templates/acl_ranges_rules.j2 similarity index 100% rename from ansible/roles/test/templates/acl_ranges_rules.j2 rename to sonic-mgmt/ansible/roles/test/templates/acl_ranges_rules.j2 diff --git a/ansible/roles/test/templates/acl_ranges_table.j2 b/sonic-mgmt/ansible/roles/test/templates/acl_ranges_table.j2 similarity index 100% rename from ansible/roles/test/templates/acl_ranges_table.j2 rename to sonic-mgmt/ansible/roles/test/templates/acl_ranges_table.j2 diff --git a/ansible/roles/test/templates/acltb_table.j2 b/sonic-mgmt/ansible/roles/test/templates/acltb_table.j2 similarity index 100% rename from ansible/roles/test/templates/acltb_table.j2 rename to sonic-mgmt/ansible/roles/test/templates/acltb_table.j2 diff --git a/ansible/roles/test/templates/acltb_test_rules.j2 b/sonic-mgmt/ansible/roles/test/templates/acltb_test_rules.j2 similarity index 100% rename from ansible/roles/test/templates/acltb_test_rules.j2 rename to sonic-mgmt/ansible/roles/test/templates/acltb_test_rules.j2 diff --git a/ansible/roles/test/templates/acltb_test_rules_part_1.j2 b/sonic-mgmt/ansible/roles/test/templates/acltb_test_rules_part_1.j2 similarity index 100% rename from ansible/roles/test/templates/acltb_test_rules_part_1.j2 rename to sonic-mgmt/ansible/roles/test/templates/acltb_test_rules_part_1.j2 diff --git a/ansible/roles/test/templates/acltb_test_rules_part_2.j2 b/sonic-mgmt/ansible/roles/test/templates/acltb_test_rules_part_2.j2 similarity index 100% rename from ansible/roles/test/templates/acltb_test_rules_part_2.j2 rename to sonic-mgmt/ansible/roles/test/templates/acltb_test_rules_part_2.j2 diff --git a/ansible/roles/test/templates/arp_responder.conf.j2 b/sonic-mgmt/ansible/roles/test/templates/arp_responder.conf.j2 similarity index 100% rename from ansible/roles/test/templates/arp_responder.conf.j2 rename to sonic-mgmt/ansible/roles/test/templates/arp_responder.conf.j2 diff --git a/ansible/roles/test/templates/bgp_bounce_vm.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_bounce_vm.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_bounce_vm.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_bounce_vm.j2 diff --git a/ansible/roles/test/templates/bgp_conf_gen.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_conf_gen.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_conf_gen.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_conf_gen.j2 diff --git a/ansible/roles/test/templates/bgp_neighbor_noshut.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_neighbor_noshut.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_neighbor_noshut.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_neighbor_noshut.j2 diff --git a/ansible/roles/test/templates/bgp_neighbor_shut.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_neighbor_shut.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_neighbor_shut.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_neighbor_shut.j2 diff --git a/ansible/roles/test/templates/bgp_no_export.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_no_export.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_no_export.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_no_export.j2 diff --git a/ansible/roles/test/templates/bgp_plain.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_plain.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_plain.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_plain.j2 diff --git a/ansible/roles/test/templates/bgp_speaker_route.j2 b/sonic-mgmt/ansible/roles/test/templates/bgp_speaker_route.j2 similarity index 100% rename from ansible/roles/test/templates/bgp_speaker_route.j2 rename to sonic-mgmt/ansible/roles/test/templates/bgp_speaker_route.j2 diff --git a/ansible/roles/test/templates/config_interface_shape_rate.j2 b/sonic-mgmt/ansible/roles/test/templates/config_interface_shape_rate.j2 similarity index 100% rename from ansible/roles/test/templates/config_interface_shape_rate.j2 rename to sonic-mgmt/ansible/roles/test/templates/config_interface_shape_rate.j2 diff --git a/ansible/roles/test/templates/decap_conf.j2 b/sonic-mgmt/ansible/roles/test/templates/decap_conf.j2 similarity index 100% rename from ansible/roles/test/templates/decap_conf.j2 rename to sonic-mgmt/ansible/roles/test/templates/decap_conf.j2 diff --git a/ansible/roles/test/templates/etc/systemd/system/orchagent.j2 b/sonic-mgmt/ansible/roles/test/templates/etc/systemd/system/orchagent.j2 similarity index 100% rename from ansible/roles/test/templates/etc/systemd/system/orchagent.j2 rename to sonic-mgmt/ansible/roles/test/templates/etc/systemd/system/orchagent.j2 diff --git a/ansible/roles/test/templates/etc/systemd/system/saiserver.j2 b/sonic-mgmt/ansible/roles/test/templates/etc/systemd/system/saiserver.j2 similarity index 100% rename from ansible/roles/test/templates/etc/systemd/system/saiserver.j2 rename to sonic-mgmt/ansible/roles/test/templates/etc/systemd/system/saiserver.j2 diff --git a/ansible/roles/test/templates/etc/systemd/system/syncd.j2 b/sonic-mgmt/ansible/roles/test/templates/etc/systemd/system/syncd.j2 similarity index 100% rename from ansible/roles/test/templates/etc/systemd/system/syncd.j2 rename to sonic-mgmt/ansible/roles/test/templates/etc/systemd/system/syncd.j2 diff --git a/ansible/roles/test/templates/exabgp/config.j2 b/sonic-mgmt/ansible/roles/test/templates/exabgp/config.j2 similarity index 100% rename from ansible/roles/test/templates/exabgp/config.j2 rename to sonic-mgmt/ansible/roles/test/templates/exabgp/config.j2 diff --git a/ansible/roles/test/templates/exabgp/routes.j2 b/sonic-mgmt/ansible/roles/test/templates/exabgp/routes.j2 similarity index 100% rename from ansible/roles/test/templates/exabgp/routes.j2 rename to sonic-mgmt/ansible/roles/test/templates/exabgp/routes.j2 diff --git a/ansible/roles/test/templates/exabgp/start.j2 b/sonic-mgmt/ansible/roles/test/templates/exabgp/start.j2 similarity index 100% rename from ansible/roles/test/templates/exabgp/start.j2 rename to sonic-mgmt/ansible/roles/test/templates/exabgp/start.j2 diff --git a/ansible/roles/test/templates/fdb.j2 b/sonic-mgmt/ansible/roles/test/templates/fdb.j2 similarity index 100% rename from ansible/roles/test/templates/fdb.j2 rename to sonic-mgmt/ansible/roles/test/templates/fdb.j2 diff --git a/ansible/roles/test/templates/ferret.conf.j2 b/sonic-mgmt/ansible/roles/test/templates/ferret.conf.j2 similarity index 100% rename from ansible/roles/test/templates/ferret.conf.j2 rename to sonic-mgmt/ansible/roles/test/templates/ferret.conf.j2 diff --git a/ansible/roles/test/templates/fib.j2 b/sonic-mgmt/ansible/roles/test/templates/fib.j2 similarity index 100% rename from ansible/roles/test/templates/fib.j2 rename to sonic-mgmt/ansible/roles/test/templates/fib.j2 diff --git a/ansible/roles/test/templates/lag.j2 b/sonic-mgmt/ansible/roles/test/templates/lag.j2 similarity index 100% rename from ansible/roles/test/templates/lag.j2 rename to sonic-mgmt/ansible/roles/test/templates/lag.j2 diff --git a/ansible/roles/test/templates/neighbor_interface_no_shut.j2 b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_no_shut.j2 similarity index 97% rename from ansible/roles/test/templates/neighbor_interface_no_shut.j2 rename to sonic-mgmt/ansible/roles/test/templates/neighbor_interface_no_shut.j2 index 4ddee203bef..de58e75a569 100644 --- a/ansible/roles/test/templates/neighbor_interface_no_shut.j2 +++ b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_no_shut.j2 @@ -6,4 +6,3 @@ configure exit {% endfor %} exit -exit diff --git a/ansible/roles/test/templates/neighbor_interface_no_shut_single.j2 b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_no_shut_single.j2 similarity index 94% rename from ansible/roles/test/templates/neighbor_interface_no_shut_single.j2 rename to sonic-mgmt/ansible/roles/test/templates/neighbor_interface_no_shut_single.j2 index 81e41fab68a..1a0716e26db 100644 --- a/ansible/roles/test/templates/neighbor_interface_no_shut_single.j2 +++ b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_no_shut_single.j2 @@ -3,4 +3,3 @@ configure t no shutdown exit exit -exit diff --git a/ansible/roles/test/templates/neighbor_interface_shut.j2 b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_shut.j2 similarity index 97% rename from ansible/roles/test/templates/neighbor_interface_shut.j2 rename to sonic-mgmt/ansible/roles/test/templates/neighbor_interface_shut.j2 index 2ee81c57296..ab822f2bb23 100644 --- a/ansible/roles/test/templates/neighbor_interface_shut.j2 +++ b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_shut.j2 @@ -6,4 +6,3 @@ configure exit {% endfor %} exit -exit diff --git a/ansible/roles/test/templates/neighbor_interface_shut_single.j2 b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_shut_single.j2 similarity index 93% rename from ansible/roles/test/templates/neighbor_interface_shut_single.j2 rename to sonic-mgmt/ansible/roles/test/templates/neighbor_interface_shut_single.j2 index 35f5f08f1ef..fae39222dce 100644 --- a/ansible/roles/test/templates/neighbor_interface_shut_single.j2 +++ b/sonic-mgmt/ansible/roles/test/templates/neighbor_interface_shut_single.j2 @@ -3,4 +3,3 @@ configure t shutdown exit exit -exit diff --git a/ansible/roles/test/templates/neighbor_lag_rate_fast.j2 b/sonic-mgmt/ansible/roles/test/templates/neighbor_lag_rate_fast.j2 similarity index 100% rename from ansible/roles/test/templates/neighbor_lag_rate_fast.j2 rename to sonic-mgmt/ansible/roles/test/templates/neighbor_lag_rate_fast.j2 diff --git a/ansible/roles/test/templates/neighbor_lag_rate_slow.j2 b/sonic-mgmt/ansible/roles/test/templates/neighbor_lag_rate_slow.j2 similarity index 100% rename from ansible/roles/test/templates/neighbor_lag_rate_slow.j2 rename to sonic-mgmt/ansible/roles/test/templates/neighbor_lag_rate_slow.j2 diff --git a/ansible/roles/test/templates/pfc_storm_arista.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_storm_arista.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_storm_arista.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_storm_arista.j2 diff --git a/ansible/roles/test/templates/pfc_storm_icos.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_storm_icos.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_storm_icos.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_storm_icos.j2 diff --git a/ansible/roles/test/templates/pfc_storm_mlnx.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_storm_mlnx.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_storm_mlnx.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_storm_mlnx.j2 diff --git a/ansible/roles/test/templates/pfc_storm_stop_arista.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_storm_stop_arista.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_storm_stop_arista.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_storm_stop_arista.j2 diff --git a/ansible/roles/test/templates/pfc_storm_stop_icos.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_storm_stop_icos.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_storm_stop_icos.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_storm_stop_icos.j2 diff --git a/ansible/roles/test/templates/pfc_storm_stop_mlnx.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_storm_stop_mlnx.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_storm_stop_mlnx.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_storm_stop_mlnx.j2 diff --git a/ansible/roles/test/templates/pfc_wd_config.j2 b/sonic-mgmt/ansible/roles/test/templates/pfc_wd_config.j2 similarity index 100% rename from ansible/roles/test/templates/pfc_wd_config.j2 rename to sonic-mgmt/ansible/roles/test/templates/pfc_wd_config.j2 diff --git a/ansible/roles/test/templates/ptf_nn_agent.conf.dut.j2 b/sonic-mgmt/ansible/roles/test/templates/ptf_nn_agent.conf.dut.j2 similarity index 100% rename from ansible/roles/test/templates/ptf_nn_agent.conf.dut.j2 rename to sonic-mgmt/ansible/roles/test/templates/ptf_nn_agent.conf.dut.j2 diff --git a/ansible/roles/test/templates/ptf_nn_agent.conf.ptf.j2 b/sonic-mgmt/ansible/roles/test/templates/ptf_nn_agent.conf.ptf.j2 similarity index 100% rename from ansible/roles/test/templates/ptf_nn_agent.conf.ptf.j2 rename to sonic-mgmt/ansible/roles/test/templates/ptf_nn_agent.conf.ptf.j2 diff --git a/ansible/roles/test/templates/qos_lossy_profile.j2 b/sonic-mgmt/ansible/roles/test/templates/qos_lossy_profile.j2 similarity index 100% rename from ansible/roles/test/templates/qos_lossy_profile.j2 rename to sonic-mgmt/ansible/roles/test/templates/qos_lossy_profile.j2 diff --git a/ansible/roles/test/templates/qos_pfc_profile.j2 b/sonic-mgmt/ansible/roles/test/templates/qos_pfc_profile.j2 similarity index 100% rename from ansible/roles/test/templates/qos_pfc_profile.j2 rename to sonic-mgmt/ansible/roles/test/templates/qos_pfc_profile.j2 diff --git a/ansible/roles/test/templates/vnet.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet.j2 similarity index 100% rename from ansible/roles/test/templates/vnet.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet.j2 diff --git a/ansible/roles/test/templates/vnet_config.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet_config.j2 similarity index 100% rename from ansible/roles/test/templates/vnet_config.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet_config.j2 diff --git a/ansible/roles/test/templates/vnet_interface.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet_interface.j2 similarity index 100% rename from ansible/roles/test/templates/vnet_interface.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet_interface.j2 diff --git a/ansible/roles/test/templates/vnet_nbr.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet_nbr.j2 similarity index 100% rename from ansible/roles/test/templates/vnet_nbr.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet_nbr.j2 diff --git a/ansible/roles/test/templates/vnet_routes.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet_routes.j2 similarity index 100% rename from ansible/roles/test/templates/vnet_routes.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet_routes.j2 diff --git a/ansible/roles/test/templates/vnet_switch.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet_switch.j2 similarity index 100% rename from ansible/roles/test/templates/vnet_switch.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet_switch.j2 diff --git a/ansible/roles/test/templates/vnet_vxlan.j2 b/sonic-mgmt/ansible/roles/test/templates/vnet_vxlan.j2 similarity index 100% rename from ansible/roles/test/templates/vnet_vxlan.j2 rename to sonic-mgmt/ansible/roles/test/templates/vnet_vxlan.j2 diff --git a/ansible/roles/test/vars/testcases.yml b/sonic-mgmt/ansible/roles/test/vars/testcases.yml similarity index 100% rename from ansible/roles/test/vars/testcases.yml rename to sonic-mgmt/ansible/roles/test/vars/testcases.yml diff --git a/ansible/roles/testbed/finalize/tasks/main.yml b/sonic-mgmt/ansible/roles/testbed/finalize/tasks/main.yml similarity index 100% rename from ansible/roles/testbed/finalize/tasks/main.yml rename to sonic-mgmt/ansible/roles/testbed/finalize/tasks/main.yml diff --git a/ansible/roles/testbed/finalize/tasks/start_bgp.yml b/sonic-mgmt/ansible/roles/testbed/finalize/tasks/start_bgp.yml similarity index 100% rename from ansible/roles/testbed/finalize/tasks/start_bgp.yml rename to sonic-mgmt/ansible/roles/testbed/finalize/tasks/start_bgp.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/defaults/main.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/defaults/main.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/defaults/main.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/defaults/main.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/library/kickstart.py b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/library/kickstart.py similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/library/kickstart.py rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/library/kickstart.py diff --git a/ansible/roles/testbed/nut-vtopo-create/library/sonic_kickstart.py b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/library/sonic_kickstart.py similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/library/sonic_kickstart.py rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/library/sonic_kickstart.py diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/connect_tg_links.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/connect_tg_links.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/connect_tg_links.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/connect_tg_links.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/create_links.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/create_links.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/create_links.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/create_links.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/create_mgmt_network.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/create_mgmt_network.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/create_mgmt_network.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/create_mgmt_network.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_dut.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_dut.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_dut.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_dut.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_tg.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_tg.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_tg.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/launch_one_tg.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/main.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/main.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/main.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/main.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/read_testbed.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/read_testbed.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/read_testbed.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/read_testbed.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/start_sonic.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/start_sonic.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/start_sonic.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/start_sonic.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/tasks/wait_testbed_ready.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/wait_testbed_ready.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/tasks/wait_testbed_ready.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/tasks/wait_testbed_ready.yml diff --git a/ansible/roles/testbed/nut-vtopo-create/templates/vnut-sonic.xml.j2 b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/templates/vnut-sonic.xml.j2 similarity index 100% rename from ansible/roles/testbed/nut-vtopo-create/templates/vnut-sonic.xml.j2 rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-create/templates/vnut-sonic.xml.j2 diff --git a/ansible/roles/testbed/nut-vtopo-remove/defaults/main.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-remove/defaults/main.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-remove/defaults/main.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-remove/defaults/main.yml diff --git a/ansible/roles/testbed/nut-vtopo-remove/tasks/main.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-remove/tasks/main.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-remove/tasks/main.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-remove/tasks/main.yml diff --git a/ansible/roles/testbed/nut-vtopo-remove/tasks/read_testbed.yml b/sonic-mgmt/ansible/roles/testbed/nut-vtopo-remove/tasks/read_testbed.yml similarity index 100% rename from ansible/roles/testbed/nut-vtopo-remove/tasks/read_testbed.yml rename to sonic-mgmt/ansible/roles/testbed/nut-vtopo-remove/tasks/read_testbed.yml diff --git a/ansible/roles/testbed/nut/tasks/device_apply_config.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/device_apply_config.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/device_apply_config.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/device_apply_config.yml diff --git a/ansible/roles/testbed/nut/tasks/device_prepare_config.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/device_prepare_config.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/device_prepare_config.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/device_prepare_config.yml diff --git a/ansible/roles/testbed/nut/tasks/dut_create_config_patch.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/dut_create_config_patch.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/dut_create_config_patch.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/dut_create_config_patch.yml diff --git a/ansible/roles/testbed/nut/tasks/l1_apply_cross_connects.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/l1_apply_cross_connects.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/l1_apply_cross_connects.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/l1_apply_cross_connects.yml diff --git a/ansible/roles/testbed/nut/tasks/l1_create_config_patch.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/l1_create_config_patch.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/l1_create_config_patch.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/l1_create_config_patch.yml diff --git a/ansible/roles/testbed/nut/tasks/main.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/main.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/main.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/main.yml diff --git a/ansible/roles/testbed/nut/tasks/testbed_facts.yml b/sonic-mgmt/ansible/roles/testbed/nut/tasks/testbed_facts.yml similarity index 100% rename from ansible/roles/testbed/nut/tasks/testbed_facts.yml rename to sonic-mgmt/ansible/roles/testbed/nut/tasks/testbed_facts.yml diff --git a/ansible/roles/testbed/nut/templates/config_patch/common/gnmi.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/gnmi.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/common/gnmi.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/gnmi.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/common/mgmt_interface.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/mgmt_interface.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/common/mgmt_interface.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/mgmt_interface.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/common/restapi.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/restapi.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/common/restapi.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/restapi.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/common/telemetry.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/telemetry.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/common/telemetry.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/common/telemetry.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/all.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/all.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/all.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/all.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_devices.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_devices.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_devices.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_devices.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_ports.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_ports.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_ports.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/bgp_neighbor_ports.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/device_metadata.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/device_metadata.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/device_metadata.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/device_metadata.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/features.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/features.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/features.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/features.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/interfaces.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/interfaces.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/interfaces.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/interfaces.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/loopback_interfaces.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/loopback_interfaces.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/loopback_interfaces.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/loopback_interfaces.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/ports.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/ports.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/ports.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/ports.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/vlan_members.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/vlan_members.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/vlan_members.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/vlan_members.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/vlans.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/vlans.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/vlans.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/vlans.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/dut/vrfs.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/vrfs.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/dut/vrfs.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/dut/vrfs.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/l1/all.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/all.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/l1/all.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/all.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/l1/device_metadata.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/device_metadata.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/l1/device_metadata.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/device_metadata.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/l1/ocs_ports.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/ocs_ports.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/l1/ocs_ports.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/ocs_ports.json.j2 diff --git a/ansible/roles/testbed/nut/templates/config_patch/l1/ocs_xconnect.json.j2 b/sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/ocs_xconnect.json.j2 similarity index 100% rename from ansible/roles/testbed/nut/templates/config_patch/l1/ocs_xconnect.json.j2 rename to sonic-mgmt/ansible/roles/testbed/nut/templates/config_patch/l1/ocs_xconnect.json.j2 diff --git a/ansible/roles/testbed/prepare/tasks/main.yml b/sonic-mgmt/ansible/roles/testbed/prepare/tasks/main.yml similarity index 100% rename from ansible/roles/testbed/prepare/tasks/main.yml rename to sonic-mgmt/ansible/roles/testbed/prepare/tasks/main.yml diff --git a/ansible/roles/testbed/prepare/tasks/rotate_password.yml b/sonic-mgmt/ansible/roles/testbed/prepare/tasks/rotate_password.yml similarity index 100% rename from ansible/roles/testbed/prepare/tasks/rotate_password.yml rename to sonic-mgmt/ansible/roles/testbed/prepare/tasks/rotate_password.yml diff --git a/ansible/roles/testbed/prepare/tasks/setup_core_uploader.yml b/sonic-mgmt/ansible/roles/testbed/prepare/tasks/setup_core_uploader.yml similarity index 100% rename from ansible/roles/testbed/prepare/tasks/setup_core_uploader.yml rename to sonic-mgmt/ansible/roles/testbed/prepare/tasks/setup_core_uploader.yml diff --git a/ansible/roles/testbed/prepare/tasks/setup_restapi_certs.yml b/sonic-mgmt/ansible/roles/testbed/prepare/tasks/setup_restapi_certs.yml similarity index 100% rename from ansible/roles/testbed/prepare/tasks/setup_restapi_certs.yml rename to sonic-mgmt/ansible/roles/testbed/prepare/tasks/setup_restapi_certs.yml diff --git a/ansible/roles/testbed/prepare/tasks/setup_telemetry_certs.yml b/sonic-mgmt/ansible/roles/testbed/prepare/tasks/setup_telemetry_certs.yml similarity index 100% rename from ansible/roles/testbed/prepare/tasks/setup_telemetry_certs.yml rename to sonic-mgmt/ansible/roles/testbed/prepare/tasks/setup_telemetry_certs.yml diff --git a/ansible/roles/vm_set/defaults/main.yml b/sonic-mgmt/ansible/roles/vm_set/defaults/main.yml similarity index 100% rename from ansible/roles/vm_set/defaults/main.yml rename to sonic-mgmt/ansible/roles/vm_set/defaults/main.yml diff --git a/ansible/roles/vm_set/files/60-kvm-testbed.yaml b/sonic-mgmt/ansible/roles/vm_set/files/60-kvm-testbed.yaml similarity index 100% rename from ansible/roles/vm_set/files/60-kvm-testbed.yaml rename to sonic-mgmt/ansible/roles/vm_set/files/60-kvm-testbed.yaml diff --git a/ansible/roles/vm_set/files/change_mac.sh b/sonic-mgmt/ansible/roles/vm_set/files/change_mac.sh similarity index 100% rename from ansible/roles/vm_set/files/change_mac.sh rename to sonic-mgmt/ansible/roles/vm_set/files/change_mac.sh diff --git a/ansible/roles/vm_set/files/mux_simulator.md b/sonic-mgmt/ansible/roles/vm_set/files/mux_simulator.md similarity index 100% rename from ansible/roles/vm_set/files/mux_simulator.md rename to sonic-mgmt/ansible/roles/vm_set/files/mux_simulator.md diff --git a/ansible/roles/vm_set/files/mux_simulator.py b/sonic-mgmt/ansible/roles/vm_set/files/mux_simulator.py similarity index 99% rename from ansible/roles/vm_set/files/mux_simulator.py rename to sonic-mgmt/ansible/roles/vm_set/files/mux_simulator.py index 036e3ae595b..336f1505401 100644 --- a/ansible/roles/vm_set/files/mux_simulator.py +++ b/sonic-mgmt/ansible/roles/vm_set/files/mux_simulator.py @@ -133,7 +133,8 @@ def run_cmd(cmdline): 'stdout': stdout.decode('utf-8').splitlines(), 'stderr': stderr.decode('utf-8').splitlines() } - app.logger.debug(json.dumps(msg, indent=2)) + #app.logger.debug(json.dumps(msg, indent=2)) + app.logger.debug(msg) if ret_code != 0: raise Exception(msg) diff --git a/ansible/roles/vm_set/files/vm_resumer.py b/sonic-mgmt/ansible/roles/vm_set/files/vm_resumer.py similarity index 100% rename from ansible/roles/vm_set/files/vm_resumer.py rename to sonic-mgmt/ansible/roles/vm_set/files/vm_resumer.py diff --git a/ansible/roles/vm_set/library/add_cnet.yml b/sonic-mgmt/ansible/roles/vm_set/library/add_cnet.yml similarity index 100% rename from ansible/roles/vm_set/library/add_cnet.yml rename to sonic-mgmt/ansible/roles/vm_set/library/add_cnet.yml diff --git a/ansible/roles/vm_set/library/ceos_network.py b/sonic-mgmt/ansible/roles/vm_set/library/ceos_network.py similarity index 100% rename from ansible/roles/vm_set/library/ceos_network.py rename to sonic-mgmt/ansible/roles/vm_set/library/ceos_network.py diff --git a/ansible/roles/vm_set/library/cisco_8000e_port.py b/sonic-mgmt/ansible/roles/vm_set/library/cisco_8000e_port.py similarity index 100% rename from ansible/roles/vm_set/library/cisco_8000e_port.py rename to sonic-mgmt/ansible/roles/vm_set/library/cisco_8000e_port.py diff --git a/ansible/roles/vm_set/library/cisco_kickstart.py b/sonic-mgmt/ansible/roles/vm_set/library/cisco_kickstart.py similarity index 100% rename from ansible/roles/vm_set/library/cisco_kickstart.py rename to sonic-mgmt/ansible/roles/vm_set/library/cisco_kickstart.py diff --git a/ansible/roles/vm_set/library/cnet_network.py b/sonic-mgmt/ansible/roles/vm_set/library/cnet_network.py similarity index 100% rename from ansible/roles/vm_set/library/cnet_network.py rename to sonic-mgmt/ansible/roles/vm_set/library/cnet_network.py diff --git a/ansible/roles/vm_set/library/csonic_network.py b/sonic-mgmt/ansible/roles/vm_set/library/csonic_network.py similarity index 100% rename from ansible/roles/vm_set/library/csonic_network.py rename to sonic-mgmt/ansible/roles/vm_set/library/csonic_network.py diff --git a/ansible/roles/vm_set/library/docker_container_cleanup.py b/sonic-mgmt/ansible/roles/vm_set/library/docker_container_cleanup.py similarity index 100% rename from ansible/roles/vm_set/library/docker_container_cleanup.py rename to sonic-mgmt/ansible/roles/vm_set/library/docker_container_cleanup.py diff --git a/ansible/roles/vm_set/library/kickstart.py b/sonic-mgmt/ansible/roles/vm_set/library/kickstart.py similarity index 100% rename from ansible/roles/vm_set/library/kickstart.py rename to sonic-mgmt/ansible/roles/vm_set/library/kickstart.py diff --git a/ansible/roles/vm_set/library/kvm_port.py b/sonic-mgmt/ansible/roles/vm_set/library/kvm_port.py similarity index 100% rename from ansible/roles/vm_set/library/kvm_port.py rename to sonic-mgmt/ansible/roles/vm_set/library/kvm_port.py diff --git a/ansible/roles/vm_set/library/mellanox_simx_port.py b/sonic-mgmt/ansible/roles/vm_set/library/mellanox_simx_port.py similarity index 100% rename from ansible/roles/vm_set/library/mellanox_simx_port.py rename to sonic-mgmt/ansible/roles/vm_set/library/mellanox_simx_port.py diff --git a/ansible/roles/vm_set/library/ptf_control.py b/sonic-mgmt/ansible/roles/vm_set/library/ptf_control.py similarity index 100% rename from ansible/roles/vm_set/library/ptf_control.py rename to sonic-mgmt/ansible/roles/vm_set/library/ptf_control.py diff --git a/ansible/roles/vm_set/library/sonic_kickstart.py b/sonic-mgmt/ansible/roles/vm_set/library/sonic_kickstart.py similarity index 100% rename from ansible/roles/vm_set/library/sonic_kickstart.py rename to sonic-mgmt/ansible/roles/vm_set/library/sonic_kickstart.py diff --git a/ansible/roles/vm_set/library/vlan_port.py b/sonic-mgmt/ansible/roles/vm_set/library/vlan_port.py similarity index 100% rename from ansible/roles/vm_set/library/vlan_port.py rename to sonic-mgmt/ansible/roles/vm_set/library/vlan_port.py diff --git a/ansible/roles/vm_set/library/vm_topology.py b/sonic-mgmt/ansible/roles/vm_set/library/vm_topology.py similarity index 100% rename from ansible/roles/vm_set/library/vm_topology.py rename to sonic-mgmt/ansible/roles/vm_set/library/vm_topology.py diff --git a/ansible/roles/vm_set/tasks/add_ceos_list.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/add_ceos_list.yml similarity index 100% rename from ansible/roles/vm_set/tasks/add_ceos_list.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/add_ceos_list.yml diff --git a/ansible/roles/vm_set/tasks/add_cnet.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/add_cnet.yml similarity index 100% rename from ansible/roles/vm_set/tasks/add_cnet.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/add_cnet.yml diff --git a/ansible/roles/vm_set/tasks/add_cnet_list.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/add_cnet_list.yml similarity index 100% rename from ansible/roles/vm_set/tasks/add_cnet_list.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/add_cnet_list.yml diff --git a/ansible/roles/vm_set/tasks/add_csonic.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/add_csonic.yml similarity index 100% rename from ansible/roles/vm_set/tasks/add_csonic.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/add_csonic.yml diff --git a/ansible/roles/vm_set/tasks/add_csonic_list.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/add_csonic_list.yml similarity index 100% rename from ansible/roles/vm_set/tasks/add_csonic_list.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/add_csonic_list.yml diff --git a/ansible/roles/vm_set/tasks/add_topo.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/add_topo.yml similarity index 100% rename from ansible/roles/vm_set/tasks/add_topo.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/add_topo.yml diff --git a/ansible/roles/vm_set/tasks/announce_routes.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/announce_routes.yml similarity index 100% rename from ansible/roles/vm_set/tasks/announce_routes.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/announce_routes.yml diff --git a/ansible/roles/vm_set/tasks/connect_vms.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/connect_vms.yml similarity index 100% rename from ansible/roles/vm_set/tasks/connect_vms.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/connect_vms.yml diff --git a/ansible/roles/vm_set/tasks/control_mux_simulator.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/control_mux_simulator.yml similarity index 100% rename from ansible/roles/vm_set/tasks/control_mux_simulator.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/control_mux_simulator.yml diff --git a/ansible/roles/vm_set/tasks/control_nic_simulator.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/control_nic_simulator.yml similarity index 100% rename from ansible/roles/vm_set/tasks/control_nic_simulator.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/control_nic_simulator.yml diff --git a/ansible/roles/vm_set/tasks/create_dut_port.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/create_dut_port.yml similarity index 100% rename from ansible/roles/vm_set/tasks/create_dut_port.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/create_dut_port.yml diff --git a/ansible/roles/vm_set/tasks/disconnect_vms.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/disconnect_vms.yml similarity index 100% rename from ansible/roles/vm_set/tasks/disconnect_vms.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/disconnect_vms.yml diff --git a/ansible/roles/vm_set/tasks/docker.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/docker.yml similarity index 100% rename from ansible/roles/vm_set/tasks/docker.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/docker.yml diff --git a/ansible/roles/vm_set/tasks/ensure_python_env.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/ensure_python_env.yml similarity index 100% rename from ansible/roles/vm_set/tasks/ensure_python_env.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/ensure_python_env.yml diff --git a/ansible/roles/vm_set/tasks/external_port.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/external_port.yml similarity index 100% rename from ansible/roles/vm_set/tasks/external_port.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/external_port.yml diff --git a/ansible/roles/vm_set/tasks/get_dut_port.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/get_dut_port.yml similarity index 100% rename from ansible/roles/vm_set/tasks/get_dut_port.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/get_dut_port.yml diff --git a/ansible/roles/vm_set/tasks/host_setup.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/host_setup.yml similarity index 100% rename from ansible/roles/vm_set/tasks/host_setup.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/host_setup.yml diff --git a/ansible/roles/vm_set/tasks/internal_mgmt_network.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/internal_mgmt_network.yml similarity index 100% rename from ansible/roles/vm_set/tasks/internal_mgmt_network.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/internal_mgmt_network.yml diff --git a/ansible/roles/vm_set/tasks/kickstart_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/kickstart_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/kickstart_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/kickstart_vm.yml diff --git a/ansible/roles/vm_set/tasks/main.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/main.yml similarity index 100% rename from ansible/roles/vm_set/tasks/main.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/main.yml diff --git a/ansible/roles/vm_set/tasks/manage_duts.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/manage_duts.yml similarity index 100% rename from ansible/roles/vm_set/tasks/manage_duts.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/manage_duts.yml diff --git a/ansible/roles/vm_set/tasks/probe_image_url.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/probe_image_url.yml similarity index 100% rename from ansible/roles/vm_set/tasks/probe_image_url.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/probe_image_url.yml diff --git a/ansible/roles/vm_set/tasks/ptf_change_mac.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/ptf_change_mac.yml similarity index 100% rename from ansible/roles/vm_set/tasks/ptf_change_mac.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/ptf_change_mac.yml diff --git a/ansible/roles/vm_set/tasks/ptf_portchannel.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/ptf_portchannel.yml similarity index 100% rename from ansible/roles/vm_set/tasks/ptf_portchannel.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/ptf_portchannel.yml diff --git a/ansible/roles/vm_set/tasks/remove_ceos_list.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/remove_ceos_list.yml similarity index 100% rename from ansible/roles/vm_set/tasks/remove_ceos_list.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/remove_ceos_list.yml diff --git a/ansible/roles/vm_set/tasks/remove_csonic.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/remove_csonic.yml similarity index 100% rename from ansible/roles/vm_set/tasks/remove_csonic.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/remove_csonic.yml diff --git a/ansible/roles/vm_set/tasks/remove_csonic_list.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/remove_csonic_list.yml similarity index 100% rename from ansible/roles/vm_set/tasks/remove_csonic_list.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/remove_csonic_list.yml diff --git a/ansible/roles/vm_set/tasks/remove_dut_port.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/remove_dut_port.yml similarity index 100% rename from ansible/roles/vm_set/tasks/remove_dut_port.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/remove_dut_port.yml diff --git a/ansible/roles/vm_set/tasks/remove_topo.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/remove_topo.yml similarity index 100% rename from ansible/roles/vm_set/tasks/remove_topo.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/remove_topo.yml diff --git a/ansible/roles/vm_set/tasks/renumber_topo.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/renumber_topo.yml similarity index 100% rename from ansible/roles/vm_set/tasks/renumber_topo.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/renumber_topo.yml diff --git a/ansible/roles/vm_set/tasks/respin_cisco_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/respin_cisco_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/respin_cisco_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/respin_cisco_vm.yml diff --git a/ansible/roles/vm_set/tasks/respin_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/respin_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/respin_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/respin_vm.yml diff --git a/ansible/roles/vm_set/tasks/start.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start.yml diff --git a/ansible/roles/vm_set/tasks/start_8000e_sonic.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_8000e_sonic.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_8000e_sonic.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_8000e_sonic.yml diff --git a/ansible/roles/vm_set/tasks/start_dpu_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_dpu_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_dpu_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_dpu_vm.yml diff --git a/ansible/roles/vm_set/tasks/start_k8s.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_k8s.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_k8s.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_k8s.yml diff --git a/ansible/roles/vm_set/tasks/start_k8s_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_k8s_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_k8s_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_k8s_vm.yml diff --git a/ansible/roles/vm_set/tasks/start_ptf_tgen.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_ptf_tgen.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_ptf_tgen.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_ptf_tgen.yml diff --git a/ansible/roles/vm_set/tasks/start_sid.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_sid.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_sid.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_sid.yml diff --git a/ansible/roles/vm_set/tasks/start_sonic_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_sonic_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_sonic_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_sonic_vm.yml diff --git a/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml diff --git a/ansible/roles/vm_set/tasks/start_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_vm.yml diff --git a/ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml diff --git a/ansible/roles/vm_set/tasks/stop.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop.yml diff --git a/ansible/roles/vm_set/tasks/stop_8000e_sonic.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_8000e_sonic.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_8000e_sonic.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_8000e_sonic.yml diff --git a/ansible/roles/vm_set/tasks/stop_k8s.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_k8s.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_k8s.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_k8s.yml diff --git a/ansible/roles/vm_set/tasks/stop_k8s_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_k8s_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_k8s_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_k8s_vm.yml diff --git a/ansible/roles/vm_set/tasks/stop_sid.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_sid.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_sid.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_sid.yml diff --git a/ansible/roles/vm_set/tasks/stop_sonic_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_sonic_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_sonic_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_sonic_vm.yml diff --git a/ansible/roles/vm_set/tasks/stop_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_vm.yml diff --git a/ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml similarity index 100% rename from ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml diff --git a/ansible/roles/vm_set/tasks/update_ptf_password.yml b/sonic-mgmt/ansible/roles/vm_set/tasks/update_ptf_password.yml similarity index 100% rename from ansible/roles/vm_set/tasks/update_ptf_password.yml rename to sonic-mgmt/ansible/roles/vm_set/tasks/update_ptf_password.yml diff --git a/ansible/roles/vm_set/templates/arista.xml.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/arista.xml.j2 similarity index 96% rename from ansible/roles/vm_set/templates/arista.xml.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/arista.xml.j2 index d8a2faf5763..8bf18c6dda1 100644 --- a/ansible/roles/vm_set/templates/arista.xml.j2 +++ b/sonic-mgmt/ansible/roles/vm_set/templates/arista.xml.j2 @@ -60,5 +60,5 @@
- + diff --git a/ansible/roles/vm_set/templates/ceos_dockerfile.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/ceos_dockerfile.j2 similarity index 100% rename from ansible/roles/vm_set/templates/ceos_dockerfile.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/ceos_dockerfile.j2 diff --git a/ansible/roles/vm_set/templates/cisco.xml.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/cisco.xml.j2 similarity index 100% rename from ansible/roles/vm_set/templates/cisco.xml.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/cisco.xml.j2 diff --git a/ansible/roles/vm_set/templates/cleanup.sh.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/cleanup.sh.j2 similarity index 100% rename from ansible/roles/vm_set/templates/cleanup.sh.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/cleanup.sh.j2 diff --git a/ansible/roles/vm_set/templates/cloud-config.yml.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/cloud-config.yml.j2 similarity index 100% rename from ansible/roles/vm_set/templates/cloud-config.yml.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/cloud-config.yml.j2 diff --git a/ansible/roles/vm_set/templates/exabgp.conf.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/exabgp.conf.j2 similarity index 100% rename from ansible/roles/vm_set/templates/exabgp.conf.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/exabgp.conf.j2 diff --git a/ansible/roles/vm_set/templates/external_port.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/external_port.j2 similarity index 100% rename from ansible/roles/vm_set/templates/external_port.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/external_port.j2 diff --git a/ansible/roles/vm_set/templates/get_terminal_length.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/get_terminal_length.j2 similarity index 100% rename from ansible/roles/vm_set/templates/get_terminal_length.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/get_terminal_length.j2 diff --git a/ansible/roles/vm_set/templates/lag_lacp.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/lag_lacp.j2 similarity index 100% rename from ansible/roles/vm_set/templates/lag_lacp.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/lag_lacp.j2 diff --git a/ansible/roles/vm_set/templates/mux-simulator.service.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/mux-simulator.service.j2 similarity index 100% rename from ansible/roles/vm_set/templates/mux-simulator.service.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/mux-simulator.service.j2 diff --git a/ansible/roles/vm_set/templates/network-config-v2.yml.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/network-config-v2.yml.j2 similarity index 100% rename from ansible/roles/vm_set/templates/network-config-v2.yml.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/network-config-v2.yml.j2 diff --git a/ansible/roles/vm_set/templates/nic-simulator.service.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/nic-simulator.service.j2 similarity index 100% rename from ansible/roles/vm_set/templates/nic-simulator.service.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/nic-simulator.service.j2 diff --git a/ansible/roles/vm_set/templates/set_terminal_length.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/set_terminal_length.j2 similarity index 100% rename from ansible/roles/vm_set/templates/set_terminal_length.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/set_terminal_length.j2 diff --git a/ansible/roles/vm_set/templates/show_int_portchannel_status.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/show_int_portchannel_status.j2 similarity index 100% rename from ansible/roles/vm_set/templates/show_int_portchannel_status.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/show_int_portchannel_status.j2 diff --git a/ansible/roles/vm_set/templates/sonic.xml.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/sonic.xml.j2 similarity index 100% rename from ansible/roles/vm_set/templates/sonic.xml.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/sonic.xml.j2 diff --git a/ansible/roles/vm_set/templates/sonic_vm.xml.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/sonic_vm.xml.j2 similarity index 100% rename from ansible/roles/vm_set/templates/sonic_vm.xml.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/sonic_vm.xml.j2 diff --git a/ansible/roles/vm_set/templates/tac_plus_daily.conf.j2 b/sonic-mgmt/ansible/roles/vm_set/templates/tac_plus_daily.conf.j2 similarity index 100% rename from ansible/roles/vm_set/templates/tac_plus_daily.conf.j2 rename to sonic-mgmt/ansible/roles/vm_set/templates/tac_plus_daily.conf.j2 diff --git a/ansible/roles/vm_set/vars/main.yml b/sonic-mgmt/ansible/roles/vm_set/vars/main.yml similarity index 100% rename from ansible/roles/vm_set/vars/main.yml rename to sonic-mgmt/ansible/roles/vm_set/vars/main.yml diff --git a/sonic-mgmt/ansible/run_start_tacacs_daily_daemon.yml b/sonic-mgmt/ansible/run_start_tacacs_daily_daemon.yml new file mode 100644 index 00000000000..34e9c7bd7fb --- /dev/null +++ b/sonic-mgmt/ansible/run_start_tacacs_daily_daemon.yml @@ -0,0 +1,15 @@ +- name: Start TACACS daily daemon on PTF + hosts: localhost + gather_facts: no + vars: + inventory_path_default: "/data/ansible/lab" + tasks: + - name: Stat inventory file (role expects inventory_file.stat.exists) + ansible.builtin.stat: + path: "{{ inventory_path | default(inventory_path_default) }}" + register: inventory_file + + - name: Run vm_set start_tacacs_daily_daemon task file + import_role: + name: vm_set + tasks_from: start_tacacs_daily_daemon.yml diff --git a/ansible/scripts/generate_port_config.py b/sonic-mgmt/ansible/scripts/generate_port_config.py similarity index 100% rename from ansible/scripts/generate_port_config.py rename to sonic-mgmt/ansible/scripts/generate_port_config.py diff --git a/ansible/scripts/meta/README.md b/sonic-mgmt/ansible/scripts/meta/README.md similarity index 100% rename from ansible/scripts/meta/README.md rename to sonic-mgmt/ansible/scripts/meta/README.md diff --git a/ansible/scripts/meta/config_loader.py b/sonic-mgmt/ansible/scripts/meta/config_loader.py similarity index 100% rename from ansible/scripts/meta/config_loader.py rename to sonic-mgmt/ansible/scripts/meta/config_loader.py diff --git a/ansible/scripts/meta/meta_validator.py b/sonic-mgmt/ansible/scripts/meta/meta_validator.py similarity index 100% rename from ansible/scripts/meta/meta_validator.py rename to sonic-mgmt/ansible/scripts/meta/meta_validator.py diff --git a/ansible/scripts/meta/validator_orchestrator.py b/sonic-mgmt/ansible/scripts/meta/validator_orchestrator.py similarity index 100% rename from ansible/scripts/meta/validator_orchestrator.py rename to sonic-mgmt/ansible/scripts/meta/validator_orchestrator.py diff --git a/ansible/scripts/meta/validator_runner.py b/sonic-mgmt/ansible/scripts/meta/validator_runner.py similarity index 100% rename from ansible/scripts/meta/validator_runner.py rename to sonic-mgmt/ansible/scripts/meta/validator_runner.py diff --git a/ansible/scripts/meta/validators/__init__.py b/sonic-mgmt/ansible/scripts/meta/validators/__init__.py similarity index 100% rename from ansible/scripts/meta/validators/__init__.py rename to sonic-mgmt/ansible/scripts/meta/validators/__init__.py diff --git a/ansible/scripts/meta/validators/base_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/base_validator.py similarity index 100% rename from ansible/scripts/meta/validators/base_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/base_validator.py diff --git a/ansible/scripts/meta/validators/console_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/console_validator.py similarity index 100% rename from ansible/scripts/meta/validators/console_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/console_validator.py diff --git a/ansible/scripts/meta/validators/device_info_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/device_info_validator.py similarity index 100% rename from ansible/scripts/meta/validators/device_info_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/device_info_validator.py diff --git a/ansible/scripts/meta/validators/ip_address_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/ip_address_validator.py similarity index 100% rename from ansible/scripts/meta/validators/ip_address_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/ip_address_validator.py diff --git a/ansible/scripts/meta/validators/pdu_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/pdu_validator.py similarity index 100% rename from ansible/scripts/meta/validators/pdu_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/pdu_validator.py diff --git a/ansible/scripts/meta/validators/testbed_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/testbed_validator.py similarity index 100% rename from ansible/scripts/meta/validators/testbed_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/testbed_validator.py diff --git a/ansible/scripts/meta/validators/topology_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/topology_validator.py similarity index 100% rename from ansible/scripts/meta/validators/topology_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/topology_validator.py diff --git a/ansible/scripts/meta/validators/validation_result.py b/sonic-mgmt/ansible/scripts/meta/validators/validation_result.py similarity index 100% rename from ansible/scripts/meta/validators/validation_result.py rename to sonic-mgmt/ansible/scripts/meta/validators/validation_result.py diff --git a/ansible/scripts/meta/validators/validator_factory.py b/sonic-mgmt/ansible/scripts/meta/validators/validator_factory.py similarity index 100% rename from ansible/scripts/meta/validators/validator_factory.py rename to sonic-mgmt/ansible/scripts/meta/validators/validator_factory.py diff --git a/ansible/scripts/meta/validators/vlan_validator.py b/sonic-mgmt/ansible/scripts/meta/validators/vlan_validator.py similarity index 100% rename from ansible/scripts/meta/validators/vlan_validator.py rename to sonic-mgmt/ansible/scripts/meta/validators/vlan_validator.py diff --git a/ansible/scripts/start_tacacs.sh b/sonic-mgmt/ansible/scripts/start_tacacs.sh similarity index 100% rename from ansible/scripts/start_tacacs.sh rename to sonic-mgmt/ansible/scripts/start_tacacs.sh diff --git a/ansible/scripts/tacacs_daily_daemon b/sonic-mgmt/ansible/scripts/tacacs_daily_daemon similarity index 100% rename from ansible/scripts/tacacs_daily_daemon rename to sonic-mgmt/ansible/scripts/tacacs_daily_daemon diff --git a/ansible/scripts/testmg.sh b/sonic-mgmt/ansible/scripts/testmg.sh similarity index 100% rename from ansible/scripts/testmg.sh rename to sonic-mgmt/ansible/scripts/testmg.sh diff --git a/ansible/scripts/update_links_for_breakout.py b/sonic-mgmt/ansible/scripts/update_links_for_breakout.py similarity index 100% rename from ansible/scripts/update_links_for_breakout.py rename to sonic-mgmt/ansible/scripts/update_links_for_breakout.py diff --git a/ansible/scripts/vmhost_server_address.py b/sonic-mgmt/ansible/scripts/vmhost_server_address.py similarity index 100% rename from ansible/scripts/vmhost_server_address.py rename to sonic-mgmt/ansible/scripts/vmhost_server_address.py diff --git a/ansible/setup-br1-nat.sh b/sonic-mgmt/ansible/setup-br1-nat.sh similarity index 100% rename from ansible/setup-br1-nat.sh rename to sonic-mgmt/ansible/setup-br1-nat.sh diff --git a/ansible/setup-management-network.sh b/sonic-mgmt/ansible/setup-management-network.sh similarity index 100% rename from ansible/setup-management-network.sh rename to sonic-mgmt/ansible/setup-management-network.sh diff --git a/ansible/setup-ntp-server.sh b/sonic-mgmt/ansible/setup-ntp-server.sh similarity index 100% rename from ansible/setup-ntp-server.sh rename to sonic-mgmt/ansible/setup-ntp-server.sh diff --git a/ansible/setup_vs_chassis.sh b/sonic-mgmt/ansible/setup_vs_chassis.sh similarity index 100% rename from ansible/setup_vs_chassis.sh rename to sonic-mgmt/ansible/setup_vs_chassis.sh diff --git a/ansible/snappi-sonic b/sonic-mgmt/ansible/snappi-sonic similarity index 100% rename from ansible/snappi-sonic rename to sonic-mgmt/ansible/snappi-sonic diff --git a/ansible/ssh_session_gen.py b/sonic-mgmt/ansible/ssh_session_gen.py similarity index 100% rename from ansible/ssh_session_gen.py rename to sonic-mgmt/ansible/ssh_session_gen.py diff --git a/ansible/swap_syncd.yml b/sonic-mgmt/ansible/swap_syncd.yml similarity index 100% rename from ansible/swap_syncd.yml rename to sonic-mgmt/ansible/swap_syncd.yml diff --git a/ansible/t2_lab b/sonic-mgmt/ansible/t2_lab similarity index 100% rename from ansible/t2_lab rename to sonic-mgmt/ansible/t2_lab diff --git a/ansible/templates/dns_config.j2 b/sonic-mgmt/ansible/templates/dns_config.j2 similarity index 100% rename from ansible/templates/dns_config.j2 rename to sonic-mgmt/ansible/templates/dns_config.j2 diff --git a/ansible/templates/docker_http_proxy.j2 b/sonic-mgmt/ansible/templates/docker_http_proxy.j2 similarity index 100% rename from ansible/templates/docker_http_proxy.j2 rename to sonic-mgmt/ansible/templates/docker_http_proxy.j2 diff --git a/ansible/templates/golden_config_db_t2.j2 b/sonic-mgmt/ansible/templates/golden_config_db_t2.j2 similarity index 100% rename from ansible/templates/golden_config_db_t2.j2 rename to sonic-mgmt/ansible/templates/golden_config_db_t2.j2 diff --git a/ansible/templates/isis_config.j2 b/sonic-mgmt/ansible/templates/isis_config.j2 similarity index 100% rename from ansible/templates/isis_config.j2 rename to sonic-mgmt/ansible/templates/isis_config.j2 diff --git a/ansible/templates/minigraph_cpg.j2 b/sonic-mgmt/ansible/templates/minigraph_cpg.j2 similarity index 100% rename from ansible/templates/minigraph_cpg.j2 rename to sonic-mgmt/ansible/templates/minigraph_cpg.j2 diff --git a/ansible/templates/minigraph_device.j2 b/sonic-mgmt/ansible/templates/minigraph_device.j2 similarity index 100% rename from ansible/templates/minigraph_device.j2 rename to sonic-mgmt/ansible/templates/minigraph_device.j2 diff --git a/ansible/templates/minigraph_dpg.j2 b/sonic-mgmt/ansible/templates/minigraph_dpg.j2 similarity index 100% rename from ansible/templates/minigraph_dpg.j2 rename to sonic-mgmt/ansible/templates/minigraph_dpg.j2 diff --git a/ansible/templates/minigraph_dpg_asic.j2 b/sonic-mgmt/ansible/templates/minigraph_dpg_asic.j2 similarity index 100% rename from ansible/templates/minigraph_dpg_asic.j2 rename to sonic-mgmt/ansible/templates/minigraph_dpg_asic.j2 diff --git a/ansible/templates/minigraph_filterleaf_cpg.j2 b/sonic-mgmt/ansible/templates/minigraph_filterleaf_cpg.j2 similarity index 100% rename from ansible/templates/minigraph_filterleaf_cpg.j2 rename to sonic-mgmt/ansible/templates/minigraph_filterleaf_cpg.j2 diff --git a/ansible/templates/minigraph_filterleaf_dpg.j2 b/sonic-mgmt/ansible/templates/minigraph_filterleaf_dpg.j2 similarity index 100% rename from ansible/templates/minigraph_filterleaf_dpg.j2 rename to sonic-mgmt/ansible/templates/minigraph_filterleaf_dpg.j2 diff --git a/ansible/templates/minigraph_link_meta.j2 b/sonic-mgmt/ansible/templates/minigraph_link_meta.j2 similarity index 100% rename from ansible/templates/minigraph_link_meta.j2 rename to sonic-mgmt/ansible/templates/minigraph_link_meta.j2 diff --git a/ansible/templates/minigraph_meta.j2 b/sonic-mgmt/ansible/templates/minigraph_meta.j2 similarity index 100% rename from ansible/templates/minigraph_meta.j2 rename to sonic-mgmt/ansible/templates/minigraph_meta.j2 diff --git a/ansible/templates/minigraph_png.j2 b/sonic-mgmt/ansible/templates/minigraph_png.j2 similarity index 100% rename from ansible/templates/minigraph_png.j2 rename to sonic-mgmt/ansible/templates/minigraph_png.j2 diff --git a/ansible/templates/minigraph_template.j2 b/sonic-mgmt/ansible/templates/minigraph_template.j2 similarity index 100% rename from ansible/templates/minigraph_template.j2 rename to sonic-mgmt/ansible/templates/minigraph_template.j2 diff --git a/ansible/templates/topo_lt2-o256-u32d224.j2 b/sonic-mgmt/ansible/templates/topo_lt2-o256-u32d224.j2 similarity index 100% rename from ansible/templates/topo_lt2-o256-u32d224.j2 rename to sonic-mgmt/ansible/templates/topo_lt2-o256-u32d224.j2 diff --git a/ansible/templates/topo_lt2_128.j2 b/sonic-mgmt/ansible/templates/topo_lt2_128.j2 similarity index 100% rename from ansible/templates/topo_lt2_128.j2 rename to sonic-mgmt/ansible/templates/topo_lt2_128.j2 diff --git a/ansible/templates/topo_lt2_p32o64.j2 b/sonic-mgmt/ansible/templates/topo_lt2_p32o64.j2 similarity index 100% rename from ansible/templates/topo_lt2_p32o64.j2 rename to sonic-mgmt/ansible/templates/topo_lt2_p32o64.j2 diff --git a/ansible/templates/topo_t0-isolated-v6.j2 b/sonic-mgmt/ansible/templates/topo_t0-isolated-v6.j2 similarity index 100% rename from ansible/templates/topo_t0-isolated-v6.j2 rename to sonic-mgmt/ansible/templates/topo_t0-isolated-v6.j2 diff --git a/ansible/templates/topo_t0-isolated.j2 b/sonic-mgmt/ansible/templates/topo_t0-isolated.j2 similarity index 100% rename from ansible/templates/topo_t0-isolated.j2 rename to sonic-mgmt/ansible/templates/topo_t0-isolated.j2 diff --git a/ansible/templates/topo_t0.j2 b/sonic-mgmt/ansible/templates/topo_t0.j2 similarity index 100% rename from ansible/templates/topo_t0.j2 rename to sonic-mgmt/ansible/templates/topo_t0.j2 diff --git a/ansible/templates/topo_t1-isolated-v6.j2 b/sonic-mgmt/ansible/templates/topo_t1-isolated-v6.j2 similarity index 100% rename from ansible/templates/topo_t1-isolated-v6.j2 rename to sonic-mgmt/ansible/templates/topo_t1-isolated-v6.j2 diff --git a/ansible/templates/topo_t1-isolated.j2 b/sonic-mgmt/ansible/templates/topo_t1-isolated.j2 similarity index 100% rename from ansible/templates/topo_t1-isolated.j2 rename to sonic-mgmt/ansible/templates/topo_t1-isolated.j2 diff --git a/ansible/templates/topo_t1.j2 b/sonic-mgmt/ansible/templates/topo_t1.j2 similarity index 100% rename from ansible/templates/topo_t1.j2 rename to sonic-mgmt/ansible/templates/topo_t1.j2 diff --git a/ansible/templates/topo_t2-isolated.j2 b/sonic-mgmt/ansible/templates/topo_t2-isolated.j2 similarity index 100% rename from ansible/templates/topo_t2-isolated.j2 rename to sonic-mgmt/ansible/templates/topo_t2-isolated.j2 diff --git a/ansible/templates/vs_chassis_metadata.json.j2 b/sonic-mgmt/ansible/templates/vs_chassis_metadata.json.j2 similarity index 100% rename from ansible/templates/vs_chassis_metadata.json.j2 rename to sonic-mgmt/ansible/templates/vs_chassis_metadata.json.j2 diff --git a/ansible/terminal_plugins/aos.py b/sonic-mgmt/ansible/terminal_plugins/aos.py similarity index 100% rename from ansible/terminal_plugins/aos.py rename to sonic-mgmt/ansible/terminal_plugins/aos.py diff --git a/ansible/test_sonic.yml b/sonic-mgmt/ansible/test_sonic.yml similarity index 100% rename from ansible/test_sonic.yml rename to sonic-mgmt/ansible/test_sonic.yml diff --git a/ansible/testbed-cli.sh b/sonic-mgmt/ansible/testbed-cli.sh similarity index 99% rename from ansible/testbed-cli.sh rename to sonic-mgmt/ansible/testbed-cli.sh index b3967ab21af..7bdae4fb729 100755 --- a/ansible/testbed-cli.sh +++ b/sonic-mgmt/ansible/testbed-cli.sh @@ -1438,3 +1438,9 @@ case "${subcmd}" in *) usage ;; esac + +if [[ -f "$backup_file" ]];then + echo "Backup exists, restore backup file" + sudo rm -f "$topo_file" + sudo mv "$backup_file" "$topo_file" +fi diff --git a/sonic-mgmt/ansible/testbed-mathilda-t1.yaml b/sonic-mgmt/ansible/testbed-mathilda-t1.yaml new file mode 100644 index 00000000000..32060c9be81 --- /dev/null +++ b/sonic-mgmt/ansible/testbed-mathilda-t1.yaml @@ -0,0 +1,498 @@ +##### +# +# testbed-github.yaml is designed to be a convenient config file that contains information pertaining to sonic-mgmt +# the information has been divided into the following groups: +# - device_groups +# - devices +# - host_vars +# - veos_groups +# - veos +# - testbed +# - topology +# +# these groups when converted from yaml in python become dictionaries. +# these dictionaries help generate files necessary for ansible to run test cases +# +# where are files generated from: +# - device_groups generates: lab +# - devices generates: fanout/secrets.yml, lab/secrets.yml, lab +# - host_vars generates: .yml +# - veos_groups generates: veos +# - veos generates: main.yml, vm_host/creds.yml, sonic_lab_devices.csv, eos/creds.yml, veos +# - testbed generates: testbed.csv +# - topology generates: sonic_lab_links.csv +# +# output files created: +# [1] /group_vars/vm_host/main.yml +# [2] /group_vars/vm_host/creds.yml +# [3] /files/sonic_lab_devices.csv +# [4] /testbed.csv +# [5] /files/sonic_lab_links.csv +# [6] /group_vars/eos/creds.yml +# [7] /group_vars/fanout/secrets.yml +# [8] /group_vars/lab/secrets.yml +# [9] /lab +# [10] /veos +# [11*] /host_vars/.yml (where * is 0 or more) +# +##### +testbed_config: + name: Mathilda-T1 + alias: topologyGithubTestbed + type: Physical + +# device_groups is a dictionary that contains the groups that devices and hosts belong to. it also contains global variables under 'vars' +# device_groups is to export the lab file +# cross references with devices for ansible_host value +device_groups: + lab: + children: [sonic, vm_host, fanout, ptf] # source: sonic-mgmt/ansible/lab + vars: + mgmt_subnet_mask_length: "16" # source: sonic-mgmt/ansible/lab + sonic: + children: [mathilda-4] # source: sonic-mgmt/ansible/lab + vars: + hwsku: "Cisco-8102-C64" # source: sonic-mgmt/ansible/lab + iface_speed: '100000' # source: sonic-mgmt/ansible/lab + fanout: + host: [nexus-5] # source: sonic-mgmt/ansible/lab + ptf: + host: [ptf_math_1] # source: sonic-mgmt/ansible/lab + +# devices is a dictionary that contains all devices and hosts but not ptfs (ptfs found under testbed) +# devices is used to export sonic_lab_devices, fanout/secrets, lab/secrets, lab +# there are no cross references +devices: + mathilda-4: + device_type: DevSonic # source: sonic-mgmt/ansible/files/sonic_lab_devices-github.csv + hwsku: 8102-64H-O # source: sonic-mgmt/ansible/files/sonic_lab_devices-github.csv + alias: + credentials: + username: cisco + password: cisco123 + enable_password: + ansible: + ansible_host: 1.74.23.17/16 # source: sonic-mgmt/ansible/files/sonic_lab_devices-github.csv + ansible_ssh_user: cisco + ansible_ssh_pass: cisco123 + + sonic-ucs-m3-2: # source: sonic-mgmt/ansible/lab + device_type: blank + hwsku: + mgmt_subnet_mask_length: 16 + alias: + credentials: + username: rraghav + password: roZes@123 + ansible: + ansible_host: 1.74.23.19 # source: sonic-mgmt/ansible/veos + ansible_ssh_pass: rraghav + ansible_become_pass: roZes@123 + ansible_sudo_pass: roZes@123 + + nexus-5: + device_type: fanout + hwsku: C9336C-FX2 + alias: + credentials: + username: admin + password: roZes@123 + ansible: + ansible_host: 1.74.23.8 # source: sonic-mgmt/ansible/lab + ansible_user: admin + ansible_ssh_user: admin + ansible_ssh_pass: roZes@123 + ansible_become_pass: roZes@123 + + +# host_vars is a dictionary that contains all host_var values +# host_vars is used to export the host_vars files +# there are no cross references +host_vars: + sonic-ucs-m3-2: + mgmt_bridge: br1 # source: sonic-mgmt/host_vars + mgmt_prefixlen: 16 # source: sonic-mgmt/host_vars + mgmt_gw: 1.74.23.7 # source: sonic-mgmt/host_vars + external_port: enp5s0f1 # source: sonic-mgmt/host_vars + +# veos_groups is a dictionary that contains all veos groups +# veos_groups is used to generate the veos file +# veos_groups cross references veos (below) +veos_groups: + servers: + children: [server_1] # source: sonic-mgmt/veos + vars: + topologies: ['t1', 't1-lag', 't1-64-lag', 't1-64-lag-clet', 't0', 't0-56', 't0-52', 'ptf32', 'ptf64', 't0-64', 't0-64-32', 't0-116'] # source: sonic-mgmt/veos + server_1: + children: [vms_1,vm_host] # source: sonic-mgmt/veos + vars: + host_var_file: host_vars/sonic-ucs-m3-2.yml # source: sonic-mgmt/veos + eos: + children: [vms_1] # source: sonic-mgmt/veos + vms_1: + host: [VM0100, VM0101, VM0102, VM0103, VM0104, VM0105, VM0106, VM0107, VM0108, VM0109, VM0110, VM0111, VM0112, VM0113, VM0114, VM0115, VM0116, VM0117, VM0118, VM0119, VM0120, VM0121, VM0122, VM0123, VM0124, VM0125, VM0126, VM0127, VM0128, VM0129, VM0130, VM0131] # source: sonic-mgmt/veos + vm_host: + children: [vm_host_1] # source: sonic-mgmt/veos + vm_host_1: + host: [SONIC-UCS-M3-2] # source: sonic-mgmt/veos + +# veos is a dictionary that contains veos information as well as hosts of children groups from veos_groups +# veos is used to generate eos/creds, main.yml, vm_host/creds +# veos_groups pulls information from this dictionary +veos: + credentials: + username: admin + password: 123456 + root_path: veos-vm # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + vm_images_url: https://acsbe.blob.core.windows.net/vmimages # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + cd_image_filename: Aboot-veos-serial-8.0.0.iso # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + hdd_image_filename: vEOS-lab-4.20.15M.vmdk # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + skip_image_downloading: false # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + vm_console_base: 7000 # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + memory: 2097152 # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + max_fp_num: 4 # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + proxy_env: # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + http_proxy: http://173.36.224.109:80 # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + https_proxy: http://173.36.224.109:80 # source: sonic-mgmt/ansible/group_vars/vm_host/main.yml + vm_host_ansible: + ansible_user: rraghav # source: sonic-mgmt/ansible/group_vars/vm_host/creds.yml + ansible_password: roZes@123 # source: sonic-mgmt/ansible/group_vars/vm_host/creds.yml + ansible_sudo_pass: roZes@123 # source: sonic-mgmt/ansible/group_vars/vm_host/creds.yml + ansible_connection: network_cli + ansible_network_os: arista.eos.eos + eos_ansible: + ansible_user: admin # source: sonic-mgmt/ansible/group_vars/eos/creds.yml + ansible_password: 123456 # source: sonic-mgmt/ansible/group_vars/eos/creds.yml + vms_1: + VM0100: + ansible_host: 1.74.23.160 + VM0101: + ansible_host: 1.74.23.161 + VM0102: + ansible_host: 1.74.23.162 + VM0103: + ansible_host: 1.74.23.163 + VM0104: + ansible_host: 1.74.23.164 + VM0105: + ansible_host: 1.74.23.165 + VM0106: + ansible_host: 1.74.23.166 + VM0107: + ansible_host: 1.74.23.167 + VM0108: + ansible_host: 1.74.23.168 + VM0109: + ansible_host: 1.74.23.169 + VM0110: + ansible_host: 1.74.23.170 + VM0111: + ansible_host: 1.74.23.171 + VM0112: + ansible_host: 1.74.23.172 + VM0113: + ansible_host: 1.74.23.173 + VM0114: + ansible_host: 1.74.23.174 + VM0115: + ansible_host: 1.74.23.175 + VM0116: + ansible_host: 1.74.23.176 + VM0117: + ansible_host: 1.74.23.177 + VM0118: + ansible_host: 1.74.23.178 + VM0119: + ansible_host: 1.74.23.179 + VM0120: + ansible_host: 1.74.23.180 + VM0121: + ansible_host: 1.74.23.181 + VM0122: + ansible_host: 1.74.23.182 + VM0123: + ansible_host: 1.74.23.183 + VM0124: + ansible_host: 1.74.23.184 + VM0125: + ansible_host: 1.74.23.185 + VM0126: + ansible_host: 1.74.23.186 + VM0127: + ansible_host: 1.74.23.187 + VM0128: + ansible_host: 1.74.23.188 + VM0129: + ansible_host: 1.74.23.189 + VM0130: + ansible_host: 1.74.23.190 + VM0131: + ansible_host: 1.74.23.191 +# testbed dictionary contains information about the testbed +# testbed is used to generate testbed.csv +# testbed dictionary does not cross reference with other files +testbed: + mathilda-t1: # source: sonic-mgmt/ansible/testbed.csv + group-name: math-1 # source: sonic-mgmt/ansible/testbed.csv + topo: t1 # source: sonic-mgmt/ansible/testbed.csv + ptf_image_name: docker-ptf # source: sonic-mgmt/ansible/testbed.csv + ptf_ip: 1.74.23.192/16 # source: sonic-mgmt/ansible/testbed.csv + ptf: docker-ptf + server: server_1 # source: sonic-mgmt/ansible/testbed.csv + vm_base: VM0100 # source: sonic-mgmt/ansible/testbed.csv + dut: mathilda-4 # source: sonic-mgmt/ansible/testbed.csv + comment: Tests Mathilda # source: sonic-mgmt/ansible/testbed.csv + ansible: + ansible_ssh_usr: root + ansible_host: 1.74.23.192/16 + ansible_ssh_pass: root + credentials: + password: root + username: root + +# topology dictionary contains information about the topology (which device ports connect to each other) +# topology is used to generate sonic_lab_links +# topology dictionary does not cross reference with other files +topology: # source: sonic-mgmt/ansible/files/sonic_lab_links.csv + mathilda-4: # source: sonic-mgmt/ansible/files/sonic_lab_links.csv + interfaces: # DUT/ start device + + Ethernet0: + EndDevice: nexus-5 + EndPort: Ethernet1 + Bandwidth: 100000 + VlanID: 2000 + VlanMode: Access + + Ethernet1: + EndDevice: nexus-5 + EndPort: Ethernet2 + Bandwidth: 100000 + VlanID: 2001 + VlanMode: Access + + Ethernet2: + EndDevice: nexus-5 + EndPort: Ethernet3 + Bandwidth: 100000 + VlanID: 2002 + VlanMode: Access + + Ethernet3: + EndDevice: nexus-5 + EndPort: Ethernet4 + Bandwidth: 100000 + VlanID: 2003 + VlanMode: Access + + Ethernet4: + EndDevice: nexus-5 + EndPort: Ethernet5 + Bandwidth: 100000 + VlanID: 2004 + VlanMode: Access + + Ethernet5: + EndDevice: nexus-5 + EndPort: Ethernet6 + Bandwidth: 100000 + VlanID: 2005 + VlanMode: Access + + Ethernet6: + EndDevice: nexus-5 + EndPort: Ethernet7 + Bandwidth: 100000 + VlanID: 2006 + VlanMode: Access + + Ethernet7: + EndDevice: nexus-5 + EndPort: Ethernet8 + Bandwidth: 100000 + VlanID: 2007 + VlanMode: Access + + Ethernet8: + EndDevice: nexus-5 + EndPort: Ethernet9 + Bandwidth: 100000 + VlanID: 2008 + VlanMode: Access + + Ethernet9: + EndDevice: nexus-5 + EndPort: Ethernet10 + Bandwidth: 100000 + VlanID: 2009 + VlanMode: Access + + Ethernet10: + EndDevice: nexus-5 + EndPort: Ethernet11 + Bandwidth: 100000 + VlanID: 2010 + VlanMode: Access + + Ethernet11: + EndDevice: nexus-5 + EndPort: Ethernet12 + Bandwidth: 100000 + VlanID: 2011 + VlanMode: Access + + Ethernet12: + EndDevice: nexus-5 + EndPort: Ethernet13 + Bandwidth: 100000 + VlanID: 2012 + VlanMode: Access + + Ethernet13: + EndDevice: nexus-5 + EndPort: Ethernet14 + Bandwidth: 100000 + VlanID: 2013 + VlanMode: Access + + Ethernet14: + EndDevice: nexus-5 + EndPort: Ethernet15 + Bandwidth: 100000 + VlanID: 2014 + VlanMode: Access + + Ethernet15: + EndDevice: nexus-5 + EndPort: Ethernet16 + Bandwidth: 100000 + VlanID: 2015 + VlanMode: Access + + Ethernet16: + EndDevice: nexus-5 + EndPort: Ethernet17 + Bandwidth: 100000 + VlanID: 2016 + VlanMode: Access + + Ethernet17: + EndDevice: nexus-5 + EndPort: Ethernet18 + Bandwidth: 100000 + VlanID: 2017 + VlanMode: Access + + Ethernet18: + EndDevice: nexus-5 + EndPort: Ethernet19 + Bandwidth: 100000 + VlanID: 2018 + VlanMode: Access + + Ethernet19: + EndDevice: nexus-5 + EndPort: Ethernet20 + Bandwidth: 100000 + VlanID: 2019 + VlanMode: Access + + Ethernet20: + EndDevice: nexus-5 + EndPort: Ethernet21 + Bandwidth: 100000 + VlanID: 2020 + VlanMode: Access + + Ethernet21: + EndDevice: nexus-5 + EndPort: Ethernet22 + Bandwidth: 100000 + VlanID: 2021 + VlanMode: Access + + Ethernet22: + EndDevice: nexus-5 + EndPort: Ethernet23 + Bandwidth: 100000 + VlanID: 2022 + VlanMode: Access + + Ethernet23: + EndDevice: nexus-5 + EndPort: Ethernet24 + Bandwidth: 100000 + VlanID: 2023 + VlanMode: Access + + Ethernet24: + EndDevice: nexus-5 + EndPort: Ethernet25 + Bandwidth: 100000 + VlanID: 2024 + VlanMode: Access + + Ethernet25: + EndDevice: nexus-5 + EndPort: Ethernet26 + Bandwidth: 100000 + VlanID: 2025 + VlanMode: Access + + Ethernet26: + EndDevice: nexus-5 + EndPort: Ethernet27 + Bandwidth: 100000 + VlanID: 2026 + VlanMode: Access + + Ethernet27: + EndDevice: nexus-5 + EndPort: Ethernet28 + Bandwidth: 100000 + VlanID: 2027 + VlanMode: Access + + Ethernet28: + EndDevice: nexus-5 + EndPort: Ethernet29 + Bandwidth: 100000 + VlanID: 2028 + VlanMode: Access + + Ethernet29: + EndDevice: nexus-5 + EndPort: Ethernet30 + Bandwidth: 100000 + VlanID: 2029 + VlanMode: Access + + Ethernet30: + EndDevice: nexus-5 + EndPort: Ethernet31 + Bandwidth: 100000 + VlanID: 2030 + VlanMode: Access + + Ethernet31: + EndDevice: nexus-5 + EndPort: Ethernet32 + Bandwidth: 100000 + VlanID: 2031 + VlanMode: Access + + nexus-5: # source: sonic-mgmt/ansible/files/sonic_lab_links.csv + interfaces: # DUT/ start device + Ethernet1/35/2: + EndDevice: sonic-ucs-m3-2 + EndPort: enp5s0f1 + Bandwidth: 10000 + VlanID: 2000-2031 + VlanMode: Trunk + +# docker_registry is optional. It is not necessary unless you want to change the default location of the docker-registry. +# docker_registry dictionary contains information about the host, username, and password +# docker_registry is used to generate docker_registry.yaml +# docker_registry dictionary does not cross reference with other files +docker_registry: + docker_registry_host: sonicdev-microsoft.azurecr.io:443 diff --git a/ansible/testbed-new.yaml b/sonic-mgmt/ansible/testbed-new.yaml similarity index 100% rename from ansible/testbed-new.yaml rename to sonic-mgmt/ansible/testbed-new.yaml diff --git a/ansible/testbed.nut.yaml b/sonic-mgmt/ansible/testbed.nut.yaml similarity index 100% rename from ansible/testbed.nut.yaml rename to sonic-mgmt/ansible/testbed.nut.yaml diff --git a/ansible/testbed.vnut.yaml b/sonic-mgmt/ansible/testbed.vnut.yaml similarity index 100% rename from ansible/testbed.vnut.yaml rename to sonic-mgmt/ansible/testbed.vnut.yaml diff --git a/ansible/testbed.yaml b/sonic-mgmt/ansible/testbed.yaml similarity index 100% rename from ansible/testbed.yaml rename to sonic-mgmt/ansible/testbed.yaml diff --git a/ansible/testbed_add_nut_topo.yml b/sonic-mgmt/ansible/testbed_add_nut_topo.yml similarity index 100% rename from ansible/testbed_add_nut_topo.yml rename to sonic-mgmt/ansible/testbed_add_nut_topo.yml diff --git a/ansible/testbed_add_vm_topology.yml b/sonic-mgmt/ansible/testbed_add_vm_topology.yml similarity index 100% rename from ansible/testbed_add_vm_topology.yml rename to sonic-mgmt/ansible/testbed_add_vm_topology.yml diff --git a/ansible/testbed_announce_routes.yml b/sonic-mgmt/ansible/testbed_announce_routes.yml similarity index 100% rename from ansible/testbed_announce_routes.yml rename to sonic-mgmt/ansible/testbed_announce_routes.yml diff --git a/ansible/testbed_cleanup.yml b/sonic-mgmt/ansible/testbed_cleanup.yml similarity index 100% rename from ansible/testbed_cleanup.yml rename to sonic-mgmt/ansible/testbed_cleanup.yml diff --git a/ansible/testbed_config_vchassis.yml b/sonic-mgmt/ansible/testbed_config_vchassis.yml similarity index 100% rename from ansible/testbed_config_vchassis.yml rename to sonic-mgmt/ansible/testbed_config_vchassis.yml diff --git a/ansible/testbed_connect_topo.yml b/sonic-mgmt/ansible/testbed_connect_topo.yml similarity index 100% rename from ansible/testbed_connect_topo.yml rename to sonic-mgmt/ansible/testbed_connect_topo.yml diff --git a/ansible/testbed_connect_vms.yml b/sonic-mgmt/ansible/testbed_connect_vms.yml similarity index 100% rename from ansible/testbed_connect_vms.yml rename to sonic-mgmt/ansible/testbed_connect_vms.yml diff --git a/ansible/testbed_disconnect_vms.yml b/sonic-mgmt/ansible/testbed_disconnect_vms.yml similarity index 100% rename from ansible/testbed_disconnect_vms.yml rename to sonic-mgmt/ansible/testbed_disconnect_vms.yml diff --git a/ansible/testbed_integrate_traffic_generator.yml b/sonic-mgmt/ansible/testbed_integrate_traffic_generator.yml similarity index 100% rename from ansible/testbed_integrate_traffic_generator.yml rename to sonic-mgmt/ansible/testbed_integrate_traffic_generator.yml diff --git a/ansible/testbed_ocs.yaml b/sonic-mgmt/ansible/testbed_ocs.yaml similarity index 100% rename from ansible/testbed_ocs.yaml rename to sonic-mgmt/ansible/testbed_ocs.yaml diff --git a/ansible/testbed_remove_nut_topo.yml b/sonic-mgmt/ansible/testbed_remove_nut_topo.yml similarity index 100% rename from ansible/testbed_remove_nut_topo.yml rename to sonic-mgmt/ansible/testbed_remove_nut_topo.yml diff --git a/ansible/testbed_remove_vm_topology.yml b/sonic-mgmt/ansible/testbed_remove_vm_topology.yml similarity index 100% rename from ansible/testbed_remove_vm_topology.yml rename to sonic-mgmt/ansible/testbed_remove_vm_topology.yml diff --git a/ansible/testbed_renumber_vm_topology.yml b/sonic-mgmt/ansible/testbed_renumber_vm_topology.yml similarity index 100% rename from ansible/testbed_renumber_vm_topology.yml rename to sonic-mgmt/ansible/testbed_renumber_vm_topology.yml diff --git a/ansible/testbed_set_l2_mode.yml b/sonic-mgmt/ansible/testbed_set_l2_mode.yml similarity index 100% rename from ansible/testbed_set_l2_mode.yml rename to sonic-mgmt/ansible/testbed_set_l2_mode.yml diff --git a/ansible/testbed_setup_k8s_master.yml b/sonic-mgmt/ansible/testbed_setup_k8s_master.yml similarity index 100% rename from ansible/testbed_setup_k8s_master.yml rename to sonic-mgmt/ansible/testbed_setup_k8s_master.yml diff --git a/ansible/testbed_start_VMs.yml b/sonic-mgmt/ansible/testbed_start_VMs.yml similarity index 100% rename from ansible/testbed_start_VMs.yml rename to sonic-mgmt/ansible/testbed_start_VMs.yml diff --git a/ansible/testbed_start_k8s_VMs.yml b/sonic-mgmt/ansible/testbed_start_k8s_VMs.yml similarity index 100% rename from ansible/testbed_start_k8s_VMs.yml rename to sonic-mgmt/ansible/testbed_start_k8s_VMs.yml diff --git a/ansible/testbed_stop_VMs.yml b/sonic-mgmt/ansible/testbed_stop_VMs.yml similarity index 100% rename from ansible/testbed_stop_VMs.yml rename to sonic-mgmt/ansible/testbed_stop_VMs.yml diff --git a/ansible/testbed_stop_k8s_VMs.yml b/sonic-mgmt/ansible/testbed_stop_k8s_VMs.yml similarity index 100% rename from ansible/testbed_stop_k8s_VMs.yml rename to sonic-mgmt/ansible/testbed_stop_k8s_VMs.yml diff --git a/ansible/testbed_vm_status.yml b/sonic-mgmt/ansible/testbed_vm_status.yml similarity index 100% rename from ansible/testbed_vm_status.yml rename to sonic-mgmt/ansible/testbed_vm_status.yml diff --git a/ansible/update_reboot.yml b/sonic-mgmt/ansible/update_reboot.yml similarity index 100% rename from ansible/update_reboot.yml rename to sonic-mgmt/ansible/update_reboot.yml diff --git a/ansible/upgrade_dpu_sonic.yml b/sonic-mgmt/ansible/upgrade_dpu_sonic.yml similarity index 100% rename from ansible/upgrade_dpu_sonic.yml rename to sonic-mgmt/ansible/upgrade_dpu_sonic.yml diff --git a/ansible/upgrade_sonic.py b/sonic-mgmt/ansible/upgrade_sonic.py similarity index 100% rename from ansible/upgrade_sonic.py rename to sonic-mgmt/ansible/upgrade_sonic.py diff --git a/ansible/upgrade_sonic.yml b/sonic-mgmt/ansible/upgrade_sonic.yml similarity index 100% rename from ansible/upgrade_sonic.yml rename to sonic-mgmt/ansible/upgrade_sonic.yml diff --git a/ansible/vars/acl/acl_counter_traffic_test_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_counter_traffic_test_vars.yml similarity index 100% rename from ansible/vars/acl/acl_counter_traffic_test_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_counter_traffic_test_vars.yml diff --git a/ansible/vars/acl/acl_input_test_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_input_test_vars.yml similarity index 100% rename from ansible/vars/acl/acl_input_test_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_input_test_vars.yml diff --git a/ansible/vars/acl/acl_orchagent_logic_test_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_orchagent_logic_test_vars.yml similarity index 100% rename from ansible/vars/acl/acl_orchagent_logic_test_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_orchagent_logic_test_vars.yml diff --git a/ansible/vars/acl/acl_port_bind_test_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_port_bind_test_vars.yml similarity index 100% rename from ansible/vars/acl/acl_port_bind_test_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_port_bind_test_vars.yml diff --git a/ansible/vars/acl/acl_port_range_test_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_port_range_test_vars.yml similarity index 100% rename from ansible/vars/acl/acl_port_range_test_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_port_range_test_vars.yml diff --git a/ansible/vars/acl/acl_traffic_test_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_traffic_test_vars.yml similarity index 100% rename from ansible/vars/acl/acl_traffic_test_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_traffic_test_vars.yml diff --git a/ansible/vars/acl/acl_vars.yml b/sonic-mgmt/ansible/vars/acl/acl_vars.yml similarity index 100% rename from ansible/vars/acl/acl_vars.yml rename to sonic-mgmt/ansible/vars/acl/acl_vars.yml diff --git a/ansible/vars/azure_storage.yml b/sonic-mgmt/ansible/vars/azure_storage.yml similarity index 100% rename from ansible/vars/azure_storage.yml rename to sonic-mgmt/ansible/vars/azure_storage.yml diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/P1.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P1.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/P1.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P1.json diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/P2.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P2.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/P2.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P2.json diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/P3.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P3.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/P3.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P3.json diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/P4.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P4.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/P4.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/P4.json diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/PE1.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/PE2.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_cisco/PE3.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/P1.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P1.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/P1.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P1.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/P2.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P2.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/P2.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P2.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/P3.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P3.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/P3.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P3.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/P4.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P4.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/P4.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/P4.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/PE1.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/PE1.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/PE1.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/PE1.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/PE2.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/PE2.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/PE2.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/PE2.json diff --git a/ansible/vars/configdb_jsons/7nodes_force10/PE3.json b/sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/PE3.json similarity index 100% rename from ansible/vars/configdb_jsons/7nodes_force10/PE3.json rename to sonic-mgmt/ansible/vars/configdb_jsons/7nodes_force10/PE3.json diff --git a/ansible/vars/configlet/t1-64-lag-clet/apply_clet.sh b/sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/apply_clet.sh similarity index 100% rename from ansible/vars/configlet/t1-64-lag-clet/apply_clet.sh rename to sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/apply_clet.sh diff --git a/ansible/vars/configlet/t1-64-lag-clet/clet-add-qos-new-dbfmt.json b/sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/clet-add-qos-new-dbfmt.json similarity index 100% rename from ansible/vars/configlet/t1-64-lag-clet/clet-add-qos-new-dbfmt.json rename to sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/clet-add-qos-new-dbfmt.json diff --git a/ansible/vars/configlet/t1-64-lag-clet/clet-add.json b/sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/clet-add.json similarity index 100% rename from ansible/vars/configlet/t1-64-lag-clet/clet-add.json rename to sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/clet-add.json diff --git a/ansible/vars/configlet/t1-64-lag-clet/clet-to_clear.json b/sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/clet-to_clear.json similarity index 100% rename from ansible/vars/configlet/t1-64-lag-clet/clet-to_clear.json rename to sonic-mgmt/ansible/vars/configlet/t1-64-lag-clet/clet-to_clear.json diff --git a/ansible/vars/docker_registry.yml b/sonic-mgmt/ansible/vars/docker_registry.yml similarity index 100% rename from ansible/vars/docker_registry.yml rename to sonic-mgmt/ansible/vars/docker_registry.yml diff --git a/ansible/vars/init_cfg_profiles.yml b/sonic-mgmt/ansible/vars/init_cfg_profiles.yml similarity index 100% rename from ansible/vars/init_cfg_profiles.yml rename to sonic-mgmt/ansible/vars/init_cfg_profiles.yml diff --git a/ansible/vars/lag_fanout_ports_test_vars.yml b/sonic-mgmt/ansible/vars/lag_fanout_ports_test_vars.yml similarity index 100% rename from ansible/vars/lag_fanout_ports_test_vars.yml rename to sonic-mgmt/ansible/vars/lag_fanout_ports_test_vars.yml diff --git a/ansible/vars/nut_topos/nut-2tiers-backend.yml b/sonic-mgmt/ansible/vars/nut_topos/nut-2tiers-backend.yml similarity index 100% rename from ansible/vars/nut_topos/nut-2tiers-backend.yml rename to sonic-mgmt/ansible/vars/nut_topos/nut-2tiers-backend.yml diff --git a/ansible/vars/nut_topos/nut-2tiers.yml b/sonic-mgmt/ansible/vars/nut_topos/nut-2tiers.yml similarity index 100% rename from ansible/vars/nut_topos/nut-2tiers.yml rename to sonic-mgmt/ansible/vars/nut_topos/nut-2tiers.yml diff --git a/ansible/vars/nut_topos/nut-l2-snake.yml b/sonic-mgmt/ansible/vars/nut_topos/nut-l2-snake.yml similarity index 100% rename from ansible/vars/nut_topos/nut-l2-snake.yml rename to sonic-mgmt/ansible/vars/nut_topos/nut-l2-snake.yml diff --git a/ansible/vars/nut_topos/nut-single-dut.yml b/sonic-mgmt/ansible/vars/nut_topos/nut-single-dut.yml similarity index 100% rename from ansible/vars/nut_topos/nut-single-dut.yml rename to sonic-mgmt/ansible/vars/nut_topos/nut-single-dut.yml diff --git a/ansible/vars/qos.yml b/sonic-mgmt/ansible/vars/qos.yml similarity index 100% rename from ansible/vars/qos.yml rename to sonic-mgmt/ansible/vars/qos.yml diff --git a/sonic-mgmt/ansible/vars/topo-t1-xrsf.yml b/sonic-mgmt/ansible/vars/topo-t1-xrsf.yml new file mode 100644 index 00000000000..bc5a59586aa --- /dev/null +++ b/sonic-mgmt/ansible/vars/topo-t1-xrsf.yml @@ -0,0 +1,847 @@ +topology: + VMs: + IOSXR01T2: + vlans: + - 0 + vm_offset: 0 + IOSXR02T2: + vlans: + - 1 + vm_offset: 1 + IOSXR03T2: + vlans: + - 2 + vm_offset: 2 + IOSXR04T2: + vlans: + - 3 + vm_offset: 3 + IOSXR05T2: + vlans: + - 4 + vm_offset: 4 + IOSXR06T2: + vlans: + - 5 + vm_offset: 5 + IOSXR07T2: + vlans: + - 6 + vm_offset: 6 + IOSXR08T2: + vlans: + - 7 + vm_offset: 7 + IOSXR09T2: + vlans: + - 8 + vm_offset: 8 + IOSXR10T2: + vlans: + - 9 + vm_offset: 9 + IOSXR11T2: + vlans: + - 10 + vm_offset: 10 + IOSXR12T2: + vlans: + - 11 + vm_offset: 11 + IOSXR13T2: + vlans: + - 12 + vm_offset: 12 + IOSXR14T2: + vlans: + - 13 + vm_offset: 13 + IOSXR15T2: + vlans: + - 14 + vm_offset: 14 + IOSXR16T2: + vlans: + - 15 + vm_offset: 15 + IOSXR01T0: + vlans: + - 16 + vm_offset: 16 + IOSXR02T0: + vlans: + - 17 + vm_offset: 17 + IOSXR03T0: + vlans: + - 18 + vm_offset: 18 + IOSXR04T0: + vlans: + - 19 + vm_offset: 19 + IOSXR05T0: + vlans: + - 20 + vm_offset: 20 + IOSXR06T0: + vlans: + - 21 + vm_offset: 21 + IOSXR07T0: + vlans: + - 22 + vm_offset: 22 + IOSXR08T0: + vlans: + - 23 + vm_offset: 23 + IOSXR09T0: + vlans: + - 24 + vm_offset: 24 + IOSXR10T0: + vlans: + - 25 + vm_offset: 25 + IOSXR11T0: + vlans: + - 26 + vm_offset: 26 + IOSXR12T0: + vlans: + - 27 + vm_offset: 27 + IOSXR13T0: + vlans: + - 28 + vm_offset: 28 + IOSXR14T0: + vlans: + - 29 + vm_offset: 29 + IOSXR15T0: + vlans: + - 30 + vm_offset: 30 + IOSXR16T0: + vlans: + - 31 + vm_offset: 31 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.100 + nhipv6: FC0A::C9 + spine: + swrole: spine + podset_number: 1 + tor_number: 16 + tor_subnet_number: 2 + leaf_asn_start: 62001 + tor_asn_start: 65501 + failure_rate: 0 + tor: + swrole: tor + tor_subnet_number: 5 + +configuration: + IOSXR01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + IOSXR02T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.2 + - FC00::5 + interfaces: + Loopback0: + ipv4: 100.1.0.2/32 + ipv6: 2064:100::2/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.3/31 + ipv6: fc00::6/126 + bp_interface: + ipv4: 10.10.246.2/24 + ipv6: fc0a::5/64 + + IOSXR03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + IOSXR04T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.6 + - FC00::D + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100::4/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.7/31 + ipv6: fc00::e/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::9/64 + + IOSXR05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + IOSXR06T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.10 + - FC00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100::6/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.11/31 + ipv6: fc00::16/126 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::d/64 + + IOSXR07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + IOSXR08T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.14 + - FC00::1D + interfaces: + Loopback0: + ipv4: 100.1.0.8/32 + ipv6: 2064:100::8/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.15/31 + ipv6: fc00::1e/126 + bp_interface: + ipv4: 10.10.246.8/24 + ipv6: fc0a::11/64 + + IOSXR09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + IOSXR10T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.18 + - FC00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100::a/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.19/31 + ipv6: fc00::26/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::15/64 + + IOSXR11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + IOSXR12T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.22 + - FC00::2D + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100::c/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.23/31 + ipv6: fc00::2e/126 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::19/64 + + IOSXR13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + IOSXR14T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.26 + - FC00::35 + interfaces: + Loopback0: + ipv4: 100.1.0.14/32 + ipv6: 2064:100::e/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.27/31 + ipv6: fc00::36/126 + bp_interface: + ipv4: 10.10.246.14/24 + ipv6: fc0a::1d/64 + + IOSXR15T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.28 + - FC00::39 + interfaces: + Loopback0: + ipv4: 100.1.0.15/32 + ipv6: 2064:100::f/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.29/31 + ipv6: fc00::3a/126 + bp_interface: + ipv4: 10.10.246.15/24 + ipv6: fc0a::1e/64 + + IOSXR16T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.30 + - FC00::3D + interfaces: + Loopback0: + ipv4: 100.1.0.16/32 + ipv6: 2064:100::10/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.31/31 + ipv6: fc00::3e/126 + bp_interface: + ipv4: 10.10.246.16/24 + ipv6: fc0a::21/64 + + IOSXR01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + + IOSXR02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + IOSXR03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + + IOSXR04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + IOSXR05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + IOSXR06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + IOSXR07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + IOSXR08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + IOSXR09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + IOSXR10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + IOSXR11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + IOSXR12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + IOSXR13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + IOSXR14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 + + IOSXR15T0: + properties: + - common + - tor + tornum: 15 + bgp: + asn: 64015 + peers: + 65100: + - 10.0.0.60 + - FC00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100::1f/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::3e/64 + + IOSXR16T0: + properties: + - common + - tor + tornum: 16 + bgp: + asn: 64016 + peers: + 65100: + - 10.0.0.62 + - FC00::7D + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100::20/128 + FourHundredGigE0/0/0/0: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::41/64 diff --git a/sonic-mgmt/ansible/vars/topo-t1-xrv.yml b/sonic-mgmt/ansible/vars/topo-t1-xrv.yml new file mode 100644 index 00000000000..1823a66f0e5 --- /dev/null +++ b/sonic-mgmt/ansible/vars/topo-t1-xrv.yml @@ -0,0 +1,847 @@ +topology: + VMs: + IOSXR01T2: + vlans: + - 0 + vm_offset: 0 + IOSXR02T2: + vlans: + - 1 + vm_offset: 1 + IOSXR03T2: + vlans: + - 2 + vm_offset: 2 + IOSXR04T2: + vlans: + - 3 + vm_offset: 3 + IOSXR05T2: + vlans: + - 4 + vm_offset: 4 + IOSXR06T2: + vlans: + - 5 + vm_offset: 5 + IOSXR07T2: + vlans: + - 6 + vm_offset: 6 + IOSXR08T2: + vlans: + - 7 + vm_offset: 7 + IOSXR09T2: + vlans: + - 8 + vm_offset: 8 + IOSXR10T2: + vlans: + - 9 + vm_offset: 9 + IOSXR11T2: + vlans: + - 10 + vm_offset: 10 + IOSXR12T2: + vlans: + - 11 + vm_offset: 11 + IOSXR13T2: + vlans: + - 12 + vm_offset: 12 + IOSXR14T2: + vlans: + - 13 + vm_offset: 13 + IOSXR15T2: + vlans: + - 14 + vm_offset: 14 + IOSXR16T2: + vlans: + - 15 + vm_offset: 15 + IOSXR01T0: + vlans: + - 16 + vm_offset: 16 + IOSXR02T0: + vlans: + - 17 + vm_offset: 17 + IOSXR03T0: + vlans: + - 18 + vm_offset: 18 + IOSXR04T0: + vlans: + - 19 + vm_offset: 19 + IOSXR05T0: + vlans: + - 20 + vm_offset: 20 + IOSXR06T0: + vlans: + - 21 + vm_offset: 21 + IOSXR07T0: + vlans: + - 22 + vm_offset: 22 + IOSXR08T0: + vlans: + - 23 + vm_offset: 23 + IOSXR09T0: + vlans: + - 24 + vm_offset: 24 + IOSXR10T0: + vlans: + - 25 + vm_offset: 25 + IOSXR11T0: + vlans: + - 26 + vm_offset: 26 + IOSXR12T0: + vlans: + - 27 + vm_offset: 27 + IOSXR13T0: + vlans: + - 28 + vm_offset: 28 + IOSXR14T0: + vlans: + - 29 + vm_offset: 29 + IOSXR15T0: + vlans: + - 30 + vm_offset: 30 + IOSXR16T0: + vlans: + - 31 + vm_offset: 31 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.100 + nhipv6: FC0A::C9 + spine: + swrole: spine + podset_number: 1 + tor_number: 16 + tor_subnet_number: 2 + leaf_asn_start: 62001 + tor_asn_start: 65501 + failure_rate: 0 + tor: + swrole: tor + tor_subnet_number: 5 + +configuration: + IOSXR01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + IOSXR02T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.2 + - FC00::5 + interfaces: + Loopback0: + ipv4: 100.1.0.2/32 + ipv6: 2064:100::2/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.3/31 + ipv6: fc00::6/126 + bp_interface: + ipv4: 10.10.246.2/24 + ipv6: fc0a::5/64 + + IOSXR03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + IOSXR04T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.6 + - FC00::D + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100::4/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.7/31 + ipv6: fc00::e/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::9/64 + + IOSXR05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + IOSXR06T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.10 + - FC00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100::6/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.11/31 + ipv6: fc00::16/126 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::d/64 + + IOSXR07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + IOSXR08T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.14 + - FC00::1D + interfaces: + Loopback0: + ipv4: 100.1.0.8/32 + ipv6: 2064:100::8/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.15/31 + ipv6: fc00::1e/126 + bp_interface: + ipv4: 10.10.246.8/24 + ipv6: fc0a::11/64 + + IOSXR09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + IOSXR10T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.18 + - FC00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100::a/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.19/31 + ipv6: fc00::26/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::15/64 + + IOSXR11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + IOSXR12T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.22 + - FC00::2D + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100::c/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.23/31 + ipv6: fc00::2e/126 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::19/64 + + IOSXR13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + IOSXR14T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.26 + - FC00::35 + interfaces: + Loopback0: + ipv4: 100.1.0.14/32 + ipv6: 2064:100::e/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.27/31 + ipv6: fc00::36/126 + bp_interface: + ipv4: 10.10.246.14/24 + ipv6: fc0a::1d/64 + + IOSXR15T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.28 + - FC00::39 + interfaces: + Loopback0: + ipv4: 100.1.0.15/32 + ipv6: 2064:100::f/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.29/31 + ipv6: fc00::3a/126 + bp_interface: + ipv4: 10.10.246.15/24 + ipv6: fc0a::1e/64 + + IOSXR16T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.30 + - FC00::3D + interfaces: + Loopback0: + ipv4: 100.1.0.16/32 + ipv6: 2064:100::10/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.31/31 + ipv6: fc00::3e/126 + bp_interface: + ipv4: 10.10.246.16/24 + ipv6: fc0a::21/64 + + IOSXR01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + + IOSXR02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + IOSXR03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + + IOSXR04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + IOSXR05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + IOSXR06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + IOSXR07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + IOSXR08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + IOSXR09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + IOSXR10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + IOSXR11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + IOSXR12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + IOSXR13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + IOSXR14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 + + IOSXR15T0: + properties: + - common + - tor + tornum: 15 + bgp: + asn: 64015 + peers: + 65100: + - 10.0.0.60 + - FC00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100::1f/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::3e/64 + + IOSXR16T0: + properties: + - common + - tor + tornum: 16 + bgp: + asn: 64016 + peers: + 65100: + - 10.0.0.62 + - FC00::7D + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100::20/128 + GigabitEthernet0/0/0/0: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::41/64 diff --git a/ansible/vars/topo_Nokia-IXR7250-X3B.yml b/sonic-mgmt/ansible/vars/topo_Nokia-IXR7250-X3B.yml similarity index 100% rename from ansible/vars/topo_Nokia-IXR7250-X3B.yml rename to sonic-mgmt/ansible/vars/topo_Nokia-IXR7250-X3B.yml diff --git a/ansible/vars/topo_Nokia-IXR7250E-36x100G.yml b/sonic-mgmt/ansible/vars/topo_Nokia-IXR7250E-36x100G.yml similarity index 100% rename from ansible/vars/topo_Nokia-IXR7250E-36x100G.yml rename to sonic-mgmt/ansible/vars/topo_Nokia-IXR7250E-36x100G.yml diff --git a/ansible/vars/topo_Nokia-IXR7250E-36x400G.yml b/sonic-mgmt/ansible/vars/topo_Nokia-IXR7250E-36x400G.yml similarity index 100% rename from ansible/vars/topo_Nokia-IXR7250E-36x400G.yml rename to sonic-mgmt/ansible/vars/topo_Nokia-IXR7250E-36x400G.yml diff --git a/ansible/vars/topo_bmc-dual-mgmt.yml b/sonic-mgmt/ansible/vars/topo_bmc-dual-mgmt.yml similarity index 100% rename from ansible/vars/topo_bmc-dual-mgmt.yml rename to sonic-mgmt/ansible/vars/topo_bmc-dual-mgmt.yml diff --git a/ansible/vars/topo_c0-lo.yml b/sonic-mgmt/ansible/vars/topo_c0-lo.yml similarity index 100% rename from ansible/vars/topo_c0-lo.yml rename to sonic-mgmt/ansible/vars/topo_c0-lo.yml diff --git a/ansible/vars/topo_c0.yml b/sonic-mgmt/ansible/vars/topo_c0.yml similarity index 100% rename from ansible/vars/topo_c0.yml rename to sonic-mgmt/ansible/vars/topo_c0.yml diff --git a/ansible/vars/topo_cable-test.yml b/sonic-mgmt/ansible/vars/topo_cable-test.yml similarity index 100% rename from ansible/vars/topo_cable-test.yml rename to sonic-mgmt/ansible/vars/topo_cable-test.yml diff --git a/ansible/vars/topo_ciscovs-5nodes.yml b/sonic-mgmt/ansible/vars/topo_ciscovs-5nodes.yml similarity index 100% rename from ansible/vars/topo_ciscovs-5nodes.yml rename to sonic-mgmt/ansible/vars/topo_ciscovs-5nodes.yml diff --git a/ansible/vars/topo_ciscovs-7nodes.yml b/sonic-mgmt/ansible/vars/topo_ciscovs-7nodes.yml similarity index 100% rename from ansible/vars/topo_ciscovs-7nodes.yml rename to sonic-mgmt/ansible/vars/topo_ciscovs-7nodes.yml diff --git a/ansible/vars/topo_dpu-1.yml b/sonic-mgmt/ansible/vars/topo_dpu-1.yml similarity index 100% rename from ansible/vars/topo_dpu-1.yml rename to sonic-mgmt/ansible/vars/topo_dpu-1.yml diff --git a/ansible/vars/topo_dpu.yml b/sonic-mgmt/ansible/vars/topo_dpu.yml similarity index 100% rename from ansible/vars/topo_dpu.yml rename to sonic-mgmt/ansible/vars/topo_dpu.yml diff --git a/ansible/vars/topo_drh_tgen_route_conv.yml b/sonic-mgmt/ansible/vars/topo_drh_tgen_route_conv.yml similarity index 100% rename from ansible/vars/topo_drh_tgen_route_conv.yml rename to sonic-mgmt/ansible/vars/topo_drh_tgen_route_conv.yml diff --git a/ansible/vars/topo_dualtor-120.yml b/sonic-mgmt/ansible/vars/topo_dualtor-120.yml similarity index 100% rename from ansible/vars/topo_dualtor-120.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-120.yml diff --git a/ansible/vars/topo_dualtor-56.yml b/sonic-mgmt/ansible/vars/topo_dualtor-56.yml similarity index 100% rename from ansible/vars/topo_dualtor-56.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-56.yml diff --git a/ansible/vars/topo_dualtor-64-breakout.yml b/sonic-mgmt/ansible/vars/topo_dualtor-64-breakout.yml similarity index 100% rename from ansible/vars/topo_dualtor-64-breakout.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-64-breakout.yml diff --git a/ansible/vars/topo_dualtor-64.yml b/sonic-mgmt/ansible/vars/topo_dualtor-64.yml similarity index 100% rename from ansible/vars/topo_dualtor-64.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-64.yml diff --git a/ansible/vars/topo_dualtor-aa-120.yml b/sonic-mgmt/ansible/vars/topo_dualtor-aa-120.yml similarity index 100% rename from ansible/vars/topo_dualtor-aa-120.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-aa-120.yml diff --git a/ansible/vars/topo_dualtor-aa-56.yml b/sonic-mgmt/ansible/vars/topo_dualtor-aa-56.yml similarity index 100% rename from ansible/vars/topo_dualtor-aa-56.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-aa-56.yml diff --git a/ansible/vars/topo_dualtor-aa-64-breakout.yml b/sonic-mgmt/ansible/vars/topo_dualtor-aa-64-breakout.yml similarity index 100% rename from ansible/vars/topo_dualtor-aa-64-breakout.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-aa-64-breakout.yml diff --git a/ansible/vars/topo_dualtor-aa-64.yml b/sonic-mgmt/ansible/vars/topo_dualtor-aa-64.yml similarity index 100% rename from ansible/vars/topo_dualtor-aa-64.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-aa-64.yml diff --git a/ansible/vars/topo_dualtor-aa-vpp.yml b/sonic-mgmt/ansible/vars/topo_dualtor-aa-vpp.yml similarity index 100% rename from ansible/vars/topo_dualtor-aa-vpp.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-aa-vpp.yml diff --git a/ansible/vars/topo_dualtor-aa.yml b/sonic-mgmt/ansible/vars/topo_dualtor-aa.yml similarity index 100% rename from ansible/vars/topo_dualtor-aa.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-aa.yml diff --git a/ansible/vars/topo_dualtor-mixed-120.yml b/sonic-mgmt/ansible/vars/topo_dualtor-mixed-120.yml similarity index 100% rename from ansible/vars/topo_dualtor-mixed-120.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-mixed-120.yml diff --git a/ansible/vars/topo_dualtor-mixed-56.yml b/sonic-mgmt/ansible/vars/topo_dualtor-mixed-56.yml similarity index 100% rename from ansible/vars/topo_dualtor-mixed-56.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-mixed-56.yml diff --git a/ansible/vars/topo_dualtor-mixed.yml b/sonic-mgmt/ansible/vars/topo_dualtor-mixed.yml similarity index 100% rename from ansible/vars/topo_dualtor-mixed.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-mixed.yml diff --git a/ansible/vars/topo_dualtor-vpp.yml b/sonic-mgmt/ansible/vars/topo_dualtor-vpp.yml similarity index 100% rename from ansible/vars/topo_dualtor-vpp.yml rename to sonic-mgmt/ansible/vars/topo_dualtor-vpp.yml diff --git a/ansible/vars/topo_dualtor.yml b/sonic-mgmt/ansible/vars/topo_dualtor.yml similarity index 100% rename from ansible/vars/topo_dualtor.yml rename to sonic-mgmt/ansible/vars/topo_dualtor.yml diff --git a/ansible/vars/topo_force10-7nodes.yml b/sonic-mgmt/ansible/vars/topo_force10-7nodes.yml similarity index 100% rename from ansible/vars/topo_force10-7nodes.yml rename to sonic-mgmt/ansible/vars/topo_force10-7nodes.yml diff --git a/ansible/vars/topo_ft2-16.yml b/sonic-mgmt/ansible/vars/topo_ft2-16.yml similarity index 100% rename from ansible/vars/topo_ft2-16.yml rename to sonic-mgmt/ansible/vars/topo_ft2-16.yml diff --git a/ansible/vars/topo_ft2-64.yml b/sonic-mgmt/ansible/vars/topo_ft2-64.yml similarity index 100% rename from ansible/vars/topo_ft2-64.yml rename to sonic-mgmt/ansible/vars/topo_ft2-64.yml diff --git a/ansible/vars/topo_ft2-o128.yml b/sonic-mgmt/ansible/vars/topo_ft2-o128.yml similarity index 100% rename from ansible/vars/topo_ft2-o128.yml rename to sonic-mgmt/ansible/vars/topo_ft2-o128.yml diff --git a/ansible/vars/topo_fullmesh.yml b/sonic-mgmt/ansible/vars/topo_fullmesh.yml similarity index 100% rename from ansible/vars/topo_fullmesh.yml rename to sonic-mgmt/ansible/vars/topo_fullmesh.yml diff --git a/ansible/vars/topo_lrh_min.yml b/sonic-mgmt/ansible/vars/topo_lrh_min.yml similarity index 100% rename from ansible/vars/topo_lrh_min.yml rename to sonic-mgmt/ansible/vars/topo_lrh_min.yml diff --git a/ansible/vars/topo_lt2-o128.yml b/sonic-mgmt/ansible/vars/topo_lt2-o128.yml similarity index 100% rename from ansible/vars/topo_lt2-o128.yml rename to sonic-mgmt/ansible/vars/topo_lt2-o128.yml diff --git a/ansible/vars/topo_lt2-o256-u32d224.yml b/sonic-mgmt/ansible/vars/topo_lt2-o256-u32d224.yml similarity index 100% rename from ansible/vars/topo_lt2-o256-u32d224.yml rename to sonic-mgmt/ansible/vars/topo_lt2-o256-u32d224.yml diff --git a/ansible/vars/topo_lt2-p32o64.yml b/sonic-mgmt/ansible/vars/topo_lt2-p32o64.yml similarity index 100% rename from ansible/vars/topo_lt2-p32o64.yml rename to sonic-mgmt/ansible/vars/topo_lt2-p32o64.yml diff --git a/ansible/vars/topo_m0-2vlan.yml b/sonic-mgmt/ansible/vars/topo_m0-2vlan.yml similarity index 100% rename from ansible/vars/topo_m0-2vlan.yml rename to sonic-mgmt/ansible/vars/topo_m0-2vlan.yml diff --git a/ansible/vars/topo_m0.yml b/sonic-mgmt/ansible/vars/topo_m0.yml similarity index 100% rename from ansible/vars/topo_m0.yml rename to sonic-mgmt/ansible/vars/topo_m0.yml diff --git a/ansible/vars/topo_m1-108.yml b/sonic-mgmt/ansible/vars/topo_m1-108.yml similarity index 100% rename from ansible/vars/topo_m1-108.yml rename to sonic-mgmt/ansible/vars/topo_m1-108.yml diff --git a/ansible/vars/topo_m1-128.yml b/sonic-mgmt/ansible/vars/topo_m1-128.yml similarity index 100% rename from ansible/vars/topo_m1-128.yml rename to sonic-mgmt/ansible/vars/topo_m1-128.yml diff --git a/ansible/vars/topo_m1-44.yml b/sonic-mgmt/ansible/vars/topo_m1-44.yml similarity index 100% rename from ansible/vars/topo_m1-44.yml rename to sonic-mgmt/ansible/vars/topo_m1-44.yml diff --git a/ansible/vars/topo_m1-48.yml b/sonic-mgmt/ansible/vars/topo_m1-48.yml similarity index 100% rename from ansible/vars/topo_m1-48.yml rename to sonic-mgmt/ansible/vars/topo_m1-48.yml diff --git a/ansible/vars/topo_mc0.yml b/sonic-mgmt/ansible/vars/topo_mc0.yml similarity index 100% rename from ansible/vars/topo_mc0.yml rename to sonic-mgmt/ansible/vars/topo_mc0.yml diff --git a/ansible/vars/topo_mgmttor.yml b/sonic-mgmt/ansible/vars/topo_mgmttor.yml similarity index 100% rename from ansible/vars/topo_mgmttor.yml rename to sonic-mgmt/ansible/vars/topo_mgmttor.yml diff --git a/ansible/vars/topo_msft-LC-48H-O.yml b/sonic-mgmt/ansible/vars/topo_msft-LC-48H-O.yml similarity index 100% rename from ansible/vars/topo_msft-LC-48H-O.yml rename to sonic-mgmt/ansible/vars/topo_msft-LC-48H-O.yml diff --git a/ansible/vars/topo_msft-RP-O.yml b/sonic-mgmt/ansible/vars/topo_msft-RP-O.yml similarity index 100% rename from ansible/vars/topo_msft-RP-O.yml rename to sonic-mgmt/ansible/vars/topo_msft-RP-O.yml diff --git a/ansible/vars/topo_msft_four_asic_vs.yml b/sonic-mgmt/ansible/vars/topo_msft_four_asic_vs.yml similarity index 100% rename from ansible/vars/topo_msft_four_asic_vs.yml rename to sonic-mgmt/ansible/vars/topo_msft_four_asic_vs.yml diff --git a/ansible/vars/topo_msft_multi_asic_vs.yml b/sonic-mgmt/ansible/vars/topo_msft_multi_asic_vs.yml similarity index 100% rename from ansible/vars/topo_msft_multi_asic_vs.yml rename to sonic-mgmt/ansible/vars/topo_msft_multi_asic_vs.yml diff --git a/ansible/vars/topo_mx.yml b/sonic-mgmt/ansible/vars/topo_mx.yml similarity index 100% rename from ansible/vars/topo_mx.yml rename to sonic-mgmt/ansible/vars/topo_mx.yml diff --git a/ansible/vars/topo_ocs.yml b/sonic-mgmt/ansible/vars/topo_ocs.yml similarity index 100% rename from ansible/vars/topo_ocs.yml rename to sonic-mgmt/ansible/vars/topo_ocs.yml diff --git a/ansible/vars/topo_ptf32.yml b/sonic-mgmt/ansible/vars/topo_ptf32.yml similarity index 100% rename from ansible/vars/topo_ptf32.yml rename to sonic-mgmt/ansible/vars/topo_ptf32.yml diff --git a/ansible/vars/topo_ptf64.yml b/sonic-mgmt/ansible/vars/topo_ptf64.yml similarity index 100% rename from ansible/vars/topo_ptf64.yml rename to sonic-mgmt/ansible/vars/topo_ptf64.yml diff --git a/ansible/vars/topo_ptp-130.yml b/sonic-mgmt/ansible/vars/topo_ptp-130.yml similarity index 100% rename from ansible/vars/topo_ptp-130.yml rename to sonic-mgmt/ansible/vars/topo_ptp-130.yml diff --git a/ansible/vars/topo_ptp-256.yml b/sonic-mgmt/ansible/vars/topo_ptp-256.yml similarity index 100% rename from ansible/vars/topo_ptp-256.yml rename to sonic-mgmt/ansible/vars/topo_ptp-256.yml diff --git a/ansible/vars/topo_ptp-32.yml b/sonic-mgmt/ansible/vars/topo_ptp-32.yml similarity index 100% rename from ansible/vars/topo_ptp-32.yml rename to sonic-mgmt/ansible/vars/topo_ptp-32.yml diff --git a/ansible/vars/topo_ptp-34.yml b/sonic-mgmt/ansible/vars/topo_ptp-34.yml similarity index 100% rename from ansible/vars/topo_ptp-34.yml rename to sonic-mgmt/ansible/vars/topo_ptp-34.yml diff --git a/ansible/vars/topo_ptp-512.yml b/sonic-mgmt/ansible/vars/topo_ptp-512.yml similarity index 100% rename from ansible/vars/topo_ptp-512.yml rename to sonic-mgmt/ansible/vars/topo_ptp-512.yml diff --git a/ansible/vars/topo_ptp-56.yml b/sonic-mgmt/ansible/vars/topo_ptp-56.yml similarity index 100% rename from ansible/vars/topo_ptp-56.yml rename to sonic-mgmt/ansible/vars/topo_ptp-56.yml diff --git a/ansible/vars/topo_ptp-64.yml b/sonic-mgmt/ansible/vars/topo_ptp-64.yml similarity index 100% rename from ansible/vars/topo_ptp-64.yml rename to sonic-mgmt/ansible/vars/topo_ptp-64.yml diff --git a/ansible/vars/topo_ptp-66.yml b/sonic-mgmt/ansible/vars/topo_ptp-66.yml similarity index 100% rename from ansible/vars/topo_ptp-66.yml rename to sonic-mgmt/ansible/vars/topo_ptp-66.yml diff --git a/ansible/vars/topo_ptp-96.yml b/sonic-mgmt/ansible/vars/topo_ptp-96.yml similarity index 100% rename from ansible/vars/topo_ptp-96.yml rename to sonic-mgmt/ansible/vars/topo_ptp-96.yml diff --git a/ansible/vars/topo_smartswitch-t1.yml b/sonic-mgmt/ansible/vars/topo_smartswitch-t1.yml similarity index 100% rename from ansible/vars/topo_smartswitch-t1.yml rename to sonic-mgmt/ansible/vars/topo_smartswitch-t1.yml diff --git a/ansible/vars/topo_t0-116.yml b/sonic-mgmt/ansible/vars/topo_t0-116.yml similarity index 100% rename from ansible/vars/topo_t0-116.yml rename to sonic-mgmt/ansible/vars/topo_t0-116.yml diff --git a/ansible/vars/topo_t0-118.yml b/sonic-mgmt/ansible/vars/topo_t0-118.yml similarity index 100% rename from ansible/vars/topo_t0-118.yml rename to sonic-mgmt/ansible/vars/topo_t0-118.yml diff --git a/ansible/vars/topo_t0-120.yml b/sonic-mgmt/ansible/vars/topo_t0-120.yml similarity index 100% rename from ansible/vars/topo_t0-120.yml rename to sonic-mgmt/ansible/vars/topo_t0-120.yml diff --git a/ansible/vars/topo_t0-16.yml b/sonic-mgmt/ansible/vars/topo_t0-16.yml similarity index 100% rename from ansible/vars/topo_t0-16.yml rename to sonic-mgmt/ansible/vars/topo_t0-16.yml diff --git a/ansible/vars/topo_t0-28.yml b/sonic-mgmt/ansible/vars/topo_t0-28.yml similarity index 100% rename from ansible/vars/topo_t0-28.yml rename to sonic-mgmt/ansible/vars/topo_t0-28.yml diff --git a/ansible/vars/topo_t0-35.yml b/sonic-mgmt/ansible/vars/topo_t0-35.yml similarity index 100% rename from ansible/vars/topo_t0-35.yml rename to sonic-mgmt/ansible/vars/topo_t0-35.yml diff --git a/ansible/vars/topo_t0-52.yml b/sonic-mgmt/ansible/vars/topo_t0-52.yml similarity index 100% rename from ansible/vars/topo_t0-52.yml rename to sonic-mgmt/ansible/vars/topo_t0-52.yml diff --git a/ansible/vars/topo_t0-54-po2vlan.yml b/sonic-mgmt/ansible/vars/topo_t0-54-po2vlan.yml similarity index 100% rename from ansible/vars/topo_t0-54-po2vlan.yml rename to sonic-mgmt/ansible/vars/topo_t0-54-po2vlan.yml diff --git a/ansible/vars/topo_t0-56-d48c8.yml b/sonic-mgmt/ansible/vars/topo_t0-56-d48c8.yml similarity index 100% rename from ansible/vars/topo_t0-56-d48c8.yml rename to sonic-mgmt/ansible/vars/topo_t0-56-d48c8.yml diff --git a/ansible/vars/topo_t0-56-o8v48.yml b/sonic-mgmt/ansible/vars/topo_t0-56-o8v48.yml similarity index 100% rename from ansible/vars/topo_t0-56-o8v48.yml rename to sonic-mgmt/ansible/vars/topo_t0-56-o8v48.yml diff --git a/ansible/vars/topo_t0-56-po2vlan.yml b/sonic-mgmt/ansible/vars/topo_t0-56-po2vlan.yml similarity index 100% rename from ansible/vars/topo_t0-56-po2vlan.yml rename to sonic-mgmt/ansible/vars/topo_t0-56-po2vlan.yml diff --git a/ansible/vars/topo_t0-56.yml b/sonic-mgmt/ansible/vars/topo_t0-56.yml similarity index 100% rename from ansible/vars/topo_t0-56.yml rename to sonic-mgmt/ansible/vars/topo_t0-56.yml diff --git a/ansible/vars/topo_t0-64-32.yml b/sonic-mgmt/ansible/vars/topo_t0-64-32.yml similarity index 100% rename from ansible/vars/topo_t0-64-32.yml rename to sonic-mgmt/ansible/vars/topo_t0-64-32.yml diff --git a/ansible/vars/topo_t0-64.yml b/sonic-mgmt/ansible/vars/topo_t0-64.yml similarity index 100% rename from ansible/vars/topo_t0-64.yml rename to sonic-mgmt/ansible/vars/topo_t0-64.yml diff --git a/ansible/vars/topo_t0-8-lag.yml b/sonic-mgmt/ansible/vars/topo_t0-8-lag.yml similarity index 100% rename from ansible/vars/topo_t0-8-lag.yml rename to sonic-mgmt/ansible/vars/topo_t0-8-lag.yml diff --git a/ansible/vars/topo_t0-80.yml b/sonic-mgmt/ansible/vars/topo_t0-80.yml similarity index 100% rename from ansible/vars/topo_t0-80.yml rename to sonic-mgmt/ansible/vars/topo_t0-80.yml diff --git a/ansible/vars/topo_t0-88-o8c80.yml b/sonic-mgmt/ansible/vars/topo_t0-88-o8c80.yml similarity index 100% rename from ansible/vars/topo_t0-88-o8c80.yml rename to sonic-mgmt/ansible/vars/topo_t0-88-o8c80.yml diff --git a/ansible/vars/topo_t0-backend.yml b/sonic-mgmt/ansible/vars/topo_t0-backend.yml similarity index 100% rename from ansible/vars/topo_t0-backend.yml rename to sonic-mgmt/ansible/vars/topo_t0-backend.yml diff --git a/ansible/vars/topo_t0-d18u8s4.yml b/sonic-mgmt/ansible/vars/topo_t0-d18u8s4.yml similarity index 100% rename from ansible/vars/topo_t0-d18u8s4.yml rename to sonic-mgmt/ansible/vars/topo_t0-d18u8s4.yml diff --git a/ansible/vars/topo_t0-f2-d40u8-po2vlan.yml b/sonic-mgmt/ansible/vars/topo_t0-f2-d40u8-po2vlan.yml similarity index 100% rename from ansible/vars/topo_t0-f2-d40u8-po2vlan.yml rename to sonic-mgmt/ansible/vars/topo_t0-f2-d40u8-po2vlan.yml diff --git a/ansible/vars/topo_t0-f2-d40u8.yml b/sonic-mgmt/ansible/vars/topo_t0-f2-d40u8.yml similarity index 100% rename from ansible/vars/topo_t0-f2-d40u8.yml rename to sonic-mgmt/ansible/vars/topo_t0-f2-d40u8.yml diff --git a/ansible/vars/topo_t0-isolated-d128u128s1.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d128u128s1.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d128u128s1.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d128u128s1.yml diff --git a/ansible/vars/topo_t0-isolated-d128u128s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d128u128s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d128u128s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d128u128s2.yml diff --git a/ansible/vars/topo_t0-isolated-d16u16s1.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d16u16s1.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d16u16s1.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d16u16s1.yml diff --git a/ansible/vars/topo_t0-isolated-d16u16s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d16u16s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d16u16s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d16u16s2.yml diff --git a/ansible/vars/topo_t0-isolated-d256u256s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d256u256s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d256u256s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d256u256s2.yml diff --git a/ansible/vars/topo_t0-isolated-d2u254.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d2u254.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d2u254.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d2u254.yml diff --git a/ansible/vars/topo_t0-isolated-d2u254s1.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d2u254s1.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d2u254s1.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d2u254s1.yml diff --git a/ansible/vars/topo_t0-isolated-d2u254s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d2u254s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d2u254s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d2u254s2.yml diff --git a/ansible/vars/topo_t0-isolated-d2u510.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d2u510.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d2u510.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d2u510.yml diff --git a/ansible/vars/topo_t0-isolated-d2u510s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d2u510s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d2u510s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d2u510s2.yml diff --git a/ansible/vars/topo_t0-isolated-d32u32s2-mix.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d32u32s2-mix.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d32u32s2-mix.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d32u32s2-mix.yml diff --git a/ansible/vars/topo_t0-isolated-d32u32s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d32u32s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d32u32s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d32u32s2.yml diff --git a/ansible/vars/topo_t0-isolated-d96u32s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-d96u32s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-d96u32s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-d96u32s2.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d128u128s1.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d128u128s1.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d128u128s1.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d128u128s1.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d128u128s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d128u128s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d128u128s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d128u128s2.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d16u16s1.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d16u16s1.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d16u16s1.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d16u16s1.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d16u16s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d16u16s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d16u16s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d16u16s2.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d256u256s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d256u256s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d256u256s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d256u256s2.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d32u32s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d32u32s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d32u32s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d32u32s2.yml diff --git a/ansible/vars/topo_t0-isolated-v6-d96u32s2.yml b/sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d96u32s2.yml similarity index 100% rename from ansible/vars/topo_t0-isolated-v6-d96u32s2.yml rename to sonic-mgmt/ansible/vars/topo_t0-isolated-v6-d96u32s2.yml diff --git a/ansible/vars/topo_t0-mclag.yml b/sonic-mgmt/ansible/vars/topo_t0-mclag.yml similarity index 100% rename from ansible/vars/topo_t0-mclag.yml rename to sonic-mgmt/ansible/vars/topo_t0-mclag.yml diff --git a/ansible/vars/topo_t0-standalone-128.yml b/sonic-mgmt/ansible/vars/topo_t0-standalone-128.yml similarity index 100% rename from ansible/vars/topo_t0-standalone-128.yml rename to sonic-mgmt/ansible/vars/topo_t0-standalone-128.yml diff --git a/ansible/vars/topo_t0-standalone-256.yml b/sonic-mgmt/ansible/vars/topo_t0-standalone-256.yml similarity index 100% rename from ansible/vars/topo_t0-standalone-256.yml rename to sonic-mgmt/ansible/vars/topo_t0-standalone-256.yml diff --git a/ansible/vars/topo_t0-standalone-32.yml b/sonic-mgmt/ansible/vars/topo_t0-standalone-32.yml similarity index 100% rename from ansible/vars/topo_t0-standalone-32.yml rename to sonic-mgmt/ansible/vars/topo_t0-standalone-32.yml diff --git a/ansible/vars/topo_t0-standalone-64.yml b/sonic-mgmt/ansible/vars/topo_t0-standalone-64.yml similarity index 100% rename from ansible/vars/topo_t0-standalone-64.yml rename to sonic-mgmt/ansible/vars/topo_t0-standalone-64.yml diff --git a/ansible/vars/topo_t0-vpp.yml b/sonic-mgmt/ansible/vars/topo_t0-vpp.yml similarity index 100% rename from ansible/vars/topo_t0-vpp.yml rename to sonic-mgmt/ansible/vars/topo_t0-vpp.yml diff --git a/ansible/vars/topo_t0.yml b/sonic-mgmt/ansible/vars/topo_t0.yml similarity index 100% rename from ansible/vars/topo_t0.yml rename to sonic-mgmt/ansible/vars/topo_t0.yml diff --git a/sonic-mgmt/ansible/vars/topo_t1-28-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-28-lag.yml new file mode 100644 index 00000000000..3081c6cd01c --- /dev/null +++ b/sonic-mgmt/ansible/vars/topo_t1-28-lag.yml @@ -0,0 +1,603 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + - 1 + vm_offset: 0 + ARISTA03T2: + vlans: + - 2 + - 3 + vm_offset: 1 + ARISTA05T2: + vlans: + - 4 + - 5 + vm_offset: 2 + ARISTA07T2: + vlans: + - 6 + - 7 + vm_offset: 3 + ARISTA09T2: + vlans: + - 8 + - 9 + vm_offset: 4 + ARISTA11T2: + vlans: + - 10 + - 11 + vm_offset: 5 + ARISTA13T2: + vlans: + - 12 + - 13 + vm_offset: 6 + ARISTA01T0: + vlans: + - 14 + vm_offset: 7 + ARISTA02T0: + vlans: + - 15 + vm_offset: 8 + ARISTA03T0: + vlans: + - 16 + vm_offset: 9 + ARISTA04T0: + vlans: + - 17 + vm_offset: 10 + ARISTA05T0: + vlans: + - 18 + vm_offset: 11 + ARISTA06T0: + vlans: + - 19 + vm_offset: 12 + ARISTA07T0: + vlans: + - 20 + vm_offset: 13 + ARISTA08T0: + vlans: + - 21 + vm_offset: 14 + ARISTA09T0: + vlans: + - 22 + vm_offset: 15 + ARISTA10T0: + vlans: + - 23 + vm_offset: 16 + ARISTA11T0: + vlans: + - 24 + vm_offset: 17 + ARISTA12T0: + vlans: + - 25 + vm_offset: 18 + ARISTA13T0: + vlans: + - 26 + vm_offset: 19 + ARISTA14T0: + vlans: + - 27 + vm_offset: 20 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + ARISTA11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + ARISTA13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 diff --git a/ansible/vars/topo_t1-32-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-32-lag.yml similarity index 100% rename from ansible/vars/topo_t1-32-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-32-lag.yml diff --git a/ansible/vars/topo_t1-48-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-48-lag.yml similarity index 100% rename from ansible/vars/topo_t1-48-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-48-lag.yml diff --git a/ansible/vars/topo_t1-56-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-56-lag.yml similarity index 100% rename from ansible/vars/topo_t1-56-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-56-lag.yml diff --git a/ansible/vars/topo_t1-64-lag-clet.yml b/sonic-mgmt/ansible/vars/topo_t1-64-lag-clet.yml similarity index 100% rename from ansible/vars/topo_t1-64-lag-clet.yml rename to sonic-mgmt/ansible/vars/topo_t1-64-lag-clet.yml diff --git a/ansible/vars/topo_t1-64-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-64-lag.yml similarity index 100% rename from ansible/vars/topo_t1-64-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-64-lag.yml diff --git a/ansible/vars/topo_t1-64.yml b/sonic-mgmt/ansible/vars/topo_t1-64.yml similarity index 100% rename from ansible/vars/topo_t1-64.yml rename to sonic-mgmt/ansible/vars/topo_t1-64.yml diff --git a/ansible/vars/topo_t1-8-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-8-lag.yml similarity index 100% rename from ansible/vars/topo_t1-8-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-8-lag.yml diff --git a/ansible/vars/topo_t1-backend.yml b/sonic-mgmt/ansible/vars/topo_t1-backend.yml similarity index 100% rename from ansible/vars/topo_t1-backend.yml rename to sonic-mgmt/ansible/vars/topo_t1-backend.yml diff --git a/ansible/vars/topo_t1-f2-d10u8.yml b/sonic-mgmt/ansible/vars/topo_t1-f2-d10u8.yml similarity index 100% rename from ansible/vars/topo_t1-f2-d10u8.yml rename to sonic-mgmt/ansible/vars/topo_t1-f2-d10u8.yml diff --git a/ansible/vars/topo_t1-filterleaf-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-filterleaf-lag.yml similarity index 100% rename from ansible/vars/topo_t1-filterleaf-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-filterleaf-lag.yml diff --git a/ansible/vars/topo_t1-isolated-d128.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d128.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d128.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d128.yml diff --git a/ansible/vars/topo_t1-isolated-d224u8.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d224u8.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d224u8.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d224u8.yml diff --git a/ansible/vars/topo_t1-isolated-d254u2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d254u2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d254u2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d254u2.yml diff --git a/ansible/vars/topo_t1-isolated-d254u2s1.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d254u2s1.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d254u2s1.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d254u2s1.yml diff --git a/ansible/vars/topo_t1-isolated-d254u2s2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d254u2s2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d254u2s2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d254u2s2.yml diff --git a/ansible/vars/topo_t1-isolated-d28u1.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d28u1.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d28u1.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d28u1.yml diff --git a/ansible/vars/topo_t1-isolated-d28u4.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d28u4.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d28u4.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d28u4.yml diff --git a/ansible/vars/topo_t1-isolated-d32.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d32.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d32.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d32.yml diff --git a/ansible/vars/topo_t1-isolated-d32u1s2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d32u1s2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d32u1s2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d32u1s2.yml diff --git a/ansible/vars/topo_t1-isolated-d448u15-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d448u15-lag.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d448u15-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d448u15-lag.yml diff --git a/ansible/vars/topo_t1-isolated-d448u16.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d448u16.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d448u16.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d448u16.yml diff --git a/ansible/vars/topo_t1-isolated-d508u1s2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d508u1s2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d508u1s2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d508u1s2.yml diff --git a/ansible/vars/topo_t1-isolated-d510u2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d510u2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d510u2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d510u2.yml diff --git a/ansible/vars/topo_t1-isolated-d510u2s2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d510u2s2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d510u2s2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d510u2s2.yml diff --git a/ansible/vars/topo_t1-isolated-d56u1-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d56u1-lag.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d56u1-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d56u1-lag.yml diff --git a/ansible/vars/topo_t1-isolated-d56u2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-d56u2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-d56u2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-d56u2.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d128.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d128.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d128.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d128.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d224u8.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d224u8.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d224u8.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d224u8.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d28u1.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d28u1.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d28u1.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d28u1.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d448u15-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d448u15-lag.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d448u15-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d448u15-lag.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d448u16.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d448u16.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d448u16.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d448u16.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d56u1-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d56u1-lag.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d56u1-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d56u1-lag.yml diff --git a/ansible/vars/topo_t1-isolated-v6-d56u2.yml b/sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d56u2.yml similarity index 100% rename from ansible/vars/topo_t1-isolated-v6-d56u2.yml rename to sonic-mgmt/ansible/vars/topo_t1-isolated-v6-d56u2.yml diff --git a/sonic-mgmt/ansible/vars/topo_t1-lag-dash-4.yml b/sonic-mgmt/ansible/vars/topo_t1-lag-dash-4.yml new file mode 100644 index 00000000000..6c805ee8cec --- /dev/null +++ b/sonic-mgmt/ansible/vars/topo_t1-lag-dash-4.yml @@ -0,0 +1,565 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + - 1 + vm_offset: 0 + ARISTA03T2: + vlans: + - 2 + - 3 + vm_offset: 1 + ARISTA05T2: + vlans: + - 4 + - 5 + vm_offset: 2 + ARISTA07T2: + vlans: + - 6 + - 7 + vm_offset: 3 + ARISTA01T0: + vlans: + - 8 + vm_offset: 4 + ARISTA02T0: + vlans: + - 9 + vm_offset: 5 + ARISTA03T0: + vlans: + - 10 + vm_offset: 6 + ARISTA04T0: + vlans: + - 11 + vm_offset: 7 + ARISTA05T0: + vlans: + - 12 + vm_offset: 8 + ARISTA06T0: + vlans: + - 13 + vm_offset: 9 + ARISTA07T0: + vlans: + - 14 + vm_offset: 10 + ARISTA08T0: + vlans: + - 15 + vm_offset: 11 + ARISTA09T0: + vlans: + - 16 + vm_offset: 12 + ARISTA10T0: + vlans: + - 17 + vm_offset: 13 + ARISTA11T0: + vlans: + - 18 + vm_offset: 14 + ARISTA12T0: + vlans: + - 19 + vm_offset: 15 + ARISTA13T0: + vlans: + - 20 + vm_offset: 16 + ARISTA14T0: + vlans: + - 21 + vm_offset: 17 + ARISTA15T0: + vlans: + - 22 + vm_offset: 18 + ARISTA16T0: + vlans: + - 23 + vm_offset: 19 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 + + ARISTA15T0: + properties: + - common + - tor + tornum: 15 + bgp: + asn: 64015 + peers: + 65100: + - 10.0.0.60 + - FC00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100::1f/128 + Ethernet1: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::3e/64 + + ARISTA16T0: + properties: + - common + - tor + tornum: 16 + bgp: + asn: 64016 + peers: + 65100: + - 10.0.0.62 + - FC00::7D + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100::20/128 + Ethernet1: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::41/64 \ No newline at end of file diff --git a/ansible/vars/topo_t1-28-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-lag-lightning.yml similarity index 86% rename from ansible/vars/topo_t1-28-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-lag-lightning.yml index c17de99876d..846e3f0984a 100644 --- a/ansible/vars/topo_t1-28-lag.yml +++ b/sonic-mgmt/ansible/vars/topo_t1-lag-lightning.yml @@ -7,98 +7,102 @@ topology: vm_offset: 0 ARISTA03T2: vlans: - - 2 - - 3 + - 4 + - 5 vm_offset: 1 ARISTA05T2: vlans: - - 4 - - 5 + - 8 + - 9 vm_offset: 2 ARISTA07T2: vlans: - - 6 - - 7 + - 12 + - 13 vm_offset: 3 - ARISTA01T0: + ARISTA09T2: vlans: - - 8 + - 16 + - 17 vm_offset: 4 - ARISTA02T0: + ARISTA11T2: vlans: - - 9 + - 20 + - 21 vm_offset: 5 - ARISTA03T0: + ARISTA13T2: vlans: - - 10 + - 24 + - 25 vm_offset: 6 - ARISTA04T0: + ARISTA15T2: vlans: - - 11 + - 28 + - 29 vm_offset: 7 - ARISTA05T0: + ARISTA01T0: vlans: - - 12 + - 32 vm_offset: 8 - ARISTA06T0: + ARISTA02T0: vlans: - - 13 + - 33 vm_offset: 9 - ARISTA07T0: + ARISTA03T0: vlans: - - 14 + - 36 vm_offset: 10 - ARISTA08T0: + ARISTA04T0: vlans: - - 15 + - 37 vm_offset: 11 - ARISTA09T0: + ARISTA05T0: vlans: - - 16 + - 40 vm_offset: 12 - ARISTA10T0: + ARISTA06T0: vlans: - - 17 + - 41 vm_offset: 13 - ARISTA11T0: + ARISTA07T0: vlans: - - 18 + - 44 vm_offset: 14 - ARISTA12T0: + ARISTA08T0: vlans: - - 19 + - 45 vm_offset: 15 - ARISTA13T0: + ARISTA09T0: vlans: - - 20 + - 48 vm_offset: 16 - ARISTA14T0: + ARISTA10T0: vlans: - - 21 + - 49 vm_offset: 17 - ARISTA15T0: + ARISTA11T0: vlans: - - 22 + - 52 vm_offset: 18 - ARISTA16T0: + ARISTA12T0: vlans: - - 23 + - 53 vm_offset: 19 - ARISTA17T0: + ARISTA13T0: vlans: - - 24 + - 56 vm_offset: 20 - ARISTA18T0: + ARISTA14T0: vlans: - - 25 + - 57 vm_offset: 21 - ARISTA19T0: + ARISTA15T0: vlans: - - 26 + - 60 vm_offset: 22 - ARISTA20T0: + ARISTA16T0: vlans: - - 27 + - 61 vm_offset: 23 configuration_properties: @@ -108,9 +112,9 @@ configuration_properties: nhipv4: 10.10.246.254 nhipv6: FC0A::FF podset_number: 200 - tor_number: 20 + tor_number: 16 tor_subnet_number: 2 - max_tor_subnet_number: 20 + max_tor_subnet_number: 16 tor_subnet_size: 128 spine: swrole: spine @@ -218,6 +222,106 @@ configuration: ipv4: 10.10.246.7/24 ipv6: fc0a::e/64 + ARISTA09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + ARISTA11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + ARISTA13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + ARISTA15T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.28 + - FC00::39 + interfaces: + Loopback0: + ipv4: 100.1.0.15/32 + ipv6: 2064:100::f/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.29/31 + ipv6: fc00::3a/126 + bp_interface: + ipv4: 10.10.246.15/24 + ipv6: fc0a::1e/64 + ARISTA01T0: properties: - common @@ -579,91 +683,3 @@ configuration: bp_interface: ipv4: 10.10.246.32/24 ipv6: fc0a::41/64 - - ARISTA17T0: - properties: - - common - - tor - tornum: 17 - bgp: - asn: 64017 - peers: - 65100: - - 10.0.0.64 - - FC00::81 - interfaces: - Loopback0: - ipv4: 100.1.0.33/32 - ipv6: 2064:100::21/128 - Ethernet1: - ipv4: 10.0.0.65/31 - ipv6: fc00::82/126 - bp_interface: - ipv4: 10.10.246.33/24 - ipv6: fc0a::42/64 - - ARISTA18T0: - properties: - - common - - tor - tornum: 18 - bgp: - asn: 64018 - peers: - 65100: - - 10.0.0.66 - - FC00::85 - interfaces: - Loopback0: - ipv4: 100.1.0.34/32 - ipv6: 2064:100::22/128 - Ethernet1: - ipv4: 10.0.0.67/31 - ipv6: fc00::86/126 - bp_interface: - ipv4: 10.10.246.34/24 - ipv6: fc0a::45/64 - - ARISTA19T0: - properties: - - common - - tor - tornum: 19 - bgp: - asn: 64019 - peers: - 65100: - - 10.0.0.68 - - FC00::89 - interfaces: - Loopback0: - ipv4: 100.1.0.35/32 - ipv6: 2064:100::23/128 - Ethernet1: - ipv4: 10.0.0.69/31 - ipv6: fc00::8a/126 - bp_interface: - ipv4: 10.10.246.35/24 - ipv6: fc0a::46/64 - - ARISTA20T0: - properties: - - common - - tor - tornum: 20 - bgp: - asn: 64020 - peers: - 65100: - - 10.0.0.70 - - FC00::8D - interfaces: - Loopback0: - ipv4: 100.1.0.36/32 - ipv6: 2064:100::24/128 - Ethernet1: - ipv4: 10.0.0.71/31 - ipv6: fc00::8e/126 - bp_interface: - ipv4: 10.10.246.36/24 - ipv6: fc0a::49/64 diff --git a/sonic-mgmt/ansible/vars/topo_t1-lag-superbolt.yml b/sonic-mgmt/ansible/vars/topo_t1-lag-superbolt.yml new file mode 100644 index 00000000000..15c0f389bc5 --- /dev/null +++ b/sonic-mgmt/ansible/vars/topo_t1-lag-superbolt.yml @@ -0,0 +1,685 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + - 2 + vm_offset: 0 + ARISTA03T2: + vlans: + - 8 + - 10 + vm_offset: 1 + ARISTA05T2: + vlans: + - 16 + - 18 + vm_offset: 2 + ARISTA07T2: + vlans: + - 24 + - 26 + vm_offset: 3 + ARISTA09T2: + vlans: + - 32 + - 34 + vm_offset: 4 + ARISTA11T2: + vlans: + - 40 + - 42 + vm_offset: 5 + ARISTA13T2: + vlans: + - 48 + - 50 + vm_offset: 6 + ARISTA15T2: + vlans: + - 56 + - 58 + vm_offset: 7 + ARISTA01T0: + vlans: + - 64 + vm_offset: 8 + ARISTA02T0: + vlans: + - 66 + vm_offset: 9 + ARISTA03T0: + vlans: + - 72 + vm_offset: 10 + ARISTA04T0: + vlans: + - 74 + vm_offset: 11 + ARISTA05T0: + vlans: + - 80 + vm_offset: 12 + ARISTA06T0: + vlans: + - 82 + vm_offset: 13 + ARISTA07T0: + vlans: + - 88 + vm_offset: 14 + ARISTA08T0: + vlans: + - 90 + vm_offset: 15 + ARISTA09T0: + vlans: + - 96 + vm_offset: 16 + ARISTA10T0: + vlans: + - 98 + vm_offset: 17 + ARISTA11T0: + vlans: + - 104 + vm_offset: 18 + ARISTA12T0: + vlans: + - 106 + vm_offset: 19 + ARISTA13T0: + vlans: + - 112 + vm_offset: 20 + ARISTA14T0: + vlans: + - 114 + vm_offset: 21 + ARISTA15T0: + vlans: + - 120 + vm_offset: 22 + ARISTA16T0: + vlans: + - 122 + vm_offset: 23 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + ARISTA11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + ARISTA13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + ARISTA15T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.28 + - FC00::39 + interfaces: + Loopback0: + ipv4: 100.1.0.15/32 + ipv6: 2064:100::f/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.29/31 + ipv6: fc00::3a/126 + bp_interface: + ipv4: 10.10.246.15/24 + ipv6: fc0a::1e/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 + + ARISTA15T0: + properties: + - common + - tor + tornum: 15 + bgp: + asn: 64015 + peers: + 65100: + - 10.0.0.60 + - FC00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100::1f/128 + Ethernet1: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::3e/64 + + ARISTA16T0: + properties: + - common + - tor + tornum: 16 + bgp: + asn: 64016 + peers: + 65100: + - 10.0.0.62 + - FC00::7D + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100::20/128 + Ethernet1: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::41/64 diff --git a/ansible/vars/topo_t1-lag-vpp.yml b/sonic-mgmt/ansible/vars/topo_t1-lag-vpp.yml similarity index 100% rename from ansible/vars/topo_t1-lag-vpp.yml rename to sonic-mgmt/ansible/vars/topo_t1-lag-vpp.yml diff --git a/ansible/vars/topo_t1-lag.yml b/sonic-mgmt/ansible/vars/topo_t1-lag.yml similarity index 100% rename from ansible/vars/topo_t1-lag.yml rename to sonic-mgmt/ansible/vars/topo_t1-lag.yml diff --git a/ansible/vars/topo_t1-smartswitch-ha.yml b/sonic-mgmt/ansible/vars/topo_t1-smartswitch-ha.yml similarity index 100% rename from ansible/vars/topo_t1-smartswitch-ha.yml rename to sonic-mgmt/ansible/vars/topo_t1-smartswitch-ha.yml diff --git a/ansible/vars/topo_t1-smartswitch.yml b/sonic-mgmt/ansible/vars/topo_t1-smartswitch.yml similarity index 100% rename from ansible/vars/topo_t1-smartswitch.yml rename to sonic-mgmt/ansible/vars/topo_t1-smartswitch.yml diff --git a/ansible/vars/topo_t1-vpp.yml b/sonic-mgmt/ansible/vars/topo_t1-vpp.yml similarity index 100% rename from ansible/vars/topo_t1-vpp.yml rename to sonic-mgmt/ansible/vars/topo_t1-vpp.yml diff --git a/ansible/vars/topo_t1.yml b/sonic-mgmt/ansible/vars/topo_t1.yml similarity index 100% rename from ansible/vars/topo_t1.yml rename to sonic-mgmt/ansible/vars/topo_t1.yml diff --git a/sonic-mgmt/ansible/vars/topo_t1_28_lag.yml b/sonic-mgmt/ansible/vars/topo_t1_28_lag.yml new file mode 100644 index 00000000000..3081c6cd01c --- /dev/null +++ b/sonic-mgmt/ansible/vars/topo_t1_28_lag.yml @@ -0,0 +1,603 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + - 1 + vm_offset: 0 + ARISTA03T2: + vlans: + - 2 + - 3 + vm_offset: 1 + ARISTA05T2: + vlans: + - 4 + - 5 + vm_offset: 2 + ARISTA07T2: + vlans: + - 6 + - 7 + vm_offset: 3 + ARISTA09T2: + vlans: + - 8 + - 9 + vm_offset: 4 + ARISTA11T2: + vlans: + - 10 + - 11 + vm_offset: 5 + ARISTA13T2: + vlans: + - 12 + - 13 + vm_offset: 6 + ARISTA01T0: + vlans: + - 14 + vm_offset: 7 + ARISTA02T0: + vlans: + - 15 + vm_offset: 8 + ARISTA03T0: + vlans: + - 16 + vm_offset: 9 + ARISTA04T0: + vlans: + - 17 + vm_offset: 10 + ARISTA05T0: + vlans: + - 18 + vm_offset: 11 + ARISTA06T0: + vlans: + - 19 + vm_offset: 12 + ARISTA07T0: + vlans: + - 20 + vm_offset: 13 + ARISTA08T0: + vlans: + - 21 + vm_offset: 14 + ARISTA09T0: + vlans: + - 22 + vm_offset: 15 + ARISTA10T0: + vlans: + - 23 + vm_offset: 16 + ARISTA11T0: + vlans: + - 24 + vm_offset: 17 + ARISTA12T0: + vlans: + - 25 + vm_offset: 18 + ARISTA13T0: + vlans: + - 26 + vm_offset: 19 + ARISTA14T0: + vlans: + - 27 + vm_offset: 20 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.0 + - FC00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100::1/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.1/24 + ipv6: fc0a::2/64 + + ARISTA03T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.4 + - FC00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100::3/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::6/64 + + ARISTA05T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.8 + - FC00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100::5/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::a/64 + + ARISTA07T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.12 + - FC00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100::7/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::e/64 + + ARISTA09T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.16 + - FC00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100::9/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::12/64 + + ARISTA11T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.20 + - FC00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100::b/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::16/64 + + ARISTA13T2: + properties: + - common + - spine + bgp: + asn: 65200 + peers: + 65100: + - 10.0.0.24 + - FC00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100::d/128 + Ethernet1: + lacp: 1 + Ethernet2: + lacp: 1 + Port-Channel1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::1a/64 + + ARISTA01T0: + properties: + - common + - tor + tornum: 1 + bgp: + asn: 64001 + peers: + 65100: + - 10.0.0.32 + - FC00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100::11/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::22/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA02T0: + properties: + - common + - tor + tornum: 2 + bgp: + asn: 64002 + peers: + 65100: + - 10.0.0.34 + - FC00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100::12/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::25/64 + + ARISTA03T0: + properties: + - common + - tor + tornum: 3 + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 + vips: + ipv4: + prefixes: + - 200.0.1.0/26 + asn: 64700 + + ARISTA04T0: + properties: + - common + - tor + tornum: 4 + bgp: + asn: 64004 + peers: + 65100: + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100::14/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::29/64 + + ARISTA05T0: + properties: + - common + - tor + tornum: 5 + bgp: + asn: 64005 + peers: + 65100: + - 10.0.0.40 + - FC00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100::15/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::2a/64 + + ARISTA06T0: + properties: + - common + - tor + tornum: 6 + bgp: + asn: 64006 + peers: + 65100: + - 10.0.0.42 + - FC00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100::16/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::2d/64 + + ARISTA07T0: + properties: + - common + - tor + tornum: 7 + bgp: + asn: 64007 + peers: + 65100: + - 10.0.0.44 + - FC00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100::17/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::2e/64 + + ARISTA08T0: + properties: + - common + - tor + tornum: 8 + bgp: + asn: 64008 + peers: + 65100: + - 10.0.0.46 + - FC00::5D + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100::18/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::31/64 + + ARISTA09T0: + properties: + - common + - tor + tornum: 9 + bgp: + asn: 64009 + peers: + 65100: + - 10.0.0.48 + - FC00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100::19/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::32/64 + + ARISTA10T0: + properties: + - common + - tor + tornum: 10 + bgp: + asn: 64010 + peers: + 65100: + - 10.0.0.50 + - FC00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100::1a/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::35/64 + + ARISTA11T0: + properties: + - common + - tor + tornum: 11 + bgp: + asn: 64011 + peers: + 65100: + - 10.0.0.52 + - FC00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100::1b/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::36/64 + + ARISTA12T0: + properties: + - common + - tor + tornum: 12 + bgp: + asn: 64012 + peers: + 65100: + - 10.0.0.54 + - FC00::6D + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100::1c/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::39/64 + + ARISTA13T0: + properties: + - common + - tor + tornum: 13 + bgp: + asn: 64013 + peers: + 65100: + - 10.0.0.56 + - FC00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100::1d/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::3a/64 + + ARISTA14T0: + properties: + - common + - tor + tornum: 14 + bgp: + asn: 64014 + peers: + 65100: + - 10.0.0.58 + - FC00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100::1e/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::3d/64 diff --git a/ansible/vars/topo_t2-isolated-d128s2.yml b/sonic-mgmt/ansible/vars/topo_t2-isolated-d128s2.yml similarity index 100% rename from ansible/vars/topo_t2-isolated-d128s2.yml rename to sonic-mgmt/ansible/vars/topo_t2-isolated-d128s2.yml diff --git a/ansible/vars/topo_t2-ixia-2lc-4.yml b/sonic-mgmt/ansible/vars/topo_t2-ixia-2lc-4.yml similarity index 100% rename from ansible/vars/topo_t2-ixia-2lc-4.yml rename to sonic-mgmt/ansible/vars/topo_t2-ixia-2lc-4.yml diff --git a/ansible/vars/topo_t2-ixia-3lc-4.yml b/sonic-mgmt/ansible/vars/topo_t2-ixia-3lc-4.yml similarity index 100% rename from ansible/vars/topo_t2-ixia-3lc-4.yml rename to sonic-mgmt/ansible/vars/topo_t2-ixia-3lc-4.yml diff --git a/ansible/vars/topo_t2.yml b/sonic-mgmt/ansible/vars/topo_t2.yml similarity index 100% rename from ansible/vars/topo_t2.yml rename to sonic-mgmt/ansible/vars/topo_t2.yml diff --git a/ansible/vars/topo_t2_2lc_36p-masic.yml b/sonic-mgmt/ansible/vars/topo_t2_2lc_36p-masic.yml similarity index 100% rename from ansible/vars/topo_t2_2lc_36p-masic.yml rename to sonic-mgmt/ansible/vars/topo_t2_2lc_36p-masic.yml diff --git a/ansible/vars/topo_t2_2lc_min_ports-masic.yml b/sonic-mgmt/ansible/vars/topo_t2_2lc_min_ports-masic.yml similarity index 100% rename from ansible/vars/topo_t2_2lc_min_ports-masic.yml rename to sonic-mgmt/ansible/vars/topo_t2_2lc_min_ports-masic.yml diff --git a/ansible/vars/topo_t2_5lc-mixed-96.yml b/sonic-mgmt/ansible/vars/topo_t2_5lc-mixed-96.yml similarity index 100% rename from ansible/vars/topo_t2_5lc-mixed-96.yml rename to sonic-mgmt/ansible/vars/topo_t2_5lc-mixed-96.yml diff --git a/ansible/vars/topo_t2_single_node_max.yml b/sonic-mgmt/ansible/vars/topo_t2_single_node_max.yml similarity index 100% rename from ansible/vars/topo_t2_single_node_max.yml rename to sonic-mgmt/ansible/vars/topo_t2_single_node_max.yml diff --git a/ansible/vars/topo_t2_single_node_max_64p.yml b/sonic-mgmt/ansible/vars/topo_t2_single_node_max_64p.yml similarity index 100% rename from ansible/vars/topo_t2_single_node_max_64p.yml rename to sonic-mgmt/ansible/vars/topo_t2_single_node_max_64p.yml diff --git a/ansible/vars/topo_t2_single_node_max_64p_v2.yml b/sonic-mgmt/ansible/vars/topo_t2_single_node_max_64p_v2.yml similarity index 100% rename from ansible/vars/topo_t2_single_node_max_64p_v2.yml rename to sonic-mgmt/ansible/vars/topo_t2_single_node_max_64p_v2.yml diff --git a/ansible/vars/topo_t2_single_node_min.yml b/sonic-mgmt/ansible/vars/topo_t2_single_node_min.yml similarity index 100% rename from ansible/vars/topo_t2_single_node_min.yml rename to sonic-mgmt/ansible/vars/topo_t2_single_node_min.yml diff --git a/ansible/vars/topo_t2_tgen_route_conv.yml b/sonic-mgmt/ansible/vars/topo_t2_tgen_route_conv.yml similarity index 100% rename from ansible/vars/topo_t2_tgen_route_conv.yml rename to sonic-mgmt/ansible/vars/topo_t2_tgen_route_conv.yml diff --git a/ansible/vars/topo_t2_tgen_route_conv_pizzabox.yml b/sonic-mgmt/ansible/vars/topo_t2_tgen_route_conv_pizzabox.yml similarity index 100% rename from ansible/vars/topo_t2_tgen_route_conv_pizzabox.yml rename to sonic-mgmt/ansible/vars/topo_t2_tgen_route_conv_pizzabox.yml diff --git a/ansible/vars/topo_tgen-t0-3.yml b/sonic-mgmt/ansible/vars/topo_tgen-t0-3.yml similarity index 100% rename from ansible/vars/topo_tgen-t0-3.yml rename to sonic-mgmt/ansible/vars/topo_tgen-t0-3.yml diff --git a/ansible/vars/topo_tgen-t0-35-3.yml b/sonic-mgmt/ansible/vars/topo_tgen-t0-35-3.yml similarity index 100% rename from ansible/vars/topo_tgen-t0-35-3.yml rename to sonic-mgmt/ansible/vars/topo_tgen-t0-35-3.yml diff --git a/ansible/vars/topo_tgen-t1-3-lag.yml b/sonic-mgmt/ansible/vars/topo_tgen-t1-3-lag.yml similarity index 100% rename from ansible/vars/topo_tgen-t1-3-lag.yml rename to sonic-mgmt/ansible/vars/topo_tgen-t1-3-lag.yml diff --git a/ansible/vars/topo_tgen-t1-64-3.yml b/sonic-mgmt/ansible/vars/topo_tgen-t1-64-3.yml similarity index 100% rename from ansible/vars/topo_tgen-t1-64-3.yml rename to sonic-mgmt/ansible/vars/topo_tgen-t1-64-3.yml diff --git a/ansible/vars/topo_tgen_t2_2lc_masic_route_conv.yml b/sonic-mgmt/ansible/vars/topo_tgen_t2_2lc_masic_route_conv.yml similarity index 100% rename from ansible/vars/topo_tgen_t2_2lc_masic_route_conv.yml rename to sonic-mgmt/ansible/vars/topo_tgen_t2_2lc_masic_route_conv.yml diff --git a/ansible/vars/topo_tgen_t2_2lc_masic_route_conv2.yml b/sonic-mgmt/ansible/vars/topo_tgen_t2_2lc_masic_route_conv2.yml similarity index 100% rename from ansible/vars/topo_tgen_t2_2lc_masic_route_conv2.yml rename to sonic-mgmt/ansible/vars/topo_tgen_t2_2lc_masic_route_conv2.yml diff --git a/ansible/vars/topo_tgen_t2_2lc_route_conv.yml b/sonic-mgmt/ansible/vars/topo_tgen_t2_2lc_route_conv.yml similarity index 100% rename from ansible/vars/topo_tgen_t2_2lc_route_conv.yml rename to sonic-mgmt/ansible/vars/topo_tgen_t2_2lc_route_conv.yml diff --git a/ansible/vars/topo_urh_min.yml b/sonic-mgmt/ansible/vars/topo_urh_min.yml similarity index 100% rename from ansible/vars/topo_urh_min.yml rename to sonic-mgmt/ansible/vars/topo_urh_min.yml diff --git a/ansible/vars/topo_wan-2dut.yml b/sonic-mgmt/ansible/vars/topo_wan-2dut.yml similarity index 100% rename from ansible/vars/topo_wan-2dut.yml rename to sonic-mgmt/ansible/vars/topo_wan-2dut.yml diff --git a/ansible/vars/topo_wan-3link-tg.yml b/sonic-mgmt/ansible/vars/topo_wan-3link-tg.yml similarity index 100% rename from ansible/vars/topo_wan-3link-tg.yml rename to sonic-mgmt/ansible/vars/topo_wan-3link-tg.yml diff --git a/ansible/vars/topo_wan-4link.yml b/sonic-mgmt/ansible/vars/topo_wan-4link.yml similarity index 100% rename from ansible/vars/topo_wan-4link.yml rename to sonic-mgmt/ansible/vars/topo_wan-4link.yml diff --git a/ansible/vars/topo_wan-ecmp.yml b/sonic-mgmt/ansible/vars/topo_wan-ecmp.yml similarity index 100% rename from ansible/vars/topo_wan-ecmp.yml rename to sonic-mgmt/ansible/vars/topo_wan-ecmp.yml diff --git a/ansible/vars/topo_wan-pub-cisco.yml b/sonic-mgmt/ansible/vars/topo_wan-pub-cisco.yml similarity index 100% rename from ansible/vars/topo_wan-pub-cisco.yml rename to sonic-mgmt/ansible/vars/topo_wan-pub-cisco.yml diff --git a/ansible/vars/topo_wan-pub-isis.yml b/sonic-mgmt/ansible/vars/topo_wan-pub-isis.yml similarity index 100% rename from ansible/vars/topo_wan-pub-isis.yml rename to sonic-mgmt/ansible/vars/topo_wan-pub-isis.yml diff --git a/ansible/vars/topo_wan-pub.yml b/sonic-mgmt/ansible/vars/topo_wan-pub.yml similarity index 100% rename from ansible/vars/topo_wan-pub.yml rename to sonic-mgmt/ansible/vars/topo_wan-pub.yml diff --git a/ansible/veos b/sonic-mgmt/ansible/veos similarity index 100% rename from ansible/veos rename to sonic-mgmt/ansible/veos diff --git a/ansible/veos.yml b/sonic-mgmt/ansible/veos.yml similarity index 100% rename from ansible/veos.yml rename to sonic-mgmt/ansible/veos.yml diff --git a/ansible/veos_tb b/sonic-mgmt/ansible/veos_tb similarity index 100% rename from ansible/veos_tb rename to sonic-mgmt/ansible/veos_tb diff --git a/ansible/veos_vtb b/sonic-mgmt/ansible/veos_vtb similarity index 100% rename from ansible/veos_vtb rename to sonic-mgmt/ansible/veos_vtb diff --git a/ansible/verify_config.py b/sonic-mgmt/ansible/verify_config.py similarity index 100% rename from ansible/verify_config.py rename to sonic-mgmt/ansible/verify_config.py diff --git a/ansible/vtestbed.yaml b/sonic-mgmt/ansible/vtestbed.yaml similarity index 100% rename from ansible/vtestbed.yaml rename to sonic-mgmt/ansible/vtestbed.yaml diff --git a/azure-pipelines.yml b/sonic-mgmt/azure-pipelines.yml similarity index 97% rename from azure-pipelines.yml rename to sonic-mgmt/azure-pipelines.yml index ee2860b5de3..465d34dd5e9 100644 --- a/azure-pipelines.yml +++ b/sonic-mgmt/azure-pipelines.yml @@ -82,7 +82,7 @@ stages: displayName: "Static Analysis" timeoutInMinutes: 10 continueOnError: false - pool: sonic-ubuntu-1c + pool: sonic-ubuntu-1c-2 steps: - template: .azure-pipelines/pre-commit-check.yml @@ -90,7 +90,7 @@ stages: displayName: "Validate Test Cases" timeoutInMinutes: 30 continueOnError: false - pool: sonic-ubuntu-1c + pool: sonic-ubuntu-1c-2 steps: - template: .azure-pipelines/pytest-collect-only.yml parameters: @@ -99,21 +99,21 @@ stages: - job: dependency_check displayName: "Dependency Check" timeoutInMinutes: 10 - pool: sonic-ubuntu-1c + pool: sonic-ubuntu-1c-2 steps: - template: .azure-pipelines/dependency-check.yml - job: markers_check displayName: "Markers Check" timeoutInMinutes: 10 - pool: sonic-ubuntu-1c + pool: sonic-ubuntu-1c-2 steps: - template: .azure-pipelines/markers-check.yml - job: meta_check displayName: "Meta check" timeoutInMinutes: 10 - pool: sonic-ubuntu-1c + pool: sonic-ubuntu-1c-2 steps: - template: .azure-pipelines/meta-check.yml diff --git a/docs/ECN-test-plan.md b/sonic-mgmt/docs/ECN-test-plan.md similarity index 100% rename from docs/ECN-test-plan.md rename to sonic-mgmt/docs/ECN-test-plan.md diff --git a/sonic-mgmt/docs/README.cisco.upstreaming.code.guidelines.md b/sonic-mgmt/docs/README.cisco.upstreaming.code.guidelines.md new file mode 100644 index 00000000000..bcaf204127b --- /dev/null +++ b/sonic-mgmt/docs/README.cisco.upstreaming.code.guidelines.md @@ -0,0 +1,425 @@ +# Upstreaming Code to sonic-mgmt: Pytest and SPyTest Contributions + +**Engineer's Guide — Internal Review → Upstream Contribution Workflow** + +Version 1.0 | March 2026 | *CONFIDENTIAL — Internal Use Only* + +--- + +## Table of Contents + +1. [Overview](#1-overview) +2. [Phase 1: Internal Review and Approval](#2-phase-1-internal-review-and-approval) +3. [Phase 2: Upstream Contribution to sonic-net/sonic-mgmt](#3-phase-2-upstream-contribution-to-sonic-netsonic-mgmt) +4. [Code Quality Guidelines](#4-code-quality-guidelines) +5. [End-to-End Workflow Summary](#5-end-to-end-workflow-summary) +6. [Common Pitfalls and Troubleshooting](#6-common-pitfalls-and-troubleshooting) +7. [Key Reference Links](#7-key-reference-links) +8. [Appendix A: Commit Message Template](#appendix-a-commit-message-template) +9. [Appendix B: Internal PR Description Template](#appendix-b-internal-pr-description-template) +10. [Appendix C: Upstream PR Description Template](#appendix-c-upstream-pr-description-template) + +--- + +## 1. Overview + +This document provides a step-by-step guide for engineers to contribute pytest and SPyTest automation code to the upstream SONiC **sonic-mgmt** repository hosted at [github.com/sonic-net/sonic-mgmt](https://github.com/sonic-net/sonic-mgmt). It covers the two-phase workflow required: first, submitting and getting approval through our **internal sonic-mgmt repository**, and then creating the upstream pull request to the SONiC community. + +### 1.1 Audience + +This guide is intended for test automation engineers, QA engineers, and developers who write pytest-based test cases or SPyTest scripts for SONiC features and need to contribute them to the open-source sonic-mgmt repository. + +### 1.2 Prerequisites + +- A GitHub account with two-factor authentication enabled +- Git installed locally with SSH keys configured for GitHub +- Familiarity with Python, pytest, and the SONiC testbed infrastructure +- Access to the internal sonic-mgmt repository +- Signed Individual Contributor License Agreement (ICLA) via the Linux Foundation EasyCLA process + +### 1.3 Repository Structure at a Glance + +The upstream sonic-mgmt repository is organized into several key directories. Understanding this structure is essential for placing your contributions correctly. + +| Directory | Purpose | +|---|---| +| `tests/` | Pytest and pytest-ansible based test infrastructure and test scripts. All new pytest-based tests go here. | +| `spytest/` | SPyTest framework, feature APIs, TextFSM templates, and SPyTest test scripts. SPyTest tests go under `spytest/tests/`. | +| `ansible/` | Testbed deployment, setup playbooks, and legacy automation code. | +| `docs/` | Test plans, testbed documentation, and pytest organization docs. | +| `test_reporting/` | Parsing, uploading, and processing JUnit XML test reports. | +| `.azure-pipelines/` | CI pipeline definitions for Azure DevOps. | + +--- + +## 2. Phase 1: Internal Review and Approval + +Before any code can be submitted upstream, it must first go through an **internal review cycle**. This ensures code quality, consistency with our test standards, and alignment with the team's testing strategy. + +### 2.1 Prepare Your Code Locally + +**1. Clone the internal repository** + +Clone the internal sonic-mgmt repository if you haven't already. Ensure your local clone is up to date with the latest main/master branch. + +```bash +git clone +cd sonic-mgmt +git checkout master && git pull origin master +``` + +**2. Create a feature branch** + +Use a descriptive branch name that reflects the feature or test area. + +```bash +git checkout -b / +``` + +Example: `git checkout -b sonic_dev/bgp-route-advertisement-tests` + +**3. Develop your test code** + +Write or update your pytest or SPyTest scripts following the guidelines in [Section 4](#4-code-quality-guidelines). + +**4. Commit your changes** + +Follow the SONiC commit message format with a `Signed-off-by` line. + +``` +[component/folder touched]: Description of your changes + +[List of changes] + +Signed-off-by: Your Name +``` + +Example: + +``` +tests/bgp: Add BGP route advertisement pytest cases + +* Added test_bgp_route_advertisement.py with prefix propagation tests +* Added conftest.py fixtures for multi-neighbor topology +* Updated docs/testplan/bgp_route_advertisement_testplan.md + +Signed-off-by: sonic_dev +``` + +**5. Push to the internal remote** + +```bash +git push origin / +``` + +### 2.2 Create an Internal Pull Request + +1. **Open a PR:** Navigate to the internal sonic-mgmt repository and create a pull request from your feature branch to the master/main branch. +2. **Fill in the PR template:** Provide a clear summary, type of change (test case new/improvement, framework new/improvement, or bug fix), approach, and testbed topology information. +3. **Assign reviewers:** Add appropriate team members as reviewers. At minimum, include your tech lead and one peer from the test automation team. +4. **Link related items:** Reference any internal tracking tickets, Jira issues, or test plan documents. + +### 2.3 Internal Review Checklist + +Reviewers will evaluate the PR against the following criteria: + +- [ ] Code follows Python and pytest best practices (PEP 8, proper fixtures, parametrization) +- [ ] Test cases have appropriate topology markers (e.g., `@pytest.mark.topology('t0', 't1')`) +- [ ] No proprietary or confidential information is included in the code +- [ ] All hardcoded values are replaced with configurable parameters or fixtures +- [ ] Tests pass successfully on the internal testbed +- [ ] Documentation and test plan (if applicable) are included +- [ ] No vendor-specific or platform-specific assumptions unless properly guarded +- [ ] SPyTest scripts use proper Feature API abstractions and TextFSM templates +- [ ] Pre-commit checks pass (flake8, pylint as configured in the repo) + +> **⚠️ Important:** Ensure that no internal IP addresses, hostnames, credentials, proprietary API endpoints, or internal tool references exist anywhere in the code before marking the PR as ready for upstream. + +### 2.4 Approval and Merge + +Once all reviewers have approved and all CI checks pass, the internal PR will be merged into the internal master branch. At this point, the code is cleared for upstream submission. Your tech lead or team lead will **explicitly confirm** the upstream go-ahead. + +> **📝 Note:** Keep a record of the internal PR number and approval confirmation. You may need to reference it during the upstream PR process. + +--- + +## 3. Phase 2: Upstream Contribution to sonic-net/sonic-mgmt + +After internal approval, you can proceed to submit your code to the upstream SONiC community repository. This phase involves interacting with the open-source community and the Linux Foundation's CLA process. + +### 3.1 One-Time Setup: Sign the CLA + +All contributors to SONiC repositories must sign an **Individual Contributor License Agreement (ICLA)** before their first contribution can be accepted. This is managed through the Linux Foundation's [EasyCLA](https://docs.linuxfoundation.org/lfx/easycla) system. + +1. **Submit your first PR:** When you create your first pull request on any sonic-net repository, the EasyCLA bot will automatically check your CLA status. +2. **Follow the EasyCLA prompts:** If you have not signed the ICLA, the bot will display a link. Click it to navigate to the CLA Contributor Console. +3. **Sign the ICLA:** Choose "Proceed as an Individual Contributor," review the embargo compliance terms, and sign the document via DocuSign. +4. **Verify status:** After signing, return to your PR. Refresh the page and the EasyCLA check should now show a green check mark. If it does not update, comment `/easycla` on the PR to re-trigger the check. + +> **📝 Note:** The ICLA only needs to be signed once. It covers all future contributions to any sonic-net repository. + +### 3.2 Fork and Clone the Upstream Repository + +**1. Fork the repo** + +Go to [https://github.com/sonic-net/sonic-mgmt](https://github.com/sonic-net/sonic-mgmt) and click the **"Fork"** button in the upper-right corner. This creates a copy of the repository under your GitHub account. + +**2. Clone your fork** + +```bash +git clone https://github.com//sonic-mgmt.git +cd sonic-mgmt +``` + +**3. Add the upstream remote** + +```bash +git remote add upstream https://github.com/sonic-net/sonic-mgmt.git +``` + +**4. Sync with upstream** + +Always sync before starting work to avoid conflicts. + +```bash +git fetch upstream +git checkout master +git merge upstream/master +``` + +### 3.3 Prepare Your Upstream Branch + +1. **Create a clean branch** based on the latest upstream master: + ```bash + git checkout -b + ``` + +2. **Cherry-pick or apply your changes:** Apply only the commits that were approved in the internal review. Do not include any internal-only configurations or references. + +3. **Verify the commit message format:** Ensure each commit follows the SONiC standard format with the `Signed-off-by` line. + +4. **Run pre-commit checks locally:** The sonic-mgmt repo includes pre-commit hook configurations. Ensure your changes pass all linting and static analysis checks. + ```bash + pre-commit run --all-files + ``` + +### 3.4 Create the Upstream Pull Request + +**1. Push to your fork** + +```bash +git push origin +``` + +**2. Open a PR** + +Navigate to your fork on GitHub. You will see a prompt to create a pull request against `sonic-net/sonic-mgmt` master. Click **"Compare & pull request."** + +**3. Fill in the PR description** + +The upstream PR template requires the following information: + +| Field | What to Include | +|---|---| +| **Summary** | Concise description of the test cases or framework changes being contributed. | +| **Fixes # (issue)** | Link to a GitHub issue if this PR addresses one. Create an issue first if none exists. | +| **Type of change** | Select: Bug fix, Testbed and Framework (new/improvement), or Test case (new/improvement). | +| **Approach** | Describe motivation, implementation approach, verification steps, platform-specific info, and supported testbed topology. | + +**4. Add labels** + +Tag the PR appropriately with feature labels (e.g., BGP, ACL, LAG) and the relevant topology tags. + +**5. Wait for CI and EasyCLA** + +Automated Azure DevOps pipelines and the EasyCLA bot will run checks. Address any failures promptly. + +**6. Engage with community review** + +Upstream maintainers and community members will review the code. Respond to comments professionally, make requested changes, and push updates to the same branch. + +> **💡 Tip:** Merges are performed only by the upstream repository maintainers. Be patient but follow up regularly if the review stalls. + +--- + +## 4. Code Quality Guidelines + +### 4.1 Pytest Test Scripts (`tests/` directory) + +When contributing pytest-based tests to the `tests/` directory, follow these conventions: + +- Every test case must have a **topology marker**: `@pytest.mark.topology('t0')`, `@pytest.mark.topology('t1')`, `@pytest.mark.topology('any')`, etc. +- **Feature markers** are recommended: `@pytest.mark.feature('bgp')`, `@pytest.mark.feature('acl')` +- Use **pytest fixtures** (`conftest.py`) for setup and teardown. Module-scoped fixtures are preferred for testbed-level configuration. +- Leverage the **pytest-ansible plugin** to interact with DUTs. The plugin bridges pytest with Ansible modules for device interaction. +- Use the **LogAnalyzer** utility for syslog validation during test execution. +- Generate **JUnit XML reports** with the `--junitxml` flag for CI integration. +- Keep test functions focused and atomic — one test function should validate one specific behavior. +- Store test plans as markdown files under `docs/testplan/`. + +### 4.2 SPyTest Scripts (`spytest/` directory) + +SPyTest is a SONiC test automation framework built on top of pytest, primarily contributed and maintained by Broadcom. When contributing SPyTest scripts, follow these conventions: + +- Test scripts reside under `spytest/tests//` (e.g., `spytest/tests/routing/BGP/`). +- Use the **SPyTest Feature API layer** (under `spytest/apis/`) to interact with SONiC features. These APIs abstract CLI interactions and support multiple UI types (click, klish, REST). +- Use **TextFSM templates** (under `spytest/templates/`) for parsing CLI output into structured data. +- Leverage the `spytest.st` module for framework functions: `st.log()`, `st.report_pass()`, `st.report_fail()`, `st.ensure_min_topology()`, etc. +- Mark tests with **inventory decorators**: `@pytest.mark.inventory(feature='...', release='...', testcases=['...'])` +- Use the **TGen API** (`spytest/tgapi`) for traffic generation when tests require traffic validation. +- Ensure no hardcoded DUT IPs, credentials, or platform-specific paths are present in test scripts. + +### 4.3 General Guidelines + +- Follow **PEP 8** and the flake8/pylint configuration present in the repo (`.flake8`, `pylintrc`, `pyproject.toml`). +- Do not include any proprietary or vendor-internal tooling references. +- Use **Python 3** syntax throughout. The sonic-mgmt docker container supports Python 3. +- Include **docstrings** for test functions describing what is being validated. +- Keep imports clean and organized. Avoid wildcard imports. + +--- + +## 5. End-to-End Workflow Summary + +| # | Step | Action | Owner | +|---|---|---|---| +| 1 | **Develop** | Write pytest/SPyTest code on a local feature branch. | Engineer | +| 2 | **Internal PR** | Create PR in the internal sonic-mgmt repo. Fill template, assign reviewers. | Engineer | +| 3 | **Internal Review** | Reviewers evaluate code quality, test coverage, and compliance. Iterate on feedback. | Engineer + Reviewers | +| 4 | **Internal Merge** | After approval, merge into internal master. Get explicit upstream go-ahead from lead. | Tech Lead | +| 5 | **Sign CLA** | Sign the ICLA via EasyCLA (one-time only). | Engineer | +| 6 | **Fork & Sync** | Fork sonic-net/sonic-mgmt, clone, and sync with upstream master. | Engineer | +| 7 | **Upstream PR** | Create PR against sonic-net/sonic-mgmt master. Fill the community PR template. | Engineer | +| 8 | **Community Review** | Address community review comments. Push updates to the same branch on your fork. | Engineer + Community | +| 9 | **Upstream Merge** | Repository maintainer merges the PR after all checks pass and reviews are complete. | Upstream Maintainer | + +--- + +## 6. Common Pitfalls and Troubleshooting + +### 6.1 EasyCLA Issues + +- If the EasyCLA check does not update after signing, comment `/easycla` on the PR to re-trigger the bot. +- Ensure the email address on your Git commits matches the one used to sign the ICLA. +- If contributing on behalf of your employer, your company may need a Corporate CLA (CCLA) in addition to your individual agreement. Coordinate with your legal team if needed. + +### 6.2 CI Pipeline Failures + +- The upstream repo runs Azure DevOps pipelines. Pre-commit checks enforce flake8 and other linting rules. Run `pre-commit run --all-files` locally before pushing. +- If the CI detects issues in files you did not modify, note that the pre-commit framework may flag pre-existing issues. Fix them if possible, but it is not mandatory for old issues. + +### 6.3 Merge Conflicts + +- If your PR has conflicts with the upstream master, **rebase** your branch: + ```bash + git fetch upstream + git rebase upstream/master + ``` + Resolve conflicts, then force-push: + ```bash + git push --force-with-lease origin + ``` +- **Do not** merge `upstream/master` into your branch. Rebasing produces a cleaner commit history preferred by the community. + +### 6.4 Stale Reviews + +- If your upstream PR has not received review attention within a week, post a polite follow-up comment on the PR. +- You can also raise visibility by mentioning the PR in the [SONiC community mailing list](https://lists.sonicfoundation.dev/g/sonic-dev) or the weekly community meeting. + +--- + +## 7. Key Reference Links + +| Resource | URL | +|---|---| +| Upstream sonic-mgmt repo | https://github.com/sonic-net/sonic-mgmt | +| SONiC Contributor Guide | https://github.com/sonic-net/SONiC/wiki/Becoming-a-contributor | +| EasyCLA Portal | https://docs.linuxfoundation.org/lfx/easycla | +| SONiC GitHub Flow Guide | https://guides.github.com/introduction/flow/ | +| SONiC Community Mailing List | https://lists.sonicfoundation.dev/g/sonic-dev | +| SONiC Pytest Organization | https://github.com/sonic-net/sonic-mgmt/blob/master/docs/tests/pytest.org.md | +| SPyTest Documentation | https://github.com/sonic-net/sonic-mgmt/blob/master/spytest/Doc/intro.md | +| SONiC HLD Template | https://github.com/sonic-net/SONiC/blob/master/doc/hld_template.md | +| SONiC Community Meetings | https://sonic-net.github.io/SONiC/Calendar.html | + +--- + +## Appendix A: Commit Message Template + +``` +[component/folder touched]: Short description of intent + +* Change item 1 +* Change item 2 +* Change item 3 + +Signed-off-by: Your Full Name +``` + +--- + +## Appendix B: Internal PR Description Template + +Use the following structure when creating internal PRs: + +```markdown +## Summary +Brief description of what is being added/changed. + +## Type of Change +- [ ] Bug fix +- [ ] Testbed and Framework (new/improvement) +- [ ] Test case (new/improvement) + +## Approach +- **Motivation:** Why are these tests needed? +- **Implementation:** How are the tests structured? +- **Verification:** How were the tests validated? +- **Topology:** Which testbed topology is required? (t0, t1, t2, etc.) + +## Upstream Intent +- [ ] Yes, this code is intended for upstream contribution +- Target upstream branch: master + +## Checklist +- [ ] Code passes flake8/pylint locally +- [ ] No proprietary/internal references +- [ ] Commit messages follow SONiC format +- [ ] Test plan doc included (if applicable) +- [ ] ICLA signed for upstream contribution +``` + +--- + +## Appendix C: Upstream PR Description Template + +The upstream sonic-net/sonic-mgmt repository expects the following PR format: + +```markdown +## Description of PR + +### Summary: +Fixes # (issue) + +### Type of change +- [ ] Bug fix +- [ ] Testbed and Framework(new/improvement) +- [ ] Test case(new/improvement) + +### Approach +**What is the motivation for this PR?** + +**How did you do it?** + +**How did you verify/test it?** + +**Any platform specific information?** + +**Supported testbed topology if it's a new test case?** + +### Documentation +``` + +--- + +*End of Document* diff --git a/docs/README.md b/sonic-mgmt/docs/README.md similarity index 100% rename from docs/README.md rename to sonic-mgmt/docs/README.md diff --git a/docs/ansible/README.deploy.md b/sonic-mgmt/docs/ansible/README.deploy.md similarity index 100% rename from docs/ansible/README.deploy.md rename to sonic-mgmt/docs/ansible/README.deploy.md diff --git a/docs/ansible/README.md b/sonic-mgmt/docs/ansible/README.md similarity index 100% rename from docs/ansible/README.md rename to sonic-mgmt/docs/ansible/README.md diff --git a/docs/ansible/README.test.md b/sonic-mgmt/docs/ansible/README.test.md similarity index 100% rename from docs/ansible/README.test.md rename to sonic-mgmt/docs/ansible/README.test.md diff --git a/docs/ansible/README.testbed.md b/sonic-mgmt/docs/ansible/README.testbed.md similarity index 100% rename from docs/ansible/README.testbed.md rename to sonic-mgmt/docs/ansible/README.testbed.md diff --git a/docs/api_wiki/README.md b/sonic-mgmt/docs/api_wiki/README.md similarity index 100% rename from docs/api_wiki/README.md rename to sonic-mgmt/docs/api_wiki/README.md diff --git a/docs/api_wiki/ansible_methods/acl_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/acl_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/acl_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/acl_facts.md diff --git a/docs/api_wiki/ansible_methods/announce_routes.md b/sonic-mgmt/docs/api_wiki/ansible_methods/announce_routes.md similarity index 100% rename from docs/api_wiki/ansible_methods/announce_routes.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/announce_routes.md diff --git a/docs/api_wiki/ansible_methods/bgp_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/bgp_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/bgp_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/bgp_facts.md diff --git a/docs/api_wiki/ansible_methods/bgp_route.md b/sonic-mgmt/docs/api_wiki/ansible_methods/bgp_route.md similarity index 100% rename from docs/api_wiki/ansible_methods/bgp_route.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/bgp_route.md diff --git a/docs/api_wiki/ansible_methods/command.md b/sonic-mgmt/docs/api_wiki/ansible_methods/command.md similarity index 100% rename from docs/api_wiki/ansible_methods/command.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/command.md diff --git a/docs/api_wiki/ansible_methods/config_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/config_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/config_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/config_facts.md diff --git a/docs/api_wiki/ansible_methods/conn_graph_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/conn_graph_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/conn_graph_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/conn_graph_facts.md diff --git a/docs/api_wiki/ansible_methods/console_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/console_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/console_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/console_facts.md diff --git a/docs/api_wiki/ansible_methods/copy.md b/sonic-mgmt/docs/api_wiki/ansible_methods/copy.md similarity index 100% rename from docs/api_wiki/ansible_methods/copy.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/copy.md diff --git a/docs/api_wiki/ansible_methods/exabgp.md b/sonic-mgmt/docs/api_wiki/ansible_methods/exabgp.md similarity index 100% rename from docs/api_wiki/ansible_methods/exabgp.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/exabgp.md diff --git a/docs/api_wiki/ansible_methods/extract_log.md b/sonic-mgmt/docs/api_wiki/ansible_methods/extract_log.md similarity index 100% rename from docs/api_wiki/ansible_methods/extract_log.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/extract_log.md diff --git a/docs/api_wiki/ansible_methods/feature_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/feature_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/feature_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/feature_facts.md diff --git a/docs/api_wiki/ansible_methods/fetch.md b/sonic-mgmt/docs/api_wiki/ansible_methods/fetch.md similarity index 100% rename from docs/api_wiki/ansible_methods/fetch.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/fetch.md diff --git a/docs/api_wiki/ansible_methods/file.md b/sonic-mgmt/docs/api_wiki/ansible_methods/file.md similarity index 100% rename from docs/api_wiki/ansible_methods/file.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/file.md diff --git a/docs/api_wiki/ansible_methods/find.md b/sonic-mgmt/docs/api_wiki/ansible_methods/find.md similarity index 100% rename from docs/api_wiki/ansible_methods/find.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/find.md diff --git a/docs/api_wiki/ansible_methods/get_ip_in_range.md b/sonic-mgmt/docs/api_wiki/ansible_methods/get_ip_in_range.md similarity index 100% rename from docs/api_wiki/ansible_methods/get_ip_in_range.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/get_ip_in_range.md diff --git a/docs/api_wiki/ansible_methods/image_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/image_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/image_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/image_facts.md diff --git a/docs/api_wiki/ansible_methods/interface_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/interface_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/interface_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/interface_facts.md diff --git a/docs/api_wiki/ansible_methods/lag_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/lag_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/lag_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/lag_facts.md diff --git a/docs/api_wiki/ansible_methods/lldp_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/lldp_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/lldp_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/lldp_facts.md diff --git a/docs/api_wiki/ansible_methods/lldpctl_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/lldpctl_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/lldpctl_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/lldpctl_facts.md diff --git a/docs/api_wiki/ansible_methods/minigraph_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/minigraph_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/minigraph_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/minigraph_facts.md diff --git a/docs/api_wiki/ansible_methods/monit_process.md b/sonic-mgmt/docs/api_wiki/ansible_methods/monit_process.md similarity index 100% rename from docs/api_wiki/ansible_methods/monit_process.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/monit_process.md diff --git a/docs/api_wiki/ansible_methods/ping.md b/sonic-mgmt/docs/api_wiki/ansible_methods/ping.md similarity index 100% rename from docs/api_wiki/ansible_methods/ping.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/ping.md diff --git a/docs/api_wiki/ansible_methods/port_alias.md b/sonic-mgmt/docs/api_wiki/ansible_methods/port_alias.md similarity index 100% rename from docs/api_wiki/ansible_methods/port_alias.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/port_alias.md diff --git a/docs/api_wiki/ansible_methods/reduce_and_add_sonic_images.md b/sonic-mgmt/docs/api_wiki/ansible_methods/reduce_and_add_sonic_images.md similarity index 100% rename from docs/api_wiki/ansible_methods/reduce_and_add_sonic_images.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/reduce_and_add_sonic_images.md diff --git a/docs/api_wiki/ansible_methods/replace.md b/sonic-mgmt/docs/api_wiki/ansible_methods/replace.md similarity index 100% rename from docs/api_wiki/ansible_methods/replace.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/replace.md diff --git a/docs/api_wiki/ansible_methods/sensors_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/sensors_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/sensors_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/sensors_facts.md diff --git a/docs/api_wiki/ansible_methods/service.md b/sonic-mgmt/docs/api_wiki/ansible_methods/service.md similarity index 100% rename from docs/api_wiki/ansible_methods/service.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/service.md diff --git a/docs/api_wiki/ansible_methods/setup.md b/sonic-mgmt/docs/api_wiki/ansible_methods/setup.md similarity index 100% rename from docs/api_wiki/ansible_methods/setup.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/setup.md diff --git a/docs/api_wiki/ansible_methods/shell.md b/sonic-mgmt/docs/api_wiki/ansible_methods/shell.md similarity index 100% rename from docs/api_wiki/ansible_methods/shell.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/shell.md diff --git a/docs/api_wiki/ansible_methods/shell_cmds.md b/sonic-mgmt/docs/api_wiki/ansible_methods/shell_cmds.md similarity index 100% rename from docs/api_wiki/ansible_methods/shell_cmds.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/shell_cmds.md diff --git a/docs/api_wiki/ansible_methods/show_interface.md b/sonic-mgmt/docs/api_wiki/ansible_methods/show_interface.md similarity index 100% rename from docs/api_wiki/ansible_methods/show_interface.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/show_interface.md diff --git a/docs/api_wiki/ansible_methods/show_ip_interface.md b/sonic-mgmt/docs/api_wiki/ansible_methods/show_ip_interface.md similarity index 100% rename from docs/api_wiki/ansible_methods/show_ip_interface.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/show_ip_interface.md diff --git a/docs/api_wiki/ansible_methods/snmp_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/snmp_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/snmp_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/snmp_facts.md diff --git a/docs/api_wiki/ansible_methods/sonic_pfc_counters.md b/sonic-mgmt/docs/api_wiki/ansible_methods/sonic_pfc_counters.md similarity index 100% rename from docs/api_wiki/ansible_methods/sonic_pfc_counters.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/sonic_pfc_counters.md diff --git a/docs/api_wiki/ansible_methods/stat.md b/sonic-mgmt/docs/api_wiki/ansible_methods/stat.md similarity index 100% rename from docs/api_wiki/ansible_methods/stat.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/stat.md diff --git a/docs/api_wiki/ansible_methods/switch_arptable.md b/sonic-mgmt/docs/api_wiki/ansible_methods/switch_arptable.md similarity index 100% rename from docs/api_wiki/ansible_methods/switch_arptable.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/switch_arptable.md diff --git a/docs/api_wiki/ansible_methods/switch_capabilities_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/switch_capabilities_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/switch_capabilities_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/switch_capabilities_facts.md diff --git a/docs/api_wiki/ansible_methods/sysfs_facts.md b/sonic-mgmt/docs/api_wiki/ansible_methods/sysfs_facts.md similarity index 100% rename from docs/api_wiki/ansible_methods/sysfs_facts.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/sysfs_facts.md diff --git a/docs/api_wiki/ansible_methods/tempfile.md b/sonic-mgmt/docs/api_wiki/ansible_methods/tempfile.md similarity index 100% rename from docs/api_wiki/ansible_methods/tempfile.md rename to sonic-mgmt/docs/api_wiki/ansible_methods/tempfile.md diff --git a/docs/api_wiki/multi_asic_methods/asic_instance.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/asic_instance.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/asic_instance.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/asic_instance.md diff --git a/docs/api_wiki/multi_asic_methods/asic_instance_from_namespace.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/asic_instance_from_namespace.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/asic_instance_from_namespace.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/asic_instance_from_namespace.md diff --git a/docs/api_wiki/multi_asic_methods/asics.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/asics.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/asics.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/asics.md diff --git a/docs/api_wiki/multi_asic_methods/critical_services_tracking_list.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/critical_services_tracking_list.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/critical_services_tracking_list.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/critical_services_tracking_list.md diff --git a/docs/api_wiki/multi_asic_methods/delete_container.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/delete_container.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/delete_container.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/delete_container.md diff --git a/docs/api_wiki/multi_asic_methods/get_asic_id_from_namespace.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_id_from_namespace.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_asic_id_from_namespace.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_id_from_namespace.md diff --git a/docs/api_wiki/multi_asic_methods/get_asic_ids.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_ids.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_asic_ids.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_ids.md diff --git a/docs/api_wiki/multi_asic_methods/get_asic_index_for_portchannel.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_index_for_portchannel.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_asic_index_for_portchannel.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_index_for_portchannel.md diff --git a/docs/api_wiki/multi_asic_methods/get_asic_namespace_list.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_namespace_list.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_asic_namespace_list.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_namespace_list.md diff --git a/docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host.md diff --git a/docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host_from_namespace.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host_from_namespace.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host_from_namespace.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_asic_or_sonic_host_from_namespace.md diff --git a/docs/api_wiki/multi_asic_methods/get_backend_asic_ids.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_backend_asic_ids.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_backend_asic_ids.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_backend_asic_ids.md diff --git a/docs/api_wiki/multi_asic_methods/get_backend_asic_namespace_list.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_backend_asic_namespace_list.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_backend_asic_namespace_list.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_backend_asic_namespace_list.md diff --git a/docs/api_wiki/multi_asic_methods/get_default_critical_services_list.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_default_critical_services_list.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_default_critical_services_list.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_default_critical_services_list.md diff --git a/docs/api_wiki/multi_asic_methods/get_frontend_asic_ids.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_frontend_asic_ids.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_frontend_asic_ids.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_frontend_asic_ids.md diff --git a/docs/api_wiki/multi_asic_methods/get_frontend_asic_namespace_list.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_frontend_asic_namespace_list.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_frontend_asic_namespace_list.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_frontend_asic_namespace_list.md diff --git a/docs/api_wiki/multi_asic_methods/get_linux_ip_cmd_for_namespace.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_linux_ip_cmd_for_namespace.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_linux_ip_cmd_for_namespace.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_linux_ip_cmd_for_namespace.md diff --git a/docs/api_wiki/multi_asic_methods/get_namespace_from_asic_id.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_namespace_from_asic_id.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_namespace_from_asic_id.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_namespace_from_asic_id.md diff --git a/docs/api_wiki/multi_asic_methods/get_port_asic_instance.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_port_asic_instance.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_port_asic_instance.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_port_asic_instance.md diff --git a/docs/api_wiki/multi_asic_methods/get_queue_oid.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_queue_oid.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_queue_oid.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_queue_oid.md diff --git a/docs/api_wiki/multi_asic_methods/get_queue_oid_asic_instance.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_queue_oid_asic_instance.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_queue_oid_asic_instance.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_queue_oid_asic_instance.md diff --git a/docs/api_wiki/multi_asic_methods/get_route.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_route.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_route.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_route.md diff --git a/docs/api_wiki/multi_asic_methods/get_sonic_host_and_frontend_asic_instance.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_sonic_host_and_frontend_asic_instance.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_sonic_host_and_frontend_asic_instance.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_sonic_host_and_frontend_asic_instance.md diff --git a/docs/api_wiki/multi_asic_methods/get_vtysh_cmd_for_namespace.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/get_vtysh_cmd_for_namespace.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/get_vtysh_cmd_for_namespace.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/get_vtysh_cmd_for_namespace.md diff --git a/docs/api_wiki/multi_asic_methods/has_config_subcommand.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/has_config_subcommand.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/has_config_subcommand.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/has_config_subcommand.md diff --git a/docs/api_wiki/multi_asic_methods/is_bgp_state_idle.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/is_bgp_state_idle.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/is_bgp_state_idle.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/is_bgp_state_idle.md diff --git a/docs/api_wiki/multi_asic_methods/is_container_running.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/is_container_running.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/is_container_running.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/is_container_running.md diff --git a/docs/api_wiki/multi_asic_methods/is_service_running.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/is_service_running.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/is_service_running.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/is_service_running.md diff --git a/docs/api_wiki/multi_asic_methods/restart_service.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/restart_service.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/restart_service.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/restart_service.md diff --git a/docs/api_wiki/multi_asic_methods/start_service.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/start_service.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/start_service.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/start_service.md diff --git a/docs/api_wiki/multi_asic_methods/stop_service.md b/sonic-mgmt/docs/api_wiki/multi_asic_methods/stop_service.md similarity index 100% rename from docs/api_wiki/multi_asic_methods/stop_service.md rename to sonic-mgmt/docs/api_wiki/multi_asic_methods/stop_service.md diff --git a/docs/api_wiki/preconfigured/duthosts.md b/sonic-mgmt/docs/api_wiki/preconfigured/duthosts.md similarity index 100% rename from docs/api_wiki/preconfigured/duthosts.md rename to sonic-mgmt/docs/api_wiki/preconfigured/duthosts.md diff --git a/docs/api_wiki/preconfigured/localhost.md b/sonic-mgmt/docs/api_wiki/preconfigured/localhost.md similarity index 100% rename from docs/api_wiki/preconfigured/localhost.md rename to sonic-mgmt/docs/api_wiki/preconfigured/localhost.md diff --git a/docs/api_wiki/preconfigured/ptfhost.md b/sonic-mgmt/docs/api_wiki/preconfigured/ptfhost.md similarity index 100% rename from docs/api_wiki/preconfigured/ptfhost.md rename to sonic-mgmt/docs/api_wiki/preconfigured/ptfhost.md diff --git a/docs/api_wiki/preconfigured/rand_one_dut_hostname.md b/sonic-mgmt/docs/api_wiki/preconfigured/rand_one_dut_hostname.md similarity index 100% rename from docs/api_wiki/preconfigured/rand_one_dut_hostname.md rename to sonic-mgmt/docs/api_wiki/preconfigured/rand_one_dut_hostname.md diff --git a/docs/api_wiki/ptfhost_methods/change_mac_addresses.md b/sonic-mgmt/docs/api_wiki/ptfhost_methods/change_mac_addresses.md similarity index 100% rename from docs/api_wiki/ptfhost_methods/change_mac_addresses.md rename to sonic-mgmt/docs/api_wiki/ptfhost_methods/change_mac_addresses.md diff --git a/docs/api_wiki/ptfhost_methods/hostname.md b/sonic-mgmt/docs/api_wiki/ptfhost_methods/hostname.md similarity index 100% rename from docs/api_wiki/ptfhost_methods/hostname.md rename to sonic-mgmt/docs/api_wiki/ptfhost_methods/hostname.md diff --git a/docs/api_wiki/ptfhost_methods/mgmt_ip.md b/sonic-mgmt/docs/api_wiki/ptfhost_methods/mgmt_ip.md similarity index 100% rename from docs/api_wiki/ptfhost_methods/mgmt_ip.md rename to sonic-mgmt/docs/api_wiki/ptfhost_methods/mgmt_ip.md diff --git a/docs/api_wiki/ptfhost_methods/remove_ip_addresses.md b/sonic-mgmt/docs/api_wiki/ptfhost_methods/remove_ip_addresses.md similarity index 100% rename from docs/api_wiki/ptfhost_methods/remove_ip_addresses.md rename to sonic-mgmt/docs/api_wiki/ptfhost_methods/remove_ip_addresses.md diff --git a/docs/api_wiki/scripts/generate_main_readme_body.py b/sonic-mgmt/docs/api_wiki/scripts/generate_main_readme_body.py similarity index 100% rename from docs/api_wiki/scripts/generate_main_readme_body.py rename to sonic-mgmt/docs/api_wiki/scripts/generate_main_readme_body.py diff --git a/docs/api_wiki/scripts/get_api_calls.py b/sonic-mgmt/docs/api_wiki/scripts/get_api_calls.py similarity index 100% rename from docs/api_wiki/scripts/get_api_calls.py rename to sonic-mgmt/docs/api_wiki/scripts/get_api_calls.py diff --git a/docs/api_wiki/sonic_asic_methods/bgp_drop_rule.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/bgp_drop_rule.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/bgp_drop_rule.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/bgp_drop_rule.md diff --git a/docs/api_wiki/sonic_asic_methods/bgp_facts.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/bgp_facts.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/bgp_facts.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/bgp_facts.md diff --git a/docs/api_wiki/sonic_asic_methods/check_bgp_session_state.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/check_bgp_session_state.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/check_bgp_session_state.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/check_bgp_session_state.md diff --git a/docs/api_wiki/sonic_asic_methods/check_bgp_statistic.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/check_bgp_statistic.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/check_bgp_statistic.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/check_bgp_statistic.md diff --git a/docs/api_wiki/sonic_asic_methods/command.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/command.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/command.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/command.md diff --git a/docs/api_wiki/sonic_asic_methods/config_facts.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_facts.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/config_facts.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_facts.md diff --git a/docs/api_wiki/sonic_asic_methods/config_ip_intf.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_ip_intf.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/config_ip_intf.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_ip_intf.md diff --git a/docs/api_wiki/sonic_asic_methods/config_portchannel.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_portchannel.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/config_portchannel.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_portchannel.md diff --git a/docs/api_wiki/sonic_asic_methods/config_portchannel_member.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_portchannel_member.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/config_portchannel_member.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/config_portchannel_member.md diff --git a/docs/api_wiki/sonic_asic_methods/create_ssh_tunnel_sai_rpc.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/create_ssh_tunnel_sai_rpc.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/create_ssh_tunnel_sai_rpc.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/create_ssh_tunnel_sai_rpc.md diff --git a/docs/api_wiki/sonic_asic_methods/delete_container.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/delete_container.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/delete_container.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/delete_container.md diff --git a/docs/api_wiki/sonic_asic_methods/get_active_ip_interfaces.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_active_ip_interfaces.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_active_ip_interfaces.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_active_ip_interfaces.md diff --git a/docs/api_wiki/sonic_asic_methods/get_asic_namespace.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_asic_namespace.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_asic_namespace.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_asic_namespace.md diff --git a/docs/api_wiki/sonic_asic_methods/get_bgp_statistic.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_bgp_statistic.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_bgp_statistic.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_bgp_statistic.md diff --git a/docs/api_wiki/sonic_asic_methods/get_critical_services.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_critical_services.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_critical_services.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_critical_services.md diff --git a/docs/api_wiki/sonic_asic_methods/get_docker_cmd.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_docker_cmd.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_docker_cmd.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_docker_cmd.md diff --git a/docs/api_wiki/sonic_asic_methods/get_docker_name.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_docker_name.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_docker_name.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_docker_name.md diff --git a/docs/api_wiki/sonic_asic_methods/get_extended_minigraph_facts.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_extended_minigraph_facts.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_extended_minigraph_facts.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_extended_minigraph_facts.md diff --git a/docs/api_wiki/sonic_asic_methods/get_ip_route_info.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_ip_route_info.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_ip_route_info.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_ip_route_info.md diff --git a/docs/api_wiki/sonic_asic_methods/get_portchannel_and_members_in_ns.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_portchannel_and_members_in_ns.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_portchannel_and_members_in_ns.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_portchannel_and_members_in_ns.md diff --git a/docs/api_wiki/sonic_asic_methods/get_queue_oid.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_queue_oid.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_queue_oid.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_queue_oid.md diff --git a/docs/api_wiki/sonic_asic_methods/get_service_name.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_service_name.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/get_service_name.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/get_service_name.md diff --git a/docs/api_wiki/sonic_asic_methods/interface_facts.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/interface_facts.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/interface_facts.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/interface_facts.md diff --git a/docs/api_wiki/sonic_asic_methods/is_backend_portchannel.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_backend_portchannel.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/is_backend_portchannel.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_backend_portchannel.md diff --git a/docs/api_wiki/sonic_asic_methods/is_container_running.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_container_running.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/is_container_running.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_container_running.md diff --git a/docs/api_wiki/sonic_asic_methods/is_it_backend.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_it_backend.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/is_it_backend.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_it_backend.md diff --git a/docs/api_wiki/sonic_asic_methods/is_it_frontend.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_it_frontend.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/is_it_frontend.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_it_frontend.md diff --git a/docs/api_wiki/sonic_asic_methods/is_service_running.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_service_running.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/is_service_running.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/is_service_running.md diff --git a/docs/api_wiki/sonic_asic_methods/os_version.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/os_version.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/os_version.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/os_version.md diff --git a/docs/api_wiki/sonic_asic_methods/ping_v4.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/ping_v4.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/ping_v4.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/ping_v4.md diff --git a/docs/api_wiki/sonic_asic_methods/port_exists.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/port_exists.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/port_exists.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/port_exists.md diff --git a/docs/api_wiki/sonic_asic_methods/port_on_asic.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/port_on_asic.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/port_on_asic.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/port_on_asic.md diff --git a/docs/api_wiki/sonic_asic_methods/portchannel_on_asic.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/portchannel_on_asic.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/portchannel_on_asic.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/portchannel_on_asic.md diff --git a/docs/api_wiki/sonic_asic_methods/remove_ssh_tunnel_sai_rpc.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/remove_ssh_tunnel_sai_rpc.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/remove_ssh_tunnel_sai_rpc.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/remove_ssh_tunnel_sai_rpc.md diff --git a/docs/api_wiki/sonic_asic_methods/reset_service.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/reset_service.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/reset_service.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/reset_service.md diff --git a/docs/api_wiki/sonic_asic_methods/restart_service.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/restart_service.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/restart_service.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/restart_service.md diff --git a/docs/api_wiki/sonic_asic_methods/run_redis_cli_cmd.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/run_redis_cli_cmd.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/run_redis_cli_cmd.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/run_redis_cli_cmd.md diff --git a/docs/api_wiki/sonic_asic_methods/run_redis_cmd.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/run_redis_cmd.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/run_redis_cmd.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/run_redis_cmd.md diff --git a/docs/api_wiki/sonic_asic_methods/shell.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/shell.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/shell.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/shell.md diff --git a/docs/api_wiki/sonic_asic_methods/show_interface.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/show_interface.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/show_interface.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/show_interface.md diff --git a/docs/api_wiki/sonic_asic_methods/show_ip_interface.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/show_ip_interface.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/show_ip_interface.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/show_ip_interface.md diff --git a/docs/api_wiki/sonic_asic_methods/shutdown_interface.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/shutdown_interface.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/shutdown_interface.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/shutdown_interface.md diff --git a/docs/api_wiki/sonic_asic_methods/start_service.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/start_service.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/start_service.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/start_service.md diff --git a/docs/api_wiki/sonic_asic_methods/startup_interface.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/startup_interface.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/startup_interface.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/startup_interface.md diff --git a/docs/api_wiki/sonic_asic_methods/stop_service.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/stop_service.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/stop_service.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/stop_service.md diff --git a/docs/api_wiki/sonic_asic_methods/switch_arptable.md b/sonic-mgmt/docs/api_wiki/sonic_asic_methods/switch_arptable.md similarity index 100% rename from docs/api_wiki/sonic_asic_methods/switch_arptable.md rename to sonic-mgmt/docs/api_wiki/sonic_asic_methods/switch_arptable.md diff --git a/docs/api_wiki/sonichost_methods/active_ip_interfaces.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/active_ip_interfaces.md similarity index 100% rename from docs/api_wiki/sonichost_methods/active_ip_interfaces.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/active_ip_interfaces.md diff --git a/docs/api_wiki/sonichost_methods/add_acl_table.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/add_acl_table.md similarity index 100% rename from docs/api_wiki/sonichost_methods/add_acl_table.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/add_acl_table.md diff --git a/docs/api_wiki/sonichost_methods/all_critical_process_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/all_critical_process_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/all_critical_process_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/all_critical_process_status.md diff --git a/docs/api_wiki/sonichost_methods/check_bgp_session_nsf.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/check_bgp_session_nsf.md similarity index 100% rename from docs/api_wiki/sonichost_methods/check_bgp_session_nsf.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/check_bgp_session_nsf.md diff --git a/docs/api_wiki/sonichost_methods/check_bgp_session_state.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/check_bgp_session_state.md similarity index 100% rename from docs/api_wiki/sonichost_methods/check_bgp_session_state.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/check_bgp_session_state.md diff --git a/docs/api_wiki/sonichost_methods/check_bgp_session_state_all_asics.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/check_bgp_session_state_all_asics.md similarity index 100% rename from docs/api_wiki/sonichost_methods/check_bgp_session_state_all_asics.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/check_bgp_session_state_all_asics.md diff --git a/docs/api_wiki/sonichost_methods/check_default_route.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/check_default_route.md similarity index 100% rename from docs/api_wiki/sonichost_methods/check_default_route.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/check_default_route.md diff --git a/docs/api_wiki/sonichost_methods/clear_acl_counters.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/clear_acl_counters.md similarity index 100% rename from docs/api_wiki/sonichost_methods/clear_acl_counters.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/clear_acl_counters.md diff --git a/docs/api_wiki/sonichost_methods/critical_process_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/critical_process_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/critical_process_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/critical_process_status.md diff --git a/docs/api_wiki/sonichost_methods/critical_services.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/critical_services.md similarity index 100% rename from docs/api_wiki/sonichost_methods/critical_services.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/critical_services.md diff --git a/docs/api_wiki/sonichost_methods/critical_services_fully_started.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/critical_services_fully_started.md similarity index 100% rename from docs/api_wiki/sonichost_methods/critical_services_fully_started.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/critical_services_fully_started.md diff --git a/docs/api_wiki/sonichost_methods/critical_services_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/critical_services_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/critical_services_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/critical_services_status.md diff --git a/docs/api_wiki/sonichost_methods/delete_container.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/delete_container.md similarity index 100% rename from docs/api_wiki/sonichost_methods/delete_container.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/delete_container.md diff --git a/docs/api_wiki/sonichost_methods/facts.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/facts.md similarity index 100% rename from docs/api_wiki/sonichost_methods/facts.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/facts.md diff --git a/docs/api_wiki/sonichost_methods/get_acl_counter.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_acl_counter.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_acl_counter.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_acl_counter.md diff --git a/docs/api_wiki/sonichost_methods/get_asic_name.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_asic_name.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_asic_name.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_asic_name.md diff --git a/docs/api_wiki/sonichost_methods/get_auto_negotiation_mode.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_auto_negotiation_mode.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_auto_negotiation_mode.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_auto_negotiation_mode.md diff --git a/docs/api_wiki/sonichost_methods/get_bgp_neighbor_info.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_bgp_neighbor_info.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_bgp_neighbor_info.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_bgp_neighbor_info.md diff --git a/docs/api_wiki/sonichost_methods/get_bgp_neighbors.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_bgp_neighbors.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_bgp_neighbors.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_bgp_neighbors.md diff --git a/docs/api_wiki/sonichost_methods/get_bgp_neighbors_per_asic.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_bgp_neighbors_per_asic.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_bgp_neighbors_per_asic.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_bgp_neighbors_per_asic.md diff --git a/docs/api_wiki/sonichost_methods/get_container_autorestart_states.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_container_autorestart_states.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_container_autorestart_states.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_container_autorestart_states.md diff --git a/docs/api_wiki/sonichost_methods/get_critical_group_and_process_lists.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_critical_group_and_process_lists.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_critical_group_and_process_lists.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_critical_group_and_process_lists.md diff --git a/docs/api_wiki/sonichost_methods/get_crm_facts.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_crm_facts.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_crm_facts.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_crm_facts.md diff --git a/docs/api_wiki/sonichost_methods/get_crm_resources.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_crm_resources.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_crm_resources.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_crm_resources.md diff --git a/docs/api_wiki/sonichost_methods/get_dut_iface_mac.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_dut_iface_mac.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_dut_iface_mac.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_dut_iface_mac.md diff --git a/docs/api_wiki/sonichost_methods/get_extended_minigraph_facts.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_extended_minigraph_facts.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_extended_minigraph_facts.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_extended_minigraph_facts.md diff --git a/docs/api_wiki/sonichost_methods/get_facts.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_facts.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_facts.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_facts.md diff --git a/docs/api_wiki/sonichost_methods/get_feature_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_feature_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_feature_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_feature_status.md diff --git a/docs/api_wiki/sonichost_methods/get_image_info.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_image_info.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_image_info.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_image_info.md diff --git a/docs/api_wiki/sonichost_methods/get_interfaces_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_interfaces_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_interfaces_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_interfaces_status.md diff --git a/docs/api_wiki/sonichost_methods/get_intf_link_local_ipv6_addr.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_intf_link_local_ipv6_addr.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_intf_link_local_ipv6_addr.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_intf_link_local_ipv6_addr.md diff --git a/docs/api_wiki/sonichost_methods/get_ip_route_info.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_ip_route_info.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_ip_route_info.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_ip_route_info.md diff --git a/docs/api_wiki/sonichost_methods/get_monit_services_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_monit_services_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_monit_services_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_monit_services_status.md diff --git a/docs/api_wiki/sonichost_methods/get_namespace_ids.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_namespace_ids.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_namespace_ids.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_namespace_ids.md diff --git a/docs/api_wiki/sonichost_methods/get_networking_uptime.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_networking_uptime.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_networking_uptime.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_networking_uptime.md diff --git a/docs/api_wiki/sonichost_methods/get_now_time.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_now_time.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_now_time.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_now_time.md diff --git a/docs/api_wiki/sonichost_methods/get_pmon_daemon_db_value.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_pmon_daemon_db_value.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_pmon_daemon_db_value.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_pmon_daemon_db_value.md diff --git a/docs/api_wiki/sonichost_methods/get_pmon_daemon_states.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_pmon_daemon_states.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_pmon_daemon_states.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_pmon_daemon_states.md diff --git a/docs/api_wiki/sonichost_methods/get_pmon_daemon_status.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_pmon_daemon_status.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_pmon_daemon_status.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_pmon_daemon_status.md diff --git a/docs/api_wiki/sonichost_methods/get_rsyslog_ipv4.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_rsyslog_ipv4.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_rsyslog_ipv4.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_rsyslog_ipv4.md diff --git a/docs/api_wiki/sonichost_methods/get_running_config_facts.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_running_config_facts.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_running_config_facts.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_running_config_facts.md diff --git a/docs/api_wiki/sonichost_methods/get_service_props.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_service_props.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_service_props.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_service_props.md diff --git a/docs/api_wiki/sonichost_methods/get_speed.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_speed.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_speed.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_speed.md diff --git a/docs/api_wiki/sonichost_methods/get_supported_speeds.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_supported_speeds.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_supported_speeds.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_supported_speeds.md diff --git a/docs/api_wiki/sonichost_methods/get_swss_docker_names.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_swss_docker_names.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_swss_docker_names.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_swss_docker_names.md diff --git a/docs/api_wiki/sonichost_methods/get_syncd_docker_names.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_syncd_docker_names.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_syncd_docker_names.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_syncd_docker_names.md diff --git a/docs/api_wiki/sonichost_methods/get_up_ip_ports.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_up_ip_ports.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_up_ip_ports.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_up_ip_ports.md diff --git a/docs/api_wiki/sonichost_methods/get_up_time.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_up_time.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_up_time.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_up_time.md diff --git a/docs/api_wiki/sonichost_methods/get_uptime.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_uptime.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_uptime.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_uptime.md diff --git a/docs/api_wiki/sonichost_methods/get_vlan_brief.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_vlan_brief.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_vlan_brief.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_vlan_brief.md diff --git a/docs/api_wiki/sonichost_methods/get_vlan_intfs.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/get_vlan_intfs.md similarity index 100% rename from docs/api_wiki/sonichost_methods/get_vlan_intfs.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/get_vlan_intfs.md diff --git a/docs/api_wiki/sonichost_methods/hostname.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/hostname.md similarity index 100% rename from docs/api_wiki/sonichost_methods/hostname.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/hostname.md diff --git a/docs/api_wiki/sonichost_methods/is_backend_portchannel.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_backend_portchannel.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_backend_portchannel.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_backend_portchannel.md diff --git a/docs/api_wiki/sonichost_methods/is_bgp_state_idle.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_bgp_state_idle.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_bgp_state_idle.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_bgp_state_idle.md diff --git a/docs/api_wiki/sonichost_methods/is_container_running.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_container_running.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_container_running.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_container_running.md diff --git a/docs/api_wiki/sonichost_methods/is_frontend_node.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_frontend_node.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_frontend_node.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_frontend_node.md diff --git a/docs/api_wiki/sonichost_methods/is_multi_asic.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_multi_asic.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_multi_asic.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_multi_asic.md diff --git a/docs/api_wiki/sonichost_methods/is_service_fully_started.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_service_fully_started.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_service_fully_started.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_service_fully_started.md diff --git a/docs/api_wiki/sonichost_methods/is_service_running.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_service_running.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_service_running.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_service_running.md diff --git a/docs/api_wiki/sonichost_methods/is_supervisor_node.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/is_supervisor_node.md similarity index 100% rename from docs/api_wiki/sonichost_methods/is_supervisor_node.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/is_supervisor_node.md diff --git a/docs/api_wiki/sonichost_methods/kernel_version.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/kernel_version.md similarity index 100% rename from docs/api_wiki/sonichost_methods/kernel_version.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/kernel_version.md diff --git a/docs/api_wiki/sonichost_methods/kill_pmon_daemon_pid_w_sig.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/kill_pmon_daemon_pid_w_sig.md similarity index 100% rename from docs/api_wiki/sonichost_methods/kill_pmon_daemon_pid_w_sig.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/kill_pmon_daemon_pid_w_sig.md diff --git a/docs/api_wiki/sonichost_methods/mgmt_ip.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/mgmt_ip.md similarity index 100% rename from docs/api_wiki/sonichost_methods/mgmt_ip.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/mgmt_ip.md diff --git a/docs/api_wiki/sonichost_methods/no_shutdown.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/no_shutdown.md similarity index 100% rename from docs/api_wiki/sonichost_methods/no_shutdown.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/no_shutdown.md diff --git a/docs/api_wiki/sonichost_methods/no_shutdown_multiple.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/no_shutdown_multiple.md similarity index 100% rename from docs/api_wiki/sonichost_methods/no_shutdown_multiple.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/no_shutdown_multiple.md diff --git a/docs/api_wiki/sonichost_methods/num_asics.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/num_asics.md similarity index 100% rename from docs/api_wiki/sonichost_methods/num_asics.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/num_asics.md diff --git a/docs/api_wiki/sonichost_methods/os_version.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/os_version.md similarity index 100% rename from docs/api_wiki/sonichost_methods/os_version.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/os_version.md diff --git a/docs/api_wiki/sonichost_methods/ping_v4.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/ping_v4.md similarity index 100% rename from docs/api_wiki/sonichost_methods/ping_v4.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/ping_v4.md diff --git a/docs/api_wiki/sonichost_methods/remove_ssh_tunnel_sai_rpc.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/remove_ssh_tunnel_sai_rpc.md similarity index 100% rename from docs/api_wiki/sonichost_methods/remove_ssh_tunnel_sai_rpc.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/remove_ssh_tunnel_sai_rpc.md diff --git a/docs/api_wiki/sonichost_methods/reset_critical_services_tracking_list.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/reset_critical_services_tracking_list.md similarity index 100% rename from docs/api_wiki/sonichost_methods/reset_critical_services_tracking_list.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/reset_critical_services_tracking_list.md diff --git a/docs/api_wiki/sonichost_methods/reset_service.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/reset_service.md similarity index 100% rename from docs/api_wiki/sonichost_methods/reset_service.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/reset_service.md diff --git a/docs/api_wiki/sonichost_methods/restart_service.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/restart_service.md similarity index 100% rename from docs/api_wiki/sonichost_methods/restart_service.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/restart_service.md diff --git a/docs/api_wiki/sonichost_methods/run_redis_cli_cmd.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/run_redis_cli_cmd.md similarity index 100% rename from docs/api_wiki/sonichost_methods/run_redis_cli_cmd.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/run_redis_cli_cmd.md diff --git a/docs/api_wiki/sonichost_methods/set_auto_negotiation_mode.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/set_auto_negotiation_mode.md similarity index 100% rename from docs/api_wiki/sonichost_methods/set_auto_negotiation_mode.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/set_auto_negotiation_mode.md diff --git a/docs/api_wiki/sonichost_methods/set_speed.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/set_speed.md similarity index 100% rename from docs/api_wiki/sonichost_methods/set_speed.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/set_speed.md diff --git a/docs/api_wiki/sonichost_methods/show_and_parse.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/show_and_parse.md similarity index 100% rename from docs/api_wiki/sonichost_methods/show_and_parse.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/show_and_parse.md diff --git a/docs/api_wiki/sonichost_methods/show_ipv6_interfaces.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/show_ipv6_interfaces.md similarity index 100% rename from docs/api_wiki/sonichost_methods/show_ipv6_interfaces.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/show_ipv6_interfaces.md diff --git a/docs/api_wiki/sonichost_methods/shutdown.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/shutdown.md similarity index 100% rename from docs/api_wiki/sonichost_methods/shutdown.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/shutdown.md diff --git a/docs/api_wiki/sonichost_methods/shutdown_multiple.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/shutdown_multiple.md similarity index 100% rename from docs/api_wiki/sonichost_methods/shutdown_multiple.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/shutdown_multiple.md diff --git a/docs/api_wiki/sonichost_methods/start_pmon_daemon.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/start_pmon_daemon.md similarity index 100% rename from docs/api_wiki/sonichost_methods/start_pmon_daemon.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/start_pmon_daemon.md diff --git a/docs/api_wiki/sonichost_methods/start_service.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/start_service.md similarity index 100% rename from docs/api_wiki/sonichost_methods/start_service.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/start_service.md diff --git a/docs/api_wiki/sonichost_methods/stop_pmon_daemon.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/stop_pmon_daemon.md similarity index 100% rename from docs/api_wiki/sonichost_methods/stop_pmon_daemon.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/stop_pmon_daemon.md diff --git a/docs/api_wiki/sonichost_methods/stop_pmon_daemon_service.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/stop_pmon_daemon_service.md similarity index 100% rename from docs/api_wiki/sonichost_methods/stop_pmon_daemon_service.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/stop_pmon_daemon_service.md diff --git a/docs/api_wiki/sonichost_methods/stop_service.md b/sonic-mgmt/docs/api_wiki/sonichost_methods/stop_service.md similarity index 100% rename from docs/api_wiki/sonichost_methods/stop_service.md rename to sonic-mgmt/docs/api_wiki/sonichost_methods/stop_service.md diff --git a/docs/code-review-guidlines.md b/sonic-mgmt/docs/code-review-guidlines.md similarity index 100% rename from docs/code-review-guidlines.md rename to sonic-mgmt/docs/code-review-guidlines.md diff --git a/docs/image/RED_ECN_marking_algorithm.PNG b/sonic-mgmt/docs/image/RED_ECN_marking_algorithm.PNG similarity index 100% rename from docs/image/RED_ECN_marking_algorithm.PNG rename to sonic-mgmt/docs/image/RED_ECN_marking_algorithm.PNG diff --git a/docs/ipv6-management-setup.md b/sonic-mgmt/docs/ipv6-management-setup.md similarity index 100% rename from docs/ipv6-management-setup.md rename to sonic-mgmt/docs/ipv6-management-setup.md diff --git a/docs/sai_validation/images/current_scenario_1.png b/sonic-mgmt/docs/sai_validation/images/current_scenario_1.png similarity index 100% rename from docs/sai_validation/images/current_scenario_1.png rename to sonic-mgmt/docs/sai_validation/images/current_scenario_1.png diff --git a/docs/sai_validation/images/new_design.png b/sonic-mgmt/docs/sai_validation/images/new_design.png similarity index 100% rename from docs/sai_validation/images/new_design.png rename to sonic-mgmt/docs/sai_validation/images/new_design.png diff --git a/docs/sai_validation/sai_validation_design.md b/sonic-mgmt/docs/sai_validation/sai_validation_design.md similarity index 100% rename from docs/sai_validation/sai_validation_design.md rename to sonic-mgmt/docs/sai_validation/sai_validation_design.md diff --git a/docs/test_skip_expiry_design.md b/sonic-mgmt/docs/test_skip_expiry_design.md similarity index 100% rename from docs/test_skip_expiry_design.md rename to sonic-mgmt/docs/test_skip_expiry_design.md diff --git a/docs/testbed/READ.testbed.AnnounceRoutes.Internal.md b/sonic-mgmt/docs/testbed/READ.testbed.AnnounceRoutes.Internal.md similarity index 100% rename from docs/testbed/READ.testbed.AnnounceRoutes.Internal.md rename to sonic-mgmt/docs/testbed/READ.testbed.AnnounceRoutes.Internal.md diff --git a/docs/testbed/README.md b/sonic-mgmt/docs/testbed/README.md similarity index 100% rename from docs/testbed/README.md rename to sonic-mgmt/docs/testbed/README.md diff --git a/docs/testbed/README.new.testbed.Configuration.md b/sonic-mgmt/docs/testbed/README.new.testbed.Configuration.md similarity index 100% rename from docs/testbed/README.new.testbed.Configuration.md rename to sonic-mgmt/docs/testbed/README.new.testbed.Configuration.md diff --git a/docs/testbed/README.testbed.8000e.md b/sonic-mgmt/docs/testbed/README.testbed.8000e.md similarity index 100% rename from docs/testbed/README.testbed.8000e.md rename to sonic-mgmt/docs/testbed/README.testbed.8000e.md diff --git a/docs/testbed/README.testbed.Cli.md b/sonic-mgmt/docs/testbed/README.testbed.Cli.md similarity index 100% rename from docs/testbed/README.testbed.Cli.md rename to sonic-mgmt/docs/testbed/README.testbed.Cli.md diff --git a/docs/testbed/README.testbed.CsonicHost.md b/sonic-mgmt/docs/testbed/README.testbed.CsonicHost.md similarity index 100% rename from docs/testbed/README.testbed.CsonicHost.md rename to sonic-mgmt/docs/testbed/README.testbed.CsonicHost.md diff --git a/docs/testbed/README.testbed.DeployWithMultipleServers.md.md b/sonic-mgmt/docs/testbed/README.testbed.DeployWithMultipleServers.md.md similarity index 100% rename from docs/testbed/README.testbed.DeployWithMultipleServers.md.md rename to sonic-mgmt/docs/testbed/README.testbed.DeployWithMultipleServers.md.md diff --git a/docs/testbed/README.testbed.Docker.md b/sonic-mgmt/docs/testbed/README.testbed.Docker.md similarity index 100% rename from docs/testbed/README.testbed.Docker.md rename to sonic-mgmt/docs/testbed/README.testbed.Docker.md diff --git a/docs/testbed/README.testbed.DualtorSetup.md b/sonic-mgmt/docs/testbed/README.testbed.DualtorSetup.md similarity index 100% rename from docs/testbed/README.testbed.DualtorSetup.md rename to sonic-mgmt/docs/testbed/README.testbed.DualtorSetup.md diff --git a/docs/testbed/README.testbed.Example.Config.md b/sonic-mgmt/docs/testbed/README.testbed.Example.Config.md similarity index 100% rename from docs/testbed/README.testbed.Example.Config.md rename to sonic-mgmt/docs/testbed/README.testbed.Example.Config.md diff --git a/docs/testbed/README.testbed.Example.md b/sonic-mgmt/docs/testbed/README.testbed.Example.md similarity index 100% rename from docs/testbed/README.testbed.Example.md rename to sonic-mgmt/docs/testbed/README.testbed.Example.md diff --git a/docs/testbed/README.testbed.FAQ.md b/sonic-mgmt/docs/testbed/README.testbed.FAQ.md similarity index 100% rename from docs/testbed/README.testbed.FAQ.md rename to sonic-mgmt/docs/testbed/README.testbed.FAQ.md diff --git a/docs/testbed/README.testbed.Fanout.md b/sonic-mgmt/docs/testbed/README.testbed.Fanout.md similarity index 100% rename from docs/testbed/README.testbed.Fanout.md rename to sonic-mgmt/docs/testbed/README.testbed.Fanout.md diff --git a/docs/testbed/README.testbed.Internal.md b/sonic-mgmt/docs/testbed/README.testbed.Internal.md similarity index 100% rename from docs/testbed/README.testbed.Internal.md rename to sonic-mgmt/docs/testbed/README.testbed.Internal.md diff --git a/docs/testbed/README.testbed.IxANVL.VsSetup.md b/sonic-mgmt/docs/testbed/README.testbed.IxANVL.VsSetup.md similarity index 100% rename from docs/testbed/README.testbed.IxANVL.VsSetup.md rename to sonic-mgmt/docs/testbed/README.testbed.IxANVL.VsSetup.md diff --git a/docs/testbed/README.testbed.Keysight.md b/sonic-mgmt/docs/testbed/README.testbed.Keysight.md similarity index 100% rename from docs/testbed/README.testbed.Keysight.md rename to sonic-mgmt/docs/testbed/README.testbed.Keysight.md diff --git a/docs/testbed/README.testbed.MCX.md b/sonic-mgmt/docs/testbed/README.testbed.MCX.md similarity index 100% rename from docs/testbed/README.testbed.MCX.md rename to sonic-mgmt/docs/testbed/README.testbed.MCX.md diff --git a/docs/testbed/README.testbed.Minigraph.md b/sonic-mgmt/docs/testbed/README.testbed.Minigraph.md similarity index 100% rename from docs/testbed/README.testbed.Minigraph.md rename to sonic-mgmt/docs/testbed/README.testbed.Minigraph.md diff --git a/docs/testbed/README.testbed.NUT.L1.md b/sonic-mgmt/docs/testbed/README.testbed.NUT.L1.md similarity index 100% rename from docs/testbed/README.testbed.NUT.L1.md rename to sonic-mgmt/docs/testbed/README.testbed.NUT.L1.md diff --git a/docs/testbed/README.testbed.NUT.L2Snake.md b/sonic-mgmt/docs/testbed/README.testbed.NUT.L2Snake.md similarity index 100% rename from docs/testbed/README.testbed.NUT.L2Snake.md rename to sonic-mgmt/docs/testbed/README.testbed.NUT.L2Snake.md diff --git a/docs/testbed/README.testbed.NUT.md b/sonic-mgmt/docs/testbed/README.testbed.NUT.md similarity index 100% rename from docs/testbed/README.testbed.NUT.md rename to sonic-mgmt/docs/testbed/README.testbed.NUT.md diff --git a/docs/testbed/README.testbed.OCS.HLD.md b/sonic-mgmt/docs/testbed/README.testbed.OCS.HLD.md similarity index 100% rename from docs/testbed/README.testbed.OCS.HLD.md rename to sonic-mgmt/docs/testbed/README.testbed.OCS.HLD.md diff --git a/docs/testbed/README.testbed.OCS.md b/sonic-mgmt/docs/testbed/README.testbed.OCS.md similarity index 100% rename from docs/testbed/README.testbed.OCS.md rename to sonic-mgmt/docs/testbed/README.testbed.OCS.md diff --git a/docs/testbed/README.testbed.OCSSetup.md b/sonic-mgmt/docs/testbed/README.testbed.OCSSetup.md similarity index 100% rename from docs/testbed/README.testbed.OCSSetup.md rename to sonic-mgmt/docs/testbed/README.testbed.OCSSetup.md diff --git a/docs/testbed/README.testbed.Overview.md b/sonic-mgmt/docs/testbed/README.testbed.Overview.md similarity index 100% rename from docs/testbed/README.testbed.Overview.md rename to sonic-mgmt/docs/testbed/README.testbed.Overview.md diff --git a/docs/testbed/README.testbed.PDUWiring.md b/sonic-mgmt/docs/testbed/README.testbed.PDUWiring.md similarity index 100% rename from docs/testbed/README.testbed.PDUWiring.md rename to sonic-mgmt/docs/testbed/README.testbed.PDUWiring.md diff --git a/docs/testbed/README.testbed.QosRpc.md b/sonic-mgmt/docs/testbed/README.testbed.QosRpc.md similarity index 100% rename from docs/testbed/README.testbed.QosRpc.md rename to sonic-mgmt/docs/testbed/README.testbed.QosRpc.md diff --git a/docs/testbed/README.testbed.Routing.md b/sonic-mgmt/docs/testbed/README.testbed.Routing.md similarity index 100% rename from docs/testbed/README.testbed.Routing.md rename to sonic-mgmt/docs/testbed/README.testbed.Routing.md diff --git a/docs/testbed/README.testbed.Sentinel.md b/sonic-mgmt/docs/testbed/README.testbed.Sentinel.md similarity index 100% rename from docs/testbed/README.testbed.Sentinel.md rename to sonic-mgmt/docs/testbed/README.testbed.Sentinel.md diff --git a/docs/testbed/README.testbed.Setup.md b/sonic-mgmt/docs/testbed/README.testbed.Setup.md similarity index 100% rename from docs/testbed/README.testbed.Setup.md rename to sonic-mgmt/docs/testbed/README.testbed.Setup.md diff --git a/docs/testbed/README.testbed.SmartSwitch.VsSetup.md b/sonic-mgmt/docs/testbed/README.testbed.SmartSwitch.VsSetup.md similarity index 100% rename from docs/testbed/README.testbed.SmartSwitch.VsSetup.md rename to sonic-mgmt/docs/testbed/README.testbed.SmartSwitch.VsSetup.md diff --git a/docs/testbed/README.testbed.Snappi.examples.md b/sonic-mgmt/docs/testbed/README.testbed.Snappi.examples.md similarity index 100% rename from docs/testbed/README.testbed.Snappi.examples.md rename to sonic-mgmt/docs/testbed/README.testbed.Snappi.examples.md diff --git a/docs/testbed/README.testbed.SnappiTests.md b/sonic-mgmt/docs/testbed/README.testbed.SnappiTests.md similarity index 100% rename from docs/testbed/README.testbed.SnappiTests.md rename to sonic-mgmt/docs/testbed/README.testbed.SnappiTests.md diff --git a/docs/testbed/README.testbed.TACACS.md b/sonic-mgmt/docs/testbed/README.testbed.TACACS.md similarity index 100% rename from docs/testbed/README.testbed.TACACS.md rename to sonic-mgmt/docs/testbed/README.testbed.TACACS.md diff --git a/docs/testbed/README.testbed.Testbed_v2.hld.md b/sonic-mgmt/docs/testbed/README.testbed.Testbed_v2.hld.md similarity index 100% rename from docs/testbed/README.testbed.Testbed_v2.hld.md rename to sonic-mgmt/docs/testbed/README.testbed.Testbed_v2.hld.md diff --git a/docs/testbed/README.testbed.VPP.md b/sonic-mgmt/docs/testbed/README.testbed.VPP.md similarity index 100% rename from docs/testbed/README.testbed.VPP.md rename to sonic-mgmt/docs/testbed/README.testbed.VPP.md diff --git a/docs/testbed/README.testbed.VirtualNUT.md b/sonic-mgmt/docs/testbed/README.testbed.VirtualNUT.md similarity index 100% rename from docs/testbed/README.testbed.VirtualNUT.md rename to sonic-mgmt/docs/testbed/README.testbed.VirtualNUT.md diff --git a/docs/testbed/README.testbed.VsSetup.md b/sonic-mgmt/docs/testbed/README.testbed.VsSetup.md similarity index 100% rename from docs/testbed/README.testbed.VsSetup.md rename to sonic-mgmt/docs/testbed/README.testbed.VsSetup.md diff --git a/docs/testbed/README.testbed.WANSetup.md b/sonic-mgmt/docs/testbed/README.testbed.WANSetup.md similarity index 100% rename from docs/testbed/README.testbed.WANSetup.md rename to sonic-mgmt/docs/testbed/README.testbed.WANSetup.md diff --git a/docs/testbed/README.testbed.cEOS.md b/sonic-mgmt/docs/testbed/README.testbed.cEOS.md similarity index 100% rename from docs/testbed/README.testbed.cEOS.md rename to sonic-mgmt/docs/testbed/README.testbed.cEOS.md diff --git a/docs/testbed/README.testbed.cSONiC.md b/sonic-mgmt/docs/testbed/README.testbed.cSONiC.md similarity index 100% rename from docs/testbed/README.testbed.cSONiC.md rename to sonic-mgmt/docs/testbed/README.testbed.cSONiC.md diff --git a/docs/testbed/README.testbed.k8s.Setup.md b/sonic-mgmt/docs/testbed/README.testbed.k8s.Setup.md similarity index 100% rename from docs/testbed/README.testbed.k8s.Setup.md rename to sonic-mgmt/docs/testbed/README.testbed.k8s.Setup.md diff --git a/docs/testbed/README.testbed.vSmartSwitch.md b/sonic-mgmt/docs/testbed/README.testbed.vSmartSwitch.md similarity index 100% rename from docs/testbed/README.testbed.vSmartSwitch.md rename to sonic-mgmt/docs/testbed/README.testbed.vSmartSwitch.md diff --git a/docs/testbed/README.testbed.vsChassis.md b/sonic-mgmt/docs/testbed/README.testbed.vsChassis.md similarity index 100% rename from docs/testbed/README.testbed.vsChassis.md rename to sonic-mgmt/docs/testbed/README.testbed.vsChassis.md diff --git a/sonic-mgmt/docs/testbed/cisco/README.testbed.Topologies.md b/sonic-mgmt/docs/testbed/cisco/README.testbed.Topologies.md new file mode 100644 index 00000000000..73122822e3b --- /dev/null +++ b/sonic-mgmt/docs/testbed/cisco/README.testbed.Topologies.md @@ -0,0 +1,342 @@ +# SONiC Testbed Topologies + + +This Document contains the details of all the Topologies which are being used by different Platforms for various Roles and Tests which they support. +The information provided below can be used for setting up testbeds and running the associated tests. + + +## Topologies Overview + +For each of the Topologies listed below, where applicable the following details are provided: + +* Reference/Logical Topology +* Physical Testbed Sample & Components +* Platforms using this Topology +* Topo File/Connection Info + +  +  + +### T1 type topology + +The T1 type topology is to simulate a SONiC DUT running as a T1 device. For this type of topology, a set of DUT ports are connected to VMs simulating upstream T2 neighbors. Another set of DUT ports are connected to VMs simulating downstream T0 neighbors. + + + +Below are the details of the various T1 Topologies used within Cisco across different platforms + + +  +  +  + +#### T1-64-LAG (topology_id: t1-64-lag) + +![](./img/topo-t1-64-lag.png) + +* Platforms using this Topology: 8102-64H(M64) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t1-64-lag.yml + + +  +  +  + +#### T1-56-LAG (topology_id: t1-56-lag) + +![](./img/topo-t1-56-lag.png) + +* Platforms using this Topology: 8101-32FH(C-Mono) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t1-56-lag.yml + + +  +  +  + +#### T1-LAG (topology_id: t1-lag) + +![](./img/topo-t1-lag.png) + +* Platforms using this Topology: 8111-32EH(Crocodile) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t1-lag.yml + + +  +  +  + +#### T1-LAG-Lightning (topology_id: t1-lag-lightning) + +![](./img/topo-t1-lag-lightning.png) + +* Platforms using this Topology: 8122-64EH(Lightning) +* Topo File: https://wwwin-github.cisco.com/whitebox/sonic-test/blob/master/sonic-mgmt/ansible/vars/topo_t1-lag-lightning.yml + + +  +  +  + +#### T1-LAG-Superbolt (topology_id: t1-lag-superbolt) + +![](./img/topo-t1-lag-superbolt.png) + +* Platforms using this Topology: 8122-64EH(Superbolt) +* Topo File: https://wwwin-github.cisco.com/whitebox/sonic-test/blob/master/sonic-mgmt/ansible/vars/topo_t1-lag-superbolt.yml + + +  +  +  + +### T0 type topology + +The T0 type topology is to simulate a SONiC DUT running as a T0 device. + +For this type of topology, a set of of the DUT ports are connected to VMs simulating upstream T1 neighbors. Rest of the ports are connected to a PTF docker simulating downstream servers. + + +Below are details of some of the T0 variations: + + +  +  +  + +#### T0-64 (topology_id: t0-64) + +![](./img/topo-t0-64.png) + +* Platforms using this Topology: 8102-64H(M64) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t0-64.yml + + +  +  +  + + +#### T0 (topology_id: t0) + +![](./img/topo-t0.png) + +* Platforms using this Topology: 8101-32FH(Churchill-Monno), 8111-32EH(Crocodile) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t0.yml + + +  +  +  + + +#### T0-Lightning (topology_id: t0-lightning) + +![](./img/topo-t0-lightning.png) + +* Platforms using this Topology: 8122-64EH(Lightning) +* Topo File: https://wwwin-github.cisco.com/whitebox/sonic-test/blob/master/sonic-mgmt/ansible/vars/topo_t0-lightning.yml + +  +  +  + + +### DualToR type Topology + +Below are the details of the DualToR variations: + +#### DualToR-56 (topology_id: dualtor-56) + +![](./img/topo-dualtor-56.png) + +* Platforms using this Topology: 8101-64H(M64) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_dualtor-aa-56.yml + + +  +  +  + +### T2 type Topology + +Below are the details of the T2 variations for Modular Chassis: + +#### T2 SF-D (topology_id: t2-sfd) + +![](./img/topo-t2.png) + +* Platforms using this Topology: 8800 with 3 LC (Vanguard, Gauntlet) +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t2.yml + + +  +  +  + +### Smartswitch type Topology + +Below are the details of the Smartswitch variations: + + +  +  +  + +### Mt.Fuji T1 Topology (topology_id: mt-fuji-t1) + +![](./img/topo-smartswitch-t1.png) + +* Platforms using this Topology: Mt.Fuji +* Topo File: https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_smartswitch-t1.yml + + +  +  +  + +### SONiC B2B(Back-to-Back) type Topology + +#### SONiC Tests: B2B Topology (topology_id: sonic-tests-b2b) + +![](./img/topo-b2b-tgen.png) + +This reference topology is used for the following tests: ('test-name' 'Framework') + +* IXIA PFC, PFCWD, ECN tests (Pytest) +* Optics Test (Spytest) +* Latency Test (Spytest) +* Platform Tests (Spytest) +* MACsec (Spytest) + +Additional details regarding the exact topo used for each of these B2B tests is provided below + + +  +  +  + +### Other Topology Types + +The topologies in this section are **purpose-built** test setups that do not fit cleanly into the standard T0/T1/T2/DualToR categories. +Each subsection below includes the reference diagram and notes on the platforms/tests that use it. + +#### SONiC-Mgmt Pytest TGEN Topology (topology_id: N/A - Use above 'sonic-tests-b2b' for this) + +These are IXIA based topologies mainly used to execute Pytest PFC, PFCWD, ECN tests +Theses topologies utilize the above B2B setup + +Reference Wikis with additional details to bringup this topology are below. + +Fixed Systems: + +* https://wiki.cisco.com/display/HEROBU/PFC+SETUPs +* https://wiki.cisco.com/display/HEROBU/Troubleshooting+Ixia+scripts +* https://wiki.cisco.com/display/WHITEBOX/Running+IXIA+Sonic-mgmt+test+on+SONiC + +* Platforms using this Topology: 8102-64H-O, 8101-32FH, 8111, 8122 + +Chassis/T2 Systems: + +* https://wiki.cisco.com/display/HEROBU/T2-Ixia +* https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t2-ixia-3lc-4.yml +* https://github.com/sonic-net/sonic-mgmt/blob/master/ansible/vars/topo_t2-ixia-2lc-4.yml + +* Platforms using this Topology: Cisco-Distributed (8808) + +Note: For both of these, the Topo bringup is done via handcrafted Minigraph + + + +  +  +  + + +#### Latency Tests Topology (topology_id: latency-tests) + +This test also leverages the above B2B topology + +![](./img/topo-latency.png) + +The above topology is used for Latency tests + +* Platforms using this topology: 8111, 8122 + + +  +  +  + +#### Optics Tests Topology (topology_id: optics-tests) + +This test also leverages the above B2B topology + + +![](./img/topo-optics.png) + +The above topology is used for Optics tests + +* Platforms using this topology: ALL + + +  +  +  + +#### SNT VRF Test Topology (topology_id: vrf-snake-test) + + +![](./img/topo-vrf-snake.png) + +The above topology is used for Snake test using VRF + +* Platforms using this topology: 8201/8101/8122 + + +  +  +  + +#### EDVT L2Vlan Test Topology (topology_id: vlan-snake-test) + +![](./img/topo-vlan-snake.png) + +* Platforms using this topology: 8201/8101/8122 + +### Tortuga Test Topologies + +Below are the reference topologies for various Tortuga Test activities + + + +#### Tortuga: Dev and CI/CD Test Topology (topology_id: tortuga-dev-cicd-test) + +![](./img/topo-tortuga-cicd.png) + + +  +  +  + +#### Tortuga: Solution Test Topology (topology_id: tortuga-solution-test) + +![](./img/topo-tortuga-sol.png) + +  +  +  + + +#### Tortuga: Performance & Scale Test Topology (topology_id: tortuga-performance-scale-test) + +![](./img/topo-tortuga-pns.png) + + +  +  +  + +#### Ostara: Solution Test Topology (topology_id: ostara-solution-test) + +![](./img/topo-ostara-sol.png) diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-b2b-tgen.png b/sonic-mgmt/docs/testbed/cisco/img/topo-b2b-tgen.png new file mode 100644 index 00000000000..6be68ab5b1d Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-b2b-tgen.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-dualtor-56.png b/sonic-mgmt/docs/testbed/cisco/img/topo-dualtor-56.png new file mode 100644 index 00000000000..1a4696d1e05 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-dualtor-56.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-latency.png b/sonic-mgmt/docs/testbed/cisco/img/topo-latency.png new file mode 100644 index 00000000000..3764653e9be Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-latency.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-optics.png b/sonic-mgmt/docs/testbed/cisco/img/topo-optics.png new file mode 100644 index 00000000000..eee9cae7ef2 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-optics.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-ostara-sol.png b/sonic-mgmt/docs/testbed/cisco/img/topo-ostara-sol.png new file mode 100644 index 00000000000..e7fdd18ccc0 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-ostara-sol.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-smartswitch-t1.png b/sonic-mgmt/docs/testbed/cisco/img/topo-smartswitch-t1.png new file mode 100644 index 00000000000..b24892e6dfc Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-smartswitch-t1.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t0-64.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t0-64.png new file mode 100644 index 00000000000..a005a90c783 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t0-64.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t0-lightning.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t0-lightning.png new file mode 100644 index 00000000000..2a72392efd3 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t0-lightning.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t0.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t0.png new file mode 100644 index 00000000000..83d84621777 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t0.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t1-56-lag.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-56-lag.png new file mode 100644 index 00000000000..82af5232f9d Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-56-lag.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t1-64-lag.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-64-lag.png new file mode 100644 index 00000000000..83e33e31702 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-64-lag.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag-lightning.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag-lightning.png new file mode 100644 index 00000000000..bdf1b8faa69 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag-lightning.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag-superbolt.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag-superbolt.png new file mode 100644 index 00000000000..2476d9dd010 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag-superbolt.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag.png new file mode 100644 index 00000000000..330ee5efcef Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t1-lag.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-t2.png b/sonic-mgmt/docs/testbed/cisco/img/topo-t2.png new file mode 100644 index 00000000000..4a23852a3b2 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-t2.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-cicd.png b/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-cicd.png new file mode 100644 index 00000000000..c01cd88d990 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-cicd.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-pns.png b/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-pns.png new file mode 100644 index 00000000000..b56efe5ff85 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-pns.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-sol.png b/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-sol.png new file mode 100644 index 00000000000..d64b5cbeae6 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-tortuga-sol.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-vlan-snake.png b/sonic-mgmt/docs/testbed/cisco/img/topo-vlan-snake.png new file mode 100644 index 00000000000..cd59fbd42f3 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-vlan-snake.png differ diff --git a/sonic-mgmt/docs/testbed/cisco/img/topo-vrf-snake.png b/sonic-mgmt/docs/testbed/cisco/img/topo-vrf-snake.png new file mode 100644 index 00000000000..9bb6c41d5f4 Binary files /dev/null and b/sonic-mgmt/docs/testbed/cisco/img/topo-vrf-snake.png differ diff --git a/docs/testbed/generic_hwsku_port_config.md b/sonic-mgmt/docs/testbed/generic_hwsku_port_config.md similarity index 100% rename from docs/testbed/generic_hwsku_port_config.md rename to sonic-mgmt/docs/testbed/generic_hwsku_port_config.md diff --git a/docs/testbed/img/IxNetwork_Virtual_Topology.png b/sonic-mgmt/docs/testbed/img/IxNetwork_Virtual_Topology.png similarity index 100% rename from docs/testbed/img/IxNetwork_Virtual_Topology.png rename to sonic-mgmt/docs/testbed/img/IxNetwork_Virtual_Topology.png diff --git a/docs/testbed/img/announce_routes_isolated_t1.png b/sonic-mgmt/docs/testbed/img/announce_routes_isolated_t1.png similarity index 100% rename from docs/testbed/img/announce_routes_isolated_t1.png rename to sonic-mgmt/docs/testbed/img/announce_routes_isolated_t1.png diff --git a/docs/testbed/img/announce_routes_m0_mc0.png b/sonic-mgmt/docs/testbed/img/announce_routes_m0_mc0.png similarity index 100% rename from docs/testbed/img/announce_routes_m0_mc0.png rename to sonic-mgmt/docs/testbed/img/announce_routes_m0_mc0.png diff --git a/docs/testbed/img/announce_routes_m1.png b/sonic-mgmt/docs/testbed/img/announce_routes_m1.png similarity index 100% rename from docs/testbed/img/announce_routes_m1.png rename to sonic-mgmt/docs/testbed/img/announce_routes_m1.png diff --git a/docs/testbed/img/announce_routes_mx.png b/sonic-mgmt/docs/testbed/img/announce_routes_mx.png similarity index 100% rename from docs/testbed/img/announce_routes_mx.png rename to sonic-mgmt/docs/testbed/img/announce_routes_mx.png diff --git a/docs/testbed/img/ceos.png b/sonic-mgmt/docs/testbed/img/ceos.png similarity index 100% rename from docs/testbed/img/ceos.png rename to sonic-mgmt/docs/testbed/img/ceos.png diff --git a/docs/testbed/img/datacenter-network.png b/sonic-mgmt/docs/testbed/img/datacenter-network.png similarity index 100% rename from docs/testbed/img/datacenter-network.png rename to sonic-mgmt/docs/testbed/img/datacenter-network.png diff --git a/docs/testbed/img/devutils.jpg b/sonic-mgmt/docs/testbed/img/devutils.jpg similarity index 100% rename from docs/testbed/img/devutils.jpg rename to sonic-mgmt/docs/testbed/img/devutils.jpg diff --git a/docs/testbed/img/failure_workflow.png b/sonic-mgmt/docs/testbed/img/failure_workflow.png similarity index 100% rename from docs/testbed/img/failure_workflow.png rename to sonic-mgmt/docs/testbed/img/failure_workflow.png diff --git a/docs/testbed/img/keysight_ixanvl_testbed_topology.png b/sonic-mgmt/docs/testbed/img/keysight_ixanvl_testbed_topology.png similarity index 100% rename from docs/testbed/img/keysight_ixanvl_testbed_topology.png rename to sonic-mgmt/docs/testbed/img/keysight_ixanvl_testbed_topology.png diff --git a/docs/testbed/img/mgmt-backplane.png b/sonic-mgmt/docs/testbed/img/mgmt-backplane.png similarity index 100% rename from docs/testbed/img/mgmt-backplane.png rename to sonic-mgmt/docs/testbed/img/mgmt-backplane.png diff --git a/docs/testbed/img/multi-servers-testbed.png b/sonic-mgmt/docs/testbed/img/multi-servers-testbed.png similarity index 100% rename from docs/testbed/img/multi-servers-testbed.png rename to sonic-mgmt/docs/testbed/img/multi-servers-testbed.png diff --git a/docs/testbed/img/multiple-dut-topology.png b/sonic-mgmt/docs/testbed/img/multiple-dut-topology.png similarity index 100% rename from docs/testbed/img/multiple-dut-topology.png rename to sonic-mgmt/docs/testbed/img/multiple-dut-topology.png diff --git a/docs/testbed/img/multiple-ixnetwork.PNG b/sonic-mgmt/docs/testbed/img/multiple-ixnetwork.PNG similarity index 100% rename from docs/testbed/img/multiple-ixnetwork.PNG rename to sonic-mgmt/docs/testbed/img/multiple-ixnetwork.PNG diff --git a/docs/testbed/img/physical_connection.png b/sonic-mgmt/docs/testbed/img/physical_connection.png similarity index 100% rename from docs/testbed/img/physical_connection.png rename to sonic-mgmt/docs/testbed/img/physical_connection.png diff --git a/docs/testbed/img/ptf-connection-on-multi-servers-testbed.png b/sonic-mgmt/docs/testbed/img/ptf-connection-on-multi-servers-testbed.png similarity index 100% rename from docs/testbed/img/ptf-connection-on-multi-servers-testbed.png rename to sonic-mgmt/docs/testbed/img/ptf-connection-on-multi-servers-testbed.png diff --git a/docs/testbed/img/sentinel_framework.png b/sonic-mgmt/docs/testbed/img/sentinel_framework.png similarity index 100% rename from docs/testbed/img/sentinel_framework.png rename to sonic-mgmt/docs/testbed/img/sentinel_framework.png diff --git a/docs/testbed/img/single-dut-topology.png b/sonic-mgmt/docs/testbed/img/single-dut-topology.png similarity index 100% rename from docs/testbed/img/single-dut-topology.png rename to sonic-mgmt/docs/testbed/img/single-dut-topology.png diff --git a/docs/testbed/img/single-server-testbed.png b/sonic-mgmt/docs/testbed/img/single-server-testbed.png similarity index 100% rename from docs/testbed/img/single-server-testbed.png rename to sonic-mgmt/docs/testbed/img/single-server-testbed.png diff --git a/docs/testbed/img/sonic-dash-topology.svg b/sonic-mgmt/docs/testbed/img/sonic-dash-topology.svg similarity index 100% rename from docs/testbed/img/sonic-dash-topology.svg rename to sonic-mgmt/docs/testbed/img/sonic-dash-topology.svg diff --git a/docs/testbed/img/sonic-mgmt.png b/sonic-mgmt/docs/testbed/img/sonic-mgmt.png similarity index 100% rename from docs/testbed/img/sonic-mgmt.png rename to sonic-mgmt/docs/testbed/img/sonic-mgmt.png diff --git a/docs/testbed/img/testbed-direct.png b/sonic-mgmt/docs/testbed/img/testbed-direct.png similarity index 100% rename from docs/testbed/img/testbed-direct.png rename to sonic-mgmt/docs/testbed/img/testbed-direct.png diff --git a/docs/testbed/img/testbed-injected.png b/sonic-mgmt/docs/testbed/img/testbed-injected.png similarity index 100% rename from docs/testbed/img/testbed-injected.png rename to sonic-mgmt/docs/testbed/img/testbed-injected.png diff --git a/docs/testbed/img/testbed-m0.png b/sonic-mgmt/docs/testbed/img/testbed-m0.png similarity index 100% rename from docs/testbed/img/testbed-m0.png rename to sonic-mgmt/docs/testbed/img/testbed-m0.png diff --git a/docs/testbed/img/testbed-mx.png b/sonic-mgmt/docs/testbed/img/testbed-mx.png similarity index 100% rename from docs/testbed/img/testbed-mx.png rename to sonic-mgmt/docs/testbed/img/testbed-mx.png diff --git a/docs/testbed/img/testbed-ocs_logic_topo.png b/sonic-mgmt/docs/testbed/img/testbed-ocs_logic_topo.png similarity index 100% rename from docs/testbed/img/testbed-ocs_logic_topo.png rename to sonic-mgmt/docs/testbed/img/testbed-ocs_logic_topo.png diff --git a/docs/testbed/img/testbed-ocs_topology.png b/sonic-mgmt/docs/testbed/img/testbed-ocs_topology.png similarity index 100% rename from docs/testbed/img/testbed-ocs_topology.png rename to sonic-mgmt/docs/testbed/img/testbed-ocs_topology.png diff --git a/docs/testbed/img/testbed-ptf32.png b/sonic-mgmt/docs/testbed/img/testbed-ptf32.png similarity index 100% rename from docs/testbed/img/testbed-ptf32.png rename to sonic-mgmt/docs/testbed/img/testbed-ptf32.png diff --git a/docs/testbed/img/testbed-ptf64.png b/sonic-mgmt/docs/testbed/img/testbed-ptf64.png similarity index 100% rename from docs/testbed/img/testbed-ptf64.png rename to sonic-mgmt/docs/testbed/img/testbed-ptf64.png diff --git a/docs/testbed/img/testbed-server.png b/sonic-mgmt/docs/testbed/img/testbed-server.png similarity index 100% rename from docs/testbed/img/testbed-server.png rename to sonic-mgmt/docs/testbed/img/testbed-server.png diff --git a/docs/testbed/img/testbed-t0-56.png b/sonic-mgmt/docs/testbed/img/testbed-t0-56.png similarity index 100% rename from docs/testbed/img/testbed-t0-56.png rename to sonic-mgmt/docs/testbed/img/testbed-t0-56.png diff --git a/docs/testbed/img/testbed-t0-80.png b/sonic-mgmt/docs/testbed/img/testbed-t0-80.png similarity index 100% rename from docs/testbed/img/testbed-t0-80.png rename to sonic-mgmt/docs/testbed/img/testbed-t0-80.png diff --git a/docs/testbed/img/testbed-t0-internal.png b/sonic-mgmt/docs/testbed/img/testbed-t0-internal.png similarity index 100% rename from docs/testbed/img/testbed-t0-internal.png rename to sonic-mgmt/docs/testbed/img/testbed-t0-internal.png diff --git a/docs/testbed/img/testbed-t0-vssetup.png b/sonic-mgmt/docs/testbed/img/testbed-t0-vssetup.png similarity index 100% rename from docs/testbed/img/testbed-t0-vssetup.png rename to sonic-mgmt/docs/testbed/img/testbed-t0-vssetup.png diff --git a/docs/testbed/img/testbed-t0.png b/sonic-mgmt/docs/testbed/img/testbed-t0.png similarity index 100% rename from docs/testbed/img/testbed-t0.png rename to sonic-mgmt/docs/testbed/img/testbed-t0.png diff --git a/docs/testbed/img/testbed-t1-lag-internal.png b/sonic-mgmt/docs/testbed/img/testbed-t1-lag-internal.png similarity index 100% rename from docs/testbed/img/testbed-t1-lag-internal.png rename to sonic-mgmt/docs/testbed/img/testbed-t1-lag-internal.png diff --git a/docs/testbed/img/testbed-t1-lag-vssetup.png b/sonic-mgmt/docs/testbed/img/testbed-t1-lag-vssetup.png similarity index 100% rename from docs/testbed/img/testbed-t1-lag-vssetup.png rename to sonic-mgmt/docs/testbed/img/testbed-t1-lag-vssetup.png diff --git a/docs/testbed/img/testbed-t1-lag.png b/sonic-mgmt/docs/testbed/img/testbed-t1-lag.png similarity index 100% rename from docs/testbed/img/testbed-t1-lag.png rename to sonic-mgmt/docs/testbed/img/testbed-t1-lag.png diff --git a/docs/testbed/img/testbed-t1.png b/sonic-mgmt/docs/testbed/img/testbed-t1.png similarity index 100% rename from docs/testbed/img/testbed-t1.png rename to sonic-mgmt/docs/testbed/img/testbed-t1.png diff --git a/docs/testbed/img/testbed-t2.png b/sonic-mgmt/docs/testbed/img/testbed-t2.png similarity index 100% rename from docs/testbed/img/testbed-t2.png rename to sonic-mgmt/docs/testbed/img/testbed-t2.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-DUT.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-DUT.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-DUT.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-DUT.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-PTF-config.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-PTF-config.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-PTF-config.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-PTF-config.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-high-level-flow.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-high-level-flow.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-high-level-flow.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-high-level-flow.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-ovs.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-ovs.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-ovs.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-ovs.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-topology.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-topology.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-topology.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-topology.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-traffic-1.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-traffic-1.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-traffic-1.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-traffic-1.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-traffic-2.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-traffic-2.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-traffic-2.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-traffic-2.png diff --git a/docs/testbed/img/testbed-vSmartSwitch-traffic-3.png b/sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-traffic-3.png similarity index 100% rename from docs/testbed/img/testbed-vSmartSwitch-traffic-3.png rename to sonic-mgmt/docs/testbed/img/testbed-vSmartSwitch-traffic-3.png diff --git a/docs/testbed/img/testbed-wan-pub-cisco.png b/sonic-mgmt/docs/testbed/img/testbed-wan-pub-cisco.png similarity index 100% rename from docs/testbed/img/testbed-wan-pub-cisco.png rename to sonic-mgmt/docs/testbed/img/testbed-wan-pub-cisco.png diff --git a/docs/testbed/img/testbed-wan-pub-vssetup.png b/sonic-mgmt/docs/testbed/img/testbed-wan-pub-vssetup.png similarity index 100% rename from docs/testbed/img/testbed-wan-pub-vssetup.png rename to sonic-mgmt/docs/testbed/img/testbed-wan-pub-vssetup.png diff --git a/docs/testbed/img/testbed-wan-xdut-xlink-cisco.png b/sonic-mgmt/docs/testbed/img/testbed-wan-xdut-xlink-cisco.png similarity index 100% rename from docs/testbed/img/testbed-wan-xdut-xlink-cisco.png rename to sonic-mgmt/docs/testbed/img/testbed-wan-xdut-xlink-cisco.png diff --git a/docs/testbed/img/testbed-wan-xdut-xlink-vssetup.png b/sonic-mgmt/docs/testbed/img/testbed-wan-xdut-xlink-vssetup.png similarity index 100% rename from docs/testbed/img/testbed-wan-xdut-xlink-vssetup.png rename to sonic-mgmt/docs/testbed/img/testbed-wan-xdut-xlink-vssetup.png diff --git a/docs/testbed/img/testbed-wan-xlink-cisco.png b/sonic-mgmt/docs/testbed/img/testbed-wan-xlink-cisco.png similarity index 100% rename from docs/testbed/img/testbed-wan-xlink-cisco.png rename to sonic-mgmt/docs/testbed/img/testbed-wan-xlink-cisco.png diff --git a/docs/testbed/img/testbed-wan-xlink-vssetup.png b/sonic-mgmt/docs/testbed/img/testbed-wan-xlink-vssetup.png similarity index 100% rename from docs/testbed/img/testbed-wan-xlink-vssetup.png rename to sonic-mgmt/docs/testbed/img/testbed-wan-xlink-vssetup.png diff --git a/docs/testbed/img/testbed.png b/sonic-mgmt/docs/testbed/img/testbed.png similarity index 100% rename from docs/testbed/img/testbed.png rename to sonic-mgmt/docs/testbed/img/testbed.png diff --git a/docs/testbed/img/testbed_dualtor_aa_topo.png b/sonic-mgmt/docs/testbed/img/testbed_dualtor_aa_topo.png similarity index 100% rename from docs/testbed/img/testbed_dualtor_aa_topo.png rename to sonic-mgmt/docs/testbed/img/testbed_dualtor_aa_topo.png diff --git a/docs/testbed/img/testbed_dualtor_mixed_topo.png b/sonic-mgmt/docs/testbed/img/testbed_dualtor_mixed_topo.png similarity index 100% rename from docs/testbed/img/testbed_dualtor_mixed_topo.png rename to sonic-mgmt/docs/testbed/img/testbed_dualtor_mixed_topo.png diff --git a/docs/testbed/img/testbed_dualtor_topo.png b/sonic-mgmt/docs/testbed/img/testbed_dualtor_topo.png similarity index 100% rename from docs/testbed/img/testbed_dualtor_topo.png rename to sonic-mgmt/docs/testbed/img/testbed_dualtor_topo.png diff --git a/docs/testbed/img/testbed_t1-smartswitch.png b/sonic-mgmt/docs/testbed/img/testbed_t1-smartswitch.png similarity index 100% rename from docs/testbed/img/testbed_t1-smartswitch.png rename to sonic-mgmt/docs/testbed/img/testbed_t1-smartswitch.png diff --git a/docs/testbed/img/testbed_v2_provision_db.png b/sonic-mgmt/docs/testbed/img/testbed_v2_provision_db.png similarity index 100% rename from docs/testbed/img/testbed_v2_provision_db.png rename to sonic-mgmt/docs/testbed/img/testbed_v2_provision_db.png diff --git a/docs/testbed/img/testbed_v2_start_db.png b/sonic-mgmt/docs/testbed/img/testbed_v2_start_db.png similarity index 100% rename from docs/testbed/img/testbed_v2_start_db.png rename to sonic-mgmt/docs/testbed/img/testbed_v2_start_db.png diff --git a/docs/testbed/img/testserver_vlan_intfs.png b/sonic-mgmt/docs/testbed/img/testserver_vlan_intfs.png similarity index 100% rename from docs/testbed/img/testserver_vlan_intfs.png rename to sonic-mgmt/docs/testbed/img/testserver_vlan_intfs.png diff --git a/docs/testbed/img/validation_workflow.png b/sonic-mgmt/docs/testbed/img/validation_workflow.png similarity index 100% rename from docs/testbed/img/validation_workflow.png rename to sonic-mgmt/docs/testbed/img/validation_workflow.png diff --git a/docs/testbed/img/veos.png b/sonic-mgmt/docs/testbed/img/veos.png similarity index 100% rename from docs/testbed/img/veos.png rename to sonic-mgmt/docs/testbed/img/veos.png diff --git a/docs/testbed/sai_quality/CheckSAIHeaderVersionAndSONiCBranch.md b/sonic-mgmt/docs/testbed/sai_quality/CheckSAIHeaderVersionAndSONiCBranch.md similarity index 100% rename from docs/testbed/sai_quality/CheckSAIHeaderVersionAndSONiCBranch.md rename to sonic-mgmt/docs/testbed/sai_quality/CheckSAIHeaderVersionAndSONiCBranch.md diff --git a/docs/testbed/sai_quality/DeploySAITestTopologyWithSONiC-MGMT.md b/sonic-mgmt/docs/testbed/sai_quality/DeploySAITestTopologyWithSONiC-MGMT.md similarity index 100% rename from docs/testbed/sai_quality/DeploySAITestTopologyWithSONiC-MGMT.md rename to sonic-mgmt/docs/testbed/sai_quality/DeploySAITestTopologyWithSONiC-MGMT.md diff --git a/docs/testbed/sai_quality/ExampleCheckSonicVersionAndBuildSaiserverDocker.md b/sonic-mgmt/docs/testbed/sai_quality/ExampleCheckSonicVersionAndBuildSaiserverDocker.md similarity index 100% rename from docs/testbed/sai_quality/ExampleCheckSonicVersionAndBuildSaiserverDocker.md rename to sonic-mgmt/docs/testbed/sai_quality/ExampleCheckSonicVersionAndBuildSaiserverDocker.md diff --git a/docs/testbed/sai_quality/ExampleStartSaiServerDockerInDUT.md b/sonic-mgmt/docs/testbed/sai_quality/ExampleStartSaiServerDockerInDUT.md similarity index 100% rename from docs/testbed/sai_quality/ExampleStartSaiServerDockerInDUT.md rename to sonic-mgmt/docs/testbed/sai_quality/ExampleStartSaiServerDockerInDUT.md diff --git a/docs/testbed/sai_quality/GetDockerBuildingRelatedResources.md b/sonic-mgmt/docs/testbed/sai_quality/GetDockerBuildingRelatedResources.md similarity index 100% rename from docs/testbed/sai_quality/GetDockerBuildingRelatedResources.md rename to sonic-mgmt/docs/testbed/sai_quality/GetDockerBuildingRelatedResources.md diff --git a/docs/testbed/sai_quality/PTF-SAIv2TestingGuide.md b/sonic-mgmt/docs/testbed/sai_quality/PTF-SAIv2TestingGuide.md similarity index 100% rename from docs/testbed/sai_quality/PTF-SAIv2TestingGuide.md rename to sonic-mgmt/docs/testbed/sai_quality/PTF-SAIv2TestingGuide.md diff --git a/docs/testbed/sai_quality/README.md b/sonic-mgmt/docs/testbed/sai_quality/README.md similarity index 100% rename from docs/testbed/sai_quality/README.md rename to sonic-mgmt/docs/testbed/sai_quality/README.md diff --git a/docs/testbed/sai_quality/SAI.Example.md b/sonic-mgmt/docs/testbed/sai_quality/SAI.Example.md similarity index 100% rename from docs/testbed/sai_quality/SAI.Example.md rename to sonic-mgmt/docs/testbed/sai_quality/SAI.Example.md diff --git a/docs/testplan/ACL-Outer-Vlan-test-plan.md b/sonic-mgmt/docs/testplan/ACL-Outer-Vlan-test-plan.md similarity index 100% rename from docs/testplan/ACL-Outer-Vlan-test-plan.md rename to sonic-mgmt/docs/testplan/ACL-Outer-Vlan-test-plan.md diff --git a/docs/testplan/ACL-test-plan.md b/sonic-mgmt/docs/testplan/ACL-test-plan.md similarity index 100% rename from docs/testplan/ACL-test-plan.md rename to sonic-mgmt/docs/testplan/ACL-test-plan.md diff --git a/docs/testplan/ACL/Dataplane-ACL-stress-test-plan.md b/sonic-mgmt/docs/testplan/ACL/Dataplane-ACL-stress-test-plan.md similarity index 100% rename from docs/testplan/ACL/Dataplane-ACL-stress-test-plan.md rename to sonic-mgmt/docs/testplan/ACL/Dataplane-ACL-stress-test-plan.md diff --git a/docs/testplan/ARS-test-plan.md b/sonic-mgmt/docs/testplan/ARS-test-plan.md similarity index 100% rename from docs/testplan/ARS-test-plan.md rename to sonic-mgmt/docs/testplan/ARS-test-plan.md diff --git a/docs/testplan/Add-cluster-with-GCU.md b/sonic-mgmt/docs/testplan/Add-cluster-with-GCU.md similarity index 100% rename from docs/testplan/Add-cluster-with-GCU.md rename to sonic-mgmt/docs/testplan/Add-cluster-with-GCU.md diff --git a/docs/testplan/BFD-OSPF-test-plan.md b/sonic-mgmt/docs/testplan/BFD-OSPF-test-plan.md similarity index 100% rename from docs/testplan/BFD-OSPF-test-plan.md rename to sonic-mgmt/docs/testplan/BFD-OSPF-test-plan.md diff --git a/docs/testplan/BFD-echomode-test-plan.md b/sonic-mgmt/docs/testplan/BFD-echomode-test-plan.md similarity index 100% rename from docs/testplan/BFD-echomode-test-plan.md rename to sonic-mgmt/docs/testplan/BFD-echomode-test-plan.md diff --git a/docs/testplan/BGP Convergence Testplan for single DUT.md b/sonic-mgmt/docs/testplan/BGP Convergence Testplan for single DUT.md similarity index 100% rename from docs/testplan/BGP Convergence Testplan for single DUT.md rename to sonic-mgmt/docs/testplan/BGP Convergence Testplan for single DUT.md diff --git a/docs/testplan/BGP IPv6 Over NLRI.md b/sonic-mgmt/docs/testplan/BGP IPv6 Over NLRI.md similarity index 100% rename from docs/testplan/BGP IPv6 Over NLRI.md rename to sonic-mgmt/docs/testplan/BGP IPv6 Over NLRI.md diff --git a/docs/testplan/BGP-4-Byte_ASN_Community.md b/sonic-mgmt/docs/testplan/BGP-4-Byte_ASN_Community.md similarity index 100% rename from docs/testplan/BGP-4-Byte_ASN_Community.md rename to sonic-mgmt/docs/testplan/BGP-4-Byte_ASN_Community.md diff --git a/docs/testplan/BGP-4-Byte_AS_Translation.md b/sonic-mgmt/docs/testplan/BGP-4-Byte_AS_Translation.md similarity index 100% rename from docs/testplan/BGP-4-Byte_AS_Translation.md rename to sonic-mgmt/docs/testplan/BGP-4-Byte_AS_Translation.md diff --git a/docs/testplan/BGP-Aggregate-Address.md b/sonic-mgmt/docs/testplan/BGP-Aggregate-Address.md similarity index 100% rename from docs/testplan/BGP-Aggregate-Address.md rename to sonic-mgmt/docs/testplan/BGP-Aggregate-Address.md diff --git a/docs/testplan/BGP-Allow-List.md b/sonic-mgmt/docs/testplan/BGP-Allow-List.md similarity index 100% rename from docs/testplan/BGP-Allow-List.md rename to sonic-mgmt/docs/testplan/BGP-Allow-List.md diff --git a/docs/testplan/BGP-Authentication.md b/sonic-mgmt/docs/testplan/BGP-Authentication.md similarity index 100% rename from docs/testplan/BGP-Authentication.md rename to sonic-mgmt/docs/testplan/BGP-Authentication.md diff --git a/docs/testplan/BGP-BBR.md b/sonic-mgmt/docs/testplan/BGP-BBR.md similarity index 100% rename from docs/testplan/BGP-BBR.md rename to sonic-mgmt/docs/testplan/BGP-BBR.md diff --git a/docs/testplan/BGP-BGPMON.md b/sonic-mgmt/docs/testplan/BGP-BGPMON.md similarity index 100% rename from docs/testplan/BGP-BGPMON.md rename to sonic-mgmt/docs/testplan/BGP-BGPMON.md diff --git a/docs/testplan/BGP-BGPSentinel.md b/sonic-mgmt/docs/testplan/BGP-BGPSentinel.md similarity index 100% rename from docs/testplan/BGP-BGPSentinel.md rename to sonic-mgmt/docs/testplan/BGP-BGPSentinel.md diff --git a/docs/testplan/BGP-Conformance-IxANVL.md b/sonic-mgmt/docs/testplan/BGP-Conformance-IxANVL.md similarity index 100% rename from docs/testplan/BGP-Conformance-IxANVL.md rename to sonic-mgmt/docs/testplan/BGP-Conformance-IxANVL.md diff --git a/docs/testplan/BGP-Convergence-Testplan-for-Benchmark-Performance.md b/sonic-mgmt/docs/testplan/BGP-Convergence-Testplan-for-Benchmark-Performance.md similarity index 100% rename from docs/testplan/BGP-Convergence-Testplan-for-Benchmark-Performance.md rename to sonic-mgmt/docs/testplan/BGP-Convergence-Testplan-for-Benchmark-Performance.md diff --git a/docs/testplan/BGP-Dynamic-Peer-Range-Modify.md b/sonic-mgmt/docs/testplan/BGP-Dynamic-Peer-Range-Modify.md similarity index 100% rename from docs/testplan/BGP-Dynamic-Peer-Range-Modify.md rename to sonic-mgmt/docs/testplan/BGP-Dynamic-Peer-Range-Modify.md diff --git a/docs/testplan/BGP-GR-helper-mode-test-plan.md b/sonic-mgmt/docs/testplan/BGP-GR-helper-mode-test-plan.md similarity index 100% rename from docs/testplan/BGP-GR-helper-mode-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-GR-helper-mode-test-plan.md diff --git a/docs/testplan/BGP-MP-test-plan.md b/sonic-mgmt/docs/testplan/BGP-MP-test-plan.md similarity index 100% rename from docs/testplan/BGP-MP-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-MP-test-plan.md diff --git a/docs/testplan/BGP-Passive_peering.md b/sonic-mgmt/docs/testplan/BGP-Passive_peering.md similarity index 100% rename from docs/testplan/BGP-Passive_peering.md rename to sonic-mgmt/docs/testplan/BGP-Passive_peering.md diff --git a/docs/testplan/BGP-Router-ID-test-plan.md b/sonic-mgmt/docs/testplan/BGP-Router-ID-test-plan.md similarity index 100% rename from docs/testplan/BGP-Router-ID-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-Router-ID-test-plan.md diff --git a/docs/testplan/BGP-Scale-Test.md b/sonic-mgmt/docs/testplan/BGP-Scale-Test.md similarity index 100% rename from docs/testplan/BGP-Scale-Test.md rename to sonic-mgmt/docs/testplan/BGP-Scale-Test.md diff --git a/docs/testplan/BGP-Session-Flaps.md b/sonic-mgmt/docs/testplan/BGP-Session-Flaps.md similarity index 100% rename from docs/testplan/BGP-Session-Flaps.md rename to sonic-mgmt/docs/testplan/BGP-Session-Flaps.md diff --git a/docs/testplan/BGP-Suppress-FIB-Pending-test-plan-T2-Chassis.md b/sonic-mgmt/docs/testplan/BGP-Suppress-FIB-Pending-test-plan-T2-Chassis.md similarity index 100% rename from docs/testplan/BGP-Suppress-FIB-Pending-test-plan-T2-Chassis.md rename to sonic-mgmt/docs/testplan/BGP-Suppress-FIB-Pending-test-plan-T2-Chassis.md diff --git a/docs/testplan/BGP-Suppress-FIB-Pending-test-plan.md b/sonic-mgmt/docs/testplan/BGP-Suppress-FIB-Pending-test-plan.md similarity index 100% rename from docs/testplan/BGP-Suppress-FIB-Pending-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-Suppress-FIB-Pending-test-plan.md diff --git a/docs/testplan/BGP-T2-Anchor-prefix-test-plan.md b/sonic-mgmt/docs/testplan/BGP-T2-Anchor-prefix-test-plan.md similarity index 100% rename from docs/testplan/BGP-T2-Anchor-prefix-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-T2-Anchor-prefix-test-plan.md diff --git a/docs/testplan/BGP-TSA.md b/sonic-mgmt/docs/testplan/BGP-TSA.md similarity index 100% rename from docs/testplan/BGP-TSA.md rename to sonic-mgmt/docs/testplan/BGP-TSA.md diff --git a/docs/testplan/BGP-Update-Timer.md b/sonic-mgmt/docs/testplan/BGP-Update-Timer.md similarity index 100% rename from docs/testplan/BGP-Update-Timer.md rename to sonic-mgmt/docs/testplan/BGP-Update-Timer.md diff --git a/docs/testplan/BGP-bounce-test-plan.md b/sonic-mgmt/docs/testplan/BGP-bounce-test-plan.md similarity index 100% rename from docs/testplan/BGP-bounce-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-bounce-test-plan.md diff --git a/docs/testplan/BGP-queue-test-plan.md b/sonic-mgmt/docs/testplan/BGP-queue-test-plan.md similarity index 100% rename from docs/testplan/BGP-queue-test-plan.md rename to sonic-mgmt/docs/testplan/BGP-queue-test-plan.md diff --git a/docs/testplan/CACL-function-test-plan.md b/sonic-mgmt/docs/testplan/CACL-function-test-plan.md similarity index 100% rename from docs/testplan/CACL-function-test-plan.md rename to sonic-mgmt/docs/testplan/CACL-function-test-plan.md diff --git a/docs/testplan/CRM-test-plan.md b/sonic-mgmt/docs/testplan/CRM-test-plan.md similarity index 100% rename from docs/testplan/CRM-test-plan.md rename to sonic-mgmt/docs/testplan/CRM-test-plan.md diff --git a/docs/testplan/Chassis-everflow-test-plan.md b/sonic-mgmt/docs/testplan/Chassis-everflow-test-plan.md similarity index 100% rename from docs/testplan/Chassis-everflow-test-plan.md rename to sonic-mgmt/docs/testplan/Chassis-everflow-test-plan.md diff --git a/docs/testplan/Chassis-fabric-test-plan.md b/sonic-mgmt/docs/testplan/Chassis-fabric-test-plan.md similarity index 100% rename from docs/testplan/Chassis-fabric-test-plan.md rename to sonic-mgmt/docs/testplan/Chassis-fabric-test-plan.md diff --git a/docs/testplan/Container-Upgrade-test-plan.md b/sonic-mgmt/docs/testplan/Container-Upgrade-test-plan.md similarity index 100% rename from docs/testplan/Container-Upgrade-test-plan.md rename to sonic-mgmt/docs/testplan/Container-Upgrade-test-plan.md diff --git a/docs/testplan/Convergence measurement in data center networks.md b/sonic-mgmt/docs/testplan/Convergence measurement in data center networks.md similarity index 100% rename from docs/testplan/Convergence measurement in data center networks.md rename to sonic-mgmt/docs/testplan/Convergence measurement in data center networks.md diff --git a/docs/testplan/DHCP-Server-test-plan.md b/sonic-mgmt/docs/testplan/DHCP-Server-test-plan.md similarity index 100% rename from docs/testplan/DHCP-Server-test-plan.md rename to sonic-mgmt/docs/testplan/DHCP-Server-test-plan.md diff --git a/docs/testplan/Distributed-VoQ-Arch-test-plan.md b/sonic-mgmt/docs/testplan/Distributed-VoQ-Arch-test-plan.md similarity index 100% rename from docs/testplan/Distributed-VoQ-Arch-test-plan.md rename to sonic-mgmt/docs/testplan/Distributed-VoQ-Arch-test-plan.md diff --git a/docs/testplan/Downtime Convergence for various reboot scenarios.md b/sonic-mgmt/docs/testplan/Downtime Convergence for various reboot scenarios.md similarity index 100% rename from docs/testplan/Downtime Convergence for various reboot scenarios.md rename to sonic-mgmt/docs/testplan/Downtime Convergence for various reboot scenarios.md diff --git a/docs/testplan/ECMP-Balance-test-plan.md b/sonic-mgmt/docs/testplan/ECMP-Balance-test-plan.md similarity index 100% rename from docs/testplan/ECMP-Balance-test-plan.md rename to sonic-mgmt/docs/testplan/ECMP-Balance-test-plan.md diff --git a/docs/testplan/Everflow-test-plan.md b/sonic-mgmt/docs/testplan/Everflow-test-plan.md similarity index 100% rename from docs/testplan/Everflow-test-plan.md rename to sonic-mgmt/docs/testplan/Everflow-test-plan.md diff --git a/docs/testplan/Extend_L3V6ACL_test_plan.md b/sonic-mgmt/docs/testplan/Extend_L3V6ACL_test_plan.md similarity index 100% rename from docs/testplan/Extend_L3V6ACL_test_plan.md rename to sonic-mgmt/docs/testplan/Extend_L3V6ACL_test_plan.md diff --git a/docs/testplan/FEC_test.md b/sonic-mgmt/docs/testplan/FEC_test.md similarity index 100% rename from docs/testplan/FEC_test.md rename to sonic-mgmt/docs/testplan/FEC_test.md diff --git a/docs/testplan/FWUtil-test-plan.md b/sonic-mgmt/docs/testplan/FWUtil-test-plan.md similarity index 100% rename from docs/testplan/FWUtil-test-plan.md rename to sonic-mgmt/docs/testplan/FWUtil-test-plan.md diff --git a/docs/testplan/GCU-Dynamic-ACL-testplan.md b/sonic-mgmt/docs/testplan/GCU-Dynamic-ACL-testplan.md similarity index 100% rename from docs/testplan/GCU-Dynamic-ACL-testplan.md rename to sonic-mgmt/docs/testplan/GCU-Dynamic-ACL-testplan.md diff --git a/docs/testplan/GH-packet-type-enhancement-test-plan.md b/sonic-mgmt/docs/testplan/GH-packet-type-enhancement-test-plan.md similarity index 100% rename from docs/testplan/GH-packet-type-enhancement-test-plan.md rename to sonic-mgmt/docs/testplan/GH-packet-type-enhancement-test-plan.md diff --git a/docs/testplan/Generic-Hash-test-plan.md b/sonic-mgmt/docs/testplan/Generic-Hash-test-plan.md similarity index 100% rename from docs/testplan/Generic-Hash-test-plan.md rename to sonic-mgmt/docs/testplan/Generic-Hash-test-plan.md diff --git a/docs/testplan/HA-SmartSwitch-test-plan.md b/sonic-mgmt/docs/testplan/HA-SmartSwitch-test-plan.md similarity index 100% rename from docs/testplan/HA-SmartSwitch-test-plan.md rename to sonic-mgmt/docs/testplan/HA-SmartSwitch-test-plan.md diff --git a/docs/testplan/HFT-test-plan.md b/sonic-mgmt/docs/testplan/HFT-test-plan.md similarity index 100% rename from docs/testplan/HFT-test-plan.md rename to sonic-mgmt/docs/testplan/HFT-test-plan.md diff --git a/docs/testplan/HTTP_copy-test-plan.md b/sonic-mgmt/docs/testplan/HTTP_copy-test-plan.md similarity index 100% rename from docs/testplan/HTTP_copy-test-plan.md rename to sonic-mgmt/docs/testplan/HTTP_copy-test-plan.md diff --git a/docs/testplan/IPv4-Decapsulation-test.md b/sonic-mgmt/docs/testplan/IPv4-Decapsulation-test.md similarity index 100% rename from docs/testplan/IPv4-Decapsulation-test.md rename to sonic-mgmt/docs/testplan/IPv4-Decapsulation-test.md diff --git a/docs/testplan/IPv4-Port-Based-DHCP-Server-test-plan.md b/sonic-mgmt/docs/testplan/IPv4-Port-Based-DHCP-Server-test-plan.md similarity index 100% rename from docs/testplan/IPv4-Port-Based-DHCP-Server-test-plan.md rename to sonic-mgmt/docs/testplan/IPv4-Port-Based-DHCP-Server-test-plan.md diff --git a/docs/testplan/Img/BGP_Suppress_FIB_Pending_Topo.png b/sonic-mgmt/docs/testplan/Img/BGP_Suppress_FIB_Pending_Topo.png similarity index 100% rename from docs/testplan/Img/BGP_Suppress_FIB_Pending_Topo.png rename to sonic-mgmt/docs/testplan/Img/BGP_Suppress_FIB_Pending_Topo.png diff --git a/docs/testplan/Img/Bgp_Suppress_FIB_Pending_Use_Case.png b/sonic-mgmt/docs/testplan/Img/Bgp_Suppress_FIB_Pending_Use_Case.png similarity index 100% rename from docs/testplan/Img/Bgp_Suppress_FIB_Pending_Use_Case.png rename to sonic-mgmt/docs/testplan/Img/Bgp_Suppress_FIB_Pending_Use_Case.png diff --git a/docs/testplan/Img/Downtime-Convergence-Topology.png b/sonic-mgmt/docs/testplan/Img/Downtime-Convergence-Topology.png similarity index 100% rename from docs/testplan/Img/Downtime-Convergence-Topology.png rename to sonic-mgmt/docs/testplan/Img/Downtime-Convergence-Topology.png diff --git a/docs/testplan/Img/Downtime-convergence-graph.png b/sonic-mgmt/docs/testplan/Img/Downtime-convergence-graph.png similarity index 100% rename from docs/testplan/Img/Downtime-convergence-graph.png rename to sonic-mgmt/docs/testplan/Img/Downtime-convergence-graph.png diff --git a/docs/testplan/Img/Failover_convergence.png b/sonic-mgmt/docs/testplan/Img/Failover_convergence.png similarity index 100% rename from docs/testplan/Img/Failover_convergence.png rename to sonic-mgmt/docs/testplan/Img/Failover_convergence.png diff --git a/docs/testplan/Img/Local_Link_Failure.png b/sonic-mgmt/docs/testplan/Img/Local_Link_Failure.png similarity index 100% rename from docs/testplan/Img/Local_Link_Failure.png rename to sonic-mgmt/docs/testplan/Img/Local_Link_Failure.png diff --git a/docs/testplan/Img/Multi_link_failure.png b/sonic-mgmt/docs/testplan/Img/Multi_link_failure.png similarity index 100% rename from docs/testplan/Img/Multi_link_failure.png rename to sonic-mgmt/docs/testplan/Img/Multi_link_failure.png diff --git a/docs/testplan/Img/Multiple_Remote_Link_Failure.png b/sonic-mgmt/docs/testplan/Img/Multiple_Remote_Link_Failure.png similarity index 100% rename from docs/testplan/Img/Multiple_Remote_Link_Failure.png rename to sonic-mgmt/docs/testplan/Img/Multiple_Remote_Link_Failure.png diff --git a/docs/testplan/Img/PFC_Testcase1.png b/sonic-mgmt/docs/testplan/Img/PFC_Testcase1.png similarity index 100% rename from docs/testplan/Img/PFC_Testcase1.png rename to sonic-mgmt/docs/testplan/Img/PFC_Testcase1.png diff --git a/docs/testplan/Img/PFC_Testcase2.png b/sonic-mgmt/docs/testplan/Img/PFC_Testcase2.png similarity index 100% rename from docs/testplan/Img/PFC_Testcase2.png rename to sonic-mgmt/docs/testplan/Img/PFC_Testcase2.png diff --git a/docs/testplan/Img/PFC_Testcase3.png b/sonic-mgmt/docs/testplan/Img/PFC_Testcase3.png similarity index 100% rename from docs/testplan/Img/PFC_Testcase3.png rename to sonic-mgmt/docs/testplan/Img/PFC_Testcase3.png diff --git a/docs/testplan/Img/PFC_Testcase4.png b/sonic-mgmt/docs/testplan/Img/PFC_Testcase4.png similarity index 100% rename from docs/testplan/Img/PFC_Testcase4.png rename to sonic-mgmt/docs/testplan/Img/PFC_Testcase4.png diff --git a/docs/testplan/Img/PFC_Testcase_5.png b/sonic-mgmt/docs/testplan/Img/PFC_Testcase_5.png similarity index 100% rename from docs/testplan/Img/PFC_Testcase_5.png rename to sonic-mgmt/docs/testplan/Img/PFC_Testcase_5.png diff --git a/docs/testplan/Img/PFC_Testcase_6.png b/sonic-mgmt/docs/testplan/Img/PFC_Testcase_6.png similarity index 100% rename from docs/testplan/Img/PFC_Testcase_6.png rename to sonic-mgmt/docs/testplan/Img/PFC_Testcase_6.png diff --git a/docs/testplan/Img/Packet_Trimming_Asymmetric_DSCP.png b/sonic-mgmt/docs/testplan/Img/Packet_Trimming_Asymmetric_DSCP.png similarity index 100% rename from docs/testplan/Img/Packet_Trimming_Asymmetric_DSCP.png rename to sonic-mgmt/docs/testplan/Img/Packet_Trimming_Asymmetric_DSCP.png diff --git a/docs/testplan/Img/Packet_Trimming_Process.png b/sonic-mgmt/docs/testplan/Img/Packet_Trimming_Process.png similarity index 100% rename from docs/testplan/Img/Packet_Trimming_Process.png rename to sonic-mgmt/docs/testplan/Img/Packet_Trimming_Process.png diff --git a/docs/testplan/Img/Packet_Trimming_Symmetric_DSCP.png b/sonic-mgmt/docs/testplan/Img/Packet_Trimming_Symmetric_DSCP.png similarity index 100% rename from docs/testplan/Img/Packet_Trimming_Symmetric_DSCP.png rename to sonic-mgmt/docs/testplan/Img/Packet_Trimming_Symmetric_DSCP.png diff --git a/docs/testplan/Img/RIB-IN-Convergence_Topology.png b/sonic-mgmt/docs/testplan/Img/RIB-IN-Convergence_Topology.png similarity index 100% rename from docs/testplan/Img/RIB-IN-Convergence_Topology.png rename to sonic-mgmt/docs/testplan/Img/RIB-IN-Convergence_Topology.png diff --git a/docs/testplan/Img/RIB-IN_Capacity_Test.png b/sonic-mgmt/docs/testplan/Img/RIB-IN_Capacity_Test.png similarity index 100% rename from docs/testplan/Img/RIB-IN_Capacity_Test.png rename to sonic-mgmt/docs/testplan/Img/RIB-IN_Capacity_Test.png diff --git a/docs/testplan/Img/RIB-IN_Convergence_graph.png b/sonic-mgmt/docs/testplan/Img/RIB-IN_Convergence_graph.png similarity index 100% rename from docs/testplan/Img/RIB-IN_Convergence_graph.png rename to sonic-mgmt/docs/testplan/Img/RIB-IN_Convergence_graph.png diff --git a/docs/testplan/Img/RIB-IN_convergence_test.png b/sonic-mgmt/docs/testplan/Img/RIB-IN_convergence_test.png similarity index 100% rename from docs/testplan/Img/RIB-IN_convergence_test.png rename to sonic-mgmt/docs/testplan/Img/RIB-IN_convergence_test.png diff --git a/docs/testplan/Img/Route_Performance.png b/sonic-mgmt/docs/testplan/Img/Route_Performance.png similarity index 100% rename from docs/testplan/Img/Route_Performance.png rename to sonic-mgmt/docs/testplan/Img/Route_Performance.png diff --git a/docs/testplan/Img/Route_Performance_multiple_sessions.png b/sonic-mgmt/docs/testplan/Img/Route_Performance_multiple_sessions.png similarity index 100% rename from docs/testplan/Img/Route_Performance_multiple_sessions.png rename to sonic-mgmt/docs/testplan/Img/Route_Performance_multiple_sessions.png diff --git a/docs/testplan/Img/SAG_Topology.png b/sonic-mgmt/docs/testplan/Img/SAG_Topology.png similarity index 100% rename from docs/testplan/Img/SAG_Topology.png rename to sonic-mgmt/docs/testplan/Img/SAG_Topology.png diff --git a/docs/testplan/Img/SONiC_Chassis_Topology.png b/sonic-mgmt/docs/testplan/Img/SONiC_Chassis_Topology.png similarity index 100% rename from docs/testplan/Img/SONiC_Chassis_Topology.png rename to sonic-mgmt/docs/testplan/Img/SONiC_Chassis_Topology.png diff --git a/docs/testplan/Img/Server-T1-Topology.png b/sonic-mgmt/docs/testplan/Img/Server-T1-Topology.png similarity index 100% rename from docs/testplan/Img/Server-T1-Topology.png rename to sonic-mgmt/docs/testplan/Img/Server-T1-Topology.png diff --git a/docs/testplan/Img/Single_DUT_Topology.png b/sonic-mgmt/docs/testplan/Img/Single_DUT_Topology.png similarity index 100% rename from docs/testplan/Img/Single_DUT_Topology.png rename to sonic-mgmt/docs/testplan/Img/Single_DUT_Topology.png diff --git a/docs/testplan/Img/Single_Link_Failure.png b/sonic-mgmt/docs/testplan/Img/Single_Link_Failure.png similarity index 100% rename from docs/testplan/Img/Single_Link_Failure.png rename to sonic-mgmt/docs/testplan/Img/Single_Link_Failure.png diff --git a/docs/testplan/Img/Single_Remote_Link_Failure.png b/sonic-mgmt/docs/testplan/Img/Single_Remote_Link_Failure.png similarity index 100% rename from docs/testplan/Img/Single_Remote_Link_Failure.png rename to sonic-mgmt/docs/testplan/Img/Single_Remote_Link_Failure.png diff --git a/docs/testplan/Img/Sonic_Fabric_Link_Testing_Proposal.png b/sonic-mgmt/docs/testplan/Img/Sonic_Fabric_Link_Testing_Proposal.png similarity index 100% rename from docs/testplan/Img/Sonic_Fabric_Link_Testing_Proposal.png rename to sonic-mgmt/docs/testplan/Img/Sonic_Fabric_Link_Testing_Proposal.png diff --git a/docs/testplan/Img/Switch_acting_as_leaf.png b/sonic-mgmt/docs/testplan/Img/Switch_acting_as_leaf.png similarity index 100% rename from docs/testplan/Img/Switch_acting_as_leaf.png rename to sonic-mgmt/docs/testplan/Img/Switch_acting_as_leaf.png diff --git a/docs/testplan/Img/Switch_as_ToR.png b/sonic-mgmt/docs/testplan/Img/Switch_as_ToR.png similarity index 100% rename from docs/testplan/Img/Switch_as_ToR.png rename to sonic-mgmt/docs/testplan/Img/Switch_as_ToR.png diff --git a/docs/testplan/Img/T2_Convergence_Downlink_LC_Down.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Downlink_LC_Down.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Downlink_LC_Down.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Downlink_LC_Down.png diff --git a/docs/testplan/Img/T2_Convergence_Downlink_Ungraceful_Restart.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Downlink_Ungraceful_Restart.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Downlink_Ungraceful_Restart.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Downlink_Ungraceful_Restart.png diff --git a/docs/testplan/Img/T2_Convergence_Inbound_Traffic.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Inbound_Traffic.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Inbound_Traffic.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Inbound_Traffic.png diff --git a/docs/testplan/Img/T2_Convergence_Link_Down.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Link_Down.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Link_Down.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Link_Down.png diff --git a/docs/testplan/Img/T2_Convergence_Outbound_Traffic.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Outbound_Traffic.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Outbound_Traffic.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Outbound_Traffic.png diff --git a/docs/testplan/Img/T2_Convergence_PO_Down.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_PO_Down.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_PO_Down.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_PO_Down.png diff --git a/docs/testplan/Img/T2_Convergence_PO_Member_Down.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_PO_Member_Down.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_PO_Member_Down.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_PO_Member_Down.png diff --git a/docs/testplan/Img/T2_Convergence_Sup_Ungraceful_Restart.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Sup_Ungraceful_Restart.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Sup_Ungraceful_Restart.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Sup_Ungraceful_Restart.png diff --git a/docs/testplan/Img/T2_Convergence_TSA_TSB.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_TSA_TSB.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_TSA_TSB.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_TSA_TSB.png diff --git a/docs/testplan/Img/T2_Convergence_Uplink_LC_Down.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Uplink_LC_Down.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Uplink_LC_Down.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Uplink_LC_Down.png diff --git a/docs/testplan/Img/T2_Convergence_Uplink_Ungraceful_Restart.png b/sonic-mgmt/docs/testplan/Img/T2_Convergence_Uplink_Ungraceful_Restart.png similarity index 100% rename from docs/testplan/Img/T2_Convergence_Uplink_Ungraceful_Restart.png rename to sonic-mgmt/docs/testplan/Img/T2_Convergence_Uplink_Ungraceful_Restart.png diff --git a/docs/testplan/Img/T2_Topology.png b/sonic-mgmt/docs/testplan/Img/T2_Topology.png similarity index 100% rename from docs/testplan/Img/T2_Topology.png rename to sonic-mgmt/docs/testplan/Img/T2_Topology.png diff --git a/docs/testplan/Img/W-ECMP_disabled.png b/sonic-mgmt/docs/testplan/Img/W-ECMP_disabled.png similarity index 100% rename from docs/testplan/Img/W-ECMP_disabled.png rename to sonic-mgmt/docs/testplan/Img/W-ECMP_disabled.png diff --git a/docs/testplan/Img/W-ECMP_enabled.png b/sonic-mgmt/docs/testplan/Img/W-ECMP_enabled.png similarity index 100% rename from docs/testplan/Img/W-ECMP_enabled.png rename to sonic-mgmt/docs/testplan/Img/W-ECMP_enabled.png diff --git a/docs/testplan/Img/W-ECMP_topology.png b/sonic-mgmt/docs/testplan/Img/W-ECMP_topology.png similarity index 100% rename from docs/testplan/Img/W-ECMP_topology.png rename to sonic-mgmt/docs/testplan/Img/W-ECMP_topology.png diff --git a/docs/testplan/Img/Warm-reboot-graph.png b/sonic-mgmt/docs/testplan/Img/Warm-reboot-graph.png similarity index 100% rename from docs/testplan/Img/Warm-reboot-graph.png rename to sonic-mgmt/docs/testplan/Img/Warm-reboot-graph.png diff --git a/docs/testplan/Img/anvl-test-methodology.png b/sonic-mgmt/docs/testplan/Img/anvl-test-methodology.png similarity index 100% rename from docs/testplan/Img/anvl-test-methodology.png rename to sonic-mgmt/docs/testplan/Img/anvl-test-methodology.png diff --git a/docs/testplan/Img/anvl-testbed.png b/sonic-mgmt/docs/testplan/Img/anvl-testbed.png similarity index 100% rename from docs/testplan/Img/anvl-testbed.png rename to sonic-mgmt/docs/testplan/Img/anvl-testbed.png diff --git a/docs/testplan/Img/fwutil_arch.png b/sonic-mgmt/docs/testplan/Img/fwutil_arch.png similarity index 100% rename from docs/testplan/Img/fwutil_arch.png rename to sonic-mgmt/docs/testplan/Img/fwutil_arch.png diff --git a/docs/testplan/Img/link_local_dut_v6_dip.png b/sonic-mgmt/docs/testplan/Img/link_local_dut_v6_dip.png similarity index 100% rename from docs/testplan/Img/link_local_dut_v6_dip.png rename to sonic-mgmt/docs/testplan/Img/link_local_dut_v6_dip.png diff --git a/docs/testplan/Img/link_local_v4_v6_sip.png b/sonic-mgmt/docs/testplan/Img/link_local_v4_v6_sip.png similarity index 100% rename from docs/testplan/Img/link_local_v4_v6_sip.png rename to sonic-mgmt/docs/testplan/Img/link_local_v4_v6_sip.png diff --git a/docs/testplan/Img/link_local_vlan_dip.png b/sonic-mgmt/docs/testplan/Img/link_local_vlan_dip.png similarity index 100% rename from docs/testplan/Img/link_local_vlan_dip.png rename to sonic-mgmt/docs/testplan/Img/link_local_vlan_dip.png diff --git a/docs/testplan/Img/original_tunnel.png b/sonic-mgmt/docs/testplan/Img/original_tunnel.png similarity index 100% rename from docs/testplan/Img/original_tunnel.png rename to sonic-mgmt/docs/testplan/Img/original_tunnel.png diff --git a/docs/testplan/Img/remap_tunnel.png b/sonic-mgmt/docs/testplan/Img/remap_tunnel.png similarity index 100% rename from docs/testplan/Img/remap_tunnel.png rename to sonic-mgmt/docs/testplan/Img/remap_tunnel.png diff --git a/docs/testplan/Img/ssw-ha-testplan-pl-active.png b/sonic-mgmt/docs/testplan/Img/ssw-ha-testplan-pl-active.png similarity index 100% rename from docs/testplan/Img/ssw-ha-testplan-pl-active.png rename to sonic-mgmt/docs/testplan/Img/ssw-ha-testplan-pl-active.png diff --git a/docs/testplan/Img/ssw-ha-testplan-pl-standby.png b/sonic-mgmt/docs/testplan/Img/ssw-ha-testplan-pl-standby.png similarity index 100% rename from docs/testplan/Img/ssw-ha-testplan-pl-standby.png rename to sonic-mgmt/docs/testplan/Img/ssw-ha-testplan-pl-standby.png diff --git a/docs/testplan/Img/t0-isolated-d2u254s.png b/sonic-mgmt/docs/testplan/Img/t0-isolated-d2u254s.png similarity index 100% rename from docs/testplan/Img/t0-isolated-d2u254s.png rename to sonic-mgmt/docs/testplan/Img/t0-isolated-d2u254s.png diff --git a/docs/testplan/Img/t0-isolated-d2u510.png b/sonic-mgmt/docs/testplan/Img/t0-isolated-d2u510.png similarity index 100% rename from docs/testplan/Img/t0-isolated-d2u510.png rename to sonic-mgmt/docs/testplan/Img/t0-isolated-d2u510.png diff --git a/docs/testplan/Img/t1-isolated-d254u2s.png b/sonic-mgmt/docs/testplan/Img/t1-isolated-d254u2s.png similarity index 100% rename from docs/testplan/Img/t1-isolated-d254u2s.png rename to sonic-mgmt/docs/testplan/Img/t1-isolated-d254u2s.png diff --git a/docs/testplan/Img/t1-isolated-d510u2.png b/sonic-mgmt/docs/testplan/Img/t1-isolated-d510u2.png similarity index 100% rename from docs/testplan/Img/t1-isolated-d510u2.png rename to sonic-mgmt/docs/testplan/Img/t1-isolated-d510u2.png diff --git a/docs/testplan/Img/topo_smartswitch_ha.png b/sonic-mgmt/docs/testplan/Img/topo_smartswitch_ha.png similarity index 100% rename from docs/testplan/Img/topo_smartswitch_ha.png rename to sonic-mgmt/docs/testplan/Img/topo_smartswitch_ha.png diff --git a/docs/testplan/Img/tunnel_remap_attributes.png b/sonic-mgmt/docs/testplan/Img/tunnel_remap_attributes.png similarity index 100% rename from docs/testplan/Img/tunnel_remap_attributes.png rename to sonic-mgmt/docs/testplan/Img/tunnel_remap_attributes.png diff --git a/docs/testplan/LLDP-syncd-test-plan.md b/sonic-mgmt/docs/testplan/LLDP-syncd-test-plan.md similarity index 100% rename from docs/testplan/LLDP-syncd-test-plan.md rename to sonic-mgmt/docs/testplan/LLDP-syncd-test-plan.md diff --git a/docs/testplan/MACsec-test-plan.md b/sonic-mgmt/docs/testplan/MACsec-test-plan.md similarity index 100% rename from docs/testplan/MACsec-test-plan.md rename to sonic-mgmt/docs/testplan/MACsec-test-plan.md diff --git a/docs/testplan/MPLS-test-plan.md b/sonic-mgmt/docs/testplan/MPLS-test-plan.md similarity index 100% rename from docs/testplan/MPLS-test-plan.md rename to sonic-mgmt/docs/testplan/MPLS-test-plan.md diff --git a/docs/testplan/Next-hop-split-test-plan.md b/sonic-mgmt/docs/testplan/Next-hop-split-test-plan.md similarity index 100% rename from docs/testplan/Next-hop-split-test-plan.md rename to sonic-mgmt/docs/testplan/Next-hop-split-test-plan.md diff --git a/docs/testplan/OSPF-test-plan.md b/sonic-mgmt/docs/testplan/OSPF-test-plan.md similarity index 100% rename from docs/testplan/OSPF-test-plan.md rename to sonic-mgmt/docs/testplan/OSPF-test-plan.md diff --git a/docs/testplan/Order-ECMP-test-plan.md b/sonic-mgmt/docs/testplan/Order-ECMP-test-plan.md similarity index 100% rename from docs/testplan/Order-ECMP-test-plan.md rename to sonic-mgmt/docs/testplan/Order-ECMP-test-plan.md diff --git a/docs/testplan/PFC-test-plan.md b/sonic-mgmt/docs/testplan/PFC-test-plan.md similarity index 100% rename from docs/testplan/PFC-test-plan.md rename to sonic-mgmt/docs/testplan/PFC-test-plan.md diff --git a/docs/testplan/PFC_Congestion_Oversubscription_Test_Plan.md b/sonic-mgmt/docs/testplan/PFC_Congestion_Oversubscription_Test_Plan.md similarity index 100% rename from docs/testplan/PFC_Congestion_Oversubscription_Test_Plan.md rename to sonic-mgmt/docs/testplan/PFC_Congestion_Oversubscription_Test_Plan.md diff --git a/docs/testplan/PFC_Snappi_Additional_Testcases.md b/sonic-mgmt/docs/testplan/PFC_Snappi_Additional_Testcases.md similarity index 100% rename from docs/testplan/PFC_Snappi_Additional_Testcases.md rename to sonic-mgmt/docs/testplan/PFC_Snappi_Additional_Testcases.md diff --git a/docs/testplan/PMON-Chassis-Enhancements-test-plan.md b/sonic-mgmt/docs/testplan/PMON-Chassis-Enhancements-test-plan.md similarity index 100% rename from docs/testplan/PMON-Chassis-Enhancements-test-plan.md rename to sonic-mgmt/docs/testplan/PMON-Chassis-Enhancements-test-plan.md diff --git a/docs/testplan/PMON-Services-Daemons-test-plan.md b/sonic-mgmt/docs/testplan/PMON-Services-Daemons-test-plan.md similarity index 100% rename from docs/testplan/PMON-Services-Daemons-test-plan.md rename to sonic-mgmt/docs/testplan/PMON-Services-Daemons-test-plan.md diff --git a/docs/testplan/Packet_Trimming_Testplan.md b/sonic-mgmt/docs/testplan/Packet_Trimming_Testplan.md similarity index 100% rename from docs/testplan/Packet_Trimming_Testplan.md rename to sonic-mgmt/docs/testplan/Packet_Trimming_Testplan.md diff --git a/docs/testplan/PrefixListMgr-Refactor-Test-Plan.md b/sonic-mgmt/docs/testplan/PrefixListMgr-Refactor-Test-Plan.md similarity index 100% rename from docs/testplan/PrefixListMgr-Refactor-Test-Plan.md rename to sonic-mgmt/docs/testplan/PrefixListMgr-Refactor-Test-Plan.md diff --git a/docs/testplan/QoS-configuration-in-Config-DB.-ECN-WRED-configuration-utility-test-plan.md b/sonic-mgmt/docs/testplan/QoS-configuration-in-Config-DB.-ECN-WRED-configuration-utility-test-plan.md similarity index 100% rename from docs/testplan/QoS-configuration-in-Config-DB.-ECN-WRED-configuration-utility-test-plan.md rename to sonic-mgmt/docs/testplan/QoS-configuration-in-Config-DB.-ECN-WRED-configuration-utility-test-plan.md diff --git a/docs/testplan/QoS-remapping-for-Tunnel-traffic-test-plan.md b/sonic-mgmt/docs/testplan/QoS-remapping-for-Tunnel-traffic-test-plan.md similarity index 100% rename from docs/testplan/QoS-remapping-for-Tunnel-traffic-test-plan.md rename to sonic-mgmt/docs/testplan/QoS-remapping-for-Tunnel-traffic-test-plan.md diff --git a/docs/testplan/RADIUS-test-plan.md b/sonic-mgmt/docs/testplan/RADIUS-test-plan.md similarity index 100% rename from docs/testplan/RADIUS-test-plan.md rename to sonic-mgmt/docs/testplan/RADIUS-test-plan.md diff --git a/docs/testplan/SAG-test-plan.md b/sonic-mgmt/docs/testplan/SAG-test-plan.md similarity index 100% rename from docs/testplan/SAG-test-plan.md rename to sonic-mgmt/docs/testplan/SAG-test-plan.md diff --git a/docs/testplan/SCP_copy-test-plan.md b/sonic-mgmt/docs/testplan/SCP_copy-test-plan.md similarity index 100% rename from docs/testplan/SCP_copy-test-plan.md rename to sonic-mgmt/docs/testplan/SCP_copy-test-plan.md diff --git a/docs/testplan/SNMP-interfaces-test-plan.md b/sonic-mgmt/docs/testplan/SNMP-interfaces-test-plan.md similarity index 100% rename from docs/testplan/SNMP-interfaces-test-plan.md rename to sonic-mgmt/docs/testplan/SNMP-interfaces-test-plan.md diff --git a/docs/testplan/SNMP-memory-test-plan.md b/sonic-mgmt/docs/testplan/SNMP-memory-test-plan.md similarity index 100% rename from docs/testplan/SNMP-memory-test-plan.md rename to sonic-mgmt/docs/testplan/SNMP-memory-test-plan.md diff --git a/docs/testplan/SNMP-v2mib-test-plan.md b/sonic-mgmt/docs/testplan/SNMP-v2mib-test-plan.md similarity index 100% rename from docs/testplan/SNMP-v2mib-test-plan.md rename to sonic-mgmt/docs/testplan/SNMP-v2mib-test-plan.md diff --git a/docs/testplan/SSH-ciphers-test-plan.md b/sonic-mgmt/docs/testplan/SSH-ciphers-test-plan.md similarity index 100% rename from docs/testplan/SSH-ciphers-test-plan.md rename to sonic-mgmt/docs/testplan/SSH-ciphers-test-plan.md diff --git a/docs/testplan/SSH-stress-test-plan.md b/sonic-mgmt/docs/testplan/SSH-stress-test-plan.md similarity index 100% rename from docs/testplan/SSH-stress-test-plan.md rename to sonic-mgmt/docs/testplan/SSH-stress-test-plan.md diff --git a/docs/testplan/Smartswitch-test-plan.md b/sonic-mgmt/docs/testplan/Smartswitch-test-plan.md similarity index 100% rename from docs/testplan/Smartswitch-test-plan.md rename to sonic-mgmt/docs/testplan/Smartswitch-test-plan.md diff --git a/docs/testplan/Upgrade_gNOI-test-plan.md b/sonic-mgmt/docs/testplan/Upgrade_gNOI-test-plan.md similarity index 100% rename from docs/testplan/Upgrade_gNOI-test-plan.md rename to sonic-mgmt/docs/testplan/Upgrade_gNOI-test-plan.md diff --git a/docs/testplan/VLAN-trunk-test-plan.md b/sonic-mgmt/docs/testplan/VLAN-trunk-test-plan.md similarity index 100% rename from docs/testplan/VLAN-trunk-test-plan.md rename to sonic-mgmt/docs/testplan/VLAN-trunk-test-plan.md diff --git a/docs/testplan/W-ECMP-test-plan.md b/sonic-mgmt/docs/testplan/W-ECMP-test-plan.md similarity index 100% rename from docs/testplan/W-ECMP-test-plan.md rename to sonic-mgmt/docs/testplan/W-ECMP-test-plan.md diff --git a/docs/testplan/WoL-test-plan.md b/sonic-mgmt/docs/testplan/WoL-test-plan.md similarity index 100% rename from docs/testplan/WoL-test-plan.md rename to sonic-mgmt/docs/testplan/WoL-test-plan.md diff --git a/docs/testplan/bmc/BMC-firmware-flavor-support-test-plan.md b/sonic-mgmt/docs/testplan/bmc/BMC-firmware-flavor-support-test-plan.md similarity index 100% rename from docs/testplan/bmc/BMC-firmware-flavor-support-test-plan.md rename to sonic-mgmt/docs/testplan/bmc/BMC-firmware-flavor-support-test-plan.md diff --git a/docs/testplan/bmc/BMC-flow-support-test-plan.md b/sonic-mgmt/docs/testplan/bmc/BMC-flow-support-test-plan.md similarity index 100% rename from docs/testplan/bmc/BMC-flow-support-test-plan.md rename to sonic-mgmt/docs/testplan/bmc/BMC-flow-support-test-plan.md diff --git a/docs/testplan/bmc/BMC-high-level-test-plan.md b/sonic-mgmt/docs/testplan/bmc/BMC-high-level-test-plan.md similarity index 100% rename from docs/testplan/bmc/BMC-high-level-test-plan.md rename to sonic-mgmt/docs/testplan/bmc/BMC-high-level-test-plan.md diff --git a/docs/testplan/bmc/Liquid-Cooling-leakage-detection-test-plan.md b/sonic-mgmt/docs/testplan/bmc/Liquid-Cooling-leakage-detection-test-plan.md similarity index 100% rename from docs/testplan/bmc/Liquid-Cooling-leakage-detection-test-plan.md rename to sonic-mgmt/docs/testplan/bmc/Liquid-Cooling-leakage-detection-test-plan.md diff --git a/docs/testplan/bmc/img/bmc-dual-mgmt.png b/sonic-mgmt/docs/testplan/bmc/img/bmc-dual-mgmt.png similarity index 100% rename from docs/testplan/bmc/img/bmc-dual-mgmt.png rename to sonic-mgmt/docs/testplan/bmc/img/bmc-dual-mgmt.png diff --git a/docs/testplan/bmc/img/bmc-shared-mgmt.png b/sonic-mgmt/docs/testplan/bmc/img/bmc-shared-mgmt.png similarity index 100% rename from docs/testplan/bmc/img/bmc-shared-mgmt.png rename to sonic-mgmt/docs/testplan/bmc/img/bmc-shared-mgmt.png diff --git a/docs/testplan/chassis-lag-test-plan.md b/sonic-mgmt/docs/testplan/chassis-lag-test-plan.md similarity index 100% rename from docs/testplan/chassis-lag-test-plan.md rename to sonic-mgmt/docs/testplan/chassis-lag-test-plan.md diff --git a/docs/testplan/console/Console-Monitor-Test-Plan.md b/sonic-mgmt/docs/testplan/console/Console-Monitor-Test-Plan.md similarity index 100% rename from docs/testplan/console/Console-Monitor-Test-Plan.md rename to sonic-mgmt/docs/testplan/console/Console-Monitor-Test-Plan.md diff --git a/docs/testplan/console/c0_lo_topo_phy.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_lo_topo_phy.drawio.svg similarity index 100% rename from docs/testplan/console/c0_lo_topo_phy.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_lo_topo_phy.drawio.svg diff --git a/docs/testplan/console/c0_topo.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_topo.drawio.svg similarity index 100% rename from docs/testplan/console/c0_topo.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_topo.drawio.svg diff --git a/docs/testplan/console/c0_topo_phy.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_topo_phy.drawio.svg similarity index 100% rename from docs/testplan/console/c0_topo_phy.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_topo_phy.drawio.svg diff --git a/docs/testplan/console/c0_topo_s1.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_topo_s1.drawio.svg similarity index 100% rename from docs/testplan/console/c0_topo_s1.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_topo_s1.drawio.svg diff --git a/docs/testplan/console/c0_topo_s2.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_topo_s2.drawio.svg similarity index 100% rename from docs/testplan/console/c0_topo_s2.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_topo_s2.drawio.svg diff --git a/docs/testplan/console/c0_topo_s3.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_topo_s3.drawio.svg similarity index 100% rename from docs/testplan/console/c0_topo_s3.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_topo_s3.drawio.svg diff --git a/docs/testplan/console/c0_topo_s4.drawio.svg b/sonic-mgmt/docs/testplan/console/c0_topo_s4.drawio.svg similarity index 100% rename from docs/testplan/console/c0_topo_s4.drawio.svg rename to sonic-mgmt/docs/testplan/console/c0_topo_s4.drawio.svg diff --git a/docs/testplan/console/console_test_hld.md b/sonic-mgmt/docs/testplan/console/console_test_hld.md similarity index 100% rename from docs/testplan/console/console_test_hld.md rename to sonic-mgmt/docs/testplan/console/console_test_hld.md diff --git a/docs/testplan/console/img/console_switch_wiring_general.png b/sonic-mgmt/docs/testplan/console/img/console_switch_wiring_general.png similarity index 100% rename from docs/testplan/console/img/console_switch_wiring_general.png rename to sonic-mgmt/docs/testplan/console/img/console_switch_wiring_general.png diff --git a/docs/testplan/console/img/console_switch_wiring_stress.png b/sonic-mgmt/docs/testplan/console/img/console_switch_wiring_stress.png similarity index 100% rename from docs/testplan/console/img/console_switch_wiring_stress.png rename to sonic-mgmt/docs/testplan/console/img/console_switch_wiring_stress.png diff --git a/docs/testplan/console/img/dut_wiring.png b/sonic-mgmt/docs/testplan/console/img/dut_wiring.png similarity index 100% rename from docs/testplan/console/img/dut_wiring.png rename to sonic-mgmt/docs/testplan/console/img/dut_wiring.png diff --git a/docs/testplan/console/img/loopback_module.png b/sonic-mgmt/docs/testplan/console/img/loopback_module.png similarity index 100% rename from docs/testplan/console/img/loopback_module.png rename to sonic-mgmt/docs/testplan/console/img/loopback_module.png diff --git a/docs/testplan/console/standalone_sonic_console_server_test_plan.md b/sonic-mgmt/docs/testplan/console/standalone_sonic_console_server_test_plan.md similarity index 100% rename from docs/testplan/console/standalone_sonic_console_server_test_plan.md rename to sonic-mgmt/docs/testplan/console/standalone_sonic_console_server_test_plan.md diff --git a/docs/testplan/dash/DASH-crm-test-plan.md b/sonic-mgmt/docs/testplan/dash/DASH-crm-test-plan.md similarity index 100% rename from docs/testplan/dash/DASH-crm-test-plan.md rename to sonic-mgmt/docs/testplan/dash/DASH-crm-test-plan.md diff --git a/docs/testplan/dash/DASH-eni-counter-test-plan.md b/sonic-mgmt/docs/testplan/dash/DASH-eni-counter-test-plan.md similarity index 100% rename from docs/testplan/dash/DASH-eni-counter-test-plan.md rename to sonic-mgmt/docs/testplan/dash/DASH-eni-counter-test-plan.md diff --git a/docs/testplan/dash/Dash-ACL-Tag-test-plan.md b/sonic-mgmt/docs/testplan/dash/Dash-ACL-Tag-test-plan.md similarity index 100% rename from docs/testplan/dash/Dash-ACL-Tag-test-plan.md rename to sonic-mgmt/docs/testplan/dash/Dash-ACL-Tag-test-plan.md diff --git a/docs/testplan/dash/Dash-ENI-Based-Forwarding-test-plan.md b/sonic-mgmt/docs/testplan/dash/Dash-ENI-Based-Forwarding-test-plan.md similarity index 100% rename from docs/testplan/dash/Dash-ENI-Based-Forwarding-test-plan.md rename to sonic-mgmt/docs/testplan/dash/Dash-ENI-Based-Forwarding-test-plan.md diff --git a/docs/testplan/dash/Dash-Relaxed-Match-Support.md b/sonic-mgmt/docs/testplan/dash/Dash-Relaxed-Match-Support.md similarity index 100% rename from docs/testplan/dash/Dash-Relaxed-Match-Support.md rename to sonic-mgmt/docs/testplan/dash/Dash-Relaxed-Match-Support.md diff --git a/docs/testplan/dash/Private_Link_Redirect.md b/sonic-mgmt/docs/testplan/dash/Private_Link_Redirect.md similarity index 100% rename from docs/testplan/dash/Private_Link_Redirect.md rename to sonic-mgmt/docs/testplan/dash/Private_Link_Redirect.md diff --git a/docs/testplan/dash/VXLAN_source_port_range.md b/sonic-mgmt/docs/testplan/dash/VXLAN_source_port_range.md similarity index 100% rename from docs/testplan/dash/VXLAN_source_port_range.md rename to sonic-mgmt/docs/testplan/dash/VXLAN_source_port_range.md diff --git a/docs/testplan/dhcp_relay/DHCP-relay-stress-test.md b/sonic-mgmt/docs/testplan/dhcp_relay/DHCP-relay-stress-test.md similarity index 100% rename from docs/testplan/dhcp_relay/DHCP-relay-stress-test.md rename to sonic-mgmt/docs/testplan/dhcp_relay/DHCP-relay-stress-test.md diff --git a/docs/testplan/dhcp_relay/DHCPv4-Relay-Test-Plan.md b/sonic-mgmt/docs/testplan/dhcp_relay/DHCPv4-Relay-Test-Plan.md similarity index 100% rename from docs/testplan/dhcp_relay/DHCPv4-Relay-Test-Plan.md rename to sonic-mgmt/docs/testplan/dhcp_relay/DHCPv4-Relay-Test-Plan.md diff --git a/docs/testplan/dhcp_relay/DHCPv4-relay-per-interface-counter-test-plan.md b/sonic-mgmt/docs/testplan/dhcp_relay/DHCPv4-relay-per-interface-counter-test-plan.md similarity index 100% rename from docs/testplan/dhcp_relay/DHCPv4-relay-per-interface-counter-test-plan.md rename to sonic-mgmt/docs/testplan/dhcp_relay/DHCPv4-relay-per-interface-counter-test-plan.md diff --git a/docs/testplan/dns/static-dns-test-plan.md b/sonic-mgmt/docs/testplan/dns/static-dns-test-plan.md similarity index 100% rename from docs/testplan/dns/static-dns-test-plan.md rename to sonic-mgmt/docs/testplan/dns/static-dns-test-plan.md diff --git a/docs/testplan/dual_tor/dual_tor_active_active_test_plan.md b/sonic-mgmt/docs/testplan/dual_tor/dual_tor_active_active_test_plan.md similarity index 100% rename from docs/testplan/dual_tor/dual_tor_active_active_test_plan.md rename to sonic-mgmt/docs/testplan/dual_tor/dual_tor_active_active_test_plan.md diff --git a/docs/testplan/dual_tor/dual_tor_muxcable_test_plan.md b/sonic-mgmt/docs/testplan/dual_tor/dual_tor_muxcable_test_plan.md similarity index 100% rename from docs/testplan/dual_tor/dual_tor_muxcable_test_plan.md rename to sonic-mgmt/docs/testplan/dual_tor/dual_tor_muxcable_test_plan.md diff --git a/docs/testplan/dual_tor/dual_tor_orch_test_plan.md b/sonic-mgmt/docs/testplan/dual_tor/dual_tor_orch_test_plan.md similarity index 100% rename from docs/testplan/dual_tor/dual_tor_orch_test_plan.md rename to sonic-mgmt/docs/testplan/dual_tor/dual_tor_orch_test_plan.md diff --git a/docs/testplan/dual_tor/dual_tor_test_hld.md b/sonic-mgmt/docs/testplan/dual_tor/dual_tor_test_hld.md similarity index 100% rename from docs/testplan/dual_tor/dual_tor_test_hld.md rename to sonic-mgmt/docs/testplan/dual_tor/dual_tor_test_hld.md diff --git a/docs/testplan/dual_tor/dual_tor_test_plan_action_items.md b/sonic-mgmt/docs/testplan/dual_tor/dual_tor_test_plan_action_items.md similarity index 100% rename from docs/testplan/dual_tor/dual_tor_test_plan_action_items.md rename to sonic-mgmt/docs/testplan/dual_tor/dual_tor_test_plan_action_items.md diff --git a/docs/testplan/dual_tor/img/active-active-downstream-traffic.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/active-active-downstream-traffic.jpg similarity index 100% rename from docs/testplan/dual_tor/img/active-active-downstream-traffic.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/active-active-downstream-traffic.jpg diff --git a/docs/testplan/dual_tor/img/active-active-testbed-setup.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/active-active-testbed-setup.jpg similarity index 100% rename from docs/testplan/dual_tor/img/active-active-testbed-setup.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/active-active-testbed-setup.jpg diff --git a/docs/testplan/dual_tor/img/active-active-upstream-traffic.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/active-active-upstream-traffic.jpg similarity index 100% rename from docs/testplan/dual_tor/img/active-active-upstream-traffic.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/active-active-upstream-traffic.jpg diff --git a/docs/testplan/dual_tor/img/downstream_packet_flow_active.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/downstream_packet_flow_active.jpg similarity index 100% rename from docs/testplan/dual_tor/img/downstream_packet_flow_active.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/downstream_packet_flow_active.jpg diff --git a/docs/testplan/dual_tor/img/downstream_packet_flow_standby.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/downstream_packet_flow_standby.jpg similarity index 100% rename from docs/testplan/dual_tor/img/downstream_packet_flow_standby.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/downstream_packet_flow_standby.jpg diff --git a/docs/testplan/dual_tor/img/dualtor_server_to_server_traffic.jpeg b/sonic-mgmt/docs/testplan/dual_tor/img/dualtor_server_to_server_traffic.jpeg similarity index 100% rename from docs/testplan/dual_tor/img/dualtor_server_to_server_traffic.jpeg rename to sonic-mgmt/docs/testplan/dual_tor/img/dualtor_server_to_server_traffic.jpeg diff --git a/docs/testplan/dual_tor/img/packet_flow_upstream.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/packet_flow_upstream.jpg similarity index 100% rename from docs/testplan/dual_tor/img/packet_flow_upstream.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/packet_flow_upstream.jpg diff --git a/docs/testplan/dual_tor/img/testbed_overview.jpg b/sonic-mgmt/docs/testplan/dual_tor/img/testbed_overview.jpg similarity index 100% rename from docs/testplan/dual_tor/img/testbed_overview.jpg rename to sonic-mgmt/docs/testplan/dual_tor/img/testbed_overview.jpg diff --git a/docs/testplan/dual_tor/img/topology_for_cable_test.jpeg b/sonic-mgmt/docs/testplan/dual_tor/img/topology_for_cable_test.jpeg similarity index 100% rename from docs/testplan/dual_tor/img/topology_for_cable_test.jpeg rename to sonic-mgmt/docs/testplan/dual_tor/img/topology_for_cable_test.jpeg diff --git a/docs/testplan/duplicate-route-test-plan.md b/sonic-mgmt/docs/testplan/duplicate-route-test-plan.md similarity index 100% rename from docs/testplan/duplicate-route-test-plan.md rename to sonic-mgmt/docs/testplan/duplicate-route-test-plan.md diff --git a/docs/testplan/ecn/ECN_ACCURACY_README.md b/sonic-mgmt/docs/testplan/ecn/ECN_ACCURACY_README.md similarity index 100% rename from docs/testplan/ecn/ECN_ACCURACY_README.md rename to sonic-mgmt/docs/testplan/ecn/ECN_ACCURACY_README.md diff --git a/docs/testplan/ecn/EGRESS_ECN_README.md b/sonic-mgmt/docs/testplan/ecn/EGRESS_ECN_README.md similarity index 100% rename from docs/testplan/ecn/EGRESS_ECN_README.md rename to sonic-mgmt/docs/testplan/ecn/EGRESS_ECN_README.md diff --git a/docs/testplan/filterleaf-testplan.md b/sonic-mgmt/docs/testplan/filterleaf-testplan.md similarity index 100% rename from docs/testplan/filterleaf-testplan.md rename to sonic-mgmt/docs/testplan/filterleaf-testplan.md diff --git a/docs/testplan/gnmi-uds-transport-design.md b/sonic-mgmt/docs/testplan/gnmi-uds-transport-design.md similarity index 100% rename from docs/testplan/gnmi-uds-transport-design.md rename to sonic-mgmt/docs/testplan/gnmi-uds-transport-design.md diff --git a/docs/testplan/gnoi_client_library_design.md b/sonic-mgmt/docs/testplan/gnoi_client_library_design.md similarity index 100% rename from docs/testplan/gnoi_client_library_design.md rename to sonic-mgmt/docs/testplan/gnoi_client_library_design.md diff --git a/docs/testplan/images/Add_Cluster_Data_Validation_down-down.PNG b/sonic-mgmt/docs/testplan/images/Add_Cluster_Data_Validation_down-down.PNG similarity index 100% rename from docs/testplan/images/Add_Cluster_Data_Validation_down-down.PNG rename to sonic-mgmt/docs/testplan/images/Add_Cluster_Data_Validation_down-down.PNG diff --git a/docs/testplan/images/Add_Cluster_Data_Validation_up-down.PNG b/sonic-mgmt/docs/testplan/images/Add_Cluster_Data_Validation_up-down.PNG similarity index 100% rename from docs/testplan/images/Add_Cluster_Data_Validation_up-down.PNG rename to sonic-mgmt/docs/testplan/images/Add_Cluster_Data_Validation_up-down.PNG diff --git a/docs/testplan/images/Add_Cluster_Readd_Peers.PNG b/sonic-mgmt/docs/testplan/images/Add_Cluster_Readd_Peers.PNG similarity index 100% rename from docs/testplan/images/Add_Cluster_Readd_Peers.PNG rename to sonic-mgmt/docs/testplan/images/Add_Cluster_Readd_Peers.PNG diff --git a/docs/testplan/images/Add_Cluster_Remove_Peers.PNG b/sonic-mgmt/docs/testplan/images/Add_Cluster_Remove_Peers.PNG similarity index 100% rename from docs/testplan/images/Add_Cluster_Remove_Peers.PNG rename to sonic-mgmt/docs/testplan/images/Add_Cluster_Remove_Peers.PNG diff --git a/docs/testplan/images/Add_Cluster_Setup.PNG b/sonic-mgmt/docs/testplan/images/Add_Cluster_Setup.PNG similarity index 100% rename from docs/testplan/images/Add_Cluster_Setup.PNG rename to sonic-mgmt/docs/testplan/images/Add_Cluster_Setup.PNG diff --git a/docs/testplan/images/MACsec_PFC_test.png b/sonic-mgmt/docs/testplan/images/MACsec_PFC_test.png similarity index 100% rename from docs/testplan/images/MACsec_PFC_test.png rename to sonic-mgmt/docs/testplan/images/MACsec_PFC_test.png diff --git a/docs/testplan/images/performance-meter.png b/sonic-mgmt/docs/testplan/images/performance-meter.png similarity index 100% rename from docs/testplan/images/performance-meter.png rename to sonic-mgmt/docs/testplan/images/performance-meter.png diff --git a/docs/testplan/ip-interface/rif_loopback_action_testplan.md b/sonic-mgmt/docs/testplan/ip-interface/rif_loopback_action_testplan.md similarity index 100% rename from docs/testplan/ip-interface/rif_loopback_action_testplan.md rename to sonic-mgmt/docs/testplan/ip-interface/rif_loopback_action_testplan.md diff --git a/docs/testplan/link-local-test-plan.md b/sonic-mgmt/docs/testplan/link-local-test-plan.md similarity index 100% rename from docs/testplan/link-local-test-plan.md rename to sonic-mgmt/docs/testplan/link-local-test-plan.md diff --git a/docs/testplan/live_addon_docker_hld.md b/sonic-mgmt/docs/testplan/live_addon_docker_hld.md similarity index 70% rename from docs/testplan/live_addon_docker_hld.md rename to sonic-mgmt/docs/testplan/live_addon_docker_hld.md index 8428165a93d..b8f62404bae 100644 --- a/docs/testplan/live_addon_docker_hld.md +++ b/sonic-mgmt/docs/testplan/live_addon_docker_hld.md @@ -25,6 +25,7 @@ live in per-ASIC JSON files under `tests/live_addon_docker/files/`. | HTTP health endpoint probe from the DUT | Building or publishing docker images | | Post-start checks via `verify_live_addon_post_start` (logs and/or supervisord) | Shared tarball distribution between vendors | | Optional `version_matrix` skip for image vs SONiC compatibility | | +| Registry image upgrade test (`test_live_addon_docker_image_upgrade`) | | | Registry override per test run (`--live_addon_docker_registry`) | | **Platform filter:** `asic_type=cisco-8000` only (see @@ -40,14 +41,19 @@ Post-start validation is **not** duplicated in pytest cases; it runs in the modu |------|-----------| | `test_live_addon_docker_health_http` | HTTP `/health` returns expected status within probe timeout | | `test_live_addon_docker_health_after_config_reload_cycle` | Stop container → `config reload` → `docker run` + full post-start → `config reload` → teardown + `docker run` + restart post-start (120s supervisord) → HTTP health | +| `test_live_addon_docker_image_upgrade` | Registry pull baseline (`--live_addon_docker_image_tag`) → post-start + health → pull upgrade (`--live_addon_docker_image_upgrade_tag`) → post-start + health (standalone; does not use module fixture) | **Module fixture** `live_addon_docker_setup_teardown`: install once per module, `docker run`, `verify_live_addon_post_start` (full readiness), yield `(duthost, cfg)`, then teardown and post-teardown checks. +**Image upgrade test** (`test_live_addon_docker_image_upgrade`) is standalone: it uses +`live_addon_docker_vendor_cfg_raw`, requires both CLI image tags and registry access, and calls +`upgrade_live_addon_docker_image` twice (baseline then upgrade). + **Typical runtime (Cisco):** first start may wait up to **900s** for startup logs; config-reload -cycle adds another full post-start plus a **120s** supervisord poll on restart; HTTP health polls -up to **900s** when needed. +cycle adds another full post-start plus a **120s** supervisord poll on restart; upgrade test runs +two full install cycles; HTTP health polls up to **900s** when needed. **Topology:** tests are marked `pytest.mark.topology("any")`. Use `-t any` or `-t t1,any` with `run_tests.sh` (a bare `-t t1` skips these tests). @@ -133,15 +139,39 @@ flowchart TD P --> Q[Teardown and post checks] ``` +**Image upgrade test** (`test_live_addon_docker_image_upgrade`) does not use tarball or +pre-loaded-image fallbacks. It always registry-pulls using explicit CLI tags: + +```mermaid +flowchart TD + U0[apply_image_tag_to_config baseline and upgrade tags] --> U0c{same image_ref?} + U0c -->|yes| Uskip[pytest.skip] + U0c -->|no| U1[registry pull baseline image] + U1 --> U2[version_matrix check] + U2 --> U3[teardown + rmi stale refs] + U3 --> U4[docker run + post-start + HTTP health] + U4 --> U5[apply_image_tag_to_config upgrade tag] + U5 --> U6[registry pull upgrade image] + U6 --> U7[version_matrix check] + U7 --> U8[teardown + rmi stale refs keep pulled ref] + U8 --> U9[docker run + post-start + HTTP health] +``` + +`version_matrix` runs after pull and **before** container teardown during upgrade, so a skip leaves +the previously running live-addon container in place. + Registry host comes from Ansible `docker_registry_host` or pytest `live_addon_docker_registry` (see §7). Tarball path on the DUT is `dut_tarball_home` plus `tarball_filename` from JSON. -**Pull tag selection:** +**Pull tag selection (module / baseline tests):** -1. `--live_addon_docker_image_tag` if set (CI build id) +1. `--live_addon_docker_image_tag` if set (baseline / CI build id) 2. Else tag from `docker_run.image_ref` when not `latest` 3. Else `duthost.os_version` (same convention as syncd-rpc / `swap_syncd`) +**Image upgrade test** uses `--live_addon_docker_image_tag` for baseline and +`--live_addon_docker_image_upgrade_tag` for the upgrade pull (both required). + ## 7. Pytest CLI parameters | Option | Purpose | @@ -149,10 +179,11 @@ Registry host comes from Ansible `docker_registry_host` or pytest `live_addon_do | `--live-addon-docker-config` | Override path to vendor JSON | | `--live-addon-docker-tarball` | Path to `.gz` on the test runner | | `--live_addon_docker_registry` | Registry host for pull (overrides Ansible `docker_registry_host` for this module) | -| `--live_addon_docker_image_tag` | Image tag for pull and `docker_run.image_ref` | +| `--live_addon_docker_image_tag` | Baseline / module tests: image tag for registry pull and `docker_run.image_ref` | +| `--live_addon_docker_image_upgrade_tag` | Upgrade test only: target image tag after baseline | | `--public_docker_registry` | Use `public_docker_registry_host` without login (same as `swap_syncd`) | -**Example via `run_tests.sh`:** +**Example via `run_tests.sh` (module tests):** ```bash cd tests @@ -162,7 +193,15 @@ cd tests -t any \ -c live_addon_docker/test_live_addon_docker.py \ -i ../ansible/veos \ - -e "--live_addon_docker_registry=myacr.azurecr.io --live_addon_docker_image_tag=kube-20260527-202505-amd64" + -e "--live_addon_docker_registry=myacr.azurecr.io --live_addon_docker_image_tag=baseline-build-001" +``` + +**Example (upgrade test):** + +```bash +-e "--live_addon_docker_registry=:5000 --public_docker_registry \ + --live_addon_docker_image_tag=baseline-build-001 \ + --live_addon_docker_image_upgrade_tag=new-build-002" ``` Each vendor or MSFT can point at their own container registry without sharing tarballs. @@ -265,6 +304,18 @@ Each row may include: - Matching row has no `compatible_sonic_globs` - DUT SONiC does not match any allowed glob +**Upgrade test skip conditions** (in `test_live_addon_docker_image_upgrade`): + +- `pytest.skip` when `--live_addon_docker_image_tag` is omitted (before any DUT steps) +- `pytest.skip` when `--live_addon_docker_image_upgrade_tag` is omitted (before any DUT steps) +- `pytest.skip` when baseline and upgrade tags resolve to the same `docker_run.image_ref` (before + any DUT steps; compared from config only) + +**Upgrade test and `version_matrix`:** `upgrade_live_addon_docker_image` pulls from the registry, +runs `require_version_matrix_or_skip` on the pulled ref, then tears down the container. If the +matrix check skips, the prior container (if any) is left running and the test ends without applying +the incompatible upgrade image. + Images built without `com.azure.sonic.manifest` skip until the build pipeline adds standard SONiC docker labels. @@ -279,7 +330,32 @@ Example: ] ``` -## 10. Adding a new vendor / ASIC +## 10. Test cases + +Post-start validation is **not** duplicated in pytest cases; it runs in the fixture and inside +`run_config_reload_live_addon_start_reload_health` on each `docker run`. + +| Test | Validates | +|------|-----------| +| `test_live_addon_docker_health_http` | HTTP `/health` returns expected status within probe timeout | +| `test_live_addon_docker_health_after_config_reload_cycle` | Stop container → `config reload` → `docker run` + full post-start → `config reload` → teardown + `docker run` + restart post-start (120s supervisord) → HTTP health | +| `test_live_addon_docker_image_upgrade` | Registry pull baseline (`--live_addon_docker_image_tag`) → post-start + health → pull upgrade (`--live_addon_docker_image_upgrade_tag`) → post-start + health (standalone; skips without both CLI tags) | + +**Module fixture** `live_addon_docker_setup_teardown`: install once per module, `docker run`, +`verify_live_addon_post_start` (full readiness), yield `(duthost, cfg)`, then teardown and +post-teardown checks. + +**Image upgrade test** uses `live_addon_docker_vendor_cfg_raw` and requires +`--live_addon_docker_image_tag`, `--live_addon_docker_image_upgrade_tag`, and registry access. +Each step calls `upgrade_live_addon_docker_image` (registry pull, `version_matrix` check, +teardown, `docker rmi` of stale refs, `docker run`, post-start, HTTP health). See §9 for skip +conditions. No `config reload` in this test; default loganalyzer is sufficient. + +**Typical runtime (Cisco):** first start may wait up to **900s** for startup logs; config-reload +cycle adds another full post-start plus a **120s** supervisord poll on restart; upgrade test runs +two full install cycles; HTTP health polls up to **900s** when needed. + +## 11. Adding a new vendor / ASIC 1. Add `tests/live_addon_docker/files/_live_addon_docker.json`. 2. Set `vendor`, `docker_run.container_name`, `health` port/path, and vendor-specific `cli_args` mounts. @@ -287,7 +363,7 @@ Example: 4. Extend `tests_mark_conditions_live_addon_docker.yaml` if the ASIC should not be skipped. 5. Run with `--live_addon_docker_registry` pointing at the vendor CR. -## 11. Assumptions and constraints +## 12. Assumptions and constraints - DUT has Docker and network access to the chosen registry (or a pre-staged image/tarball). - Registry credentials come from Ansible `docker_registry_*` in testbed creds unless overridden by CLI. diff --git a/docs/testplan/mmu_threshold_probe/MMU_Threshold_Probing_Design.md b/sonic-mgmt/docs/testplan/mmu_threshold_probe/MMU_Threshold_Probing_Design.md similarity index 100% rename from docs/testplan/mmu_threshold_probe/MMU_Threshold_Probing_Design.md rename to sonic-mgmt/docs/testplan/mmu_threshold_probe/MMU_Threshold_Probing_Design.md diff --git a/docs/testplan/pac/PAC_Topology.png b/sonic-mgmt/docs/testplan/pac/PAC_Topology.png similarity index 100% rename from docs/testplan/pac/PAC_Topology.png rename to sonic-mgmt/docs/testplan/pac/PAC_Topology.png diff --git a/docs/testplan/pac/Port_Access_Control.md b/sonic-mgmt/docs/testplan/pac/Port_Access_Control.md similarity index 100% rename from docs/testplan/pac/Port_Access_Control.md rename to sonic-mgmt/docs/testplan/pac/Port_Access_Control.md diff --git a/docs/testplan/performance-meter-test-plan.md b/sonic-mgmt/docs/testplan/performance-meter-test-plan.md similarity index 100% rename from docs/testplan/performance-meter-test-plan.md rename to sonic-mgmt/docs/testplan/performance-meter-test-plan.md diff --git a/docs/testplan/pfc/GLOBAL_PAUSE_README.md b/sonic-mgmt/docs/testplan/pfc/GLOBAL_PAUSE_README.md similarity index 100% rename from docs/testplan/pfc/GLOBAL_PAUSE_README.md rename to sonic-mgmt/docs/testplan/pfc/GLOBAL_PAUSE_README.md diff --git a/docs/testplan/pfc/PFC_PAUSE_LOSSLESS_README.md b/sonic-mgmt/docs/testplan/pfc/PFC_PAUSE_LOSSLESS_README.md similarity index 100% rename from docs/testplan/pfc/PFC_PAUSE_LOSSLESS_README.md rename to sonic-mgmt/docs/testplan/pfc/PFC_PAUSE_LOSSLESS_README.md diff --git a/docs/testplan/pfc/PFC_PAUSE_LOSSY_README.md b/sonic-mgmt/docs/testplan/pfc/PFC_PAUSE_LOSSY_README.md similarity index 100% rename from docs/testplan/pfc/PFC_PAUSE_LOSSY_README.md rename to sonic-mgmt/docs/testplan/pfc/PFC_PAUSE_LOSSY_README.md diff --git a/docs/testplan/pfc/PFC_PAUSE_RESPONSE_HEADROOM_README.md b/sonic-mgmt/docs/testplan/pfc/PFC_PAUSE_RESPONSE_HEADROOM_README.md similarity index 100% rename from docs/testplan/pfc/PFC_PAUSE_RESPONSE_HEADROOM_README.md rename to sonic-mgmt/docs/testplan/pfc/PFC_PAUSE_RESPONSE_HEADROOM_README.md diff --git a/docs/testplan/pfcwd/PFCWD_2SENDER_2RECEIVER.md b/sonic-mgmt/docs/testplan/pfcwd/PFCWD_2SENDER_2RECEIVER.md similarity index 100% rename from docs/testplan/pfcwd/PFCWD_2SENDER_2RECEIVER.md rename to sonic-mgmt/docs/testplan/pfcwd/PFCWD_2SENDER_2RECEIVER.md diff --git a/docs/testplan/pfcwd/PFCWD_BASIC.md b/sonic-mgmt/docs/testplan/pfcwd/PFCWD_BASIC.md similarity index 100% rename from docs/testplan/pfcwd/PFCWD_BASIC.md rename to sonic-mgmt/docs/testplan/pfcwd/PFCWD_BASIC.md diff --git a/docs/testplan/reboot-blocking_mode-test-plan.md b/sonic-mgmt/docs/testplan/reboot-blocking_mode-test-plan.md similarity index 100% rename from docs/testplan/reboot-blocking_mode-test-plan.md rename to sonic-mgmt/docs/testplan/reboot-blocking_mode-test-plan.md diff --git a/docs/testplan/sensors-test-plan.md b/sonic-mgmt/docs/testplan/sensors-test-plan.md similarity index 100% rename from docs/testplan/sensors-test-plan.md rename to sonic-mgmt/docs/testplan/sensors-test-plan.md diff --git a/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_multiple_ha_sets.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_multiple_ha_sets.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_dpuloss_multiple_ha_sets.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_multiple_ha_sets.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_not_local.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_not_local.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_dpuloss_not_local.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_not_local.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_test.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_test.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_dpuloss_test.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_dpuloss_test.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_linkloss_multiple_ha_sets.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_linkloss_multiple_ha_sets.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_linkloss_multiple_ha_sets.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_linkloss_multiple_ha_sets.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_linkloss_test.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_linkloss_test.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_linkloss_test.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_linkloss_test.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_linkloss_test_not_local.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_linkloss_test_not_local.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_linkloss_test_not_local.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_linkloss_test_not_local.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_test_cps_ha_not_enabled.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_test_cps_ha_not_enabled.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_test_cps_ha_not_enabled.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_test_cps_ha_not_enabled.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_test_perfect_sync.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_test_perfect_sync.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_test_perfect_sync.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_test_perfect_sync.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_test_topology.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_test_topology.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_test_topology.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_test_topology.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_testbed.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_testbed.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_testbed.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_testbed.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_torloss_not_local.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_torloss_not_local.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_torloss_not_local.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_torloss_not_local.svg diff --git a/docs/testplan/smart-switch/high-availability/images/ha_torloss_test.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_torloss_test.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/ha_torloss_test.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/ha_torloss_test.svg diff --git a/docs/testplan/smart-switch/high-availability/images/smartswitch_ha_topology.svg b/sonic-mgmt/docs/testplan/smart-switch/high-availability/images/smartswitch_ha_topology.svg similarity index 100% rename from docs/testplan/smart-switch/high-availability/images/smartswitch_ha_topology.svg rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/images/smartswitch_ha_topology.svg diff --git a/docs/testplan/smart-switch/high-availability/keysight_ha_testplan.md b/sonic-mgmt/docs/testplan/smart-switch/high-availability/keysight_ha_testplan.md similarity index 100% rename from docs/testplan/smart-switch/high-availability/keysight_ha_testplan.md rename to sonic-mgmt/docs/testplan/smart-switch/high-availability/keysight_ha_testplan.md diff --git a/docs/testplan/snappi/HLD_RIB_IN_Convergence_Optimization_Performance.md b/sonic-mgmt/docs/testplan/snappi/HLD_RIB_IN_Convergence_Optimization_Performance.md similarity index 100% rename from docs/testplan/snappi/HLD_RIB_IN_Convergence_Optimization_Performance.md rename to sonic-mgmt/docs/testplan/snappi/HLD_RIB_IN_Convergence_Optimization_Performance.md diff --git a/docs/testplan/snappi/assets/snake_topo.png b/sonic-mgmt/docs/testplan/snappi/assets/snake_topo.png similarity index 100% rename from docs/testplan/snappi/assets/snake_topo.png rename to sonic-mgmt/docs/testplan/snappi/assets/snake_topo.png diff --git a/docs/testplan/snappi/bgp_convergence_test.md b/sonic-mgmt/docs/testplan/snappi/bgp_convergence_test.md similarity index 100% rename from docs/testplan/snappi/bgp_convergence_test.md rename to sonic-mgmt/docs/testplan/snappi/bgp_convergence_test.md diff --git a/docs/testplan/snappi/srv6_performance_test.md b/sonic-mgmt/docs/testplan/snappi/srv6_performance_test.md similarity index 100% rename from docs/testplan/snappi/srv6_performance_test.md rename to sonic-mgmt/docs/testplan/snappi/srv6_performance_test.md diff --git a/docs/testplan/snappi/switch-fcs-tests.md b/sonic-mgmt/docs/testplan/snappi/switch-fcs-tests.md similarity index 100% rename from docs/testplan/snappi/switch-fcs-tests.md rename to sonic-mgmt/docs/testplan/snappi/switch-fcs-tests.md diff --git a/docs/testplan/snappi/switch-latency-tests.md b/sonic-mgmt/docs/testplan/snappi/switch-latency-tests.md similarity index 100% rename from docs/testplan/snappi/switch-latency-tests.md rename to sonic-mgmt/docs/testplan/snappi/switch-latency-tests.md diff --git a/docs/testplan/snappi/switch-packet-drop-threshold-tests.md b/sonic-mgmt/docs/testplan/snappi/switch-packet-drop-threshold-tests.md similarity index 100% rename from docs/testplan/snappi/switch-packet-drop-threshold-tests.md rename to sonic-mgmt/docs/testplan/snappi/switch-packet-drop-threshold-tests.md diff --git a/docs/testplan/snappi/switch_capacity_test.md b/sonic-mgmt/docs/testplan/snappi/switch_capacity_test.md similarity index 100% rename from docs/testplan/snappi/switch_capacity_test.md rename to sonic-mgmt/docs/testplan/snappi/switch_capacity_test.md diff --git a/docs/testplan/snappi/unified_snappi_bgp_outbound_ut2_support_proposal.md b/sonic-mgmt/docs/testplan/snappi/unified_snappi_bgp_outbound_ut2_support_proposal.md similarity index 100% rename from docs/testplan/snappi/unified_snappi_bgp_outbound_ut2_support_proposal.md rename to sonic-mgmt/docs/testplan/snappi/unified_snappi_bgp_outbound_ut2_support_proposal.md diff --git a/docs/testplan/srv6/SRv6-phoenixwing-ptf-testplan.md b/sonic-mgmt/docs/testplan/srv6/SRv6-phoenixwing-ptf-testplan.md similarity index 100% rename from docs/testplan/srv6/SRv6-phoenixwing-ptf-testplan.md rename to sonic-mgmt/docs/testplan/srv6/SRv6-phoenixwing-ptf-testplan.md diff --git a/docs/testplan/srv6/SRv6-static-ptf-testplan.md b/sonic-mgmt/docs/testplan/srv6/SRv6-static-ptf-testplan.md similarity index 100% rename from docs/testplan/srv6/SRv6-static-ptf-testplan.md rename to sonic-mgmt/docs/testplan/srv6/SRv6-static-ptf-testplan.md diff --git a/docs/testplan/srv6/images/5-nodes.png b/sonic-mgmt/docs/testplan/srv6/images/5-nodes.png similarity index 100% rename from docs/testplan/srv6/images/5-nodes.png rename to sonic-mgmt/docs/testplan/srv6/images/5-nodes.png diff --git a/docs/testplan/srv6/images/srv6_7node_testbed.png b/sonic-mgmt/docs/testplan/srv6/images/srv6_7node_testbed.png similarity index 100% rename from docs/testplan/srv6/images/srv6_7node_testbed.png rename to sonic-mgmt/docs/testplan/srv6/images/srv6_7node_testbed.png diff --git a/docs/testplan/stp/PVST-testplan.md b/sonic-mgmt/docs/testplan/stp/PVST-testplan.md similarity index 100% rename from docs/testplan/stp/PVST-testplan.md rename to sonic-mgmt/docs/testplan/stp/PVST-testplan.md diff --git a/docs/testplan/syslog/Syslog_Protocol_Filter_TrapSeverityLevel_test_plan.md b/sonic-mgmt/docs/testplan/syslog/Syslog_Protocol_Filter_TrapSeverityLevel_test_plan.md similarity index 100% rename from docs/testplan/syslog/Syslog_Protocol_Filter_TrapSeverityLevel_test_plan.md rename to sonic-mgmt/docs/testplan/syslog/Syslog_Protocol_Filter_TrapSeverityLevel_test_plan.md diff --git a/docs/testplan/syslog/Syslog_Source_IP_test_plan.md b/sonic-mgmt/docs/testplan/syslog/Syslog_Source_IP_test_plan.md similarity index 100% rename from docs/testplan/syslog/Syslog_Source_IP_test_plan.md rename to sonic-mgmt/docs/testplan/syslog/Syslog_Source_IP_test_plan.md diff --git a/docs/testplan/transceiver/diagrams/README.md b/sonic-mgmt/docs/testplan/transceiver/diagrams/README.md similarity index 100% rename from docs/testplan/transceiver/diagrams/README.md rename to sonic-mgmt/docs/testplan/transceiver/diagrams/README.md diff --git a/docs/testplan/transceiver/diagrams/data_flow.md b/sonic-mgmt/docs/testplan/transceiver/diagrams/data_flow.md similarity index 100% rename from docs/testplan/transceiver/diagrams/data_flow.md rename to sonic-mgmt/docs/testplan/transceiver/diagrams/data_flow.md diff --git a/docs/testplan/transceiver/diagrams/file_organization.md b/sonic-mgmt/docs/testplan/transceiver/diagrams/file_organization.md similarity index 100% rename from docs/testplan/transceiver/diagrams/file_organization.md rename to sonic-mgmt/docs/testplan/transceiver/diagrams/file_organization.md diff --git a/docs/testplan/transceiver/diagrams/validation_flow.md b/sonic-mgmt/docs/testplan/transceiver/diagrams/validation_flow.md similarity index 100% rename from docs/testplan/transceiver/diagrams/validation_flow.md rename to sonic-mgmt/docs/testplan/transceiver/diagrams/validation_flow.md diff --git a/docs/testplan/transceiver/dom_test_plan.md b/sonic-mgmt/docs/testplan/transceiver/dom_test_plan.md similarity index 100% rename from docs/testplan/transceiver/dom_test_plan.md rename to sonic-mgmt/docs/testplan/transceiver/dom_test_plan.md diff --git a/docs/testplan/transceiver/eeprom_test_plan.md b/sonic-mgmt/docs/testplan/transceiver/eeprom_test_plan.md similarity index 100% rename from docs/testplan/transceiver/eeprom_test_plan.md rename to sonic-mgmt/docs/testplan/transceiver/eeprom_test_plan.md diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/eeprom.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/eeprom.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/eeprom.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/eeprom.json diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/eeprom.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/eeprom.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/eeprom.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/eeprom.json diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/hwskus/ACME-AS7726-32X.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/hwskus/ACME-AS7726-32X.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/hwskus/ACME-AS7726-32X.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/platforms/x86_64-acme_as7726_32x-r0/hwskus/ACME-AS7726-32X.json diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/eeprom.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/eeprom.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/eeprom.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/eeprom.json diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/ACME_CORP/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/eeprom.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/eeprom.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/eeprom.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/eeprom.json diff --git a/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/attributes/eeprom/transceivers/vendors/NORTHSTAR_OPTICS/part_numbers/QSFP-2X100G-AOC-GENERIC_2_ENDM/eeprom.json diff --git a/docs/testplan/transceiver/examples/inventory/dut_info/lab-dut-01.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/dut_info/lab-dut-01.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/dut_info/lab-dut-01.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/dut_info/lab-dut-01.json diff --git a/docs/testplan/transceiver/examples/inventory/normalization_mappings.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/normalization_mappings.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/normalization_mappings.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/normalization_mappings.json diff --git a/docs/testplan/transceiver/examples/inventory/templates/README.md b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/templates/README.md similarity index 100% rename from docs/testplan/transceiver/examples/inventory/templates/README.md rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/templates/README.md diff --git a/docs/testplan/transceiver/examples/inventory/templates/deployment_templates.json b/sonic-mgmt/docs/testplan/transceiver/examples/inventory/templates/deployment_templates.json similarity index 100% rename from docs/testplan/transceiver/examples/inventory/templates/deployment_templates.json rename to sonic-mgmt/docs/testplan/transceiver/examples/inventory/templates/deployment_templates.json diff --git a/docs/testplan/transceiver/port_config_test_plan.md b/sonic-mgmt/docs/testplan/transceiver/port_config_test_plan.md similarity index 100% rename from docs/testplan/transceiver/port_config_test_plan.md rename to sonic-mgmt/docs/testplan/transceiver/port_config_test_plan.md diff --git a/docs/testplan/transceiver/system_test_plan.md b/sonic-mgmt/docs/testplan/transceiver/system_test_plan.md similarity index 100% rename from docs/testplan/transceiver/system_test_plan.md rename to sonic-mgmt/docs/testplan/transceiver/system_test_plan.md diff --git a/docs/testplan/transceiver/test_plan.md b/sonic-mgmt/docs/testplan/transceiver/test_plan.md similarity index 100% rename from docs/testplan/transceiver/test_plan.md rename to sonic-mgmt/docs/testplan/transceiver/test_plan.md diff --git a/docs/tests/README.md b/sonic-mgmt/docs/tests/README.md similarity index 100% rename from docs/tests/README.md rename to sonic-mgmt/docs/tests/README.md diff --git a/docs/tests/add-new-PR-checkers.md b/sonic-mgmt/docs/tests/add-new-PR-checkers.md similarity index 100% rename from docs/tests/add-new-PR-checkers.md rename to sonic-mgmt/docs/tests/add-new-PR-checkers.md diff --git a/docs/tests/design-doc-test-cherry-pick-guard.md b/sonic-mgmt/docs/tests/design-doc-test-cherry-pick-guard.md similarity index 100% rename from docs/tests/design-doc-test-cherry-pick-guard.md rename to sonic-mgmt/docs/tests/design-doc-test-cherry-pick-guard.md diff --git a/docs/tests/guidelines.md b/sonic-mgmt/docs/tests/guidelines.md similarity index 100% rename from docs/tests/guidelines.md rename to sonic-mgmt/docs/tests/guidelines.md diff --git a/docs/tests/parallel_run/Parallel Run Infra for sonic-mgmt.md b/sonic-mgmt/docs/tests/parallel_run/Parallel Run Infra for sonic-mgmt.md similarity index 100% rename from docs/tests/parallel_run/Parallel Run Infra for sonic-mgmt.md rename to sonic-mgmt/docs/tests/parallel_run/Parallel Run Infra for sonic-mgmt.md diff --git a/docs/tests/parallel_run/parallel_run_design.png b/sonic-mgmt/docs/tests/parallel_run/parallel_run_design.png similarity index 100% rename from docs/tests/parallel_run/parallel_run_design.png rename to sonic-mgmt/docs/tests/parallel_run/parallel_run_design.png diff --git a/docs/tests/parallel_run/parallel_run_state_machine.png b/sonic-mgmt/docs/tests/parallel_run/parallel_run_state_machine.png similarity index 100% rename from docs/tests/parallel_run/parallel_run_state_machine.png rename to sonic-mgmt/docs/tests/parallel_run/parallel_run_state_machine.png diff --git a/docs/tests/pytest.logging.md b/sonic-mgmt/docs/tests/pytest.logging.md similarity index 100% rename from docs/tests/pytest.logging.md rename to sonic-mgmt/docs/tests/pytest.logging.md diff --git a/docs/tests/pytest.org.md b/sonic-mgmt/docs/tests/pytest.org.md similarity index 100% rename from docs/tests/pytest.org.md rename to sonic-mgmt/docs/tests/pytest.org.md diff --git a/docs/tests/pytest.run.md b/sonic-mgmt/docs/tests/pytest.run.md similarity index 100% rename from docs/tests/pytest.run.md rename to sonic-mgmt/docs/tests/pytest.run.md diff --git a/docs/tests/setup.dualtor.mux.ports.md b/sonic-mgmt/docs/tests/setup.dualtor.mux.ports.md similarity index 100% rename from docs/tests/setup.dualtor.mux.ports.md rename to sonic-mgmt/docs/tests/setup.dualtor.mux.ports.md diff --git a/docs/tests/styleguide.md b/sonic-mgmt/docs/tests/styleguide.md similarity index 100% rename from docs/tests/styleguide.md rename to sonic-mgmt/docs/tests/styleguide.md diff --git a/docs/tests/telemetry.md b/sonic-mgmt/docs/tests/telemetry.md similarity index 100% rename from docs/tests/telemetry.md rename to sonic-mgmt/docs/tests/telemetry.md diff --git a/docs/tests/writing.tests.help.md b/sonic-mgmt/docs/tests/writing.tests.help.md similarity index 100% rename from docs/tests/writing.tests.help.md rename to sonic-mgmt/docs/tests/writing.tests.help.md diff --git a/pylintrc b/sonic-mgmt/pylintrc similarity index 100% rename from pylintrc rename to sonic-mgmt/pylintrc diff --git a/sdn_tests/images/dualNodeTopology.png b/sonic-mgmt/sdn_tests/images/dualNodeTopology.png similarity index 100% rename from sdn_tests/images/dualNodeTopology.png rename to sonic-mgmt/sdn_tests/images/dualNodeTopology.png diff --git a/sdn_tests/pins_ondatra/.bazelrc b/sonic-mgmt/sdn_tests/pins_ondatra/.bazelrc similarity index 100% rename from sdn_tests/pins_ondatra/.bazelrc rename to sonic-mgmt/sdn_tests/pins_ondatra/.bazelrc diff --git a/sdn_tests/pins_ondatra/.gitignore b/sonic-mgmt/sdn_tests/pins_ondatra/.gitignore similarity index 100% rename from sdn_tests/pins_ondatra/.gitignore rename to sonic-mgmt/sdn_tests/pins_ondatra/.gitignore diff --git a/sdn_tests/pins_ondatra/BUILD b/sonic-mgmt/sdn_tests/pins_ondatra/BUILD similarity index 100% rename from sdn_tests/pins_ondatra/BUILD rename to sonic-mgmt/sdn_tests/pins_ondatra/BUILD diff --git a/sdn_tests/pins_ondatra/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/README.md b/sonic-mgmt/sdn_tests/pins_ondatra/README.md similarity index 100% rename from sdn_tests/pins_ondatra/README.md rename to sonic-mgmt/sdn_tests/pins_ondatra/README.md diff --git a/sdn_tests/pins_ondatra/WORKSPACE.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/WORKSPACE.bazel similarity index 100% rename from sdn_tests/pins_ondatra/WORKSPACE.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/WORKSPACE.bazel diff --git a/sdn_tests/pins_ondatra/bazel/BUILD.gmp.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.gmp.bazel similarity index 100% rename from sdn_tests/pins_ondatra/bazel/BUILD.gmp.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.gmp.bazel diff --git a/sdn_tests/pins_ondatra/bazel/BUILD.jsoncpp.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.jsoncpp.bazel similarity index 100% rename from sdn_tests/pins_ondatra/bazel/BUILD.jsoncpp.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.jsoncpp.bazel diff --git a/sdn_tests/pins_ondatra/bazel/BUILD.libprotobuf_mutator.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.libprotobuf_mutator.bazel similarity index 100% rename from sdn_tests/pins_ondatra/bazel/BUILD.libprotobuf_mutator.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.libprotobuf_mutator.bazel diff --git a/sdn_tests/pins_ondatra/bazel/BUILD.otg-models.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.otg-models.bazel similarity index 100% rename from sdn_tests/pins_ondatra/bazel/BUILD.otg-models.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.otg-models.bazel diff --git a/sdn_tests/pins_ondatra/bazel/BUILD.z3.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.z3.bazel similarity index 100% rename from sdn_tests/pins_ondatra/bazel/BUILD.z3.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/BUILD.z3.bazel diff --git a/sdn_tests/pins_ondatra/bazel/patches/ghodss_yaml.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ghodss_yaml.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/ghodss_yaml.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ghodss_yaml.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/gnmi-001-fix_virtual_proto_import.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnmi-001-fix_virtual_proto_import.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/gnmi-001-fix_virtual_proto_import.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnmi-001-fix_virtual_proto_import.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/gnmi.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnmi.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/gnmi.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnmi.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/gnoi.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnoi.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/gnoi.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnoi.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/gnoigo.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnoigo.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/gnoigo.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnoigo.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/gnsi.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnsi.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/gnsi.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gnsi.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/gribi.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gribi.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/gribi.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/gribi.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/grpc-001-fix_file_watcher_race_condition.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/grpc-001-fix_file_watcher_race_condition.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/grpc-001-fix_file_watcher_race_condition.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/grpc-001-fix_file_watcher_race_condition.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/grpc-003-fix_go_gazelle_register_toolchain.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/grpc-003-fix_go_gazelle_register_toolchain.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/grpc-003-fix_go_gazelle_register_toolchain.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/grpc-003-fix_go_gazelle_register_toolchain.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/ondatra.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ondatra.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/ondatra.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ondatra.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/p4lang.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/p4lang.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/p4lang.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/p4lang.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/rules_proto_grpc.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/rules_proto_grpc.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/rules_proto_grpc.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/rules_proto_grpc.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/snappi.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/snappi.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/snappi.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/snappi.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/ygnmi.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ygnmi.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/ygnmi.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ygnmi.patch diff --git a/sdn_tests/pins_ondatra/bazel/patches/ygot.patch b/sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ygot.patch similarity index 100% rename from sdn_tests/pins_ondatra/bazel/patches/ygot.patch rename to sonic-mgmt/sdn_tests/pins_ondatra/bazel/patches/ygot.patch diff --git a/sdn_tests/pins_ondatra/infra_deps.bzl b/sonic-mgmt/sdn_tests/pins_ondatra/infra_deps.bzl similarity index 100% rename from sdn_tests/pins_ondatra/infra_deps.bzl rename to sonic-mgmt/sdn_tests/pins_ondatra/infra_deps.bzl diff --git a/sdn_tests/pins_ondatra/infrastructure/binding/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/binding/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/infrastructure/binding/binding_backend.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/binding_backend.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/binding/binding_backend.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/binding_backend.go diff --git a/sdn_tests/pins_ondatra/infrastructure/binding/pins_backend.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pins_backend.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/binding/pins_backend.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pins_backend.go diff --git a/sdn_tests/pins_ondatra/infrastructure/binding/pins_binding.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pins_binding.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/binding/pins_binding.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pins_binding.go diff --git a/sdn_tests/pins_ondatra/infrastructure/certs/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/certs/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/certs/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/certs/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/infrastructure/certs/crt_gen.sh b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/certs/crt_gen.sh similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/certs/crt_gen.sh rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/certs/crt_gen.sh diff --git a/sdn_tests/pins_ondatra/infrastructure/data/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/data/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/infrastructure/data/config.json b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/config.json similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/data/config.json rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/config.json diff --git a/sdn_tests/pins_ondatra/infrastructure/data/p4rtconfig.prototext b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/p4rtconfig.prototext similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/data/p4rtconfig.prototext rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/p4rtconfig.prototext diff --git a/sdn_tests/pins_ondatra/infrastructure/data/testbeds.textproto b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/testbeds.textproto similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/data/testbeds.textproto rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/data/testbeds.textproto diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/augment.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/augment.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/augment.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/augment.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/config_convergence.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/config_convergence.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/config_convergence.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/config_convergence.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/config_restorer.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/config_restorer.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/config_restorer.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/config_restorer.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/gnmi.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/gnmi.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/gnmi.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/gnmi.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/gnoi.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/gnoi.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/gnoi.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/gnoi.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/lacp.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/lacp.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/lacp.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/lacp.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/p4rt.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/p4rt.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/p4rt.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/p4rt.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_components.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_components.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/platform_components.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_components.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/default.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/default.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/default.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/default.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/platform_info.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/platform_info.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/platform_info.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/platform_info/platform_info.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/port_management.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/port_management.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/port_management.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/port_management.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/results.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/results.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/results.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/results.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/ssh.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/ssh.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/ssh.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/ssh.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper.go diff --git a/sdn_tests/pins_ondatra/infrastructure/testhelper/utils.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/utils.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/testhelper/utils.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/utils.go diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed.h diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.cc b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.cc similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.cc diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture.h diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_generic_testbed_fixture_test.cc diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed.h diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.cc b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.cc similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.cc diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_mirror_testbed_fixture.h diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.cc b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.cc similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.cc diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/ondatra_params.h diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.cc b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.cc similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.cc diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.go b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.go similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.go rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.go diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit.h diff --git a/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit_go_interface.h b/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit_go_interface.h similarity index 100% rename from sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit_go_interface.h rename to sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/thinkit/thinkit_go_interface.h diff --git a/sdn_tests/pins_ondatra/pins_deps.bzl b/sonic-mgmt/sdn_tests/pins_ondatra/pins_deps.bzl similarity index 100% rename from sdn_tests/pins_ondatra/pins_deps.bzl rename to sonic-mgmt/sdn_tests/pins_ondatra/pins_deps.bzl diff --git a/sdn_tests/pins_ondatra/testrunner.sh b/sonic-mgmt/sdn_tests/pins_ondatra/testrunner.sh similarity index 100% rename from sdn_tests/pins_ondatra/testrunner.sh rename to sonic-mgmt/sdn_tests/pins_ondatra/testrunner.sh diff --git a/sdn_tests/pins_ondatra/tests/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/tests/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/tests/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/BUILD.bazel diff --git a/sonic-mgmt/sdn_tests/pins_ondatra/tests/cpu_sw_single_switch_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/cpu_sw_single_switch_test.go new file mode 100644 index 00000000000..77f96757a7f --- /dev/null +++ b/sonic-mgmt/sdn_tests/pins_ondatra/tests/cpu_sw_single_switch_test.go @@ -0,0 +1,115 @@ +package cpu_interface_test + +import ( + "net" + "testing" + "time" + + "github.com/google/gopacket" + "github.com/google/gopacket/layers" + "github.com/openconfig/ondatra" + "github.com/openconfig/ondatra/gnmi" + "github.com/openconfig/ondatra/gnmi/oc" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" +) + +var ( + cpuName = "CPU" + pktsPer uint64 = 7 + counterUpdateDelay time.Duration = 10000 * time.Millisecond +) + +func TestMain(m *testing.M) { + ondatra.RunTests(m, pinsbind.New) +} + +// TestGNMICPUName - Check that the CPU name is the expected value. +func TestGNMICPUName(t *testing.T) { + // Report results in TestTracker at the end + defer testhelper.NewTearDownOptions(t).WithID("f9c713f4-3b1e-4a08-82ae-8c82746160a4").Teardown(t) + + // Select the dut, or device under test. + dut := ondatra.DUT(t, "DUT") + + // Read the name via /state. + stateName := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Name().State()) + + // Verify the information received from the DUT. + if stateName != cpuName { + t.Errorf("CPU state Name is %v, wanted %v", stateName, cpuName) + } + + // Read the name via /config too. + configName := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Name().Config()) + + // Verify the information received from the DUT. + if configName != cpuName { + t.Errorf("CPU config Name is %v, wanted %v", configName, cpuName) + } +} + +// TestGNMICPUType - Check that the CPU type is 6=ethernetCsmacd. +func TestGNMICPUType(t *testing.T) { + // Report results in TestTracker at the end. + defer testhelper.NewTearDownOptions(t).WithID("4d8c458f-10cf-45eb-95d6-90911f05134a").Teardown(t) + + // Select the dut, or device under test. + dut := ondatra.DUT(t, "DUT") + + // Read the type via /state. + stateType := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Type().State()) + + // Verify the information received from the DUT. + if stateType != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { + t.Errorf("CPU state Type is %v, wanted %v", stateType, oc.IETFInterfaces_InterfaceType_ethernetCsmacd) + } + + // Read the type via /config. + configType := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Type().Config()) + + // Verify the information received from the DUT + if configType != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { + t.Errorf("CPU config Type is %v, wanted %v", configType, oc.IETFInterfaces_InterfaceType_ethernetCsmacd) + } + + // Verify that changing the value via config works, even if we can't + // set it other than to IETFInterfaces_InterfaceType_ethernetCsmacd + gnmi.Replace(t, dut, gnmi.OC().Interface(cpuName).Type().Config(), configType) + + // Read the type via /state again. + stateType = gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Type().State()) + + // Verify the information received from the DUT. + if stateType != oc.IETFInterfaces_InterfaceType_ethernetCsmacd { + t.Errorf("CPU state Type is %v, wanted %v", stateType, oc.IETFInterfaces_InterfaceType_ethernetCsmacd) + } +} + +// TestGNMICPURole - Check the CPU interface role +// - management should be false +// - CPU should be true +func TestGNMICPURole(t *testing.T) { + // Reports results in TestTracker at the end. + defer testhelper.NewTearDownOptions(t).WithID("202484be-ff32-4aa2-b459-da1a586b1476").Teardown(t) + + // Select the dut, or device under test. + dut := ondatra.DUT(t, "DUT") + + // Read management via /state. Note that the config path for + // these doesn't exist since they're read-only. + stateMgmt := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Management().State()) + + // Verify the information received from the DUT + if stateMgmt != false { + t.Errorf("CPU state Management is %v, wanted false", stateMgmt) + } + + // Read the CPU via /state. + stateCPU := gnmi.Get(t, dut, gnmi.OC().Interface(cpuName).Cpu().State()) + + // Verify the information received from the DUT. + if stateCPU != true { + t.Errorf("CPU state CPU is %v, wanted true", stateCPU) + } +} diff --git a/sdn_tests/pins_ondatra/tests/ethcounter_sw_dual_switch_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/ethcounter_sw_dual_switch_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/ethcounter_sw_dual_switch_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/ethcounter_sw_dual_switch_test.go diff --git a/sdn_tests/pins_ondatra/tests/ethcounter_sw_single_switch_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/ethcounter_sw_single_switch_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/ethcounter_sw_single_switch_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/ethcounter_sw_single_switch_test.go diff --git a/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_get_modes_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_get_modes_test.go new file mode 100644 index 00000000000..9343fe350b0 --- /dev/null +++ b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_get_modes_test.go @@ -0,0 +1,156 @@ +package gnmi_get_modes_test + +import ( + "context" + "encoding/json" + "strings" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/openconfig/gnmi/value" + "github.com/openconfig/ondatra" + "github.com/openconfig/ygot/ygot" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" + "google.golang.org/grpc" + + gpb "github.com/openconfig/gnmi/proto/gnmi" +) + +const ( + compStatePath = "/components/component[name=%s]/state" + compFwVerPath = "/components/component[name=%s]/state/firmware-version" + compParentStatePath = "/components/component[name=%s]/state/parent" + intfPath = "/interfaces/interface[name=%s]" + intfMtuPath = "/interfaces/interface[name=%s]/%s/mtu" + intfNamePath = "/interfaces/interface[name=%s]/%s/name" + intfConfigPath = "/interfaces/interface[name=%s]/config" + intfStatePath = "/interfaces/interface[name=%s]/state" + intfCtrsPath = "/interfaces/interface[name=%s]/state/counters" + intfCtrsStatePath = "/interfaces/interface[name=%s]/state/counters/in-octets" + intfMgmtStatePath = "/interfaces/interface[name=%s]/state/management" +) + +var ignorePaths = []string{ + "/gnmi-pathz-policy-counters/paths/path", +} + +func TestMain(m *testing.M) { + ondatra.RunTests(m, pinsbind.New) +} + +/* + TODO: Refactor the code to remove getDataTypeTest, and have +different table-driven tests for different methods of getDataTypeTest. +*/ +type getDataTypeTest struct { + uuid string + reqPath string + dataType gpb.GetRequest_DataType + wantVal any + wantNotVal string +} + +// Helper function to create the Get Request. +func createGetRequest(dut *ondatra.DUTDevice, paths []*gpb.Path, dataType gpb.GetRequest_DataType) *gpb.GetRequest { + // Add Prefix information for the GetRequest. + prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} + // Create getRequest message with data type. + getRequest := &gpb.GetRequest{ + Prefix: prefix, + Path: paths, + Type: dataType, + Encoding: gpb.Encoding_PROTO, + } + return getRequest +} + +// Test for gNMI Get for Data Type for Leaf path when non-empty subtree is returned. +func (c getDataTypeTest) dataTypeForLeafNonEmpty(t *testing.T) { + t.Helper() + defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) + dut := ondatra.DUT(t, "DUT") + + // Create Get Request. + sPath, err := ygot.StringToStructuredPath(c.reqPath) + if err != nil { + t.Fatalf("Unable to convert string to path (%v)", err) + } + paths := []*gpb.Path{sPath} + getRequest := createGetRequest(dut, paths, c.dataType) + t.Logf("GetRequest:\n%v", getRequest) + + // Send Get request using the raw gNMI client. + ctx := context.Background() + gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) + if err != nil { + t.Fatalf("Unable to get gNMI client (%v)", err) + } + getResp, err := gnmiClient.Get(ctx, getRequest) + if err != nil { + t.Fatalf("Error while calling Get Raw API: (%v)", err) + } + + if getResp == nil { + t.Fatalf("Get response is nil") + } + t.Logf("GetResponse:\n%v", getResp) + + // Validate GET response. + notifs := getResp.GetNotification() + if len(notifs) != 1 { + t.Fatalf("got %d notifications, want 1", len(notifs)) + } + notif, updates := notifs[0], notifs[0].GetUpdate() + if len(updates) != 1 { + t.Fatalf("got %d updates in the notification, want 1", len(updates)) + } + pathStr, err := ygot.PathToString(&gpb.Path{Elem: notif.GetPrefix().GetElem()}) + if err != nil { + t.Fatalf("failed to convert elems (%v) to string: %v", notif.GetPrefix().GetElem(), err) + } + + updatePath, err := ygot.PathToString(updates[0].GetPath()) + if err != nil { + t.Fatalf("failed to convert path to string (%v): %v", updatePath, err) + } + gotPath := updatePath + if pathStr != "/" { + gotPath = pathStr + updatePath + } + if gotPath != c.reqPath { + t.Fatalf("got %s path, want %s path", gotPath, c.reqPath) + } + val := updates[0].GetVal() + + var gotVal any + if val.GetJsonIetfVal() == nil { + // Get Scalar value. + gotVal, err = value.ToScalar(val) + if err != nil { + t.Errorf("got %v, want scalar value", gotVal) + } + } else { + // Unmarshal json data to container. + if err := json.Unmarshal(val.GetJsonIetfVal(), &gotVal); err != nil { + t.Fatalf("could not unmarshal json data to container: %v", err) + } + var wantJSONStruct any + if err := json.Unmarshal([]byte(c.wantVal.(string)), &wantJSONStruct); err != nil { + t.Fatalf("could not unmarshal json data to container: %v", err) + } + c.wantVal = wantJSONStruct + } + if !cmp.Equal(gotVal, c.wantVal) { + t.Fatalf("got %v value with type %T, want %v value with type %T", gotVal, gotVal, c.wantVal, c.wantVal) + } +} + +func containsOneOfTheseSubstrings(haystack string, needles []string) bool { + for i := range needles { + if strings.Contains(haystack, needles[i]) { + return true + } + } + return false +} diff --git a/sdn_tests/pins_ondatra/tests/gnmi_helper.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_helper.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/gnmi_helper.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_helper.go diff --git a/sdn_tests/pins_ondatra/tests/gnmi_long_stress_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_long_stress_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/gnmi_long_stress_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_long_stress_test.go diff --git a/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_set_get_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_set_get_test.go new file mode 100644 index 00000000000..50ca58ff108 --- /dev/null +++ b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_set_get_test.go @@ -0,0 +1,187 @@ +package gnmi_set_get_test + +import ( + "context" + "fmt" + "strconv" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/openconfig/ondatra" + "github.com/openconfig/ondatra/gnmi" + "github.com/openconfig/ondatra/gnmi/oc" + "github.com/openconfig/testt" + "github.com/openconfig/ygnmi/ygnmi" + "github.com/openconfig/ygot/ygot" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" + "golang.org/x/sync/errgroup" + "google.golang.org/grpc" + "google.golang.org/protobuf/encoding/prototext" + + gpb "github.com/openconfig/gnmi/proto/gnmi" +) + +const ( + testdataDir = "./" +) + +func TestMain(m *testing.M) { + ondatra.RunTests(m, pinsbind.New) +} + +/********************************************************** +* gNMI SET Update operations +**********************************************************/ +func TestGNMISetUpdateSingleLeaf(t *testing.T) { + defer testhelper.NewTearDownOptions(t).WithID("ffe66b7b-0e61-49bd-803d-0406a8c914d7").Teardown(t) + dut := ondatra.DUT(t, "DUT") + // Add Prefix information for the GetRequest. + prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} + + // Select a random front panel interface EthernetX. + intf, err := testhelper.RandomInterface(t, dut, nil) + if err != nil { + t.Fatalf("Failed to fetch random interface: %v", err) + } + + mtuPath := gnmi.OC().Interface(intf).Mtu() + resolvedPath, _, errs := ygnmi.ResolvePath(mtuPath.Config().PathStruct()) + if errs != nil { + t.Fatalf("Failed to resolve path %v: %v", mtuPath, err) + } + mtu := gnmi.Get(t, dut, mtuPath.Config()) + // Adding 22 bytes to the existing MTU value for the test. + newMtu := mtu + 22 + + defer func() { + // Replace the old value for the MTU field as a test cleanup. + gnmi.Replace(t, dut, mtuPath.Config(), mtu) + gnmi.Await(t, dut, gnmi.OC().Interface(intf).Mtu().State(), 5*time.Second, mtu) + }() + + setRequest := &gpb.SetRequest{ + Prefix: prefix, + Update: []*gpb.Update{{ + Path: resolvedPath, + Val: &gpb.TypedValue{ + Value: &gpb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(strconv.FormatUint(uint64(newMtu), 10)), + }, + }, + }}, + } + + enabled := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()) + ctx := context.Background() + + // Fetch raw gNMI client and call Set API to send Set Request. + gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) + if err != nil { + t.Fatalf("Unable to get gNMI client (%v)", err) + } + setResp, err := gnmiClient.Set(ctx, setRequest) + if err != nil { + t.Fatalf("Unable to fetch set client (%v)", err) + } + t.Logf("SetResponse:\n%v", setResp) + + // Verify the value is being set properly using get. + if got := gnmi.Get(t, dut, mtuPath.Config()); got != newMtu { + t.Errorf("MTU matched failed! got:%v, want:%v", got, newMtu) + } + + // Verify that other leaf nodes are not changed. + if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Enabled().Config()); got != enabled { + t.Errorf("Enabled matched failed! got:%v, want:%v", got, enabled) + } +} + +func TestGNMISetUpdateNonExistingLeaf(t *testing.T) { + defer testhelper.NewTearDownOptions(t).WithID("408e875e-d00f-4071-acaf-204616800bee").Teardown(t) + dut := ondatra.DUT(t, "DUT") + // Add Prefix information for the GetRequest. + prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} + + // Select a random front panel interface EthernetX. + intf, err := testhelper.RandomInterface(t, dut, nil) + if err != nil { + t.Fatalf("Failed to fetch random interface: %v", err) + } + + res := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Config()) + descPath := gnmi.OC().Interface(intf).Description() + resolvedPath, _, errs := ygnmi.ResolvePath(descPath.Config().PathStruct()) + if errs != nil { + t.Fatalf("Failed to resolve path %v: %v", descPath, errs) + } + ctx := context.Background() + var desc string = "description before reset" + var descExist bool = false + if res.Description != nil { + desc = *res.Description + descExist = true + var paths []*gpb.Path + paths = append(paths, resolvedPath) + + delRequest := &gpb.SetRequest{ + Prefix: prefix, + Delete: paths, + } + // Fetch raw gNMI client and call Set API to send Set Request. + gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) + if err != nil { + t.Fatalf("Unable to get gNMI client (%v)", err) + } + delResp, err := gnmiClient.Set(ctx, delRequest) + if err != nil { + t.Fatalf("Unable to fetch set delete client (%v)", err) + } + t.Logf("SetResponse:\n%v", delResp) + } + + wantDesc := "description after reset" + defer func() { + // Replace the id to original value if it exists before the test. + if descExist { + gnmi.Delete(t, dut, descPath.Config()) + gnmi.Replace(t, dut, descPath.Config(), desc) + gnmi.Await(t, dut, gnmi.OC().Interface(intf).Description().State(), 5*time.Second, desc) + } + }() + + setRequest := &gpb.SetRequest{ + Prefix: prefix, + Update: []*gpb.Update{{ + Path: resolvedPath, + Val: &gpb.TypedValue{ + Value: &gpb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(fmt.Sprintf("\"%s\"", wantDesc)), + }, + }, + }}, + } + + mtu := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()) + + // Fetch raw gNMI client and call Set API to send Set Request. + gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(context.Background(), grpc.WithBlock()) + if err != nil { + t.Fatalf("Unable to get gNMI client (%v)", err) + } + setResp, err := gnmiClient.Set(ctx, setRequest) + if err != nil { + t.Fatalf("Unable to fetch set client (%v)", err) + } + t.Logf("SetResponse:\n%v", setResp) + // Verify the value is being set properly using get. + if got := gnmi.Get(t, dut, descPath.Config()); got != wantDesc { + t.Errorf("ID matched failed! got:%v, want: description after reset", got) + } + // Verify that other leaf nodes are not changed. + if got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().Config()); got != mtu { + t.Errorf("MTU matched failed! mtuAfterSet:%v, want:%v", got, mtu) + } +} diff --git a/sdn_tests/pins_ondatra/tests/gnmi_stress_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_stress_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/gnmi_stress_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_stress_test.go diff --git a/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_subscribe_modes_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_subscribe_modes_test.go new file mode 100644 index 00000000000..2fab975cdd7 --- /dev/null +++ b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_subscribe_modes_test.go @@ -0,0 +1,182 @@ +package gnmi_subscribe_modes_test + +import ( + "context" + "errors" + "fmt" + "strings" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/ondatra" + "github.com/openconfig/ondatra/gnmi" + "github.com/openconfig/ygot/ygot" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" + "google.golang.org/grpc" + "google.golang.org/protobuf/encoding/prototext" +) + +const ( + deleteTreePath = "/system/config/" + deletePath = "/system/config/hostname" + timePath = "/system/state/current-datetime" + nodePath = "/system/state/hostname" + subTreePath = "/system/state" + containerPath = "/components" + rootPath = "/" + onChangePath = "/interfaces/interface[name=%s]/state/mtu" + errorResponse = "expectedError" + syncResponse = "expectedSync" + + shortTime = 5 * time.Second + mediumTime = 10 * time.Second + longTime = 30 * time.Second +) + +func TestMain(m *testing.M) { + ondatra.RunTests(m, pinsbind.New) +} + +type subscribeTest struct { + uuid string + reqPath string + mode gpb.SubscriptionList_Mode + updatesOnly bool + subMode gpb.SubscriptionMode + sampleInterval uint64 // nanoseconds + suppressRedundant bool + heartbeatInterval uint64 // nanoseconds + expectError bool + timeout time.Duration +} + +type operStatus struct { + match bool + delete bool + value string +} + +func ignorePaths(path string) bool { + // Paths that change during root and container level tests + subPaths := []string{ + // TODO Check back if lb/bond are needed after this bug is corrected. + "/ethernet/state/counters/", + "//interfaces/interface[name=Loopback0]", + "//interfaces/interface[name=bond0]", + "//qos/interfaces/interface", + "//snmp/engine/version/", + "//system/mount-points/mount-point", + "//system/processes/process", + "//system/cpus/cpu", + "//system/crm/threshold", + "//system/ntp/", + "//system/memory/", + "//system/ssh-server/ssh-server-vrfs", + "/subinterface[index=0]/ipv4/unnumbered/", + "/subinterface[index=0]/ipv4/sag-ipv4/", + "/subinterface[index=0]/ipv6/sag-ipv6/", + "/gnmi-pathz-policy-counters/paths/path", + "/system/state/boot-time", + "/system/state/uptime", + } + + for _, sub := range subPaths { + if strings.Contains(path, sub) { + return true + } + } + return false +} + +var skipTest = map[string]bool{ + // TODO Ondatra fails to delete subtree + "TestGNMISubscribeModes/subscribeDeleteNodeLevel": true, + "TestGNMISubscribeModes/subscribeDeleteSubtreeLevel": true, +} + +// Test for gNMI Subscribe Stream mode for OnChange subscriptions. +func (c subscribeTest) subModeOnChangeTest(t *testing.T) { + defer testhelper.NewTearDownOptions(t).WithID(c.uuid).Teardown(t) + if skipTest[t.Name()] { + t.Skip() + } + dut := ondatra.DUT(t, "DUT") + + var intf string + if c.expectError == false { + var err error + intf, err = testhelper.RandomInterface(t, dut, nil) + if err != nil { + t.Fatalf("Failed to fetch random interface: %v", err) + } + c.reqPath = fmt.Sprintf(c.reqPath, intf) + } + subscribeRequest := buildRequest(t, c, dut.Name()) + t.Logf("SubscribeRequest:\n%v", prototext.Format(subscribeRequest)) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + gnmiClient, err := dut.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) + if err != nil { + t.Fatalf("Unable to get gNMI client (%v)", err) + } + subscribeClient, err := gnmiClient.Subscribe(ctx) + if err != nil { + t.Fatalf("Unable to get subscribe client (%v)", err) + } + + if err := subscribeClient.Send(subscribeRequest); err != nil { + t.Fatalf("Failed to send gNMI subscribe request (%v)", err) + } + + expectedPaths := make(map[string]operStatus) + if !c.updatesOnly { + expectedPaths = c.buildExpectedPaths(t, dut) + } + expectedPaths[syncResponse] = operStatus{} + + foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) + if c.expectError { + foundErr, ok := foundPaths[errorResponse] + if !ok { + t.Fatal("Expected error but got none") + } + if !strings.Contains(foundErr.value, "InvalidArgument") { + t.Errorf("Error is not an InvalidArgument: %s", foundErr.value) + } + return + } + if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { + t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) + } + delete(expectedPaths, syncResponse) + + got := gnmi.Get(t, dut, gnmi.OC().Interface(intf).Mtu().State()) + defer gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), got) + mtu := uint16(1500) + if got == 1500 { + mtu = 9000 + } + if c.heartbeatInterval == 0 { + gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) + } + + foundPaths, delay := collectResponse(t, subscribeClient, expectedPaths) + if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { + t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) + } + if c.heartbeatInterval != 0 { + if delay > time.Duration(c.heartbeatInterval+(c.heartbeatInterval/2)) { + t.Errorf("Failed sampleInterval with time of %v", delay) + } + gnmi.Update(t, dut, gnmi.OC().Interface(intf).Mtu().Config(), mtu) + foundPaths, _ := collectResponse(t, subscribeClient, expectedPaths) + if diff := cmp.Diff(expectedPaths, foundPaths, cmpopts.IgnoreUnexported(operStatus{})); diff != "" { + t.Errorf("collectResponse(expectedPaths):\n%v \nResponse mismatch (-missing +extra):\n%s", expectedPaths, diff) + } + } +} diff --git a/sdn_tests/pins_ondatra/tests/gnmi_wildcard_subscription_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_wildcard_subscription_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/gnmi_wildcard_subscription_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/gnmi_wildcard_subscription_test.go diff --git a/sdn_tests/pins_ondatra/tests/gnoi_factory_reset_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_factory_reset_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/gnoi_factory_reset_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_factory_reset_test.go diff --git a/sdn_tests/pins_ondatra/tests/gnoi_file_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_file_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/gnoi_file_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_file_test.go diff --git a/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_reboot_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_reboot_test.go new file mode 100644 index 00000000000..efddef2464d --- /dev/null +++ b/sonic-mgmt/sdn_tests/pins_ondatra/tests/gnoi_reboot_test.go @@ -0,0 +1,211 @@ +package gnoi_reboot_test + +// This suite of tests is to end-to-end test the gNOI reboot. + +import ( + "context" + "regexp" + "strings" + "testing" + "time" + + "github.com/openconfig/ondatra" + "github.com/openconfig/ondatra/gnmi" + "github.com/openconfig/ygnmi/ygnmi" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" + "github.com/pkg/errors" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + + gpb "github.com/openconfig/gnmi/proto/gnmi" + syspb "github.com/openconfig/gnoi/system" +) + +type grpcErr struct { + code codes.Code + desc string +} + +func extractCanonicalCodeString(e error) string { + if e == nil { + return codes.OK.String() + } + re := regexp.MustCompile(`code = (\w+)`) + match := re.FindStringSubmatch(e.Error()) + if len(match) < 2 { + return codes.Unknown.String() + } + return match[1] +} + +func (e *grpcErr) Error() string { + if e == nil { + return "" + } + return "rpc error: code = " + e.code.String() + " desc = " + e.desc +} + +func (e *grpcErr) Is(o error) bool { + if e == nil || o == nil { + return e == o + } + + if extractCanonicalCodeString(o) != e.code.String() { + return false + } + if !strings.Contains(o.Error(), e.desc) { + return false + } + return true +} + +var ( + errStrRebootRPC = "reboot RPC failed: rpc error: " + errInvalidRequest = grpcErr{code: codes.InvalidArgument, desc: "Invalid request"} + errHostService = grpcErr{code: codes.Internal, desc: "Internal SONiC HostService failure: "} + errMethodNotSupported = grpcErr{code: codes.InvalidArgument, desc: "reboot method is not supported"} +) + +// attainGnoiStateParams specify the parameters used by attainGnoiStateDuringReboot. +type attainGnoiStateParams struct { + waitTime time.Duration + checkInterval time.Duration + timeBeforeReboot int64 + gnoiReachability bool +} + +func TestMain(m *testing.M) { + ondatra.RunTests(m, pinsbind.New) +} + +// Helper function to create the Get Request. +func createGetRequest(dut *ondatra.DUTDevice, paths []*gpb.Path, dataType gpb.GetRequest_DataType) *gpb.GetRequest { + // Add Prefix information for the GetRequest. + prefix := &gpb.Path{Origin: "openconfig", Target: dut.Name()} + // Create getRequest message with data type. + getRequest := &gpb.GetRequest{ + Prefix: prefix, + Path: paths, + Type: dataType, + Encoding: gpb.Encoding_PROTO, + } + return getRequest +} + +// Helper function to get bootTime from chassis using a raw gNMI client: the intention is to not fatally +// fail is the chassis is unreachable. +// Return boot-time, true, nil if boot-time successfully retrieved from the switch. +// Return 0, false, nil if unable to retrieve boot-time. +// Return 0, false, error if an error occurred while retrieving boot-time. +func retrieveBootTime(t *testing.T, d *ondatra.DUTDevice) (uint64, bool, error) { + operStatusPath := gnmi.OC().System().BootTime().State().PathStruct() + resolvedPath, _, _ := ygnmi.ResolvePath(operStatusPath) + paths := []*gpb.Path{resolvedPath} + getRequest := createGetRequest(d, paths, gpb.GetRequest_STATE) + ctx := context.Background() + gnmiClient, err := d.RawAPIs().BindingDUT().DialGNMI(ctx, grpc.WithBlock()) + if err != nil { + t.Fatalf("Unable to get gNMI client (%v)", err) + } + getResp, err := gnmiClient.Get(ctx, getRequest) + + if err != nil { + // The inability to retrieve boot-time is not a fatal error and is an expected side effect + // of rebooting during reboot test. + t.Logf("error retrieving boot-time, err = (%v)", err) + return 0, false, nil + } + if getResp == nil { + return 0, false, errors.Errorf("retrieveBootTime: Get response is nil") + } + + notifs := getResp.GetNotification() + if len(notifs) != 1 { + return 0, false, errors.Errorf("retrieveBootTime: There should only be one notification: getResp = (%v)", getResp) + } + + update := notifs[0].GetUpdate() + if len(update) != 1 { + return 0, false, errors.Errorf("retrieveBootTime: There should only be one update: getResp = (%v)", getResp) + } + + bootTime := update[0].GetVal() + if bootTime == nil { + return 0, false, errors.Errorf("retrieveBootTime: Unable to GetVal from update: getResp = (%v)", getResp) + } + return bootTime.GetUintVal(), true, nil +} + +// attainGnoiStateDuringReboot polls the gNOI server and achieve the corresponding gNOI state depending on gnoiReachability during reboot +// If gnoiReachability is true, then this function will poll for gNOI server to be reachable and verifies the reboot. +// If gnoiReachability is false, then this function will poll for gNOI server to be unreachable and returns. +func attainGnoiStateDuringReboot(t *testing.T, d *ondatra.DUTDevice, params attainGnoiStateParams) error { + t.Helper() + t.Logf("Polling gNOI server reachability in %v intervals for max duration of %v", params.checkInterval, params.waitTime) + for timeout := time.Now().Add(params.waitTime); time.Now().Before(timeout); { + // The switch backend might not have processed the reboot request or might take + // sometime to execute the request. So wait for check interval time and + // later verify that the switch rebooted within the specified wait time. + time.Sleep(params.checkInterval) + timeElapsed := (time.Now().UnixNano() - params.timeBeforeReboot) / int64(time.Second) + + // An error returned by GNOIAble indicates we were unable to connect to the server. + gnoiErr := testhelper.GNOIAble(t, d) + + // Treat a non GNOIAble switch and an inability to query boot-time as a server not up condition. + if gnoiErr != nil { + t.Logf("gNOI server not up after %v seconds", timeElapsed) + if !params.gnoiReachability { + return nil + } + continue + } + + // An error returned by retrieveBootTime is a processing error to be treated as fatal. + bootTime, valid, bootErr := retrieveBootTime(t, d) + + if bootErr != nil { + return bootErr + } + + if !valid { + t.Logf("gNOI server not up after %v seconds", timeElapsed) + if !params.gnoiReachability { + return nil + } + continue + } + + t.Logf("gNOI server up after %v seconds", timeElapsed) + + // An extra check to ensure that the system has rebooted. + if bootTime < uint64(params.timeBeforeReboot) { + t.Logf("Switch has not rebooted after %v seconds", timeElapsed) + continue + } + + t.Logf("Switch rebooted after %v seconds", timeElapsed) + if !params.gnoiReachability { + return errors.Errorf("failed to reach gNOI unreachability") + } + return nil + } + return errors.Errorf("failed to reboot") +} + +func TestRebootSuccess(t *testing.T) { + // Validation for success of reboot after sending Reboot RPC. + ttID := "0dedda87-1b76-40a2-8712-24c1579987ee" + defer testhelper.NewTearDownOptions(t).WithID(ttID).Teardown(t) + dut := ondatra.DUT(t, "DUT") + + waitTime, err := testhelper.RebootTimeForDevice(t, dut) + if err != nil { + t.Fatalf("Unable to get reboot wait time: %v", err) + } + params := testhelper.NewRebootParams().WithWaitTime(waitTime).WithCheckInterval(30*time.Second).WithRequest(syspb.RebootMethod_COLD).WithLatencyMeasurement(ttID, "gNOI Reboot With Type: "+syspb.RebootMethod_COLD.String()) + if err := testhelper.Reboot(t, dut, params); err != nil { + t.Fatalf("Failed to reboot DUT: %v", err) + } +} diff --git a/sdn_tests/pins_ondatra/tests/inband_sw_interface_dual_switch_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/inband_sw_interface_dual_switch_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/inband_sw_interface_dual_switch_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/inband_sw_interface_dual_switch_test.go diff --git a/sdn_tests/pins_ondatra/tests/inband_sw_interface_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/inband_sw_interface_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/inband_sw_interface_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/inband_sw_interface_test.go diff --git a/sdn_tests/pins_ondatra/tests/installation_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/installation_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/installation_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/installation_test.go diff --git a/sonic-mgmt/sdn_tests/pins_ondatra/tests/lacp_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/lacp_test.go new file mode 100644 index 00000000000..5fbdb1375ee --- /dev/null +++ b/sonic-mgmt/sdn_tests/pins_ondatra/tests/lacp_test.go @@ -0,0 +1,237 @@ +package lacp_test + +import ( + "fmt" + "sort" + "strings" + "testing" + "time" + + log "github.com/golang/glog" + "github.com/google/go-cmp/cmp" + "github.com/openconfig/ondatra" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/binding/pinsbind" + "github.com/sonic-net/sonic-mgmt/sdn_tests/pins_ondatra/infrastructure/testhelper/testhelper" + "github.com/pkg/errors" + + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/ondatra/gnmi" + "github.com/openconfig/ondatra/gnmi/oc" + "github.com/openconfig/ygnmi/ygnmi" +) + +// gNMI can cache local state for up to 10 seconds. We therefore set our timeout to a little longer +// to handle any edge cases when verifying state. +const defaultGNMIWait = 15 * time.Second + +// IEEE 802.3ad defines the Link Aggregation standard used by LACP where connected ports can +// experimental control packets between each other. Based on these packets the switch can group matching +// ports into a LAG/Trunk/PortChannel. +// +// Local state is maintained for each member of a LAG to monitor the health of that given member. +type lacpMemberState struct { + activity oc.E_Lacp_LacpActivityType + timeout oc.E_Lacp_LacpTimeoutType + aggregatable bool + synchronization oc.E_Lacp_LacpSynchronizationType + collecting bool + distributing bool +} + +// Wait for the switch state of a specific PortChannel member to converge to a users expectations. +// If the switch state does not converge return a string detailing the difference between the final +// state received, and what the user wanted. +func compareLacpMemberState(t *testing.T, dut *ondatra.DUTDevice, pcName string, memberName string, want lacpMemberState) string { + t.Helper() + + // Wait for the switch value to match our expectation. + predicate := func(val *ygnmi.Value[*oc.Lacp_Interface_Member]) bool { + currentVal, present := val.Val() + if !present { + return false + } + return currentVal.GetActivity() == want.activity && + currentVal.GetTimeout() == want.timeout && + currentVal.GetAggregatable() == want.aggregatable && + currentVal.GetSynchronization() == want.synchronization && + currentVal.GetCollecting() == want.collecting && + currentVal.GetDistributing() == want.distributing + } + lastVal, match := gnmi.Watch(t, dut, gnmi.OC().Lacp().Interface(pcName).Member(memberName).State(), defaultGNMIWait, predicate).Await(t) + + state, ok := lastVal.Val() + if !ok { + return "no value for lacp interface member" + } + var diff strings.Builder + if !match { + fmt.Fprintf(&diff, "%v:%v:%v (-want, +got)", dut.Name(), pcName, memberName) + + if state.Activity == want.activity { + fmt.Fprintf(&diff, "\nactivity: %v", state.Activity) + } else if state.Activity == oc.Lacp_LacpActivityType_UNSET { + fmt.Fprintf(&diff, "\nactivity: -%v, +(unset)", want.activity) + } else { + fmt.Fprintf(&diff, "\nactivity: -%v, +%v", want.activity, state.Activity) + } + + if state.Timeout == want.timeout { + fmt.Fprintf(&diff, "\ntimeout: %v", state.Timeout) + } else if state.Timeout == oc.Lacp_LacpTimeoutType_UNSET { + fmt.Fprintf(&diff, "\ntimeout: -%v, +(unset)", want.timeout) + } else { + fmt.Fprintf(&diff, "\ntimeout: -%v, +%v", want.timeout, state.Timeout) + } + + if state.Aggregatable != nil && *state.Aggregatable == want.aggregatable { + fmt.Fprintf(&diff, "\naggregatable: %v", *state.Aggregatable) + } else if state.Aggregatable == nil { + fmt.Fprintf(&diff, "\naggregatable: -%v, +(unset)", want.aggregatable) + } else { + fmt.Fprintf(&diff, "\naggregatable: -%v, +%v", want.aggregatable, *state.Aggregatable) + } + + if state.Synchronization == want.synchronization { + fmt.Fprintf(&diff, "\nsynchronization: %v", state.Synchronization) + } else if state.Synchronization == oc.Lacp_LacpSynchronizationType_UNSET { + fmt.Fprintf(&diff, "\nsynchronization: -%v, +(unset)", want.synchronization) + } else { + fmt.Fprintf(&diff, "\nsynchronization: -%v, +%v", want.synchronization, state.Synchronization) + } + + if state.Collecting != nil && *state.Collecting == want.collecting { + fmt.Fprintf(&diff, "\ncollecting: %v", state.Collecting) + } else if state.Collecting == nil { + fmt.Fprintf(&diff, "\ncollecting: -%v, +(unset)", want.collecting) + } else { + fmt.Fprintf(&diff, "\ncollecting: -%v, -%v", want.collecting, *state.Collecting) + } + + if state.Distributing != nil && *state.Distributing == want.distributing { + fmt.Fprintf(&diff, "\ndistributing: %v", *state.Distributing) + } else if state.Distributing == nil { + fmt.Fprintf(&diff, "\ndistributing: -%v, +(unset)", want.distributing) + } else { + fmt.Fprintf(&diff, "\ndistributing: -%v, +%v", want.distributing, *state.Distributing) + } + } + return diff.String() +} + +// Blocking state happens when one side of the LACP connection is up, but the other is not. For +// example, a port is down, or not yet configured. When this happens we expect the member to still +// be active and aggregatable (i.e. waiting for the other end to come up), but not yet in-sync or +// collecting/distributing traffic. +func verifyBlockingState(t *testing.T, dut *ondatra.DUTDevice, pcName string, memberName string) error { + t.Helper() + + want := lacpMemberState{ + activity: oc.Lacp_LacpActivityType_ACTIVE, + timeout: oc.Lacp_LacpTimeoutType_LONG, + aggregatable: true, + synchronization: oc.Lacp_LacpSynchronizationType_OUT_SYNC, + collecting: false, + distributing: false, + } + + // gNMI does not support ON_CHANGE events for LACP paths, and SAMPLING can fatally fail if an + // entry doesn't yet exist (i.e. we call this too quickly after sending a config). So to prevent + // flakes we run this check twice in a row. + if firstDiff := compareLacpMemberState(t, dut, pcName, memberName, want); firstDiff != "" { + log.Warningf("Failed first blocking check: %s", firstDiff) + if secondDiff := compareLacpMemberState(t, dut, pcName, memberName, want); secondDiff != "" { + return errors.New(secondDiff) + } + } + return nil +} + +// In-Sync state happens when both side of the LACP connection are up and healthy. When in this +// state we expect the member to be active, aggregatable, in-sync, collecting, and distributing +// traffic. +func verifyInSyncState(t *testing.T, dut *ondatra.DUTDevice, pcName string, memberName string) error { + t.Helper() + + want := lacpMemberState{ + activity: oc.Lacp_LacpActivityType_ACTIVE, + timeout: oc.Lacp_LacpTimeoutType_LONG, + aggregatable: true, + synchronization: oc.Lacp_LacpSynchronizationType_IN_SYNC, + collecting: true, + distributing: true, + } + + // gNMI does not support ON_CHANGE events for LACP paths, and SAMPLING can fatally fail if an + // entry doesn't yet exist (i.e. we call this too quickly after sending a config). So to prevent + // flakes we run this check twice in a row. + if firstDiff := compareLacpMemberState(t, dut, pcName, memberName, want); firstDiff != "" { + log.Warningf("Failed first in-sync check: %s", firstDiff) + if secondDiff := compareLacpMemberState(t, dut, pcName, memberName, want); secondDiff != "" { + return errors.New(secondDiff) + } + } + return nil +} + +// gNMI does not specify an ordering for the member list of a PortChannel. To make tests +// reproducible we need to sort the member lists before comparing. +func comparePortChannelMemberList(t *testing.T, timeout time.Duration, dut *ondatra.DUTDevice, pcName string, members []string) error { + t.Helper() + + // Users do not have to pre-sort their list. + sort.Strings(members) + + predicate := func(val *ygnmi.Value[[]string]) bool { + got, present := val.Val() + // If the value isn't present then simply return false. + if !present { + return false + } + + // Otherwise, sort the values from the switch, and compare them to the expectations. + sort.Strings(got) + return cmp.Equal(members, got) + } + + // gNMI does not support ON_CHANGE events for LACP paths, and SAMPLING can fatally fail if an + // entry doesn't yet exist (i.e. we call this too quickly after sending a config). So to prevent + // flakes we run this check twice in a row. + if lastVal, matched := gnmi.Watch(t, dut, gnmi.OC().Interface(pcName).Aggregation().Member().State(), timeout, predicate).Await(t); !matched { + log.Warningf("Failed first membership check: %v", lastVal) + if lastVal, again := gnmi.Watch(t, dut, gnmi.OC().Interface(pcName).Aggregation().Member().State(), timeout, predicate).Await(t); !again { + return errors.Errorf("member state does not match %v:%v", members, lastVal) + } + } + return nil +} + +// Translates an openconfig ETHERNET_SPEED into Mbps which can be used to verify a LAG's speed. +func ethernetPortSpeedToMbps(speed oc.E_IfEthernet_ETHERNET_SPEED) (uint32, error) { + // Returns bits/sec. + bps, err := testhelper.EthernetSpeedToUint64(speed) + if err != nil { + return 0, err + } + return uint32(bps / 1_000_000), nil +} + +// Fetches the configured PortSpeed for a list of ports, and aggregates the values together. Can be +// be used to verify a PortChannel speed matches the total of all its member ports. +func aggregatedPortSpeed(t *testing.T, dut *ondatra.DUTDevice, ports []string) (uint32, error) { + lagSpeed := uint32(0) + + for _, port := range ports { + portSpeed, err := ethernetPortSpeedToMbps(gnmi.Get(t, dut, gnmi.OC().Interface(port).Ethernet().PortSpeed().Config())) + if err != nil { + return 0, errors.Wrapf(err, "could not get port speed for %s", port) + } + lagSpeed += portSpeed + } + + return lagSpeed, nil +} + +// Used by go/ondatra to automatically reserve an available testbed. +func TestMain(m *testing.M) { + ondatra.RunTests(m, pinsbind.New) +} diff --git a/sdn_tests/pins_ondatra/tests/lacp_timeout_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/lacp_timeout_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/lacp_timeout_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/lacp_timeout_test.go diff --git a/sdn_tests/pins_ondatra/tests/link_event_damping_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/link_event_damping_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/link_event_damping_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/link_event_damping_test.go diff --git a/sdn_tests/pins_ondatra/tests/mgmt_interface_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/mgmt_interface_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/mgmt_interface_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/mgmt_interface_test.go diff --git a/sdn_tests/pins_ondatra/tests/module_reset_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/module_reset_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/module_reset_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/module_reset_test.go diff --git a/sdn_tests/pins_ondatra/tests/ondatra_test.bzl b/sonic-mgmt/sdn_tests/pins_ondatra/tests/ondatra_test.bzl similarity index 100% rename from sdn_tests/pins_ondatra/tests/ondatra_test.bzl rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/ondatra_test.bzl diff --git a/sdn_tests/pins_ondatra/tests/platforms_hardware_component_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/platforms_hardware_component_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/platforms_hardware_component_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/platforms_hardware_component_test.go diff --git a/sdn_tests/pins_ondatra/tests/platforms_software_component_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/platforms_software_component_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/platforms_software_component_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/platforms_software_component_test.go diff --git a/sdn_tests/pins_ondatra/tests/port_debug_data_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/port_debug_data_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/port_debug_data_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/port_debug_data_test.go diff --git a/sdn_tests/pins_ondatra/tests/system_paths_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/system_paths_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/system_paths_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/system_paths_test.go diff --git a/sdn_tests/pins_ondatra/tests/thinkit/BUILD.bazel b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/BUILD.bazel similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/BUILD.bazel rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/BUILD.bazel diff --git a/sdn_tests/pins_ondatra/tests/thinkit/arbitration_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/arbitration_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/arbitration_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/arbitration_test.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/arriba_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/arriba_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/arriba_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/arriba_test.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/configure_mirror_testbed_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/configure_mirror_testbed_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/configure_mirror_testbed_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/configure_mirror_testbed_test.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/l3_admit_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/l3_admit_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/l3_admit_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/l3_admit_test.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/packet_forwarding_tests.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/packet_forwarding_tests.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/packet_forwarding_tests.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/packet_forwarding_tests.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/random_blackbox_events_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/random_blackbox_events_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/random_blackbox_events_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/random_blackbox_events_test.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/smoke_test.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/smoke_test.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/smoke_test.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/smoke_test.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/util.cc b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/util.cc similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/util.cc rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/util.cc diff --git a/sdn_tests/pins_ondatra/tests/thinkit/util.h b/sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/util.h similarity index 100% rename from sdn_tests/pins_ondatra/tests/thinkit/util.h rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/thinkit/util.h diff --git a/sdn_tests/pins_ondatra/tests/transceiver_test.go b/sonic-mgmt/sdn_tests/pins_ondatra/tests/transceiver_test.go similarity index 100% rename from sdn_tests/pins_ondatra/tests/transceiver_test.go rename to sonic-mgmt/sdn_tests/pins_ondatra/tests/transceiver_test.go diff --git a/sdn_tests/readme.md b/sonic-mgmt/sdn_tests/readme.md similarity index 100% rename from sdn_tests/readme.md rename to sonic-mgmt/sdn_tests/readme.md diff --git a/sdn_tests/tests/Watchport_Blackbox_Test _Plan.md b/sonic-mgmt/sdn_tests/tests/Watchport_Blackbox_Test _Plan.md similarity index 100% rename from sdn_tests/tests/Watchport_Blackbox_Test _Plan.md rename to sonic-mgmt/sdn_tests/tests/Watchport_Blackbox_Test _Plan.md diff --git a/setup-container.sh b/sonic-mgmt/setup-container.sh similarity index 100% rename from setup-container.sh rename to sonic-mgmt/setup-container.sh diff --git a/sonic_dictionary.txt b/sonic-mgmt/sonic_dictionary.txt similarity index 100% rename from sonic_dictionary.txt rename to sonic-mgmt/sonic_dictionary.txt diff --git a/spytest/.gitignore b/sonic-mgmt/spytest/.gitignore similarity index 99% rename from spytest/.gitignore rename to sonic-mgmt/spytest/.gitignore index 2160fb324b0..fc4461d70c0 100644 --- a/spytest/.gitignore +++ b/sonic-mgmt/spytest/.gitignore @@ -4,6 +4,7 @@ __pycache__/ *~ *.log *.csv +.containers/ # Created by https://www.gitignore.io/api/pycharm # Edit at https://www.gitignore.io/?templates=pycharm diff --git a/spytest/Doc/README.md b/sonic-mgmt/spytest/Doc/README.md similarity index 100% rename from spytest/Doc/README.md rename to sonic-mgmt/spytest/Doc/README.md diff --git a/spytest/Doc/arch.jpg b/sonic-mgmt/spytest/Doc/arch.jpg similarity index 100% rename from spytest/Doc/arch.jpg rename to sonic-mgmt/spytest/Doc/arch.jpg diff --git a/spytest/Doc/install.md b/sonic-mgmt/spytest/Doc/install.md similarity index 100% rename from spytest/Doc/install.md rename to sonic-mgmt/spytest/Doc/install.md diff --git a/spytest/Doc/intro.md b/sonic-mgmt/spytest/Doc/intro.md similarity index 100% rename from spytest/Doc/intro.md rename to sonic-mgmt/spytest/Doc/intro.md diff --git a/spytest/Doc/logo.png b/sonic-mgmt/spytest/Doc/logo.png similarity index 100% rename from spytest/Doc/logo.png rename to sonic-mgmt/spytest/Doc/logo.png diff --git a/spytest/Doc/ptf.jpg b/sonic-mgmt/spytest/Doc/ptf.jpg similarity index 100% rename from spytest/Doc/ptf.jpg rename to sonic-mgmt/spytest/Doc/ptf.jpg diff --git a/spytest/Doc/scapy.gif b/sonic-mgmt/spytest/Doc/scapy.gif similarity index 100% rename from spytest/Doc/scapy.gif rename to sonic-mgmt/spytest/Doc/scapy.gif diff --git a/spytest/Doc/tgen.jpg b/sonic-mgmt/spytest/Doc/tgen.jpg similarity index 100% rename from spytest/Doc/tgen.jpg rename to sonic-mgmt/spytest/Doc/tgen.jpg diff --git a/spytest/Doc/topo.png b/sonic-mgmt/spytest/Doc/topo.png similarity index 100% rename from spytest/Doc/topo.png rename to sonic-mgmt/spytest/Doc/topo.png diff --git a/spytest/Doc/vsnet.md b/sonic-mgmt/spytest/Doc/vsnet.md similarity index 100% rename from spytest/Doc/vsnet.md rename to sonic-mgmt/spytest/Doc/vsnet.md diff --git a/spytest/Doc/vsnet.png b/sonic-mgmt/spytest/Doc/vsnet.png similarity index 100% rename from spytest/Doc/vsnet.png rename to sonic-mgmt/spytest/Doc/vsnet.png diff --git a/spytest/README.md b/sonic-mgmt/spytest/README.md similarity index 100% rename from spytest/README.md rename to sonic-mgmt/spytest/README.md diff --git a/spytest/ansible/ansible.cfg b/sonic-mgmt/spytest/ansible/ansible.cfg similarity index 100% rename from spytest/ansible/ansible.cfg rename to sonic-mgmt/spytest/ansible/ansible.cfg diff --git a/spytest/ansible/ping.yml b/sonic-mgmt/spytest/ansible/ping.yml similarity index 100% rename from spytest/ansible/ping.yml rename to sonic-mgmt/spytest/ansible/ping.yml diff --git a/sonic-mgmt/spytest/apis/__init__.py b/sonic-mgmt/spytest/apis/__init__.py new file mode 100644 index 00000000000..5c8293cc3f4 --- /dev/null +++ b/sonic-mgmt/spytest/apis/__init__.py @@ -0,0 +1,2 @@ +__all__ = ['common', 'routing', 'switching', 'system'] + diff --git a/spytest/apis/common/__init__.py b/sonic-mgmt/spytest/apis/common/__init__.py similarity index 100% rename from spytest/apis/common/__init__.py rename to sonic-mgmt/spytest/apis/common/__init__.py diff --git a/spytest/apis/common/asic.py b/sonic-mgmt/spytest/apis/common/asic.py similarity index 100% rename from spytest/apis/common/asic.py rename to sonic-mgmt/spytest/apis/common/asic.py diff --git a/spytest/apis/common/checks.py b/sonic-mgmt/spytest/apis/common/checks.py similarity index 100% rename from spytest/apis/common/checks.py rename to sonic-mgmt/spytest/apis/common/checks.py diff --git a/spytest/apis/common/coverage.py b/sonic-mgmt/spytest/apis/common/coverage.py similarity index 73% rename from spytest/apis/common/coverage.py rename to sonic-mgmt/spytest/apis/common/coverage.py index 2fc0a8450f9..1a46d1c4046 100755 --- a/spytest/apis/common/coverage.py +++ b/sonic-mgmt/spytest/apis/common/coverage.py @@ -263,57 +263,66 @@ def mark_set(key, index): attr_stats_row.append(row) attr_summary = ["RESULT"] attr_stats[msg]['get_coverage'] = round(attr_stats[msg]['used_get'] / attr_stats[msg]['total_get'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_get']}/{attr_stats[msg]['total_get']}({round(attr_stats[msg]['used_get']/attr_stats[msg]['total_get']*100)}%)") + #attr_summary.append(f"{attr_stats[msg]['used_get']}/{attr_stats[msg]['total_get']}({round(attr_stats[msg]['used_get']/attr_stats[msg]['total_get']*100)}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_get']/attr_stats[msg]['total_get'])*(round(attr_stats[msg]['used_get']/attr_stats[msg]['total_get']))*100)) if attr_stats[msg]['total_create'] > 0: attr_stats[msg]['create_coverage'] = round(attr_stats[msg]['used_create'] / attr_stats[msg]['total_create'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_create']}/{attr_stats[msg]['total_create']}({attr_stats[msg]['create_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_create']/attr_stats[msg]['total_create'])*attr_stats[msg]['create_coverage'])) + #attr_summary.append(f"{attr_stats[msg]['used_create']}/{attr_stats[msg]['total_create']}({attr_stats[msg]['create_coverage']}%)") else: attr_summary.append('N/A') if attr_stats[msg]['total_replace'] > 0: attr_stats[msg]['replace_coverage'] = round(attr_stats[msg]['used_replace'] / attr_stats[msg]['total_replace'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_replace']}/{attr_stats[msg]['total_replace']}({attr_stats[msg]['replace_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_replace']/attr_stats[msg]['total_replace'])*ttr_stats[msg]['replace_coverage'])) + #attr_summary.append(f"({attr_stats[msg]['used_replace']}/{attr_stats[msg]['total_replace']})*({attr_stats[msg]['replace_coverage']}%)") else: attr_summary.append('N/A') if attr_stats[msg]['total_update'] > 0: attr_stats[msg]['update_coverage'] = round(attr_stats[msg]['used_update'] / attr_stats[msg]['total_update'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_update']}/{attr_stats[msg]['total_update']}({attr_stats[msg]['update_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_update']/attr_stats[msg]['total_update'])*attr_stats[msg]['update_coverage'])) + #attr_summary.append(f"{attr_stats[msg]['used_update']}/{attr_stats[msg]['total_update']}({attr_stats[msg]['update_coverage']}%)") else: attr_summary.append('N/A') if attr_stats[msg]['total_delete'] > 0: attr_stats[msg]['delete_coverage'] = round(attr_stats[msg]['used_delete'] / attr_stats[msg]['total_delete'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_delete']}/{attr_stats[msg]['total_delete']}({attr_stats[msg]['delete_coverage']}%)") + #attr_summary.append(f"{attr_stats[msg]['used_delete']}/{attr_stats[msg]['total_delete']}({attr_stats[msg]['delete_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_delete']/attr_stats[msg]['total_delete'])*attr_stats[msg]['delete_coverage'])) else: attr_summary.append('N/A') if attr_stats[msg]['total_subscribe'] > 0: attr_stats[msg]['subscribe_coverage'] = round(attr_stats[msg]['used_subscribe'] / attr_stats[msg]['total_subscribe'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_subscribe']}/{attr_stats[msg]['total_subscribe']}({attr_stats[msg]['subscribe_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_subscribe']/attr_stats[msg]['total_subscribe'])*attr_stats[msg]['subscribe_coverage'])) + #attr_summary.append(f"{attr_stats[msg]['used_subscribe']}/{attr_stats[msg]['total_subscribe']}({attr_stats[msg]['subscribe_coverage']}%)") else: attr_summary.append('N/A') if attr_stats[msg]['total_create_payload'] > 0: attr_stats[msg]['payload_create_coverage'] = round(attr_stats[msg]['used_create_payload'] / attr_stats[msg]['total_create_payload'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_create_payload']}/{attr_stats[msg]['total_create_payload']}({attr_stats[msg]['payload_create_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_create_payload']/attr_stats[msg]['total_create_payload'])*attr_stats[msg]['payload_create_coverage'])) + #attr_summary.append(f"{attr_stats[msg]['used_create_payload']}/{attr_stats[msg]['total_create_payload']}({attr_stats[msg]['payload_create_coverage']}%)") else: attr_summary.append('N/A') if attr_stats[msg]['total_replace_payload'] > 0: attr_stats[msg]['payload_replace_coverage'] = round(attr_stats[msg]['used_replace_payload'] / attr_stats[msg]['total_replace_payload'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_replace_payload']}/{attr_stats[msg]['total_replace_payload']}({attr_stats[msg]['payload_replace_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_replace_payload']/attr_stats[msg]['total_replace_payload'])*attr_stats[msg]['payload_replace_coverage'])) + #attr_summary.append(f"{attr_stats[msg]['used_replace_payload']}/{attr_stats[msg]['total_replace_payload']}({attr_stats[msg]['payload_replace_coverage']}%)") else: attr_summary.append('N/A') if attr_stats[msg]['total_update_payload'] > 0: attr_stats[msg]['payload_update_coverage'] = round(attr_stats[msg]['used_update_payload'] / attr_stats[msg]['total_update_payload'] * 100) - attr_summary.append(f"{attr_stats[msg]['used_update_payload']}/{attr_stats[msg]['total_update_payload']}({attr_stats[msg]['payload_update_coverage']}%)") + #attr_summary.append(f"{attr_stats[msg]['used_update_payload']}/{attr_stats[msg]['total_update_payload']}({attr_stats[msg]['payload_update_coverage']}%)") + attr_summary.append("{}%".format((attr_stats[msg]['used_update_payload']/attr_stats[msg]['total_update_payload'])*attr_stats[msg]['payload_update_coverage'])) else: attr_summary.append('N/A') used_coverage = attr_stats[msg]['used_get'] + attr_stats[msg]['used_create'] + attr_stats[msg]['used_replace'] + attr_stats[msg]['used_update'] + attr_stats[msg]['used_delete'] + attr_stats[msg]['used_subscribe'] + attr_stats[msg]['used_update_payload'] + attr_stats[msg]['used_create_payload'] + attr_stats[msg]['used_replace_payload'] total_coverage = attr_stats[msg]['total_get'] + attr_stats[msg]['total_create'] + attr_stats[msg]['total_replace'] + attr_stats[msg]['total_update'] + attr_stats[msg]['total_delete'] + attr_stats[msg]['total_subscribe'] + attr_stats[msg]['total_update_payload'] + attr_stats[msg]['total_create_payload'] + attr_stats[msg]['total_replace_payload'] attr_stats[msg]["total_coverage"] = round((used_coverage / total_coverage) * 100) - attr_summary.append(f"{used_coverage}/{total_coverage}({attr_stats[msg]['total_coverage']}%)") + attr_summary.append("{}%".format(used_coverage/total_coverage*(attr_stats[msg]['total_coverage']))) attr_stats_row.append(attr_summary) - filepath = os.path.join(get_logs_path(), "message_coverage", f"{mod}_{msg_dict[msg]['name']}.html") + filepath = os.path.join(get_logs_path(), "message_coverage", "{}_{}.html".format(mod, msg_dict[msg]['name'])) utils.write_html_table2(attr_stats_header, attr_stats_row, filepath) - msg_stats_row = [f"{msg_dict[msg]['name']}", f"{len(attr_stats[msg]['used_attrs'])}/{len(attr_stats[msg]['all_attrs'])}({round(len(attr_stats[msg]['used_attrs'])/len(attr_stats[msg]['all_attrs'])*100)}%)"] + msg_stats_row = ["{}".format(mod, msg_dict[msg]['name'], msg_dict[msg]['name']), "{}".format(len(attr_stats[msg]['used_attrs'])/len(attr_stats[msg]['all_attrs'])(round(len(attr_stats[msg]['used_attrs'])/en(attr_stats[msg]['all_attrs'])*100)))] msg_stats_row.extend(get_attr_stats_row(class_stats[mod]["msg_ops"][msg])) msg_line = [] add_top_level_data(attr_stats[msg], class_stats[mod]["msg_ops"][msg]) @@ -339,17 +348,27 @@ def mark_set(key, index): used_coverage = attr_stats[msg]['used_get'] + attr_stats[msg]['used_create'] + attr_stats[msg]['used_replace'] + attr_stats[msg]['used_update'] + attr_stats[msg]['used_delete'] + attr_stats[msg]['used_subscribe'] + attr_stats[msg]['used_create_payload'] + attr_stats[msg]['used_replace_payload'] + attr_stats[msg]['used_update_payload'] total_coverage = attr_stats[msg]['total_get'] + attr_stats[msg]['total_create'] + attr_stats[msg]['total_replace'] + attr_stats[msg]['total_update'] + attr_stats[msg]['total_delete'] + attr_stats[msg]['total_subscribe'] + attr_stats[msg]['total_create_payload'] + attr_stats[msg]['total_replace_payload'] + attr_stats[msg]['total_update_payload'] attr_stats[msg]["total_coverage"] = round((used_coverage / total_coverage) * 100) - - msg_line.append(f"{used_coverage}/{total_coverage}({attr_stats[msg]['total_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_get']}/{attr_stats[msg]['total_get']}({attr_stats[msg]['get_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_create']}/{attr_stats[msg]['total_create']}({attr_stats[msg]['create_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_replace']}/{attr_stats[msg]['total_replace']}({attr_stats[msg]['replace_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_update']}/{attr_stats[msg]['total_update']}({attr_stats[msg]['update_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_delete']}/{attr_stats[msg]['total_delete']}({attr_stats[msg]['delete_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_subscribe']}/{attr_stats[msg]['total_subscribe']}({attr_stats[msg]['subscribe_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_create_payload']}/{attr_stats[msg]['total_create_payload']}({attr_stats[msg]['payload_create_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_replace_payload']}/{attr_stats[msg]['total_replace_payload']}({attr_stats[msg]['payload_replace_coverage']}%)") - msg_line.append(f"{attr_stats[msg]['used_update_payload']}/{attr_stats[msg]['total_update_payload']}({attr_stats[msg]['payload_update_coverage']}%)") + #msg_line.append(f"{used_coverage}/{total_coverage}({attr_stats[msg]['total_coverage']}%)") + msg_line.append("{}%".format(used_coverage/total_coverage(attr_stats[msg]['total_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_get']}/{attr_stats[msg]['total_get']}({attr_stats[msg]['get_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_get']/attr_stats[msg]['total_get'](attr_stats[msg]['get_coverage']))) + msg_line.append("{}%".format(attr_stats[msg]['used_create']/attr_stats[msg]['total_create'](attr_stats[msg]['create_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_create']}/{attr_stats[msg]['total_create']}({attr_stats[msg]['create_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_replace']/attr_stats[msg]['total_replace'](attr_stats[msg]['replace_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_replace']}/{attr_stats[msg]['total_replace']}({attr_stats[msg]['replace_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_replace']/attr_stats[msg]['total_replace'](attr_stats[msg]['replace_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_update']}/{attr_stats[msg]['total_update']}({attr_stats[msg]['update_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_update']/attr_stats[msg]['total_update'](attr_stats[msg]['update_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_delete']}/{attr_stats[msg]['total_delete']}({attr_stats[msg]['delete_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_delete']/attr_stats[msg]['total_delete'](attr_stats[msg]['delete_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_subscribe']}/{attr_stats[msg]['total_subscribe']}({attr_stats[msg]['subscribe_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_subscribe']/attr_stats[msg]['total_subscribe'](attr_stats[msg]['subscribe_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_create_payload']}/{attr_stats[msg]['total_create_payload']}({attr_stats[msg]['payload_create_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_create_payload']/attr_stats[msg]['total_create_payload'](attr_stats[msg]['payload_create_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_replace_payload']}/{attr_stats[msg]['total_replace_payload']}({attr_stats[msg]['payload_replace_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_replace_payload']/attr_stats[msg]['total_replace_payload'](attr_stats[msg]['payload_replace_coverage']))) + #msg_line.append(f"{attr_stats[msg]['used_update_payload']}/{attr_stats[msg]['total_update_payload']}({attr_stats[msg]['payload_update_coverage']}%)") + msg_line.append("{}%".format(attr_stats[msg]['used_update_payload']/attr_stats[msg]['total_update_payload'](attr_stats[msg]['payload_update_coverage']))) msg_stats_row.extend(msg_line) msg_stats_rows.append(msg_stats_row) @@ -403,18 +422,19 @@ def mark_set(key, index): total_coverage = class_stats[mod]['total_get'] + class_stats[mod]['total_create'] + class_stats[mod]['total_replace'] + class_stats[mod]['total_update'] + class_stats[mod]['total_delete'] + class_stats[mod]['total_subscribe'] + class_stats[mod]['total_create_payload'] + class_stats[mod]['total_replace_payload'] + class_stats[mod]['total_update_payload'] class_stats[mod]["total_coverage"] = round((used_coverage / total_coverage) * 100) msg_stats_line = ["RESULT", "", "", "", "", "", "", "", "", "", ""] - msg_stats_line.append(f"{used_coverage}/{total_coverage}({class_stats[mod]['total_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_get']}/{class_stats[mod]['total_get']}({class_stats[mod]['get_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_create']}/{class_stats[mod]['total_create']}({class_stats[mod]['create_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_replace']}/{class_stats[mod]['total_replace']}({class_stats[mod]['replace_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_update']}/{class_stats[mod]['total_update']}({class_stats[mod]['update_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_delete']}/{class_stats[mod]['total_delete']}({class_stats[mod]['delete_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_subscribe']}/{class_stats[mod]['total_subscribe']}({class_stats[mod]['subscribe_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_create_payload']}/{class_stats[mod]['total_create_payload']}({class_stats[mod]['payload_create_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_replace_payload']}/{class_stats[mod]['total_replace_payload']}({class_stats[mod]['payload_replace_coverage']}%)") - msg_stats_line.append(f"{class_stats[mod]['used_update_payload']}/{class_stats[mod]['total_update_payload']}({class_stats[mod]['payload_update_coverage']}%)") + #msg_stats_line.append(f"{used_coverage}/{total_coverage}({class_stats[mod]['total_coverage']}%)") + msg_stats_line.append("{}%".format(used_coverage/total_coverage(class_stats[mod]['total_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_get']/class_stats[mod]['total_get'](class_stats[mod]['get_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_create']/class_stats[mod]['total_create'](class_stats[mod]['create_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_replace']/class_stats[mod]['total_replace'](class_stats[mod]['replace_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_update']/class_stats[mod]['total_update'](class_stats[mod]['update_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_delete']/class_stats[mod]['total_delete'](class_stats[mod]['delete_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_subscribe']/class_stats[mod]['total_subscribe'](class_stats[mod]['subscribe_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_create_payload']/class_stats[mod]['total_create_payload'](class_stats[mod]['payload_create_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_replace_payload']/class_stats[mod]['total_replace_payload'](class_stats[mod]['payload_replace_coverage']))) + msg_stats_line.append("{}%".format(class_stats[mod]['used_update_payload']/class_stats[mod]['total_update_payload'](class_stats[mod]['payload_update_coverage']))) msg_stats_rows.append(msg_stats_line) - filepath = os.path.join(get_logs_path(), "message_coverage", f"{mod}.html") + filepath = os.path.join(get_logs_path(), "message_coverage", "{}.html".format(mod)) utils.write_html_table2(msg_stats_header, msg_stats_rows, filepath) if not consolidated: @@ -431,18 +451,19 @@ def mark_set(key, index): used_coverage = class_stats[mod]['used_get'] + class_stats[mod]['used_create'] + class_stats[mod]['used_replace'] + class_stats[mod]['used_update'] + class_stats[mod]['used_delete'] + class_stats[mod]['used_subscribe'] + class_stats[mod]['used_create_payload'] + class_stats[mod]['used_replace_payload'] + class_stats[mod]['used_update_payload'] total_coverage = class_stats[mod]['total_get'] + class_stats[mod]['total_create'] + class_stats[mod]['total_replace'] + class_stats[mod]['total_update'] + class_stats[mod]['total_delete'] + class_stats[mod]['total_subscribe'] + class_stats[mod]['total_create_payload'] + class_stats[mod]['total_replace_payload'] + class_stats[mod]['total_update_payload'] mod_stats_line = [] - mod_stats_line.extend([f"{mod}"]) - mod_stats_line.extend([f"{used_coverage}/{total_coverage}({class_stats[mod]['total_coverage']}%)"]) - mod_stats_line.extend([f"{len(class_stats[mod]['used_classes'])}/{len(class_stats[mod]['all_classes'])}({round(len(class_stats[mod]['used_classes'])/len(class_stats[mod]['all_classes'])*100)}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_get']}/{class_stats[mod]['total_get']}({class_stats[mod]['get_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_create']}/{class_stats[mod]['total_create']}({class_stats[mod]['create_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_replace']}/{class_stats[mod]['total_replace']}({class_stats[mod]['replace_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_update']}/{class_stats[mod]['total_update']}({class_stats[mod]['update_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_delete']}/{class_stats[mod]['total_delete']}({class_stats[mod]['delete_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_subscribe']}/{class_stats[mod]['total_subscribe']}({class_stats[mod]['subscribe_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_create_payload']}/{class_stats[mod]['total_create_payload']}({class_stats[mod]['payload_create_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_replace_payload']}/{class_stats[mod]['total_replace_payload']}({class_stats[mod]['payload_replace_coverage']}%)"]) - mod_stats_line.extend([f"{class_stats[mod]['used_update_payload']}/{class_stats[mod]['total_update_payload']}({class_stats[mod]['payload_update_coverage']}%)"]) + mod_stats_line.extend(["{}".format(mod)]) + #mod_stats_line.extend([f"{mod}"]) + mod_stats_line.extend(["{}%".format(used_coverage/total_coverage(class_stats[mod]['total_coverage']))]) + mod_stats_line.extend(["{}%".format(len(class_stats[mod]['used_classes'])/len(class_stats[mod]['all_classes'])(round(len(class_stats[mod]['used_classes'])/len(class_stats[mod]['all_classes'])*100)))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_get']/class_stats[mod]['total_get'](class_stats[mod]['get_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_create']/class_stats[mod]['total_create'](class_stats[mod]['create_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_replace']/class_stats[mod]['total_replace'](class_stats[mod]['replace_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_update']/class_stats[mod]['total_update'](class_stats[mod]['update_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_delete']/class_stats[mod]['total_delete'](class_stats[mod]['delete_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_subscribe']/class_stats[mod]['total_subscribe'](class_stats[mod]['subscribe_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_create_payload']/class_stats[mod]['total_create_payload'](class_stats[mod]['payload_create_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_replace_payload']/class_stats[mod]['total_replace_payload'](class_stats[mod]['payload_replace_coverage']))]) + mod_stats_line.extend(["{}%".format(class_stats[mod]['used_update_payload']/class_stats[mod]['total_update_payload'](class_stats[mod]['payload_update_coverage']))]) mod_stats_rows.append(mod_stats_line) colors.append('yellow') @@ -499,19 +520,19 @@ def mark_set(key, index): used_coverage = stats['used_get'] + stats['used_create'] + stats['used_replace'] + stats['used_update'] + stats['used_delete'] + stats['used_subscribe'] + stats['used_create_payload'] + stats['used_replace_payload'] + stats['used_update_payload'] total_coverage = stats['total_get'] + stats['total_create'] + stats['total_replace'] + stats['total_update'] + stats['total_delete'] + stats['total_subscribe'] + stats['total_create_payload'] + stats['total_replace_payload'] + stats['total_update_payload'] stats["total_coverage"] = round((used_coverage / total_coverage) * 100) - stats_line = [f"{len(stats['used_mods'])}/{len(stats['all_mods'])}({round(len(stats['used_mods'])/len(stats['all_mods'])*100)}%)"] + stats_line = ["{}%".format(len(stats['used_mods'])/len(stats['all_mods'])(round(len(stats['used_mods'])/len(stats['all_mods'])*100)))] colors.append('yellow') - stats_line.extend([f"{used_coverage}/{total_coverage}({stats['total_coverage']}%)"]) - stats_line.extend([f"{stats['used_msg']}/{stats['total_msg']}({stats['msg_coverage']}%)"]) - stats_line.extend([f"{stats['used_get']}/{stats['total_get']}({stats['get_coverage']}%)"]) - stats_line.extend([f"{stats['used_create']}/{stats['total_create']}({stats['create_coverage']}%)"]) - stats_line.extend([f"{stats['used_replace']}/{stats['total_replace']}({stats['replace_coverage']}%)"]) - stats_line.extend([f"{stats['used_update']}/{stats['total_update']}({stats['update_coverage']}%)"]) - stats_line.extend([f"{stats['used_delete']}/{stats['total_delete']}({stats['delete_coverage']}%)"]) - stats_line.extend([f"{stats['used_subscribe']}/{stats['total_subscribe']}({stats['subscribe_coverage']}%)"]) - stats_line.extend([f"{stats['used_create_payload']}/{stats['total_create_payload']}({stats['payload_create_coverage']}%)"]) - stats_line.extend([f"{stats['used_replace_payload']}/{stats['total_replace_payload']}({stats['payload_replace_coverage']}%)"]) - stats_line.extend([f"{stats['used_update_payload']}/{stats['total_update_payload']}({stats['payload_update_coverage']}%)"]) + stats_line.extend(["{}%".format(used_coverage/total_coverage(stats['total_coverage']))]) + stats_line.extend(["{}%".format(stats['used_msg']/stats['total_msg'](stats['msg_coverage']))]) + stats_line.extend(["{}%".format(stats['used_get']/stats['total_get'](stats['get_coverage']))]) + stats_line.extend(["{}%".format(stats['used_create']/stats['total_create'](stats['create_coverage']))]) + stats_line.extend(["{}%".format(stats['used_replace']/stats['total_replace'](stats['replace_coverage']))]) + stats_line.extend(["{}%".format(stats['used_update']/stats['total_update'](stats['update_coverage']))]) + stats_line.extend(["{}%".format(stats['used_delete']/stats['total_delete'](stats['delete_coverage']))]) + stats_line.extend(["{}%".format(stats['used_subscribe']/stats['total_subscribe'](stats['subscribe_coverage']))]) + stats_line.extend(["{}%".format(stats['used_create_payload']/stats['total_create_payload'](stats['payload_create_coverage']))]) + stats_line.extend(["{}%".format(stats['used_replace_payload']/stats['total_replace_payload'](stats['payload_replace_coverage']))]) + stats_line.extend(["{}%".format(stats['used_update_payload']/stats['total_update_payload'](stats['payload_update_coverage']))]) mod_stats_rows.append(stats_line) filepath = os.path.join(get_logs_path(), "message_coverage", "index.html") utils.write_html_table2(mod_stats_header, mod_stats_rows, filepath, colors=colors, color_col="Total Coverage") diff --git a/spytest/apis/common/hooks.py b/sonic-mgmt/spytest/apis/common/hooks.py similarity index 98% rename from spytest/apis/common/hooks.py rename to sonic-mgmt/spytest/apis/common/hooks.py index b3f3903faf9..0ddf9de4e71 100755 --- a/spytest/apis/common/hooks.py +++ b/sonic-mgmt/spytest/apis/common/hooks.py @@ -1,5 +1,5 @@ from spytest import st, env - +from apis.system import logging class Hooks(object): @@ -101,8 +101,11 @@ def verify_topology(self, check_type, threads=True, skip_tgen=False): def set_port_defaults(self, dut, breakout, speed): return self._impl(dut).set_port_defaults(dut, breakout, speed) + def sonic_clear_logging(self, dut): + logging.sonic_clear(dut) + def clear_logging(self, dut, **kwargs): - return self._impl(dut).clear_logging(dut, **kwargs) + logging.sonic_clear(dut) def fetch_syslogs(self, dut, severity=None, since=None): return self._impl(dut).fetch_syslogs(dut, severity, since) diff --git a/spytest/apis/common/init.py b/sonic-mgmt/spytest/apis/common/init.py similarity index 100% rename from spytest/apis/common/init.py rename to sonic-mgmt/spytest/apis/common/init.py diff --git a/spytest/apis/common/instrument.py b/sonic-mgmt/spytest/apis/common/instrument.py similarity index 98% rename from spytest/apis/common/instrument.py rename to sonic-mgmt/spytest/apis/common/instrument.py index 39fa55da2b1..51f44124f41 100644 --- a/spytest/apis/common/instrument.py +++ b/sonic-mgmt/spytest/apis/common/instrument.py @@ -69,10 +69,9 @@ def todo(scope, *args, **kwargs): trace("{}({}) {}".format(scope, logargs(*args, **kwargs), " ".join(data))) -def change_cache(val, *args, dut=None): - for arg in args: - st.set_cache(arg, val, dut=dut) - +# def change_cache(val, *args, dut=None): +# for arg in args: +# st.set_cache(arg, val, dut=dut) def commit(phase, dut=None, clear=None): if not st.is_feature_supported("config-session"): diff --git a/spytest/apis/common/linux_hooks.py b/sonic-mgmt/spytest/apis/common/linux_hooks.py similarity index 100% rename from spytest/apis/common/linux_hooks.py rename to sonic-mgmt/spytest/apis/common/linux_hooks.py diff --git a/spytest/apis/common/linux_prompts.py b/sonic-mgmt/spytest/apis/common/linux_prompts.py similarity index 100% rename from spytest/apis/common/linux_prompts.py rename to sonic-mgmt/spytest/apis/common/linux_prompts.py diff --git a/spytest/apis/common/poe_hooks.py b/sonic-mgmt/spytest/apis/common/poe_hooks.py similarity index 100% rename from spytest/apis/common/poe_hooks.py rename to sonic-mgmt/spytest/apis/common/poe_hooks.py diff --git a/spytest/apis/common/poe_prompts.py b/sonic-mgmt/spytest/apis/common/poe_prompts.py similarity index 100% rename from spytest/apis/common/poe_prompts.py rename to sonic-mgmt/spytest/apis/common/poe_prompts.py diff --git a/spytest/apis/common/redis.py b/sonic-mgmt/spytest/apis/common/redis.py similarity index 100% rename from spytest/apis/common/redis.py rename to sonic-mgmt/spytest/apis/common/redis.py diff --git a/spytest/apis/common/sonic_config.py b/sonic-mgmt/spytest/apis/common/sonic_config.py similarity index 94% rename from spytest/apis/common/sonic_config.py rename to sonic-mgmt/spytest/apis/common/sonic_config.py index 6cb052fbd89..9e33b5ee81f 100755 --- a/spytest/apis/common/sonic_config.py +++ b/sonic-mgmt/spytest/apis/common/sonic_config.py @@ -117,16 +117,16 @@ def post_config_reload(dut): def init_default_config(dut): - from apis.qos import qos as qos_api - from apis.routing import bgp as bgp_api - from apis.system import lldp as lldp_api - from apis.system import sflow as sflow_api - from apis.routing import nat as nat_api - qos_api.init_default_config(dut) - bgp_api.init_default_config(dut) - lldp_api.init_default_config(dut) - sflow_api.init_default_config(dut) - nat_api.init_default_config(dut) + #from apis.qos import qos as qos_api + #from apis.routing import bgp as bgp_api + #from apis.system import lldp as lldp_api + #from apis.system import sflow as sflow_api + #from apis.routing import nat as nat_api + #qos_api.init_default_config(dut) + #bgp_api.init_default_config(dut) + #lldp_api.init_default_config(dut) + #sflow_api.init_default_config(dut) + #nat_api.init_default_config(dut) remove_vlan_1(dut, "base config") diff --git a/spytest/apis/common/sonic_features.py b/sonic-mgmt/spytest/apis/common/sonic_features.py similarity index 100% rename from spytest/apis/common/sonic_features.py rename to sonic-mgmt/spytest/apis/common/sonic_features.py diff --git a/spytest/apis/common/sonic_hooks.py b/sonic-mgmt/spytest/apis/common/sonic_hooks.py similarity index 86% rename from spytest/apis/common/sonic_hooks.py rename to sonic-mgmt/spytest/apis/common/sonic_hooks.py index 9acefd512ac..da23d1cee93 100755 --- a/spytest/apis/common/sonic_hooks.py +++ b/sonic-mgmt/spytest/apis/common/sonic_hooks.py @@ -13,6 +13,18 @@ from apis.switching import mac +def get_asic_from_port(port): + port = int(re.search("\d+", str(port)).group(0)) + port = port/8 + if port in range(0,12): + asic = 0 + elif port in range(12,24): + asic = 1 + else: + asic = 2 + return asic + + class SonicHooks(object): def get_vars(self, dut, phase=None): @@ -182,15 +194,90 @@ def _change_portlist(self, dut, portlist, cli_type): portlist = st.get_other_names(dut, portlist) return portlist - def shutdown(self, dut, portlist): - cli_type = st.getenv("SPYTEST_HOOKS_PORT_ADMIN_STATE_UITYPE", "click") + def is_multi_asic(self, dut): + '''Check if the dut is a multi-asic systme or not + ''' + out=self.parse_show_platform_summary(dut) + if "ASIC Count" not in out or int(out["ASIC Count"])==1: + return False + else: + return True + + def parse_show_platform_summary(self, dut): + platform_summ = st.config(dut, "show platform summary").split("\n") + if not platform_summ: + raise AssertionError('No information provided for parsing') + result={} + for line in platform_summ: + if not line: + continue + fields=line.split(":") + result[fields[0]]=fields[1] + return result + + def get_asic_namespace_list(self,dut): + if not self.is_multi_asic(dut): + raise AssertionError('This is not a multi asic system') + + out=self.parse_show_platform_summary(dut) + return ["asic"+str(i) for i in range(int(out["ASIC Count"]))] + + def get_all_interfaces_on_all_namespaces(self,dut): + '''Retrieve all interface information for all namespaces + Returns: + A dictionary: key of each namespace, value of all interface info in this namespace + ''' + + asic_namespace_list=self.get_asic_namespace_list(dut) + result={} + + for ns in asic_namespace_list: + command="show interfaces status -n "+ns + out=st.show(dut, command) + + result.update({ns: out}) + + return result + + def get_interface_list_asic_namespace(self, dut,namespace): + '''Function to retrieve list of interfaces that are associated with this namespaces + Parameters: + dut: dut from the testbed + namespace: specific namespace to obtain the list of interfaces + Returns: + Dictionary of interface info + ''' + return self.get_all_interfaces_on_all_namespaces(dut).get(namespace) + + def get_asic_instance_for_interface(self, dut, interface_name): + '''Return the asic namespace for this interface" + ''' + + ns_list=self.get_asic_namespace_list(dut) + + for ns in ns_list: + interface_list_info=self.get_interface_list_asic_namespace(dut,ns) + for interface_info in interface_list_info: + if interface_name==interface_info.get("interface"): + return ns + else: + raise AssertionError('Interface %s does not exist in any namespace'%interface_name) + + def shutdown(self, dut, portlist, **kwargs): + if self.is_multi_asic(dut): + cli_type = "vtysh-multi-asic" + else: + cli_type = st.getenv("SPYTEST_HOOKS_PORT_ADMIN_STATE_UITYPE", "click") # portlist = self._change_portlist(dut, portlist, cli_type) - port.shutdown(dut, portlist, cli_type=cli_type, ifname_type_oper=True) + port.shutdown(dut, portlist, cli_type=cli_type) - def noshutdown(self, dut, portlist): - cli_type = st.getenv("SPYTEST_HOOKS_PORT_ADMIN_STATE_UITYPE", "click") + def noshutdown(self, dut, portlist, **kwargs): + if self.is_multi_asic(dut): + cli_type = "vtysh-multi-asic" + else: + cli_type = st.getenv("SPYTEST_HOOKS_PORT_ADMIN_STATE_UITYPE", "click") # portlist = self._change_portlist(dut, portlist, cli_type) - port.noshutdown(dut, portlist, cli_type=cli_type, ifname_type_oper=True) + port.noshutdown(dut, portlist, cli_type=cli_type) def get_status(self, dut, port_csv): cli_type = st.getenv("SPYTEST_HOOKS_PORT_STATUS_UITYPE", "click") @@ -200,10 +287,9 @@ def get_interface_status(self, dut, port_csv): cli_type = st.getenv("SPYTEST_HOOKS_PORT_STATUS_UITYPE", "click") return port.get_interface_status(dut, port_csv, cli_type=cli_type) - def show_version(self, dut, **kwargs): + def show_version(self, dut): cli_type = st.getenv("SPYTEST_HOOKS_VERSION_UITYPE", "click") - kwargs.setdefault("on_cr_recover", "retry5") - return basic.show_version(dut, cli_type=cli_type, report=False, **kwargs) + return basic.show_version(dut, cli_type=cli_type) def get_system_status(self, dut, service=None, **kwargs): pending_image_load = kwargs.pop("pending_image_load", False) @@ -368,7 +454,10 @@ def get_base_prompt(self, dut, **kwargs): def get_hostname(self, dut, **kwargs): default_hostname = "sonic" - hostname_cmd = "sudo vtysh -c 'show running-config | include hostname'" + if self.is_multi_asic(dut): + hostname_cmd = "sudo vtysh -n 0 -c 'show running-config | include hostname'" + else: + hostname_cmd = "sudo vtysh -c 'show running-config | include hostname'" for _ in range(20): skip_error_check = kwargs.pop("skip_error_check", True) output = st.config(dut, hostname_cmd, skip_error_check=skip_error_check, **kwargs) diff --git a/spytest/apis/common/sonic_prompts.py b/sonic-mgmt/spytest/apis/common/sonic_prompts.py similarity index 100% rename from spytest/apis/common/sonic_prompts.py rename to sonic-mgmt/spytest/apis/common/sonic_prompts.py diff --git a/spytest/apis/common/support.py b/sonic-mgmt/spytest/apis/common/support.py similarity index 100% rename from spytest/apis/common/support.py rename to sonic-mgmt/spytest/apis/common/support.py diff --git a/spytest/apis/common/wait.py b/sonic-mgmt/spytest/apis/common/wait.py similarity index 100% rename from spytest/apis/common/wait.py rename to sonic-mgmt/spytest/apis/common/wait.py diff --git a/spytest/apis/qos/acl.py b/sonic-mgmt/spytest/apis/qos/acl.py similarity index 99% rename from spytest/apis/qos/acl.py rename to sonic-mgmt/spytest/apis/qos/acl.py index a8dd0278773..2b336c4dd18 100644 --- a/spytest/apis/qos/acl.py +++ b/sonic-mgmt/spytest/apis/qos/acl.py @@ -868,6 +868,7 @@ def delete_acl_rule(dut, acl_table_name=None, acl_type=None, acl_rule_name=None, st.community_unsupported(command, dut) delete_acl_rule_via_acl_loader(dut, acl_table_name, acl_rule) else: + command = "config acl remove table {}".format(acl_table_name) st.config(dut, command) else: st.config(dut, command) diff --git a/spytest/apis/qos/copp.py b/sonic-mgmt/spytest/apis/qos/copp.py similarity index 100% rename from spytest/apis/qos/copp.py rename to sonic-mgmt/spytest/apis/qos/copp.py diff --git a/spytest/apis/qos/cos.py b/sonic-mgmt/spytest/apis/qos/cos.py similarity index 100% rename from spytest/apis/qos/cos.py rename to sonic-mgmt/spytest/apis/qos/cos.py diff --git a/spytest/apis/qos/qos.py b/sonic-mgmt/spytest/apis/qos/qos.py similarity index 99% rename from spytest/apis/qos/qos.py rename to sonic-mgmt/spytest/apis/qos/qos.py index 9f933bdf645..41b0a75736a 100644 --- a/spytest/apis/qos/qos.py +++ b/sonic-mgmt/spytest/apis/qos/qos.py @@ -125,7 +125,7 @@ def clear_qos_queue_counters(dut): Created by: Julius /tmp/new_thermal_zone.yaml'%out3, skip_tmpl=True) + st.show(dut, 'sudo cp /tmp/new_thermal_zone.yaml /opt/cisco/etc/thermal_zone.yaml', skip_tmpl=True) + +def get_platform_content_from_pmon(dut): + """ + get platform json content from pmon container in dut + """ + out = st.show(dut, 'docker exec -it pmon cat /usr/share/sonic/platform/platform.json', skip_tmpl=True) + out1 = utils_obj.remove_last_line_from_string(out) + out2 = json.loads(out1) + thermal_data = out2['chassis']['thermals'] + temperature_cli_data = get_platform_temperature(dut) + sensor_data = [row['sensor'] for row in temperature_cli_data] + platform_json_data = [row['name'].encode('utf-8') for row in thermal_data] + #Check with Sachin for the comparison for platform.json and show platform temp output + check = all(item in sensor_data for item in platform_json_data) + return check + +def update_fan_tray_faulty_presence_in_thermalzone(dut, val): + """ + update the faulty fan check in thermal_zone.yaml + """ + st.show(dut, 'cp /opt/cisco/etc/thermal_zone.yaml /tmp/', skip_tmpl=True) + st.show(dut, 'sudo cp /opt/cisco/etc/thermal_zone.yaml /opt/cisco/', skip_tmpl=True) + out = st.show(dut, 'cat /tmp/thermal_zone.yaml', skip_tmpl=True) + out1 = utils_obj.remove_last_line_from_string(out) + out2= yaml.safe_load(out1) + #Check how to add an attribute in yaml in python + #out2[val][0]['fans'][0]['name'] ---- fan + #out2[val][0]['fans'][0]['faulty'] -- 1 + #out2[val][0]['faulty']= 1 + #out2[val][1]['name'] --- fan tray + out2[val][0]['faulty']= 1 + out3 = yaml.dump(out2) + st.show(dut, 'printf "%s" > /tmp/new_thermal_zone.yaml'%out3, skip_tmpl=True) + st.show(dut, 'sudo cp /tmp/new_thermal_zone.yaml /opt/cisco/etc/thermal_zone.yaml', skip_tmpl=True) + +def update_fan_faulty_presence_in_thermalzone(dut, val): + """ + update the faulty fan check in thermal_zone.yaml + """ + st.show(dut, 'cp /opt/cisco/etc/thermal_zone.yaml /tmp/', skip_tmpl=True) + st.show(dut, 'sudo cp /opt/cisco/etc/thermal_zone.yaml /opt/cisco/', skip_tmpl=True) + out = st.show(dut, 'cat /tmp/thermal_zone.yaml', skip_tmpl=True) + out1 = utils_obj.remove_last_line_from_string(out) + out2= yaml.safe_load(out1) + #Check how to add an attribute in yaml in python + #out2[val][0]['fans'][0]['name'] ---- fan + #out2[val][0]['fans'][0]['faulty'] -- 1 + #out2[val][0]['faulty']= 1 + #out2[val][1]['name'] --- fan tray + out2[val][0]['fans'][0]['faulty']= 1 + out2[val][0]['fans'][1]['faulty']= 1 + out2[val][1]['fans'][0]['faulty']= 1 + out3 = yaml.dump(out2) + st.show(dut, 'printf "%s" > /tmp/new_thermal_zone.yaml'%out3, skip_tmpl=True) + st.show(dut, 'sudo cp /tmp/new_thermal_zone.yaml /opt/cisco/etc/thermal_zone.yaml', skip_tmpl=True) + + +def get_parsed_date_to_capture_syslog(dut): + """ + Get Parsed date to capture syslog + """ + #Start time + date_string = get_dut_date_time(dut) + if date_string is None: + raise Exception("The Parsed Date object retuned None") + if(date_string[4] == '0'): + date_string = date_string.replace('0',' ', 1) + month = date_string[7:11] + date = date_string[4:7] + hours = date_string[16:18] + mins = date_string[18:21] + if(date_string[25:27] == "PM"): + hours = str(int(hours)+12) + result_date = month + date + hours + mins + return result_date + +def get_parsed_temp_output_grep_sensor_name(dut, sensor_name): + """ + Get Parsed temp output + """ + cmd = "show platform temperature | grep {}".format(sensor_name) + temp_data_output = st.show(dut, cmd, skip_tmpl=True) + if temp_data_output is None: + raise Exception("show plat temp for the sensor name {} output is not found ".format(sensor_name)) + parsed_sensor_data = [s.strip().encode() for s in temp_data_output.split(' ') if s] + return parsed_sensor_data + +def capture_syslog_between_timestamps(dut, start_point, end_point, filterlog): + """ + Get the expected match syslog to the filterlog + """ + cmd = "sudo sed -n '/{}/,/{}/p' /var/log/syslog*|grep \"{}\"".format(start_point, end_point, filterlog) + syslog_data_output = st.show(dut, cmd, skip_tmpl=True) + length = syslog_data_output.count('\n') + if length >= 1: + return True + return False + +def get_watchdog_status(dut): + """ + Get the status of watchdog + """ + output = st.show(dut, "sudo watchdogutil status") + if len(output) <= 0: + return None + return output + +def change_watchdog_status_to_arm(dut): + """ + Get the status of watchdog + """ + output = st.show(dut, "sudo watchdogutil arm") + if len(output) <= 0: + return None + return output + +def get_uptime(dut): + """ + Get the dut uptime + """ + output = st.show(dut, "show uptime") + if len(output) <= 0: + return None + return output + +def get_system_led_status(dut): + """ + Author: Deekshitha Kankanala + Get the show system health summary + """ + output = st.show(dut, "sudo show system-health summary") + if len(output) <= 0: + return None + return output def list_file(dut, path, **kwargs): """ diff --git a/spytest/apis/system/boot_up.py b/sonic-mgmt/spytest/apis/system/boot_up.py similarity index 100% rename from spytest/apis/system/boot_up.py rename to sonic-mgmt/spytest/apis/system/boot_up.py diff --git a/spytest/apis/system/box_services.py b/sonic-mgmt/spytest/apis/system/box_services.py similarity index 100% rename from spytest/apis/system/box_services.py rename to sonic-mgmt/spytest/apis/system/box_services.py diff --git a/spytest/apis/system/config_qos.py b/sonic-mgmt/spytest/apis/system/config_qos.py similarity index 100% rename from spytest/apis/system/config_qos.py rename to sonic-mgmt/spytest/apis/system/config_qos.py diff --git a/spytest/apis/system/config_replace.py b/sonic-mgmt/spytest/apis/system/config_replace.py similarity index 100% rename from spytest/apis/system/config_replace.py rename to sonic-mgmt/spytest/apis/system/config_replace.py diff --git a/spytest/apis/system/config_session.py b/sonic-mgmt/spytest/apis/system/config_session.py similarity index 100% rename from spytest/apis/system/config_session.py rename to sonic-mgmt/spytest/apis/system/config_session.py diff --git a/spytest/apis/system/connection.py b/sonic-mgmt/spytest/apis/system/connection.py similarity index 100% rename from spytest/apis/system/connection.py rename to sonic-mgmt/spytest/apis/system/connection.py diff --git a/spytest/apis/system/crm.py b/sonic-mgmt/spytest/apis/system/crm.py similarity index 100% rename from spytest/apis/system/crm.py rename to sonic-mgmt/spytest/apis/system/crm.py diff --git a/spytest/apis/system/gnmi.py b/sonic-mgmt/spytest/apis/system/gnmi.py similarity index 100% rename from spytest/apis/system/gnmi.py rename to sonic-mgmt/spytest/apis/system/gnmi.py diff --git a/spytest/apis/system/i2c.py b/sonic-mgmt/spytest/apis/system/i2c.py similarity index 100% rename from spytest/apis/system/i2c.py rename to sonic-mgmt/spytest/apis/system/i2c.py diff --git a/spytest/apis/system/in_memory.py b/sonic-mgmt/spytest/apis/system/in_memory.py similarity index 100% rename from spytest/apis/system/in_memory.py rename to sonic-mgmt/spytest/apis/system/in_memory.py diff --git a/spytest/apis/system/interface.py b/sonic-mgmt/spytest/apis/system/interface.py similarity index 99% rename from spytest/apis/system/interface.py rename to sonic-mgmt/spytest/apis/system/interface.py index de1f8a0e3b0..e550d217da3 100644 --- a/spytest/apis/system/interface.py +++ b/sonic-mgmt/spytest/apis/system/interface.py @@ -828,7 +828,7 @@ def delete_ip_on_interface_linux(dut, interface_name, ip_address): st.config(dut, command) -def show_queue_counters(dut, interface_name, queue=None, cli_type=''): +def show_queue_counters(dut, interface_name, queue=None, cli_type='click'): """ Show Queue counters Author : Prudvi Mangadu (prudvi.mangadu@broadcom.com) @@ -873,11 +873,11 @@ def clear_queue_counters(dut, interfaces_list=[], cli_type=''): if cli_type == 'click': interface_li = make_list(interfaces_list) if not interface_li: - command = "show queue counters -c" + command = "sonic-clear queuecounters" st.show(dut, command) else: for each_port in interface_li: - command = "show queue counters {} -c".format(each_port) + command = "show queue counters {}".format(each_port) st.show(dut, command, type=cli_type) elif cli_type == 'klish': if interfaces_list: @@ -890,7 +890,7 @@ def clear_queue_counters(dut, interfaces_list=[], cli_type=''): command = 'clear queue counters interface {} {}'.format(intf_details['type'], intf_details['number']) st.config(dut, command, type=cli_type) else: - command = 'clear queue counters' + command = 'sonic-clear queuecounters' st.config(dut, command, type=cli_type) else: st.log("Unsupported CLI TYPE {}".format(cli_type)) diff --git a/spytest/apis/system/lldp.py b/sonic-mgmt/spytest/apis/system/lldp.py similarity index 100% rename from spytest/apis/system/lldp.py rename to sonic-mgmt/spytest/apis/system/lldp.py diff --git a/spytest/apis/system/logging.py b/sonic-mgmt/spytest/apis/system/logging.py similarity index 100% rename from spytest/apis/system/logging.py rename to sonic-mgmt/spytest/apis/system/logging.py diff --git a/spytest/apis/system/management_vrf.py b/sonic-mgmt/spytest/apis/system/management_vrf.py similarity index 100% rename from spytest/apis/system/management_vrf.py rename to sonic-mgmt/spytest/apis/system/management_vrf.py diff --git a/spytest/apis/system/ntp.py b/sonic-mgmt/spytest/apis/system/ntp.py similarity index 100% rename from spytest/apis/system/ntp.py rename to sonic-mgmt/spytest/apis/system/ntp.py diff --git a/spytest/apis/system/port.py b/sonic-mgmt/spytest/apis/system/port.py similarity index 93% rename from spytest/apis/system/port.py rename to sonic-mgmt/spytest/apis/system/port.py index cbdaeb5e4a1..0096efcb5df 100644 --- a/spytest/apis/system/port.py +++ b/sonic-mgmt/spytest/apis/system/port.py @@ -30,6 +30,19 @@ def force_cli_type_to_klish(cli_type, *more): return cli_type + +def get_asic_from_port(port): + port = int(re.search("\d+", str(port)).group(0)) + port = port/8 + if port in range(0,12): + asic = 0 + elif port in range(12,24): + asic = 1 + else: + asic = 2 + return asic + + def _has_intf_range(dut): if not st.is_feature_supported("intf-range", dut): return False @@ -89,6 +102,14 @@ def set_status(dut, portlist, status, **kwargs): st.log('test_step_failed: Setting of interface state {}'.format(result.data)) return False return True + elif cli_type == "vtysh-multi-asic": + for port in portlist: + try: + asic = get_asic_from_port(port) + st.config(dut, "config interface -n asic{} {} {}".format(str(asic), status, port)) + except ValueError: + st.warn("Failed to execute {} command - try alternative".format(status)) + st.config(dut, "config interface {} {}".format(port, status)) elif cli_type == "click": port_hash_list = segregate_intf_list_type(intf=portlist, range_format=False) portlist = port_hash_list['intf_list_all'] @@ -146,14 +167,31 @@ def set_status(dut, portlist, status, **kwargs): return False return "" +def shutdown(dut, portlist, cli_type='', **kwargs): + """ + :param dut: + :type dut: + :param portlist: + :type portlist: + :return: + :rtype: + """ + asic = kwargs.get("asic", 0) + cli_type = st.get_ui_type(dut, cli_type=cli_type) + set_status(dut, portlist, "shutdown", cli_type=cli_type, asic = asic) -def shutdown(dut, portlist, **kwargs): - set_status(dut, portlist, "shutdown", **kwargs) - - -def noshutdown(dut, portlist, **kwargs): - set_status(dut, portlist, "startup", **kwargs) - +def noshutdown(dut, portlist, cli_type='', **kwargs): + """ + :param dut: + :type dut: + :param portlist: + :type portlist: + :return: + :rtype: + """ + asic = kwargs.get("asic", 0) + cli_type = st.get_ui_type(dut, cli_type=cli_type) + set_status(dut, portlist, "startup", cli_type=cli_type, asic = asic) def get_status(dut, port=None, cli_type=''): """ @@ -411,7 +449,7 @@ def clear_interface_counters(dut, **kwargs): command = "clear counters interface {}".format(interface_val) st.config(dut, command, type=cli_type, confirm=confirm, conf=False, skip_error_check=True) elif cli_type == "click": - command = "show interfaces counters -c" + command = "sonic-clear counters" if not st.is_feature_supported("show-interfaces-counters-clear-command", dut): st.community_unsupported(command, dut) return st.config(dut, "sonic-clear counters") @@ -430,6 +468,45 @@ def clear_interface_counters(dut, **kwargs): return True +def clear_rif_interface_counters(dut, **kwargs): + cli_type = st.get_ui_type(dut, **kwargs) + interface_name = kwargs.get("interface_name", "") + interface_type = kwargs.get("interface_type", "all") + if cli_type == "klish": + confirm = kwargs.get("confirm") if kwargs.get("confirm") else "y" + if interface_type != "all": + interface_type = get_interface_number_from_name(str(interface_name)) + if interface_type["type"] and interface_type["number"]: + interface_val = "{} {}".format(interface_type.get("type"), interface_type.get("number")) + else: + interface_val = "" + else: + interface_val = "all" + if not interface_val: + st.log("Invalid interface type") + return False + command = "clear counters interface {}".format(interface_val) + st.config(dut, command, type=cli_type, confirm=confirm, conf=False, skip_error_check=True) + elif cli_type == "click": + command = "sonic-clear rifcounters" + if not st.is_feature_supported("show-interfaces-counters-clear-command", dut): + st.community_unsupported(command, dut) + return st.config(dut, "sonic-clear rifcounters") + return st.show(dut, command) + elif cli_type in ["rest-patch", "rest-put"]: + rest_urls = st.get_datastore(dut, "rest_urls") + url = rest_urls['clear_interface_counters'] + clear_type = 'all' if interface_type == 'all' else interface_name + clear_counters = {"sonic-interface:input": {"interface-param": clear_type}} + if not config_rest(dut, http_method='post', rest_url=url, json_data=clear_counters): + st.error("Failed to clear interface counters") + return False + else: + st.log("Unsupported CLI TYPE {}".format(cli_type)) + return False + return True + + def get_interface_counters(dut, port, *counter, **kwargs): cli_type = kwargs.pop('cli_type', st.get_ui_type(dut, **kwargs)) output = get_interface_counters_all(dut, port=port, cli_type=cli_type) @@ -1238,4 +1315,4 @@ def get_interface_breakout_resource(dut, **kwargs): return entries else: st.error("show interface breakout resources didn't yield any expected output, please check") - return False + return False \ No newline at end of file diff --git a/spytest/apis/system/port_rest.py b/sonic-mgmt/spytest/apis/system/port_rest.py similarity index 100% rename from spytest/apis/system/port_rest.py rename to sonic-mgmt/spytest/apis/system/port_rest.py diff --git a/spytest/apis/system/reboot.py b/sonic-mgmt/spytest/apis/system/reboot.py similarity index 100% rename from spytest/apis/system/reboot.py rename to sonic-mgmt/spytest/apis/system/reboot.py diff --git a/spytest/apis/system/rest.py b/sonic-mgmt/spytest/apis/system/rest.py similarity index 100% rename from spytest/apis/system/rest.py rename to sonic-mgmt/spytest/apis/system/rest.py diff --git a/spytest/apis/system/sflow.py b/sonic-mgmt/spytest/apis/system/sflow.py similarity index 100% rename from spytest/apis/system/sflow.py rename to sonic-mgmt/spytest/apis/system/sflow.py diff --git a/spytest/apis/system/snapshot.py b/sonic-mgmt/spytest/apis/system/snapshot.py similarity index 100% rename from spytest/apis/system/snapshot.py rename to sonic-mgmt/spytest/apis/system/snapshot.py diff --git a/spytest/apis/system/snmp.py b/sonic-mgmt/spytest/apis/system/snmp.py similarity index 99% rename from spytest/apis/system/snmp.py rename to sonic-mgmt/spytest/apis/system/snmp.py index 729ad1bc34d..3ac92bf4310 100644 --- a/spytest/apis/system/snmp.py +++ b/sonic-mgmt/spytest/apis/system/snmp.py @@ -2,6 +2,7 @@ # Author : Prudvi Mangadu (prudvi.mangadu@broadcom.com) import re +import subprocess from spytest import st @@ -10,7 +11,7 @@ import apis.routing.ip as ip_api from utilities.common import filter_and_select, to_string, remove_last_line_from_string -from utilities.common import process_popen, get_query_params, make_list +from utilities.common import get_query_params, make_list import utilities.utils as utils_obj try: @@ -232,7 +233,8 @@ def get_snmp_operation(**kwargs): return False if version in ["1", "2"]: - pprocess = process_popen(snmp_command) + pprocess = subprocess.Popen(snmp_command, shell=True, encoding='UTF-8', stdout=subprocess.PIPE, + stderr=subprocess.PIPE) stdout, stderr = pprocess.communicate() st.log("SNMPv{} output: {}".format(version, stdout)) if pprocess.poll() is not None: @@ -373,7 +375,8 @@ def walk_snmp_operation(**kwargs): return False if not skip_error: if version in ["1", "2", "3"]: - pprocess = process_popen(snmp_command) + pprocess = subprocess.Popen(snmp_command, shell=True, encoding='UTF-8', stdout=subprocess.PIPE, + stderr=subprocess.PIPE) result = [] while True: output = pprocess.stdout.readline() @@ -1581,7 +1584,8 @@ def get_auth_priv_keys(**kwargs): if st.is_dry_run(): return False - pprocess1 = process_popen(command) + pprocess1 = subprocess.Popen(command, shell=True, encoding='UTF-8', stdout=subprocess.PIPE, + stderr=subprocess.PIPE) stdout, _ = pprocess1.communicate() st.log("Auth Priv Keys output: {}".format(stdout)) if pprocess1.returncode == 0: @@ -1677,7 +1681,8 @@ def set_snmp_operation(**kwargs): if st.is_dry_run(): return False - pprocess = process_popen(snmp_command) + pprocess = subprocess.Popen(snmp_command, shell=True, encoding='UTF-8', stdout=subprocess.PIPE, + stderr=subprocess.PIPE) stdout, stderr = pprocess.communicate() st.log("SNMP stdout: {}".format(stdout)) if pprocess.poll() is not None: diff --git a/spytest/apis/system/ssh.py b/sonic-mgmt/spytest/apis/system/ssh.py similarity index 100% rename from spytest/apis/system/ssh.py rename to sonic-mgmt/spytest/apis/system/ssh.py diff --git a/spytest/apis/system/storm_control.py b/sonic-mgmt/spytest/apis/system/storm_control.py similarity index 100% rename from spytest/apis/system/storm_control.py rename to sonic-mgmt/spytest/apis/system/storm_control.py diff --git a/spytest/apis/system/switch_configuration.py b/sonic-mgmt/spytest/apis/system/switch_configuration.py similarity index 100% rename from spytest/apis/system/switch_configuration.py rename to sonic-mgmt/spytest/apis/system/switch_configuration.py diff --git a/spytest/apis/system/system_server.py b/sonic-mgmt/spytest/apis/system/system_server.py similarity index 100% rename from spytest/apis/system/system_server.py rename to sonic-mgmt/spytest/apis/system/system_server.py diff --git a/spytest/apis/system/threshold.py b/sonic-mgmt/spytest/apis/system/threshold.py similarity index 100% rename from spytest/apis/system/threshold.py rename to sonic-mgmt/spytest/apis/system/threshold.py diff --git a/spytest/apis/system/ztp.py b/sonic-mgmt/spytest/apis/system/ztp.py similarity index 100% rename from spytest/apis/system/ztp.py rename to sonic-mgmt/spytest/apis/system/ztp.py diff --git a/spytest/apis/yang/utils/query_param.py b/sonic-mgmt/spytest/apis/yang/utils/query_param.py similarity index 100% rename from spytest/apis/yang/utils/query_param.py rename to sonic-mgmt/spytest/apis/yang/utils/query_param.py diff --git a/sonic-mgmt/spytest/bgp_tc_list b/sonic-mgmt/spytest/bgp_tc_list new file mode 100644 index 00000000000..98e8f87e14c --- /dev/null +++ b/sonic-mgmt/spytest/bgp_tc_list @@ -0,0 +1,29 @@ +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_peer_traffic_check +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_graceful_restart_and_aware_routers +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_ipv4_no_route_aggregation_for_exact_prefix_match +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_ipv6_route_aggregation_with_as_set +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_rmap +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_clear +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_v6_link_local_bgp +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_ipv4_route_aggregation_atomic_aggregate_without_as_set +#routing/BGP/test_bgp.py::TestBGPRif::test_bgp_route_aggregation_4byteASN +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_v4_dyn_nbr +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_v6_dyn_nbr +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_v4_max_dyn_nbr +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_rmap_out +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_ebgp_confed +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_redistribute_connected_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_redistribute_static_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_distribute_list_in_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_filter_list_in_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_prefix_list_out_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_default_originate_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_route_map_in_ipv4 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_redistribute_connected_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_redistribute_static_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_distribute_list_in_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_filter_list_in_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_prefix_list_out_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_filter_list_out_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_route_map_in_ipv6 +routing/BGP/test_bgp.py::TestBGPIPvxRouteAdvertisementFilter::test_bgp_ebgp6_traffic \ No newline at end of file diff --git a/spytest/bin/clean.sh b/sonic-mgmt/spytest/bin/clean.sh similarity index 100% rename from spytest/bin/clean.sh rename to sonic-mgmt/spytest/bin/clean.sh diff --git a/spytest/bin/env b/sonic-mgmt/spytest/bin/env similarity index 100% rename from spytest/bin/env rename to sonic-mgmt/spytest/bin/env diff --git a/spytest/bin/lint.sh b/sonic-mgmt/spytest/bin/lint.sh similarity index 100% rename from spytest/bin/lint.sh rename to sonic-mgmt/spytest/bin/lint.sh diff --git a/spytest/bin/python b/sonic-mgmt/spytest/bin/python similarity index 100% rename from spytest/bin/python rename to sonic-mgmt/spytest/bin/python diff --git a/spytest/bin/python2 b/sonic-mgmt/spytest/bin/python2 similarity index 100% rename from spytest/bin/python2 rename to sonic-mgmt/spytest/bin/python2 diff --git a/spytest/bin/python3 b/sonic-mgmt/spytest/bin/python3 similarity index 100% rename from spytest/bin/python3 rename to sonic-mgmt/spytest/bin/python3 diff --git a/spytest/bin/spytest b/sonic-mgmt/spytest/bin/spytest similarity index 88% rename from spytest/bin/spytest rename to sonic-mgmt/spytest/bin/spytest index f9d92cbc9e3..815faada015 100755 --- a/spytest/bin/spytest +++ b/sonic-mgmt/spytest/bin/spytest @@ -12,6 +12,8 @@ root = os.path.abspath(root) tests = os.path.join(root, "tests") sys.path.append(os.path.join(root)) sys.path.append(os.path.join(root, "apis")) +sys.path.append(os.path.join(root, "tests/cisco/tortuga/common")) +sys.path.append(os.path.join(root, "tests/cisco/tortuga/l2_switching")) os.environ["SPYTEST_USER_ROOT"] = os.path.abspath(".") os.environ["PYTHONDONTWRITEBYTECODE"] = "1" diff --git a/spytest/bin/spytest2 b/sonic-mgmt/spytest/bin/spytest2 similarity index 100% rename from spytest/bin/spytest2 rename to sonic-mgmt/spytest/bin/spytest2 diff --git a/spytest/bin/spytest3 b/sonic-mgmt/spytest/bin/spytest3 similarity index 100% rename from spytest/bin/spytest3 rename to sonic-mgmt/spytest/bin/spytest3 diff --git a/spytest/bin/sshpass b/sonic-mgmt/spytest/bin/sshpass similarity index 100% rename from spytest/bin/sshpass rename to sonic-mgmt/spytest/bin/sshpass diff --git a/spytest/bin/tgen_folders.txt b/sonic-mgmt/spytest/bin/tgen_folders.txt similarity index 100% rename from spytest/bin/tgen_folders.txt rename to sonic-mgmt/spytest/bin/tgen_folders.txt diff --git a/spytest/bin/tools_install.sh b/sonic-mgmt/spytest/bin/tools_install.sh similarity index 100% rename from spytest/bin/tools_install.sh rename to sonic-mgmt/spytest/bin/tools_install.sh diff --git a/spytest/bin/ubuntu18_deps.sh b/sonic-mgmt/spytest/bin/ubuntu18_deps.sh similarity index 100% rename from spytest/bin/ubuntu18_deps.sh rename to sonic-mgmt/spytest/bin/ubuntu18_deps.sh diff --git a/spytest/bin/upgrade_requirements.sh b/sonic-mgmt/spytest/bin/upgrade_requirements.sh similarity index 100% rename from spytest/bin/upgrade_requirements.sh rename to sonic-mgmt/spytest/bin/upgrade_requirements.sh diff --git a/sonic-mgmt/spytest/build.txt b/sonic-mgmt/spytest/build.txt new file mode 100644 index 00000000000..c8542045af6 --- /dev/null +++ b/sonic-mgmt/spytest/build.txt @@ -0,0 +1,19 @@ +build: SONiC.azure_cisco_tortuga_202305.10652-dirty-20240414.022304 +uitype: click +Execution Started: 2024-07-23 23:20:13.973760 +Execution Completed: 2024-07-23 23:43:20.042716 +Execution Time: 0:23:07 +DailyRun: 0 +Python: 2.7.17 +Combined Report: 0 +GCOV Run: 0 +Image Build Path: +EMail: None +EMailSubject: Run Report +Dry Run: 0 +GCOV_POST_RUN_KPI_UPDATE: 0 +GCOV_MERGE_HTML: 0 +Pass Rate: 100.00% +Suite: +Platforms Not Covered: +Chips Not Covered: diff --git a/spytest/containers/README.md b/sonic-mgmt/spytest/containers/README.md similarity index 100% rename from spytest/containers/README.md rename to sonic-mgmt/spytest/containers/README.md diff --git a/spytest/containers/keysight-ubuntu18/Dockerfile b/sonic-mgmt/spytest/containers/keysight-ubuntu18/Dockerfile similarity index 100% rename from spytest/containers/keysight-ubuntu18/Dockerfile rename to sonic-mgmt/spytest/containers/keysight-ubuntu18/Dockerfile diff --git a/spytest/containers/keysight-ubuntu18/spytest.txt b/sonic-mgmt/spytest/containers/keysight-ubuntu18/spytest.txt similarity index 100% rename from spytest/containers/keysight-ubuntu18/spytest.txt rename to sonic-mgmt/spytest/containers/keysight-ubuntu18/spytest.txt diff --git a/spytest/datastore/constants/accton-as4630-54pe.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as4630-54pe.yaml similarity index 100% rename from spytest/datastore/constants/accton-as4630-54pe.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as4630-54pe.yaml diff --git a/spytest/datastore/constants/accton-as5712-54x.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as5712-54x.yaml similarity index 100% rename from spytest/datastore/constants/accton-as5712-54x.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as5712-54x.yaml diff --git a/spytest/datastore/constants/accton-as5835-54x.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as5835-54x.yaml similarity index 100% rename from spytest/datastore/constants/accton-as5835-54x.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as5835-54x.yaml diff --git a/spytest/datastore/constants/accton-as7326-56x.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as7326-56x.yaml similarity index 100% rename from spytest/datastore/constants/accton-as7326-56x.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as7326-56x.yaml diff --git a/spytest/datastore/constants/accton-as7712-32x.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as7712-32x.yaml similarity index 100% rename from spytest/datastore/constants/accton-as7712-32x.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as7712-32x.yaml diff --git a/spytest/datastore/constants/accton-as7726-32x.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as7726-32x.yaml similarity index 100% rename from spytest/datastore/constants/accton-as7726-32x.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as7726-32x.yaml diff --git a/spytest/datastore/constants/accton-as7816-64x.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as7816-64x.yaml similarity index 100% rename from spytest/datastore/constants/accton-as7816-64x.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as7816-64x.yaml diff --git a/spytest/datastore/constants/accton-as9716-32d.yaml b/sonic-mgmt/spytest/datastore/constants/accton-as9716-32d.yaml similarity index 100% rename from spytest/datastore/constants/accton-as9716-32d.yaml rename to sonic-mgmt/spytest/datastore/constants/accton-as9716-32d.yaml diff --git a/spytest/datastore/constants/common.yaml b/sonic-mgmt/spytest/datastore/constants/common.yaml similarity index 100% rename from spytest/datastore/constants/common.yaml rename to sonic-mgmt/spytest/datastore/constants/common.yaml diff --git a/spytest/datastore/constants/constants.yaml b/sonic-mgmt/spytest/datastore/constants/constants.yaml similarity index 100% rename from spytest/datastore/constants/constants.yaml rename to sonic-mgmt/spytest/datastore/constants/constants.yaml diff --git a/spytest/datastore/constants/dellemc-s5232f-c32.yaml b/sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-c32.yaml similarity index 100% rename from spytest/datastore/constants/dellemc-s5232f-c32.yaml rename to sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-c32.yaml diff --git a/spytest/datastore/constants/dellemc-s5232f-p-100g.yaml b/sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-p-100g.yaml similarity index 100% rename from spytest/datastore/constants/dellemc-s5232f-p-100g.yaml rename to sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-p-100g.yaml diff --git a/spytest/datastore/constants/dellemc-s5232f-p-10g.yaml b/sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-p-10g.yaml similarity index 100% rename from spytest/datastore/constants/dellemc-s5232f-p-10g.yaml rename to sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-p-10g.yaml diff --git a/spytest/datastore/constants/dellemc-s5232f-p-25g.yaml b/sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-p-25g.yaml similarity index 100% rename from spytest/datastore/constants/dellemc-s5232f-p-25g.yaml rename to sonic-mgmt/spytest/datastore/constants/dellemc-s5232f-p-25g.yaml diff --git a/spytest/datastore/constants/dellemc-z9264f-c64.yaml b/sonic-mgmt/spytest/datastore/constants/dellemc-z9264f-c64.yaml similarity index 100% rename from spytest/datastore/constants/dellemc-z9264f-c64.yaml rename to sonic-mgmt/spytest/datastore/constants/dellemc-z9264f-c64.yaml diff --git a/spytest/datastore/constants/dellemc-z9332f-o32.yaml b/sonic-mgmt/spytest/datastore/constants/dellemc-z9332f-o32.yaml similarity index 100% rename from spytest/datastore/constants/dellemc-z9332f-o32.yaml rename to sonic-mgmt/spytest/datastore/constants/dellemc-z9332f-o32.yaml diff --git a/spytest/datastore/constants/delta-ag9032v1.yaml b/sonic-mgmt/spytest/datastore/constants/delta-ag9032v1.yaml similarity index 100% rename from spytest/datastore/constants/delta-ag9032v1.yaml rename to sonic-mgmt/spytest/datastore/constants/delta-ag9032v1.yaml diff --git a/spytest/datastore/constants/quanta-ix1b-32x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix1b-32x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix1b-32x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix1b-32x.yaml diff --git a/spytest/datastore/constants/quanta-ix4-64x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix4-64x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix4-64x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix4-64x.yaml diff --git a/spytest/datastore/constants/quanta-ix7-32x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix7-32x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix7-32x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix7-32x.yaml diff --git a/spytest/datastore/constants/quanta-ix7-bwde-32x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix7-bwde-32x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix7-bwde-32x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix7-bwde-32x.yaml diff --git a/spytest/datastore/constants/quanta-ix8-56x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix8-56x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix8-56x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix8-56x.yaml diff --git a/spytest/datastore/constants/quanta-ix8a-bwde-56x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix8a-bwde-56x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix8a-bwde-56x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix8a-bwde-56x.yaml diff --git a/spytest/datastore/constants/quanta-ix9-32x.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix9-32x.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix9-32x.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix9-32x.yaml diff --git a/spytest/datastore/constants/quanta-ix9-c64o16.yaml b/sonic-mgmt/spytest/datastore/constants/quanta-ix9-c64o16.yaml similarity index 100% rename from spytest/datastore/constants/quanta-ix9-c64o16.yaml rename to sonic-mgmt/spytest/datastore/constants/quanta-ix9-c64o16.yaml diff --git a/spytest/datastore/messages/common.yaml b/sonic-mgmt/spytest/datastore/messages/common.yaml similarity index 100% rename from spytest/datastore/messages/common.yaml rename to sonic-mgmt/spytest/datastore/messages/common.yaml diff --git a/spytest/datastore/messages/debug.yaml b/sonic-mgmt/spytest/datastore/messages/debug.yaml similarity index 100% rename from spytest/datastore/messages/debug.yaml rename to sonic-mgmt/spytest/datastore/messages/debug.yaml diff --git a/spytest/datastore/messages/gearbox.yaml b/sonic-mgmt/spytest/datastore/messages/gearbox.yaml similarity index 100% rename from spytest/datastore/messages/gearbox.yaml rename to sonic-mgmt/spytest/datastore/messages/gearbox.yaml diff --git a/sonic-mgmt/spytest/datastore/messages/messages.yaml b/sonic-mgmt/spytest/datastore/messages/messages.yaml new file mode 100644 index 00000000000..01fd53b3423 --- /dev/null +++ b/sonic-mgmt/spytest/datastore/messages/messages.yaml @@ -0,0 +1,14 @@ +common: !include common.yaml +tgen: !include tgen.yaml +routing: !include routing.yaml +testbed: !include testbed.yaml +qos: !include qos.yaml +system: !include system.yaml +switching: !include switching.yaml +security: !include security.yaml +gearbox: !include gearbox.yaml +ut_snmp: !include ut_snmp.yaml +ut_kdump: !include ut_kdump.yaml + +messages: + default: [common, tgen, routing, testbed, qos, system, switching, security, gearbox, ut_snmp, ut_kdump] diff --git a/spytest/datastore/messages/qos.yaml b/sonic-mgmt/spytest/datastore/messages/qos.yaml similarity index 100% rename from spytest/datastore/messages/qos.yaml rename to sonic-mgmt/spytest/datastore/messages/qos.yaml diff --git a/spytest/datastore/messages/routing.yaml b/sonic-mgmt/spytest/datastore/messages/routing.yaml similarity index 99% rename from spytest/datastore/messages/routing.yaml rename to sonic-mgmt/spytest/datastore/messages/routing.yaml index 79cbc0c60df..a577640e292 100644 --- a/spytest/datastore/messages/routing.yaml +++ b/sonic-mgmt/spytest/datastore/messages/routing.yaml @@ -246,6 +246,8 @@ Vrf_Config_verification_failed : VRF config verification failed IP_helper_test_case_msg_status : Test case {} {} accessing_shell_status: Accessing {} shell after enable/disalbe bgp error handling {} +# MTU +mtu_test_status : Mtu test passed:{} # Subinterface subintf_dev_sanity_failed : Test failed diff --git a/spytest/datastore/messages/security.yaml b/sonic-mgmt/spytest/datastore/messages/security.yaml similarity index 100% rename from spytest/datastore/messages/security.yaml rename to sonic-mgmt/spytest/datastore/messages/security.yaml diff --git a/spytest/datastore/messages/switching.yaml b/sonic-mgmt/spytest/datastore/messages/switching.yaml similarity index 100% rename from spytest/datastore/messages/switching.yaml rename to sonic-mgmt/spytest/datastore/messages/switching.yaml diff --git a/spytest/datastore/messages/system.yaml b/sonic-mgmt/spytest/datastore/messages/system.yaml similarity index 99% rename from spytest/datastore/messages/system.yaml rename to sonic-mgmt/spytest/datastore/messages/system.yaml index 44538ae4118..642f51a4c7b 100644 --- a/spytest/datastore/messages/system.yaml +++ b/sonic-mgmt/spytest/datastore/messages/system.yaml @@ -517,6 +517,11 @@ hw_watchdog_running_status: Failed to get running status of hw watchdog feature hw_watchdog_kdump_fail: Failed to get kdump collection of hw watchdog feature hw_watchdog_unsupported: Hw watchdog feature is unsupported +#Drop_counters +common_setup_fail: In Common_setup {} traffic failing with default agrs +drop_counters_incremented: Passed/Packets are dropped as expected +drop_counters_not_incremented: Received {} {} Packets and droped {} packets instead of {} RX_OK and {} RX_drop packets + #ON_CHANGE on_change_verification_fail: Dell UT on change verification failed on_change_notify_fail: Failed to get ON_CHANGE notification for {} diff --git a/spytest/datastore/messages/testbed.yaml b/sonic-mgmt/spytest/datastore/messages/testbed.yaml similarity index 100% rename from spytest/datastore/messages/testbed.yaml rename to sonic-mgmt/spytest/datastore/messages/testbed.yaml diff --git a/spytest/datastore/messages/tgen.yaml b/sonic-mgmt/spytest/datastore/messages/tgen.yaml similarity index 100% rename from spytest/datastore/messages/tgen.yaml rename to sonic-mgmt/spytest/datastore/messages/tgen.yaml diff --git a/spytest/datastore/messages/ut_kdump.yaml b/sonic-mgmt/spytest/datastore/messages/ut_kdump.yaml similarity index 100% rename from spytest/datastore/messages/ut_kdump.yaml rename to sonic-mgmt/spytest/datastore/messages/ut_kdump.yaml diff --git a/spytest/datastore/messages/ut_snmp.yaml b/sonic-mgmt/spytest/datastore/messages/ut_snmp.yaml similarity index 100% rename from spytest/datastore/messages/ut_snmp.yaml rename to sonic-mgmt/spytest/datastore/messages/ut_snmp.yaml diff --git a/spytest/datastore/prompts/Prompts_Support.md b/sonic-mgmt/spytest/datastore/prompts/Prompts_Support.md similarity index 100% rename from spytest/datastore/prompts/Prompts_Support.md rename to sonic-mgmt/spytest/datastore/prompts/Prompts_Support.md diff --git a/spytest/datastore/prompts/linux_prompts.yaml b/sonic-mgmt/spytest/datastore/prompts/linux_prompts.yaml similarity index 100% rename from spytest/datastore/prompts/linux_prompts.yaml rename to sonic-mgmt/spytest/datastore/prompts/linux_prompts.yaml diff --git a/spytest/datastore/prompts/sonic_prompts.yaml b/sonic-mgmt/spytest/datastore/prompts/sonic_prompts.yaml similarity index 98% rename from spytest/datastore/prompts/sonic_prompts.yaml rename to sonic-mgmt/spytest/datastore/prompts/sonic_prompts.yaml index b34662397c1..45b4df49307 100644 --- a/spytest/datastore/prompts/sonic_prompts.yaml +++ b/sonic-mgmt/spytest/datastore/prompts/sonic_prompts.yaml @@ -21,6 +21,8 @@ patterns: # ===================================================================== vtysh-user: '(sonic|{})#' vtysh-config: '(sonic|{})\(config(-s)?\)#' + vtysh-multi-asic-user: '(sonic|{})#' + vtysh-multi-asic-config: '(sonic|{})\(config\)#' vtysh-intf-config: '(sonic|{})\(config-if\)#' vtysh-bfd-config: '(sonic|{})\(config-bfd\)#' vtysh-bfd-peer-config: '(sonic|{})\(config-bfd-peer\)#' @@ -212,6 +214,8 @@ modes: # ===================================================================== vtysh-user: ['normal-user', 'sudo vtysh', 'exit'] vtysh-config: ['vtysh-user', 'configure terminal', 'exit'] + vtysh-multi-asic-user: ['normal-user', 'sudo vtysh -n {}', 'exit'] + vtysh-multi-asic-config: ['vtysh-multi-asic-user', 'configure terminal', 'exit'] vtysh-intf-config: ['vtysh-config', 'interface {}', 'exit'] vtysh-bfd-config: ['vtysh-config', 'bfd', 'exit'] vtysh-bfd-peer-config: ['vtysh-bfd-config', 'peer {}', 'exit'] @@ -377,6 +381,7 @@ modes: # to provide along with the command. ########################################################################## required_args: + vtysh-multi-asic-user: ['asic'] vtysh-intf-config: ['interface'] vtysh-bfd-peer-config: ['peer_ip'] vtysh-key-chain-config: ['key_chain'] @@ -501,4 +506,4 @@ sudo_include_prompts: ['normal-user'] # do_exclude_prompts: # Prompts where show commands should be not be executed with DO. ########################################################################## -do_exclude_prompts: ['normal-user', 'vtysh-user', 'mgmt-user', 'root-user'] +do_exclude_prompts: ['normal-user', 'vtysh-user', 'vtysh-multi-asic-user', 'mgmt-user', 'root-user'] diff --git a/sonic-mgmt/spytest/reporting/suites/apple-cvt-ipfabric b/sonic-mgmt/spytest/reporting/suites/apple-cvt-ipfabric new file mode 100644 index 00000000000..a3218cc3bcb --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/apple-cvt-ipfabric @@ -0,0 +1,14 @@ +# Modules ++file:cisco/apple_cvt/test_packet_capture.py ++file:cisco/apple_cvt/test_bfd.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 28000 ++args:--tc-max-timeout 28000 ++args:--logs-level=debug ++args:--random-order=0 \ No newline at end of file diff --git a/sonic-mgmt/spytest/reporting/suites/arctos-hardening-automation b/sonic-mgmt/spytest/reporting/suites/arctos-hardening-automation new file mode 100644 index 00000000000..c4ee61d2cc4 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/arctos-hardening-automation @@ -0,0 +1,19 @@ +# Modules ++file:cisco/arctos/async/test_async_fpga_terminalserver.py ++file:cisco/arctos/pmon_env/test_arctos_cli_smoke.py ++file:cisco/arctos/network/test_network_connectivity.py ++file:cisco/arctos/async/test_terminal_server_consoles.py ++file:cisco/arctos/usb/Arctos_usb_mount_unmount_test.py + +#Runtime Arguments ++args:--env SPYTEST_ARCTOS_HOSTNAME_DEFAULT sonic --noop ++args:--env SPYTEST_IGNORE_SYSTEM_READY 1 --noop + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-init-checks ++args:--load-config-method none ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--module-init-max-timeout 7200 ++args:--tc-max-timeout 7200 diff --git a/spytest/reporting/suites/community-ixia b/sonic-mgmt/spytest/reporting/suites/community-ixia similarity index 100% rename from spytest/reporting/suites/community-ixia rename to sonic-mgmt/spytest/reporting/suites/community-ixia diff --git a/spytest/reporting/suites/community-legacy b/sonic-mgmt/spytest/reporting/suites/community-legacy similarity index 100% rename from spytest/reporting/suites/community-legacy rename to sonic-mgmt/spytest/reporting/suites/community-legacy diff --git a/spytest/reporting/suites/community-na b/sonic-mgmt/spytest/reporting/suites/community-na similarity index 100% rename from spytest/reporting/suites/community-na rename to sonic-mgmt/spytest/reporting/suites/community-na diff --git a/spytest/reporting/suites/community-ptf b/sonic-mgmt/spytest/reporting/suites/community-ptf similarity index 100% rename from spytest/reporting/suites/community-ptf rename to sonic-mgmt/spytest/reporting/suites/community-ptf diff --git a/sonic-mgmt/spytest/reporting/suites/egress_dscp_rewrite b/sonic-mgmt/spytest/reporting/suites/egress_dscp_rewrite new file mode 100644 index 00000000000..ed341843ac7 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/egress_dscp_rewrite @@ -0,0 +1,12 @@ +# Modules ++file:cisco/acl/test_acl_dscp_rewrite.py + +#Runtime Arguments ++args:--env SPYTEST_TOPOLOGY_STATUS_MAX_WAIT 300 ++args:--device-feature-group=master ++args:--module-init-max-timeout=9000 ++args:--tc-max-timeout=5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/macsec-automation b/sonic-mgmt/spytest/reporting/suites/macsec-automation new file mode 100644 index 00000000000..608d6384900 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/macsec-automation @@ -0,0 +1,14 @@ +# Modules ++file:macsec/test_macsec.py + +# Runtime Arguments ++args:--device-feature-group master ++args:-rA ++args:--topology-check=skip ++args:--skip-init-checks ++args:--skip-init-config ++args:--port-init-wait=2 ++args:--get-tech-support none ++args:--module-init-max-timeout=7200000 ++args:--tc-max-timeout=7200000 ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/platform-hardening-automation b/sonic-mgmt/spytest/reporting/suites/platform-hardening-automation new file mode 100644 index 00000000000..55792c2f365 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/platform-hardening-automation @@ -0,0 +1,14 @@ +# Modules ++file:cisco/test_platform.py ++file:cisco/test_reboot_recovery.py ++file:cisco/test_platform_api.py ++file:cisco/test_fwutil.py ++file:cisco/test_sfp.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 diff --git a/sonic-mgmt/spytest/reporting/suites/sonic-dci b/sonic-mgmt/spytest/reporting/suites/sonic-dci new file mode 100644 index 00000000000..97a6d53b3ce --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/sonic-dci @@ -0,0 +1,23 @@ +# Modules ++file:cisco/tortuga/vxlan/dci/test_config.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 ++args:--skip-tgen + +#Environment Variables for IXIA Configuration ++args:--env DCI_CONFIG_FILE dci/device_configs/config_ixia_8D.yaml ++args:--env DCI_USE_IXIA_FOR_HOSTS true ++args:--env DCI_IXIA_API_KEY f01a12559c4c46c192ab67a6121469e1 ++args:--env DCI_IXIA_CONFIG_FILE ixia_dci_hosts.ixncfg ++args:--env DCI_IXIA_FORCE_NEW_SESSION true diff --git a/spytest/reporting/suites/sonic-vs b/sonic-mgmt/spytest/reporting/suites/sonic-vs similarity index 100% rename from spytest/reporting/suites/sonic-vs rename to sonic-mgmt/spytest/reporting/suites/sonic-vs diff --git a/sonic-mgmt/spytest/reporting/suites/spytest-tgen b/sonic-mgmt/spytest/reporting/suites/spytest-tgen new file mode 100644 index 00000000000..2ef1880cf68 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/spytest-tgen @@ -0,0 +1,17 @@ +# Modules ++file:cisco/infra/test_npuh_tgen.py::test_injectdown_with_scapy_packet ++file:cisco/infra/test_npuh_tgen.py::test_injectup_with_nodmac_v4_scapy_packet ++file:cisco/infra/test_npuh_tgen.py::test_injectup_with_noether_scapy_packet + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga b/sonic-mgmt/spytest/reporting/suites/tortuga new file mode 100644 index 00000000000..a554217a1dd --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga @@ -0,0 +1,48 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# DO NOT add more test case files in this suites file; instead add in 'tortuga_parallel' +# This file is deprecated!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +# Modules ++file:cisco/tortuga/test_neighbor_ping.py ++file:cisco/tortuga/vxlan/test_subint_basic.py ++file:cisco/tortuga/vxlan/test_l2vni.py ++file:cisco/tortuga/vxlan/test_l2vni_sag_irb.py ++file:cisco/tortuga/vxlan/test_l2vni_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_sag_irb.py ++file:cisco/tortuga/vxlan/test_l3vni_basic.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep.py ++file:cisco/tortuga/l2_switching/test_portchannel_l2.py ++file:cisco/tortuga/l2_switching/test_l2_vlan.py ++file:cisco/tortuga/l2_switching/test_bvi.py ++file:cisco/tortuga/l2_switching/test_bdbvi.py ++file:cisco/tortuga/l2_switching/test_stp.py ++file:cisco/tortuga/portchannel/test_portchannel.py ++file:cisco/tortuga/bgp/bgp_routemap/test_bgp_routemap_basic.py ++file:cisco/tortuga/bgp/bgp_auth/test_bgp_auth_evpn.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_l3vpn.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_set_2.py ++file:cisco/tortuga/vxlan/test_bgp_bfd.py ++file:cisco/tortuga/vxlan/test_bgp_bfd_evpn.py ++file:cisco/tortuga/dpb/test_dpb_qos.py ++file:cisco/tortuga/vxlan/test_bfd_lla.py ++file:cisco/tortuga/l2_switching/test_lldp_tlv.py + +# DO NOT add more test case files in this; instead add in 'tortuga_parallel' +# Follow the instructions and insert the test suite in the appropriate location + + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga-carib-misc b/sonic-mgmt/spytest/reporting/suites/tortuga-carib-misc new file mode 100644 index 00000000000..f06a34cc026 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga-carib-misc @@ -0,0 +1,15 @@ +# Modules ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4_dpb.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga-laguna b/sonic-mgmt/spytest/reporting/suites/tortuga-laguna new file mode 100644 index 00000000000..4df68cde281 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga-laguna @@ -0,0 +1,61 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# DO NOT add more test case files in this suites file; instead add in 'tortuga_parallel' +# This file is deprecated!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# Laguna: same module order as tortuga; lines beginning with # are skipped by the suite parser. +# +# BFD is not usable on Laguna. The VXLAN BFD modules below are commented for that reason. +# +# test_bgp_auth_evpn.py drives BFD together with BGP in FRR. On 202405c, create_bfd_session() +# failed against SAI 1.14.0, so orchagent never monitored BFD sessions; despite that, +# SAI ROUTE_ENTRY objects for ROUTE_TABLE (SWSS) could still be published. On c-master, +# BFD session creation succeeds and orchagent begins BFD monitoring, but BFD still does +# not work on Laguna: the session remains down, orchagent does not resolve the BGP route +# next hop, SAI ROUTE_ENTRY notifications are not emitted, and routes are not programmed +# to the ASIC. That module is therefore commented as well. +# +# Run all BFD-related scripts below once the BFD feature is fully functional on Laguna. +# +# Modules ++file:cisco/tortuga/test_neighbor_ping.py ++file:cisco/tortuga/vxlan/test_subint_basic.py ++file:cisco/tortuga/vxlan/test_l2vni.py ++file:cisco/tortuga/vxlan/test_l2vni_sag_irb.py ++file:cisco/tortuga/vxlan/test_l2vni_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_sag_irb.py ++file:cisco/tortuga/vxlan/test_l3vni_basic.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep.py ++file:cisco/tortuga/l2_switching/test_portchannel_l2.py ++file:cisco/tortuga/l2_switching/test_l2_vlan.py ++file:cisco/tortuga/l2_switching/test_bvi.py ++file:cisco/tortuga/l2_switching/test_bdbvi.py ++file:cisco/tortuga/l2_switching/test_stp.py ++file:cisco/tortuga/portchannel/test_portchannel.py ++file:cisco/tortuga/bgp/bgp_routemap/test_bgp_routemap_basic.py +# +file:cisco/tortuga/bgp/bgp_auth/test_bgp_auth_evpn.py # BGP+BFD path; see Laguna BFD note above ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_l3vpn.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_set_2.py +# +file:cisco/tortuga/vxlan/test_bgp_bfd.py # BFD N/A on Laguna +# +file:cisco/tortuga/vxlan/test_bgp_bfd_evpn.py # BFD N/A on Laguna ++file:cisco/tortuga/dpb/test_dpb_qos.py +# +file:cisco/tortuga/vxlan/test_bfd_lla.py # BFD N/A on Laguna ++file:cisco/tortuga/l2_switching/test_lldp_tlv.py + +# DO NOT add more test case files in this; instead add in 'tortuga_parallel' +# Follow the instructions and insert the test suite in the appropriate location + + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga-mh b/sonic-mgmt/spytest/reporting/suites/tortuga-mh new file mode 100644 index 00000000000..b8169f42af2 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga-mh @@ -0,0 +1,39 @@ +# Modules +# Test Suites sequence with DECREASING order of execution time. +# This ensures the appropriate queuing of the test suites in the parallel SIMs. +# DO NOT alter the sequence until the test execution time has been validated +# accordingly. + +# Run/validate the test case once manually, calcualte the time taken for the +# completion of the test case. Based on the time taken for the test case(s) +# execution: +# 1. Enter the test suite time execution and the test suite name in 1st block +# 2. Enter the test suite name in the appropriate location as per the above +# mentioned requirement in 2nd block + +# Block-1: Test Suite Name along with execution time +# ================================================== +# test_mobility : 0:53:11 +# test_traffic : 0:45:49 +# test_config : 0:24:43 + +# Block-2: Test Suite Name +# ======================== ++file:cisco/tortuga/vxlan/multihome/mobility/test_mobility.py ++file:cisco/tortuga/vxlan/multihome/traffic/test_traffic.py ++file:cisco/tortuga/vxlan/multihome/config/test_config.py ++file:cisco/tortuga/vxlan/multihome/ageout/test_ageout.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--env 'SPYTEST_EXCLUDE_PARAMETERIZED=2' ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga-mh-config b/sonic-mgmt/spytest/reporting/suites/tortuga-mh-config new file mode 100644 index 00000000000..2b309ee8dd3 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga-mh-config @@ -0,0 +1,34 @@ +# Modules +# Test Suites sequence with DECREASING order of execution time. +# This ensures the appropriate queuing of the test suites in the parallel SIMs. +# DO NOT alter the sequence until the test execution time has been validated +# accordingly. + +# Run/validate the test case once manually, calcualte the time taken for the +# completion of the test case. Based on the time taken for the test case(s) +# execution: +# 1. Enter the test suite time execution and the test suite name in 1st block +# 2. Enter the test suite name in the appropriate location as per the above +# mentioned requirement in 2nd block + +# Block-1: Test Suite Name along with execution time +# ================================================== +# test_config : 0:24:43 + +# Block-2: Test Suite Name +# ======================== ++file:cisco/tortuga/vxlan/multihome/config/test_config.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--env 'SPYTEST_EXCLUDE_PARAMETERIZED=2' ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga-mh-mobility b/sonic-mgmt/spytest/reporting/suites/tortuga-mh-mobility new file mode 100644 index 00000000000..c75bdd91a62 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga-mh-mobility @@ -0,0 +1,34 @@ +# Modules +# Test Suites sequence with DECREASING order of execution time. +# This ensures the appropriate queuing of the test suites in the parallel SIMs. +# DO NOT alter the sequence until the test execution time has been validated +# accordingly. + +# Run/validate the test case once manually, calcualte the time taken for the +# completion of the test case. Based on the time taken for the test case(s) +# execution: +# 1. Enter the test suite time execution and the test suite name in 1st block +# 2. Enter the test suite name in the appropriate location as per the above +# mentioned requirement in 2nd block + +# Block-1: Test Suite Name along with execution time +# ================================================== +# test_mobility : 0:53:11 + +# Block-2: Test Suite Name +# ======================== ++file:cisco/tortuga/vxlan/multihome/mobility/test_mobility.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--env 'SPYTEST_EXCLUDE_PARAMETERIZED=2' ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga-mh-traffic b/sonic-mgmt/spytest/reporting/suites/tortuga-mh-traffic new file mode 100644 index 00000000000..9df341ee57e --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga-mh-traffic @@ -0,0 +1,34 @@ +# Modules +# Test Suites sequence with DECREASING order of execution time. +# This ensures the appropriate queuing of the test suites in the parallel SIMs. +# DO NOT alter the sequence until the test execution time has been validated +# accordingly. + +# Run/validate the test case once manually, calcualte the time taken for the +# completion of the test case. Based on the time taken for the test case(s) +# execution: +# 1. Enter the test suite time execution and the test suite name in 1st block +# 2. Enter the test suite name in the appropriate location as per the above +# mentioned requirement in 2nd block + +# Block-1: Test Suite Name along with execution time +# ================================================== +# test_traffic : 0:45:49 + +# Block-2: Test Suite Name +# ======================== ++file:cisco/tortuga/vxlan/multihome/traffic/test_traffic.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--env 'SPYTEST_EXCLUDE_PARAMETERIZED=2' ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_apm b/sonic-mgmt/spytest/reporting/suites/tortuga_apm new file mode 100644 index 00000000000..5b407b7d93b --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_apm @@ -0,0 +1,17 @@ +# Modules ++file:cisco/tortuga/vxlan/test_static_route_apm.py ++file:cisco/tortuga/vxlan/test_static_route_apm_basic.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-init-checks ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 15000 ++args:--tc-max-timeout 15000 ++args:--max-time module 15000 ++args:--max-time function 15000 ++args:--logs-level=debug ++args:--random-order=0 \ No newline at end of file diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_dhcp_relay b/sonic-mgmt/spytest/reporting/suites/tortuga_dhcp_relay new file mode 100644 index 00000000000..dd98b4073c6 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_dhcp_relay @@ -0,0 +1,44 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# DO NOT add more test case files in this suites file; instead add in 'tortuga_parallel' +# This file is deprecated!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +# Modules ++file:cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp_old_design.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep_dhcp_old_design.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_basic_old_design.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan_old_design.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs_old_design.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4_old_design.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4_dpb_old_design.py ++file:cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep_dhcp.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_basic.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_basic_new_design.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan_new_design.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs_new_design.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4_new_design.py ++file:cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp_new_design.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4_dpb_new_design.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_scaling_new_design.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4_dpb.py + +# DO NOT add more test case files in this; instead add in 'tortuga_parallel' +# Follow the instructions and insert the test suite in the appropriate location + + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 5400 ++args:--max-time function 5400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_gamut b/sonic-mgmt/spytest/reporting/suites/tortuga_gamut new file mode 100644 index 00000000000..b6dbcb34821 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_gamut @@ -0,0 +1,81 @@ +# Modules + +# Test Suites sequence with DECREASING order of execution time. +# This ensures the appropriate queuing of the test suites in the parallel SIMs. +# DO NOT alter the sequence until the test execution time has been validated +# accordingly. + +# Run/validate the test case once manually, calcualte the time taken for the +# completion of the test case. Based on the time taken for the test case(s) +# execution: +# 1. Enter the test suite time execution and the test suite name in 1st block +# 2. Enter the test suite name in the appropriate location as per the above +# mentioned requirement in 2nd block + +# Block-1: Test Suite Name along with execution time +# ================================================== +# 1:02:42 cisco/tortuga/vxlan/test_l3vni_v6_vtep.py +# 0:50:21 cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4.py +# 0:49:37 cisco/tortuga/vxlan/test_l2vni_v6_vtep.py +# 0:46:11 cisco/tortuga/vxlan/test_l2vni_sag_irb.py +# 0:45:27 cisco/tortuga/vxlan/test_l2vni_ipv6_sag_irb.py +# 0:45:24 cisco/tortuga/l2_switching/test_l2_vlan.py +# 0:41:40 cisco/tortuga/l2_switching/test_bvi.py +# 0:26:12 cisco/tortuga/l2_switching/test_portchannel_l2.py +# 0:20:46 cisco/tortuga/vxlan/test_l3vni_basic.py +# 0:20:32 cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan.py +# 0:20:25 cisco/tortuga/vxlan/test_l2vni_mac_move.py +# 0:20:16 cisco/tortuga/vxlan/test_l2vni.py +# 0:18:35 cisco/tortuga/portchannel/test_portchannel.py +# 0:15:09 cisco/tortuga/l2_switching/test_bdbvi.py +# 0:13:59 cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs.py +# 0:12:13 cisco/tortuga/vxlan/test_subint_basic.py +# 0:11:08 cisco/tortuga/vxlan/test_dhcp_relay_basic.py +# 0:10:16 cisco/tortuga/bgp/bgp_auth/test_bgp_auth_evpn.py +# 0:10:13 cisco/tortuga/bgp_vrf/test_bgp_vrf_set_2.py +# 0:05:44 cisco/tortuga/bgp_vrf/test_bgp_vrf_l3vpn.py +# 0:05:11 cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp.py +# 0:04:48 cisco/tortuga/vxlan/test_l2vni_v6_vtep_dhcp.py +# 0:03:43 cisco/tortuga/bgp/bgp_routemap/test_bgp_routemap_basic.py +# 0:03:27 cisco/tortuga/test_neighbor_ping.py + +# Block-2: Test Suite Name +# ======================== ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep.py ++file:cisco/tortuga/vxlan/test_l2vni_sag_irb.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_sag_irb.py ++file:cisco/tortuga/l2_switching/test_l2_vlan.py ++file:cisco/tortuga/l2_switching/test_bvi.py ++file:cisco/tortuga/l2_switching/test_portchannel_l2.py ++file:cisco/tortuga/vxlan/test_l3vni_basic.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan.py ++file:cisco/tortuga/vxlan/test_l2vni_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni.py ++file:cisco/tortuga/portchannel/test_portchannel.py ++file:cisco/tortuga/l2_switching/test_bdbvi.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs.py ++file:cisco/tortuga/vxlan/test_subint_basic.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_basic.py ++file:cisco/tortuga/bgp/bgp_auth/test_bgp_auth_evpn.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_set_2.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_l3vpn.py ++file:cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep_dhcp.py ++file:cisco/tortuga/bgp/bgp_routemap/test_bgp_routemap_basic.py ++file:cisco/tortuga/test_neighbor_ping.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 8000 ++args:--max-time module 8000 ++args:--max-time function 8000 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_hw b/sonic-mgmt/spytest/reporting/suites/tortuga_hw new file mode 100644 index 00000000000..fd1c8386053 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_hw @@ -0,0 +1,14 @@ +# Modules ++file:cisco/tortuga/vxlan/test_l3vni_basic.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--logs-level=debug ++args:--random-order=0 + diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_l2 b/sonic-mgmt/spytest/reporting/suites/tortuga_l2 new file mode 100644 index 00000000000..2fc199ba60b --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_l2 @@ -0,0 +1,19 @@ +# Modules ++file:cisco/tortuga/portchannel/test_portchannel_fallback.py ++file:cisco/tortuga/vxlan/test_lacp_fallback_over_evpn_mh.py ++file:cisco/tortuga/l2_switching/test_stp_scenarios.py + + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-init-checks ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_l2_l3_advanced b/sonic-mgmt/spytest/reporting/suites/tortuga_l2_l3_advanced new file mode 100644 index 00000000000..20a74f717e2 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_l2_l3_advanced @@ -0,0 +1,28 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# DO NOT add more test case files in this suites file; instead add in 'tortuga_parallel' +# This file is deprecated!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +# Modules + + ++file:switching/test_l2_ping.py ++file:switching/test_l3_ping.py ++file:switching/test_vlan_advanced.py ++file:switching/test_portchannel_advanced.py +# DO NOT add more test case files in this; instead add in 'tortuga_parallel' +# Follow the instructions and insert the test suite in the appropriate location + + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_parallel b/sonic-mgmt/spytest/reporting/suites/tortuga_parallel new file mode 100644 index 00000000000..290c56cfce3 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_parallel @@ -0,0 +1,99 @@ +# Modules + +# Test Suites sequence with DECREASING order of execution time. +# This ensures the appropriate queuing of the test suites in the parallel SIMs. +# DO NOT alter the sequence until the test execution time has been validated +# accordingly. + +# Run/validate the test case once manually, calcualte the time taken for the +# completion of the test case. Based on the time taken for the test case(s) +# execution: +# 1. Enter the test suite time execution and the test suite name in 1st block +# 2. Enter the test suite name in the appropriate location as per the above +# mentioned requirement in 2nd block + +# Block-1: Test Suite Name along with execution time +# ================================================== +# 1:43:25 cisco/qos/scheduler/test_v4_sp_1node.py +# 1:02:42 cisco/tortuga/vxlan/test_l3vni_v6_vtep.py +# 0:50:21 cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4.py +# 0:49:37 cisco/tortuga/vxlan/test_l2vni_v6_vtep.py +# 0:46:11 cisco/tortuga/vxlan/test_l2vni_sag_irb.py +# 0:45:27 cisco/tortuga/vxlan/test_l2vni_ipv6_sag_irb.py +# 0:45:24 cisco/tortuga/l2_switching/test_l2_vlan.py +# 0:41:40 cisco/tortuga/l2_switching/test_bvi.py +# 0:26:12 cisco/tortuga/l2_switching/test_portchannel_l2.py +# 0:24:47 cisco/tortuga/l2_switching/test_stp.py +# 0:20:58 cisco/qos/scheduler/test_v4_dwrr_1node.py +# 0:20:46 cisco/tortuga/vxlan/test_l3vni_basic.py +# 0:20:32 cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan.py +# 0:20:25 cisco/tortuga/vxlan/test_l2vni_mac_move.py +# 0:20:16 cisco/tortuga/vxlan/test_l2vni.py +# 0:18:35 cisco/tortuga/portchannel/test_portchannel.py +# 0:15:09 cisco/tortuga/l2_switching/test_bdbvi.py +# 0:14:25 cisco/qos/pfc/test_v4_pfc_brkout_b2b.py +# 0:13:59 cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs.py +# 0:12:13 cisco/tortuga/vxlan/test_subint_basic.py +# 0:11:08 cisco/tortuga/vxlan/test_dhcp_relay_basic.py +# 0:10:16 cisco/tortuga/bgp/bgp_auth/test_bgp_auth_evpn.py +# 0:10:13 cisco/tortuga/bgp_vrf/test_bgp_vrf_set_2.py +# 0:06:51 cisco/tortuga/vxlan/test_bfd_lla.py +# 0:08:21 cisco/tortuga/vxlan/test_bgp_bfd_evpn.py +# 0:05:44 cisco/tortuga/bgp_vrf/test_bgp_vrf_l3vpn.py +# 0:05:11 cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp.py +# 0:04:48 cisco/tortuga/vxlan/test_l2vni_v6_vtep_dhcp.py +# 0:04:22 cisco/tortuga/vxlan/test_bgp_bfd.py +# 0:03:43 cisco/tortuga/bgp/bgp_routemap/test_bgp_routemap_basic.py +# 0:03:27 cisco/tortuga/test_neighbor_ping.py +# 0:03:00 cisco/qos/config/test_qos_cli_1node.py +# 0:02:04 cisco/tortuga/dpb/test_dpb_qos.py + +# Block-2: Test Suite Name +# ======================== ++file:cisco/qos/scheduler/test_v4_sp_1node.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep.py ++file:cisco/tortuga/vxlan/test_l3vni_v6_vtep_dhcp_relay_v4.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep.py ++file:cisco/tortuga/vxlan/test_l2vni_sag_irb.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_sag_irb.py ++file:cisco/tortuga/l2_switching/test_l2_vlan.py ++file:cisco/tortuga/l2_switching/test_bvi.py ++file:cisco/tortuga/l2_switching/test_portchannel_l2.py ++file:cisco/tortuga/l2_switching/test_stp.py ++file:cisco/qos/scheduler/test_v4_dwrr_1node.py ++file:cisco/tortuga/vxlan/test_l3vni_basic.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_mvlan.py ++file:cisco/tortuga/vxlan/test_l2vni_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni_ipv6_mac_move.py ++file:cisco/tortuga/vxlan/test_l2vni.py ++file:cisco/tortuga/portchannel/test_portchannel.py ++file:cisco/tortuga/l2_switching/test_bdbvi.py ++file:cisco/qos/pfc/test_v4_pfc_brkout_b2b.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_v4_srclb_vrfs.py ++file:cisco/tortuga/vxlan/test_subint_basic.py ++file:cisco/tortuga/vxlan/test_dhcp_relay_basic.py ++file:cisco/tortuga/bgp/bgp_auth/test_bgp_auth_evpn.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_set_2.py ++file:cisco/tortuga/vxlan/test_bfd_lla.py ++file:cisco/tortuga/vxlan/test_bgp_bfd_evpn.py ++file:cisco/tortuga/bgp_vrf/test_bgp_vrf_l3vpn.py ++file:cisco/tortuga/vxlan/test_l2vni_v4_vtep_dhcp.py ++file:cisco/tortuga/vxlan/test_l2vni_v6_vtep_dhcp.py ++file:cisco/tortuga/vxlan/test_bgp_bfd.py ++file:cisco/tortuga/bgp/bgp_routemap/test_bgp_routemap_basic.py ++file:cisco/tortuga/test_neighbor_ping.py ++file:cisco/qos/config/test_qos_cli_1node.py ++file:cisco/tortuga/dpb/test_dpb_qos.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 8000 ++args:--max-time module 8000 ++args:--max-time function 8000 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_solution b/sonic-mgmt/spytest/reporting/suites/tortuga_solution new file mode 100644 index 00000000000..607193243fe --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_solution @@ -0,0 +1,14 @@ +# Modules ++file:cisco/tortuga/solution/test_vxlan_multi_homing.py + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 28000 ++args:--tc-max-timeout 28000 ++args:--logs-level=debug ++args:--random-order=0 ++args:-m sanity \ No newline at end of file diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_stp b/sonic-mgmt/spytest/reporting/suites/tortuga_stp new file mode 100644 index 00000000000..fa99597bf92 --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_stp @@ -0,0 +1,17 @@ +# Modules ++file:cisco/tortuga/l2_switching/test_stp_scenarios.py + + +#Runtime Arguments ++args:--skip-init-config ++args:--skip-init-checks ++args:--skip-load-config=module ++args:--skip-load-config=base ++args:--device-feature-group master ++args:--load-config-method=none ++args:--module-init-max-timeout 9000 ++args:--tc-max-timeout 5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/sonic-mgmt/spytest/reporting/suites/tortuga_wecmp b/sonic-mgmt/spytest/reporting/suites/tortuga_wecmp new file mode 100644 index 00000000000..ffc6a9735dd --- /dev/null +++ b/sonic-mgmt/spytest/reporting/suites/tortuga_wecmp @@ -0,0 +1,14 @@ +# Modules ++file:cisco/tortuga/vxlan/test_evpn_vxlan_wecmp.py ++file:cisco/tortuga/vxlan/test_udf_qpid_l2vni.py ++file:cisco/tortuga/vxlan/test_udf_qpid_l3vni.py + +#Runtime Arguments ++args:--env SPYTEST_TOPOLOGY_STATUS_MAX_WAIT 300 ++args:--device-feature-group=master ++args:--module-init-max-timeout=9000 ++args:--tc-max-timeout=5400 ++args:--max-time module 2400 ++args:--max-time function 2400 ++args:--logs-level=debug ++args:--random-order=0 diff --git a/spytest/reporting/syslogs.yaml b/sonic-mgmt/spytest/reporting/syslogs.yaml similarity index 100% rename from spytest/reporting/syslogs.yaml rename to sonic-mgmt/spytest/reporting/syslogs.yaml diff --git a/sonic-mgmt/spytest/spytest.hltlog b/sonic-mgmt/spytest/spytest.hltlog new file mode 100644 index 00000000000..7f427a49169 --- /dev/null +++ b/sonic-mgmt/spytest/spytest.hltlog @@ -0,0 +1,15 @@ +[2020-09-29 20:00:01]: Started process. Command line: +[2020-09-29 20:00:01]: port number: 57793 +[2020-09-29 20:00:01]: timeout value: 120 +[2020-09-29 20:00:01]: log option: log +[2020-09-29 20:00:01]: results dir path: /home/sonic/pevenkat/sonic-test/sonic-mgmt/spytest +[2020-09-29 20:00:01]: log file name: spytest.hltlog +[2020-09-29 20:00:01]: Working directory is now: /home/sonic/pevenkat/sonic-test/sonic-mgmt/spytest +[2020-09-29 20:00:01]: Sourcing initialization file "stcinit.srv". +[2020-09-29 20:00:01]: Connecting to port 57793 on 127.0.0.1. +[2020-09-29 20:00:01]: Creating server socket. +[2020-09-29 20:00:01]: Generated port number: 44408 +[2020-09-29 20:00:01]: Setting up timeout check. +[2020-09-29 20:00:01]: Waiting for client connection. +[2020-09-29 20:00:01]: Client connection from 127.0.0.1 port 58188. +[2020-09-29 20:00:01]: Executing: diff --git a/spytest/spytest/__init__.py b/sonic-mgmt/spytest/spytest/__init__.py similarity index 100% rename from spytest/spytest/__init__.py rename to sonic-mgmt/spytest/spytest/__init__.py diff --git a/spytest/spytest/access/__init__.py b/sonic-mgmt/spytest/spytest/access/__init__.py similarity index 100% rename from spytest/spytest/access/__init__.py rename to sonic-mgmt/spytest/spytest/access/__init__.py diff --git a/spytest/spytest/access/connection.py b/sonic-mgmt/spytest/spytest/access/connection.py similarity index 100% rename from spytest/spytest/access/connection.py rename to sonic-mgmt/spytest/spytest/access/connection.py diff --git a/spytest/spytest/access/linux_connection.py b/sonic-mgmt/spytest/spytest/access/linux_connection.py similarity index 100% rename from spytest/spytest/access/linux_connection.py rename to sonic-mgmt/spytest/spytest/access/linux_connection.py diff --git a/spytest/spytest/access/netmiko_connection.py b/sonic-mgmt/spytest/spytest/access/netmiko_connection.py similarity index 100% rename from spytest/spytest/access/netmiko_connection.py rename to sonic-mgmt/spytest/spytest/access/netmiko_connection.py diff --git a/spytest/spytest/access/paramiko_connection.py b/sonic-mgmt/spytest/spytest/access/paramiko_connection.py similarity index 100% rename from spytest/spytest/access/paramiko_connection.py rename to sonic-mgmt/spytest/spytest/access/paramiko_connection.py diff --git a/spytest/spytest/access/utils.py b/sonic-mgmt/spytest/spytest/access/utils.py similarity index 100% rename from spytest/spytest/access/utils.py rename to sonic-mgmt/spytest/spytest/access/utils.py diff --git a/spytest/spytest/ansible.py b/sonic-mgmt/spytest/spytest/ansible.py similarity index 100% rename from spytest/spytest/ansible.py rename to sonic-mgmt/spytest/spytest/ansible.py diff --git a/spytest/spytest/batch.py b/sonic-mgmt/spytest/spytest/batch.py similarity index 100% rename from spytest/spytest/batch.py rename to sonic-mgmt/spytest/spytest/batch.py diff --git a/spytest/spytest/batch.sh b/sonic-mgmt/spytest/spytest/batch.sh similarity index 100% rename from spytest/spytest/batch.sh rename to sonic-mgmt/spytest/spytest/batch.sh diff --git a/spytest/spytest/cmdargs.py b/sonic-mgmt/spytest/spytest/cmdargs.py similarity index 100% rename from spytest/spytest/cmdargs.py rename to sonic-mgmt/spytest/spytest/cmdargs.py diff --git a/spytest/spytest/compare.py b/sonic-mgmt/spytest/spytest/compare.py similarity index 100% rename from spytest/spytest/compare.py rename to sonic-mgmt/spytest/spytest/compare.py diff --git a/spytest/spytest/dashboard.html b/sonic-mgmt/spytest/spytest/dashboard.html similarity index 100% rename from spytest/spytest/dashboard.html rename to sonic-mgmt/spytest/spytest/dashboard.html diff --git a/spytest/spytest/datamap.py b/sonic-mgmt/spytest/spytest/datamap.py similarity index 100% rename from spytest/spytest/datamap.py rename to sonic-mgmt/spytest/spytest/datamap.py diff --git a/spytest/spytest/dicts.py b/sonic-mgmt/spytest/spytest/dicts.py similarity index 100% rename from spytest/spytest/dicts.py rename to sonic-mgmt/spytest/spytest/dicts.py diff --git a/spytest/spytest/dlog.py b/sonic-mgmt/spytest/spytest/dlog.py similarity index 100% rename from spytest/spytest/dlog.py rename to sonic-mgmt/spytest/spytest/dlog.py diff --git a/spytest/spytest/env.py b/sonic-mgmt/spytest/spytest/env.py similarity index 99% rename from spytest/spytest/env.py rename to sonic-mgmt/spytest/spytest/env.py index 9daccb6af34..0229e4066c9 100644 --- a/spytest/spytest/env.py +++ b/sonic-mgmt/spytest/spytest/env.py @@ -136,7 +136,7 @@ "SPYTEST_NEW_FIND_PROMPT": "0", "SPYTEST_SPLIT_COMMAND_LIST": "0", "SPYTEST_CHECK_SKIP_ERROR": "0", - "SPYTEST_HELPER_CONFIG_DB_RELOAD": "yes", + "SPYTEST_HELPER_CONFIG_DB_RELOAD": None, "SPYTEST_CHECK_HELPER_SIGNATURE": "0", "SPYTEST_CLICK_HELPER_ARGS": "", } diff --git a/spytest/spytest/framework.py b/sonic-mgmt/spytest/spytest/framework.py similarity index 99% rename from spytest/spytest/framework.py rename to sonic-mgmt/spytest/spytest/framework.py index 7f7cb859a11..805a91d2c0f 100644 --- a/spytest/spytest/framework.py +++ b/sonic-mgmt/spytest/spytest/framework.py @@ -3655,6 +3655,62 @@ def get_dut_var(self, dut, name, default=None): return self.module_vars[dut][name] return default + def get_platform_type(self, dut): + """ + returns the platform type as a string + :return: platform type string + :rtype: str + """ + return self._context._tb.get_platform_type(dut) + + def get_rp_ip_address(self, dut): + """ + returns the platform type as a string + :return: platform type string + :rtype: str + """ + return self._context._tb.get_rp_ip_address(dut) + + def get_build_commit_hash(self, dut): + """ + returns the build commit hash as a string + :return: commit hash string + :rtype: str + """ + return self._context._tb.get_build_commit_hash(dut) + + def get_build_time(self, dut): + """ + returns the build time as a string + :return: image build time string + :rtype: str + """ + return self._context._tb.get_build_time(dut) + + def get_sdk_version(self, dut): + """ + returns the build sdk version as a string + :return: sdk version string + :rtype: str + """ + return self._context._tb.get_sdk_version(dut) + + def get_username(self, dut): + """ + returns the username as a string + :return: user name string + :rtype: str + """ + return self._context._tb.get_username(dut) + + def get_password(self, dut): + """ + returns the password as a string + :return: password string + :rtype: str + """ + return self._context._tb.get_password(dut) + def clear_tc_results(self): self._context.tc_results.clear() @@ -4307,6 +4363,9 @@ def do_ssh(self, ipaddress, username, password, **kwargs): def do_ssh_disconnect(self, dut, conn_index): return self.net.do_ssh_disconnect(dut, conn_index) + def login_again(self, dut): + return self._context.net.connect_to_device_current(dut) + def get_current_testid(self): return get_current_nodeid() @@ -5165,7 +5224,8 @@ def _remove_repeat_renamed(items): def _remove_parameterized(items): func_list = [item.location[2] for item in items] - env_parameterized = env.get("SPYTEST_EXCLUDE_PARAMETERIZED", "0") + # Setting the env variable default to 2 to NOT ignore parameterized. 0 and 1 will ignore parameterized + env_parameterized = env.get("SPYTEST_EXCLUDE_PARAMETERIZED", "2") new_items_check_1 = [] if env_parameterized in ["0", "1"]: new_items_check_1 = [] @@ -5271,7 +5331,7 @@ def modify_tests(config, items): _remove_parameterized(items) # remove the repeat renamed - _remove_repeat_renamed(items) + #_remove_repeat_renamed(items) # order the items based on test names list if test_names: diff --git a/spytest/spytest/ftrace.py b/sonic-mgmt/spytest/spytest/ftrace.py similarity index 100% rename from spytest/spytest/ftrace.py rename to sonic-mgmt/spytest/spytest/ftrace.py diff --git a/spytest/spytest/generate.py b/sonic-mgmt/spytest/spytest/generate.py similarity index 100% rename from spytest/spytest/generate.py rename to sonic-mgmt/spytest/spytest/generate.py diff --git a/spytest/spytest/gnmi/__init__.py b/sonic-mgmt/spytest/spytest/gnmi/__init__.py similarity index 100% rename from spytest/spytest/gnmi/__init__.py rename to sonic-mgmt/spytest/spytest/gnmi/__init__.py diff --git a/spytest/spytest/gnmi/__main__.py b/sonic-mgmt/spytest/spytest/gnmi/__main__.py similarity index 100% rename from spytest/spytest/gnmi/__main__.py rename to sonic-mgmt/spytest/spytest/gnmi/__main__.py diff --git a/spytest/spytest/gnmi/conf.yaml b/sonic-mgmt/spytest/spytest/gnmi/conf.yaml similarity index 100% rename from spytest/spytest/gnmi/conf.yaml rename to sonic-mgmt/spytest/spytest/gnmi/conf.yaml diff --git a/spytest/spytest/gnmi/gnmi_get b/sonic-mgmt/spytest/spytest/gnmi/gnmi_get similarity index 100% rename from spytest/spytest/gnmi/gnmi_get rename to sonic-mgmt/spytest/spytest/gnmi/gnmi_get diff --git a/spytest/spytest/gnmi/gnmi_set b/sonic-mgmt/spytest/spytest/gnmi/gnmi_set similarity index 100% rename from spytest/spytest/gnmi/gnmi_set rename to sonic-mgmt/spytest/spytest/gnmi/gnmi_set diff --git a/spytest/spytest/gnmi/translator.py b/sonic-mgmt/spytest/spytest/gnmi/translator.py similarity index 100% rename from spytest/spytest/gnmi/translator.py rename to sonic-mgmt/spytest/spytest/gnmi/translator.py diff --git a/spytest/spytest/gnmi/wrapper.py b/sonic-mgmt/spytest/spytest/gnmi/wrapper.py similarity index 100% rename from spytest/spytest/gnmi/wrapper.py rename to sonic-mgmt/spytest/spytest/gnmi/wrapper.py diff --git a/spytest/spytest/image.py b/sonic-mgmt/spytest/spytest/image.py similarity index 100% rename from spytest/spytest/image.py rename to sonic-mgmt/spytest/spytest/image.py diff --git a/spytest/spytest/infra.py b/sonic-mgmt/spytest/spytest/infra.py similarity index 94% rename from spytest/spytest/infra.py rename to sonic-mgmt/spytest/spytest/infra.py index 943f6bd547b..abd9201b898 100644 --- a/spytest/spytest/infra.py +++ b/sonic-mgmt/spytest/spytest/infra.py @@ -331,6 +331,61 @@ def get_testbed_vars(native=None): """ return getwa().get_testbed_vars(native) +def get_platform_type(dut): + """ + returns the platform type as a string + :return: platform type string + :rtype: str + """ + return getwa().get_platform_type(dut) + +def get_rp_ip_address(dut): + """ + returns the platform type as a string + :return: platform type string + :rtype: str + """ + return getwa().get_rp_ip_address(dut) + +def get_build_commit_hash(dut): + """ + returns the commit unique hash id as a string + :return: commit hash string + :rtype: str + """ + return getwa().get_build_commit_hash(dut) + +def get_build_time(dut): + """ + returns the build type as a string + :return: build time string + :rtype: str + """ + return getwa().get_build_time(dut) + +def get_sdk_version(dut): + """ + returns the sdk version as a string + :return: sdk version string + :rtype: str + """ + return getwa().get_sdk_version(dut) + +def get_username(dut): + """ + returns the username as a string + :return: username string + :rtype: str + """ + return getwa().get_username(dut) + +def get_password(dut): + """ + returns password as a string + :return: password string + :rtype: str + """ + return getwa().get_password(dut) def lock_topology(*args): """ @@ -806,3 +861,6 @@ def abort_module(msgid, *args, **kwargs): def fetch_and_get_mgmt_ip(dut, try_again=3, wait_for_ip=0, wait_for_ready=None): return getwa().fetch_and_get_mgmt_ip(dut, try_again=try_again, wait_for_ip=wait_for_ip, wait_for_ready=wait_for_ready) + +def login_again(dut): + return getwa().login_again(dut) diff --git a/spytest/spytest/item_utils.py b/sonic-mgmt/spytest/spytest/item_utils.py similarity index 100% rename from spytest/spytest/item_utils.py rename to sonic-mgmt/spytest/spytest/item_utils.py diff --git a/spytest/spytest/logger.py b/sonic-mgmt/spytest/spytest/logger.py similarity index 100% rename from spytest/spytest/logger.py rename to sonic-mgmt/spytest/spytest/logger.py diff --git a/spytest/spytest/mail.py b/sonic-mgmt/spytest/spytest/mail.py similarity index 100% rename from spytest/spytest/mail.py rename to sonic-mgmt/spytest/spytest/mail.py diff --git a/spytest/spytest/main.py b/sonic-mgmt/spytest/spytest/main.py similarity index 100% rename from spytest/spytest/main.py rename to sonic-mgmt/spytest/spytest/main.py diff --git a/spytest/spytest/monitor.py b/sonic-mgmt/spytest/spytest/monitor.py similarity index 100% rename from spytest/spytest/monitor.py rename to sonic-mgmt/spytest/spytest/monitor.py diff --git a/spytest/spytest/net.py b/sonic-mgmt/spytest/spytest/net.py similarity index 99% rename from spytest/spytest/net.py rename to sonic-mgmt/spytest/spytest/net.py index e6dcc40fdec..041c4fa8adf 100644 --- a/spytest/spytest/net.py +++ b/sonic-mgmt/spytest/spytest/net.py @@ -10,7 +10,6 @@ import math from random import randint from collections import OrderedDict - import utilities.common as utils import utilities.parallel as putils from utilities.exceptions import DeviceConnectionTimeout @@ -2910,7 +2909,7 @@ def config_db_reload(self, devname, save=False, max_time=0): save_cmd = 'sudo config save -y' reload_cmd = 'sudo config reload -y' - if env.get("SPYTEST_HELPER_CONFIG_DB_RELOAD", "yes") != "no": + if env.get("SPYTEST_HELPER_CONFIG_DB_RELOAD") != "no": largs = ["yes" if save else "no", max_time] output = self.apply_remote(devname, "config-reload", largs) return output @@ -3604,7 +3603,7 @@ def recover_hard(self, devname, msg): def reboot(self, devname, method=None, skip_port_wait=False, onie=False, skip_exception=False, skip_fallback=False, ret_logs=False, max_ready_wait=0, internal=True, - line=None, try_count=1, abort_on_fail=False, **kwargs): + line=None, try_count=1, abort_on_fail=False, clear_skipped_file=False, **kwargs): line = line or utils.get_line_number() method = method or env.get("SPYTEST_DEFAULT_REBOOT_METHOD", "normal") @@ -3614,7 +3613,8 @@ def reboot(self, devname, method=None, skip_port_wait=False, rv = self._reboot(devname, method, skip_port_wait, onie, skip_exception, skip_fallback, ret_logs=ret_logs, max_ready_wait=max_ready_wait, internal=internal, - line=line, abort_on_fail=abort_on_fail, **kwargs) + line=line, abort_on_fail=abort_on_fail, + clear_skipped_file=clear_skipped_file, **kwargs) if not onie: if self.cfg.save_warmboot and method in ["warm", "warm-reboot"]: self.apply_remote(devname, "fetch-warmboot") @@ -3661,8 +3661,7 @@ def _send_reboot(self, devname, cmd, expect, skip_error_check, def _reboot(self, devname, method="normal", skip_port_wait=False, onie=False, skip_exception=False, skip_fallback=False, ret_logs=False, max_ready_wait=0, internal=True, line=None, - abort_on_fail=False, **kwargs): - + abort_on_fail=False, clear_skipped_file=False, **kwargs): devname = self._check_devname(devname) reboot_cmd, reboot_confirm = self.wa.hooks.get_command(devname, "reboot", method) if self.is_filemode(devname): @@ -3688,7 +3687,7 @@ def _reboot(self, devname, method="normal", skip_port_wait=False, if not onie: # wait for the PING to start failing to know reboot started dut_mgmt_ip = str(access["connection_param"]["ip"]) - if not self._wait_mgmt(devname, dut_mgmt_ip, 120): + if not self._wait_mgmt(devname, dut_mgmt_ip, 600): return False # disconnect the device and wait for PING to start passing @@ -3699,6 +3698,7 @@ def _reboot(self, devname, method="normal", skip_port_wait=False, self.wait(wait_after_ping) retry_count = 0 while retry_count < 10: + self.apply_remote(devname, "asan-config", clear_skipped_file=clear_skipped_file) retval = self.connect_to_device(devname) msg = "Connection attempt : '{}', Status: '{}'".format(retry_count, retval) self.dut_log(devname, msg) @@ -4007,12 +4007,15 @@ def _check_md5(self, devname, access, prompt, src_file, remote_file): return skip_transfer - def _upload_file2(self, devname, access, src_file, md5check=True): + def _upload_file2(self, devname, access, src_file, md5check=True, clear_skipped_file=False): remote_dir = "/etc/spytest" if devname not in self.skip_trans_helper: self.skip_trans_helper[devname] = dict() + if clear_skipped_file == True: + self.skip_trans_helper[devname][src_file] = None + remote_file = self.skip_trans_helper[devname].get(src_file, None) if remote_file: return remote_file @@ -4255,7 +4258,7 @@ def make_local_file_path(self, devname=None, filepath=None, suffix=None, parts.append(suffix) return os.path.join(self.logger.logdir, "{}{}".format("_".join(parts), ext or "")) - def _upload_helper_file(self, devname, filename): + def _upload_helper_file(self, devname, filename, clear_skipped_file=False): if not filename: self._upload_helper_file(devname, "port_breakout.py") self._upload_helper_file(devname, "click-helper.py") @@ -4266,7 +4269,7 @@ def _upload_helper_file(self, devname, filename): helper = os.path.join(os.path.dirname(__file__), "remote", filename) helper = os.path.abspath(helper) access = self._get_dev_access(devname) - helper = self._upload_file2(devname, access, helper, md5check=True) + helper = self._upload_file2(devname, access, helper, md5check=True, clear_skipped_file=clear_skipped_file) if not helper and not self.is_filemode(devname): msg = "Failed to upload helper file(s)" raise ValueError(msg) @@ -4290,7 +4293,7 @@ def _add_env(self, args_str, name, default, value=None): args_str = "{} --env {} {}".format(args_str, name, value) return args_str - def apply_remote(self, devname, option_type, value_list=None, **kwargs): + def apply_remote(self, devname, option_type , value_list=None, clear_skipped_file=False, **kwargs): value_list = value_list or [] devname = self._check_devname(devname) access = self._get_dev_access(devname) @@ -4300,7 +4303,7 @@ def apply_remote(self, devname, option_type, value_list=None, **kwargs): # transfer the python file, which is used to apply the files remotely. change_in_tryssh = self.tryssh_switch(devname) - helper = self._upload_helper_file(devname, "spytest-helper.py") + helper = self._upload_helper_file(devname, "spytest-helper.py", clear_skipped_file=clear_skipped_file) if change_in_tryssh: self.tryssh_switch(devname, True) @@ -5817,6 +5820,8 @@ def _parse_cli_opts(self, devname, cmd, **kwargs): if opts.ctype == "click" and opts.exec_mode is not None: if opts.exec_mode.startswith("mgmt"): opts.ctype = "klish" + elif opts.exec_mode.startswith("vtysh-multi-asic"): + opts.ctype = "vtysh-multi-asic" elif opts.exec_mode.startswith("vtysh"): opts.ctype = "vtysh" elif opts.exec_mode.startswith("lldp"): @@ -5826,6 +5831,7 @@ def _parse_cli_opts(self, devname, cmd, **kwargs): opts.skip_error_report = kwargs.get("skip_error_report", False) opts.expect_reboot = kwargs.get("expect_reboot", False) opts.expect_ipchange = kwargs.get("expect_ipchange", False) + opts.asic = kwargs.get("asic", None) opts.max_time = kwargs.get("max_time", 0) opts.min_time = kwargs.get("min_time", 0) opts.reboot_wait = kwargs.get("reboot_wait", 300) @@ -5951,11 +5957,40 @@ def _change_mode_try(self, devname, is_show, cmd, opts): return "", op, "vtysh-user" if opts.conf: return "", op, "vtysh-any-config" - + elif current_mode.startswith("vtysh-multi-asic"): + if opts.ctype == "vtysh-multi-asic": + if is_show: + if current_mode == "vtysh-multi-asic-user": + return ("", op, current_mode) + if cmd.startswith("do "): + return ("", op, "vtysh-any-config") + return ("do ", op, "vtyshany-config") + else: + if current_mode == "vtysh-multi-asic-user": + if cmd in ["exit"]: + return ("", op, "normal-user") + if not opts.conf: + return ("", op, "vtysh-multi-asic-user") + elif current_mode == "vtysh-multi-asic-config": + if cmd in ["end", "exit"]: + return ("", op, "vtysh-multi-asic-user") + if opts.conf: + return ("", op, "vtysh-any-config") + else: + if cmd in ["end"]: + return ("", op, "vtysh-multi-asic-user") + if opts.conf: + return ("", op, "vtysh-any-config") # change the mode if opts.ctype == "click": op = self._change_prompt(devname, normal_user_mode, startmode=current_mode) return "", op, normal_user_mode + elif opts.ctype == "vtysh-multi-asic" and (is_show or not opts.conf): + op = self._change_prompt(devname, "vtysh-multi-asic-user", startmode=current_mode, asic = opts.asic) + return ("", op, "vtysh-multi-asic-user") + elif opts.ctype == "vtysh-multi-asic": + op = self._change_prompt(devname, "vtysh-multi-asic-config", startmode=current_mode, asic = opts.asic) + return ("", op, "vtysh-any-config") elif opts.ctype == "vtysh" and (is_show or not opts.conf): op = self._change_prompt(devname, "vtysh-user", startmode=current_mode) return "", op, "vtysh-user" diff --git a/spytest/spytest/ordyaml.py b/sonic-mgmt/spytest/spytest/ordyaml.py similarity index 100% rename from spytest/spytest/ordyaml.py rename to sonic-mgmt/spytest/spytest/ordyaml.py diff --git a/spytest/spytest/paths.py b/sonic-mgmt/spytest/spytest/paths.py similarity index 100% rename from spytest/spytest/paths.py rename to sonic-mgmt/spytest/spytest/paths.py diff --git a/spytest/spytest/profile.py b/sonic-mgmt/spytest/spytest/profile.py similarity index 100% rename from spytest/spytest/profile.py rename to sonic-mgmt/spytest/spytest/profile.py diff --git a/spytest/spytest/pytest.ini b/sonic-mgmt/spytest/spytest/pytest.ini similarity index 100% rename from spytest/spytest/pytest.ini rename to sonic-mgmt/spytest/spytest/pytest.ini diff --git a/spytest/spytest/remote/asan.bashrc b/sonic-mgmt/spytest/spytest/remote/asan.bashrc similarity index 100% rename from spytest/spytest/remote/asan.bashrc rename to sonic-mgmt/spytest/spytest/remote/asan.bashrc diff --git a/spytest/spytest/remote/click-helper.py b/sonic-mgmt/spytest/spytest/remote/click-helper.py similarity index 100% rename from spytest/spytest/remote/click-helper.py rename to sonic-mgmt/spytest/spytest/remote/click-helper.py diff --git a/sonic-mgmt/spytest/spytest/remote/frr-pythontools_8.5.1-0~ubuntu18.04.1_all.deb b/sonic-mgmt/spytest/spytest/remote/frr-pythontools_8.5.1-0~ubuntu18.04.1_all.deb new file mode 100644 index 00000000000..918b42c2330 Binary files /dev/null and b/sonic-mgmt/spytest/spytest/remote/frr-pythontools_8.5.1-0~ubuntu18.04.1_all.deb differ diff --git a/spytest/spytest/remote/gcov-helper.sh b/sonic-mgmt/spytest/spytest/remote/gcov-helper.sh similarity index 100% rename from spytest/spytest/remote/gcov-helper.sh rename to sonic-mgmt/spytest/spytest/remote/gcov-helper.sh diff --git a/spytest/spytest/remote/port_breakout.py b/sonic-mgmt/spytest/spytest/remote/port_breakout.py similarity index 100% rename from spytest/spytest/remote/port_breakout.py rename to sonic-mgmt/spytest/spytest/remote/port_breakout.py diff --git a/spytest/spytest/remote/service-udp.py b/sonic-mgmt/spytest/spytest/remote/service-udp.py similarity index 100% rename from spytest/spytest/remote/service-udp.py rename to sonic-mgmt/spytest/spytest/remote/service-udp.py diff --git a/spytest/spytest/remote/spytest-helper.py b/sonic-mgmt/spytest/spytest/remote/spytest-helper.py similarity index 94% rename from spytest/spytest/remote/spytest-helper.py rename to sonic-mgmt/spytest/spytest/remote/spytest-helper.py index fa833ead084..91f21a67672 100644 --- a/spytest/spytest/remote/spytest-helper.py +++ b/sonic-mgmt/spytest/spytest/remote/spytest-helper.py @@ -23,15 +23,17 @@ g_debug = False syslog_levels = ['emerg', 'alert', 'crit', 'err', 'warning', 'notice', 'info', 'debug', 'none'] config_db_operation_retry = 20 - var_log_dir = "/var/log" spytest_dir = "/etc/spytest" frr_dir = "/etc/sonic/frr" - port_config_file = "/usr/share/sonic/device" minigraph_file = "/etc/sonic/minigraph.xml" config_file = "/etc/sonic/config_db.json" tmp_config_file = "/tmp/config_db.json" +copp_config_file = "/etc/sonic/copp_cfg.json" +tmp_copp_file = "/tmp/copp.json" +frr_config_file = "/etc/sonic/frr/frr.conf" +tmp_frr_file = "/tmp/frr.conf" rsyslog_conf_file = "/etc/rsyslog.d/99-default.conf" tmp_rsyslog_conf_file = "/tmp/rsyslog-default.conf" copp_config_file = "/etc/swss/config.d/00-copp.config.json" @@ -41,6 +43,7 @@ kdump_tar_file_name = "/tmp/allkdumpfiles.tar.gz" warmboot_tar_file_name = "/tmp/warmboot.tar.gz" + frr_config_file = os.path.join(frr_dir, "frr.conf") bgp_config_file = os.path.join(frr_dir, "bgpd.conf") pim_config_file = os.path.join(frr_dir, "pimd.conf") @@ -94,10 +97,24 @@ def read_port_inifile(): """ Platform, HwSKU = get_hw_values() int_file = "{}/{}/{}/port_config.ini".format(port_config_file, Platform, HwSKU) - cmd = "cat {} | tail -1".format(int_file) - output = execute_check_cmd(cmd) - port = output.split(" ")[0] - return port + if os.path.exists(int_file): + files = [int_file] + else: + files = [] + for i in range(32): + int_file = "{}/{}/{}/{}/port_config.ini".format(port_config_file, Platform, HwSKU, i) + if os.path.exists(int_file): + files.append(int_file) + else: + break + + ports = [] + for curr_file in files: + cmd = "cat {} | grep -v BP | tail -1".format(curr_file) + output = execute_check_cmd(cmd) + port = output.split()[0] + ports.append(port) + return ports def get_port_status(port): @@ -267,6 +284,28 @@ def get_hw_values(): hwsku = match.group(1) return platform, hwsku +def is_multi_asic(): + '''Check if the dut is a multi-asic systme or not + ''' + out=parse_show_platform_summary() + if "ASIC Count" not in out or int(out["ASIC Count"])==1: + return False + else: + return True + +def parse_show_platform_summary(): + platform_summ = execute_check_cmd("show platform summary").split("\n") + if not platform_summ: + raise AssertionError('No information provided for parsing') + result={} + for line in platform_summ: + if not line: + continue + fields=line.split(":") + result[fields[0]]=fields[1] + return result + + def read_file(filepath): if sys.version_info[0] >= 3: @@ -484,8 +523,11 @@ def init_clean(flags): def init_ta_config(flags, profile): + (Platform, HwSKU) = get_hw_values() init_clean(flags) - + output_ps = execute_check_cmd("show platform summary") + print("output_ps") + print(output_ps) if profile == "na": create_default_base_config() elif profile == "l2" or profile == "l3": @@ -521,7 +563,17 @@ def create_default_base_config(): execute_check_cmd("rm -f {}".format(filename)) # save the config to init file. - execute_check_cmd("config save -y {}".format(init_config_file)) + + if is_multi_asic(): + file = init_config_file + file0 = file + asic_count = parse_show_platform_summary()['ASIC Count'] + # init_config_file = '/etc/spytest/init_config_db.json' + file_prefix = file.split(".")[0] + file1,file2,file3 = [file_prefix+str(i)+".json" for i in range(int(asic_count))] + execute_check_cmd("config save -y {},{},{},{}".format(file0,file1,file2,file3)) + else: + execute_check_cmd("config save -y {}".format(init_config_file)) # parse the init config file file_dict = read_json(init_config_file) @@ -624,14 +676,15 @@ def wait_for_ports(port_init_wait, poll_for_ports): return # read last port number - port_num = read_port_inifile() + ports = read_port_inifile() # Wait for last port to be available - for _ in range(0, int(port_init_wait / 5)): - port_info = get_port_status(port_num) - if port_info and port_num in port_info: - break - execute_check_cmd("sleep 5", trace_cmd=False) + for port_num in ports: + for _ in range(0, int(port_init_wait / 5)): + port_info = get_port_status(port_num) + if port_info and port_num in port_info: + break + execute_check_cmd("sleep 5", trace_cmd=False) # check if the MAC address is present in config_db.json @@ -661,7 +714,6 @@ def do_config_reload(method, filename=""): show_file_content(filename, "config reload failed") print("CONFIG-RELOAD-ISSUED") - def set_port_defaults(method, breakout, speed, port_init_wait, poll_for_ports): if g_breakout_native: script = "/usr/local/bin/port_breakout.py" @@ -751,9 +803,12 @@ def is_integrated_vtysh_config(): def vtysh_save(): - execute_cmd_retry("vtysh -c write file", config_db_operation_retry) - execute_check_cmd("ls -ltir {}".format(frr_dir), skip_error=True) + if is_multi_asic(): + execute_cmd_retry("vtysh -n 0 -c write file", config_db_operation_retry) + else: + execute_cmd_retry("vtysh -c write file", config_db_operation_retry) print("integrated-vtysh-config = {}".format(is_integrated_vtysh_config())) + execute_check_cmd("ls -ltir {}".format(frr_dir), skip_error=True) def save_module_config(): @@ -813,8 +868,19 @@ def apply_ta_config(method, port_init_wait, poll_for_ports, config_type): # Save current config in DB to temp file to and compare it with base/module config_db.json file # If there is a change, add config to list. - execute_check_cmd("config save -y {}".format(tmp_config_file), skip_error=True) + if is_multi_asic(): + file = init_config_file + file0 = file + asic_count = parse_show_platform_summary()['ASIC Count'] + # init_config_file = '/etc/spytest/init_config_db.json' + file_prefix = file.split(".")[0] + file1,file2,file3 = [file_prefix+str(i)+".json" for i in range(int(asic_count))] + execute_check_cmd("config save -y {},{},{},{}".format(file0,file1,file2,file3), skip_error=True) + else: + execute_check_cmd("config save -y {}".format(init_config_file), skip_error=True) if not get_file_diff(tmp_config_file, ta_config_file, g_debug): + # tmp_config_file = '/tmp/config_db.json' + # ta_config_file = '/etc/spytest/init_config_db.json' trace("TA Config File Differs") changed_files.append("config") @@ -941,11 +1007,15 @@ def apply_ta_config(method, port_init_wait, poll_for_ports, config_type): if "config" in changed_files or method in ["force-reload"]: ensure_mac_address(ta_config_file) # execute_check_cmd("echo before reload;date") + print("##### Doing config reload right now########") do_config_reload(method, ta_config_file) # execute_check_cmd("echo after reload;date") if "frr" in changed_files or "bgp" in changed_files or method in ["force-reload"]: - execute_cmds(["systemctl restart bgp"]) - execute_cmds(["sleep 10"]) + result = subprocess.run(['systemctl', 'is-enabled', 'bgp.service'], \ + capture_output=True, text=True) + if 'masked' not in result.stdout: + execute_cmds(["systemctl restart bgp"]) + execute_cmds(["sleep 10"]) # Re-Write the base/module frr.conf, this is to allow the hook level code to get saved in frr.conf. vtysh_save() @@ -1388,6 +1458,8 @@ def do_service_get(name, clear=True): script_arguments = args.run_test[1:] run_test(script_fullname, script_arguments) elif args.init_ta_config: + print("printing init ta arg") + print(args.init_ta_config) init_ta_config(args.init_ta_config, args.config_profile) elif args.save_base_config: save_base_config() diff --git a/spytest/spytest/rest.py b/sonic-mgmt/spytest/spytest/rest.py similarity index 100% rename from spytest/spytest/rest.py rename to sonic-mgmt/spytest/spytest/rest.py diff --git a/spytest/spytest/result.py b/sonic-mgmt/spytest/spytest/result.py similarity index 100% rename from spytest/spytest/result.py rename to sonic-mgmt/spytest/spytest/result.py diff --git a/spytest/spytest/rps.py b/sonic-mgmt/spytest/spytest/rps.py similarity index 80% rename from spytest/spytest/rps.py rename to sonic-mgmt/spytest/spytest/rps.py index b65a2be309a..ab8eb75628a 100644 --- a/spytest/spytest/rps.py +++ b/sonic-mgmt/spytest/spytest/rps.py @@ -84,6 +84,15 @@ def __init__(self, model, ip, port, outlet, username, password, logger=None, self.disc_delay = 10 self.off_delay = 30 self.on_delay = 120 + elif self.model == "PX2": + self.login_prompt = "Welcome to PX2 CLI" + self.password_prompt = "Password:" + self.base_prompt = "#" + self.fail_msg = "Login failed." + self.disc_delay = 10 + self.off_delay = 30 + self.on_delay = 120 + elif self.model == "APCMIB": pass elif self.model == "ServerTech": @@ -427,22 +436,28 @@ def reset(self, disc=True, on_delay=None, off_delay=None, outlet=None, log_file= return False retval = True - if self.model == "Raritan": - retval = self.off_on(False, 0, off_delay, outlet) - elif self.model == "PX3": - self._write("power outlets {} cycle /y".format(outlet), self.base_prompt) - elif self.model == "APCMIB": - self.snmp_set(outlet, 3) - elif self.model == "ServerTech": - self._write("reboot {}".format(outlet), self.base_prompt) - # retval = self.off_on(False, 0, off_delay, outlet) - elif self.model == "Avocent" or self.model == "AvocentRoot": - retval = self.off_on(False, 0, off_delay, outlet) - elif self.model in ["vsh", "svsh", "lxc", "virsh"]: - retval = self.off_on(False, 0, off_delay, outlet) + if type(outlet)!=list: + outlets=[outlet] else: - msg = "TODO: off {}".format(self.model) - self.logmsg(msg, lvl=logging.WARNING) + outlets=outlet + + for _outlet in outlets: + if self.model == "Raritan": + retval = self.off_on(False, 0, off_delay, _outlet) + elif self.model in ["PX2","PX3"]: + self._write("power outlets {} cycle /y".format(_outlet), self.base_prompt) + elif self.model == "APCMIB": + self.snmp_set(outlet, 3) + elif self.model == "ServerTech": + self._write("reboot {}".format(_outlet), self.base_prompt) + # retval = self.off_on(False, 0, off_delay, outlet) + elif self.model == "Avocent" or self.model == "AvocentRoot": + retval = self.off_on(False, 0, off_delay, _outlet) + elif self.model in ["vsh", "svsh", "lxc", "virsh"]: + retval = self.off_on(False, 0, off_delay, _outlet) + else: + msg = "TODO: off {}".format(self.model) + self.logmsg(msg, lvl=logging.WARNING) # wait for on delay if retval and on_delay > 0: @@ -471,49 +486,55 @@ def off(self, disc=True, off_delay=None, outlet=None, log_file=None): return False retval = True - if self.model == "Raritan": - cmd = "set /system1/outlet{} powerstate=off".format(outlet) - self._write(cmd, self.base_prompt) - elif self.model == "PX3": - self._write("power outlets {} off /y".format(outlet), self.base_prompt) - elif self.model == "APCMIB": - self.snmp_set(outlet, 2) - elif self.model == "ServerTech": - self._write("off {}".format(outlet), self.base_prompt) - elif self.model == "Avocent" or self.model == "AvocentRoot": - if not self.pdu_id: - self.logmsg("PDU_ID must be set for Avocent", lvl=logging.ERROR) - else: - self._cmd_avocent("off", disc, outlet) - elif self.model == 'pConnect': - res = self._rest_send(params={'action': 'off'}) - retval = bool('exit code: 0' in res.text) - elif self.model in ["vsh"]: - cmd = "vsh-rps off {}".format(outlet) - self._write("", self.base_prompt.replace("\\", "")) - self._write(cmd, "The device is powered off successfully", timeout=300) - self._write("", self.base_prompt.replace("\\", "")) - elif self.model in ["svsh"]: - cmd = "vsh-rps off {}".format(outlet) - expected = ["The device is powered off successfully"] - expected.append("The device is not on") - self._write("", self.base_prompt.replace("\\", "")) - retval = self._write(cmd, expected, timeout=300, prompt=self.base_prompt) - elif self.model in ["lxc"]: - cmd = "lxc-rps off {}".format(outlet) - expected = ["The device is powered off successfully"] - expected.append("The device is not on") - self._write("", self.base_prompt.replace("\\", "")) - retval = self._write(cmd, expected, timeout=300, prompt=self.base_prompt) - elif self.model in ["virsh"]: - cmd = "virsh-rps off {}".format(outlet) - expected = ["The device is powered off successfully"] - expected.append("The device is not on") - self._write("", self.base_prompt.replace("\\", "")) - retval = self._write(cmd, expected, timeout=300, prompt=self.base_prompt) + if type(outlet)!=list: + outlets=[outlet] else: - msg = "TODO: off {}".format(self.model) - self.logmsg(msg, lvl=logging.WARNING) + outlets=outlet + + for _outlet in outlets: + if self.model == "Raritan": + cmd = "set /system1/outlet{} powerstate=off".format(_outlet) + self._write(cmd, self.base_prompt) + elif self.model in ["PX2","PX3"]: + self._write("power outlets {} off /y".format(_outlet), self.base_prompt) + elif self.model == "APCMIB": + self.snmp_set(outlet, 2) + elif self.model == "ServerTech": + self._write("off {}".format(_outlet), self.base_prompt) + elif self.model == "Avocent" or self.model == "AvocentRoot": + if not self.pdu_id: + self.logmsg("PDU_ID must be set for Avocent", lvl=logging.ERROR) + else: + self._cmd_avocent("off", disc, _outlet) + elif self.model == 'pConnect': + res = self._rest_send(params={'action': 'off'}) + retval = bool('exit code: 0' in res.text) + elif self.model in ["vsh"]: + cmd = "vsh-rps off {}".format(_outlet) + self._write("", self.base_prompt.replace("\\", "")) + self._write(cmd, "The device is powered off successfully", timeout=300) + self._write("", self.base_prompt.replace("\\", "")) + elif self.model in ["svsh"]: + cmd = "vsh-rps off {}".format(_outlet) + expected = ["The device is powered off successfully"] + expected.append("The device is not on") + self._write("", self.base_prompt.replace("\\", "")) + retval = self._write(cmd, expected, timeout=300, prompt=self.base_prompt) + elif self.model in ["lxc"]: + cmd = "lxc-rps off {}".format(_outlet) + expected = ["The device is powered off successfully"] + expected.append("The device is not on") + self._write("", self.base_prompt.replace("\\", "")) + retval = self._write(cmd, expected, timeout=300, prompt=self.base_prompt) + elif self.model in ["virsh"]: + cmd = "virsh-rps off {}".format(_outlet) + expected = ["The device is powered off successfully"] + expected.append("The device is not on") + self._write("", self.base_prompt.replace("\\", "")) + retval = self._write(cmd, expected, timeout=300, prompt=self.base_prompt) + else: + msg = "TODO: off {}".format(self.model) + self.logmsg(msg, lvl=logging.WARNING) # wait for off delay if retval and off_delay > 0: @@ -542,43 +563,49 @@ def on(self, disc=True, on_delay=None, outlet=None, log_file=None): return False retval = True - if self.model == "Raritan": - cmd = "set /system1/outlet{} powerstate=on".format(outlet) - self._write(cmd, self.base_prompt) - elif self.model == "PX3": - self._write("power outlets {} on /y".format(outlet), self.base_prompt) - elif self.model == "APCMIB": - self.snmp_set(outlet, 1) - elif self.model == "ServerTech": - self._write("on {}".format(outlet), self.base_prompt) - elif self.model == "Avocent" or self.model == "AvocentRoot": - if not self.pdu_id: - self.logmsg("PDU_ID must be set for Avocent", lvl=logging.ERROR) - else: - self._cmd_avocent("on", disc, outlet) - elif self.model == 'pConnect': - res = self._rest_send(params={'action': 'on'}) - retval = bool('exit code: 0' in res.text) - elif self.model in ["vsh"]: - cmd = "vsh-rps on {}".format(outlet) - self._write("", self.base_prompt.replace("\\", "")) - self._write(cmd, "The device is powered on successfully", timeout=30) - self._write("", self.base_prompt.replace("\\", "")) - elif self.model in ["svsh"]: - cmd = "vsh-rps on {}".format(outlet) - self._write("", self.base_prompt.replace("\\", "")) - self._write(cmd, "The device is powered on successfully", timeout=30, prompt=self.base_prompt) - elif self.model in ["lxc"]: - cmd = "lxc-rps on {}".format(outlet) - self._write("", self.base_prompt.replace("\\", "")) - self._write(cmd, "The device is powered on successfully", timeout=30, prompt=self.base_prompt) - elif self.model in ["virsh"]: - cmd = "virsh-rps on {}".format(outlet) - self._write("", self.base_prompt.replace("\\", "")) - self._write(cmd, "The device is powered on successfully", timeout=30, prompt=self.base_prompt) + if type(outlet)!=list: + outlets=[outlet] else: - msg = "TODO: on {}".format(self.model) - self.logmsg(msg, lvl=logging.WARNING) + outlets=outlet + + for _outlet in outlets: + if self.model == "Raritan": + cmd = "set /system1/outlet{} powerstate=on".format(_outlet) + self._write(cmd, self.base_prompt) + elif self.model in ["PX2","PX3"]: + self._write("power outlets {} on /y".format(_outlet), self.base_prompt) + elif self.model == "APCMIB": + self.snmp_set(outlet, 1) + elif self.model == "ServerTech": + self._write("on {}".format(_outlet), self.base_prompt) + elif self.model == "Avocent" or self.model == "AvocentRoot": + if not self.pdu_id: + self.logmsg("PDU_ID must be set for Avocent", lvl=logging.ERROR) + else: + self._cmd_avocent("on", disc, _outlet) + elif self.model == 'pConnect': + res = self._rest_send(params={'action': 'on'}) + retval = bool('exit code: 0' in res.text) + elif self.model in ["vsh"]: + cmd = "vsh-rps on {}".format(_outlet) + self._write("", self.base_prompt.replace("\\", "")) + self._write(cmd, "The device is powered on successfully", timeout=30) + self._write("", self.base_prompt.replace("\\", "")) + elif self.model in ["svsh"]: + cmd = "vsh-rps on {}".format(_outlet) + self._write("", self.base_prompt.replace("\\", "")) + self._write(cmd, "The device is powered on successfully", timeout=30, prompt=self.base_prompt) + elif self.model in ["lxc"]: + cmd = "lxc-rps on {}".format(_outlet) + self._write("", self.base_prompt.replace("\\", "")) + self._write(cmd, "The device is powered on successfully", timeout=30, prompt=self.base_prompt) + elif self.model in ["virsh"]: + cmd = "virsh-rps on {}".format(_outlet) + self._write("", self.base_prompt.replace("\\", "")) + self._write(cmd, "The device is powered on successfully", timeout=30, prompt=self.base_prompt) + else: + msg = "TODO: on {}".format(self.model) + self.logmsg(msg, lvl=logging.WARNING) # wait for on delay if retval and on_delay > 0: diff --git a/spytest/spytest/splugin.py b/sonic-mgmt/spytest/spytest/splugin.py similarity index 100% rename from spytest/spytest/splugin.py rename to sonic-mgmt/spytest/spytest/splugin.py diff --git a/spytest/spytest/spydist.py b/sonic-mgmt/spytest/spytest/spydist.py similarity index 100% rename from spytest/spytest/spydist.py rename to sonic-mgmt/spytest/spytest/spydist.py diff --git a/spytest/spytest/st_time.py b/sonic-mgmt/spytest/spytest/st_time.py similarity index 100% rename from spytest/spytest/st_time.py rename to sonic-mgmt/spytest/spytest/st_time.py diff --git a/spytest/spytest/suite.py b/sonic-mgmt/spytest/spytest/suite.py similarity index 100% rename from spytest/spytest/suite.py rename to sonic-mgmt/spytest/spytest/suite.py diff --git a/spytest/spytest/syslog.py b/sonic-mgmt/spytest/spytest/syslog.py similarity index 100% rename from spytest/spytest/syslog.py rename to sonic-mgmt/spytest/spytest/syslog.py diff --git a/spytest/spytest/tcmap.py b/sonic-mgmt/spytest/spytest/tcmap.py similarity index 100% rename from spytest/spytest/tcmap.py rename to sonic-mgmt/spytest/spytest/tcmap.py diff --git a/spytest/spytest/template.py b/sonic-mgmt/spytest/spytest/template.py similarity index 100% rename from spytest/spytest/template.py rename to sonic-mgmt/spytest/spytest/template.py diff --git a/spytest/spytest/termserv.py b/sonic-mgmt/spytest/spytest/termserv.py similarity index 100% rename from spytest/spytest/termserv.py rename to sonic-mgmt/spytest/spytest/termserv.py diff --git a/spytest/spytest/testbed.py b/sonic-mgmt/spytest/spytest/testbed.py similarity index 98% rename from spytest/spytest/testbed.py rename to sonic-mgmt/spytest/spytest/testbed.py index 0f60d44f5dd..befd5a4fd50 100644 --- a/spytest/spytest/testbed.py +++ b/sonic-mgmt/spytest/spytest/testbed.py @@ -16,6 +16,7 @@ from spytest.st_time import get_elapsed import utilities.common as utils +#from utilities.profile import get_cache, set_cache from utilities.cache import get_cache, set_cache testbeds_root = os.path.join(os.path.dirname(__file__), '..') @@ -214,7 +215,9 @@ def get_dut_access(self, dut_id): else: retval["access_model"] = "{}_terminal".format(device_model) retval["device_model"] = device_model + return retval + return None def get_device_info(self, name, dtype=None): @@ -556,7 +559,7 @@ def _build_profile_link_info(self, profile): continue # support range format for links - incr = linfo.get("incr", "1") + incr = linfo.get("incr", 1) end_ports = self.expand_range(EndPort, incr) if len(end_ports) > 1: from_ports = self.expand_range(link, incr) @@ -683,6 +686,7 @@ def _build_profile_link_info(self, profile): return True def expand_range(self, value, incr=1): + value = str(value) retval, prefix = [], "Ethernet" if "-" not in value or not value.startswith(prefix): return value.split(",") @@ -725,7 +729,6 @@ def _override_values(self, src, dst): self._override_values(value, dst[name]) elif isinstance(dst[name], list): print("TODO list update {} - {}".format(name, value)) - # import pdb;pdb.set_trace() else: # print("leaf {} - {}".format(name, value)) dst[name] = value @@ -818,6 +821,7 @@ def _load_yaml(self, filename): for profile in self.get_all_profiles(): self._init_topology(profile) + return True except Exception: @@ -1542,6 +1546,55 @@ def get_topo(self, name0=True, props=False): retval.append("{}{}:{}".format(dname, pname.upper(), pval)) return ",".join(retval) if retval else "D1" + def get_platform_type(self,dut1): + #for dut, dinfo in self.topology.devices.items(): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + if dut1 == dut: + return dinfo.platform_type + return None + + def get_rp_ip_address(self,dut1): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + #for dut, dinfo in self.topology.devices.items(): + if dut1 == dut: + return dinfo.rpip + return None + + def get_build_commit_hash(self,dut1): + #for dut, dinfo in self.topology.devices.items(): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + if dut1 == dut: + return dinfo.build_commit_hash + return None + + def get_build_time(self,dut1): + # for dut, dinfo in self.topology.devices.items(): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + if dut1 == dut: + return dinfo.build_time + return None + + def get_sdk_version(self,dut1): + #for dut, dinfo in self.topology.devices.items(): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + if dut1 == dut: + return dinfo.sdk_version + return None + + def get_username(self,dut1): + #for dut, dinfo in self.topology.devices.items(): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + if dut1 == dut: + return dinfo.credentials.username + return None + + def get_password(self,dut1): + #for dut, dinfo in self.topology.devices.items(): + for dut, dinfo in self.topologies[self.current_topo_index]['devices'].items(): + if dut1 == dut: + return dinfo.credentials.password + return None + def _check_min_links(self, from_type, to_type, res, errs): from_dev = self.get_device_name("{}{}".format(from_type, res.group(1))) to_dev = self.get_device_name("{}{}".format(to_type, res.group(2))) @@ -1977,7 +2030,7 @@ def read_need(name, dut, props): if d in props and name in props[d]: return props[d][name] return None - + @staticmethod def trace_need_has(log, dut, dut_tb, props, name, phase, need, has=None): if not log: diff --git a/spytest/spytest/tgen/__init__.py b/sonic-mgmt/spytest/spytest/tgen/__init__.py similarity index 100% rename from spytest/spytest/tgen/__init__.py rename to sonic-mgmt/spytest/spytest/tgen/__init__.py diff --git a/spytest/spytest/tgen/init.py b/sonic-mgmt/spytest/spytest/tgen/init.py similarity index 76% rename from spytest/spytest/tgen/init.py rename to sonic-mgmt/spytest/spytest/tgen/init.py index 2e836918254..f08b30b0816 100644 --- a/spytest/spytest/tgen/init.py +++ b/sonic-mgmt/spytest/spytest/tgen/init.py @@ -7,10 +7,10 @@ tcl_custom_pkgdir = os.path.abspath(os.path.dirname(__file__)) py_version = platform.python_version() - def tg_stc_load(version, logger, logs_path=None): - stc_version_map = {"4.67": "4.67", "4.91": "4.91"} + + stc_version_map = {"4.67": "4.67", "4.91": "4.91", "5.03": "5.03", "5.05": "5.05", "5.17": "5.17", "5.2": "5.20","5.45":"5.45"} # verify STC version provided version_string = str(version) @@ -23,8 +23,9 @@ def tg_stc_load(version, logger, logs_path=None): # check if STC root folder is found stc_root = os.path.join(tgen_path, "stc") + if not os.path.exists(stc_root): - logger.error("STC: not installed.") + logger.error("STC: not installed. stc_root", stc_root) return None # build STC version root folder @@ -34,15 +35,18 @@ def tg_stc_load(version, logger, logs_path=None): # check if STC version root folder is found if not os.path.exists(stc_ver_root): - logger.error("STC: not installed..") + logger.error("STC: not installed..stc_ver_root ", stc_ver_root) return None # build STC app root folder - stc_app_root = os.path.join(stc_ver_root, "Spirent_TestCenter_Application_Linux") + if version_string == "5.45": + stc_app_root = os.path.join(stc_ver_root, "Spirent_TestCenter_5.45/Spirent_TestCenter_Application_Linux") + else: + stc_app_root = os.path.join(stc_ver_root, "Spirent_TestCenter_Application_Linux") # check if STC app root folder is found if not os.path.exists(stc_app_root): - logger.error("STC: not installed...") + logger.error("STC: not installed... stc_app_root", stc_app_root) return None stc_hl_src = stc_app_root + '/HltAPI/SourceCode' @@ -65,14 +69,19 @@ def tg_stc_load(version, logger, logs_path=None): old_ldpath = os.getenv("LD_LIBRARY_PATH") ldpath = [old_ldpath] if old_ldpath else [] ldpath.append(stc_app_root) - os.environ['LD_LIBRARY_PATH'] = ":".join(ldpath) + #os.environ['LD_LIBRARY_PATH'] = ":".join(ldpath) + os.environ['LD_LIBRARY_PATH'] = '/data/projects/scid/tgen/stc/5.45/Spirent_TestCenter_5.45/Spirent_TestCenter_Application_Linux/' os.environ['STC_VERSION'] = version_string os.environ['STC_INSTALL_DIR'] = stc_app_root os.environ['STC_PRIVATE_INSTALL_DIR'] = stc_app_root - os.environ["STC_TCL"] = tclsh - os.environ['TCLLIBPATH'] = "{} {} {} /usr/lib".format(stc_hl_src, tcl_custom_pkgdir, tcl_lib_path) - os.environ['HLPYAPI_LOG'] = logs_path or os.getenv("SPYTEST_USER_ROOT") + #os.environ["STC_TCL"] = tclsh + os.environ["STC_TCL"] = '/data/projects/scid/tcl/bin/tclsh8.5' + #os.environ['TCLLIBPATH'] = "{} {} {} /usr/lib".format(stc_hl_src, tcl_custom_pkgdir, tcl_lib_path) + os.environ['TCLLIBPATH'] = "/data/projects/scid/tgen/stc/5.45/Spirent_TestCenter_5.45/Spirent_TestCenter_Application_Linux/HltAPI/SourceCode /data/projects/scid/tgen/stc/5.45/Spirent_TestCenter_5.45/Spirent_TestCenter_Application_Linux" + #os.environ['HLPYAPI_LOG'] = logs_path or os.getenv("SPYTEST_USER_ROOT") + os.environ['HLPYAPI_LOG'] = '/data/logs' + os.environ['HOME'] = logs_path or os.getenv("SPYTEST_USER_ROOT") sys.path.insert(0, tcl_path) @@ -90,7 +99,10 @@ def tg_ixia_load(version, logger, logs_path=None): "9.2": "9.20", "9.20": "9.20", "9.24": "9.24", "9.31": "9.31", "9.27": "9.27", "9.28": "9.28", - "9.3": "9.30", "9.30": "9.30"} + "9.3": "9.30", "9.30": "9.30", + "10.0": "10.00", "10.25":"10.25", + "11.0": "11.00", "11.00": "11.00", + "11.1": "11.10", "11.10": "11.10"} version_string = str(version) version_string = ixia_version_map.get(version_string, version_string) if (version_string not in ixia_version_map @@ -111,6 +123,10 @@ def tg_ixia_load(version, logger, logs_path=None): '9.28': 'HLTSET257', '9.30': 'HLTSET259', '9.31': 'HLTSET261', + '10.00': 'HLTSET273', + '10.25': 'HLTSET281', + '11.00': 'HLTSET285', + '11.10': 'HLTSET287' } ix_path = '' if os.path.exists(os.path.join(tgen_path, version_string)) else "ixia" diff --git a/spytest/spytest/tgen/pkgIndex.tcl b/sonic-mgmt/spytest/spytest/tgen/pkgIndex.tcl similarity index 100% rename from spytest/spytest/tgen/pkgIndex.tcl rename to sonic-mgmt/spytest/spytest/tgen/pkgIndex.tcl diff --git a/spytest/spytest/tgen/scapy/afpacket.py b/sonic-mgmt/spytest/spytest/tgen/scapy/afpacket.py similarity index 100% rename from spytest/spytest/tgen/scapy/afpacket.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/afpacket.py diff --git a/spytest/spytest/tgen/scapy/bgp_exabgp.py b/sonic-mgmt/spytest/spytest/tgen/scapy/bgp_exabgp.py similarity index 100% rename from spytest/spytest/tgen/scapy/bgp_exabgp.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/bgp_exabgp.py diff --git a/spytest/spytest/tgen/scapy/dhcps.py b/sonic-mgmt/spytest/spytest/tgen/scapy/dhcps.py similarity index 100% rename from spytest/spytest/tgen/scapy/dhcps.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/dhcps.py diff --git a/spytest/spytest/tgen/scapy/dicts.py b/sonic-mgmt/spytest/spytest/tgen/scapy/dicts.py similarity index 100% rename from spytest/spytest/tgen/scapy/dicts.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/dicts.py diff --git a/spytest/spytest/tgen/scapy/dot1x.py b/sonic-mgmt/spytest/spytest/tgen/scapy/dot1x.py similarity index 100% rename from spytest/spytest/tgen/scapy/dot1x.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/dot1x.py diff --git a/spytest/spytest/tgen/scapy/driver.py b/sonic-mgmt/spytest/spytest/tgen/scapy/driver.py similarity index 100% rename from spytest/spytest/tgen/scapy/driver.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/driver.py diff --git a/spytest/spytest/tgen/scapy/emulation.py b/sonic-mgmt/spytest/spytest/tgen/scapy/emulation.py similarity index 100% rename from spytest/spytest/tgen/scapy/emulation.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/emulation.py diff --git a/spytest/spytest/tgen/scapy/exabgp_dump.py b/sonic-mgmt/spytest/spytest/tgen/scapy/exabgp_dump.py similarity index 100% rename from spytest/spytest/tgen/scapy/exabgp_dump.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/exabgp_dump.py diff --git a/spytest/spytest/tgen/scapy/exabgp_http_api.py b/sonic-mgmt/spytest/spytest/tgen/scapy/exabgp_http_api.py similarity index 100% rename from spytest/spytest/tgen/scapy/exabgp_http_api.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/exabgp_http_api.py diff --git a/spytest/spytest/tgen/scapy/exabgp_routes.py b/sonic-mgmt/spytest/spytest/tgen/scapy/exabgp_routes.py similarity index 100% rename from spytest/spytest/tgen/scapy/exabgp_routes.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/exabgp_routes.py diff --git a/spytest/spytest/tgen/scapy/funcs.py b/sonic-mgmt/spytest/spytest/tgen/scapy/funcs.py similarity index 100% rename from spytest/spytest/tgen/scapy/funcs.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/funcs.py diff --git a/spytest/spytest/tgen/scapy/interface.py b/sonic-mgmt/spytest/spytest/tgen/scapy/interface.py similarity index 100% rename from spytest/spytest/tgen/scapy/interface.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/interface.py diff --git a/spytest/spytest/tgen/scapy/lock.py b/sonic-mgmt/spytest/spytest/tgen/scapy/lock.py similarity index 100% rename from spytest/spytest/tgen/scapy/lock.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/lock.py diff --git a/spytest/spytest/tgen/scapy/logger.py b/sonic-mgmt/spytest/spytest/tgen/scapy/logger.py similarity index 100% rename from spytest/spytest/tgen/scapy/logger.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/logger.py diff --git a/spytest/spytest/tgen/scapy/or_event.py b/sonic-mgmt/spytest/spytest/tgen/scapy/or_event.py similarity index 100% rename from spytest/spytest/tgen/scapy/or_event.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/or_event.py diff --git a/spytest/spytest/tgen/scapy/packet.py b/sonic-mgmt/spytest/spytest/tgen/scapy/packet.py similarity index 100% rename from spytest/spytest/tgen/scapy/packet.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/packet.py diff --git a/spytest/spytest/tgen/scapy/port.py b/sonic-mgmt/spytest/spytest/tgen/scapy/port.py similarity index 100% rename from spytest/spytest/tgen/scapy/port.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/port.py diff --git a/spytest/spytest/tgen/scapy/protocol.py b/sonic-mgmt/spytest/spytest/tgen/scapy/protocol.py similarity index 100% rename from spytest/spytest/tgen/scapy/protocol.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/protocol.py diff --git a/spytest/spytest/tgen/scapy/pyro-service.py b/sonic-mgmt/spytest/spytest/tgen/scapy/pyro-service.py similarity index 100% rename from spytest/spytest/tgen/scapy/pyro-service.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/pyro-service.py diff --git a/spytest/spytest/tgen/scapy/rpyc-service.py b/sonic-mgmt/spytest/spytest/tgen/scapy/rpyc-service.py similarity index 100% rename from spytest/spytest/tgen/scapy/rpyc-service.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/rpyc-service.py diff --git a/spytest/spytest/tgen/scapy/server.py b/sonic-mgmt/spytest/spytest/tgen/scapy/server.py similarity index 100% rename from spytest/spytest/tgen/scapy/server.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/server.py diff --git a/spytest/spytest/tgen/scapy/service.py b/sonic-mgmt/spytest/spytest/tgen/scapy/service.py similarity index 100% rename from spytest/spytest/tgen/scapy/service.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/service.py diff --git a/spytest/spytest/tgen/scapy/service.sh b/sonic-mgmt/spytest/spytest/tgen/scapy/service.sh similarity index 100% rename from spytest/spytest/tgen/scapy/service.sh rename to sonic-mgmt/spytest/spytest/tgen/scapy/service.sh diff --git a/spytest/spytest/tgen/scapy/stats.py b/sonic-mgmt/spytest/spytest/tgen/scapy/stats.py similarity index 100% rename from spytest/spytest/tgen/scapy/stats.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/stats.py diff --git a/spytest/spytest/tgen/scapy/unit_test.py b/sonic-mgmt/spytest/spytest/tgen/scapy/unit_test.py similarity index 100% rename from spytest/spytest/tgen/scapy/unit_test.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/unit_test.py diff --git a/spytest/spytest/tgen/scapy/ut_streams.py b/sonic-mgmt/spytest/spytest/tgen/scapy/ut_streams.py similarity index 100% rename from spytest/spytest/tgen/scapy/ut_streams.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/ut_streams.py diff --git a/spytest/spytest/tgen/scapy/utils.py b/sonic-mgmt/spytest/spytest/tgen/scapy/utils.py similarity index 100% rename from spytest/spytest/tgen/scapy/utils.py rename to sonic-mgmt/spytest/spytest/tgen/scapy/utils.py diff --git a/spytest/spytest/tgen/tg.py b/sonic-mgmt/spytest/spytest/tgen/tg.py similarity index 97% rename from spytest/spytest/tgen/tg.py rename to sonic-mgmt/spytest/spytest/tgen/tg.py index f80d919a023..706fb49e942 100644 --- a/spytest/spytest/tgen/tg.py +++ b/sonic-mgmt/spytest/spytest/tgen/tg.py @@ -937,23 +937,8 @@ def connect(self): port_details_all = self.tg_interface_stats(port_handle=port_handle_list) if port_details_all.get('status', '0') == '1' and port_details_all.get('intf_speed', '') != '': intf_speed_list = port_details_all['intf_speed'].split() - for intf_speed, port_handle in zip(intf_speed_list, port_handle_list): - if not self.ports_fec_disable.get(intf_speed, []): - self.ports_fec_disable[intf_speed] = [] - self.ports_fec_disable[intf_speed].append(port_handle) - for speed in ['100000', '50000', '25000']: - if speed == '100000' and self.ports_fec_disable.get(speed): - logger.info('Disabling FEC on ports {} is of speed {}'.format(self.ports_fec_disable[speed], speed)) - self.tg_interface_config(port_handle=self.ports_fec_disable[speed], - mode="modify", forward_error_correct="false") - if speed in ['50000', '25000'] and self.ports_fec_disable.get(speed): - fec_opt = 'disable_fec_50g' if speed == '50000' else 'disable_fec' - logger.info('Disabling FEC on ports {} is of speed {}'.format(self.ports_fec_disable[speed], speed)) - self.tg_interface_config(port_handle=self.ports_fec_disable[speed], - mode="modify", fec_option=fec_opt, autonegotiation='1') - self.tg_interface_config(port_handle=self.ports_fec_disable[speed], - mode="modify", fec_option=fec_opt, autonegotiation='0') - return None + + return None def get_card_type(self, port_list): card_type = {} @@ -1562,7 +1547,6 @@ def clean_all(self): logger.info("TG CLEAN ALL FINISHED") def ixia_eval(self, func, **kwargs): - msg = "{} {}".format(func, kwargs) logger.info('Executing: {}'.format(msg)) (pid, ret_ds) = (0, dict()) @@ -1845,15 +1829,16 @@ def connect(self): return None self.ports_fec_disable = [] res = dict() - for _ in range(3): - res = self.ixia_eval('traffic_stats') - if res.get('status') == '1': - break + if self.tg_version not in [11.0, 11.1]: + for _ in range(3): + res = self.ixia_eval('traffic_stats') + if res.get('status') == '1': + break if not isinstance(self.tg_ip, list): for port in self.tg_port_list: # ixia output is different for key 'port_handle': {'10': {'59': {'130': {'4': {'1/5': '1/1/5'}}}}} key1, key2, key3, key4 = self.tg_ip.split('.') - self.tg_port_handle[port] = ret_ds['port_handle'][key1][key2][key3][key4][port] + self.tg_port_handle[port] = ret_ds['port_handle'][key1][key2][key3][key4][str(port)] if self.tg_port_handle[port] is None: logger.info('Port Handle Info: {}'.format(self.tg_port_handle)) logger.info("Port handle for port {} is None...retrying connect again".format(port)) @@ -1862,12 +1847,12 @@ def connect(self): # For topology_handle. self.topo_handle[self.tg_port_handle[port]] = None # To get 100G ports. - if not res.get(self.tg_port_handle[port]): + if res and not res.get(self.tg_port_handle[port]): logger.info('Traffic Stats Info: {}'.format(res)) logger.info("Failed to get port {} from the traffic stats info..retrying connect again".format(self.tg_port_handle[port])) self.tg_disconnect() return ret_ds - if res[self.tg_port_handle[port]]['aggregate']['tx']['line_speed'] in ['100GE', '25GE']: + if res and res[self.tg_port_handle[port]]['aggregate']['tx']['line_speed'] in ['100GE', '25GE']: self.ports_fec_disable.append(self.tg_port_handle[port]) else: tg_ip = utils.make_list(self.tg_ip) @@ -1902,12 +1887,12 @@ def connect(self): # For topology_handle. self.topo_handle[self.tg_port_handle[vport]] = None # To get 100G ports. - if not res.get(self.tg_port_handle[vport]): + if res and not res.get(self.tg_port_handle[vport]): logger.info('Traffic Stats Info: {}'.format(ret_ds)) logger.info("Failed to get port {} from the traffic stats info..retrying connect again".format(self.tg_port_handle[vport])) self.tg_disconnect() return ret_ds - if res[self.tg_port_handle[vport]]['aggregate']['tx']['line_speed'] in ['100GE', '25GE']: + if res and res[self.tg_port_handle[vport]]['aggregate']['tx']['line_speed'] in ['100GE', '25GE']: self.ports_fec_disable.append(self.tg_port_handle[vport]) if not params.get('config_file'): @@ -1979,6 +1964,21 @@ def p_han(x): def trgen_adjust_mismatch_params(self, fname, **kwargs): if fname == 'tg_traffic_config': + if kwargs.get('ip_precedence_mode') == 'raw' and kwargs.get('ip_precedence_raw') is not None: + raw_val = kwargs.get('ip_precedence_raw') + try: + if isinstance(raw_val, str) and raw_val.lower().startswith('0x'): + raw_val = int(raw_val, 16) + else: + raw_val = int(raw_val) + except Exception: + raw_val = 0 + kwargs['qos_type'] = 'custom' + kwargs['ip_tos_field'] = raw_val + kwargs.pop('ip_precedence_mode', None) + kwargs.pop('ip_precedence_raw', None) + logger.info("Applied Raw Priority (ip_tos_field = {}) for traffic item".format(raw_val)) + self.map_field("ether_type", "ethernet_value", kwargs) self.map_field("custom_pattern", "data_pattern", kwargs) self.map_field("icmpv6_oflag", "icmp_ndp_nam_o_flag", kwargs) @@ -2785,7 +2785,7 @@ def collect_diagnosic(self, fail_reason, from_fail=False): file_location = '' if self.tg_version in ["7.4", "7.40"]: return - if self.tg_version in ["8.4", "8.40", "8.42", "8.42"]: + if self.tg_version in ["8.4", "8.40", "8.42", "8.42", "9.20", "10.0"]: file_location = get_ixnet().getAttribute('::ixNet::OBJ-/globals', '-persistencePath') + '\\' file_path, _ = self._ixnet_config_file_location() datetime = utils.get_current_datetime(fmt='%Y_%m_%d_%H_%M_%S') @@ -3438,21 +3438,43 @@ def load_tgen_int(tgen_dict): if not utils.ipcheck(ix_server): logger.error("IxNetWork IP Address: {} is not reachable".format(ix_server)) return False - tg_ix_port = tgen_dict.get('ix_port', 8009) + tg_ix_port = tgen_dict.get('ix_port', 443) tg_ix_server = "{}:{}".format(ix_server, tg_ix_port) if not tg_ixia_pkg_loaded: if not tg_ixia_load(tg_version, logger, tgen_get_logs_path()): return False code = \ - "from ixiatcl import IxiaTcl \n" + \ - "from ixiahlt import IxiaHlt \n" + \ - "from ixiangpf import IxiaNgpf \n" + \ - "from ixiaerror import IxiaError \n" + \ - "ixiatcl = IxiaTcl() \n" + \ - "ixiahlt = IxiaHlt(ixiatcl) \n" + \ - "ixiangpf = IxiaNgpf(ixiahlt) \n" + "from ixiatcl import IxiaTcl \n" + \ + "from ixiahlt import IxiaHlt \n" + \ + "from ixiangpf import IxiaNgpf \n" + \ + "from ixiaerror import IxiaError \n" + \ + "ixiatcl = IxiaTcl() \n" + \ + "ixiahlt = IxiaHlt(ixiatcl) \n" + \ + "ixiangpf = IxiaNgpf(ixiahlt) \n" # nosemgrep-next-line + import sys + if tg_version == 10.0: + sys.path.append("/opt/ixia/ixnetwork/10.00.2403.42/lib/PythonApi") + sys.path.append("/opt/ixia/hlapi/10.00.2403.15/library/common/ixiangpf/python") + os.environ['TCLLIBPATH'] = "/opt/ixia/hlapi/10.00.2403.15/library/common/ixia_hl_lib-10.00 /opt/ixia/ixnetwork/10.00.2403.42/lib/TclApi /opt/ixia/hlapi/10.00.2403.15/" + elif tg_version == 10.25: + sys.path.append("/opt/ixia/ixnetwork/10.25.2405.75/lib/PythonApi") + sys.path.append("/opt/ixia/hlapi/10.25.2405.23/library/common/ixiangpf/python") + os.environ['TCLLIBPATH'] = "/opt/ixia/hlapi/10.25.2405.23/library/common/ixia_hl_lib-10.25/ /opt/ixia/ixnetwork/10.25.2405.75/lib/TclApi /opt/ixia/hlapi/10.25.2405.23/" + elif tg_version == 11.00: + sys.path.append("/opt/ixia/ixnetwork/11.00.2407.37/lib/PythonApi") + sys.path.append("/opt/ixia/hlapi/10.25.2405.23/library/common/ixiangpf/python") + os.environ['TCLLIBPATH'] = "/opt/ixia/hlapi/11.00.2407.10/library/common/ixia_hl_lib-11.00 /opt/ixia/ixnetwork/11.00.2407.37/lib/TclApi /opt/ixia/hlapi/11.00.2407.10/" + elif tg_version == 11.1: + sys.path.append("/opt/ixia/ixnetwork/11.10.2508.10/lib/PythonApi") + sys.path.append("/opt/ixia/hlapi/11.10.2508.40/library/common/ixiangpf/python") + os.environ['TCLLIBPATH'] = "/opt/ixia/hlapi/11.10.2508.40/library/common/ixia_hl_lib-11.10/ /opt/ixia/ixnetwork/11.10.2508.10/lib/TclApi /opt/ixia/hlapi/11.10.2508.40/" + else: + sys.path.append("/opt/ixia/ixnetwork/9.20.2201.70/lib/PythonApi") + sys.path.append("/opt/ixia/hlapi/9.20.2201.38/library/common/ixiangpf/python") + os.environ['TCLLIBPATH'] = "/opt/ixia/hlapi/9.20.2201.38/library/common/ixia_hl_lib-9.20 /opt/ixia/ixnetwork/9.20.2201.70/lib/TclApi /opt/ixia/hlapi/9.20.2201.38/" + exec(code, globals(), globals()) if tgen_log_lvl_is_debug(): logger.info("Setting Ixia Debugs...") diff --git a/spytest/spytest/tgen/tg_scapy.py b/sonic-mgmt/spytest/spytest/tgen/tg_scapy.py similarity index 100% rename from spytest/spytest/tgen/tg_scapy.py rename to sonic-mgmt/spytest/spytest/tgen/tg_scapy.py diff --git a/spytest/spytest/tgen/tg_stubs.py b/sonic-mgmt/spytest/spytest/tgen/tg_stubs.py similarity index 100% rename from spytest/spytest/tgen/tg_stubs.py rename to sonic-mgmt/spytest/spytest/tgen/tg_stubs.py diff --git a/spytest/spytest/tgen/tgen_utils.py b/sonic-mgmt/spytest/spytest/tgen/tgen_utils.py similarity index 100% rename from spytest/spytest/tgen/tgen_utils.py rename to sonic-mgmt/spytest/spytest/tgen/tgen_utils.py diff --git a/spytest/spytest/tgen_api.py b/sonic-mgmt/spytest/spytest/tgen_api.py similarity index 100% rename from spytest/spytest/tgen_api.py rename to sonic-mgmt/spytest/spytest/tgen_api.py diff --git a/spytest/spytest/utils.py b/sonic-mgmt/spytest/spytest/utils.py similarity index 100% rename from spytest/spytest/utils.py rename to sonic-mgmt/spytest/spytest/utils.py diff --git a/spytest/spytest/version.py b/sonic-mgmt/spytest/spytest/version.py similarity index 100% rename from spytest/spytest/version.py rename to sonic-mgmt/spytest/spytest/version.py diff --git a/sonic-mgmt/spytest/tc_list b/sonic-mgmt/spytest/tc_list new file mode 100644 index 00000000000..d1281d57c53 --- /dev/null +++ b/sonic-mgmt/spytest/tc_list @@ -0,0 +1,6 @@ +#sanity/test_sanity_l3.py::test_l3_fwding +routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_peer_traffic_check +#routing/BGP/test_bgp.py::TestBGPRif::test_ft_bgp_v6_link_local_bgp +#sanity/test_sanity_l2.py::test_base_line_portchannel_create_delete +#switching/test_vlan.py::test_ft_vlan_save_config_warm_and_fast_reboot +#system/test_snmp.py::test_ft_snmp_sysName diff --git a/sonic-mgmt/spytest/templates/bridge_fdb_show.tmpl b/sonic-mgmt/spytest/templates/bridge_fdb_show.tmpl new file mode 100644 index 00000000000..efe6679d860 --- /dev/null +++ b/sonic-mgmt/spytest/templates/bridge_fdb_show.tmpl @@ -0,0 +1,11 @@ +Value MAC_ADDRESS (..:..:..:..:..:..) +Value INTERFACE (\S+) +Value vlan (\d+) +Value nh_id (\d+) +Value ext_lrn (extern_learn) +Value self (self) + +Start + ^${MAC_ADDRESS}\s*dev\s*${INTERFACE}\s*vlan\s*${vlan}\s*(?:\s+${ext_lrn})?\s -> Record + ^${MAC_ADDRESS}\s*dev\s*${INTERFACE}\s*nhid\s*${nh_id}\s*(?:\s+${self})?(?:\s+${ext_lrn})?$$ -> Record + ^$$ diff --git a/spytest/templates/docker_ps.tmpl b/sonic-mgmt/spytest/templates/docker_ps.tmpl similarity index 85% rename from spytest/templates/docker_ps.tmpl rename to sonic-mgmt/spytest/templates/docker_ps.tmpl index 49de9013a90..b1f9ebd7753 100644 --- a/spytest/templates/docker_ps.tmpl +++ b/sonic-mgmt/spytest/templates/docker_ps.tmpl @@ -1,8 +1,8 @@ Value container_id (\S+) Value image (\S+) Value command (\".*\") -Value created (\w+\s*\w+\s*\w+\s*) -Value status (\w+\s*\w+\s*\w+\s*) +Value created (\w+\s*\w+\s*\w+) +Value status ([\w+\s]+) Value ports (\S+|.) Value names (\S+) diff --git a/spytest/templates/free.tmpl b/sonic-mgmt/spytest/templates/free.tmpl similarity index 100% rename from spytest/templates/free.tmpl rename to sonic-mgmt/spytest/templates/free.tmpl diff --git a/sonic-mgmt/spytest/templates/index b/sonic-mgmt/spytest/templates/index new file mode 100644 index 00000000000..10e1b9710c7 --- /dev/null +++ b/sonic-mgmt/spytest/templates/index @@ -0,0 +1,627 @@ +Template, Hostname, Platform, Command + +show_interfaces_status_qa.tmpl, .*, sonic, show interfaces status +show_interfaces_portchannel_fallback.tmpl, .*, sonic, show interfaces portchannel \w+ fallback +show_interfaces_portchannel_qa.tmpl, .*, sonic, show interfaces portchannel +show_interfaces_loopback.tmpl, .*, sonic, show interfaces loopback +show_interface_counters_rif.tmpl, .*, sonic, (sudo )?show (interfaces|interface) counters rif +show_interfaces_counters_per_port.tmpl, .*, sonic, show interfaces counters (\| grep) +show_interfaces_counters_detailed.tmpl, .*, sonic, show interfaces counters detailed +show_interface_counters_rate.tmpl, .*, sonic, show interface counters rate +show_interfaces_counters_detailed.tmpl, .*, sonic, show interface counters (Ethernet\d+|Eth\d+\/\d+\/\d+|Eth\d+\/\d+) +show_interfaces_counters.tmpl, .*, sonic, show interfaces counters +show_interfaces_description.tmpl, .*, sonic, show interfaces description +show_interfaces_counters.tmpl, .*, sonic, show interfaces counters -a +show_interface_breakout_modes.tmpl, .*, sonic, show interface breakout modes +show_interface_breakout_cisco.tmpl, .*, sonic, show interfaces breakout current-mode .* +clear_counters.tmpl, .*, sonic, show interfaces counters -c +show_interfaces_pktdrops_nonzero.tmpl, .*, sonic, show interfaces pktdrops nonzero +show_interfaces_counters.tmpl, .*, sonic, sudo show interfaces counters -i .* +show_ars_cisco.tmpl, .*, sonic, show ars-profile +show_interfaces_transceiver_eeprom.tmpl, .*, sonic, show interface(|s) transceiver eeprom\s*(Ethernet\S+|Eth\S+)* +show_interface_status.tmpl, .*, sonic, show interface status +show_interface_counters.tmpl, .*, sonic, sudo show interface counters -i .* +show_interfaces_counters_per_port.tmpl, .*, sonic, portstat -i .* +show_interfaces_transceiver_presence.tmpl, .*, sonic, show interface(|s) transceiver presence +show_interface_counters.tmpl, .*, sonic, show interface counters +show_intf_portchannel.tmpl, .*, sonic, show interface PortChannel(\s*|\s+\d+) +show_interface_portchannel.tmpl, .*, sonic, show interface (P|p)ort(C|c)hannel +show_interface_breakout_port.tmpl, .*, sonic, show interface breakout (port\s+\S+) +show_intf_diag_reporting.tmpl, .*, sonic, show interface transceiver diagnostics reporting +show_intf_diag_loopback_control.tmpl, .*, sonic, show interface transceiver diagnostics loopback controls +show_intf_diag_loopback_cap.tmpl, .*, sonic, show interface transceiver diagnostics loopback capability +show_interface_pfc_statistics_queue.tmpl, .*, sonic, show qos interface (Ethernet|Eth) \S+ priority-flow-control statistics queue +show_interface_pfc_statistics.tmpl, .*, sonic, show qos interface (Ethernet|Eth) \S+ priority-flow-control statistics +show_interface_ethernet.tmpl, .*, sonic, show interface Ethernet\d+ +show_interface.tmpl, .*, sonic, show interface .* +show_l3_interface_counters.tmpl, .*, sonic, intfstat -j + +linux/ifconfig_eth.tmpl, .*, sonic, sudo ifconfig eth* +unix_ifcfg.tmpl, .*,sonic, /sbin/ifconfig +linux/ip_route_list_dev.tmpl, .*,sonic, /sbin/ip route list dev eth0 +linux/ip_route_list_dev.tmpl, .*,sonic, ip route list dev eth0 +show_image_list.tmpl, .*, sonic, show image list +show_ip_bgp_peer_group.tmpl, .*, sonic, show ip bgp peer-group +show_ip_bgp_peer_group.tmpl, .*, sonic, show bgp all\s+(vrf .*\s+)?peer-group +show_bgp_ipv4v6uni_routes.tmpl, .*, sonic, show bgp ipv(4|6) unicast\s+(vrf .*\s+)?route-map +show_bgp_ipv4v6uni_stats.tmpl, .*, sonic, show bgp ipv(4|6) unicast\s+(vrf .*\s+)?statistics +show_bgp_vrf_routes.tmpl, .*, sonic, show bgp vrf .* ipv(4|6) unicast +show_fgnhg_hashview.tmpl, .*, sonic, show fgnhg hash-view +show_fgnhg_active_hop.tmpl, .*, sonic, show fgnhg active-hops +show_ip_bgp_summary.tmpl, .*, sonic, show ip bgp summary +show_ip_bgp_summary.tmpl, .*, sonic, show ipv6 bgp summary +show_ip_bgp_summary.tmpl, .*, sonic, show bgp ipv4 summary +show_ip_bgp_summary.tmpl, .*, sonic, show bgp ipv6 summary +show_ip_bgp_summary.tmpl, .*, sonic, show bgp ipv4 unicast summary +show_ip_bgp_summary.tmpl, .*, sonic, show bgp ipv6 unicast summary +#show_bgp_ipv4v6uni_prefix.tmpl, .*, sonic, show bgp ipv(4|6) unicast\s*(vrf .*)? +show_ip_bgp_summary.tmpl, .*, sonic, show bgp vrf .* summary +show_ip_bgp_summary.tmpl, .*, sonic, show ip bgp vrf .* summary +show_ip_bgp_summary.tmpl, .*, sonic, show bgp .* unicast vrf .* summary +show_bgp_neighbor.tmpl, .*, sonic, show ip bgp vrf .* neighbors.* +show_bgp_neighbor.tmpl, .*, sonic, show bgp .* unicast neighbors.* +show_bgp_neighbor.tmpl, .*, sonic, show bgp ipv(4|6) unicast vrf .* neighbors.* +show_bgp_neighbor.tmpl, .*, sonic, show bgp ipv4 neighbor.* +show_ip_interfaces.tmpl, .*, sonic, show ip interface +show_ip_interfaces.tmpl, .*, sonic, show ipv6 interface +show_ip_loadshare.tmpl, .*, sonic, show ip load-share +show_ip_ospf_lsdb.tmpl, .*, sonic, show ip ospf vrf .* database router +show_ip_ospf_lsdb.tmpl, .*, sonic, show ip ospf vrf .* database network +show_ip_ospf_lsdb.tmpl, .*, sonic, show ip ospf vrf .* database summary +show_ip_ospf_lsdb.tmpl, .*, sonic, show ip ospf vrf .* database asbr-summary +show_ip_ospf_lsdb.tmpl, .*, sonic, show ip ospf vrf .* database external +show_ip_ospf_lsdb.tmpl, .*, sonic, show ip ospf vrf .* database max-age +show_ip_ospf_traffic.tmpl, .*, sonic, show ip ospf vrf .* interface traffic +show_ip_ospf_traffic.tmpl, .*, sonic, show ip ospf interface traffic +show_ip_ospf_interface.tmpl, .*, sonic, show ip ospf interface +show_ip_ospf_interface.tmpl, .*, sonic, show ip ospf interface .* +show_ip_ospf_interface.tmpl, .*, sonic, show ip ospf vrf .* interface +show_ip_ospf_interface.tmpl, .*, sonic, show ip ospf vrf .* interface .* +show_ip_ospf_neighbor.tmpl, .*, sonic, show ip ospf neighbor +show_ip_ospf_neighbor.tmpl, .*, sonic, show ip ospf vrf .* neighbor +show_ip_ospf_router.tmpl, .*, sonic, show ip ospf +show_ip_ospf_router.tmpl, .*, sonic, show ip ospf vrf all +show_ip_ospf_router.tmpl, .*, sonic, show ip ospf vrf .* +show_ip_route_summary.tmpl, .*, sonic, show ip(v6)? route summary +show_ip_route_summary.tmpl, .*, sonic, show ip route vrf .* summary +show_ip_route_summary.tmpl, .*, sonic, show ipv6 route vrf .* summary +show_ip_route_mh.tmpl, .*, sonic, show ipv6 route vrf .* +show_ip_route.tmpl, .*, sonic, show ip route +show_ip_route.tmpl, .*, sonic, show ipv6 route +show_ip_route.tmpl, .*, sonic, show ip route vrf * ospf +show_vlan_config.tmpl, .*, sonic, show vlan config +watchdogutil_status.tmpl, .*, sonic, sudo watchdogutil status +watchdogutil_arm.tmpl, .*, sonic, sudo watchdogutil arm +show_platform_summary.tmpl, .*, sonic, show platform summary +show_platform_idprom.tmpl, .*, sonic, sudo show platform idprom +show_platform_temperature.tmpl, .*, sonic, show platform temperature +show_platform_fan.tmpl, .*, sonic, show platform fan +show_platform_inventory.tmpl, .*, sonic, show platform inventory +show_platform_ssdhealth.tmpl, .*, sonic, show platform ssdhealth +show_platform_firmware_status.tmpl, .*, sonic, show platform firmware status +show_interfaces_status.tmpl, .*, sonic, show interfaces status +show_bgp_ipv4_prefix.tmpl, .*, sonic, show bgp ipv4\s*([\d\.\/]+) +show_bgp_neighbor.tmpl, .*, sonic, show ip bgp.*ipv4 neighbor.* +show_bgp_neighbor.tmpl, .*, sonic, show ip bgp.*neighbor.* +show_ip_bgp.tmpl, .*, sonic, show ip bgp +show_ip_bgp.tmpl, .*, sonic, show bgp ipv4 unicast +show_bgp_ipv6.tmpl, .*, sonic, show bgp ipv6 unicast +show_ip_bgp.tmpl, .*, sonic, show bgp ipv4 +show_bgp_ipv6.tmpl, .*, sonic, show bgp ipv6 +crm_show_summary.tmpl, .*, sonic, crm show summary +show_crm_summary.tmpl, .*, sonic, show crm summary +crm_show_thresholds.tmpl, .*, sonic, crm show thresholds .* +show_crm_thresholds.tmpl, .*, sonic, show crm thresholds .* +crm_show_resources_acl_group.tmpl, .*, sonic, crm show resources acl group +show_crm_resources_acl_group.tmpl, .*, sonic, show crm resources acl group +crm_show_resources_acl_table.tmpl, .*, sonic, crm show resources acl table +show_crm_resources_acl_table.tmpl, .*, sonic, show crm resources acl table +crm_show_resources.tmpl, .*, sonic, crm show resources .* +show_crm_resources.tmpl, .*, sonic, show crm resources .* +show_aaa.tmpl, .*, sonic, show aaa +show_tacacs_server.tmpl, .*, sonic, show tacacs-server (global|host) +show_tacacs.tmpl, .*, sonic, show tacacs +show_acl_table_qa.tmpl, .*, sonic, show acl table +show_neigh_suppress.tmpl, .*, sonic, show (neigh-suppress|neighbor-suppress-status).* +show_lldp_neighbors.tmpl, .*, sonic, show lldp neighbors +show_lldp_neighbors.tmpl, .*, sonic, show neighbors +show_lldp_neighbor.tmpl, .*, sonic, show lldp neighbor +show_acl_rule_qa.tmpl, .*, sonic, show acl rule +show_lldp_table.tmpl, .*, sonic, show lldp table +# Mirror output command for CLICK CLI +show_mirror_session.tmpl, .*, sonic, show mirror_session.* +show_arp.tmpl, .*, sonic, show arp +show_ntp_server.tmpl, .*, sonic, show ntp server +show_ntp_global.tmpl, .*, sonic, show ntp global +show_ntp.tmpl, .*, sonic, show ntp.* +show_boot.tmpl, .*, sonic, show boot +show_ntp.tmpl, .*, sonic, show ntp +show_ntpstat.tmpl, .*, sonic, ntpstat +show_ntpstat.tmpl, .*, sonic, sudo cgexec -g l3mdev:mgmt ntpstat +show_clock.tmpl, .*, sonic, show clock +show_timedatectl_status.tmpl, .*, sonic, timedatectl status +pfcwd_show_config.tmpl, .*, sonic, pfcwd show config +pfcwd_show_stats.tmpl, .*, sonic, pfcwd show stats +pfc_show_asymmetric.tmpl, .*, sonic, pfc show asymmetric +show_vlan_brief.tmpl, .*, sonic, show vlan brief +show_vlan_count.tmpl, .*, sonic, show vlan count +show_platform_psustatus.tmpl, .*, sonic, show platform psustatus +show_processes_memory.tmpl, .*, sonic, show processes memory +show_int_transceiver_eeprom.tmpl, .*, sonic, show int transceiver eeprom +show_users.tmpl, .*, sonic, show users +show_image_list.tmpl, .*, sonic, show image list +docker_ps.tmpl, .*, sonic, docker ps +show_storm_control.tmpl, .*, sonic, show storm-control .* +show_system_status.tmpl, .*, sonic, (show system status|sudo show system status) +show_vlan_count.tmpl, .*, sonic, show vlan count +route_n.tmpl, .*, sonic, sudo route -n +show_platform_summary.tmpl, .*, sonic, show platform summary +show_sflow.tmpl, .*, sonic, show sflow$ +show_ip_bgp_summary.tmpl, .*, sonic, show bgp ipv(4|6) (unicast\s+)?(vrf .*\s+)?summary +show_ip_bgp_summary.tmpl, .*, sonic, show (ip\s+|ipv6\s+)?bgp (vrf .*\s+)?summary +show_qos_map_tc_queue.tmpl, .*, sonic, show qos map tc-queue +free.tmpl, .*, sonic, free +show_acl_rule_qa.tmpl, .*, sonic, show acl rule +show_mac_aging_time.tmpl, .*, sonic, show mac aging-time +show_ip_interfaces.tmpl, .*, sonic, show (ip|ipv6) interface +show_qos_map_tc_dscp.tmpl, .*, sonic, show qos map tc-dscp +show_vxlan_tunnel.tmpl, .*, sonic, show vxlan tunnel +show_vxlan_remotevtep.tmpl, .*, sonic, show vxlan remotevtep +show_vxlan_remotemac_all.tmpl, .*, sonic, show vxlan remotemac all +show_mac_address_table.tmpl, .*, sonic, show mac address-table +show_mac_count.tmpl, .*, sonic, show mac count +show_ip_access_lists.tmpl, .*, sonic, show (ip|ipv6|mac){1} access-lists +show_mac_dampening_disabled_ports.tmpl, .*, sonic, show mac (dampening-disabled-ports|dampening_disabled_ports) +show_mac_dampening_threshold.tmpl, .*, sonic, show mac (dampening-threshold|dampening_threshold) +show_mac.tmpl, .*, sonic, show mac +clear_counters.tmpl, .*, sonic, show interfaces counters -c +clear_counters.tmpl, .*, sonic, sonic-clear counters +clear_counters.tmpl, .*, sonic, sonic-clear rifcounters +show_arp.tmpl, .*, sonic,show arp +unix_ifcfg.tmpl, .*, sonic, /sbin/ifconfig .* +sonic_installer_list.tmpl, .*, sonic, sonic_installer list +sonic_acl_show_cisco.tmpl, .*, sonic, aclshow.* +sonic_acl_show.tmpl, .*, sonic, aclshow.* +sudo_sonic_installer_list.tmpl, .*, sonic, sudo sonic_installer list +sudo_sonic_installer_list.tmpl, .*, sonic, show image list +show_bgp_as_path_access_list.tmpl, .*, sonic, show bgp as-path-access-list .* +show_bgp_community_list.tmpl, .*, sonic, show bgp community-list .* +show_bgp_ext_community_list.tmpl, .*, sonic, show bgp ext-community-list .* +show_route_map.tmpl, .*, sonic, show route-map .* +show_bgp_neighbor.tmpl, .*, sonic, show bgp neighbor.* +show_uptime.tmpl, .*, sonic, show uptime +show_ecn.tmpl, .*, sonic, show ecn +show_environment_new.tmpl, .*, sonic, show environment +show_reboot-cause.tmpl, .*, sonic, show reboot-cause +show_pfc_counters.tmpl, .*, sonic, show pfc counters +show_spanning_tree_vlan_interface.tmpl, .*, sonic, show spanning-tree vlan interface +show_spanning_tree_statistics.tmpl, .*, sonic, show spanning_tree statistics(\s+vlan\s+\d+)? +show_spanning_tree_statistics.tmpl, .*, sonic, show spanning-tree counters(\s+vlan\s+\d+)? +show_ztp_status_klish.tmpl, .*, sonic, show ztp-status +ztp_status.tmpl, .*, sonic, sudo ztp status$ +top.tmpl, .*, sonic, top +docker_ps.tmpl, .*, sonic, docker ps +docker_stats_ps_no_stream.tmpl, .*, sonic, docker stats -a --no-stream +show_tpcm_list.tmpl, .*, sonic, show tpcm list +linux/ip_route_list_dev.tmpl, .*,sonic, /sbin/ip route list dev eth0 +linux/ip_route_list_dev.tmpl, .*,sonic, ip route list dev eth0 +show_version.tmpl, .*, sonic, show version +show_psample_stats.tmpl, .*, sonic, sudo cat /proc/bcm/knet-cb/psample/stats +show_interfaces_status_qa.tmpl, .*, sonic, show interfaces status +show_lldp_table.tmpl, .*, sonic, show lldp table +show_lldp_statistics.tmpl, .*, sonic, show lldp statistics +show_lldp_statistics.tmpl, .*, sonic, docker exec -it lldp lldpcli show statistics ports +show_clock.tmpl, .*, sonic, show clock +show_interfaces_counters_detailed.tmpl, .*, sonic, show (interfaces|interface) counters (detailed|Ethernet\d+|Eth\d+\/\d+\/\d+|Eth\d+\/\d+) +show_qos_map_tc_pg.tmpl, .*, sonic, show qos map tc-pg +show_qos_map_pfc_priority_queue.tmpl, .*, sonic, show qos map pfc-priority-queue +sonic_snmp_yml.tmpl, .*, sonic, cat /etc/sonic/snmp.yml +show_uptime.tmpl, .*, sonic, show uptime +show_acl_table_qa.tmpl, .*, sonic, show acl table +show_ip_vrf.tmpl, .*, sonic, show ip vrf$ +show_vrf_verbose.tmpl,.*,sonic,show vrf --verbose +show_bgp_ipv4_unicast_vrf_dampened_paths.tmpl, .*, sonic, show bgp ipv4 unicast (vrf .*\s+)?dampening dampened-paths +show_ip_arp.tmpl, .*, sonic, show ip arp.* +unix_ifcfg.tmpl, .*,sonic, /sbin/ifconfig +unix_ifcfg.tmpl, .*, sonic, /sbin/ifconfig .* +show_tacacs.tmpl, .*, sonic, show tacacs +show_interfaces_counters.tmpl, .*, sonic, (sudo )?show interfaces counters( -a| -i)? +show_ip_route.tmpl, .*, sonic, show (ip|ipv6) route(\s+vrf .*)?(\s+ospf)? +show_mac_aging_time_klish.tmpl, .*, sonic, show mac address-table aging-time +show_ndp.tmpl, .*, sonic, show ndp +show_intf_portchannel.tmpl, .*, sonic, show interface (P|p)ort(C|c)hannel(\s*|\s+\d+) +show_intf_portchannel.tmpl, .*, sonic, show interface PortChannel(\s*|\s+\d+) +show_lldp_neighbor.tmpl, .*, sonic, show lldp neighbor +show_qos_map_tc_dot1p.tmpl, .*, sonic, show qos map tc-dot1p +show_ntpstat.tmpl, .*, sonic, ntpstat +show_ntpstat.tmpl, .*, sonic, sudo cgexec -g l3mdev:mgmt ntpstat +show_ntpstat.tmpl, .*, sonic, sudo ip vrf exec mgmt ntpstat +show_bgp_ipv4v6uni_prefix.tmpl, .*, sonic, show bgp ipv(4|6) unicast\s+(vrf \w+\s+)?\d+ +show_portchannel_summary.tmpl, .*, sonic, show (p|P)ort(c|C)hannel summary.* +show_vrf.tmpl,.*,sonic,show vrf +how_threshold_breaches.tmpl, .*, sonic, show threshold breaches +bcmcmd_l3_defip_show.tmpl, .*, sonic, bcmcmd 'l3 defip show' +bcmcmd_l3_ip6route_show.tmpl, .*, sonic, bcmcmd 'l3 ip6route show' +bcmcmd_l3_l3table_show.tmpl, .*, sonic, bcmcmd 'l3 l3table show' +bcmcmd_l3_ip6host_show.tmpl, .*, sonic, bcmcmd 'l3 ip6host show' +show_system_status.tmpl, .*, sonic, show system status +show_system_health_summary.tmpl, .*, sonic, sudo show system-health summary +show_error_database.tmpl, .*, sonic, show error_database +bcmcmd_listmem_l3_entry.tmpl, .*, sonic, bcmcmd 'listmem l3_entry' +bcmcmd_listmem_defip.tmpl, .*, sonic, bcmcmd 'listmem DEFIP' +show_spanning_tree_vlan_cisco.tmpl, .*, sonic, show spanning-tree vlan\s+\d+(\s+ interface\s+\w+)? +show_spanning_tree_vlan.tmpl, .*, sonic, show (spanning_tree|spanning-tree) vlan\s+\d+(\s+ interface\s+\w+)? +cloud_advanced/show_tam_device.tmpl, .*, sonic, show tam device +cloud_advanced/show_tam_samplers.tmpl, .*, sonic, show tam samplers +cloud_advanced/show_tam_switch.tmpl, .*, sonic, show tam switch +cloud_advanced/show_tam_collectors.tmpl, .*, sonic, show tam collectors +cloud_advanced/show_tam_flowgroups.tmpl, .*, sonic, show tam flowgroups +cloud_advanced/show_tam_features.tmpl, .*, sonic, show tam features +cloud_advanced/show_tam_ifa_sessions.tmpl, .*, sonic, show tam ifa sessions +cloud_advanced/show_tam_ifa.tmpl, .*, sonic, show tam ifa +cloud_advanced/show_tam_int_ifa_flow.tmpl, .*, sonic, show tam-int-ifa flow +cloud_advanced/show_tam_int_ifa_flow_klish.tmpl, .*, sonic, show tam int-ifa flow +cloud_advanced/show_tam_int_ifa_status.tmpl, .*, sonic, show (tam-int-ifa|tam int-ifa) status +cloud_advanced/show_tam_int_ifa_statistics.tmpl, .*, sonic, show tam-int-ifa statistics +cloud_advanced/show_tam_int_ifa_statistics_klish.tmpl, .*, sonic, show tam int-ifa statistics +cloud_advanced/show_tam_int_ifa_supported.tmpl, .*, sonic, show (tam-int-ifa|tam int-ifa) supported +cloud_advanced/show_ifa_enabled.tmpl, .*, sonic, show ifa enabled +cloud_advanced/show_tam_tail_stamping_sessions.tmpl, .*, sonic, show tam tail-stamping sessions +cloud_advanced/show_tam_tail_stamping.tmpl, .*, sonic, show tam tail-stamping + +ztp_status_v.tmpl, .*, sonic, sudo ztp status -v +ps_aux.tmpl, .*, sonic, sudo ps aux.* +show_spanning_tree_root_guard.tmpl, .*, sonic, show spanning_tree root_guard +show_spanning_tree_root_guard.tmpl, .*, sonic, show spanning-tree inconsistentports +show_spanning_tree_bpdu_guard.tmpl, .*, sonic, show spanning_tree bpdu_guard +show_spanning_tree_bpdu_guard.tmpl, .*, sonic, show spanning-tree bpdu-guard +show_spanning_tree_root_guard_cisco.tmpl, .*, sonic, show spanning-tree root_guard +show_spanning_tree_bpdu_guard_cisco.tmpl, .*, sonic, show spanning-tree bpdu_guard +stpctl_port.tmpl, .*, sonic, stpctl\s+port\s+\d+\s+\w+ +route_n.tmpl, .*, sonic, sudo route -n +show_vrrpv3.tmpl,.*,sonic,show vrrp6 \w+ +show_vrrpv3_summary.tmpl,.*,sonic,show vrrp6 +show_vrrp.tmpl,.*,sonic,show vrrp \w+ +show_vrrp_summary.tmpl,.*,sonic,show vrrp +show_ip_dhcp_relay_statistics.tmpl, .*, sonic, show ip dhcp-relay statistics.* +spytest_infra_debug.tmpl, .*, sonic, spytest infra debug +show_platform_psusummary.tmpl, .*, sonic, show platform psusummary +show_platform_fanstatus.tmpl, .*, sonic, show platform fanstatus +show_bgp_l2vpn_evpn_vni.tmpl, .*, sonic, show bgp l2vpn evpn vni +show_bgp_l2vpn_evpn_vni_id.tmpl, .*, sonic, show bgp l2vpn evpn vni .* +show_bgp_l2vpn_evpn_summary.tmpl, .*, sonic, show bgp l2vpn evpn summary.* +show_bgp_l2vpn_evpn_rd.tmpl, .*, sonic, show bgp l2vpn evpn rd .* +show_bgp_l2vpn_evpn_route_type_multicast.tmpl, .*, sonic, show bgp l2vpn evpn route type multicast +show_bgp_l2vpn_evpn_route_type_prefix.tmpl, .*, sonic, show bgp l2vpn evpn route type prefix +show_bgp_l2vpn_evpn_route_type_macip.tmpl, .*, sonic, show bgp l2vpn evpn route type macip +show_bgp_l2vpn_evpn_route_detail_type_prefix.tmpl, .*, sonic, show bgp l2vpn evpn route detail type prefix +show_bgp_l2vpn_evpn_route.tmpl, .*, sonic, show bgp l2vpn evpn route +show_bgp_l2vpn_evpn_route_type_2.tmpl, .*, sonic, show bgp l2vpn evpn route type 2 +show_bgp_l2vpn_evpn_route_type_3.tmpl, .*, sonic, show bgp l2vpn evpn route type 3 +show_bgp_l2vpn_evpn_route_type_5.tmpl, .*, sonic, show bgp l2vpn evpn route type 5 +show_radius.tmpl, .*, sonic, show radius.* +show_sflow.tmpl, .*, sonic, show sflow$ +show_sflow_interface.tmpl, .*, sonic, show sflow interface.* +show_storm_control.tmpl, .*, sonic, show storm-control .* +show_vxlan_tunnel.tmpl, .*, sonic, show vxlan tunnel +show_vxlan_interface.tmpl, .*, sonic, show vxlan interface +telemetry_gnmi_get.tmpl, .*, sonic, docker exec -it telemetry bash -c .* +show_ip_igmp_snooping_groups.tmpl, .*, sonic, show ip igmp snooping groups +show_ip_igmp_snooping.tmpl, .*, sonic, show ip igmp snooping +psuutil_status.tmpl, .*, sonic, sudo psuutil status$ +box_service_version.tmpl, .*, sonic, sudo psuutil version +box_service_version.tmpl, .*, sonic, sudo sfputil version +box_service_version.tmpl, .*, sonic, sudo pddf_psuutil version +box_service_version.tmpl, .*, sonic, sudo pddf_fanutil version +box_service_version.tmpl, .*, sonic, sudo pddf_ledutil version +box_service_version.tmpl, .*, sonic, sudo pddf_thermalutil version +show_platform_syseeprom.tmpl, .*, sonic, sudo decode-syseeprom +sfputil_show_lpmode.tmpl, .*, sonic, sudo sfputil show lpmode +sfputil_show_eeprom.tmpl, .*, sonic, sudo sfputil show eeprom +sfputil_show_presence.tmpl, .*, sonic, sudo sfputil show presence +sfputil_reset_ethernet.tmpl, .*, sonic, sudo sfputil reset Ethernet\d+ +psuutil_status.tmpl, .*, sonic, sudo pddf_psuutil status +pddf_psuutil_mfrinfo.tmpl, .*, sonic, sudo pddf_psuutil mfrinfo +pddf_psuutil_seninfo.tmpl, .*, sonic, sudo pddf_psuutil seninfo +pddf_fanutil_direction.tmpl, .*, sonic, sudo pddf_fanutil direction +pddf_fanutil_getspeed.tmpl, .*, sonic, sudo pddf_fanutil getspeed +pddf_fanutil_status.tmpl, .*, sonic, sudo pddf_fanutil status +pddf_thermalutil_gettemp.tmpl, .*, sonic, sudo pddf_thermalutil gettemp +# Mirror output command for Klish CLI +show_mirror_session.tmpl, .*, sonic, show mirror-session.* +show_classifier_match_type_copp.tmpl, .*, sonic, show class-map match-type copp +show_classmap_match_type_fields.tmpl, .*, sonic, show class-map match-type fields +show_classifier_match_type_copp.tmpl, .*, sonic, show classifier match-type copp +show_classifier.tmpl, .*, sonic, show classifier +show_classifier.tmpl, .*, sonic, show class-map +show_policy_type_copp.tmpl, .*, sonic, show policy type copp +show_policy.tmpl, .*, sonic, show policy +show_services.tmpl, .*, sonic, show services +show_service-policy_summary.tmpl, .*, sonic, show service-policy summary +show_service-policy_policy.tmpl, .*, sonic, show service-policy policy +show_service-policy_interface.tmpl, .*, sonic, show service-policy Switch +show_service-policy_interface.tmpl, .*, sonic, show service-policy interface +show_ip_mroute.tmpl,.*,sonic,show ip mroute .* +show_vxlan_evpn_remote_mac_all.tmpl, .*, sonic, show vxlan (evpn_remote_mac|remote mac) +show_vxlan_evpn_remote_vni_all.tmpl, .*, sonic, show vxlan (evpn_remote_vni|remote vni) +show_vxlan_vlanvnimap.tmpl, .*, sonic, show vxlan vlanvnimap +show_vxlan_vrfvnimap.tmpl, .*, sonic, show vxlan vrfvnimap +show_qos_map_dot1p_tc.tmpl, .*, sonic, show qos map dot1p-tc +show_qos_map_dscp_tc.tmpl, .*, sonic, show qos map dscp-tc +show_qos_map_pfc_priority_queue.tmpl, .*, sonic, show qos map pfc-priority-queue +show_qos_map_tc_dot1p.tmpl, .*, sonic, show qos map tc-dot1p +show_qos_map_tc_dscp.tmpl, .*, sonic, show qos map tc-dscp +show_qos_map_tc_pg.tmpl, .*, sonic, show qos map tc-pg +show_qos_map_tc_queue.tmpl, .*, sonic, show qos map tc-queue +show_qos_interface_queue.tmpl, .*, sonic, show qos interface \S+\s+\d+\s+queue\s+\d+ +show_qos_interface.tmpl, .*, sonic, show qos interface +show_qos_scheduler_policy.tmpl, .*, sonic, show qos scheduler-policy.* + +#Added after the Migration-1 by Dell: +##----------------------------------- +#These commands didn't merged from the dell_sonic +show_system_cpu.tmpl, .*, sonic, show system cpu +show_system_processes.tmpl, .*, sonic, show system processes +show_system_memory.tmpl, .*, sonic, show system-memory +show_system.tmpl, .*, sonic, show system +cloud_advanced/show_tam_drop_monitor_statistics.tmpl, .*, sonic, show tam drop-monitor statistics .* +cloud_advanced/show_tam_drop_monitor_aging_interval.tmpl, .*, sonic, show tam drop-monitor aging-interval +cloud_advanced/show_tam_drop_monitor_flow.tmpl, .*, sonic, show tam drop-monitor flow .* +cloud_advanced/show_sample.tmpl, .*, sonic, show sample .* +cloud_advanced/show_tam_drop_monitor_supported.tmpl, .*, sonic, show tam drop-monitor supported +cloud_advanced/show_tam_drop_monitor_sessions.tmpl, .*, sonic, show tam drop-monitor sessions +cloud_advanced/show_tam_drop_monitor.tmpl, .*, sonic, show tam drop-monitor +cloud_advanced/show_switch_resource_drop_monitor.tmpl, .*, sonic, show switch-resource drop-monitor +show_ip_mroute.tmpl,.*,sonic,show ip mroute.* +show_ip_pim_nexthop_lookup.tmpl,.*,sonic,show ip pim nexthop-lookup .* +show_ip_pim_nexthop_lookup.tmpl,.*,sonic,show ip pim vrf \S+ nexthop-lookup .* +show_ip_pim_neighbor_detail.tmpl,.*,sonic,show ip pim neighbor \w+ +show_ip_pim_neighbor_detail.tmpl,.*,sonic,show ip pim vrf \S+ neighbor \w+ +show_ip_pim_neighbor.tmpl,.*,sonic,show ip pim neighbor +show_ip_pim_neighbor.tmpl,.*,sonic,show ip pim vrf \S+ neighbor +show_ip_pim_group_type.tmpl,.*,sonic,show ip pim group-type$ +show_ip_pim_group_type.tmpl,.*,sonic,show ip pim vrf \S+ group-type$ +show_ip_pim_group_type_groupid.tmpl,.*,sonic,show ip pim group-type \S+ +show_ip_pim_group_type_groupid.tmpl,.*,sonic,show ip pim vrf \S+ group-type \S+ +show_ip_pim_interface_traffic.tmpl,.*,sonic,show ip pim interface traffic +show_ip_pim_interface_traffic.tmpl,.*,sonic,show ip pim vrf \S+ interface traffic +show_ip_pim_interface_id.tmpl,.*,sonic,show ip pim interface \w+ +show_ip_pim_interface_id.tmpl,.*,sonic,show ip pim vrf \S+ interface \w+ +show_ip_pim_interface.tmpl,.*,sonic,show ip pim interface$ +show_ip_pim_interface.tmpl,.*,sonic,show ip pim vrf \S+ interface$ +show_ip_pim_nexthop.tmpl,.*,sonic,show ip pim nexthop +show_ip_pim_nexthop.tmpl,.*,sonic,show ip pim vrf \S+ nexthop +show_ip_pim_state.tmpl,.*,sonic,show ip pim state +show_ip_pim_state.tmpl,.*,sonic,show ip pim vrf \S+ state +show_ip_pim_assert_internal.tmpl,.*,sonic,show ip pim assert-internal +show_ip_pim_assert_internal.tmpl,.*,sonic,show ip pim vrf \S+ assert-internal +show_ip_pim_assert_metric.tmpl,.*,sonic,show ip pim assert-metric +show_ip_pim_assert_metric.tmpl,.*,sonic,show ip pim vrf \S+ assert-metric +show_ip_pim_assert_winner_metric.tmpl,.*,sonic,show ip pim assert-winner-metric +show_ip_pim_assert_winner_metric.tmpl,.*,sonic,show ip pim vrf \S+ assert-winner-metric +show_ip_pim_assert.tmpl,.*,sonic,show ip pim assert$ +show_ip_pim_assert.tmpl,.*,sonic,show ip pim vrf \S+ assert$ +show_ip_pim_upstream_join_desired.tmpl,.*,sonic,show ip pim upstream-join-desired +show_ip_pim_upstream_join_desired.tmpl,.*,sonic,show ip pim vrf \S+ upstream-join-desired +show_ip_pim_upstream_rpf.tmpl,.*,sonic,show ip pim upstream-rpf +show_ip_pim_upstream_rpf.tmpl,.*,sonic,show ip pim vrf \S+ upstream-rpf +show_ip_pim_upstream.tmpl,.*,sonic,show ip pim upstream$ +show_ip_pim_upstream.tmpl,.*,sonic,show ip pim vrf \S+ upstream$ +show_ip_pim_join.tmpl,.*,sonic,show ip pim join +show_ip_pim_join.tmpl,.*,sonic,show ip pim vrf \S+ join +show_ip_pim_secondary.tmpl,.*,sonic,show ip pim secondary +show_ip_pim_secondary.tmpl,.*,sonic,show ip pim vrf \S+ secondary +show_ip_pim_local_membership.tmpl,.*,sonic,show ip pim local-membership +show_ip_pim_local_membership.tmpl,.*,sonic,show ip pim vrf \S+ local-membership +show_ip_pim_rpf.tmpl,.*,sonic,show ip pim rpf +show_ip_pim_rpf.tmpl,.*,sonic,show ip pim vrf \S+ rpf +show_ip_multicast.tmpl,.*,sonic,show ip multicast +show_ip_multicast.tmpl,.*,sonic,show ip multicast vrf \S+ +bcmcmd_ipmc_table_show.tmpl, .*, sonic, bcmcmd 'ipmc table show' +show_debug_ipmcorchall.tmpl, .*, sonic, show debug ipmcorch all +show_ip_igmp_group_retransmission.tmpl,.*,sonic,show ip igmp groups retransmissions +show_ip_igmp_group_retransmission.tmpl,.*,sonic,show ip igmp vrf \S+ groups retransmissions +show_ip_igmp_source_retransmission.tmpl,.*,sonic,show ip igmp sources retransmissions +show_ip_igmp_source_retransmission.tmpl,.*,sonic,show ip igmp vrf \S+ sources retransmissions +show_ip_igmp_groups.tmpl,.*,sonic,show ip igmp groups +show_ip_igmp_groups.tmpl,.*,sonic,show ip igmp vrf \S+ groups +show_ip_igmp_sources.tmpl,.*,sonic,show ip igmp sources +show_ip_igmp_sources.tmpl,.*,sonic,show ip igmp vrf \S+ sources +show_ip_igmp_join.tmpl,.*,sonic,show ip igmp join +show_ip_igmp_join.tmpl,.*,sonic,show ip igmp vrf \S+ join +show_ip_igmp_statistics.tmpl,.*,sonic,show ip igmp statistics.* +show_ip_igmp_statistics.tmpl,.*,sonic,show ip igmp vrf \S+ statistics.* +show_ip_igmp_interface.tmpl,.*,sonic,show ip igmp interface.* +show_ip_igmp_interface.tmpl,.*,sonic,show ip igmp vrf \S+ interface.* +show_psample_stats.tmpl, .*, sonic, sudo cat /proc/bcm/knet-cb/psample/stats +cloud_advanced/show_tam_int_ifa_ts_flow.tmpl, .*, sonic, show tam int-ifa-ts flow +cloud_advanced/show_tam_int_ifa_ts_status.tmpl, .*, sonic, show tam int-ifa-ts status +cloud_advanced/show_tam_int_ifa_ts_statistics.tmpl, .*, sonic, show tam int-ifa-ts statistics +cloud_advanced/show_tam_int_ifa_ts_supported.tmpl, .*, sonic, show tam int-ifa-ts supported +show_Vlan.tmpl, .*, sonic, show (v|V)lan.* +tcpdump.tmpl, .*, sonic, sudo cat /tmp/tcp.log +show_ptp.tmpl,.*,sonic,show ptp$ +show_ptp_clock.tmpl,.*,sonic,show ptp clock +show_ptp_time_property.tmpl,.*,sonic,show ptp time-property +show_ptp_parent.tmpl,.*,sonic,show ptp parent +show_ptp_port.tmpl,.*,sonic,show ptp port (Ethernet|Eth)\s*[0-9/]+ +mclagdctl_dump_state.tmpl, .*, sonic, mclagdctl dump state +mclagdctl_dump_portlist_local.tmpl, .*, sonic, mclagdctl dump portlist local -i \d+ +mclagdctl_dump_portlist_peer.tmpl, .*, sonic, mclagdctl dump portlist peer -i \d+ +mclagdctl_dump_mac.tmpl, .*, sonic, mclagdctl dump mac -i \d+ +show_mclag_brief.tmpl, .*, sonic, show mclag brief +show_mclag_separate_ip_interfaces.tmpl, .*, sonic, show mclag separate-ip-interfaces +show_mclag_interface.tmpl, .*, sonic, show mclag interface \d+ \d+ +show_frr_config.tmpl,.*,sonic, write terminal +show_frr_config.tmpl,.*,sonic, write terminal ospfd +show_portchannel_kernel.tmpl, .*, sonic, ip link show dev .* +teamdctl_portchannel_state.tmpl, .*, sonic, teamdctl PortChannel.* state +teamdctl_portchannel_config.tmpl, .*, sonic, teamdctl PortChannel.* config dump +show_portchannel_summary.tmpl, .*, sonic, show (p|P)ort(c|C)hannel summary.* +show_intf_portchannel.tmpl, .*, sonic, show interface PortChannel(\s*|\s+\d+) +show_int_transceiver_presence.tmpl, .*, sonic, show int transceiver presence +show_int_transceiver_lpmode.tmpl, .*, sonic, show int transceiver lpmode +show_management_vrf.tmpl, .*, sonic, show mgmt-vrf +show_ip_prefix_list.tmpl, .*, sonic, show ip prefix-list .* +show_ipv6_prefix_list.tmpl, .*, sonic, show ipv6 prefix-list .* +show_ip_vrf.tmpl, .*, sonic, show ip vrf$ +show_management_interface_address.tmpl, .*, sonic, show management_interface address +show_ip_vrf_management.tmpl, .*, sonic, show ip vrf management +show_ip_dhcp_relay_brief.tmpl, .*, sonic, show ip dhcp-relay brief.* +show_ip_dhcp_relay_brief.tmpl, .*, sonic, show ipv6 dhcp-relay brief.* +show_ipv6_dhcp_relay_statistics.tmpl, .*, sonic, show ipv6 dhcp-relay statistics.* +show_ip_dhcp_relay_detailed.tmpl, .*, sonic, show ip dhcp-relay detailed.* +show_ip_dhcp_relay_detailed.tmpl, .*, sonic, show ipv6 dhcp-relay detailed.* +show_ip_helper_address_statistics.tmpl, .*, sonic, show ip helper_address statistics +show_ip_helper_address_statistics.tmpl, .*, sonic, show ip helper-address statistics +show_ip_helper_address_config.tmpl, .*, sonic, show ip helper_address config +show_ip_helper_address_config.tmpl, .*, sonic, show ip helper-address +show_ip_forward_protocol_config.tmpl, .*, sonic, show ip forward_protocol config +show_ip_forward_protocol_config.tmpl, .*, sonic, show ip forward-protocol +sonic_snmp_yml.tmpl, .*, sonic, cat /etc/sonic/snmp.yml +show_snmp_server_details.tmpl, .*, sonic, show snmp-server.* +show_snmp_counters.tmpl, .*, sonic, show snmp counters.* +show_portgroup.tmpl, .*, sonic, show portgroup +show_ip_static-anycast-gateway.tmpl, .*, sonic, show ip static-anycast-gateway +show_ipv6_static-anycast-gateway.tmpl, .*, sonic, show ipv6 static-anycast-gateway +id.tmpl, .*, sonic, id \S+ +show_hardware_access_list.tmpl, .*, sonic, show hardware access-list +show_docker_snmp_conf.tmpl, .*, sonic, sudo docker exec -ti snmp cat /etc/snmp/snmpd.conf.* +show_interface_naming.tmpl, .*, sonic, show interface-naming +show_copp_protocols.tmpl, .*, sonic, show copp protocols +show_copp_actions.tmpl, .*, sonic, show copp actions +show_policy_type_copp.tmpl, .*, sonic, show copp policy +show_classifier_match_type_copp.tmpl, .*, sonic, show copp classifiers + +######################################################################################### +######################## NEED TO BE CAREFUL ABOUT ADDING REDIS-CLI PATTERNS +######################## ENSURE THAT THE WILDCARDS ARE BELOW SPECIFIC PATTERNS +######################################################################################### +show_stp_vlan_intf_flush.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall STP_VLAN_INTF_FLUSH.* +show_stp_vlan_intf.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall _STP_VLAN_INTF.* +show_stp_vlan_instance.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall STP_VLAN_INSTANCE.* +show_stp_port_state.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall STP_PORT_STATE.* +show_stp_intf.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall _STP_INTF.* +show_stp_vlan.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall _STP_VLAN.* +show_nat_apdb.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall NA.* +show_mcast_appdb.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall "IPMC_ROUTE_TABLE.*" +show_intf_mcast_mode_appdb.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall INTF_TABLE:.* +show_redis_cli_counters_map.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 2 hget .*MAP .* +show_redis_cli_vid_to_rid_map.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 1 hget VIDTORID .* +cloud_advanced/show_tam_int_ifa_ts_redis_flow.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall _TAM_INT_IFA_TS_FLOW.* +cloud_advanced/show_redis_tam_drop_monitor.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall TAM_DROP_MONITOR_FLOW_TABLE:* +show_lldp_redis_cli.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 4 hgetall "LLDP_PORT.*" +show_portchannel_configdb.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 4 hgetall 'PORTCHANNEL.* +show_portchannel_appdb.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 hgetall 'LAG_TABLE.* +show_portchannel_statedb.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 6 hgetall 'LAG_TABLE.* +show_redis_cli_TRANSCEIVER_INFO.tmpl, .*, sonic, redis-cli -n 6 keys TRANSCEIVER_INFO* +show_redis_cli_hget_all_interface.tmpl, .*, sonic, redis-cli -n 6 hgetall 'TRANSCEIVER_INFO.* +show_redis-cli_TRANSCEIVER_DOM_SENSOR.tmpl, .*, sonic, redis-cli -n 6 keys TRANSCEIVER_DOM_SENSOR* +show_redis_DOM_SENSOR_Interface_details.tmpl, .*, sonic, redis-cli -n 6 hgetall 'TRANSCEIVER_DOM_SENSOR.* +show_redis_cli_stp_iccp.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 6 hgetall '_STP_ICCP.* +show_redis_cli_stp_iccp.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 6 hgetall 'STP_FASTAGEING_FLUSH.* +show_redis_cli_transceiver_info.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 6 hgetall "TRANSCEIVER_INFO* +show_redis_cli_dom.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 6 hgetall "TRANSCEIVER_DOM_SENSOR* +show_redis-cli_keys.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 8 keys ERROR.* +show_redis_error_db.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 8 hgetall .* +show_redis_cli_key_search.tmpl, .*, sonic, redis-cli(?: -p \d+)? HGETALL \S+ +show_redis_cli_key_search.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n 0 HGETALL \S+ +show_redis_cli_key_search.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n \d+ hgetall \S+:oid:\S+ +show_redis_cli_ip_db.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n \d+ hgetall \S+ +show_redis_cli_key_search.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n \d+ keys \S+ +show_redis_cli_key_search.tmpl, .*, sonic, sudo redis-cli(?: -p \d+)? -n \d+ keys \S+ +show_redis_cli_key_buffer_pool.tmpl, .*, sonic, redis-cli(?: -p \d+)? -n \d+ Hgetall \S+ +######################################################################################### +show_stp_vlan_intf_flush.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall STP_VLAN_INTF_FLUSH.* +show_stp_vlan_intf.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall _STP_VLAN_INTF.* +show_stp_vlan_instance.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall STP_VLAN_INSTANCE.* +show_stp_port_state.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall STP_PORT_STATE.* +show_stp_intf.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall _STP_INTF.* +show_stp_vlan.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall _STP_VLAN.* +show_nat_apdb.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall NA.* +show_mcast_appdb.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall "IPMC_ROUTE_TABLE.*" +show_intf_mcast_mode_appdb.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall INTF_TABLE:.* +show_redis_cli_counters_map.tmpl, .*, sonic, sonic-db-cli COUNTERS_DB hget .*MAP .* +show_redis_cli_vid_to_rid_map.tmpl, .*, sonic, sonic-db-cli ASIC_DB hget VIDTORID .* +cloud_advanced/show_tam_int_ifa_ts_redis_flow.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall _TAM_INT_IFA_TS_FLOW.* +cloud_advanced/show_redis_tam_drop_monitor.tmpl, .*, sonic, sudo sonic-db-cli APPL_DB hgetall TAM_DROP_MONITOR_FLOW_TABLE:* +show_portchannel_configdb.tmpl, .*, sonic, sonic-db-cli CONFIG_DB hgetall 'PORTCHANNEL.* +show_portchannel_appdb.tmpl, .*, sonic, sonic-db-cli APPL_DB hgetall 'LAG_TABLE.* +show_portchannel_statedb.tmpl, .*, sonic, sonic-db-cli STATE_DB hgetall 'LAG_TABLE.* +show_redis_cli_stp_iccp.tmpl, .*, sonic, sonic-db-cli STATE_DB hgetall '_STP_ICCP.* +show_redis_cli_stp_iccp.tmpl, .*, sonic, sonic-db-cli STATE_DB hgetall 'STP_FASTAGEING_FLUSH.* +show_redis-cli_keys.tmpl, .*, sonic, sonic-db-cli ERROR_DB keys ERROR.* +show_redis_error_db.tmpl, .*, sonic, sonic-db-cli ERROR_DB hgetall .* +show_redis_cli_key_search.tmpl, .*, sonic, sonic-db-cli HGETALL \S+ +show_redis_cli_key_search.tmpl, .*, sonic, sonic-db-cli \w+ hgetall \S+:oid:\S+ +show_redis_cli_ip_db.tmpl, .*, sonic, sonic-db-cli \w+ hgetall \S+show_ip_access_group +show_redis_cli_key_search.tmpl, .*, sonic, sonic-db-cli \w+ keys \S+ +show_redis_cli_key_search.tmpl, .*, sonic, sudo sonic-db-cli \w+ keys \S+ +show_redis_cli_key_buffer_pool.tmpl, .*, sonic, sonic-db-cli \w+ Hgetall \S+ +######################################################################################### +show_udld_global.tmpl,.*,sonic,show udld global +show_errdisable_recovery.tmpl,.*,sonic,show errdisable recovery +show_udld_neighbors.tmpl,.*,sonic,show udld neighbors +show_udld_interface.tmpl,.*,sonic,show udld interface \w+ +show_udld_statistics.tmpl,.*,sonic,show udld statistics +show_udld_statistics.tmpl,.*,sonic,show udld statistics interface \w+ + +show_queue_counters_cisco.tmpl, .*, sonic, show queue counters .* +show_queue_watermark_unicast_cisco.tmpl, .*, sonic, show queue watermark unicast +show_queue_watermark_multicast_cisco.tmpl, .*, sonic, show queue watermark multicast +show_priority_group_counters_cisco.tmpl, .*, sonic, show priority-group (drop|watermark) (counters|headroom|shared) +show_queue_watermark_multicast.tmpl, .*, sonic, show queue (watermark|persistent-watermark) multicast .* +show_queue_watermark_unicast.tmpl, .*, sonic, show queue (watermark|persistent-watermark) unicast .* +show_priority_group_threshold.tmpl, .*, sonic, show priority-group (watermark|persistent-watermark) (shared|headroom) .* +show_queue_watermark_unicast.tmpl, .*, sonic, show queue (watermark|persistent-watermark) unicast .* +show_priority_group_watermark.tmpl, .*, sonic, show priority-group (watermark|persistent-watermark) (shared|headroom) .* +show_queue_watermark_multicast.tmpl, .*, sonic, show queue (watermark|persistent-watermark) percentage multicast .* +show_queue_watermark_unicast.tmpl, .*, sonic, show queue (watermark|persistent-watermark) percentage unicast .* +show_priority_group_watermark.tmpl, .*, sonic, show priority-group (watermark|persistent-watermark) percentage (shared|headroom) .* +show_watermark_telemetry_interval.tmpl, .*, sonic, show watermark telemetry interval +show_watermark_interval.tmpl, .*, sonic, show watermark interval +show_buffer_pool_watermark.tmpl, .*, sonic, show buffer_pool (watermark|persistent-watermark) +show_linktrack_summary.tmpl, .*, sonic, show linktrack summary +show_linktrack_group.tmpl, .*, sonic, show linktrack group .* +show_link_state_tracking_group.tmpl, .*, sonic, show link state tracking \w+ +show_link_state_tracking.tmpl, .*, sonic, show link state tracking +show_queue_watermark_cpu.tmpl, .*, sonic, show queue watermark (cpu|CPU) +show_buffer_pool_watermark_percentage.tmpl, .*, sonic, show buffer_pool (watermark|persistent-watermark) (-p|--percentage) +ethtool_interface.tmpl, .*, sonic, /sbin/ethtool .* +show_ip_access_group.tmpl, .*, sonic, show ip access-group +show_ip_arp_interface_ethernet_summary.tmpl, .*, sonic, show ip arp interface (Ethernet|Eth|PortChannel|Vlan|Loopback|Management|Vxlan) ([0-9/:]+) summary +show_ip_arp.tmpl, .*, sonic, show ip arp.* +show_bgp_nexthop.tmpl, .*, sonic, show bgp nexthop +show_vlan_brief.tmpl, .*, sonic, show vlan brief +show_qos_map_dot1p_tc.tmpl, .*, sonic, show qos map dot1p-tc +show_qos_map_dscp_tc.tmpl, .*, sonic, show qos map dscp-tc +show_interface_counters.tmpl, .*, sonic, (sudo )?show interface counters( -i)? +show_Vlan.tmpl, .*, sonic, show (v|V)lan.* +sudo_sonic_installer_list.tmpl, .*, sonic, (sudo sonic_installer|show image) list +show_system_reserved_vlan.tmpl, .*, sonic, show system vlan reserved +show_bgp_ipv4_prefix.tmpl, .*, sonic, show bgp ipv4\s*([\d\.\/]+) +show_interfaces_portchannel_qa.tmpl, .*, sonic, show interfaces portchannel +top.tmpl, .*, sonic, top +show_mac.tmpl, .*, sonic, show mac +show_ipv6_neighbors.tmpl, .*, sonic, show ipv6 neighbors +show_lldp_neighbors.tmpl, .*, sonic, show (lldp\s+)?neighbors +show_ip_bgp.tmpl, .*, sonic, show bgp ipv(4|6) unicast\s+(vrf .*\s+)?route-map +show_ip_bgp.tmpl, .*, sonic, show bgp ipv(4|6) unicast\s+vrf .* +show_ip_bgp.tmpl, .*, sonic, show ip bgp +show_ip_bgp.tmpl, .*, sonic, show bgp ipv4(\s+unicast)? +show_ip_bgp.tmpl, .*, sonic, show bgp ipv6(\s+unicast)? +show_interface_status.tmpl, .*, sonic, show interface status +show_ip_access_lists.tmpl, .*, sonic, show (ip|ipv6|mac){1} access-lists +show_nat_translations.tmpl, .*, sonic, show nat translations +show_bgp_neighbor.tmpl, .*, sonic, show bgp ipv(4|6) unicast (vrf .*\s+)?neighbor +show_bgp_neighbor.tmpl, .*, sonic, show bgp all (vrf .*\s+)?neighbors +show_bgp_neighbor.tmpl, .*, sonic, show ip bgp (vrf .*\s+)?(ipv4\s+|ipv6\s+)?(unicast\s+)?neighbor +show_bgp_neighbor.tmpl, .*, sonic, show bgp (vrf .*\s+)?(ipv4\s+|ipv6\s+)?(unicast\s+)?neighbor +show_arp.tmpl, .*, sonic, show arp +show_watermark_telemetry_interval.tmpl, .*, sonic, show watermark telemetry interval +show_nat_statistics.tmpl, .*, sonic, show nat statistics +show_tacacs_server.tmpl, .*, sonic, show tacacs-server.* +show_vlan_config.tmpl, .*, sonic, show vlan config +show_ntp.tmpl, .*, sonic, show ntp.* +show_bfd_sum_sonic.tmpl, .*, sonic, show bfd sum.* +show_ip_route_summary.tmpl, .*, sonic, show ipv6 route summary diff --git a/sonic-mgmt/spytest/templates/ip_neigh_show.tmpl b/sonic-mgmt/spytest/templates/ip_neigh_show.tmpl new file mode 100644 index 00000000000..9095fad1c08 --- /dev/null +++ b/sonic-mgmt/spytest/templates/ip_neigh_show.tmpl @@ -0,0 +1,12 @@ +Value IP_ADDRESS (\S+) +Value INTERFACE (\S+) +Value MACADDRESS (..:..:..:..:..:..) +Value entry_type (\S+) +Value proto (\S+) +Value static (\S+) + +Start + ^${IP_ADDRESS}\s*dev\s*${INTERFACE}\s*lladdr\s*${MACADDRESS}\s*${entry_type}\s*proto\s*${proto} -> Record + ^${IP_ADDRESS}\s*dev\s*${INTERFACE}\s*lladdr\s*${MACADDRESS}\s*${entry_type}\s*${static}\s*proto\s*${proto} -> Record + ^${IP_ADDRESS}\s*dev\s*${INTERFACE}\s*lladdr\s*${MACADDRESS}\s*${entry_type} -> Record + ^$$ diff --git a/sonic-mgmt/spytest/templates/linux/ifconfig_eth.tmpl b/sonic-mgmt/spytest/templates/linux/ifconfig_eth.tmpl new file mode 100644 index 00000000000..a8f199346b2 --- /dev/null +++ b/sonic-mgmt/spytest/templates/linux/ifconfig_eth.tmpl @@ -0,0 +1,36 @@ +Value interface ([\S\d]+) +Value flags ([\d]+) +Value mtu ([\d]+) +Value inet ([\.\d]+) +Value netmask ([\.\d]+) +Value broadcast ([\.\d]+) +Value inet6 ([\d\.\S]+) +Value prefixlen ([\d]+) +Value scopeid ([\dx]+) +Value ether ([\d\:]+) +Value txqueuelen ([\d]+) +Value RXpackets ([\d]+) +Value RXbytes ([\d]+) +Value RXDecimal ([\d\.\S\s]+) +Value RXerrors ([\d]+) +Value RXdropped ([\d]+) +Value RXoverruns ([\d]+) +Value RXframe ([\d]+) +Value TXPackets ([\d]+) +Value TXbytes ([\d]+) +Value TXDecimal ([\d\.\S\s]+) +Value TXerrors (\d+) +Value TXdropped (\d+) +Value TXoverruns (\d+) +Value TXframe (\d+) +Value TXcollisions (\d+) + +Start + ^\s*${interface}:\s+flags=${flags}\s*mtu\s*${mtu} + ^\s*inet\s*${inet}\s*netmask\s*${netmask}\s*broadcast\s*${broadcast} + ^\s*inet6\s*${inet6}\s*prefixlen\s*${prefixlen}\s*scopeid\s*${scopeid} + ^\s*ether\s*${ether}\s*txqueuelen\s*${txqueuelen}\s*\(Ethernet\) + ^\s*RX\s*packets\s*${RXpackets}\s*bytes\s*${RXbytes}\s*\(${RXDecimal}\) + ^\s*RX\s*errors\s*${RXerrors}\s*dropped\s*${RXdropped}\s*overruns\s8{RXoverruns}\s*frame\s*${RXframe} + ^\s*TX\s*packets\s*${TXPackets}\s*bytes\s*${TXbytes}\s*\(${TXDecimal}\) + ^\s*TX\s*errors\s*${TXerrors}\s*dropped\s*${TXdropped}\s*overruns\s8{TXoverruns}\s*carrier\s*${TXframe}\s*collisions\s*${TXcollisions} diff --git a/spytest/templates/linux/ip_route_list_dev.tmpl b/sonic-mgmt/spytest/templates/linux/ip_route_list_dev.tmpl similarity index 100% rename from spytest/templates/linux/ip_route_list_dev.tmpl rename to sonic-mgmt/spytest/templates/linux/ip_route_list_dev.tmpl diff --git a/spytest/templates/route_n.tmpl b/sonic-mgmt/spytest/templates/route_n.tmpl similarity index 100% rename from spytest/templates/route_n.tmpl rename to sonic-mgmt/spytest/templates/route_n.tmpl diff --git a/sonic-mgmt/spytest/templates/sfputil_reset_ethernet.tmpl b/sonic-mgmt/spytest/templates/sfputil_reset_ethernet.tmpl new file mode 100644 index 00000000000..ab518fd0912 --- /dev/null +++ b/sonic-mgmt/spytest/templates/sfputil_reset_ethernet.tmpl @@ -0,0 +1,6 @@ +Value Port (Ethernet\d+) +Value Status (OK) + +Start + ^\s*Resetting port ${Port}... ${Status} + diff --git a/sonic-mgmt/spytest/templates/sfputil_show_eeprom.tmpl b/sonic-mgmt/spytest/templates/sfputil_show_eeprom.tmpl new file mode 100644 index 00000000000..f34168cb63b --- /dev/null +++ b/sonic-mgmt/spytest/templates/sfputil_show_eeprom.tmpl @@ -0,0 +1,37 @@ +Value interface (\w+) +Value status ([\S\s\S]+) +Value ApplicationAdvertisement ([\w\/]+) +Value Connector ([\w\s]+) +Value Encoding (\w+) +Value ExtendedIdentifier ([\w\d\s\,\(\)\.]+) +Value Compliance ([\w\+\d\s]+) +Value Identifier ([\w\d\s]+) +Value Length (\w+) +Value BitRate (\w+) +Value SpecificationCompliance (\w+) +Value VendorDate ([\d\-]+) +Value VendorName ([\w\-]+) +Value VendorOUI ([\d\-\S]+) +Value VendorPN ([\s\-\S]+) +Value VendorRev ([\d\s\w]+) +Value VendorSN ([\s\-\w]+) + +Start + ^${interface}\:\s+SFP\s+EEPROM\s+${status} + ^\s*Application\s+Advertisement\:\s+${ApplicationAdvertisement} + ^\s*Connector\:\s+${Connector} + ^\s*Encoding\:\s+${Encoding} + ^\s*Extended\s+Identifier\:\s+${ExtendedIdentifier} + ^\s*Extended\s+RateSelect\s+Compliance\:\s+${Compliance} + ^\s*Identifier\:\s+${Identifier} + ^\s*Length\s+Cable\s+Assembly\(m\)\:\s+${Length} + ^\s*Nominal\s+Bit\s+Rate\(100Mbs\)\:\s+${BitRate} + ^\s*Specification\s+compliance\:\s+${SpecificationCompliance} + ^\s*Vendor\s+Date\s+Code\(YYYY\-MM\-DD\s+Lot\)\:\s+${VendorDate} + ^\s*Vendor\sName\:\s+${VendorName} + ^\s*Vendor\s+OUI\:\s+${VendorOUI} + ^\s*Vendor\s+PN\:\s+${VendorPN} + ^\s*Vendor\s+Rev\:\s+${VendorRev} + ^\s*Vendor\s+SN\:\s+${VendorSN} + ^\s*$$ -> Record + diff --git a/spytest/templates/show_acl_rule_qa.tmpl b/sonic-mgmt/spytest/templates/show_acl_rule_qa.tmpl similarity index 100% rename from spytest/templates/show_acl_rule_qa.tmpl rename to sonic-mgmt/spytest/templates/show_acl_rule_qa.tmpl diff --git a/spytest/templates/show_acl_table_qa.tmpl b/sonic-mgmt/spytest/templates/show_acl_table_qa.tmpl similarity index 100% rename from spytest/templates/show_acl_table_qa.tmpl rename to sonic-mgmt/spytest/templates/show_acl_table_qa.tmpl diff --git a/sonic-mgmt/spytest/templates/show_app_db_route_table.tmpl b/sonic-mgmt/spytest/templates/show_app_db_route_table.tmpl new file mode 100644 index 00000000000..9a35fdfc734 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_app_db_route_table.tmpl @@ -0,0 +1,16 @@ +Value Filldown IP_ADDRESS (\S+) +Value INTERFACE (\S+) +Value NEXTHOP (\S+) +Value mac (..:..:..:..:..:..) +Value vrf (\S+) +Value vlan (\S+) +Value vni_label (\d+) + +Start + ^\s*\"ROUTE_TABLE:${vrf}:${IP_ADDRESS}\":\s* + ^\s*\"NEIGH_TABLE:${vlan}:${IP_ADDRESS}\":\s* + ^\s+\"ifname\":\s*\"${INTERFACE}\"\s* + ^\s+\"nexthop\":\s*\"${NEXTHOP}\"\s* + ^\s+\"router_mac\":\s*\"${mac}\"\s* + ^\s+\"vni_label\":\s*\"${vni_label}\"\s* + ^\s+\"neigh\":\s*\"${mac}\"\s* diff --git a/sonic-mgmt/spytest/templates/show_appl_db_vxlan_fdb_tbl.tmpl b/sonic-mgmt/spytest/templates/show_appl_db_vxlan_fdb_tbl.tmpl new file mode 100644 index 00000000000..feb0f736737 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_appl_db_vxlan_fdb_tbl.tmpl @@ -0,0 +1,11 @@ +Value Filldown MAC_ADDR (..:..:..:..:..:..) +Value VTEP (\S+) +Value type (\S+) +Value vni_label (\d+) +Value vlan (\S+) + +Start + ^\s*\"VXLAN_FDB_TABLE:${vlan}:${MAC_ADDR}\":\s* + ^\s+\"remote_vtep\":\s*\"${VTEP}\"\s* + ^\s+\"type\":\s*\"${type}\"\s* + ^\s+\"vni\":\s*\"${vni_label}\"\s* diff --git a/spytest/templates/show_arp.tmpl b/sonic-mgmt/spytest/templates/show_arp.tmpl similarity index 100% rename from spytest/templates/show_arp.tmpl rename to sonic-mgmt/spytest/templates/show_arp.tmpl diff --git a/sonic-mgmt/spytest/templates/show_ars_cisco.tmpl b/sonic-mgmt/spytest/templates/show_ars_cisco.tmpl new file mode 100644 index 00000000000..3911429a76d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_ars_cisco.tmpl @@ -0,0 +1,9 @@ +Value ARS_PROFILE_NAME (\S+) +Value ENABLE_ALL_PACKETS (\S+) +Value ARS_MODE (\S+) +Value ARS_IDLE_TIME (\S+) + +Start + ^\s*NAME\s+ENABLE ALL PACKETS\s+MODE\s+IDLE TIME\s*$$ + ^-+\s+-+\s+-+\s+-+\s*$$ + ^\s*${ARS_PROFILE_NAME}\s+${ENABLE_ALL_PACKETS}\s+${ARS_MODE}\s+${ARS_IDLE_TIME}\s*$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_asic_db.tmpl b/sonic-mgmt/spytest/templates/show_asic_db.tmpl new file mode 100644 index 00000000000..48438046054 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_asic_db.tmpl @@ -0,0 +1,17 @@ +Value IP_ADDRESS (\S+) +Value INTERFACE (\S+) +Value NEXTHOPID (\S+) +Value NEXTHOPIP (\S+) +Value vni_label (\d+) +Value attr_type (\S+) +Value mac_address (..:..:..:..:..:..) + +Start + ^\s*\"ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:\{\\\"dest\\\":\\\"${IP_ADDRESS}\\\",\\\"sw\s* + ^\s*\"ASIC_STATE:SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:\{\\\"ip\\\":\\\"${IP_ADDRESS}\\\",\\\"rif\s* + ^\s+\"SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID\":\s*\"oid:${NEXTHOPID}\" + ^\s+"SAI_NEXT_HOP_ATTR_IP":\s*"${NEXTHOPIP}", + ^\s+"SAI_NEXT_HOP_ATTR_TUNNEL_VNI":\s*"${vni_label}",$$ -> Record + ^\s+"SAI_NEXT_HOP_GROUP_ATTR_TYPE":\s*"${attr_type}"$$ -> Record + ^\s*\"ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP:oid:${NEXTHOPID}\":\s* + ^\s+\"SAI_NEIGHBOR_ENTRY_ATTR_DST_MAC_ADDRESS":\s*"${mac_address}"$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_bfd_sum_sonic.tmpl b/sonic-mgmt/spytest/templates/show_bfd_sum_sonic.tmpl new file mode 100644 index 00000000000..f5cc7c98f47 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bfd_sum_sonic.tmpl @@ -0,0 +1,21 @@ +Value Filldown count (\d+) +Value ADDRESS (\S+) +Value INTERFACE (\S+) +Value VRF (\S+) +Value State (\S+) +Value Type (\S+) +Value Laddr (\S+) +Value TxInt (\S+) +Value RxInt (\S+) +Value Multiplier (\S+) +Value Multihop (\S+) +Value Ldisc (\S+) + +Start + ^sudo: unable to resolve host.*$$ + ^Total\s+number\s+of\s+BFD\s+sessions:\s+${count}$$ + ^Peer Addr.*$$ + ^(-+\s*)\s.*$$ + ^${ADDRESS}\s+${INTERFACE}\s+${VRF}\s+${State}\s+${Type}\s+${Laddr}\s+${TxInt}\s+${RxInt}\s+${Multiplier}\s+${Multihop}\s+${Ldisc}.*$$ -> Record + +EOF diff --git a/spytest/templates/show_bgp_ipv4_prefix.tmpl b/sonic-mgmt/spytest/templates/show_bgp_ipv4_prefix.tmpl similarity index 100% rename from spytest/templates/show_bgp_ipv4_prefix.tmpl rename to sonic-mgmt/spytest/templates/show_bgp_ipv4_prefix.tmpl diff --git a/spytest/templates/show_bgp_ipv4_unicast_vrf_dampened_paths.tmpl b/sonic-mgmt/spytest/templates/show_bgp_ipv4_unicast_vrf_dampened_paths.tmpl similarity index 100% rename from spytest/templates/show_bgp_ipv4_unicast_vrf_dampened_paths.tmpl rename to sonic-mgmt/spytest/templates/show_bgp_ipv4_unicast_vrf_dampened_paths.tmpl diff --git a/spytest/templates/show_bgp_ipv4v6uni_prefix.tmpl b/sonic-mgmt/spytest/templates/show_bgp_ipv4v6uni_prefix.tmpl similarity index 100% rename from spytest/templates/show_bgp_ipv4v6uni_prefix.tmpl rename to sonic-mgmt/spytest/templates/show_bgp_ipv4v6uni_prefix.tmpl diff --git a/sonic-mgmt/spytest/templates/show_bgp_ipv6.tmpl b/sonic-mgmt/spytest/templates/show_bgp_ipv6.tmpl new file mode 100644 index 00000000000..a7e637b415d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_ipv6.tmpl @@ -0,0 +1,43 @@ +Value NEXT_HOP ([*.:\dabcdefABCDEF]+) +Value Filldown NETWORK ([.:\dabcdefABCDEF]+\/\d+) +Value METRIC (\S{0,6}) +Value LOCAL_PREF (\S{0,6}) +Value WEIGHT (\S{1,6}) +Value AS_PATH (\d+) +Value VERSION (\d+) +Value Filldown ROUTER_ID (\S{0,19}) +Value STATUS_CODE ([sdhirSR*>=#]*) +Value INTERNAL ([ie\?]?) +Value Filldown VRF (\S+) +Value Filldown AS_NUM (\d+) +Value ORIGIN ([ie\?]?) + + +Start + ^\s*BGP\s+routing\s+table\s+information\s+for\s+VRF\s+${VRF}\s*$$ + ^\s*Router\s+identifier\s+${ROUTER_ID},\s+local\s+AS\s+number\s+${AS_NUM}\s*$$ + ^\s*Network\s+Next\s+Hop\s+Metric\s+LocPref\s+Weight\s+Path\s*$$ -> Bgp_table + ^\s*BGP table version is ${VERSION}, local router ID is ${ROUTER_ID}\s*$$ + ^\s*Network\s+Next Hop\s+Metric\s+LocPrf\s+Weight\s+Path -> Bgp_table + +Bgp_table + ^\s*${STATUS_CODE}\s+${INTERNAL}\s+${NEXT_HOP}\s*$$ -> Continue + ^\s{1,45}${METRIC}\s{0,9}${LOCAL_PREF}\s+${WEIGHT}\s+${AS_PATH}\s*$$ -> Record + ^\s*${STATUS_CODE}\s{1,16}${INTERNAL}\s+${NETWORK}\s+${NEXT_HOP}\s*$$ -> Continue + ^\s{1,45}${METRIC}\s{0,9}${LOCAL_PREF}\s+${WEIGHT}\s+${AS_PATH}\s*$$ -> Record + ^\s*${STATUS_CODE}\s{1,16}${INTERNAL}\s+${NETWORK}\s+${NEXT_HOP}\s+${METRIC}\s{0,9}${LOCAL_PREF}\s+${WEIGHT}\s+\(*${AS_PATH}\)*\s+${ORIGIN}\s*$$ -> Record + ^\s*${STATUS_CODE}\s{1,16}${INTERNAL}\s+${NEXT_HOP}\s+${METRIC}\s{0,9}${LOCAL_PREF}\s+${WEIGHT}\s+${AS_PATH}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${INTERNAL}\s+${NETWORK}\s+${NEXT_HOP}\s+\s+${WEIGHT}\s+${AS_PATH}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NETWORK}\s+${NEXT_HOP}\s+${METRIC}\s+${LOCAL_PREF}\s+${WEIGHT}\s+${AS_PATH}\s+${INTERNAL}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NETWORK}\s+${NEXT_HOP}\s+${METRIC}\s+${LOCAL_PREF}\s+${WEIGHT}\s+${INTERNAL}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NETWORK}\s+${NEXT_HOP}\s+${METRIC}\s+${WEIGHT}\s+${AS_PATH}\s+${INTERNAL}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NEXT_HOP}\s+${METRIC}\s+${WEIGHT}\s+${AS_PATH}\s+${INTERNAL}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NETWORK}\s+${NEXT_HOP}\s+${METRIC}\s+${AS_PATH}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NETWORK}\s+${NEXT_HOP}\s+${METRIC}\s+${INTERNAL}\s*$$ -> Record + ^\s*${STATUS_CODE}\s+${NETWORK}\s+${NEXT_HOP}\s*$$ -> Continue + ^\s{10,20}\s*${METRIC}\s+${LOCAL_PREF}\s+${WEIGHT}\s+${AS_PATH}\s+${INTERNAL}\s*$$ -> Record + + + +EOF + diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_prefix.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_prefix.tmpl new file mode 100644 index 00000000000..aea40446054 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_prefix.tmpl @@ -0,0 +1,42 @@ +Value Filldown PREFIXIP ([\d\.]+) +Value Filldown NOOFPATHS (\d+) +Value Filldown PEERIP ((((?:[\dabcdefABCDEF]+[.:]+)+[\dabcdefABCDEF]*\s*)+)|(Local)) +Value PEERASN ([\(\d\)\s]+) +Value peernhtip1 ([.:\dabcdefABCDEF]+) +Value peernhtip2 ([.:\dabcdefABCDEF]+) +Value peerrtrid ([.:\dabcdefABCDEF]+) +Value ORIGIN (\S+) +Value METRIC (\d*) +Value LOCALPREF (\d*) +Value VALID (\w+) +Value EXTERNAL ([-()\d\w\s]+) +Value BEST ([-()\d\w\s]+) +Value COMMUNITY (.*?) +Value SUBTYPE (\d+) +Value EVPNTYPE (\d+) +Value ETHTAG (\d+) +Value IPLEN (\d+) +Value ADVERTIP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value ROUTEIP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value VNI (\d+) +Value PATHEVPNTYPE (\d+) +Value PATHETHTAG (\d+) +Value PATHIPLEN (\d+) +Value LOCAL ([-()\d\w\s]+) +Value WEIGHT ([-()\d\w\s]+) +Value SOURCED ([-()\d\w\s]+) + +Start + ^\s*BGP\s*routing\s*table\s*entry\s*for\s*${PREFIXIP}:\d:\[${EVPNTYPE}\]:\[${ETHTAG}\]:\[${IPLEN}\]:\[${ADVERTIP}\]$$ + ^\s*Paths\:\s*\(${NOOFPATHS}\s*available,\s*(best\s*\#(\d+),\s*table\s*default\))|(no best path\))$$ + ^\s*Advertised\s*to\s*non\s*peer-group\s*peers\:$$ + ^\s*${PEERIP}+$$ + ^\s*Route \[${PATHEVPNTYPE}\]:\[${PATHETHTAG}\]:\[${PATHIPLEN}\]:\[${ROUTEIP}\]\s*VNI\s*${VNI}$$ + ^\s*Local|${PEERASN}+$$ + ^\s*${peernhtip1}\s*(\(\w+\))*\s*from\s*${peernhtip2}\s*\(${peerrtrid}\)$$ + ^\s*Origin\s*${ORIGIN}(,\s*metric\s*${METRIC}){0,1}(,\s*localpref\s*${LOCALPREF}){0,1},\s*${VALID},\s*${EXTERNAL}(,\s*${BEST}){0,1}$$ + ^\s*Origin\s*${ORIGIN}(,\s*metric\s*${METRIC}){0,1}(,\s*weight\s*${WEIGHT}),\s*${VALID}(,\s*${SOURCED})(,\s*${LOCAL})(,\s*${BEST}\s*)$$ + ^\s*Extended Community:\s*${COMMUNITY}\s*$$ + ^\s*Last update:\s*(.*)$$ -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_1.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_1.tmpl new file mode 100644 index 00000000000..ef46bc35ebf --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_1.tmpl @@ -0,0 +1,27 @@ +Value Filldown VERSION (\d+) +Value Filldown ROUTER_ID (\S{0,19}) +Value Filldown ROUTE_DISTINGUISHER (\d+\.\d+\.\d+\.\d+:\d+) +Value STATUS_CODE ([sdhi>*]*) +Value ROUTE_TYPE (\d+) +Value ETH_TAG (\d+) +Value ESI ([\da-fA-F:]+) +Value IP_LEN (\d+) +Value VTEP_IP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value FRAG_ID (\d+) +Value NEXT_HOP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value WEIGHT (\d*) +Value PATH (.*?) +Value ORIGIN ([ie\?]?) +Value RT (\d+:\d+) +Value ET (\d+) +Value ND_PROXY (ND:Proxy) + +Start + ^\s*BGP table version is ${VERSION}, local router ID is ${ROUTER_ID}$$ + ^\s*Route Distinguisher:\s+${ROUTE_DISTINGUISHER}$$ + ^\s*${STATUS_CODE}\s+\[${ROUTE_TYPE}\]:\[${ETH_TAG}\]:\[${ESI}\]:\[${IP_LEN}\](:\[${VTEP_IP}\]:\[${FRAG_ID}\])?$$ + ^\s*${NEXT_HOP}\s+${WEIGHT}(\s+${PATH})?\s+${ORIGIN}$$ + ^\s*ET:${ET}\s+RT:${RT}(?:\s+${ND_PROXY})?$$ -> Record + ^\s*RT:${RT}\s+ET:${ET}$$ -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_2.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_2.tmpl new file mode 100644 index 00000000000..8067f0ebc0c --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_2.tmpl @@ -0,0 +1,38 @@ +Value Filldown VERSION (\d+) +Value Filldown ROUTER_ID (\S{0,19}) +Value Filldown ROUTE_DISTINGUISHER (\d+\.\d+\.\d+\.\d+:\d+) +Value STATUS_CODE ([sdhi>*]*) +Value ROUTE_TYPE (\d+) +Value ETH_TAG (\d+) +Value MAC_LEN (\d+) +Value MAC ([0-9A-Fa-f:]+) +Value IP_LEN (\d+) +Value IP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value NEXT_HOP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value METRIC (\d*) +Value LOC_PREF (\d*) +Value WEIGHT (\d*) +Value PATH (.*?) +Value ORIGIN ([ie\?]?) +Value ESI ([\da-fA-F:]+) +Value RT (\d+:\d+) +Value ET (\d+) +Value RT1 (\d+:\d+) +Value RT2 (\d+:\d+) +Value RMAC ([0-9A-Fa-f:]+) +Value ND_PROXY (ND:Proxy) +Value MM (\d*) + +Start + ^\s*BGP table version is ${VERSION}, local router ID is ${ROUTER_ID}$$ + ^\s*Route Distinguisher:\s+${ROUTE_DISTINGUISHER}$$ + ^\s*${STATUS_CODE}\s+\[${ROUTE_TYPE}\]:\[${ETH_TAG}\]:\[${MAC_LEN}\]:\[${MAC}\](:\[${IP_LEN}\]:\[${IP}\])?$$ + ^\s*${NEXT_HOP}\s+${WEIGHT}(\s+${PATH})?\s+${ORIGIN}$$ + ^\s*ESI:${ESI}$$ + ^\s*RT:${RT}\s+ET:${ET}(?:\s+MM:${MM})?(?:\s+Rmac:${RMAC})?(?:\s+${ND_PROXY})?$$ -> Record + ^\s*RT:${RT1}\s+RT:${RT2}\s+ET:${ET}(?:\s+MM:${MM})?(?:\s+Rmac:${RMAC})?(?:\s+${ND_PROXY})?$$ -> Record + ^\s*ET:${ET}\s+RT:${RT}(?:\s+MM:${MM})?(?:\s+${ND_PROXY})?$$ -> Record + ^\s*ET:${ET}\s+RT:${RT1}(?:\s+RT:${RT2})?\s+Rmac:${RMAC}(?:\s+${ND_PROXY})?(?:\s+MM:${MM})?$$ -> Record + ^\s*RT:${RT1}\s+RT:${RT2}\s+ET:${ET}(?:\s+Rmac:${RMAC})?$$ -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_3.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_3.tmpl new file mode 100644 index 00000000000..f4b35a7470d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_3.tmpl @@ -0,0 +1,21 @@ +Value RouteDistinguisher (\S+:\d+) +Value Prefix1 (\[(?:\d|.)+]) +Value Prefix2 (\[(?:\d|.)+]) +Value Prefix3 (\[(?:\d|.)+]) +Value Prefix4 (\[(?:\d|.)+]) +Value NextHop (\S+) +Value Metric (\d*) +Value loc (\d*) +Value weight (\d*) +Value path (\S+) +Value path1 (\S+) +Value ExtendedCommunityPre (.*:\d+) +Value ExtendedCommunityPost (.*) + +Start +^Route\s+Distinguisher:\s+${RouteDistinguisher} -> WithinEntry + +WithinEntry +^\*> ${Prefix1}:${Prefix2}:${Prefix3}:${Prefix4} +^\s+${NextHop}\s+${Metric}\s+${loc}\s+${weight}\s+${path}\s+${path1} +^\s+${ExtendedCommunityPre}\s${ExtendedCommunityPost} -> Record Start \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_4.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_4.tmpl new file mode 100644 index 00000000000..e1761d6cf36 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_4.tmpl @@ -0,0 +1,86 @@ +Value Filldown BGP_TABLE_VERSION (\d+) +Value Filldown LOCAL_ROUTER_ID (\S+) +Value Filldown ROUTE_DISTINGUISHER (\S+) +Value STATUS_CODE ([-*>sdhi]*) +Value ROUTE_TYPE (\d+) +Value ESI ([\da-fA-F:]+) +Value IP_LEN (\d+) +Value IP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value NEXT_HOP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value ATTRIBUTES (.*) +Value ET (\d+) +Value ES_IMP_RT ([\da-fA-F:]+) +Value DF_ALG (\d+) +Value DF_PREF (\d+) + +Start + ^BGP\s+table\s+version\s+is\s+${BGP_TABLE_VERSION},\s+local\s+router\s+ID\s+is\s+${LOCAL_ROUTER_ID} -> Continue + # We expect to see "Route Distinguisher: xxxxx" lines after the version line + ^Route Distinguisher:\s+${ROUTE_DISTINGUISHER} -> PrefixLine + +PrefixLine + # -- PHASE 2: We enter a state waiting to find a route prefix line or a new RD. + # Prefix lines typically start with something like " *> [4]:[...]" or " * [4]:[...]" + # If we see a new RD, we update ROUTE_DISTINGUISHER. + # If we see 'Displayed', we are at the end of the output. + # + # Example prefix line: + # *> [4]:[00:02:03:04:05:06:07:08:09:0a]:[128]:[2000:1::1] + # + # Once we match a prefix line, we go to NextHopLine state. + # + # Match status code + prefix line: + # e.g. " *> [4]:[...]" or " * [4]:[...]" + # The status code is in group 1, the prefix in group 2. + # We'll strip leading spaces using ^\s* in front. + ^\s*${STATUS_CODE}\s+\[${ROUTE_TYPE}\]:\[${ESI}\]:\[${IP_LEN}\]:\[${IP}\]$$ -> NextHopLine + ^Displayed -> End + +NextHopLine + # -- PHASE 3: Parse the Next Hop line (and optional columns) immediately following the prefix line. + # Example: " 2000:1::1 32768 i" + # or maybe the metric/locPrf are missing, or path is multiple AS numbers. + # We'll capture the fields that appear. Then we transition to ExtCommLine. + # + # If another "Route Distinguisher" appears right away, it means no next-hop line was found, + # which can happen in some corner cases. We'll record a blank row, go to PrefixLine. + ^Route Distinguisher:\s+${ROUTE_DISTINGUISHER} -> Record PrefixLine + # If 'Displayed', we are done. + ^Displayed -> Record End + # We expect a line of the form: + # + # Because these can be missing, we make them optional via regex groups. + # + # Explanation of the capturing groups: + # - NEXT_HOP: \S+ (non-whitespace) + # - (?:\s+(?P\d+))? optional metric + # - (?:\s+(?P\d+))? optional locprf + # - (?:\s+(?P\d+))? optional weight + # - (?:\s+(?P[0-9 ]+))? optional path (digits & spaces) + # - (?:\s+(?P[ie\?]))? optional origin code + # + # We'll remain in the same state (NextHopLine) after matching. Then we expect ExtCommLine next. + # + #^\s+${NEXT_HOP}\s+${PATH}\s+${ORIGIN_CODE} -> ExtCommLine + #^\s+${NEXT_HOP}\s+${WEIGHT}\s+${PATH}\s+${ORIGIN_CODE} -> ExtCommLine + ^\s+${NEXT_HOP}\s+${ATTRIBUTES}$$ -> ExtCommLine + # If we do not find a next-hop line, we remain. Possibly there's an empty line or some different format. + # If the next line is another prefix or RD, record a blank row for next-hop line. + ^\s*${STATUS_CODE}\s+\[ -> Record PrefixLine + # If we see a new RD, record the partial row + ^Route Distinguisher:\s+${ROUTE_DISTINGUISHER} -> Record PrefixLine + +ExtCommLine + # -- PHASE 4: Parse the Extended Community line that typically follows. + # Example: + # " ET:8 ES-Import-Rt:02:03:04:05:06:07 DF: (alg: 2, pref: 32767)" + # + # If 'Displayed', we are done. We'll record the route we have so far (with EXT_COMM blank). + ^Displayed -> Record End + # If we see a new route prefix or RD, record the route we have, then jump to the correct state. + ^\s*${STATUS_CODE}\s+\[ -> Record PrefixLine + ^Route Distinguisher:\s+${ROUTE_DISTINGUISHER} -> Record PrefixLine + # Otherwise, we expect the extended community line: + # We'll capture everything in the line as EXT_COMM and then record the route. + ^\s+ET:\s*${ET}\s+ES-Import-Rt:\s*${ES_IMP_RT}\s+DF:\s*\(alg:\s*${DF_ALG},\s*pref:\s*${DF_PREF}\) -> Record PrefixLine + diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_5.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_5.tmpl new file mode 100644 index 00000000000..01fd9da262f --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_route_type_5.tmpl @@ -0,0 +1,16 @@ +Value RouteDistinguisher (\S+:\d+) +Value Prefix (\[\S+\]) +Value NextHop (\S+) +Value Metric (\d*) +Value loc (\d*) +Value Weight (\d+) +Value Path (\S+) +Value ExtendedCommunity (.*) + +Start + ^Route\s+Distinguisher:\s+${RouteDistinguisher} -> WithinEntry + +WithinEntry + ^\*> ${Prefix} + ^\s+${NextHop}\s+${Metric}\s+${loc}\s+${Weight}\s+${Path} + ^\s+${ExtendedCommunity} -> Record Start diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_summary.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_summary.tmpl new file mode 100644 index 00000000000..5e4165fe44b --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_summary.tmpl @@ -0,0 +1,23 @@ +Value Filldown IDENTIFIER (\d+\.\d+\.\d+\.\d+) +Value Filldown LOCAL_AS (\d+) +Value Filldown VRF_ID (\d+) +Value Filldown RIB_ENTRIES (\d+) +Value Filldown NO_PEERS (\d+) +Value Required NEIGHBOR ([\d\.]+) +Value VERSION (\d+) +Value AS_NO (\d+) +Value MSGRCVD (\d+) +Value MSGSENT (\d+) +Value TBLVER (\d+) +Value INQ (\d+) +Value OUTQ (\d+) +Value UPDOWN (\S+) +Value PFXRCD (\S+) + +Start + ^\s*BGP\srouter\sidentifier\s${IDENTIFIER},\slocal\sAS\snumber\s${LOCAL_AS}\svrf-id\s${VRF_ID} + ^\s*BGP\srouter\sidentifier\s${IDENTIFIER},\slocal\sAS\snumber\s${LOCAL_AS} + ^\s*RIB entries\s+${RIB_ENTRIES},\s* + ^\s*Peers\s+${NO_PEERS},\s* + ^\s*Neighbor\s+V\s+AS\s+MsgRcvd\s+MsgSent\s+TblVer\s+InQ\s+OutQ\s+Up/Down\s+State/PfxRcd.* -> Continue.Record + ^\s*${NEIGHBOR}\s+${VERSION}\s+${AS_NO}\s+${MSGRCVD}\s+${MSGSENT}\s+${TBLVER}\s+${INQ}\s+${OUTQ}\s+${UPDOWN}\s+${PFXRCD}\s+.* -> Record diff --git a/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_vni.tmpl b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_vni.tmpl new file mode 100644 index 00000000000..95e998f932b --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_l2vpn_evpn_vni.tmpl @@ -0,0 +1,5 @@ +Value VLAN_ID (\d+) +Value VNI_TYPE (\S\d) + +Start + ^\* +${VLAN_ID} +${VNI_TYPE} -> Record diff --git a/spytest/templates/show_bgp_neighbor.tmpl b/sonic-mgmt/spytest/templates/show_bgp_neighbor.tmpl similarity index 100% rename from spytest/templates/show_bgp_neighbor.tmpl rename to sonic-mgmt/spytest/templates/show_bgp_neighbor.tmpl diff --git a/spytest/templates/show_bgp_nexthop.tmpl b/sonic-mgmt/spytest/templates/show_bgp_nexthop.tmpl similarity index 100% rename from spytest/templates/show_bgp_nexthop.tmpl rename to sonic-mgmt/spytest/templates/show_bgp_nexthop.tmpl diff --git a/sonic-mgmt/spytest/templates/show_bgp_vrf_routes.tmpl b/sonic-mgmt/spytest/templates/show_bgp_vrf_routes.tmpl new file mode 100644 index 00000000000..5ce06ed000f --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_bgp_vrf_routes.tmpl @@ -0,0 +1,24 @@ +Value TABLE_VERSION (\d+) +Value ROUTER_ID (\S+) +Value VRF_ID (\d+) +Value LOCAL_PREF (\d+) +Value LOCAL_AS (\d+) +Value STATUS (\*>|\*|>) +Value Filldown NETWORK (\d{1,3}(\.\d{1,3}){3}\/\d{1,2}|[0-9a-fA-F:]+\/\d{1,3}) +Value NEXT_HOP (\S+) +Value ROUTES (\d+) +Value PATHS (\d+) + +Start + ^BGP\s+table\s+version\s+is\s+${TABLE_VERSION},\s+local\s+router\s+ID\s+is\s+${ROUTER_ID},\s+vrf\s+id\s+${VRF_ID} + ^Default\s+local\s+pref\s+${LOCAL_PREF},\s+local\s+AS\s+${LOCAL_AS} + ^Status\s+codes: -> Continue + ^Nexthop\s+codes: -> Continue + ^Origin\s+codes: -> Continue + ^RPKI\s+validation\s+codes: -> Continue + ^\s+Network\s+Next Hop\s+Metric\s+LocPrf\s+Weight\s+Path -> BgpTable + +BgpTable + ^\s+${STATUS}\s+${NETWORK}\s+${NEXT_HOP}\S+ -> Record + ^\s+${STATUS}\s+${NEXT_HOP}\S+ -> Record + ^Displayed\s+${ROUTES}\s+routes\s+and\s+${PATHS}\s+total\s+paths -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_boot.tmpl b/sonic-mgmt/spytest/templates/show_boot.tmpl new file mode 100644 index 00000000000..e4c5b4ef944 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_boot.tmpl @@ -0,0 +1,13 @@ +Value Current (\S+) +Value Next (\S+) +Value Available (\S+) + +Start + ^Current:\s+${Current} + ^Next:\s+${Next} + ^Available:\s+${Available} -> Record + ^Available: -> ARec + +ARec + ^\s*${Available} + ^.+:-> Continue.Record \ No newline at end of file diff --git a/spytest/templates/show_clock.tmpl b/sonic-mgmt/spytest/templates/show_clock.tmpl similarity index 100% rename from spytest/templates/show_clock.tmpl rename to sonic-mgmt/spytest/templates/show_clock.tmpl diff --git a/sonic-mgmt/spytest/templates/show_environment_new.tmpl b/sonic-mgmt/spytest/templates/show_environment_new.tmpl new file mode 100644 index 00000000000..475a665e45e --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_environment_new.tmpl @@ -0,0 +1,13 @@ +Value sensor ([ 0-9_a-zA-Z]*) +Value voltage ([+0-9.-]+) +Value current ([+0-9.-]+) +Value critical_voltage_min ([+0-9.-]+) +Value critical_voltage_max ([+0-9.-]+) +Value critical_current_max ([+0-9.-]+) + +Start + ^\s*${sensor}:\s+${voltage}\s*V\s*\(crit min\s*=\s*${critical_voltage_min}\s*V,\s*crit max\s*=\s*${critical_voltage_max}\s*V\) -> Record + ^\s*${sensor}:\s+${voltage}\s*V\s*\(crit min\s*=\s*${critical_voltage_min}\s*V,\s*min\s*=\s*\S+\s*V\) + ^\s*\(max\s*=\s*\S+\s*V,\s*crit max\s*=\s*${critical_voltage_max}\s*V\) -> Record + ^\s*${sensor}:\s+${current}\s*A\s*\(max\s*=\s*\S+\s*A,\s*crit max\s*=\s*${critical_current_max}\s*A\) -> Record + diff --git a/sonic-mgmt/spytest/templates/show_evpn.tmpl b/sonic-mgmt/spytest/templates/show_evpn.tmpl new file mode 100644 index 00000000000..f0f8a7da12d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn.tmpl @@ -0,0 +1,41 @@ +Value L2_VNIs (\d+) +Value L3_VNIs (\d+) +Value GATEWAY_MAC_IP (\S+) +Value SVI_MAC_IP (\S+) +Value SVI_MAC (\S+) +Value DUPLICATE_ADDR_DETECT (\S+) +Value DETECTION_MAX_MOVES (\d+) +Value DETECTION_TIME (\d+) +Value MAC_HOLDTIME (\d+) +Value NEIGH_HOLDTIME (\d+) +Value STARTUP_DELAY (\d+) +Value START_DELAY_TIMER ([-:\d]+) +Value UPLINK_CFG_CNT (\d+) +Value UPLINK_ACTIVE_CNT (\d+) + +# The 'Start' state will match lines one by one. +# Once we reach the final line of interest, we "Record" the parsed data. +Start + # L2 VNIs: 7 + ^L2\s+VNIs:\s+${L2_VNIs} + # L3 VNIs: 3 + ^L3\s+VNIs:\s+${L3_VNIs} + # Advertise gateway mac-ip: No + ^Advertise\s+gateway\s+mac-ip:\s+${GATEWAY_MAC_IP} + # Advertise svi mac-ip: No + ^Advertise\s+svi\s+mac-ip:\s+${SVI_MAC_IP} + # Advertise svi mac: No + ^Advertise\s+svi\s+mac:\s+${SVI_MAC} + # Duplicate address detection: Enable + ^Duplicate\s+address\s+detection:\s+${DUPLICATE_ADDR_DETECT} + # Detection max-moves 5, time 180 + ^\s+Detection\s+max-moves\s+${DETECTION_MAX_MOVES},\s+time\s+${DETECTION_TIME} + # EVPN MH: + ^EVPN\s+MH: + # mac-holdtime: 1080s, neigh-holdtime: 1080s + ^\s+mac-holdtime:\s+${MAC_HOLDTIME}s,\s+neigh-holdtime:\s+${NEIGH_HOLDTIME}s + # startup-delay: 180s, start-delay-timer: --:--:-- + ^\s+startup-delay:\s+${STARTUP_DELAY}s,\s+start-delay-timer:\s+${START_DELAY_TIMER} + # uplink-cfg-cnt: 0, uplink-active-cnt: 0 + ^\s+uplink-cfg-cnt:\s+${UPLINK_CFG_CNT},\s+uplink-active-cnt:\s+${UPLINK_ACTIVE_CNT} -> Record + diff --git a/sonic-mgmt/spytest/templates/show_evpn_es.template b/sonic-mgmt/spytest/templates/show_evpn_es.template new file mode 100644 index 00000000000..011e6c579a7 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_es.template @@ -0,0 +1,12 @@ +Value ESI (\S+) +Value TYPE (\S+) +Value ESIF (\S+) +Value VTEPS (\S+) + +Start + # Skip the legend line for Type + ^Type:\s+B.* + ^ESI\s+Type\s+ES-IF\s+VTEPs + # Each data line matches ESI, TYPE, ESIF, VTEPS + ^${ESI}\s+${TYPE}\s+${ESIF}\s+${VTEPS} -> Record + diff --git a/sonic-mgmt/spytest/templates/show_evpn_es.tmpl b/sonic-mgmt/spytest/templates/show_evpn_es.tmpl new file mode 100644 index 00000000000..37e52f24ff6 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_es.tmpl @@ -0,0 +1,7 @@ +Value ESI ([\da-fA-F:]+) +Value TYPE ([BLRN]+) +Value ES_IF (\S+) +Value VTEPS ([\da-fA-F\.:,]*) + +Start + ^${ESI}\s+${TYPE}\s+${ES_IF}\s+${VTEPS}\s*$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_evpn_es_detail.tmpl b/sonic-mgmt/spytest/templates/show_evpn_es_detail.tmpl new file mode 100644 index 00000000000..41f01e51891 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_es_detail.tmpl @@ -0,0 +1,37 @@ +Value ESI (\S+) +Value TYPE (\S+) +Value INTERFACE (\S+) +Value STATE (\S+) +Value BRIDGE_PORT (\S+) +Value BGP_READY (\S+) +Value VNI_COUNT (\d+) +Value MAC_COUNT (\d+) +Value DF_STATUS (\S+) +Value DF_PREF (\d+) +Value NEXTHOP_GRP (\w+) +Value List VTEP (.+(?:nh:\s+\d+)?) + +Start + ^ESI:\s+${ESI} -> ESI_STATE + +ESI_STATE + ^\s+Type:\s+${TYPE} + ^\s+Interface:\s+${INTERFACE} + ^\s+State:\s+${STATE} + ^\s+Bridge port:\s+${BRIDGE_PORT} + ^\s+Ready for BGP:\s+${BGP_READY} + ^\s+VNI Count:\s+${VNI_COUNT} + ^\s+MAC Count:\s+${MAC_COUNT} + ^\s+DF status:\s+${DF_STATUS} + ^\s+DF preference:\s+${DF_PREF} + ^\s+Nexthop group:\s+${NEXTHOP_GRP} + ^\s+VTEPs:\s*$$ -> VTEP_STATE + ^\s* -> Record Start + +VTEP_STATE + # VTEPs: + # 2000:1::1 nh: 268435459 + # 2000:1::2 nh: 268435460 + ^\s+${VTEP} -> VTEP_STATE + ^\s* -> Record Start + diff --git a/sonic-mgmt/spytest/templates/show_evpn_es_evi.tmpl b/sonic-mgmt/spytest/templates/show_evpn_es_evi.tmpl new file mode 100644 index 00000000000..b1344ce10be --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_es_evi.tmpl @@ -0,0 +1,14 @@ +Value VNI (\d+) +Value ESI ([0-9A-Fa-f:]+) +Value TYPE (\S+) + +Start + # Skip any lines that don't matter until we find the header row: + ^Type:\s+L\s+local,\s+R\s+remote -> Next + ^VNI\s+ESI\s+Type -> RecordStart + +RecordStart + # This matches lines with three columns: VNI, ESI, and TYPE + ^${VNI}\s+${ESI}\s+${TYPE} -> Record + # Skip any blank lines or the prompt + ^\s*$$ diff --git a/sonic-mgmt/spytest/templates/show_evpn_es_evi_detail.tmpl b/sonic-mgmt/spytest/templates/show_evpn_es_evi_detail.tmpl new file mode 100644 index 00000000000..141ec4dc40b --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_es_evi_detail.tmpl @@ -0,0 +1,18 @@ +Value VNI (\d+) +Value ESI (\S+) +Value BGP (\S+) +Value TYPE (\S+) + +Start + # Match the line containing "VNI ESI: " + # Then continue to capture Type and BGP in subsequent lines. + ^VNI\s+(?P\d+)\s+ESI:\s+(?P\S+) -> VniLine + +VniLine + # Match "Type: " + ^\s+Type:\s+(?P\S+) -> TypeLine + +TypeLine + # Match "Ready for BGP: " + ^\s+Ready\s+for\s+BGP:\s+(?P\S+) -> Record Start + diff --git a/sonic-mgmt/spytest/templates/show_evpn_l2_nh.tmpl b/sonic-mgmt/spytest/templates/show_evpn_l2_nh.tmpl new file mode 100644 index 00000000000..1a45803b351 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_l2_nh.tmpl @@ -0,0 +1,14 @@ +Value VTEP (\S+) +Value NH_ID (\d+) +Value ES (\d+) + +Start + # Look for the header line. Once matched, move to parsing records. + ^VTEP\s+NH\s+id\s+#ES -> RECORDS + +RECORDS + # Each valid data line should match these three captures (VTEP, NH_ID, ES). + ^${VTEP}\s+${NH_ID}\s+${ES} -> Record + + + diff --git a/sonic-mgmt/spytest/templates/show_evpn_mac_vni_all.tmpl b/sonic-mgmt/spytest/templates/show_evpn_mac_vni_all.tmpl new file mode 100644 index 00000000000..9422798ec6f --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_evpn_mac_vni_all.tmpl @@ -0,0 +1,14 @@ +Value MAC_ADDRESS (..:..:..:..:..:..) +Value Type (\S+) +Value Flags (\S+) +Value VTEP (\S+) +Value Vlan (\S+) +Value Seq (\S+) + +Start + ^\S+ -> Continue.Record + ^\s*${MAC_ADDRESS}\s*${Type}\s*${VTEP}\s*${Seq}\s*$$ -> Record + ^\s*${MAC_ADDRESS}\s*${Type}\s*${VTEP}\s*${Vlan}\s*${Seq}\s*$$ -> Record + ^\s*${MAC_ADDRESS}\s*${Type}\s*${Flags}\s*${VTEP}\s*${Vlan}\s*${Seq}\s*$$ -> Record + ^\s*${MAC_ADDRESS}\s*${Type}\s*${Flags}\s*${VTEP}\s*${Seq}\s*$$ -> Record + ^$$ diff --git a/sonic-mgmt/spytest/templates/show_feature_status.tmpl b/sonic-mgmt/spytest/templates/show_feature_status.tmpl new file mode 100644 index 00000000000..8a390621e86 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_feature_status.tmpl @@ -0,0 +1,7 @@ +Value NAME (\S+) +Value STATE (disabled|enabled\s\(not-running\)|enabled) +Value AUTORESTART (disabled|enabled\s\(not-running\)|enabled) + +Start + ^${NAME}\s+${STATE}\s+${AUTORESTART} -> Record + diff --git a/sonic-mgmt/spytest/templates/show_fgnhg_active_hop.tmpl b/sonic-mgmt/spytest/templates/show_fgnhg_active_hop.tmpl new file mode 100644 index 00000000000..14c450a14fa --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_fgnhg_active_hop.tmpl @@ -0,0 +1,12 @@ +Value PREFIX (\S+) +Value ACTIVENEXTHOP (\S+) +Value ACTIVENEXTHOPIP (\S+) + + +Start + ^FG NHG Prefix\s+Active Next Hops\s.*$$ + ^(-+\s*)\s.*$$ + ^${PREFIX}\s+${ACTIVENEXTHOP}\s* -> Record + ^\s+${ACTIVENEXTHOP}\s*$$ -> Record + +EOF \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_fgnhg_hashview.tmpl b/sonic-mgmt/spytest/templates/show_fgnhg_hashview.tmpl new file mode 100644 index 00000000000..6db168e27e0 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_fgnhg_hashview.tmpl @@ -0,0 +1,11 @@ +Value PREFIX (\S+) +Value NEXTHOP (\S+) +Value HASHBUCKET (.*) + + +Start + ^FG NHG Prefix\s+Next Hop\s+Hash buckets\s.*$$ + ^(-+\s*)\s.*$$ + ^${PREFIX}\s+${NEXTHOP}\s+${HASHBUCKET}\s*$$ -> Record + +EOF diff --git a/spytest/templates/show_image_list.tmpl b/sonic-mgmt/spytest/templates/show_image_list.tmpl similarity index 100% rename from spytest/templates/show_image_list.tmpl rename to sonic-mgmt/spytest/templates/show_image_list.tmpl diff --git a/sonic-mgmt/spytest/templates/show_int_transceiver_eeprom.tmpl b/sonic-mgmt/spytest/templates/show_int_transceiver_eeprom.tmpl new file mode 100644 index 00000000000..f34168cb63b --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_int_transceiver_eeprom.tmpl @@ -0,0 +1,37 @@ +Value interface (\w+) +Value status ([\S\s\S]+) +Value ApplicationAdvertisement ([\w\/]+) +Value Connector ([\w\s]+) +Value Encoding (\w+) +Value ExtendedIdentifier ([\w\d\s\,\(\)\.]+) +Value Compliance ([\w\+\d\s]+) +Value Identifier ([\w\d\s]+) +Value Length (\w+) +Value BitRate (\w+) +Value SpecificationCompliance (\w+) +Value VendorDate ([\d\-]+) +Value VendorName ([\w\-]+) +Value VendorOUI ([\d\-\S]+) +Value VendorPN ([\s\-\S]+) +Value VendorRev ([\d\s\w]+) +Value VendorSN ([\s\-\w]+) + +Start + ^${interface}\:\s+SFP\s+EEPROM\s+${status} + ^\s*Application\s+Advertisement\:\s+${ApplicationAdvertisement} + ^\s*Connector\:\s+${Connector} + ^\s*Encoding\:\s+${Encoding} + ^\s*Extended\s+Identifier\:\s+${ExtendedIdentifier} + ^\s*Extended\s+RateSelect\s+Compliance\:\s+${Compliance} + ^\s*Identifier\:\s+${Identifier} + ^\s*Length\s+Cable\s+Assembly\(m\)\:\s+${Length} + ^\s*Nominal\s+Bit\s+Rate\(100Mbs\)\:\s+${BitRate} + ^\s*Specification\s+compliance\:\s+${SpecificationCompliance} + ^\s*Vendor\s+Date\s+Code\(YYYY\-MM\-DD\s+Lot\)\:\s+${VendorDate} + ^\s*Vendor\sName\:\s+${VendorName} + ^\s*Vendor\s+OUI\:\s+${VendorOUI} + ^\s*Vendor\s+PN\:\s+${VendorPN} + ^\s*Vendor\s+Rev\:\s+${VendorRev} + ^\s*Vendor\s+SN\:\s+${VendorSN} + ^\s*$$ -> Record + diff --git a/sonic-mgmt/spytest/templates/show_int_transceiver_lpmode.tmpl b/sonic-mgmt/spytest/templates/show_int_transceiver_lpmode.tmpl new file mode 100644 index 00000000000..2de0c8f7ebc --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_int_transceiver_lpmode.tmpl @@ -0,0 +1,5 @@ +Value Port (\S+) +Value Lpmode (On|Off) + +Start + ^\s*${Port}\s*${Lpmode} -> Record diff --git a/sonic-mgmt/spytest/templates/show_int_transceiver_presence.tmpl b/sonic-mgmt/spytest/templates/show_int_transceiver_presence.tmpl new file mode 100644 index 00000000000..64a9b354685 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_int_transceiver_presence.tmpl @@ -0,0 +1,5 @@ +Value Port (\S+) +Value Presence (Present|Not present) + +Start + ^\s*${Port}\s*${Presence} -> Record diff --git a/sonic-mgmt/spytest/templates/show_interface_breakout_cisco.tmpl b/sonic-mgmt/spytest/templates/show_interface_breakout_cisco.tmpl new file mode 100644 index 00000000000..6d1c0493ce0 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_interface_breakout_cisco.tmpl @@ -0,0 +1,11 @@ +Value INTERFACE (\S+) +Value MODE (\S+) + +Start + ^\+\S+ + ^\|\s+Interface\s+\|\s+Current Breakout Mode\s+\| + ^\+\S+ + ^\|\s+${INTERFACE}\s+\|\s+${MODE}\s+\| -> Record + ^\+\S+ + +EOF diff --git a/spytest/templates/show_interface_counters.tmpl b/sonic-mgmt/spytest/templates/show_interface_counters.tmpl similarity index 100% rename from spytest/templates/show_interface_counters.tmpl rename to sonic-mgmt/spytest/templates/show_interface_counters.tmpl diff --git a/spytest/templates/show_interface_counters_rif.tmpl b/sonic-mgmt/spytest/templates/show_interface_counters_rif.tmpl similarity index 100% rename from spytest/templates/show_interface_counters_rif.tmpl rename to sonic-mgmt/spytest/templates/show_interface_counters_rif.tmpl diff --git a/sonic-mgmt/spytest/templates/show_interface_ethernet.tmpl b/sonic-mgmt/spytest/templates/show_interface_ethernet.tmpl new file mode 100644 index 00000000000..695c92a39ef --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_interface_ethernet.tmpl @@ -0,0 +1,24 @@ +Value Interface (\S+) +Value Status (\w+) +Value Line_Protocol (\w+) +Value uptime (.*) +Value downtime (.*) +Value vrf (.*) +Value index (.*) +Value flags (.*) +Value type (.*) +Value hwaddr (.*) +Value inet6 (.*) + +Start + ^\s*Interface ${Interface} is ${Status}, line protocol is ${Line_Protocol} + ^\s*Interface ${Interface} is ${Status} + ^\s*Link ups:\s*\d+\s*last:\s+${uptime} + ^\s*Link downs:\s*\d+\s*last:\s+${downtime} + ^\s*vrf: ${vrf} + ^\s*index ${index} + ^\s*flags: ${flags} + ^\s*Type: ${type} + ^\s*HWaddr: ${hwaddr} + ^\s*inet6 ${inet6} -> Record + \ No newline at end of file diff --git a/spytest/templates/show_interface_status.tmpl b/sonic-mgmt/spytest/templates/show_interface_status.tmpl similarity index 100% rename from spytest/templates/show_interface_status.tmpl rename to sonic-mgmt/spytest/templates/show_interface_status.tmpl diff --git a/spytest/templates/show_interfaces_counters.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_counters.tmpl similarity index 75% rename from spytest/templates/show_interfaces_counters.tmpl rename to sonic-mgmt/spytest/templates/show_interfaces_counters.tmpl index f9e271adeaa..4170dc657f3 100644 --- a/spytest/templates/show_interfaces_counters.tmpl +++ b/sonic-mgmt/spytest/templates/show_interfaces_counters.tmpl @@ -2,14 +2,14 @@ Value IFACE (\S+) Value STATE (\S+) Value RX_OK (\S+) Value RX_BPS (\S+(\s\S+)?) -Value RX_PPS (\S+) +Value RX_PPS (\S+(\S+)?) Value RX_UTIL (\S+) Value RX_ERR (\S+) Value RX_DRP (\S+) Value RX_OVR (\S+) Value TX_OK (\S+) Value TX_BPS (\S+(\s\S+)?) -Value Tx_PPS (\S+) +Value TX_PPS (\S+(\S+)?) Value TX_UTIL (\S+) Value TX_ERR (\S+) Value TX_DRP (\S+) @@ -17,7 +17,7 @@ Value TX_OVR (\S+) Start ^Last cached.*$$ -> Continue - ^\s*IFACE\s+STATE\s+RX_OK\s+RX_BPS\s+RX_PPS\s+RX_UTIL\s+RX_ERR\s+RX_DRP\s+RX_OVR\s+TX_OK\s+TX_BPS\s+Tx_PPS\s+TX_UTIL\s+TX_ERR\s+TX_DRP\s+TX_OVR + ^\s*IFACE\s+STATE\s+RX_OK\s+RX_BPS\s+RX_PPS\s+RX_UTIL\s+RX_ERR\s+RX_DRP\s+RX_OVR\s+TX_OK\s+TX_BPS\s+RX_PPS\s+TX_UTIL\s+TX_ERR\s+TX_DRP\s+TX_OVR ^(-+\s*)*$$ - ^\s*${IFACE}\s+${STATE}\s+${RX_OK}\s+${RX_BPS}\s+${RX_PPS}\s+${RX_UTIL}\s+${RX_ERR}\s+${RX_DRP}\s+${RX_OVR}\s+${TX_OK}\s+${TX_BPS}\s+${Tx_PPS}\s+${TX_UTIL}\s+${TX_ERR}\s+${TX_DRP}\s+${TX_OVR} -> Record - ^$$ \ No newline at end of file + ^\s*${IFACE}\s+${STATE}\s+${RX_OK}\s+${RX_BPS}\s+${RX_PPS}\s+${RX_UTIL}\s+${RX_ERR}\s+${RX_DRP}\s+${RX_OVR}\s+${TX_OK}\s+${TX_BPS}\s+${TX_PPS}\s+${TX_UTIL}\s+${TX_ERR}\s+${TX_DRP}\s+${TX_OVR} -> Record + ^$$ diff --git a/spytest/templates/show_interfaces_counters_detailed.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_counters_detailed.tmpl similarity index 100% rename from spytest/templates/show_interfaces_counters_detailed.tmpl rename to sonic-mgmt/spytest/templates/show_interfaces_counters_detailed.tmpl diff --git a/sonic-mgmt/spytest/templates/show_interfaces_counters_per_port.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_counters_per_port.tmpl new file mode 100644 index 00000000000..3a93b7476a2 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_interfaces_counters_per_port.tmpl @@ -0,0 +1,17 @@ +Value IFACE (\S+) +Value STATE (\S+) +Value RX_OK (\S+) +Value RX_BPS (\S+\s*\S+) +Value RX_UTIL (\S+) +Value RX_ERR (\S+) +Value RX_DRP (\S+) +Value RX_OVR (\S+) +Value TX_OK (\S+) +Value TX_BPS (\S+\s*\S+) +Value TX_UTIL (\S+) +Value TX_ERR (\S+) +Value TX_DRP (\S+) +Value TX_OVR (\S+) + +Start + ^\s*${IFACE}\s+${STATE}\s+${RX_OK}\s+${RX_BPS}\s+${RX_UTIL}\s+${RX_ERR}\s+${RX_DRP}\s+${RX_OVR}\s+${TX_OK}\s+${TX_BPS}\s+${TX_UTIL}\s+${TX_ERR}\s+${TX_DRP}\s+${TX_OVR}\s*$$ -> Record \ No newline at end of file diff --git a/spytest/templates/show_interfaces_portchannel_qa.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_portchannel_qa.tmpl similarity index 100% rename from spytest/templates/show_interfaces_portchannel_qa.tmpl rename to sonic-mgmt/spytest/templates/show_interfaces_portchannel_qa.tmpl diff --git a/spytest/templates/show_interfaces_status_qa.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_status_qa.tmpl similarity index 100% rename from spytest/templates/show_interfaces_status_qa.tmpl rename to sonic-mgmt/spytest/templates/show_interfaces_status_qa.tmpl diff --git a/sonic-mgmt/spytest/templates/show_interfaces_transceiver_eeprom.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_transceiver_eeprom.tmpl new file mode 100755 index 00000000000..4ff31ad0d14 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_interfaces_transceiver_eeprom.tmpl @@ -0,0 +1,36 @@ +# TextFSM auto lowercases all names, use underscores to make it more readable +Value Key port ((Ethernet|Eth)[0-9/]+) +Value eeprom_status ([^\n]+) +Value Connector ([^\n]+) +Value Encoding ([^\n]+) +Value Extended_Identifier ([^\n]+) +Value Extended_RateSelect_Compliance ([^\n]+) +Value Identifier ([^\n]+) +Value Length ([^\n]+) +Value Nominal_Bit_Rate ([^\n]+) +Value Specification_Compliance ([^\n]+) +Value Vendor_Date_Code ([^\n]+) +Value Vendor_Name ([^\n]+) +Value Vendor_OUI ([^\n]+) +Value Vendor_PN ([^\n]+) +Value Vendor_Rev ([^\n]+) +Value Vendor_SN ([^\n]+) + +Start + ^\s+Connector:\s+${Connector}\s*$$ + ^\s+Encoding:\s+${Encoding}\s*$$ + ^\s+Extended\s*Identifier:\s+${Extended_Identifier}\s*$$ + ^\s+Extended\s*RateSelect\s*Compliance:\s+${Extended_RateSelect_Compliance}\s*$$ + ^\s+Identifier:\s+${Identifier}\s*$$ + ^\s+Length\s*Cable\s*Assembly\S+\s+${Length}\s*$$ + ^\s+Nominal\s*Bit\s*Rate\S+\s+${Nominal_Bit_Rate}\s*$$ + ^\s+Vendor\s*Date\s*Code\S+\s*\S+\s+${Vendor_Date_Code}\s*$$ + ^\s+Vendor\s*Name:\s+${Vendor_Name}\s*$$ + ^\s+Vendor\s*OUI:\s+${Vendor_OUI}\s*$$ + ^\s+Vendor\s*PN:\s+${Vendor_PN}\s*$$ + ^\s+Vendor\s*Rev:\s+${Vendor_Rev}\s*$$ + ^\s+Vendor\s*SN:\s+${Vendor_SN}\s*$$ -> Record + # Continue here assigns the interface and status values, but continues to check the rules + ^${port}:\s*${eeprom_status}\s*$$ -> Continue + # Acts like an if statement: If "EEPROM Not detected" present, record and create a new row in the FSM Output + ^[\s\S]+EEPROM\s*Not\s*detected[\s\S]*$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_interfaces_transceiver_presence.tmpl b/sonic-mgmt/spytest/templates/show_interfaces_transceiver_presence.tmpl new file mode 100644 index 00000000000..aad8be0ab00 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_interfaces_transceiver_presence.tmpl @@ -0,0 +1,8 @@ +Value Port (\S+) +Value Presence (Not present|Present) + +Start + ^\s*Port\s+Presence\s+ + ^(-+\s+-+)*$$ + ^\s*${Port}\s+${Presence} -> Record + ^\s*$$ \ No newline at end of file diff --git a/spytest/templates/show_intf_portchannel.tmpl b/sonic-mgmt/spytest/templates/show_intf_portchannel.tmpl similarity index 100% rename from spytest/templates/show_intf_portchannel.tmpl rename to sonic-mgmt/spytest/templates/show_intf_portchannel.tmpl diff --git a/spytest/templates/show_ip_access_lists.tmpl b/sonic-mgmt/spytest/templates/show_ip_access_lists.tmpl similarity index 100% rename from spytest/templates/show_ip_access_lists.tmpl rename to sonic-mgmt/spytest/templates/show_ip_access_lists.tmpl diff --git a/spytest/templates/show_ip_arp.tmpl b/sonic-mgmt/spytest/templates/show_ip_arp.tmpl similarity index 100% rename from spytest/templates/show_ip_arp.tmpl rename to sonic-mgmt/spytest/templates/show_ip_arp.tmpl diff --git a/spytest/templates/show_ip_bgp.tmpl b/sonic-mgmt/spytest/templates/show_ip_bgp.tmpl similarity index 100% rename from spytest/templates/show_ip_bgp.tmpl rename to sonic-mgmt/spytest/templates/show_ip_bgp.tmpl diff --git a/spytest/templates/show_ip_bgp_summary.tmpl b/sonic-mgmt/spytest/templates/show_ip_bgp_summary.tmpl similarity index 90% rename from spytest/templates/show_ip_bgp_summary.tmpl rename to sonic-mgmt/spytest/templates/show_ip_bgp_summary.tmpl index bb67618fd8d..ad7bb436e18 100644 --- a/spytest/templates/show_ip_bgp_summary.tmpl +++ b/sonic-mgmt/spytest/templates/show_ip_bgp_summary.tmpl @@ -19,14 +19,15 @@ Value Filldown RIBMEMORYINBYTES (\d+) Value Filldown PEERS (\d+) Value Filldown PEERSMEMORYINKBYTES (\d+) Value Filldown VRFID (\d+) -Value Filldown TOTAL_NBR (\d+) +Value Fillup TOTAL_NBR (\d+) Value Filldown ESTD_NBR (\d+) Value DYNNBR (\d+) Value DYNLIMIT (\d+) +Value Filldown PROTOCOL (\S+\s\S+) Start - ^\s*IPv\d{1} Unicast Summary:.*$$ -> VTYSH - ^\s*IPv\d{1} Unicast Summary \(VRF\s+${VRF_NAME}\):.*$$ -> VTYSH + ^\s*${PROTOCOL} Summary:.*$$ -> VTYSH + ^\s*${PROTOCOL} Summary \(VRF\s+${VRF_NAME}\):.*$$ -> VTYSH ^\s*BGP router identifier ${ROUTERID}, local AS number ${LOCALASNNUMBER}(\s+VRF\s+${VRF_NAME})*\s*$$ -> KLISH VTYSH @@ -40,9 +41,9 @@ VTYSH ^\s*${NEIGHBOR}\s+${VERSION}\s+${ASN}\s+${MSGRCVD}\s+${MSGSENT}\s+${TBLVER}\s+${INQ}\s+${OUTQ}\s+${UPDOWN}\s+${STATE}\s+${PFXSNT}\s*$$ -> Record ^\s*${NEIGHBOR}\s+${VERSION}\s+${ASN}\s+${MSGRCVD}\s+${MSGSENT}\s+${TBLVER}\s+${INQ}\s+${OUTQ}\s+${UPDOWN}\s+${STATE}\s+${PFXSNT}\s+${DESC}\s*$$ -> Record ^(\s*)*$$ -> Continue - ^Total number of neighbors ${TOTAL_NBR} + ^Total number of neighbors ${TOTAL_NBR} -> Record Start ^${DYNNBR} dynamic neighbor\(s\), limit ${DYNLIMIT}$$ -> Continue - ^\s*Total number of neighbors established ${ESTD_NBR}\s*$$ -> Record + ^\s*Total number of neighbors established ${ESTD_NBR}\s*$$ -> Record Start KLISH ^\s*BGP router identifier ${ROUTERID}, local AS number ${LOCALASNNUMBER}(\s+VRF\s+${VRF_NAME})*\s*$$ diff --git a/spytest/templates/show_ip_interfaces.tmpl b/sonic-mgmt/spytest/templates/show_ip_interfaces.tmpl similarity index 100% rename from spytest/templates/show_ip_interfaces.tmpl rename to sonic-mgmt/spytest/templates/show_ip_interfaces.tmpl diff --git a/spytest/templates/show_ip_route.tmpl b/sonic-mgmt/spytest/templates/show_ip_route.tmpl similarity index 82% rename from spytest/templates/show_ip_route.tmpl rename to sonic-mgmt/spytest/templates/show_ip_route.tmpl index 11a7091a7d3..28c66c8e1d4 100644 --- a/spytest/templates/show_ip_route.tmpl +++ b/sonic-mgmt/spytest/templates/show_ip_route.tmpl @@ -1,29 +1,33 @@ Value Filldown TYPE (\w) -Value Filldown SELECTED (\S|\s) -Value Filldown FIB (\S|\s) +Value Filldown SELECTED ([>]) +Value Filldown FIB ([*qr]) Value Filldown NOT_INSTALLED (\S|\s) -Value Filldown IP_ADDRESS (\S+) +Value IP_ADDRESS (\S+) Value INTERFACE (\S+) -Value Filldown DURATION (\S+(\s+ago)?) +Value DURATION (\S+(\s+ago)?) Value NEXTHOP (\S+) Value NH_TYPE (\S+) -Value Filldown DISTANCE (\d+) -Value Filldown COST (\d+) +Value DISTANCE (\d+) +Value COST (\d+) Value Filldown vrf_name (\S+) Value dest_vrf_name (\S+) Value weight (\d+) Start ^\s*VRF ${vrf_name}: + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*is directly connected,\s*${INTERFACE},\s*weight ${weight},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*is directly connected,\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*onlink,\s*weight\s*${weight},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE}\(vrf\s${dest_vrf_name}\),\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE}\s*inactive,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE},\s*weight ${weight},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE}\s*(\(vrf\s*${dest_vrf_name}\)),\s*weight ${weight},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*weight ${weight},\s*${DURATION}\s*$$ -> Record ^\s*${FIB}\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*onlink,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*,\s*weight\s*\d+\s*,\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*inactive\s*onlink,\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*inactive\s*onlink,\s*${DURATION}\s*$$ -> Record ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*${NEXTHOP}\s*\(${INTERFACE}\),\s*${DURATION}\s*$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_ip_route_mh.tmpl b/sonic-mgmt/spytest/templates/show_ip_route_mh.tmpl new file mode 100644 index 00000000000..0b0cf4494c8 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_ip_route_mh.tmpl @@ -0,0 +1,53 @@ +Value Filldown TYPE (\w) +Value Filldown SELECTED (\S|\s) +Value Filldown FIB (\S|\s) +Value Filldown NOT_INSTALLED (\S|\s) +Value Filldown IP_ADDRESS (\S+) +Value INTERFACE (\S+) +Value Filldown DURATION (\S+(\s+ago)?) +Value List NEXTHOP (\S+) +Value NH_TYPE (\S+) +Value Filldown DISTANCE (\d+) +Value Filldown COST (\d+) +Value Filldown vrf_name (\S+) +Value dest_vrf_name (\S+) +Value weight (\d+) +Value RMAC (\S+) + +Start + ^\S+ -> Continue.Record + ^\s*VRF ${vrf_name}: + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*is directly connected,\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*onlink,\s*weight\s*${weight},\s*${DURATION}\s*$$ + ^\s*\*\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*onlink,\s*weight\s*${weight},\s*RMAC\s*${RMAC},\s*${DURATION} -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE}\(vrf\s${dest_vrf_name}\),\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE}\s*inactive,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE},\s*weight ${weight},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*is directly connected,\s*${INTERFACE}\s*(\(vrf\s*${dest_vrf_name}\)),\s*weight ${weight},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*weight ${weight},\s*${DURATION}\s*$$ -> Record + ^\s*${FIB}\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*onlink,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*,\s*weight\s*\d+\s*,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*inactive\s*onlink,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*inactive\s*onlink,\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*${NEXTHOP}\s*\(${INTERFACE}\),\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}${NOT_INSTALLED}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP}\s*${INTERFACE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}${NOT_INSTALLED}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}(\(vrf\s*${dest_vrf_name}\))*\s*${NH_TYPE},\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}${NOT_INSTALLED}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}(\(vrf\s*${dest_vrf_name}\))*\s*${NH_TYPE},\s*${DURATION}\s*$$ -> Record + ^\s*Codes:.* -> Clearall + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*via\s*${NEXTHOP}\s*${INTERFACE}\(vrf\s*${dest_vrf_name}\)\s*${DISTANCE}\/${COST}\s*${DURATION}\s* -> Record + ^\s*${FIB}\s*via\s*${NEXTHOP}\s*${INTERFACE}\(vrf\s*${dest_vrf_name}\)\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*Direct\s*${INTERFACE}\(vrf\s*${dest_vrf_name}\)\s*${DISTANCE}\/${COST}\s*${DURATION}\s* -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*via\s*${NEXTHOP}\s*${INTERFACE}\s*${DISTANCE}\/${COST}\s*${DURATION}\s* -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*Direct\s*${INTERFACE}\s*${DISTANCE}\/${COST}\s*${DURATION}\s* -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*${NEXTHOP}\s*\(${INTERFACE}\)\s*${DISTANCE}\/${COST}\s*${DURATION}\s*$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*via\s*${NEXTHOP}\s*(${INTERFACE}\s*)? -> Record + ^\s*(${FIB}\s*)?via\s*${NEXTHOP}\s*(${INTERFACE}\s*)?$$ -> Record + ^\s*Direct\s*${INTERFACE}\s*$$ -> Record + ^\s*via\s*${NEXTHOP}\s*${INTERFACE}\s*$$ -> Record + ^\s*via\s*${NEXTHOP}$$ -> Record + ^\s*${TYPE}${SELECTED}${FIB}\s*${IP_ADDRESS}\s*\[${DISTANCE}\/${COST}\]\s*via\s*${NEXTHOP},\s*${INTERFACE}\s*onlink,\s*weight\s*${weight},\s*RMAC\s*${RMAC},\s*${DURATION}\s*$$ -> + ^$$ diff --git a/sonic-mgmt/spytest/templates/show_ip_route_summary.tmpl b/sonic-mgmt/spytest/templates/show_ip_route_summary.tmpl new file mode 100644 index 00000000000..fbad4fa2729 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_ip_route_summary.tmpl @@ -0,0 +1,7 @@ +Value Source (\S+) +Value Routes (\d+) +Value Fib (\d+) + +Start + ^Route\sSource\s+Routes\s+FIB\s+(vrf\d+default) + ^${Source}\s+${Routes}\s+${Fib} -> Record \ No newline at end of file diff --git a/spytest/templates/show_ip_vrf.tmpl b/sonic-mgmt/spytest/templates/show_ip_vrf.tmpl similarity index 100% rename from spytest/templates/show_ip_vrf.tmpl rename to sonic-mgmt/spytest/templates/show_ip_vrf.tmpl diff --git a/spytest/templates/show_ipv6_neighbors.tmpl b/sonic-mgmt/spytest/templates/show_ipv6_neighbors.tmpl similarity index 100% rename from spytest/templates/show_ipv6_neighbors.tmpl rename to sonic-mgmt/spytest/templates/show_ipv6_neighbors.tmpl diff --git a/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es.tmpl b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es.tmpl new file mode 100644 index 00000000000..3c36ae6c13d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es.tmpl @@ -0,0 +1,20 @@ +Value ESI (\S+) +Value FLAGS (\S+) +Value RD (\S+) +Value VNIS (\d+) +Value VTEPS (\S+) + +# The 'Start' state is the initial state. We skip any lines until we find the header row. +Start + # The header line begins with "ESI" followed by spaces, "Flags", "RD", "#VNIs", and "VTEPs". + # Once found, move to the "Header" state. + ^\s*ESI\s+Flags\s+RD\s+#VNIs\s+VTEPs -> Header + +# The 'Header' state means we have just read the table header, so the next lines should match data rows. +Header + # Once we see a line that matches our expected columns, we capture a record and stay in the same state + # to capture additional rows. + ^${ESI}\s+${FLAGS}\s+${RD}\s+${VNIS}\s+${VTEPS} -> Record + ^.* -> Header + + diff --git a/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_detail.tmpl b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_detail.tmpl new file mode 100644 index 00000000000..92c3a330b38 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_detail.tmpl @@ -0,0 +1,56 @@ +Value ESI (\S+) +Value TYPE (\S+) +Value RD (\S+) +Value ORIGINATOR_IP (\S+) +Value LOCAL_ES_DF_PREFERENCE (\S+) +Value VNI_COUNT (\S+) +Value REMOTE_VNI_COUNT (\S+) +Value VRF_COUNT (\S+) +Value MACIP_EVI_PATH_COUNT (\S+) +Value MACIP_GLOBAL_PATH_COUNT (\S+) +Value INCONSISTENT_VNI_VTEP_COUNT (\S+) +Value INCONSISTENCIES (.*) +# We'll capture the first Fragments line +Value FRAGMENTS_RD (\S+) +Value FRAGMENTS_EVIS (\S+) +# We'll capture the first VTEP line +#Value VTEP_IP (\S+) +#Value VTEP_FLAGS (\S+) +#Value VTEP_DF_ALG (\S+) +#Value VTEP_DF_PREF (\S+) +Value List VTEPS (.+) + +# The "Start" state looks for the first ESI line and transitions to ESIState. +Start + ^ESI:\s+(?P\S+) -> ESIState + +# ESIState collects lines until we see the next "ESI:" or reach EOF. +ESIState + ^\s+Type:\s+(?P\S+) + ^\s+RD:\s+(?P\S+) + ^\s+Originator-IP:\s+(?P\S+) + ^\s+Local\s+ES\s+DF\s+preference:\s+(?P\S+) + ^\s+VNI\s+Count:\s+(?P\S+) + ^\s+Remote\s+VNI\s+Count:\s+(?P\S+) + ^\s+VRF\s+Count:\s+(?P\S+) + ^\s+MACIP\s+EVI\s+Path\s+Count:\s+(?P\S+) + ^\s+MACIP\s+Global\s+Path\s+Count:\s+(?P\S+) + ^\s+Inconsistent\s+VNI\s+VTEP\s+Count:\s+(?P\S+) + ^\s+Inconsistencies:\s+(?P.*) + # When we encounter "Fragments:", we jump to FragmentsState. + ^\s+Fragments:\s* -> FragmentsState + # When we encounter "VTEPs:", we jump to VTEPState. + ^\s+VTEPs:\s* -> VTEPState + # If we see a new ESI, that means the previous record ended. Output (Record) and start a new record. + ^\s* -> Record Start + +FragmentsState + # Grab the first Fragments line: " EVIs: " + ^\s+${FRAGMENTS_RD}\s+EVIs:\s+${FRAGMENTS_EVIS} -> ESIState + ^\s* -> Record Start + +VTEPState + # Grab the first VTEP line: " flags: df_alg: df_pref: " + ^\s+${VTEPS} -> ESIState + ^\s* -> Record Start + diff --git a/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_evi.tmpl b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_evi.tmpl new file mode 100644 index 00000000000..c01644419c2 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_evi.tmpl @@ -0,0 +1,13 @@ +Value VNI (\d+) +Value ESI ([0-9A-Fa-f:]+) +Value FLAGS (\S+) +Value VTEP (\S+\(\S+\)) + +# The header row (we can match on "VNI" which indicates start) +Start + ^\s*VNI\s+ESI\s+Flags\s+VTEPs -> Data + +Data + ^\s*${VNI}\s+${ESI}\s+${FLAGS}\s+${VTEP}\s*$$ -> Record + ^.* -> Data + diff --git a/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_evi_detail.tmpl b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_evi_detail.tmpl new file mode 100644 index 00000000000..63fed760a02 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_evi_detail.tmpl @@ -0,0 +1,16 @@ +Value VNI (\d+) +Value ESI (\S+) +Value TYPE (\S+) +Value ES_FRAGMENT_RD (\S+) +Value INCONSISTENCIES (.*) +Value VTEPS (.*) + +Start + ^VNI:\s+${VNI}\s+ESI:\s+${ESI} + ^\s+Type:\s+${TYPE} + ^\s+ES fragment RD:\s+${ES_FRAGMENT_RD} + ^\s+Inconsistencies:\s+${INCONSISTENCIES} + ^\s+VTEPs:\s+${VTEPS} + ^\s* -> Record + + diff --git a/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_vrf.tmpl b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_vrf.tmpl new file mode 100644 index 00000000000..43cead0c876 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_l2vpn_evpn_es_vrf.tmpl @@ -0,0 +1,17 @@ +Value ESI ([-0-9A-Fa-f:]+) +Value VRF (\S+) +Value FLAGS (\S+) +Value IPV4_NHG (\d+) +Value IPV6_NHG (\d+) +Value REF (\d+) + +Start + # Skip the first line: "ES-VRF Flags: A Active" + # Move on to next state when we see the heading: "ESI VRF Flags IPv4-NHG IPv6-NHG Ref" + ^ES-VRF\s+Flags: + ^ESI[\s]+VRF[\s]+Flags[\s]+IPv4-NHG[\s]+IPv6-NHG[\s]+Ref -> RecordStart + +RecordStart + ^${ESI}\s+VRF\s+${VRF}\s+${FLAGS}\s+${IPV4_NHG}\s+${IPV6_NHG}\s+${REF} -> Record + ^.* -> RecordStart + diff --git a/sonic-mgmt/spytest/templates/show_l3_interface_counters.tmpl b/sonic-mgmt/spytest/templates/show_l3_interface_counters.tmpl new file mode 100644 index 00000000000..7d21b5a603a --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_l3_interface_counters.tmpl @@ -0,0 +1,23 @@ +Value IFACE (\w+\d+) +Value RX_BPS (\S+(\s\S+)?) +Value RX_ERR (\d+\S*) +Value RX_OK (\d+\S*) +Value RX_PPS (\S+(\s\S+)?) +Value TX_BPS (\S+(\s\S+)?) +Value TX_ERR (\d+\S*) +Value TX_OK (\d+\S*) +Value TX_PPS (\S+(\s\S+)?) + + +Start + ^\s*\"${IFACE}\"\s*\:.*$$ -> Continue + ^\s*\"RX_BPS\"\:\s+\"${RX_BPS}\".*$$ -> Continue + ^\s*\"RX_ERR\"\s*\:\s+\"${RX_ERR}\".*$$ -> Continue + ^\s*\"RX_OK\"\s*\:\s+\"${RX_OK}\".*$$ -> Continue + ^\s*\"RX_PPS\"\s*\:\s+\"${RX_PPS}\".*$$ -> Continue + ^\s*\"TX_BPS\"\s*\:\s+\"${TX_BPS}\".*$$ -> Continue + ^\s*\"TX_ERR\"\s*\:\s+\"${TX_ERR}\".*$$ -> Continue + ^\s*\"TX_OK\"\s*\:\s+\"${TX_OK}\".*$$ -> Continue + ^\s*\"TX_PPS\"\s*\:\s+\"${TX_PPS}\".*$$ -> Record + +EOF diff --git a/spytest/templates/show_lldp_neighbor.tmpl b/sonic-mgmt/spytest/templates/show_lldp_neighbor.tmpl similarity index 100% rename from spytest/templates/show_lldp_neighbor.tmpl rename to sonic-mgmt/spytest/templates/show_lldp_neighbor.tmpl diff --git a/spytest/templates/show_lldp_neighbors.tmpl b/sonic-mgmt/spytest/templates/show_lldp_neighbors.tmpl similarity index 100% rename from spytest/templates/show_lldp_neighbors.tmpl rename to sonic-mgmt/spytest/templates/show_lldp_neighbors.tmpl diff --git a/spytest/templates/show_lldp_statistics.tmpl b/sonic-mgmt/spytest/templates/show_lldp_statistics.tmpl similarity index 100% rename from spytest/templates/show_lldp_statistics.tmpl rename to sonic-mgmt/spytest/templates/show_lldp_statistics.tmpl diff --git a/spytest/templates/show_lldp_table.tmpl b/sonic-mgmt/spytest/templates/show_lldp_table.tmpl similarity index 100% rename from spytest/templates/show_lldp_table.tmpl rename to sonic-mgmt/spytest/templates/show_lldp_table.tmpl diff --git a/spytest/templates/show_mac.tmpl b/sonic-mgmt/spytest/templates/show_mac.tmpl similarity index 100% rename from spytest/templates/show_mac.tmpl rename to sonic-mgmt/spytest/templates/show_mac.tmpl diff --git a/spytest/templates/show_mac_address_table.tmpl b/sonic-mgmt/spytest/templates/show_mac_address_table.tmpl similarity index 100% rename from spytest/templates/show_mac_address_table.tmpl rename to sonic-mgmt/spytest/templates/show_mac_address_table.tmpl diff --git a/spytest/templates/show_mac_aging_time.tmpl b/sonic-mgmt/spytest/templates/show_mac_aging_time.tmpl similarity index 100% rename from spytest/templates/show_mac_aging_time.tmpl rename to sonic-mgmt/spytest/templates/show_mac_aging_time.tmpl diff --git a/spytest/templates/show_mac_aging_time_klish.tmpl b/sonic-mgmt/spytest/templates/show_mac_aging_time_klish.tmpl similarity index 100% rename from spytest/templates/show_mac_aging_time_klish.tmpl rename to sonic-mgmt/spytest/templates/show_mac_aging_time_klish.tmpl diff --git a/sonic-mgmt/spytest/templates/show_management_interface_address.tmpl b/sonic-mgmt/spytest/templates/show_management_interface_address.tmpl new file mode 100644 index 00000000000..bea898469ae --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_management_interface_address.tmpl @@ -0,0 +1,13 @@ +Value management_ipv4_ip (\d+.\d+.\d+.\d+) +Value ipv4_mask (\d+) +Value management_ipv4_gateway (\d+.\d+.\d+.\d+) +Value management_ipv6_ip (\w+:\d+::\d+ |\w+:\w+:\w+:\w+:\w+::\w+) +Value ipv6_mask (\d+) +Value management_ipv6_gateway (\w+:\d+::\d+ |\w+::\w+:\w+:\w+:\w+) + + +Start + ^Management IP address = ${management_ipv4_ip}/${ipv4_mask} + ^Management Network Default Gateway = ${management_ipv4_gateway} + ^Management IP address = ${management_ipv6_ip}/${ipv6_mask} + ^Management Network Default Gateway = ${management_ipv6_gateway} diff --git a/spytest/templates/show_nat_statistics.tmpl b/sonic-mgmt/spytest/templates/show_nat_statistics.tmpl similarity index 100% rename from spytest/templates/show_nat_statistics.tmpl rename to sonic-mgmt/spytest/templates/show_nat_statistics.tmpl diff --git a/spytest/templates/show_nat_translations.tmpl b/sonic-mgmt/spytest/templates/show_nat_translations.tmpl similarity index 100% rename from spytest/templates/show_nat_translations.tmpl rename to sonic-mgmt/spytest/templates/show_nat_translations.tmpl diff --git a/spytest/templates/show_ndp.tmpl b/sonic-mgmt/spytest/templates/show_ndp.tmpl similarity index 100% rename from spytest/templates/show_ndp.tmpl rename to sonic-mgmt/spytest/templates/show_ndp.tmpl diff --git a/spytest/templates/show_ntp.tmpl b/sonic-mgmt/spytest/templates/show_ntp.tmpl similarity index 100% rename from spytest/templates/show_ntp.tmpl rename to sonic-mgmt/spytest/templates/show_ntp.tmpl diff --git a/spytest/templates/show_ntpstat.tmpl b/sonic-mgmt/spytest/templates/show_ntpstat.tmpl similarity index 100% rename from spytest/templates/show_ntpstat.tmpl rename to sonic-mgmt/spytest/templates/show_ntpstat.tmpl diff --git a/sonic-mgmt/spytest/templates/show_pfc_counters.tmpl b/sonic-mgmt/spytest/templates/show_pfc_counters.tmpl new file mode 100644 index 00000000000..ece45a6a89e --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_pfc_counters.tmpl @@ -0,0 +1,22 @@ +Value PORT (\S+) +Value PFC0 (\d[\d,]*) +Value PFC1 (\d[\d,]*) +Value PFC2 (\d[\d,]*) +Value PFC3 (\d[\d,]*) +Value PFC4 (\d[\d,]*) +Value PFC5 (\d[\d,]*) +Value PFC6 (\d[\d,]*) +Value PFC7 (\d[\d,]*) +Value DIR (Rx|Tx) + +Start + ^\s*Port\s+Rx.* -> Rx + ^\s*Port\s+Tx.* -> Tx + +Rx + ^-+.* -> Continue + ^\s*${PORT}\s+${PFC0}\s+${PFC1}\s+${PFC2}\s+${PFC3}\s+${PFC4}\s+${PFC5}\s+${PFC6}\s+${PFC7}\s*$ -> Record DIR=Rx + +Tx + ^-+.* -> Continue + ^\s*${PORT}\s+${PFC0}\s+${PFC1}\s+${PFC2}\s+${PFC3}\s+${PFC4}\s+${PFC5}\s+${PFC6}\s+${PFC7}\s*$ -> Record DIR=Tx \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_fan.tmpl b/sonic-mgmt/spytest/templates/show_platform_fan.tmpl new file mode 100644 index 00000000000..0d5c59d9a70 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_fan.tmpl @@ -0,0 +1,11 @@ +Value Drawer (\S+) +Value LED (\S+) +Value Fan (\w+.\w+) +Value Speed (\d+%|N/A) +Value Direction (\w+[\s\w]+|N/A) +Value Presence (Not Present|Present) +Value Status (\S+) +Value TimeStamp (\d+\s+\d\d:\d\d:\d\d) + +Start + ^\s*${Drawer}\s+${LED}\s+${Fan}\s+${Speed}\s+${Direction}\s+${Presence}\s+${Status}\s+${TimeStamp} -> Record diff --git a/sonic-mgmt/spytest/templates/show_platform_firmware_status.tmpl b/sonic-mgmt/spytest/templates/show_platform_firmware_status.tmpl new file mode 100644 index 00000000000..66cb73221f6 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_firmware_status.tmpl @@ -0,0 +1,8 @@ +Value chassis (\S+\s+) +Value module (\S+\s+) +Value component (\S+\s+) +Value version (\S+\s+) +Value description (.*) + +Start + ^\s*${chassis}\s*${module}\s*${component}\s*${version}\s*${description}\s* -> Record diff --git a/sonic-mgmt/spytest/templates/show_platform_idprom.tmpl b/sonic-mgmt/spytest/templates/show_platform_idprom.tmpl new file mode 100644 index 00000000000..d5123236bc0 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_idprom.tmpl @@ -0,0 +1,44 @@ +Value chassis_serial (\S+) +Value clei (\S+) +Value controller_type (\S+) +Value device_vals (\S+) +Value eci_number (\S+) +Value group_type (\S+) +Value hw_version (\S+) +Value macaddr (\S+) +Value mac_blksize (\S+) +Value mfg_test (\S+) +Value new_deviation (\S+) +Value pcb_partnbr_6 (\S+) +Value pcb_revision_4 (\S+) +Value pcb_serial (\S+) +Value product_id (\S+) +Value pwr_consumption (\S+) +Value tan_revison (\d+) +Value top_assy_pn_4 (\S+) +Value tuner_type (\S+) +Value udi_desc (\w+[\s\w+]*) +Value version_id (\S+) + +Start + ^\s*CHASSIS_SERIAL:\s+${chassis_serial} + ^\s*CLEI:\s+${clei} + ^\s*CONTROLLER_TYPE:\s+${controller_type} + ^\s*DEVICE_VALS:\s+${device_vals} + ^\s*ECI_NUMBER:\s+${eci_number} + ^\s*GROUP_TYPE:\s+${group_type} + ^\s*HW_VERSION:\s+${hw_version} + ^\s*MACADDR:\s+${macaddr} + ^\s*MAC_BLKSIZE:\s+${mac_blksize} + ^\s*MFG_TEST:\s+${mfg_test} + ^\s*NEW_DEVIATION:\s+${new_deviation} + ^\s*PCB_PARTNBR_6:\s+${pcb_partnbr_6} + ^\s*PCB_REVISION_4:\s+${pcb_revision_4} + ^\s*PCB_SERIAL:\s+${pcb_serial} + ^\s*PRODUCT_ID:\s+${product_id} + ^\s*PWR_CONSUMPTION:\s+${pwr_consumption} + ^\s*TAN_REVISION:\s+${tan_revison} + ^\s*TOP_ASSY_PN_4:\s+${top_assy_pn_4} + ^\s*TUNER_TYPE:\s+${tuner_type} + ^\s*UDI_DESC:\s+${udi_desc} + ^\s*VERSION_ID:\s+${version_id} \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_inventory.tmpl b/sonic-mgmt/spytest/templates/show_platform_inventory.tmpl new file mode 100644 index 00000000000..c0eed47e18a --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_inventory.tmpl @@ -0,0 +1,19 @@ +Value name ([\w\.]+) +Value productid ([\w\-\.]+) +Value version (\d.\d+) +Value serial_num (\w+) +Value description (.*) +Value fpd_name ([\w\./]+) +Value fpd_ver ([\w\.\-]+) +Value fpd_desc ([\w\\.\s]+) + +Start +# match line after line containing "User input" + ^\s*Chassis -> CRec + +CRec + ^\s*${name}\s+${productid}\s+${version}\s+${serial_num}\s+${description} -> Record + ^\s*FPDs -> FPDRec + +FPDRec + ^\s*${fpd_name}\s+${fpd_ver}\s+${fpd_desc} -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_npu_global.tmpl b/sonic-mgmt/spytest/templates/show_platform_npu_global.tmpl new file mode 100644 index 00000000000..434afa345f1 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_npu_global.tmpl @@ -0,0 +1,23 @@ +Value KEY (\S+(?:\s+\S+)*) +Value VAL (\S+) +Value IFACE (\S+) +Value SLICE (\d+) +Value IFG (\d+) +Value SERDES (\d+) +Value PORT (\S+) +Value SAI_LANE (\d+) +Value P_SLICE (\d+) +Value P_IFG (\d+) +Value P_SERDES (\d+) +Value SYSPORT (\d+) +Value GID (\d+) +Value PORT_OID (0x\S+) + +Start + ^${KEY}\s*:\s*${VAL} -> Record + ^Interface\s+Slice\s+IFG\s+Serdes -> Continue + ^${IFACE}\s+${SLICE}\s+${IFG}\s+${SERDES} -> Record + ^Port\s+sai_lane\s+slice\s+ifg\s+serdes\s+sysport\s+gid\s+port_oid -> Continue + ^${PORT}\s+${SAI_LANE}\s+${P_SLICE}\s+${P_IFG}\s+${P_SERDES}\s+${SYSPORT}\s+${GID}\s+${PORT_OID} -> Record + ^Device Properties: -> Continue + ^\s*${KEY}\s*:\s*${VAL} -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_npu_rate_check.tmpl b/sonic-mgmt/spytest/templates/show_platform_npu_rate_check.tmpl new file mode 100644 index 00000000000..2ae6210dd91 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_npu_rate_check.tmpl @@ -0,0 +1,20 @@ +Value LABEL (\S+(?:\s+\S+)*) +Value METRIC (\w+Rate) +Value VALUE (\d+(?:\.\d+)?) +Value UNIT (\[Gbps\]|\[Mpps\]|Gbps|Mpps) +Value HBM_WRITE_M (\d+(?:\.\d+)?) +Value HBM_WRITE_G (\d+(?:\.\d+)?) +Value TOTAL_RX_G (\d+(?:\.\d+)?) +Value TOTAL_RX_M (\d+(?:\.\d+)?) +Value TOTAL_TX_G (\d+(?:\.\d+)?) +Value TOTAL_TX_M (\d+(?:\.\d+)?) + +Start + ^package_mode\s+${LABEL} -> Continue + ^INFO\s+\|.* -> Continue + ^INFO\s+${LABEL}\s+${METRIC}=\s+${VALUE}${UNIT} -> Record + ^INFO\s+${LABEL}\s+${METRIC}=\s+${VALUE}\s*\(${UNIT}\) -> Record + ^INFO\s+HBM\s+Write\s+Rate\s+=\s+${HBM_WRITE_M}\s*\(Mpps\),\s+${HBM_WRITE_G}\s*\(Gbps\) -> Record + ^INFO\s+HBM\s+Read\s+Rate\s+=\s+${VALUE}\s*\(${UNIT}\) -> Record + ^INFO\s+Total\s+Rx\s+rate\s+=\s+${TOTAL_RX_G}\s*\(Gbps\),\s+${TOTAL_RX_M}\s*\(Mpps\)\s*$$ -> Record + ^INFO\s+Total\s+Tx\s+rate\s+=\s+${TOTAL_TX_G}\s*\(Gbps\),\s+${TOTAL_TX_M}\s*\(Mpps\)\s*$$ -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_npu_rx_interface_cgm.tmpl b/sonic-mgmt/spytest/templates/show_platform_npu_rx_interface_cgm.tmpl new file mode 100644 index 00000000000..59eb4d9216e --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_npu_rx_interface_cgm.tmpl @@ -0,0 +1,42 @@ +Value IFACE (\S+) +Value SLICE (\d+) +Value PFC_ENABLED (\S+) +Value PFC_MASK (\d+) +Value PORT_SPEED (\d+) +Value FC_MODE (\S+) +Value PFC_TIMER (\d+) +Value PFC_QUANTA (\d+) +Value SQ_BUF_COUNTER (\d+) +Value SQ_CONGEST_STATE (Xon|Xoff) +Value SQ_HDRM_COUNTER (\d+) +Value TC (\d+) +Value DROP (\d+) +Value REASON (\S+(?:/\S+)*) +Value REASON_DROP (\d+|Not\s+Available) +Value TC_MAP (\d+) +Value SQG (\d+) + +Start + ^Rx CGM is enabled for interface ${IFACE} on slice ${SLICE}\s*$$ -> Record + ^PFC enabled ${PFC_ENABLED}, pfc mask ${PFC_MASK}\s*$$ -> Record + ^Port speed ${PORT_SPEED}\s*$$ -> Record + ^Flow control mode:\s+${FC_MODE}\s*$$ -> Record + ^PFC periodic timer in ns ${PFC_TIMER}\s*$$ -> Record + ^PFC time quanta ${PFC_QUANTA}\s*$$ -> Record + + # Source queue counters (skip the header; parse only data lines) + ^\s*SQ buffer counter ${SQ_BUF_COUNTER}\s*$$ -> Record + ^\s*SQ congestion state ${SQ_CONGEST_STATE}\s*$$ -> Record + ^\s*SQ headroom counter in (?:bytes|buffers)\s+${SQ_HDRM_COUNTER}\s*$$ -> Record + + # Rx drop counters section + ^Rx drop counters \(${IFACE}\):\s*$$ -> Continue + ^\s*TC ${TC}:\s+${DROP}\s*$$ -> Record + + # Reason counters + ^Rx drop counter reasons:\s*$$ -> Continue + ^\s*${REASON}\s+drops:\s+${REASON_DROP}\s*$$ -> Record + + # TC to SQG mapping + ^TC to SQG mapping:\s*$$ -> Continue + ^\s*TC ${TC_MAP}:\s+SQ \d+:\s+SQG ${SQG}\s*$$ -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_npu_voq_queue_counters.tmpl b/sonic-mgmt/spytest/templates/show_platform_npu_voq_queue_counters.tmpl new file mode 100644 index 00000000000..f16c88578bb --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_npu_voq_queue_counters.tmpl @@ -0,0 +1,9 @@ +Value IFACE (\S+) +Value PORT_OID (0x\S+) +Value QUEUE_OID (0x\S+) +Value STAT_KEY (\S+) +Value STAT_VAL (\d+) + +Start + ^Port ${IFACE} port oid ${PORT_OID} queue oid ${QUEUE_OID} -> Record + ^\s*${STAT_KEY}\s*:\s*${STAT_VAL} -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_platform_psustatus.tmpl b/sonic-mgmt/spytest/templates/show_platform_psustatus.tmpl new file mode 100644 index 00000000000..8c5b2f77280 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_psustatus.tmpl @@ -0,0 +1,15 @@ +Value PSU (\S+\s+\d+) +Value Model (\S+) +Value Serial (\S+) +Value HW_Rev (\S+) +Value Voltage (\S+) +Value Current (\S+) +Value Power (\S+) +Value Status (NOT PRESENT|PRESENT|OK|NOT OK) +Value LED (\S+) + + +Start + ^${PSU}\s+${Model}\s+${Serial}\s+${HW_Rev}\s+${Voltage}\s+${Current}\s+${Power}\s+${Status}\s+${LED} -> Record + ^${PSU}\s+${Model}\s+${Serial}\s+${Voltage}\s+${Current}\s+${Power}\s+${Status}\s+${LED} -> Record + ^Error.* -> Error "Error: fail to get psu status from state DB" -> Record diff --git a/sonic-mgmt/spytest/templates/show_platform_ssdhealth.tmpl b/sonic-mgmt/spytest/templates/show_platform_ssdhealth.tmpl new file mode 100644 index 00000000000..d3ea25d3060 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_ssdhealth.tmpl @@ -0,0 +1,8 @@ +Value DeviceModel (.*) +Value Health (.*) +Value Temperature (.*) + +Start + ^Device Model :\s+${DeviceModel} -> Continue + ^Health\s+:\s+${Health} -> Continue + ^Temperature\s+:\s+${Temperature} diff --git a/spytest/templates/show_platform_summary.tmpl b/sonic-mgmt/spytest/templates/show_platform_summary.tmpl similarity index 70% rename from spytest/templates/show_platform_summary.tmpl rename to sonic-mgmt/spytest/templates/show_platform_summary.tmpl index f20f781bbc9..f80b0f716d8 100644 --- a/spytest/templates/show_platform_summary.tmpl +++ b/sonic-mgmt/spytest/templates/show_platform_summary.tmpl @@ -4,8 +4,10 @@ Value Platform (\S+) Value HwSKU (\S+) Value ASIC (\S+) +Value Model (\S+) Start ^Platform:\s+${Platform} -> Continue ^HwSKU:\s+${HwSKU} -> Continue - ^ASIC:\s+${ASIC} + ^ASIC:\s+${ASIC} -> Continue + ^Model Number:\s+${Model} -> Continue diff --git a/sonic-mgmt/spytest/templates/show_platform_temperature.tmpl b/sonic-mgmt/spytest/templates/show_platform_temperature.tmpl new file mode 100644 index 00000000000..35c8aad52e5 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_platform_temperature.tmpl @@ -0,0 +1,13 @@ +Value Sensor ([0-9_a-zA-Z]*) +Value Temperature ([-0-9/.]+) +Value High_TH ([-0-9/.]+) +Value Low_TH ([-0-9/.]+) +Value Critical_High_TH ([-0-9/.]+) +Value Critical_Low_TH ([-0-9/.]+) +Value Warning (\S+) +Value TimeStamp (\d+\s+\d\d:\d\d:\d\d) + + +Start + ^\s*${Sensor}\s+${Temperature}\s+${High_TH}\s+${Low_TH}\s+${Critical_High_TH}\s+${Critical_Low_TH}\s+${Warning}\s+${TimeStamp} -> Record + diff --git a/spytest/templates/show_portchannel_summary.tmpl b/sonic-mgmt/spytest/templates/show_portchannel_summary.tmpl similarity index 100% rename from spytest/templates/show_portchannel_summary.tmpl rename to sonic-mgmt/spytest/templates/show_portchannel_summary.tmpl diff --git a/sonic-mgmt/spytest/templates/show_priority_group_counters_cisco.tmpl b/sonic-mgmt/spytest/templates/show_priority_group_counters_cisco.tmpl new file mode 100644 index 00000000000..f1d17fc192c --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_priority_group_counters_cisco.tmpl @@ -0,0 +1,16 @@ +Value PORT (\S+) +Value PG0 (\d+|N/A) +Value PG1 (\d+|N/A) +Value PG2 (\d+|N/A) +Value PG3 (\d+|N/A) +Value PG4 (\d+|N/A) +Value PG5 (\d+|N/A) +Value PG6 (\d+|N/A) +Value PG7 (\d+|N/A) + +Start + ^\s*Port\s+PG0\s+PG1\s+PG2\s+PG3\s+PG4\s+PG5\s+PG6\s+PG7 + ^-+\s*$$ + ^\s*${PORT}\s+${PG0}\s+${PG1}\s+${PG2}\s+${PG3}\s+${PG4}\s+${PG5}\s+${PG6}\s+${PG7} -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_processes_cpu.tmpl b/sonic-mgmt/spytest/templates/show_processes_cpu.tmpl new file mode 100644 index 00000000000..8fddaa13911 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_processes_cpu.tmpl @@ -0,0 +1,35 @@ +Value time (\d+\:\d+:\d+) +Value duration (\d+\:\d+) +Value Users (\d+) +Value average1 (\d+\.\d+) +Value average2 (\d+\.\d+) +Value average3 (\d+\.\d+) +Value Tasks (\d+) +Value RunningTasks (\d+) +Value SleepingTasks (\d+) +Value StoppedTasks (\d+) +Value ZombieTasks (\d+) +Value CPUProcessExecutionTime (\d+\.\d+) +Value KernelProcessExecutionTime (\d+\.\d+) +Value NiceValue (\d+\.\d+) +Value IdleTime (\d+\.\d+) +Value IOWaitingPeriod (\d+\.\d+) +Value HardwareInterruptTime (\d+\.\d+) +Value SoftwareInterruptTime (\d+\.\d+) +Value StealTime (\d+\.\d+) +Value TotalPhysicalMemory (\d+) +Value FreePhysicalMemory (\d+) +Value UsedPhysicalMemory (\d+) +Value BufferedPhysicalMemory (\d+) +Value TotalSwapMemory (\d+) +Value FreeSwapMemory (\d+) +Value UsedSwapMemory (\d+) +Value AvailSwapMemory (\d+) + +Start + ^top\s+\-\s+${time}\s+up\s+${duration},\s+${Users}\s+user,\s+load\s+average:\s+${average1},\s+${average2},\s+${average3} + ^Tasks:\s+${Tasks}\s+total,\s+\s+\s+${RunningTasks}\s+running, ${SleepingTasks}\s+sleeping,\s+\s+\s+${StoppedTasks}\s+stopped,\s+\s+${ZombieTasks}\s+zombie + ^\%Cpu\(s\):\s+\s+${CPUProcessExecutionTime}\s+us,\s+\s+${KernelProcessExecutionTime}\s+sy,\s+\s+${NiceValue}\s+ni,\s+${IdleTime}\s+id,\s+\s+${IOWaitingPeriod}\s+wa,\s+\s+${HardwareInterruptTime}\s+hi,\s+\s+${SoftwareInterruptTime}\s+si,\s+\s+${StealTime}\s+st + ^KiB\s+Mem\s+:\s+${TotalPhysicalMemory}\s+total,\s+${FreePhysicalMemory}\s+free,\s+\s+${UsedPhysicalMemory}\s+used,\s+\s+${BufferedPhysicalMemory}\s+buff\/cache + ^KiB\s+Swap:\s+\s+\s+\s+\s+\s+\s+\s+${TotalSwapMemory}\s+total,\s+\s+\s+\s+\s+\s+\s+\s+${FreeSwapMemory}\s+free,\s+\s+\s+\s+\s+\s+\s+\s+${UsedSwapMemory}\s+used\.\s+${AvailSwapMemory}\s+avail\s+Mem + diff --git a/sonic-mgmt/spytest/templates/show_processes_memory.tmpl b/sonic-mgmt/spytest/templates/show_processes_memory.tmpl new file mode 100644 index 00000000000..515afb7198d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_processes_memory.tmpl @@ -0,0 +1,16 @@ +Value pid (\d+) +Value user (\S+) +Value pr (\d+) +Value ni (\d+) +Value virt (\d+) +Value res (\d+) +Value shr (\d+) +Value cpu (\d+\.\d+) +Value mem (\d+\.\d+) +Value time (\d+\:\d+\.\d+) +Value command (\S+) + +Start + ^\s*${pid}\s*${user}\s*${pr}\s*${ni}\s*${virt}\s*${res}\S*\s*${shr}\s*S\s*${cpu}\s*${mem}\s*${time}\s*${command}\s* -> Record + ^.+: -> Continue.Record + diff --git a/spytest/templates/show_psample_stats.tmpl b/sonic-mgmt/spytest/templates/show_psample_stats.tmpl similarity index 100% rename from spytest/templates/show_psample_stats.tmpl rename to sonic-mgmt/spytest/templates/show_psample_stats.tmpl diff --git a/spytest/templates/show_qos_map_dot1p_tc.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_dot1p_tc.tmpl similarity index 100% rename from spytest/templates/show_qos_map_dot1p_tc.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_dot1p_tc.tmpl diff --git a/spytest/templates/show_qos_map_dscp_tc.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_dscp_tc.tmpl similarity index 100% rename from spytest/templates/show_qos_map_dscp_tc.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_dscp_tc.tmpl diff --git a/spytest/templates/show_qos_map_pfc_priority_queue.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_pfc_priority_queue.tmpl similarity index 100% rename from spytest/templates/show_qos_map_pfc_priority_queue.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_pfc_priority_queue.tmpl diff --git a/spytest/templates/show_qos_map_tc_dot1p.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_tc_dot1p.tmpl similarity index 100% rename from spytest/templates/show_qos_map_tc_dot1p.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_tc_dot1p.tmpl diff --git a/spytest/templates/show_qos_map_tc_dscp.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_tc_dscp.tmpl similarity index 100% rename from spytest/templates/show_qos_map_tc_dscp.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_tc_dscp.tmpl diff --git a/spytest/templates/show_qos_map_tc_pg.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_tc_pg.tmpl similarity index 100% rename from spytest/templates/show_qos_map_tc_pg.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_tc_pg.tmpl diff --git a/spytest/templates/show_qos_map_tc_queue.tmpl b/sonic-mgmt/spytest/templates/show_qos_map_tc_queue.tmpl similarity index 100% rename from spytest/templates/show_qos_map_tc_queue.tmpl rename to sonic-mgmt/spytest/templates/show_qos_map_tc_queue.tmpl diff --git a/sonic-mgmt/spytest/templates/show_queue_counters.tmpl b/sonic-mgmt/spytest/templates/show_queue_counters.tmpl new file mode 100644 index 00000000000..b00e9c38a8e --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_queue_counters.tmpl @@ -0,0 +1,11 @@ +Value PORT (\S+) +Value QUEUE (\S+) +Value PKTS ([0-9,]+) +Value BYTES ([0-9,]+) +Value DROP_PKTS ([0-9,]+) +Value DROP_BYTES ([0-9,]+) + +Start + ^\s*Port\s+TxQ\s+Counter/pkts\s+Counter/bytes\s+Drop/pkts\s+Drop/bytes\s*$$ -> Continue + ^-+\s+-+\s+-+\s+-+\s+-+\s+-+\s*$$ -> Continue + ^\s*${PORT}\s+${QUEUE}\s+${PKTS}\s+${BYTES}\s+${DROP_PKTS}\s+${DROP_BYTES}\s*$$ -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_queue_counters_cisco.tmpl b/sonic-mgmt/spytest/templates/show_queue_counters_cisco.tmpl new file mode 100644 index 00000000000..b9a1282370b --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_queue_counters_cisco.tmpl @@ -0,0 +1,13 @@ +Value PORT (\S+) +Value TXQ (\S+) +Value COUNTER_PKTS ([0-9,]+) +Value COUNTER_BYTES ([0-9,]+) +Value DROP_PKTS ([0-9,]+) +Value DROP_BYTES ([0-9,]+) + +Start + ^\s*Port\s+TxQ\s+Counter/pkts\s+Counter/bytes\s+Drop/pkts\s+Drop/bytes + ^-+\s*$$ + ^\s*${PORT}\s+${TXQ}\s+${COUNTER_PKTS}\s+${COUNTER_BYTES}\s+${DROP_PKTS}\s+${DROP_BYTES} -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_queue_watermark_multicast_cisco.tmpl b/sonic-mgmt/spytest/templates/show_queue_watermark_multicast_cisco.tmpl new file mode 100644 index 00000000000..f7084e6079a --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_queue_watermark_multicast_cisco.tmpl @@ -0,0 +1,16 @@ +Value PORT (\S+) +Value MC8 (\d+|N/A) +Value MC9 (\d+|N/A) +Value MC10 (\d+|N/A) +Value MC11 (\d+|N/A) +Value MC12 (\d+|N/A) +Value MC13 (\d+|N/A) +Value MC14 (\d+|N/A) +Value MC15 (\d+|N/A) + +Start + ^\s*Port\s+MC8\s+MC9\s+MC10\s+MC11\s+MC12\s+MC13\s+MC14\s+MC15 + ^-+\s*$$ + ^\s*${PORT}\s+${MC8}\s+${MC9}\s+${MC10}\s+${MC11}\s+${MC12}\s+${MC13}\s+${MC14}\s+${MC15} -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_queue_watermark_unicast_cisco.tmpl b/sonic-mgmt/spytest/templates/show_queue_watermark_unicast_cisco.tmpl new file mode 100644 index 00000000000..2de7f9deab8 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_queue_watermark_unicast_cisco.tmpl @@ -0,0 +1,16 @@ +Value PORT (\S+) +Value UC0 (\d+|N/A) +Value UC1 (\d+|N/A) +Value UC2 (\d+|N/A) +Value UC3 (\d+|N/A) +Value UC4 (\d+|N/A) +Value UC5 (\d+|N/A) +Value UC6 (\d+|N/A) +Value UC7 (\d+|N/A) + +Start + ^\s*Port\s+UC0\s+UC1\s+UC2\s+UC3\s+UC4\s+UC5\s+UC6\s+UC7 + ^-+\s*$$ + ^\s*${PORT}\s+${UC0}\s+${UC1}\s+${UC2}\s+${UC3}\s+${UC4}\s+${UC5}\s+${UC6}\s+${UC7} -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_reboot-cause.tmpl b/sonic-mgmt/spytest/templates/show_reboot-cause.tmpl new file mode 100644 index 00000000000..0ab27478032 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_reboot-cause.tmpl @@ -0,0 +1,6 @@ +Value Message (.*) + +Start + ^${Message} -> Record + +EOF \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_redis-cli_TRANSCEIVER_DOM_SENSOR.tmpl b/sonic-mgmt/spytest/templates/show_redis-cli_TRANSCEIVER_DOM_SENSOR.tmpl new file mode 100644 index 00000000000..f4036ef1ea1 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_redis-cli_TRANSCEIVER_DOM_SENSOR.tmpl @@ -0,0 +1,4 @@ +Value Interface (\S+) + +Start + ^\d+\)\s*\"\w+\_\w+\|${Interface}\" -> Record diff --git a/sonic-mgmt/spytest/templates/show_redis_DOM_SENSOR_Interface_details.tmpl b/sonic-mgmt/spytest/templates/show_redis_DOM_SENSOR_Interface_details.tmpl new file mode 100644 index 00000000000..7fb19633ccd --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_redis_DOM_SENSOR_Interface_details.tmpl @@ -0,0 +1,104 @@ +Value temperature ([\d\.]+) +Value voltage ([\d\.]+) +Value rx1power ([\S\-]+) +Value rx2power ([\S\-]+) +Value rx3power ([\S\-]+) +Value rx4power ([\S\-]+) +Value tx1bias ([\d\.]+) +Value tx2bias ([\d\.]+) +Value tx3bias ([\d\.]+) +Value tx4bias ([\d\.]+) +Value tx1power ([\S\/]+) +Value tx2power ([\S\/]+) +Value tx3power ([\S\/]+) +Value tx4power ([\S\/]+) +Value temphighalarm ([\d\.]+) +Value temphighwarning ([\d\.]+) +Value templowalarm ([\-\d\.]+) +Value templowwarning ([\d\.]+) +Value vcchighalarm ([\d\.]+) +Value vcchighwarning ([\d\.]+) +Value vcclowalarm ([\d\.]+) +Value vcclowwarning ([\d\.]+) +Value txpowerhighalarm ([\S\/]+) +Value txpowerlowalarm ([\S\/]+) +Value txpowerhighwarning ([\S\/]+) +Value txpowerlowwarning ([\S\/]+) +Value rxpowerhighalarm ([\S\-]+) +Value rxpowerlowalarm ([\S\-]+) +Value rxpowerhighwarning ([\S\-]+) +Value rxpowerlowwarning ([\S\-]+) +Value txbiashighalarm ([\d\.]+) +Value txbiaslowalarm ([\d\.]+) +Value txbiashighwarning ([\d\.]+) +Value txbiaslowwarning ([\d\.]+) + +Start + ^\s*1\)\s*\"temperature\"\s* + ^\s*2\)\s*\"${temperature}\s* + ^\s*3\)\s*\"voltage\"\s* + ^\s*4\)\s*\"${voltage}\s* + ^\s*5\)\s*\"rx1power\"\s* + ^\s*6\)\s*\"${rx1power}\s* + ^\s*7\)\s*\"rx2power\"\s* + ^\s*8\)\s*\"${rx2power}\s* + ^\s*9\)\s*\"rx3power\"\s* + ^\s*10\)\s*\"${rx3power}\s* + ^\s*11\)\s*\"rx4power\"\s* + ^\s*12\)\s*\"${rx4power}\s* + ^\s*13\)\s*\"tx1bias\"\s* + ^\s*14\)\s*\"${tx1bias}\s* + ^\s*15\)\s*\"tx2bias\"\s* + ^\s*16\)\s*\"${tx2bias}\s* + ^\s*17\)\s*\"tx3bias\"\s* + ^\s*18\)\s*\"${tx3bias}\s* + ^\s*19\)\s*\"tx4bias\"\s* + ^\s*20\)\s*\"${tx4bias}\s* + ^\s*21\)\s*\"tx1power\"\s* + ^\s*22\)\s*\"${tx1power}\s* + ^\s*23\)\s*\"tx2power\"\s* + ^\s*24\)\s*\"${tx2power}\s* + ^\s*25\)\s*\"tx3power\"\s* + ^\s*26\)\s*\"${tx3power}\s* + ^\s*27\)\s*\"tx4power\"\s* + ^\s*28\)\s*\"${tx4power}\s* + ^\s*29\)\s*\"temphighalarm\"\s* + ^\s*30\)\s*\"${temphighalarm}\s* + ^\s*31\)\s*\"temphighwarning\"\s* + ^\s*32\)\s*\"${temphighwarning}\s* + ^\s*33\)\s*\"templowalarm\"\s* + ^\s*34\)\s*\"${templowalarm}\s* + ^\s*35\)\s*\"templowwarning\"\s* + ^\s*36\)\s*\"${templowwarning}\s* + ^\s*37\)\s*\"vcchighalarm\"\s* + ^\s*38\)\s*\"${vcchighalarm}\s* + ^\s*39\)\s*\"vcchighwarning\"\s* + ^\s*40\)\s*\"${vcchighwarning}\s* + ^\s*41\)\s*\"vcclowalarm\"\s* + ^\s*42\)\s*\"${vcclowalarm}\s* + ^\s*43\)\s*\"vcclowwarning\"\s* + ^\s*44\)\s*\"${vcclowwarning}\s* + ^\s*45\)\s*\"txpowerhighalarm\"\s* + ^\s*46\)\s*\"${txpowerhighalarm}\s* + ^\s*47\)\s*\"txpowerlowalarm\"\s* + ^\s*48\)\s*\"${txpowerlowalarm}\s* + ^\s*49\)\s*\"txpowerhighwarning\"\s* + ^\s*50\)\s*\"${txpowerhighwarning}\s* + ^\s*51\)\s*\"txpowerlowwarning\"\s* + ^\s*52\)\s*\"${txpowerlowwarning}\s* + ^\s*53\)\s*\"rxpowerhighalarm\"\s* + ^\s*54\)\s*\"${rxpowerhighalarm}\s* + ^\s*55\)\s*\"rxpowerlowalarm\"\s* + ^\s*56\)\s*\"${rxpowerlowalarm}\s* + ^\s*57\)\s*\"rxpowerhighwarning\"\s* + ^\s*58\)\s*\"${rxpowerhighwarning}\s* + ^\s*59\)\s*\"rxpowerlowwarning\"\s* + ^\s*60\)\s*\"${rxpowerlowwarning}\s* + ^\s*61\)\s*\"txbiashighalarm\"\s* + ^\s*62\)\s*\"${txbiashighalarm}\s* + ^\s*63\)\s*\"txbiaslowalarm\"\s* + ^\s*64\)\s*\"${txbiaslowalarm}\s* + ^\s*65\)\s*\"txbiashighwarning\"\s* + ^\s*66\)\s*\"${txbiashighwarning}\s* + ^\s*67\)\s*\"txbiaslowwarning\"\s* + ^\s*68\)\s*\"${txbiaslowwarning}\s* -> Record diff --git a/sonic-mgmt/spytest/templates/show_redis_cli_TRANSCEIVER_INFO.tmpl b/sonic-mgmt/spytest/templates/show_redis_cli_TRANSCEIVER_INFO.tmpl new file mode 100644 index 00000000000..f4036ef1ea1 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_redis_cli_TRANSCEIVER_INFO.tmpl @@ -0,0 +1,4 @@ +Value Interface (\S+) + +Start + ^\d+\)\s*\"\w+\_\w+\|${Interface}\" -> Record diff --git a/sonic-mgmt/spytest/templates/show_redis_cli_hget_all_interface.tmpl b/sonic-mgmt/spytest/templates/show_redis_cli_hget_all_interface.tmpl new file mode 100644 index 00000000000..72c11b59141 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_redis_cli_hget_all_interface.tmpl @@ -0,0 +1,53 @@ +Value type (\w+\d+\s+\w+\s+\w+) +Value hardware_rev (\d+\w+) +Value serial (\w+\-\w+) +Value manufacturer (\S+) +Value model ([\w\-]+) +Value vendor_oui ([\w\-\d]+) +Value vendor_date ([\d\-]+) +Value connector (\w+\s+\w+\s+\w+) +Value encoding (\S+) +Value ext_identifier ([\w\d\s\,\(\)\.]+) +Value ext_rateselect_compliance ([\w\+\d\s]+) +Value cable_type ([\w\s\(\)]+) +Value cable_length (\S+) +Value specification_compliance (\S+) +Value nominal_bit_rate (\S+) +Value application_advertisement (\S+) +Value is_replaceable (\S+) + +Start + ^\s*\d+\)\s*\"type\"\s* + ^\s*\d+\)\s*\"${type}\s* + ^\s*3\)\s*\"hardware_rev\"\s* + ^\s*4\)\s*\"${hardware_rev}\"\s* + ^\s*5\)\s*\"serial\"\s* + ^\s*6\)\s*\"${serial}\"\s* + ^\s*7\)\s*\"manufacturer\"\s* + ^\s*8\)\s*\"${manufacturer}\"\s* + ^\s*9\)\s*\"model\"\s* + ^\s*10\)\s*\"${model}\"\s* + ^\s*11\)\s*\"vendor_oui\"\s* + ^\s*12\)\s*\"${vendor_oui}\"\s* + ^\s*13\)\s*\"vendor_date\"\s* + ^\s*14\)\s*\"${vendor_date}\s*\"\s* + ^\s*15\)\s*\"connector\"\s* + ^\s*16\)\s*\"${connector}\"\s* + ^\s*17\)\s*\"encoding\"\s* + ^\s*18\)\s*\"${encoding}\"\s* + ^\s*19\)\s*\"ext_identifier\"\s* + ^\s*20\)\s*\"${ext_identifier}\"\s* + ^\s*21\)\s*\"ext_rateselect_compliance\"\s* + ^\s*22\)\s*\"${ext_rateselect_compliance}\"\s* + ^\s*23\)\s*\"cable_type\"\s* + ^\s*24\)\s*\"${cable_type}\"\s* + ^\s*25\)\s*\"cable_length\"\s* + ^\s*26\)\s*\"${cable_length}\"\s* + ^\s*27\)\s*\"specification_compliance\"\s* + ^\s*28\)\s*\"${specification_compliance}\"\s* + ^\s*29\)\s*\"nominal_bit_rate\"\s* + ^\s*30\)\s*\"${nominal_bit_rate}\"\s* + ^\s*31\)\s*\"application_advertisement\"\s* + ^\s*32\)\s*\"${application_advertisement}\"\s* + ^\s*33\)\s*\"is_replaceable\"\s* + ^\s*34\)\s*\"${is_replaceable}\"\s* -> Record diff --git a/sonic-mgmt/spytest/templates/show_redis_cli_transceiver_info.tmpl b/sonic-mgmt/spytest/templates/show_redis_cli_transceiver_info.tmpl new file mode 100644 index 00000000000..f4036ef1ea1 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_redis_cli_transceiver_info.tmpl @@ -0,0 +1,4 @@ +Value Interface (\S+) + +Start + ^\d+\)\s*\"\w+\_\w+\|${Interface}\" -> Record diff --git a/sonic-mgmt/spytest/templates/show_services.tmpl b/sonic-mgmt/spytest/templates/show_services.tmpl new file mode 100644 index 00000000000..5a093511ee6 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_services.tmpl @@ -0,0 +1,16 @@ +Value Filldown docker_name (\S+) +Value user (\S+) +Value pid (\d+) +Value cpu (\d+.\d+) +Value mem (\d+.\d+) +Value vsz (\d+) +Value rss (\d+) +Value tty (\S+) +Value stat ([a-zA-Z+]+) +Value start (\d+:\d+ || \S+) +Value time (\d+:\d+) +Value cmd ([\S+\s\S+]+) + +Start + ^\s*${docker_name}\s*docker + ^\s*${user}\s*${pid}\s*${cpu}\s*${mem}\s*${vsz}\s*${rss}\s*${tty}\s*${stat}\s*${start}\s*${time}\s*${cmd} -> Record diff --git a/spytest/templates/show_sflow.tmpl b/sonic-mgmt/spytest/templates/show_sflow.tmpl similarity index 100% rename from spytest/templates/show_sflow.tmpl rename to sonic-mgmt/spytest/templates/show_sflow.tmpl diff --git a/sonic-mgmt/spytest/templates/show_spanning_tree_bpdu_guard_cisco.tmpl b/sonic-mgmt/spytest/templates/show_spanning_tree_bpdu_guard_cisco.tmpl new file mode 100644 index 00000000000..a3a47c64a02 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_spanning_tree_bpdu_guard_cisco.tmpl @@ -0,0 +1,8 @@ +Value BG_IFNAME (\S+) +Value BG_CFG_SHUT (\S+) +Value BG_OPER_SHUT (\S+) + +Start + ^\s*PortNum\s+Shutdown\s+Port Shut\s*$$ + ^-+\s*$$ + ^\s*${BG_IFNAME}\s+${BG_CFG_SHUT}\s+${BG_OPER_SHUT}\s*$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_spanning_tree_root_guard_cisco.tmpl b/sonic-mgmt/spytest/templates/show_spanning_tree_root_guard_cisco.tmpl new file mode 100644 index 00000000000..0b5a58e6410 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_spanning_tree_root_guard_cisco.tmpl @@ -0,0 +1,11 @@ +Value RG_TIMEOUT (\d+) +Value RG_IFNAME (\S+) +Value RG_VID (\d+) +Value RG_STATUS (Consistent state|Inconsistent state) +Value TIME_LEFT (\d+) + +Start + ^Root guard timeout: ${RG_TIMEOUT} secs + ^Port\s+VLAN\s+Current State\s*$$ + ^-+\s*$$ + ^${RG_IFNAME}\s+${RG_VID}\s+${RG_STATUS}( \(${TIME_LEFT} seconds left on timer\))?\s*$$ -> Record diff --git a/sonic-mgmt/spytest/templates/show_spanning_tree_vlan_cisco.tmpl b/sonic-mgmt/spytest/templates/show_spanning_tree_vlan_cisco.tmpl new file mode 100644 index 00000000000..0d7af31319f --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_spanning_tree_vlan_cisco.tmpl @@ -0,0 +1,54 @@ +Value Spanning_tree_mode (\S+) +Value VLAN (\d+) +Value STP_instance (\d+) +Value Bridge_Identifier (\S+) +Value Bridge_MaxAge (\d+) +Value Bridge_HelloTime (\d+) +Value Bridge_FwdDly (\d+) +Value Bridge_HoldTime (\d+) +Value LastTopology_Change_sec (\d+) +Value Topology_Change_cnt (\d+) +Value RootBridge_Identifier (\S+) +Value RootPath_Cost (\d+) +Value DesignatedBridge_Identifier (\S+) +Value RootPort (\S+) +Value RootBridge_MaxAge (\d+) +Value RootBridge_HelloTime (\d+) +Value RootBridge_FwdDly (\d+) +Value Iface (\S+) +Value PortPriority (\d+) +Value PortPathCost (\d+) +Value PortFast (\S+) +Value PortUplinkFast (\S+) +Value PortState (\S+) +Value DesignatedPortCost (\d+) +Value DesignatedRoot (\S+) +Value DesignatedBridge (\S+) + +Start + ^Spanning-tree Mode: ${Spanning_tree_mode} -> VLAN + +VLAN + ^VLAN ${VLAN} - STP instance ${STP_instance} -> Bridge_Parameters + +Bridge_Parameters + ^\s*Bridge\s+Identifier\s+hex\s+:\s+${Bridge_Identifier} + ^\s*Bridge\s+MaxAge\s+sec\s+:\s+${Bridge_MaxAge} + ^\s*Bridge\s+Hello\s+sec\s+:\s+${Bridge_HelloTime} + ^\s*Bridge\s+FwdDly\s+sec\s+:\s+${Bridge_FwdDly} + ^\s*Hold\s+Time\s+sec\s+:\s+${Bridge_HoldTime} + ^\s*LastTopology\s+Change\s+sec\s+:\s+${LastTopology_Change_sec} + ^\s*Topology\s+Change\s+cnt\s+:\s+${Topology_Change_cnt} -> Root_Bridge_Parameters + +Root_Bridge_Parameters + ^\s*RootBridge\s+Identifier\s+hex\s+:\s+${RootBridge_Identifier} + ^\s*RootPath\s+cost\s+:\s+${RootPath_Cost} + ^\s*DesignatedBridge\s+Identifier\s+hex\s+:\s+${DesignatedBridge_Identifier} + ^\s*RootPort\s+:\s+${RootPort} + ^\s*Max\s+Age\s+sec\s+:\s+${RootBridge_MaxAge} + ^\s*Hello\s+sec\s+:\s+${RootBridge_HelloTime} + ^\s*FwdDly\s+sec\s+:\s+${RootBridge_FwdDly} -> Port_Parameters + +Port_Parameters + ^\s*Port_Name\s+Priority\s+Path_Cost\s+Port_Fast\s+Uplink_Fast\s+State\s+Designated_Cost\s+Designated_Root\s+Designated_Bridge + ^\s*${Iface}\s+${PortPriority}\s+${PortPathCost}\s+${PortFast}\s+${PortUplinkFast}\s+${PortState}\s+${DesignatedPortCost}\s+${DesignatedRoot}\s+${DesignatedBridge} -> Record diff --git a/spytest/templates/show_storm_control.tmpl b/sonic-mgmt/spytest/templates/show_storm_control.tmpl similarity index 100% rename from spytest/templates/show_storm_control.tmpl rename to sonic-mgmt/spytest/templates/show_storm_control.tmpl diff --git a/sonic-mgmt/spytest/templates/show_system_health_summary.tmpl b/sonic-mgmt/spytest/templates/show_system_health_summary.tmpl new file mode 100644 index 00000000000..cb83bbd8441 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_system_health_summary.tmpl @@ -0,0 +1,6 @@ +Value led_status (\S+) +Value boot_status (System is currently booting...) + +Start + ^\s*System status LED\s*${led_status} -> Record + ^\s*${boot_status} -> Record diff --git a/sonic-mgmt/spytest/templates/show_system_memory.tmpl b/sonic-mgmt/spytest/templates/show_system_memory.tmpl new file mode 100755 index 00000000000..37ff2a76249 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_system_memory.tmpl @@ -0,0 +1,12 @@ +Value Name ([a-zA-Z]+) +Value total (\d+) +Value used (\d+) +Value free (\d+) +Value shared (\d+) +Value buff_cache (\d+) +Value available (\d+) + +Start + ^${Name}:\s+${total}\s+${used}\s+${free}\s+${shared}\s+${buff_cache}\s+${available} -> Record + ^${Name}:\s+${total}\s+${used}\s+${free} -> Record + diff --git a/spytest/templates/show_system_reserved_vlan.tmpl b/sonic-mgmt/spytest/templates/show_system_reserved_vlan.tmpl similarity index 100% rename from spytest/templates/show_system_reserved_vlan.tmpl rename to sonic-mgmt/spytest/templates/show_system_reserved_vlan.tmpl diff --git a/spytest/templates/show_system_status.tmpl b/sonic-mgmt/spytest/templates/show_system_status.tmpl similarity index 100% rename from spytest/templates/show_system_status.tmpl rename to sonic-mgmt/spytest/templates/show_system_status.tmpl diff --git a/spytest/templates/show_tacacs.tmpl b/sonic-mgmt/spytest/templates/show_tacacs.tmpl similarity index 100% rename from spytest/templates/show_tacacs.tmpl rename to sonic-mgmt/spytest/templates/show_tacacs.tmpl diff --git a/spytest/templates/show_tacacs_server.tmpl b/sonic-mgmt/spytest/templates/show_tacacs_server.tmpl similarity index 100% rename from spytest/templates/show_tacacs_server.tmpl rename to sonic-mgmt/spytest/templates/show_tacacs_server.tmpl diff --git a/spytest/templates/show_uptime.tmpl b/sonic-mgmt/spytest/templates/show_uptime.tmpl similarity index 100% rename from spytest/templates/show_uptime.tmpl rename to sonic-mgmt/spytest/templates/show_uptime.tmpl diff --git a/spytest/templates/show_version.tmpl b/sonic-mgmt/spytest/templates/show_version.tmpl similarity index 88% rename from spytest/templates/show_version.tmpl rename to sonic-mgmt/spytest/templates/show_version.tmpl index d4ecbd68971..a3c20ac83bd 100644 --- a/spytest/templates/show_version.tmpl +++ b/sonic-mgmt/spytest/templates/show_version.tmpl @@ -13,6 +13,10 @@ Value Serial_Number (\S+) Value Uptime (.*) Value user (\d+) Value load_average (.*) +Value sdk_version (\S+) +Value bsp (\S+) +Value fpd (\S+) +Value np_suite (\S+) Value REPOSITORY (\S+) Value TAG (\S+) Value IMAGE_ID (\S+) @@ -37,10 +41,15 @@ CLICK ^ASIC\s*:\s+${ASIC}\s*$$ ^Serial Number\s*:\s+${Serial_Number}\s*$$ ^Uptime:\s+${Uptime},\s+${user}\s+user,\s+load average:\s+${load_average}\s*$$ + ^Cisco Silicon One SDK:\s+${sdk_version} + ^Cisco Whitebox BSP:\s+${bsp} + ^Cisco Whitebox FPD:\s+${fpd} + ^Cisco NP Suite:\s+${np_suite} ^Docker images:\s*$$ ^REPOSITORY\s+TAG\s+IMAGE ID\s+SIZE\s*$$ ^${REPOSITORY}\s+${TAG}\s+${IMAGE_ID}\s+${SIZE}\s*$$ -> Record + KLISH ^Distribution\s*:\s+${Distribution}\s*$$ ^Kernel\s*:\s+${Kernel}\s*$$ diff --git a/spytest/templates/show_vlan_brief.tmpl b/sonic-mgmt/spytest/templates/show_vlan_brief.tmpl similarity index 100% rename from spytest/templates/show_vlan_brief.tmpl rename to sonic-mgmt/spytest/templates/show_vlan_brief.tmpl diff --git a/spytest/templates/show_vlan_config.tmpl b/sonic-mgmt/spytest/templates/show_vlan_config.tmpl similarity index 100% rename from spytest/templates/show_vlan_config.tmpl rename to sonic-mgmt/spytest/templates/show_vlan_config.tmpl diff --git a/spytest/templates/show_vlan_count.tmpl b/sonic-mgmt/spytest/templates/show_vlan_count.tmpl similarity index 100% rename from spytest/templates/show_vlan_count.tmpl rename to sonic-mgmt/spytest/templates/show_vlan_count.tmpl diff --git a/spytest/templates/show_vrf.tmpl b/sonic-mgmt/spytest/templates/show_vrf.tmpl similarity index 100% rename from spytest/templates/show_vrf.tmpl rename to sonic-mgmt/spytest/templates/show_vrf.tmpl diff --git a/spytest/templates/show_vrf_verbose.tmpl b/sonic-mgmt/spytest/templates/show_vrf_verbose.tmpl similarity index 100% rename from spytest/templates/show_vrf_verbose.tmpl rename to sonic-mgmt/spytest/templates/show_vrf_verbose.tmpl diff --git a/sonic-mgmt/spytest/templates/show_vxlan_counters.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_counters.tmpl new file mode 100644 index 00000000000..9df582198c7 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_counters.tmpl @@ -0,0 +1,13 @@ +Value IFACE (\S+) +Value RX_PKTS ([0-9,]+) +Value RX_BYTES ([0-9,]+) +Value RX_PPS ([0-9\.]+) +Value TX_PKTS ([0-9,]+) +Value TX_BYTES ([0-9,]+) +Value TX_PPS ([0-9\.]+) + + +Start + ^\s*${IFACE}\s+${RX_PKTS}\s+${RX_BYTES}\s+${RX_PPS}/s\s+${TX_PKTS}\s+${TX_BYTES}\s+${TX_PPS}/s\s*$$ -> Record + +EOF diff --git a/sonic-mgmt/spytest/templates/show_vxlan_l2nexthopgroup.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_l2nexthopgroup.tmpl new file mode 100644 index 00000000000..6a4e9d8b29d --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_l2nexthopgroup.tmpl @@ -0,0 +1,6 @@ +Value NBR_GRP (\d+) +Value TUNNELS ((([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?)?) +Value LOC_MBRS (([\d,]+)?) + +Start + ^[|\s]*${NBR_GRP}[|\s]*${TUNNELS}[|\s]*${LOC_MBRS} -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_vxlan_remote.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_remote.tmpl new file mode 100644 index 00000000000..b6aa95f91e8 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_remote.tmpl @@ -0,0 +1,14 @@ +Value SRC_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value DST_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value TUN_SRC (EVPN) +Value TUN_STATUS (oper_up|oper_down) +Value VLAN (Vlan\d+) +Value REMOTE_MAC (..:..:..:..:..:..) +Value REMOTE_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value VNI (\d+) +Value TOTAL_COUNT (\d+) + +Start + ^[|\s]*${SRC_VTEP}[|\s]*${DST_VTEP}[|\s]*${TUN_SRC}[|\s]*${TUN_STATUS} + ^[|\s]*${VLAN}[|\s]*${REMOTE_MAC}[|\s]*${REMOTE_VTEP}[|\s]*${VNI} + ^\s*Total count :\s+${TOTAL_COUNT} diff --git a/sonic-mgmt/spytest/templates/show_vxlan_remotemac_all.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_remotemac_all.tmpl new file mode 100644 index 00000000000..1e9349f26f0 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_remotemac_all.tmpl @@ -0,0 +1,10 @@ +Value Filldown VLAN (Vlan\d+) +Value Filldown REMOTE_MAC (..:..:..:..:..:..) +Value REMOTE_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value Filldown VNI (\d+) + +Start + # Match full entry line with all fields + ^[|\s]*${VLAN}[|\s]*${REMOTE_MAC}[|\s]*${REMOTE_VTEP}[|\s]*${VNI} -> Record + # Match continuation line with only VTEP (when MAC has multiple VTEPs) + ^[|\s]+${REMOTE_VTEP}[|\s]*$$ -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/show_vxlan_remotevtep.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_remotevtep.tmpl new file mode 100644 index 00000000000..6c05fcdb37f --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_remotevtep.tmpl @@ -0,0 +1,13 @@ +Value SRC_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value DST_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value TUN_SRC (EVPN) +Value TUN_STATUS (oper_up|oper_down) +Value VLAN (Vlan\d+) +Value REMOTE_MAC (..:..:..:..:..:..) +Value REMOTE_VTEP (([.:\dA-Fa-f]+[:.]+)+([\dA-Fa-f]+)?) +Value VNI (\d+) +Value TOTAL_COUNT (\d+) + +Start + ^[|\s]*${SRC_VTEP}[|\s]*${DST_VTEP}[|\s]*${TUN_SRC}[|\s]*${TUN_STATUS} -> Record + ^[|\s]*${VLAN}[|\s]*${REMOTE_MAC}[|\s]*${REMOTE_VTEP}[|\s]*${VNI} -> Record Start \ No newline at end of file diff --git a/spytest/templates/show_vxlan_tunnel.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_tunnel.tmpl similarity index 100% rename from spytest/templates/show_vxlan_tunnel.tmpl rename to sonic-mgmt/spytest/templates/show_vxlan_tunnel.tmpl diff --git a/sonic-mgmt/spytest/templates/show_vxlan_vlanvnimap.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_vlanvnimap.tmpl new file mode 100644 index 00000000000..521cf26ca50 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_vlanvnimap.tmpl @@ -0,0 +1,20 @@ +Value VTEP (\S+) +Value Required VLAN (\S+) +Value Required VNI (\d+) + +Start + ^\+\-+ -> Begin + +Begin + ^\| VTEP\s*\|\s*VLAN\s*\|\s*VNI \|\s*$$ -> Capture3Col + ^\| VLAN\s*\|\s*VNI \|\s*$$ -> Capture2Col + +Capture3Col + ^\| ${VTEP}\s*\|\s*${VLAN}\s*\|\s*${VNI}\s*\|\s*$$ -> Record + ^Total count -> End + +Capture2Col + ^\| ${VLAN}\s*\|\s*${VNI}\s*\|\s*$$ -> Record + ^Total count -> End + +End diff --git a/sonic-mgmt/spytest/templates/show_vxlan_vrfvnimap.tmpl b/sonic-mgmt/spytest/templates/show_vxlan_vrfvnimap.tmpl new file mode 100644 index 00000000000..02e53879c17 --- /dev/null +++ b/sonic-mgmt/spytest/templates/show_vxlan_vrfvnimap.tmpl @@ -0,0 +1,20 @@ +Value VTEP (\S+) +Value Required VRF (\S+) +Value Required VNI (\d+) + +Start + ^\+\-+ -> Begin + +Begin + ^\| VTEP\s*\|\s*VRF\s*\|\s*VNI \|\s*$$ -> Capture3Col + ^\| VRF\s*\|\s*VNI \|\s*$$ -> Capture2Col + +Capture3Col + ^\| ${VTEP}\s*\|\s*${VRF}\s*\|\s*${VNI}\s*\|\s*$$ -> Record + ^Total count -> End + +Capture2Col + ^\| ${VRF}\s*\|\s*${VNI}\s*\|\s*$$ -> Record + ^Total count -> End + +End diff --git a/spytest/templates/show_watermark_telemetry_interval.tmpl b/sonic-mgmt/spytest/templates/show_watermark_telemetry_interval.tmpl similarity index 100% rename from spytest/templates/show_watermark_telemetry_interval.tmpl rename to sonic-mgmt/spytest/templates/show_watermark_telemetry_interval.tmpl diff --git a/sonic-mgmt/spytest/templates/sonic_acl_show_cisco.tmpl b/sonic-mgmt/spytest/templates/sonic_acl_show_cisco.tmpl new file mode 100644 index 00000000000..c1e535c966b --- /dev/null +++ b/sonic-mgmt/spytest/templates/sonic_acl_show_cisco.tmpl @@ -0,0 +1,9 @@ +Value RULENAME (\S+) +Value TABLENAME (\S+) +Value PRIO (\d+) +Value PACKETSCNT (\d+) +Value BYTESCNT (\d+) + +Start + ^\s*RULE NAME\s+TABLE NAME\s+PRIO\s+PACKETS COUNT\s+BYTES COUNT\s*$$ + ^\s*${RULENAME}\s+${TABLENAME}\s+${PRIO}\s+${PACKETSCNT}\s+${BYTESCNT} -> Record diff --git a/sonic-mgmt/spytest/templates/sonic_db_dump_app_db_L2_NEXTHOP_GROUP_TABLE.tmpl b/sonic-mgmt/spytest/templates/sonic_db_dump_app_db_L2_NEXTHOP_GROUP_TABLE.tmpl new file mode 100644 index 00000000000..74001d7f8c0 --- /dev/null +++ b/sonic-mgmt/spytest/templates/sonic_db_dump_app_db_L2_NEXTHOP_GROUP_TABLE.tmpl @@ -0,0 +1,21 @@ +Value ID (\d+) +Value EXPIREAT (\S+) +Value TTL (\S+) +Value TYPE (hash) +Value IFNAME (\S+) +Value NEXTHOP_GROUP (\S+) +Value REMOTE_VTEP (\S+) + +Start + ^\{ + ^\s*"L2_NEXTHOP_GROUP_TABLE:\s*${ID}":\s\{ + ^\s*"expireat":\s*${EXPIREAT}, + ^\s*"ttl":\s*${TTL}, + ^\s*"type":\s*"${TYPE}", + ^\s*"value":\s\{ + ^\s*"ifname":\s"${IFNAME}", + ^\s*"nexthop_group":\s"${NEXTHOP_GROUP}"\s* + ^\s*"remote_vtep":\s"${REMOTE_VTEP}"\s* + ^\s*\} + ^\s*\} + ^\} diff --git a/sonic-mgmt/spytest/templates/sonic_db_dump_app_db_VXLAN_FDB_TABLE.tmpl b/sonic-mgmt/spytest/templates/sonic_db_dump_app_db_VXLAN_FDB_TABLE.tmpl new file mode 100644 index 00000000000..8c1fd8dd0e5 --- /dev/null +++ b/sonic-mgmt/spytest/templates/sonic_db_dump_app_db_VXLAN_FDB_TABLE.tmpl @@ -0,0 +1,24 @@ +Value MAC (..:..:..:..:..:..) +Value EXPIREAT (\S+) +Value TTL (\S+) +Value TYPE (hash) +Value IFNAME (\S+) +Value NEXTHOP_GROUP (\S+) +Value ENTRY_TYPE (dynamic|static|dynamic_control_learn) +Value VNI (\S+) + +Start + ^\{ + ^\s*"VXLAN_FDB_TABLE::${MAC}":\s\{ + ^\s*"expireat":\s${EXPIREAT}, + ^\s*"ttl":\s${TTL}, + ^\s*"type":\s"${TYPE}", + ^\s*"value":\s\{ + ^\s*"ifname":\s"${IFNAME}", + ^\s*"nexthop_group":\s"${NEXTHOP_GROUP}", + ^\s*"type":\s"${ENTRY_TYPE}", + ^\s*"vni":\s"${VNI}" + ^\s*\} + ^\s*\} + ^\} + diff --git a/spytest/templates/sonic_snmp_yml.tmpl b/sonic-mgmt/spytest/templates/sonic_snmp_yml.tmpl similarity index 100% rename from spytest/templates/sonic_snmp_yml.tmpl rename to sonic-mgmt/spytest/templates/sonic_snmp_yml.tmpl diff --git a/spytest/templates/sudo_sonic_installer_list.tmpl b/sonic-mgmt/spytest/templates/sudo_sonic_installer_list.tmpl similarity index 100% rename from spytest/templates/sudo_sonic_installer_list.tmpl rename to sonic-mgmt/spytest/templates/sudo_sonic_installer_list.tmpl diff --git a/spytest/templates/top.tmpl b/sonic-mgmt/spytest/templates/top.tmpl similarity index 100% rename from spytest/templates/top.tmpl rename to sonic-mgmt/spytest/templates/top.tmpl diff --git a/spytest/templates/unix_ifcfg.tmpl b/sonic-mgmt/spytest/templates/unix_ifcfg.tmpl similarity index 100% rename from spytest/templates/unix_ifcfg.tmpl rename to sonic-mgmt/spytest/templates/unix_ifcfg.tmpl diff --git a/sonic-mgmt/spytest/templates/watchdogutil_arm.tmpl b/sonic-mgmt/spytest/templates/watchdogutil_arm.tmpl new file mode 100644 index 00000000000..b799da55c0d --- /dev/null +++ b/sonic-mgmt/spytest/templates/watchdogutil_arm.tmpl @@ -0,0 +1,4 @@ +Value no_of_seconds (\S+) + +Start + ^\s*Watchdog armed for\s+${no_of_seconds}\s+seconds -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/watchdogutil_status.tmpl b/sonic-mgmt/spytest/templates/watchdogutil_status.tmpl new file mode 100644 index 00000000000..f28cefc9252 --- /dev/null +++ b/sonic-mgmt/spytest/templates/watchdogutil_status.tmpl @@ -0,0 +1,4 @@ +Value Status (\S+) + +Start + ^\s*Status:\s+${Status} -> Record \ No newline at end of file diff --git a/sonic-mgmt/spytest/templates/ztp_status.tmpl b/sonic-mgmt/spytest/templates/ztp_status.tmpl new file mode 100644 index 00000000000..2b5858554d2 --- /dev/null +++ b/sonic-mgmt/spytest/templates/ztp_status.tmpl @@ -0,0 +1,16 @@ +Value AdminMode (\S+) +Value Service (.*) +Value Status (.*) +Value Source (.*) +Value Timestamp (.*) +Value FirmwareStatus (\S+) + + +Start + ^ZTP\s+Admin\s+Mode\s+:\s+${AdminMode}$$ + ^ZTP\s+Service\s+:\s+${Service}$$ + ^ZTP\s+Status\s+:\s+${Status}$$ + ^ZTP\s+Source\s+:\s+${Source}$$ + ^Timestamp\s+:\s+${Timestamp}$$ + ^.*\s+firmware:\s+${FirmwareStatus}\s+firmware.*$$ + ^.*\s+firmware:\s+${FirmwareStatus}\s+installed.*$$ diff --git a/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed.yaml b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed.yaml new file mode 100644 index 00000000000..ffcc1afc809 --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed.yaml @@ -0,0 +1,31 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + dut1: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.252, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 24, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + T1: + device_type: TGEN + properties: {type: ixia, version: 11.10, ip: 172.26.235.250, ix_server: 172.26.235.72, params: def_tg} + +topology: + dut1: + interfaces: + Ethernet1_49: {EndDevice: T1, EndPort: 1/9, params: def_tg_link} + Ethernet1_50: {EndDevice: T1, EndPort: 1/10, params: def_tg_link} + Ethernet1_51: {EndDevice: T1, EndPort: 1/11, params: def_tg_link} diff --git a/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_breakout.yaml b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_breakout.yaml new file mode 100644 index 00000000000..77283b8b25a --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_breakout.yaml @@ -0,0 +1,43 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + dut1: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.252, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 24, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + dut2: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.251, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 23, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + T1: + device_type: TGEN + properties: {type: ixia, version: 11.10, ip: 172.26.235.250, ix_server: 172.26.235.72, params: def_tg} + +topology: + dut1: + interfaces: + # Single IXIA ingress (oversubscription via breakout) + Ethernet1_49: {EndDevice: T1, EndPort: 1/9, params: def_tg_link} + # 100G peer link to dut2 — broken out to 4x25G + Ethernet1_54: {EndDevice: dut2, EndPort: Ethernet1_54, params: def_link, breakout: "4x25"} + dut2: + interfaces: + Ethernet1_49: {EndDevice: T1, EndPort: 1/12, params: def_tg_link} + # 100G peer link to dut1 — broken out to 4x25G + Ethernet1_54: {EndDevice: dut1, EndPort: Ethernet1_54, params: def_link, breakout: "4x25"} diff --git a/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_config_only.yaml b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_config_only.yaml new file mode 100644 index 00000000000..a9f2f30211f --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_config_only.yaml @@ -0,0 +1,29 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + dut1: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.251, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 23, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + T1: + device_type: TGEN + properties: {type: ixia, version: 11.10, ip: 172.26.235.250, ix_server: 172.26.235.72, params: def_tg} + +topology: + dut1: + interfaces: + Ethernet1_49: {EndDevice: T1, EndPort: 1/12, params: def_tg_link} diff --git a/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_peer_link.yaml b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_peer_link.yaml new file mode 100644 index 00000000000..f1668d66e0b --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_testbed_peer_link.yaml @@ -0,0 +1,44 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + dut1: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.252, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 24, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + dut2: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.251, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 23, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + T1: + device_type: TGEN + properties: {type: ixia, version: 11.10, ip: 172.26.235.250, ix_server: 172.26.235.72, params: def_tg} + +topology: + dut1: + interfaces: + Ethernet1_49: {EndDevice: T1, EndPort: 1/9, params: def_tg_link} + Ethernet1_50: {EndDevice: T1, EndPort: 1/10, params: def_tg_link} + Ethernet1_51: {EndDevice: T1, EndPort: 1/11, params: def_tg_link} + # 100G peer link to dut2 + Ethernet1_54: {EndDevice: dut2, EndPort: Ethernet1_54, params: def_link} + dut2: + interfaces: + Ethernet1_49: {EndDevice: T1, EndPort: 1/12, params: def_tg_link} + # 100G peer link to dut1 + Ethernet1_54: {EndDevice: dut1, EndPort: Ethernet1_54, params: def_link} diff --git a/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_vxlan_testbed.yaml b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_vxlan_testbed.yaml new file mode 100644 index 00000000000..219cba2ff89 --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_vxlan_testbed.yaml @@ -0,0 +1,64 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + dut1: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.252, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 24, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + dut2: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.251, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 23, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + T1: + device_type: TGEN + properties: {type: ixia, version: 11.10, ip: 172.26.235.250, ix_server: 172.26.235.72, params: def_tg} + +topology: + dut1: + interfaces: + # VxLAN L3VNI ingress port — bound to VrfQoS during Section I tests. + # Inner L3 frames enter here, are DSCP-classified, then VxLAN- + # encapsulated and forwarded over the transit peer link. + # Also used as the default 'ingress' port by the reused + # qos_map/scheduler/buffer/wred suites (port_info['ingress']). + Ethernet1_49: {EndDevice: T1, EndPort: 1/9, params: def_tg_link} + # VxLAN L2VNI ingress port — placed in Vlan502 access mode during + # Section J tests. Kept separate from the L3VNI port so the two + # overlays can coexist without flipping the port between + # VRF-bound (L3VNI) and VLAN-access (L2VNI) modes on every run. + # Also serves as 'ingress_b' for Section G per-port classification + # isolation tests in peer_link mode. + Ethernet1_50: {EndDevice: T1, EndPort: 1/10, params: def_tg_link} + # Single-DUT egress port — used by the reused qos_map/scheduler/ + # buffer/wred suites when running in single-DUT 'ixia' mode. + # Not consumed by VxLAN tests (they egress via DUT2 / 1/12). + Ethernet1_51: {EndDevice: T1, EndPort: 1/11, params: def_tg_link} + # 100G transit/peer link to dut2 — broken out to 4x25G. + # Carries VxLAN-encapsulated traffic; QoS counters on the + # sub-port reflect DSCP-to-TC classification on the ingress port. + Ethernet1_54: {EndDevice: dut2, EndPort: Ethernet1_54, params: def_link} + dut2: + interfaces: + # Remote-VTEP egress port — VxLAN-decapsulated traffic exits + # here to the Ixia for both L3VNI (Section I) and L2VNI + # (Section J) flows. Single port serves both overlays since + # the egress side is symmetric. + Ethernet1_49: {EndDevice: T1, EndPort: 1/12, params: def_tg_link} + # 100G transit/peer link to dut1 — broken out to 4x25G. + Ethernet1_54: {EndDevice: dut1, EndPort: Ethernet1_54, params: def_link} diff --git a/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_vxlan_testbed_breakout.yaml b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_vxlan_testbed_breakout.yaml new file mode 100644 index 00000000000..844dee07a15 --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/fx3/fx3_qos_vxlan_testbed_breakout.yaml @@ -0,0 +1,64 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + dut1: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.252, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 24, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + dut2: + device_type: DevSonic + access: {protocol: ssh, ip: 172.26.235.251, port: 22} + rps: {model: Raritan, ip: 10.28.105.119, outlet: 23, username: admin, password: raritan} + credentials: {username: admin, password: password, altpassword: ""} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + T1: + device_type: TGEN + properties: {type: ixia, version: 11.10, ip: 172.26.235.250, ix_server: 172.26.235.72, params: def_tg} + +topology: + dut1: + interfaces: + # VxLAN L3VNI ingress port — bound to VrfQoS during Section I tests. + # Inner L3 frames enter here, are DSCP-classified, then VxLAN- + # encapsulated and forwarded over the transit peer link. + # Also used as the default 'ingress' port by the reused + # qos_map/scheduler/buffer/wred suites (port_info['ingress']). + Ethernet1_49: {EndDevice: T1, EndPort: 1/9, params: def_tg_link} + # VxLAN L2VNI ingress port — placed in Vlan502 access mode during + # Section J tests. Kept separate from the L3VNI port so the two + # overlays can coexist without flipping the port between + # VRF-bound (L3VNI) and VLAN-access (L2VNI) modes on every run. + # Also serves as 'ingress_b' for Section G per-port classification + # isolation tests in peer_link mode. + Ethernet1_50: {EndDevice: T1, EndPort: 1/10, params: def_tg_link} + # Single-DUT egress port — used by the reused qos_map/scheduler/ + # buffer/wred suites when running in single-DUT 'ixia' mode. + # Not consumed by VxLAN tests (they egress via DUT2 / 1/12). + Ethernet1_51: {EndDevice: T1, EndPort: 1/11, params: def_tg_link} + # 100G transit/peer link to dut2 — broken out to 4x25G. + # Carries VxLAN-encapsulated traffic; QoS counters on the + # sub-port reflect DSCP-to-TC classification on the ingress port. + Ethernet1_54: {EndDevice: dut2, EndPort: Ethernet1_54, params: def_link, breakout: "4x25"} + dut2: + interfaces: + # Remote-VTEP egress port — VxLAN-decapsulated traffic exits + # here to the Ixia for both L3VNI (Section I) and L2VNI + # (Section J) flows. Single port serves both overlays since + # the egress side is symmetric. + Ethernet1_49: {EndDevice: T1, EndPort: 1/12, params: def_tg_link} + # 100G transit/peer link to dut1 — broken out to 4x25G. + Ethernet1_54: {EndDevice: dut1, EndPort: Ethernet1_54, params: def_link, breakout: "4x25"} diff --git a/sonic-mgmt/spytest/testbeds/ip_fabric_service.yaml b/sonic-mgmt/spytest/testbeds/ip_fabric_service.yaml new file mode 100644 index 00000000000..8f592ab0b0a --- /dev/null +++ b/sonic-mgmt/spytest/testbeds/ip_fabric_service.yaml @@ -0,0 +1,21 @@ + +tacacs: + hosts: [{ip: 10.29.158.58, username: rraghav, password: roZes@123, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 1}, + {ip: 10.29.158.43, username: rraghav, password: roZes123, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 2}, + {ip: 10.29.158.60, username: rraghav, password: roZes@123, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 3}, + {ip: 172.27.147.156, username: rraghav, password: roZes123, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 4}, + {ip: 10.2.3.4, username: root, password: lvl7india, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 5}, + {ip: 10.2.3.5, username: root, password: lvl7india, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 6}, + {ip: 10.2.3.6, username: root, password: lvl7india, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 7}, + {ip: 10.2.3.7, username: root, password: lvl7india, + timeout: 5, passkey: testsonic, tcp_port: 49, auth_type: pap, priority: 8} + ] +radius: + ro_user: {username: test1, password: password, password1: test} diff --git a/spytest/testbeds/sample_sonic_2d_tgen.yaml b/sonic-mgmt/spytest/testbeds/sample_sonic_2d_tgen.yaml similarity index 100% rename from spytest/testbeds/sample_sonic_2d_tgen.yaml rename to sonic-mgmt/spytest/testbeds/sample_sonic_2d_tgen.yaml diff --git a/spytest/testbeds/sample_sonic_ssh_1d.yaml b/sonic-mgmt/spytest/testbeds/sample_sonic_ssh_1d.yaml similarity index 100% rename from spytest/testbeds/sample_sonic_ssh_1d.yaml rename to sonic-mgmt/spytest/testbeds/sample_sonic_ssh_1d.yaml diff --git a/spytest/testbeds/sample_sonic_terminal_3d.yaml b/sonic-mgmt/spytest/testbeds/sample_sonic_terminal_3d.yaml similarity index 100% rename from spytest/testbeds/sample_sonic_terminal_3d.yaml rename to sonic-mgmt/spytest/testbeds/sample_sonic_terminal_3d.yaml diff --git a/spytest/testbeds/sonic_configs.yaml b/sonic-mgmt/spytest/testbeds/sonic_configs.yaml similarity index 100% rename from spytest/testbeds/sonic_configs.yaml rename to sonic-mgmt/spytest/testbeds/sonic_configs.yaml diff --git a/spytest/testbeds/sonic_configs_all.yaml b/sonic-mgmt/spytest/testbeds/sonic_configs_all.yaml similarity index 100% rename from spytest/testbeds/sonic_configs_all.yaml rename to sonic-mgmt/spytest/testbeds/sonic_configs_all.yaml diff --git a/spytest/testbeds/sonic_errors.yaml b/sonic-mgmt/spytest/testbeds/sonic_errors.yaml similarity index 100% rename from spytest/testbeds/sonic_errors.yaml rename to sonic-mgmt/spytest/testbeds/sonic_errors.yaml diff --git a/spytest/testbeds/sonic_instrument.yaml b/sonic-mgmt/spytest/testbeds/sonic_instrument.yaml similarity index 100% rename from spytest/testbeds/sonic_instrument.yaml rename to sonic-mgmt/spytest/testbeds/sonic_instrument.yaml diff --git a/spytest/testbeds/sonic_params.yaml b/sonic-mgmt/spytest/testbeds/sonic_params.yaml similarity index 100% rename from spytest/testbeds/sonic_params.yaml rename to sonic-mgmt/spytest/testbeds/sonic_params.yaml diff --git a/spytest/testbeds/sonic_speeds.yaml b/sonic-mgmt/spytest/testbeds/sonic_speeds.yaml similarity index 100% rename from spytest/testbeds/sonic_speeds.yaml rename to sonic-mgmt/spytest/testbeds/sonic_speeds.yaml diff --git a/spytest/tests/__init__.py b/sonic-mgmt/spytest/tests/__init__.py similarity index 100% rename from spytest/tests/__init__.py rename to sonic-mgmt/spytest/tests/__init__.py diff --git a/spytest/tests/batch/test_spytest_infra_1.py b/sonic-mgmt/spytest/tests/batch/test_spytest_infra_1.py similarity index 100% rename from spytest/tests/batch/test_spytest_infra_1.py rename to sonic-mgmt/spytest/tests/batch/test_spytest_infra_1.py diff --git a/sonic-mgmt/spytest/tests/cisco/CICD-ARS/ars_basic_cfg_CICD_setup.yaml b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/ars_basic_cfg_CICD_setup.yaml new file mode 100644 index 00000000000..17c325130ae --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/ars_basic_cfg_CICD_setup.yaml @@ -0,0 +1,388 @@ + +leaf0: + sonic: + config: | + sudo config interface ip add D1T1P1 200.200.1.1/24 + sudo config interface ip add D1T1P1 2001:200:1::1/64 + + sudo config interface ip add D1D3P1 100.100.41.1/24 + sudo config interface ip add D1D3P2 100.100.42.1/24 + sudo config interface ip add D1D4P1 100.100.81.1/24 + sudo config interface ip add D1D4P2 100.100.82.1/24 + + sudo config interface ip add D1D3P1 1001:100:41::1/64 + sudo config interface ip add D1D3P2 1001:100:42::1/64 + sudo config interface ip add D1D4P1 1001:100:81::1/64 + sudo config interface ip add D1D4P2 1001:100:82::1/64 + + deconfig: | + sudo config interface ip rem D1T1P1 200.200.1.1/24 + sudo config interface ip rem D1T1P1 2001:200:1::1/64 + + sudo config interface ip rem D1D3P1 100.100.41.1/24 + sudo config interface ip rem D1D3P2 100.100.42.1/24 + sudo config interface ip rem D1D4P1 100.100.81.1/24 + sudo config interface ip rem D1D4P2 100.100.82.1/24 + + sudo config interface ip rem D1D3P1 1001:100:41::1/64 + sudo config interface ip rem D1D3P2 1001:100:42::1/64 + sudo config interface ip rem D1D4P1 1001:100:81::1/64 + sudo config interface ip rem D1D4P2 1001:100:82::1/64 + bgp: + config: | + router bgp 4234521651 + bgp router-id 10.29.158.248 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + neighbor 100.100.41.2 remote-as 65203 + neighbor 100.100.42.2 remote-as 65203 + neighbor 100.100.81.2 remote-as 4201951195 + neighbor 100.100.82.2 remote-as 4201951195 + + + neighbor 1001:100:41::2 remote-as 65203 + neighbor 1001:100:42::2 remote-as 65203 + neighbor 1001:100:81::2 remote-as 4201951195 + neighbor 1001:100:82::2 remote-as 4201951195 + + neighbor 200.200.1.2 remote-as 65205 + neighbor 2001:200:1::2 remote-as 65205 + + address-family ipv4 unicast + neighbor 100.100.41.2 activate + neighbor 100.100.42.2 activate + neighbor 100.100.81.2 activate + neighbor 100.100.82.2 activate + neighbor 200.200.1.2 activate + exit-address-family + + + address-family ipv6 unicast + neighbor 1001:100:41::2 activate + neighbor 1001:100:41::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:41::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:42::2 activate + neighbor 1001:100:42::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:42::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:81::2 activate + neighbor 1001:100:81::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:81::2 route-map TO_BGP_PEER_V6 out + + + neighbor 1001:100:82::2 activate + neighbor 1001:100:82::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:82::2 route-map TO_BGP_PEER_V6 out + + neighbor 2001:200:1::2 activate + neighbor 2001:200:1::2 route-map FROM_BGP_PEER_V6 in + neighbor 2001:200:1::2 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + end + exit + + deconfig: | + no router bgp 4234521651 + end + exit + +leaf1 : + sonic: + config: | + sudo config interface ip add D2T1P1 200.100.1.1/24 + sudo config interface ip add D2T1P1 2001:100:1::1/64 + + sudo config interface ip add D2D3P1 100.100.43.1/24 + sudo config interface ip add D2D3P2 100.100.44.1/24 + sudo config interface ip add D2D4P1 100.100.83.1/24 + sudo config interface ip add D2D4P2 100.100.84.1/24 + + sudo config interface ip add D2D3P1 1001:100:43::1/64 + sudo config interface ip add D2D3P2 1001:100:44::1/64 + sudo config interface ip add D2D4P1 1001:100:83::1/64 + sudo config interface ip add D2D4P2 1001:100:84::1/64 + + deconfig: | + sudo config interface ip rem D2T1P1 200.100.1.1/24 + sudo config interface ip rem D2T1P1 2001:100:1::1/64 + + sudo config interface ip rem D2D3P1 100.100.43.1/24 + sudo config interface ip rem D2D3P2 100.100.44.1/24 + sudo config interface ip rem D2D4P1 100.100.83.1/24 + sudo config interface ip rem D2D4P2 100.100.84.1/24 + + sudo config interface ip rem D2D3P1 1001:100:43::1/64 + sudo config interface ip rem D2D3P2 1001:100:44::1/64 + sudo config interface ip rem D2D4P1 1001:100:83::1/64 + sudo config interface ip rem D2D4P2 1001:100:84::1/64 + + + bgp: + config: | + no router bgp + router bgp 65201 + bgp router-id 10.200.200.201 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + + neighbor 100.100.43.2 remote-as 65203 + neighbor 100.100.44.2 remote-as 65203 + neighbor 100.100.83.2 remote-as 4201951195 + neighbor 100.100.84.2 remote-as 4201951195 + + neighbor 200.100.1.2 remote-as 65206 + neighbor 2001:100:1::2 remote-as 65206 + + neighbor 1001:100:43::2 remote-as 65203 + neighbor 1001:100:44::2 remote-as 65203 + neighbor 1001:100:83::2 remote-as 4201951195 + neighbor 1001:100:84::2 remote-as 4201951195 + + address-family ipv4 unicast + neighbor 100.100.43.2 activate + neighbor 100.100.44.2 activate + neighbor 100.100.83.2 activate + neighbor 100.100.84.2 activate + neighbor 200.100.1.2 activate + exit-address-family + + address-family ipv6 unicast + neighbor 1001:100:43::2 activate + neighbor 1001:100:43::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:43::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:44::2 activate + neighbor 1001:100:44::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:44::2 route-map TO_BGP_PEER_V6 out + + + neighbor 1001:100:83::2 activate + neighbor 1001:100:83::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:83::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:84::2 activate + neighbor 1001:100:84::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:84::2 route-map TO_BGP_PEER_V6 out + + neighbor 2001:100:1::2 activate + neighbor 2001:100:1::2 route-map FROM_BGP_PEER_V6 in + neighbor 2001:100:1::2 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + end + exit + deconfig: | + no router bgp 65201 + end + exit + +spine0 : + sonic: + config: | + sudo config interface ip add D3D1P1 100.100.41.2/24 + sudo config interface ip add D3D1P2 100.100.42.2/24 + sudo config interface ip add D3D2P1 100.100.43.2/24 + sudo config interface ip add D3D2P2 100.100.44.2/24 + + + sudo config interface ip add D3D1P1 1001:100:41::2/64 + sudo config interface ip add D3D1P2 1001:100:42::2/64 + sudo config interface ip add D3D2P1 1001:100:43::2/64 + sudo config interface ip add D3D2P2 1001:100:44::2/64 + + + deconfig: | + sudo config interface ip rem D3D1P1 100.100.41.2/24 + sudo config interface ip rem D3D1P2 100.100.42.2/24 + sudo config interface ip rem D3D2P1 100.100.43.2/24 + sudo config interface ip rem D3D2P2 100.100.44.2/24 + + + sudo config interface ip rem D3D1P1 1001:100:41::2/64 + sudo config interface ip rem D3D1P2 1001:100:42::2/64 + sudo config interface ip rem D3D2P1 1001:100:43::2/64 + sudo config interface ip rem D3D2P2 1001:100:44::2/64 + + bgp: + config: | + no router bgp + router bgp 65203 + bgp router-id 10.200.200.203 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + neighbor 100.100.41.1 remote-as 4234521651 + neighbor 100.100.42.1 remote-as 4234521651 + neighbor 100.100.43.1 remote-as 65201 + neighbor 100.100.44.1 remote-as 65201 + + + neighbor 1001:100:41::1 remote-as 4234521651 + neighbor 1001:100:42::1 remote-as 4234521651 + neighbor 1001:100:43::1 remote-as 65201 + neighbor 1001:100:44::1 remote-as 65201 + + address-family ipv4 unicast + neighbor 100.100.41.1 activate + neighbor 100.100.42.1 activate + neighbor 100.100.43.1 activate + neighbor 100.100.44.1 activate + exit-address-family + + + address-family ipv6 unicast + neighbor 1001:100:41::1 activate + neighbor 1001:100:41::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:41::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:42::1 activate + neighbor 1001:100:42::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:42::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:43::1 activate + neighbor 1001:100:43::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:43::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:44::1 activate + neighbor 1001:100:44::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:44::1 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + end + exit + + deconfig: | + no router bgp 65203 + end + exit + + +spine1 : + sonic: + config: | + + sudo config interface ip add D4D1P1 100.100.81.2/24 + sudo config interface ip add D4D1P2 100.100.82.2/24 + sudo config interface ip add D4D2P1 100.100.83.2/24 + sudo config interface ip add D4D2P2 100.100.84.2/24 + + sudo config interface ip add D4D1P1 1001:100:81::2/64 + sudo config interface ip add D4D1P2 1001:100:82::2/64 + sudo config interface ip add D4D2P1 1001:100:83::2/64 + sudo config interface ip add D4D2P2 1001:100:84::2/64 + + deconfig: | + + sudo config interface ip rem D4D1P1 100.100.81.2/24 + sudo config interface ip rem D4D1P2 100.100.82.2/24 + sudo config interface ip rem D4D2P1 100.100.83.2/24 + sudo config interface ip rem D4D2P2 100.100.84.2/24 + + sudo config interface ip rem D4D1P1 1001:100:81::2/64 + sudo config interface ip rem D4D1P2 1001:100:82::2/64 + sudo config interface ip rem D4D2P1 1001:100:83::2/64 + sudo config interface ip rem D4D2P2 1001:100:84::2/64 + + bgp: + config: | + router bgp 4201951195 + bgp router-id 10.200.200.204 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + neighbor 100.100.81.1 remote-as 4234521651 + neighbor 100.100.82.1 remote-as 4234521651 + neighbor 100.100.83.1 remote-as 65201 + neighbor 100.100.84.1 remote-as 65201 + + neighbor 1001:100:81::1 remote-as 4234521651 + neighbor 1001:100:82::1 remote-as 4234521651 + neighbor 1001:100:83::1 remote-as 65201 + neighbor 1001:100:84::1 remote-as 65201 + + address-family ipv4 unicast + neighbor 100.100.81.1 activate + neighbor 100.100.82.1 activate + neighbor 100.100.83.1 activate + neighbor 100.100.84.1 activate + exit-address-family + + address-family ipv6 unicast + neighbor 1001:100:81::1 activate + neighbor 1001:100:81::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:81::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:82::1 activate + neighbor 1001:100:82::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:82::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:83::1 activate + neighbor 1001:100:83::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:83::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:84::1 activate + neighbor 1001:100:84::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:84::1 route-map TO_BGP_PEER_V6 out + + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + end + exit + deconfig: | + no router bgp 4201951195 + end + exit + \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/CICD-ARS/ars_common_utils.py b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/ars_common_utils.py new file mode 100644 index 00000000000..373d1980817 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/ars_common_utils.py @@ -0,0 +1,123 @@ +import os +import yaml +import json +import re +import pytest +from spytest import st, tgapi + +def reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2): + tg1.tg_traffic_control(action='reset', port_handle=[tg_handle_1, tg_handle_2]) + tg2.tg_traffic_control(action='reset', port_handle=[tg_handle_1, tg_handle_2]) + + +def add_ars(dut, global_mode="true", mode="flowlet-quality", idle_time="N/A"): + cmd = "sudo -s config ars-profile add arsp --enable-all-packets {} --mode {}".format(global_mode, mode) + if mode == "flowlet-quality": + cmd += " --idle-time {}".format(idle_time) + st.config(dut,cmd) + res = st.show(dut, "show ars-profile") + expected_values = {"ars_profile_name": "arsp", "enable_all_packets": global_mode, "ars_mode": mode} + if mode == "flowlet-quality": + expected_values["ars_idle_time"] = idle_time + if not check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not Set Appropriately While Adding") + return + +def check_ars(ars, expected_values): + # Handle empty output + if len(ars) == 0 and len(expected_values) == 0: + st.log("ARS Value Set Appropriately") + return True + + # Handle unexpected empty list when we expect values + if len(ars) == 0 and len(expected_values) > 0: + st.log("ERROR: ARS output is empty but expected values were provided: {}".format(expected_values)) + return False + + actual_values = ars[0] + for key in expected_values: + if actual_values.get(key) != expected_values[key]: + st.log("Value mismatch for {}: expected {}, got {}".format(key, expected_values[key], actual_values.get(key))) + return False + st.log("ARS Value Set Appropriately") + return True + +def del_ars(dut): + st.config(dut, "sudo -s config ars-profile del arsp") + res = st.show(dut, "show ars-profile") + if not check_ars(res, expected_values = []): + st.report_fail("test_case_failed_msg", "ARS Value Not Set Appropriately While Deleting") + return + +def check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counters, intfrecord, margin = 0.25, packetlosstolerance = 0.001): + """ + Check if traffic is balanced across multiple interfaces. + """ + total_count = 0 + interface_counts = [] + st.wait(5) + stats_tg1 = tg1.tg_traffic_stats(port_handle=tg_handle_1, mode='aggregate') + stats_tg2 = tg2.tg_traffic_stats(port_handle=tg_handle_2, mode='aggregate') + tgen_source_port = int(stats_tg1[tg_handle_1]['aggregate']['tx']['total_pkts']) + tgen_receive_port = int(stats_tg2[tg_handle_2]['aggregate']['rx']['total_pkts']) + st.banner("Total Outgoing traffic from Source Port "+str(tgen_source_port)) + st.banner("Total Incoming traffic from Dest Port" + str(tgen_receive_port)) + for record in counters: + if record.get('iface') in intfrecord: + ok_value = int(record.get('tx_ok', '0').replace(',', '')) + total_count += ok_value + interface_counts.append(ok_value) + average_count = tgen_source_port/ len(intfrecord) + toleranceB = average_count * (1-margin) + toleranceA = average_count * (1+margin) + st.banner("Average Count per Interface: " + str(average_count)) + for pkt_count in interface_counts: + if not (toleranceB <= pkt_count <= toleranceA): + st.banner("Traffic is not evenly Distributed Across Interface " + str(pkt_count) + " is not within the tolerance range [" + str(toleranceB) + ", " + str(toleranceA) + "]") + return False + return int(tgen_source_port) <= int(tgen_receive_port)*(1+packetlosstolerance) + +def check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counters, intfrecord, tolerance = 0.001, packetlosstolerance = 0.001): + """ + Check if traffic is sent through a single interface. + """ + tx_ok_count = 0 + st.wait(2) + stats_tg1 = tg1.tg_traffic_stats(port_handle=tg_handle_1, mode='aggregate') + stats_tg2 = tg2.tg_traffic_stats(port_handle=tg_handle_2, mode='aggregate') + tgen_source_port = int(stats_tg1[tg_handle_1]['aggregate']['tx']['total_pkts']) + tgen_receive_port = int(stats_tg2[tg_handle_2]['aggregate']['rx']['total_pkts']) + st.banner("Total Outgoing traffic from Source Port "+ str(tgen_source_port)) + st.banner("Total Incoming traffic from Dest Port " + str(tgen_receive_port)) + for record in counters: + if record.get('iface') in intfrecord: + tx_ok_value = int(record.get('tx_ok', '0').replace(',', '')) + if tx_ok_value >=int(tgen_source_port)*(1-tolerance) : # check if there is single interface carrying 99% of the traffic tolerance 0.01 in case few packets travel through different interface + tx_ok_count += 1 + return tx_ok_count == 1 and int(tgen_source_port) <= int(tgen_receive_port)*(1+packetlosstolerance) # Makes sure the sending packets from source are always less than received packets at destination, ensuring no packet loss + +def run_traffic(stream,tg_handle_1, tg1, data_glob): + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.wait(5) + st.config(data_glob.dut1, "aclshow -a") + # st.config(data_glob.dut1,"sudo -s show platform npu ars info -s 1") + # st.config(data_glob.dut1,"sudo -s show platform npu ars flows -s 1") + st.wait(5) + tg1.tg_traffic_control(action='stop', handle=stream) + + +def add_nhg_equal_to_ecmp(data_glob, vars): + st.config(data_glob.dut1, "sudo -s config ars-portlist add non_global_port_list --ars-profile-name arsp") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D3P1 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D3P2 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D4P2 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s show ars-portlist-member") + +def del_nhg_equal_to_ecmp(data_glob, vars): + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D3P1) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D3P2) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D4P2) + st.config(data_glob.dut1, "sudo -s config ars-portlist delete non_global_port_list") + st.config(data_glob.dut1, "sudo -s show ars-portlist-member") \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/CICD-ARS/test_ars_basic_perpacket_flowlet.py b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/test_ars_basic_perpacket_flowlet.py new file mode 100644 index 00000000000..f4371098613 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/test_ars_basic_perpacket_flowlet.py @@ -0,0 +1,903 @@ +import os +import yaml +import pytest +from spytest import st, tgapi, SpyTestDict +import tests.cisco.tortuga.common.tortuga_common_utils as common_obj +import apis.system.interface as interface_obj +import ars_common_utils + +# Tgen config +data = SpyTestDict() +data.t1d1_ipv6_addr = "2001:200:1::2" #source IPv6 +data.t1d1_ip_addr = "200.200.1.2" #source IPv4 +data.t1d1_mac_addr = "00:0A:03:00:11:01" #source Mac +data.t1d2_ipv6_addr = "2001:100:1::2" +data.t1d2_ip_addr = "200.100.1.2" +data.t1d2_mac_addr = "00:0A:04:00:12:01" +data.t1d1_ipv6_gateway = "2001:200:1::1" #source Gateway ipv6 +data.t1d2_ipv6_gateway = "2001:100:1::1" +data.t1d1_ip_gateway = "200.200.1.1" #source Gateway ipv4 +data.t1d2_ip_gateway = "200.100.1.1" +data.tgen1_asn = "65205" +data.tgen2_asn = "65206" +data.v6_mask="64" +f_size='1024' +t_mode='create' +t_l4_protocol="tcp" +t_tcp_src_port=1002 +t_high_speed_result_analysis='1' +# Tgen config + +set_up_config = 'ars_basic_cfg_CICD_setup.yaml' +@pytest.fixture(scope='module', autouse=True, params=[set_up_config]) +def setup_teardown_basic(request): + global vars, updated_path, data_glob + global tg1, tg2, tg_handle_1, tg_handle_2 + global trC1, trB1, trB2, trB4, trB5, trB1M + config_file = request.param + initialize_globals(config_file) + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, True, updated_path) + yield 'setup_teardown_basic' + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, False, updated_path) + common_obj.remove_temp_config(updated_path) + +def initialize_globals(config_file): + global vars, data_glob, tg1, tg2, tg_handle_1, tg_handle_2, updated_path + vars = st.get_testbed_vars() + tg1, tg2, tg_handle_1, tg_handle_2 = get_handles() + data_glob = SpyTestDict() + data_glob.nodes = [vars.D1, vars.D2, vars.D3, vars.D4] + data_glob.dut1 = data_glob.nodes[0] + data_glob.dut2 = data_glob.nodes[1] + data_glob.dut3 = data_glob.nodes[2] + data_glob.dut4 = data_glob.nodes[3] + data_glob.interfaces = [vars.D1D3P1, vars.D1D3P2, vars.D1D4P1, vars.D1D4P2] + data.dut_asn_list = {data_glob.dut1: "4234521651", data_glob.dut2: "65201", data_glob.dut3: "65203", data_glob.dut4: "65204"} + dir_path = os.path.dirname(os.path.realpath(__file__)) + updated_path = common_obj.modify_config_file(f'{dir_path}/{config_file}', vars) + +def configure_tg_interfaces_v6(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', ipv6_intf_addr=data.t1d1_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d1_ipv6_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', ipv6_intf_addr=data.t1d2_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d2_ipv6_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +def configure_tg_interfaces_v4(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', intf_ip_addr=data.t1d1_ip_addr, gateway=data.t1d1_ip_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', intf_ip_addr=data.t1d2_ip_addr, gateway=data.t1d2_ip_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +@pytest.fixture(scope = 'class') +def fixture_v6(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v6() + ping_dut_interface_from_tg(dst_ip1 ="2001:200:1::1", dst_ip2="2001:100:1::1") + configure_bgp_v6() + configure_traffic_streams('ipv6') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB2['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB4['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB5['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +@pytest.fixture(scope = 'class') +def fixture_v4(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v4() + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + configure_bgp_v4() + configure_traffic_streams('ipv4') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB2['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB4['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB5['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +def configure_bgp_v6(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ipv6_addr=data.t1d1_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ipv6_addr=data.t1d2_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='2001:db8::20:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='2001:db8:20:21::1' , ip_version='6',ipv6_prefix_length= '128' , route_ip_addr_step='::1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='2001:db8:10:11::1', ip_version='6', ipv6_prefix_length= '128' , route_ip_addr_step='::1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_bgp_v4(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ip_addr=data.t1d1_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ip_addr=data.t1d2_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='20.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='20.20.21.1', prefix_step='0.0.0.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='10.10.11.1', prefix_step = '0.0.0.1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_traffic_streams(tcircuit_endpoint_type): + st.banner("Configuring Traffic Stream on TGEN port1 towards DUT1") + global trB1, trB2, trB4, trB5, trC1, trB1M, trC1M + trB1, trB2, trB4, trB5 = None, None, None, None + traffic_map = { "trB1": "2000000", "trB2": "3000000", "trB4": "200000", "trB5": "400000"} + for key, param in traffic_map.items(): + result = tg1.tg_traffic_config( port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=bgp_route['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, high_speed_result_analysis=t_high_speed_result_analysis, + frame_size=f_size, transmit_mode='multi_burst', pkts_per_burst='999', inter_burst_gap=param, + inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', min_gap_bytes='12') + traffic_map[key] = result + trB1, trB2, trB4, trB5 = traffic_map["trB1"], traffic_map["trB2"], traffic_map["trB4"], traffic_map["trB5"] + trC1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + trB1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='20000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + trC1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + +def get_handles(): + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D1P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D2P1") + return (tg1, tg2, tg_ph_1, tg_ph_2) + +def ping_dut_interface_from_tg(dst_ip1 , dst_ip2): + res1 = tgapi.verify_ping(src_obj=tg1, port_handle=tg_handle_1, dev_handle=tg1_interface['handle'], + dst_ip=dst_ip1, ping_count='1', exp_count='1') + res2 = tgapi.verify_ping(src_obj=tg2, port_handle=tg_handle_2, dev_handle=tg2_interface['handle'], + dst_ip=dst_ip2, ping_count='1', exp_count='1') + if res1 and res2: + st.log("Ping succeeded.") + else: + st.warn("Ping failed.") + +def run_traffic_multiple_stream(stream, check_type='single'): + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + if check_type == 'single': + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + return False + else: + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + return False + return True + +def verify_single_interface_traffic(counter, intfrecord): + tx_ok_count = sum(1 for record in counter if record.get('iface') in intfrecord and int(record.get('tx_ok', '0').replace(',', '')) >= 1000) + if tx_ok_count != 1: + st.report_fail("test_case_failed_msg", "Traffic Load does not Pass through single interface on ARS Disable") + +def verify_traffic_distribution(counter, intfrecord, tolerance_factor=0.4): + total_count = 0 + interface_counts = [] + for record in counter: + if record.get('iface') in intfrecord: + ok_value = int(record.get('tx_ok', '0').replace(',', '')) + total_count += ok_value + interface_counts.append(ok_value) + if not interface_counts: + st.report_fail("test_case_failed_msg", "No traffic data available for the specified interfaces") + average_count = total_count / len(intfrecord) + toleranceB = average_count * (1 - tolerance_factor) # Lower bound + toleranceA = average_count * (1 + tolerance_factor) # Upper bound + for pkt_count in interface_counts: + if not (toleranceB <= pkt_count <= toleranceA): + st.report_fail("test_case_failed_msg", "Traffic Load does not Distributed Evenly with ARS Enable") + +@pytest.mark.usefixtures('fixture_v6') +class Test_IPV6_config_ars(): + def test_ars_then_nhg_flowlet_v6(self): + st.banner("Verify traffic distribution on NHG created after ARS config Flowlet: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1',prefix='2002:db8::15:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv6', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1,"sudo -s show interface counters ") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", " traffic load is not Distributed") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_singleflow_without_burst_flowlet_v6(self): + st.banner("Testing Single Flow Without Bursts Flowlet: Traffic Expected to flow thorugh single interface for Continuous Traffic") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","traffic pass through Multiple Interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_flowlet_v6(self): + st.banner("Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS) Flowlet") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + verify_single_interface_traffic(counter, data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter, data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_burst_time_lower_idle_timegap_flowlet_v6(self): + st.banner("TEST Burst time gap in IXIA set to values lower than the idle time gap Flowlet: Traffic Expected to Pass through Single interface for Burst Time Lower than idle Time gap") # idle time Gap 1 milisecond + test_failcount = 0 + streams = [trB4['stream_id'], trB5['stream_id']] # streams with burst time 200K 400K (0.2 Mili second , 0.4 Mili Second) + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For Burst Time Lower than idle Time Gap") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through Single interface for Burst Time Lower than idle Time gap") + else: + st.banner("Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + def test_burst_time_higher_idle_timegap_flowlet_v6(self): + st.banner("TestBurst time in IXIA set to values higher than the idle time gap Flowlet: Traffic Expected to Distribute for Burst TIme Higher than idle Time Gap") + test_failcount = 0 + streams = [trB1['stream_id'], trB2['stream_id']] + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream, 'balanced'): + test_failcount += 1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For idle time more than Burst gap") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for Burst Time Higher than idle Time Gap") + else: + st.banner("Test Passed: Traffic is Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_continuous_traffic_various_idle_timegap_flowlet_v6(self): + st.banner("Test Various idle Time GAP Single Continuous Traffic Flow Flowlet: Traffic Expected to Pass through single interface for various time gap") + idleTimeGapArray = ["100", "800"] + stream = trC1["stream_id"] + test_failcount = 0 + for i in range(0, 2): + timegap =idleTimeGapArray[i] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time= timegap) + res = st.show(data_glob.dut1, "sudo show ars-profile") + expected_values = {'ars_profile_name': 'arsp', 'enable_all_packets': 'true', 'ars_mode': 'flowlet-quality', 'ars_idle_time': timegap } + if not ars_common_utils.check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not Set Appropriately While Adding") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: Various idle Time GAP Single Continuous Traffic Flow") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through single interface for various time gap") + else: + st.banner("Test Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + + def test_multiple_flow_with_and_without_burst_flowlet_v6(self): + st.banner("Test Multiple Flow With and Without Burst Flowlet: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream1,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream2,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With and without Burst Flowlet mode") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_perpacket_v6(self): + st.banner("(Perpacket) Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS)") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + verify_single_interface_traffic(counter,data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter,data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_singleflow_continuous_perpacket_v6(self): + st.banner("(perpacket)Testing Single Flow Without Bursts : Traffic Expected to flow thorugh single interface for Continuous Traffic") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed traffic load is not Distributed") + st.report_fail("test_case_failed_msg","Traffic does not Distribute among interface when ARS Enable") + st.banner("Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_ars_then_nhg_perpacket_v6(self): + st.banner("(perpacket)Verify traffic distribution on NHG created after ARS config: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1',prefix='2001:db8::15:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv6', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_config(mode = 'disable', stream_id =trB7['stream_id']) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic does not pass thorugh single interface on Config ARS before Ixia Prefixes") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + + def test_multiple_flow_with_and_without_burst_perpacket_v6(self): + st.banner("(perpacket) Test Multiple Flow With and without Burst: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + # Multi Flow Burst Mode + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With and without Burst mode") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_flowlet_v6(self): + st.banner("IN TEST Bring Down One Interface Flowlet: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + interface_obj.interface_noshutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(20) + intfrecord =[vars.D1D3P2, vars.D1D4P1, vars.D1D4P2] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.wait(50) + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_perpacket_v6(self): + st.banner("IN TEST Bring Down One Interface Perpacket: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + interface_obj.interface_noshutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(50) + intfrecord =[vars.D1D3P2, vars.D1D4P1, vars.D1D4P2] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + + +@pytest.mark.usefixtures('fixture_v4') +class Test_IPV4_config_ars(): + def test_ars_then_nhg_perpacket_v4(self): + st.banner("(perpacket) Verify traffic distribution on NHG created after ARS config Flowlet: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='19.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv4', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic does not pass thorugh single interface on Config ARS before Ixia Prefixes") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_ars_then_nhg_flowlet_v4(self): + st.banner("Verify traffic distribution on NHG created after ARS config Flowlet: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='18.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv4', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_config(mode = 'disable', stream_id =trB7['stream_id']) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface on Config ARS before Ixia Prefixes") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_singleflow_without_burst_flowlet_v4(self): + st.banner("Testing Single Flow Without Bursts Flowlet: Traffic Expected to flow thorugh single interface for Continuous Traffic") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface for Continuous Traffic") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_flowlet_v4(self): + st.banner("Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS) Flowlet") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + verify_single_interface_traffic(counter, data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter, data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_burst_time_lower_idle_timegap_flowlet_v4(self): + st.banner("TEST Burst time gap in IXIA set to values lower than the idle time gap Flowlet: Traffic Expected to Pass through Single interface for Burst Time Lower than idle Time gap") # idle time Gap 1 milisecond + test_failcount = 0 + streams = [trB4['stream_id'], trB5['stream_id']] # streams with burst time 200K 400K (0.2 Mili second , 0.4 Mili Second) + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For Burst Time Lower than idle Time Gap") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through Single interface for Burst Time Lower than idle Time gap") + else: + st.banner("Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + def test_burst_time_higher_idle_timegap_flowlet_v4(self): + st.banner("TestBurst time in IXIA set to values higher than the idle time gap Flowlet: Traffic Expected to Distribute for Burst TIme Higher than idle Time Gap") + test_failcount = 0 + streams = [trB1['stream_id'], trB2['stream_id']] + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream, 'balanced'): + test_failcount += 1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For idle time more than Burst gap") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for Burst TIme Higher than idle Time Gap") + else: + st.banner("Test Passed: Traffic is Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_multiple_flow_with_and_without_burst_flowlet_v4(self): + st.banner("Test Multiple Flow With and without Burst Flowlet: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + # Multi Flow Burst Mode + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With Burst mode") + st.report_pass('test_case_passed') + + def test_continuous_traffic_various_idle_timegap_flowlet_v4(self): + st.banner("Test Various idle Time GAP Single Continuous Traffic Flow Flowlet: Traffic Expected to Pass through single interface for various time gap") + idleTimeGapArray = ["100", "800"] + stream = trC1["stream_id"] + test_failcount = 0 + for i in range(0, 2): + timegap =idleTimeGapArray[i] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time= timegap) + res = st.show(data_glob.dut1, "sudo show ars-profile") + expected_values = {'ars_profile_name': 'arsp', 'enable_all_packets': 'true', 'ars_mode': 'flowlet-quality', 'ars_idle_time': timegap } + if not ars_common_utils.check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not Set Appropriately While Adding") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: Various idle Time GAP Single Continuous Traffic Flow") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through single interface for various time gap") + else: + st.banner("Test Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_perpacket_v4(self): + st.banner("(Perpacket) Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS)") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + verify_single_interface_traffic(counter, data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter, data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_singleflow_continuous_perpacket_v4(self): + st.banner("(perpacket)Testing Single Flow Without Bursts : Traffic Expected to Distribute Across Interface") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed traffic load is not Distributed") + st.report_fail("test_case_failed_msg","Traffic does not Distribute among interface when ARS Enable") + st.banner("Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + + def test_multiple_flow_with_and_without_burst_perpacket_v4(self): + st.banner("(perpacket)Test Multiple Flow With Burst: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + # Multi Flow Burst Mode + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With Burst mode") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_flowlet_v4(self): + st.banner("IN TEST Bring Down One Interface Flowlet: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + interface_obj.interface_noshutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(20) + intfrecord =[vars.D1D3P2, vars.D1D4P1, vars.D1D4P2] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.wait(50) + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_perpacket_v4(self): + st.banner("IN TEST Bring Down One Interface Perpacket: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + interface_obj.interface_noshutdown(vars.D1, vars.D1D3P1, skip_verify=False) + st.wait(20) + intfrecord =[vars.D1D3P2, vars.D1D4P1, vars.D1D4P2] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.wait(50) + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/CICD-ARS/test_ars_portlist.py b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/test_ars_portlist.py new file mode 100644 index 00000000000..33decee9cce --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/CICD-ARS/test_ars_portlist.py @@ -0,0 +1,583 @@ +import os +import yaml +import pytest +from spytest import st, tgapi, SpyTestDict +import apis.routing.ip as ipapi +import tests.cisco.tortuga.common.tortuga_common_utils as common_obj +import apis.system.interface as interface_obj +import ars_common_utils + +# Tgen config +data = SpyTestDict() +data.t1d1_ipv6_addr = "2001:200:1::2" #Source IPv6 +data.t1d1_ip_addr = "200.200.1.2" #source IPv4 +data.t1d1_mac_addr = "00:0A:03:00:11:01" #source Mac +data.t1d2_ipv6_addr = "2001:100:1::2" +data.t1d2_ip_addr = "200.100.1.2" +data.t1d2_mac_addr = "00:0A:04:00:12:01" +data.t1d1_ipv6_gateway = "2001:200:1::1" #source Gateway ipv6 +data.t1d2_ipv6_gateway = "2001:100:1::1" +data.t1d1_ip_gateway = "200.200.1.1" #source Gateway ipv4 +data.t1d2_ip_gateway = "200.100.1.1" +data.tgen1_asn = "65205" +data.tgen2_asn = "65206" +data.v6_mask="64" +f_size='1024' +t_mode='create' +t_l4_protocol="tcp" +t_tcp_src_port=1002 +t_high_speed_result_analysis='1' +# Tgen config + +set_up_config = 'ars_basic_cfg_CICD_setup.yaml' +@pytest.fixture(scope='module', autouse=True, params=[set_up_config]) +def setup_teardown_basic(request): + global vars, updated_path, data_glob + global tg1, tg2, tg_handle_1, tg_handle_2 + global trC1, trB1, trB2, trB4, trB5, trB1M + config_file = request.param + initialize_globals(config_file) + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, True, updated_path) + interface_obj.interface_shutdown(vars.D1, vars.D1D4P1, skip_verify=False) + yield 'setup_teardown_basic' + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, False, updated_path) + interface_obj.interface_noshutdown(vars.D1, vars.D1D4P1, skip_verify=False) + common_obj.remove_temp_config(updated_path) + +def initialize_globals(config_file): + global vars, data_glob, tg1, tg2, tg_handle_1, tg_handle_2, updated_path + vars = st.get_testbed_vars() + tg1, tg2, tg_handle_1, tg_handle_2 = get_handles() + data_glob = SpyTestDict() + data_glob.nodes = [vars.D1, vars.D2, vars.D3, vars.D4] + data_glob.dut1 = data_glob.nodes[0] + data_glob.dut2 = data_glob.nodes[1] + data_glob.dut3 = data_glob.nodes[2] + data_glob.dut4 = data_glob.nodes[3] + data_glob.interfaces = [vars.D1D3P1, vars.D1D3P2, vars.D1D4P2] + data.dut_asn_list = {data_glob.dut1: "4234521651", data_glob.dut2: "65201", data_glob.dut3: "65203", data_glob.dut4: "65204"} + dir_path = os.path.dirname(os.path.realpath(__file__)) + updated_path = common_obj.modify_config_file(f'{dir_path}/{config_file}', vars) + +def configure_tg_interfaces_v6(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', ipv6_intf_addr=data.t1d1_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d1_ipv6_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', ipv6_intf_addr=data.t1d2_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d2_ipv6_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +def configure_tg_interfaces_v4(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', intf_ip_addr=data.t1d1_ip_addr, gateway=data.t1d1_ip_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', intf_ip_addr=data.t1d2_ip_addr, gateway=data.t1d2_ip_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +@pytest.fixture(scope = 'class') +def fixture_v6(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v6() + ping_dut_interface_from_tg(dst_ip1 ="2001:200:1::1", dst_ip2="2001:100:1::1") + configure_bgp_v6() + configure_traffic_streams('ipv6') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +@pytest.fixture(scope = 'class') +def fixture_v4(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v4() + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + configure_bgp_v4() + configure_traffic_streams('ipv4') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +def configure_bgp_v6(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ipv6_addr=data.t1d1_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ipv6_addr=data.t1d2_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='2001:db8::20:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='2001:db8:20:21::1' , ip_version='6', ipv6_prefix_length= '128', route_ip_addr_step='::1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='2001:db8:10:11::1', ip_version='6', ipv6_prefix_length= '128', route_ip_addr_step='::1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_bgp_v4(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ip_addr=data.t1d1_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ip_addr=data.t1d2_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='20.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='20.20.21.1', prefix_step='0.0.0.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='10.10.11.1', prefix_step = '0.0.0.1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_traffic_streams(tcircuit_endpoint_type): + st.banner("Configuring Traffic Stream on TGEN port1 towards DUT1") + global trB1, trC1, trB1M, trC1M + trB1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + trC1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + trB1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='20000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + trC1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + +def get_handles(): + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D1P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D2P1") + return (tg1, tg2, tg_ph_1, tg_ph_2) + +def ping_dut_interface_from_tg(dst_ip1 , dst_ip2): + res1 = tgapi.verify_ping(src_obj=tg1, port_handle=tg_handle_1, dev_handle=tg1_interface['handle'], + dst_ip=dst_ip1, ping_count='1', exp_count='1') + res2 = tgapi.verify_ping(src_obj=tg2, port_handle=tg_handle_2, dev_handle=tg2_interface['handle'], + dst_ip=dst_ip2, ping_count='1', exp_count='1') + if res1 and res2: + st.log("Ping succeeded.") + else: + st.warn("Ping failed.") + +@pytest.mark.usefixtures('fixture_v4') +class Test_IPV4_config_ars(): + def test_portlist_equal_ecmp_flowlet_withburst(self): + st.banner("Test portlist member equal to ECMP for Flowlet with Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_less_ecmp_flowlet_withburst(self): + st.banner("Test portlist member less ECMP for Flowlet with Burst: ARS expected to disable and traffic not distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D3P1) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D3P1 + " --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow through single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_portlist_greater_ecmp_flowlet_withburst(self): + st.banner("Test portlist member greater than ECMP for Flowlet with Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D4P1 + " --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D4P1) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_perpacket_withburst(self): + st.banner("Test portlist member equal to ECMP for Perpacket with Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test__portlist_less_ecmp_perpacket_withburst(self): + st.banner("Test portlist member less ECMP for Perpacket With Burst: ARS expected to disable and traffic not distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del " + vars.D1D3P1) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D3P1 + " --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow through single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_portlist_greater_ecmp_perpacket_withburst(self): + st.banner("Test portlist member greater than ECMP for perpacket With Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D4P1 +" --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D4P1) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_flowlet_multiflow_with_and_without_burst(self): + st.banner("Test portlist member equal to ECMP for MultiFlow Flowlet With Burst: ARS expected to enable and traffic distributed") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_perpacket_multiflow_with_and_without_burst(self): + st.banner("Test portlist member equal to ECMP for MultiFlow perpacket with Burst: ARS expected to enable and traffic distributed") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_flowlet_without_burst(self): + st.banner("Test portlist member equal to ECMP Flowlet Without Burst: ARS expected to enable and traffic not distributed") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow through single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_perpacket_without_burst(self): + st.banner("Test portlist member equal to ECMP for Perpacket Without Burst: ARS expected to enable and traffic distributed") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + +@pytest.mark.usefixtures('fixture_v6') +class Test_IPV6_config_ars(): + def test_portlist_equal_ecmp_flowlet_withburst_v6(self): + st.banner("Test portlist member equal to ECMP for Flowlet With Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_less_ecmp_flowlet_withburst_v6(self): + st.banner("Test portlist member less ECMP for Flowlet With Burst: ARS expected to disable and traffic not distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D3P1) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D3P1 +" --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow through single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_portlist_greater_ecmp_flowlet_withburst_v6(self): + st.banner("Test portlist member greater than ECMP for Flowlet with Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D4P1 + " --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D4P1) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_perpacket_withburst_v6(self): + st.banner("Test portlist member equal to ECMP for Perpacket with Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_less_ecmp_perpacket_withburst_v6(self): + st.banner("Test portlist member less ECMP for Perpacket with Burst: ARS expected to disable and traffic not distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D3P1) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D3P1 +" --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow through single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_portlist_greater_ecmp_perpacket_withburst_v6(self): + st.banner("Test portlist member greater than ECMP for perpacket with Burst: ARS expected to enable and traffic distributed") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D4P1 +" --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D4P1) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_flowlet_multiflow_with_and_without_burst_v6(self): + st.banner("Test portlist member equal to ECMP for MultiFlow Flowlet with Burst: ARS expected to enable and traffic distributed") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic does not pass through single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_perpacket_multiflow_with_and_without_burst_v6(self): + st.banner("Test portlist member equal to ECMP for MultiFlow perpacket with Burst: ARS expected to enable and traffic distributed") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_flowlet_without_burst_v6(self): + st.banner("Test portlist member equal to ECMP Flowlet Without Burst: ARS expected to enable and traffic not distributed") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow through single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_portlist_equal_ecmp_perpacket_without_burst_v6(self): + st.banner("Test portlist member equal to ECMP for Perpacket Without Burst: ARS expected to enable and traffic distributed") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/acl/test_acl_dscp_rewrite.py b/sonic-mgmt/spytest/tests/cisco/acl/test_acl_dscp_rewrite.py new file mode 100644 index 00000000000..11d15920868 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/acl/test_acl_dscp_rewrite.py @@ -0,0 +1,1166 @@ +#! /usr/bin/env python3 +"""SpyTest script for ACL DSCP rewrite verification with VxLAN traffic.""" + +import json + +import pytest + +from spytest import st, tgapi, SpyTestDict + +import apis.routing.ip as ip_obj +import apis.system.basic as basic_obj + +data = SpyTestDict() + +# ACL constants +TABLE_V4 = "OVERLAY_MARK_META_TEST_V4" +TABLE_V6 = "OVERLAY_MARK_META_TEST_V6" +EXPECTED_DSCP = 40 + +# VxLAN constants +TUNNEL_V4 = "tunnel_v4" +TUNNEL_V6 = "tunnel_v6" +VNET_V4 = "Vnet_dscp_v4" +VNET_V6 = "Vnet_dscp_v6" +VNI_V4 = 10000 +VNI_V6 = 20000 +VXLAN_PORT = 4789 +OVERLAY_DMAC = "25:35:45:55:65:75" + +# Underlay addressing +LOOPBACK_IP = "10.1.0.32" +LOOPBACK_IPV6 = "2001:db8:1::32" +NEXTHOP_ENDPOINT_V4 = "100.0.0.1" +NEXTHOP_ENDPOINT_V6 = "2001:db8:64::1" + +# Overlay destinations (one per scenario) +DEST_V4_IN_V4 = "150.0.0.1" +DEST_V6_IN_V4 = "2001:150::1" +DEST_V4_IN_V6 = "151.0.0.1" +DEST_V6_IN_V6 = "2001:151::1" + +# TG port addresses +TG_SRC_MAC = "00:0a:01:00:00:01" +TG_DST_MAC = "00:0a:01:00:11:02" +INGRESS_TG_IP = "1.1.1.2" +INGRESS_DUT_IP = "1.1.1.1" +INGRESS_TG_IPV6 = "1::2" +INGRESS_DUT_IPV6 = "1::1" +EGRESS_TG_IP = "2.2.2.2" +EGRESS_DUT_IP = "2.2.2.1" +EGRESS_TG_IPV6 = "2::2" +EGRESS_DUT_IPV6 = "2::1" + + +SCENARIOS = [ + { + "name": "v4_in_v4", + "inner": "v4", + "outer": "v4", + "vnet": VNET_V4, + "vni": VNI_V4, + "dest": DEST_V4_IN_V4, + "mask": 32, + "endpoint": NEXTHOP_ENDPOINT_V4, + "table": TABLE_V4, + "rule_name": "RULE_V4_IN_V4", + "rule_field": "DST_IP", + }, + { + "name": "v6_in_v4", + "inner": "v6", + "outer": "v4", + "vnet": VNET_V4, + "vni": VNI_V4, + "dest": DEST_V6_IN_V4, + "mask": 128, + "endpoint": NEXTHOP_ENDPOINT_V4, + "table": TABLE_V6, + "rule_name": "RULE_V6_IN_V4", + "rule_field": "DST_IPV6", + }, + { + "name": "v4_in_v6", + "inner": "v4", + "outer": "v6", + "vnet": VNET_V6, + "vni": VNI_V6, + "dest": DEST_V4_IN_V6, + "mask": 32, + "endpoint": NEXTHOP_ENDPOINT_V6, + "table": TABLE_V4, + "rule_name": "RULE_V4_IN_V6", + "rule_field": "DST_IP", + }, + { + "name": "v6_in_v6", + "inner": "v6", + "outer": "v6", + "vnet": VNET_V6, + "vni": VNI_V6, + "dest": DEST_V6_IN_V6, + "mask": 128, + "endpoint": NEXTHOP_ENDPOINT_V6, + "table": TABLE_V6, + "rule_name": "RULE_V6_IN_V6", + "rule_field": "DST_IPV6", + }, +] + + +# Shared utilities + +IP_FAMILY = {"v4": "ipv4", "v6": "ipv6"} + + +def traffic_ip(family, role): + """Return TG IP for role 'ingress_src' or 'egress_dst'.""" + if role == "ingress_src": + return INGRESS_TG_IP if family == "v4" else INGRESS_TG_IPV6 + return EGRESS_TG_IP if family == "v4" else EGRESS_TG_IPV6 + + +# Topology and routing + +def initialize_topology(): + """Initialize 1 DUT and 2 TG ports.""" + vars = st.ensure_min_topology("D1T1:2") + data.dut = vars.D1 + data.dut_tg_port1 = vars.D1T1P1 + data.dut_tg_port2 = vars.D1T1P2 + + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D1P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D1P2") + data.tg1 = tg1 + data.tg2 = tg2 + data.tg_ph_1 = tg_ph_1 + data.tg_ph_2 = tg_ph_2 + + tg1.tg_traffic_control(action="reset", port_handle=tg_ph_1) + tg2.tg_traffic_control(action="reset", port_handle=tg_ph_2) + + data.dut_mac = basic_obj.get_ifconfig_ether(data.dut, data.dut_tg_port1) + data.ports = [data.dut_tg_port1, data.dut_tg_port2] + + +def configure_routing(): + """Configure v4/v6 routing TG port1 -> DUT -> TG port2.""" + dut = data.dut + + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port1, INGRESS_DUT_IP, 24, + family="ipv4", config='add') + st.config(dut, "sudo arp -s {} {}".format(INGRESS_TG_IP, TG_SRC_MAC)) + + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port2, EGRESS_DUT_IP, 24, + family="ipv4", config='add') + st.config(dut, "sudo arp -s {} {}".format(EGRESS_TG_IP, TG_DST_MAC)) + + ip_obj.create_static_route(dut, EGRESS_TG_IP, + "{}/32".format(NEXTHOP_ENDPOINT_V4), + shell="vtysh", family="ipv4") + + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port1, INGRESS_DUT_IPV6, 64, + family="ipv6", config='add') + st.config(dut, "sudo ip -6 neigh replace {} lladdr {} dev {}".format( + INGRESS_TG_IPV6, TG_SRC_MAC, data.dut_tg_port1)) + + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port2, EGRESS_DUT_IPV6, 64, + family="ipv6", config='add') + st.config(dut, "sudo ip -6 neigh replace {} lladdr {} dev {}".format( + EGRESS_TG_IPV6, TG_DST_MAC, data.dut_tg_port2)) + + ip_obj.create_static_route(dut, EGRESS_TG_IPV6, + "{}/128".format(NEXTHOP_ENDPOINT_V6), + shell="vtysh", family="ipv6") + + st.config(dut, "sudo config interface ip add Loopback0 {}/32".format(LOOPBACK_IP)) + st.config(dut, "sudo config interface ip add Loopback0 {}/128".format(LOOPBACK_IPV6)) + + +def unconfigure_routing(): + """Remove routing configuration.""" + dut = data.dut + ip_obj.delete_static_route(dut, EGRESS_TG_IP, + "{}/32".format(NEXTHOP_ENDPOINT_V4), + shell="vtysh", family="ipv4") + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port1, INGRESS_DUT_IP, 24, + family="ipv4", config='remove') + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port2, EGRESS_DUT_IP, 24, + family="ipv4", config='remove') + ip_obj.delete_static_route(dut, EGRESS_TG_IPV6, + "{}/128".format(NEXTHOP_ENDPOINT_V6), + shell="vtysh", family="ipv6") + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port1, INGRESS_DUT_IPV6, 64, + family="ipv6", config='remove') + ip_obj.config_ip_addr_interface(dut, data.dut_tg_port2, EGRESS_DUT_IPV6, 64, + family="ipv6", config='remove') + st.config(dut, "sudo config interface ip remove Loopback0 {}/32 || true".format(LOOPBACK_IP)) + st.config(dut, "sudo config interface ip remove Loopback0 {}/128 || true".format(LOOPBACK_IPV6)) + + +# VxLAN helpers + +def configure_vxlan(): + """Configure VxLAN tunnels, VNETs, and per-scenario routes.""" + dut = data.dut + + switch_config = json.dumps([{ + "SWITCH_TABLE:switch": { + "vxlan_port": str(VXLAN_PORT), + "vxlan_router_mac": data.dut_mac + }, + "OP": "SET" + }]) + st.config(dut, "echo '{}' | docker exec -i swss swssconfig /dev/stdin".format(switch_config)) + st.wait(2) + + tunnel_config = json.dumps({ + "VXLAN_TUNNEL": { + TUNNEL_V4: {"src_ip": LOOPBACK_IP}, + TUNNEL_V6: {"src_ip": LOOPBACK_IPV6}, + } + }) + st.config(dut, "echo '{}' > /tmp/vxlan_tunnel.json && sudo config load /tmp/vxlan_tunnel.json -y".format( + tunnel_config)) + st.wait(2) + + vnets = {} + for vnet_name, tunnel_name, vni in ((VNET_V4, TUNNEL_V4, VNI_V4), (VNET_V6, TUNNEL_V6, VNI_V6)): + vnets[vnet_name] = { + "vxlan_tunnel": tunnel_name, + "scope": "default", + "vni": str(vni), + "peer_list": "", + "advertise_prefix": "false", + "overlay_dmac": OVERLAY_DMAC, + } + vnet_config = json.dumps({"VNET": vnets}) + st.config(dut, "echo '{}' > /tmp/vnet.json && sudo config load /tmp/vnet.json -y".format(vnet_config)) + st.wait(2) + + route_entries = [] + for scn in SCENARIOS: + route_key = "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}".format( + scn["vnet"], scn["dest"], scn["mask"]) + route_entries.append({ + route_key: { + "endpoint": scn["endpoint"], + "vni": str(scn["vni"]), + "mac_address": OVERLAY_DMAC, + "profile": "", + }, + "OP": "SET", + }) + route_config = json.dumps(route_entries) + st.config(dut, "echo '{}' | docker exec -i swss swssconfig /dev/stdin".format(route_config)) + st.wait(3) + st.log("VxLAN tunnels (v4+v6), VNETs, and {} routes configured".format(len(SCENARIOS))) + + +def unconfigure_vxlan(): + """Remove VxLAN configuration.""" + dut = data.dut + route_dels = [] + for scn in SCENARIOS: + route_key = "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}".format( + scn["vnet"], scn["dest"], scn["mask"]) + route_dels.append({ + route_key: {"endpoint": scn["endpoint"], "profile": ""}, + "OP": "DEL", + }) + st.config(dut, "echo '{}' | docker exec -i swss swssconfig /dev/stdin".format(json.dumps(route_dels))) + st.wait(2) + + st.config(dut, "redis-cli -n 4 DEL 'VNET|{}'".format(VNET_V4)) + st.config(dut, "redis-cli -n 4 DEL 'VNET|{}'".format(VNET_V6)) + st.config(dut, "redis-cli -n 4 DEL 'VXLAN_TUNNEL|{}'".format(TUNNEL_V4)) + st.config(dut, "redis-cli -n 4 DEL 'VXLAN_TUNNEL|{}'".format(TUNNEL_V6)) + st.wait(2) + + +# ACL helpers + +def create_acl_table(table_name, table_type, policy_desc, ports): + """Create ACL table in CONFIG_DB.""" + ports_str = ",".join(ports) + cmd = ("redis-cli -n 4 HSET 'ACL_TABLE|{}' " + "'type' '{}' 'stage' 'ingress' 'ports@' '{}' 'policy_desc' '{}'").format( + table_name, table_type, ports_str, policy_desc) + st.config(data.dut, cmd) + + +def delete_acl_table(table_name): + """Delete ACL table from CONFIG_DB.""" + st.config(data.dut, "redis-cli -n 4 DEL 'ACL_TABLE|{}'".format(table_name)) + st.wait(2) + + +def create_acl_rule(table_name, rule_name, fields): + """Create ACL rule in CONFIG_DB.""" + rule_key = "ACL_RULE|{}|{}".format(table_name, rule_name) + cmd_parts = ["'{}' '{}'".format(k, v) for k, v in fields.items()] + cmd = "redis-cli -n 4 HSET '{}' {}".format(rule_key, " ".join(cmd_parts)) + st.config(data.dut, cmd) + + +def delete_acl_rule(table_name, rule_name): + """Delete ACL rule from CONFIG_DB.""" + st.config(data.dut, "redis-cli -n 4 DEL 'ACL_RULE|{}|{}'".format(table_name, rule_name)) + st.wait(2) + + +def verify_acl_status(state_key, label, expected_status="Active", retries=6, interval=5): + """Poll ACL status in STATE_DB with retries.""" + for attempt in range(retries): + status = st.config(data.dut, "redis-cli -n 6 hget '{}' 'status'".format(state_key)) + if expected_status in str(status): + return True + if attempt < retries - 1: + st.wait(interval) + st.log("ERROR: ACL {} not {} after {} attempts".format(label, expected_status, retries)) + return False + + +def setup_acl(table_specs, rule_builder, ports): + created_tables = [] + created_rules = [] + for name, ttype, desc in table_specs: + create_acl_table(name, ttype, desc, ports) + created_tables.append(name) + for scn in SCENARIOS: + spec = rule_builder(scn) + if spec is None: + continue + # Single 3-tuple or iterable of (table, rule_name, fields) tuples. + if (isinstance(spec, tuple) and len(spec) == 3 + and isinstance(spec[2], dict)): + specs = [spec] + else: + specs = list(spec) + for tbl, rule_name, fields in specs: + create_acl_rule(tbl, rule_name, fields) + created_rules.append((tbl, rule_name)) + return created_tables, created_rules + + +def verify_acl_setup_active(tables, rules): + """Verify tables/rules are Active; dump show acl and clear counters.""" + ok = True + for tbl in tables: + if not verify_acl_status( + "ACL_TABLE_TABLE|{}".format(tbl), "table {}".format(tbl)): + ok = False + for tbl, rule in rules: + if not verify_acl_status( + "ACL_RULE_TABLE|{}|{}".format(tbl, rule), + "rule {}|{}".format(tbl, rule)): + ok = False + if ok and tables: + st.log("---- show acl table ----\n{}".format( + st.show(data.dut, "show acl table", skip_tmpl=True))) + st.log("---- show acl rule ----\n{}".format( + st.show(data.dut, "show acl rule", skip_tmpl=True))) + st.config(data.dut, "sudo counterpoll acl enable || true") + st.config(data.dut, "aclshow -c || true") + return ok + + +def cleanup_acl(tables, rules): + """Delete ACL rules then tables.""" + for tbl, rule in rules: + delete_acl_rule(tbl, rule) + for tbl in tables: + delete_acl_table(tbl) + + +# Traffic helpers + +def parse_ip_dscp(frame_data, eth_offset=0): + """Parse DSCP from IPv4/IPv6 at eth_offset. Returns (family, dscp, tc).""" + if len(frame_data) < eth_offset + 16: + return (None, None, None) + eth_type = ((int(frame_data[eth_offset + 12], 16) << 8) + | int(frame_data[eth_offset + 13], 16)) + ip_off = eth_offset + 14 + if eth_type == 0x0800: + if len(frame_data) < ip_off + 2: + return (None, None, None) + tos = int(frame_data[ip_off + 1], 16) + return ("ipv4", tos >> 2, tos) + if eth_type == 0x86DD: + if len(frame_data) < ip_off + 2: + return (None, None, None) + b0 = int(frame_data[ip_off], 16) + b1 = int(frame_data[ip_off + 1], 16) + tc = ((b0 & 0x0F) << 4) | ((b1 >> 4) & 0x0F) + return ("ipv6", tc >> 2, tc) + return (None, None, None) + + +def is_vxlan_frame(frame_data): + """Return (is_vxlan, outer_family, vxlan_off, inner_off).""" + outer_family, _, _ = parse_ip_dscp(frame_data, eth_offset=0) + if outer_family == "ipv4": + if len(frame_data) < 14 + 20 + 8 + 8: + return (False, None, None, None) + if int(frame_data[23], 16) != 0x11: + return (False, None, None, None) + udp_off = 14 + 20 + elif outer_family == "ipv6": + if len(frame_data) < 14 + 40 + 8 + 8: + return (False, None, None, None) + if int(frame_data[20], 16) != 0x11: + return (False, None, None, None) + udp_off = 14 + 40 + else: + return (False, None, None, None) + + udp_dport = (int(frame_data[udp_off + 2], 16) << 8) | int(frame_data[udp_off + 3], 16) + if udp_dport != VXLAN_PORT: + return (False, None, None, None) + + vxlan_off = udp_off + 8 + if (int(frame_data[vxlan_off], 16) & 0x08) == 0: + return (False, None, None, None) + + inner_off = vxlan_off + 8 + return (True, outer_family, vxlan_off, inner_off) + + +def hex_dump(frame_data, bytes_per_row=16): + """Hex+ASCII dump of a captured frame.""" + lines = [] + for i in range(0, len(frame_data), bytes_per_row): + row = frame_data[i:i + bytes_per_row] + hex_part = " ".join(row).ljust(bytes_per_row * 3 - 1) + ascii_part = "".join( + chr(int(b, 16)) if 0x20 <= int(b, 16) < 0x7F else "." for b in row + ) + lines.append(" {:04X} {} |{}|".format(i, hex_part, ascii_part)) + return "\n".join(lines) + + +def build_tg_stream_params(family, src_ip, dst_ip, dscp, + pkts_per_burst=10, rate_pps=100, + mac_src=None, mac_dst=None, + udp_src_port="12345", udp_dst_port="54321"): + """Build TG traffic_config params for a single burst.""" + params = { + "port_handle": data.tg_ph_1, + "port_handle2": data.tg_ph_2, + "mode": "create", + "transmit_mode": "single_burst", + "pkts_per_burst": pkts_per_burst, + "rate_pps": rate_pps, + "frame_size": 128, + "l2_encap": "ethernet_ii", + "mac_src": mac_src or TG_SRC_MAC, + "mac_dst": mac_dst or data.dut_mac, + "l4_protocol": "udp", + "udp_src_port": udp_src_port, + "udp_dst_port": udp_dst_port, + } + if family == "v4": + params.update({ + "l3_protocol": "ipv4", + "ip_src_addr": src_ip, + "ip_dst_addr": dst_ip, + "ip_dscp": str(dscp), + }) + else: + params.update({ + "l3_protocol": "ipv6", + "ipv6_src_addr": src_ip, + "ipv6_dst_addr": dst_ip, + "ipv6_traffic_class": str(dscp << 2), + }) + return params + + +def send_and_capture(stream_params, wait_seconds=3): + """Run TG burst and return egress packet stats.""" + tg1, tg2 = data.tg1, data.tg2 + tg_ph_1, tg_ph_2 = data.tg_ph_1, data.tg_ph_2 + + tg1.tg_traffic_control(action="reset", port_handle=tg_ph_1) + stream = tg1.tg_traffic_config(**stream_params) + stream_id = stream['stream_id'] + + tg2.tg_packet_control(port_handle=tg_ph_2, action='start') + tg1.tg_traffic_control(action='run', handle=stream_id) + st.wait(wait_seconds) + tg1.tg_traffic_control(action='stop', handle=stream_id) + tg2.tg_packet_control(port_handle=tg_ph_2, action='stop') + + return tg2.tg_packet_stats(port_handle=tg_ph_2, format='var', output_type='hex') + + +def capture_and_parse_traffic(label, inner_family, src_ip, dst_ip, sent_dscp, + mode="vxlan", outer_family=None, + pkts_per_burst=10, rate_pps=100, wait_seconds=None, + bulk_sample=None, expected_outer_dscp=None): + """Send traffic and parse captured frames (vxlan, plain, or bulk sample).""" + if wait_seconds is None: + wait_seconds = 3 + if mode == "bulk": + wait_seconds = max(5, int(pkts_per_burst / max(rate_pps, 1)) + 5) + + stream_params = build_tg_stream_params( + inner_family, src_ip, dst_ip, sent_dscp, + pkts_per_burst=pkts_per_burst, rate_pps=rate_pps) + pkts_captured = send_and_capture(stream_params, wait_seconds=wait_seconds) + + if mode == "bulk": + expected_outer_fam = outer_family + checked = 0 + failed = 0 + for key in pkts_captured: + if key == 'status': + continue + agg = pkts_captured[key].get('aggregate', {}) + num_frames = agg.get('num_frames', '0') + st.log("[{}] bulk: TG sent={} captured_total={}".format( + label, pkts_per_burst, num_frames)) + if num_frames in ['0', 'N/A']: + return (False, 0, 0) + frames_dict = pkts_captured[key].get('frame', {}) + for fkey in sorted(frames_dict.keys()): + if checked >= bulk_sample: + break + fdata = frames_dict[fkey].get('frame_pylist') + if not fdata: + continue + is_vxlan_pkt, outer_fam, _vx, inner_off = is_vxlan_frame(fdata) + if not is_vxlan_pkt or outer_fam != expected_outer_fam: + continue + _, outer_dscp, _ = parse_ip_dscp(fdata, eth_offset=0) + _, inner_dscp, _ = parse_ip_dscp(fdata, eth_offset=inner_off) + checked += 1 + if outer_dscp != expected_outer_dscp: + failed += 1 + if failed <= 5: + st.log("[{}] bulk MISMATCH #{}: outer={} (expected {})".format( + label, failed, outer_dscp, expected_outer_dscp)) + elif inner_dscp is not None and inner_dscp != sent_dscp: + failed += 1 + if failed <= 5: + st.log("[{}] bulk MISMATCH #{}: inner={} (expected {})".format( + label, failed, inner_dscp, sent_dscp)) + break + if checked == 0: + st.log("[{}] bulk: no VxLAN frames captured".format(label)) + return (False, 0, 0) + st.log("[{}] bulk: validated {} sampled frames -> {} mismatches".format( + label, checked, failed)) + return (failed == 0, checked, failed) + + if mode == "plain": + result = {"captured": False, "is_vxlan": False, "dscp": None, "raw_frame": None} + expected_fam = outer_family + for key in pkts_captured: + if key == 'status': + continue + num_frames = pkts_captured[key]['aggregate'].get('num_frames', '0') + if num_frames in ['0', 'N/A']: + st.log("[{}] No packets captured".format(label)) + break + frames_dict = pkts_captured[key].get('frame', {}) + for fkey in sorted(frames_dict.keys()): + fdata = frames_dict[fkey].get('frame_pylist') + if not fdata: + continue + outer_fam, dscp, tos = parse_ip_dscp(fdata, eth_offset=0) + if outer_fam != expected_fam: + continue + is_vxlan_pkt, _, _, _ = is_vxlan_frame(fdata) + result.update({"captured": True, "is_vxlan": is_vxlan_pkt, + "dscp": dscp, "raw_frame": fdata}) + st.log("[{}] family={} TC/TOS=0x{:02X} DSCP={} is_vxlan={}".format( + label, outer_fam, tos, dscp, is_vxlan_pkt)) + st.log("[{}] HEX DUMP ({} bytes):\n{}".format( + label, len(fdata), hex_dump(fdata))) + break + break + return result + + # mode == "vxlan" + result = {"captured": False, "actual_dscp": None, + "outer_family": None, "raw_frame": None, + "inner_dscp": None, "inner_family": None} + try: + for key in pkts_captured: + if key == 'status': + continue + num_frames = pkts_captured[key]['aggregate']['num_frames'] + if num_frames in ['0', 'N/A']: + st.log("[{}] No packets captured on egress port".format(label)) + break + st.log("[{}] Captured {} packets on egress port".format(label, num_frames)) + frames_dict = pkts_captured[key].get('frame', {}) + chosen = None + chosen_inner_off = None + for fkey in sorted(frames_dict.keys()): + fdata = frames_dict[fkey].get('frame_pylist') + if not fdata: + continue + is_vxlan_pkt, outer_fam, _vx_off, inner_off = is_vxlan_frame(fdata) + if not is_vxlan_pkt or outer_fam != outer_family: + continue + chosen = fdata + chosen_inner_off = inner_off + break + if chosen is None: + st.log("[{}] No VxLAN-encapsulated frame found in capture".format(label)) + break + outer_family_val, actual_dscp, tc_byte = parse_ip_dscp(chosen, eth_offset=0) + inner_family_val, inner_dscp, inner_tc = parse_ip_dscp( + chosen, eth_offset=chosen_inner_off) + result.update({ + "captured": True, + "actual_dscp": actual_dscp, + "outer_family": outer_family_val, + "raw_frame": chosen, + "inner_dscp": inner_dscp, + "inner_family": inner_family_val, + }) + st.log("[{}] OUTER: family={} TC/TOS=0x{:02X} DSCP={}".format( + label, outer_family_val, tc_byte, actual_dscp)) + if inner_family_val is not None: + st.log("[{}] INNER: family={} TC/TOS=0x{:02X} DSCP={}".format( + label, inner_family_val, inner_tc, inner_dscp)) + else: + st.log("[{}] INNER: could not parse (frame too short or unknown ethertype)".format( + label)) + st.log("[{}] HEX DUMP ({} bytes):\n{}".format( + label, len(chosen), hex_dump(chosen))) + break + except Exception as exc: + st.log("[{}] Error parsing captured packet: {}".format(label, exc)) + return result + + +def check_dscp_result(scn, capture_result, expected_outer_dscp, sent_dscp): + """Validate outer/inner DSCP on a captured VxLAN frame.""" + if not capture_result["captured"]: + st.log("[{}] FAIL: No VxLAN packet captured".format(scn["name"])) + return False + expected_outer_fam = IP_FAMILY[scn["outer"]] + if capture_result["outer_family"] != expected_outer_fam: + st.log("[{}] FAIL: outer family expected={} got={}".format( + scn["name"], expected_outer_fam, capture_result["outer_family"])) + return False + outer = capture_result["actual_dscp"] + inner = capture_result["inner_dscp"] + if outer != expected_outer_dscp: + st.log("[{}] FAIL: outer DSCP expected={} actual={}".format( + scn["name"], expected_outer_dscp, outer)) + return False + if inner is not None and inner != sent_dscp: + st.log("[{}] FAIL: inner DSCP expected={} actual={}".format( + scn["name"], sent_dscp, inner)) + return False + st.log("[{}] PASS: outer={} inner={}".format(scn["name"], outer, inner)) + return True + + +def run_dscp_scenarios_multi(dscp_map): + """Run all SCENARIOS for each sent_dscp -> expected_outer_dscp mapping.""" + multi = len(dscp_map) > 1 + per_results = {} + for scn in SCENARIOS: + st.log("Scenario {}: inner={} outer={} vnet={} vni={} dest={}".format( + scn["name"], scn["inner"], scn["outer"], scn["vnet"], scn["vni"], scn["dest"])) + for sent_dscp, expected_outer_dscp in dscp_map.items(): + capture_result = capture_and_parse_traffic( + scn["name"], scn["inner"], + traffic_ip(scn["inner"], "ingress_src"), scn["dest"], sent_dscp, + mode="vxlan", outer_family=IP_FAMILY[scn["outer"]]) + key = "{}:{}".format(scn["name"], sent_dscp) if multi else scn["name"] + per_results[key] = check_dscp_result( + scn, capture_result, expected_outer_dscp, sent_dscp) + return per_results + + +@pytest.fixture(scope="module", autouse=True) +def acl_dscp_module_hooks(request): + """Module setup/teardown for topology, routing, and VxLAN.""" + initialize_topology() + configure_routing() + configure_vxlan() + yield + unconfigure_vxlan() + unconfigure_routing() + + +# Test cases + +@pytest.mark.acl +def test_acl_dscp_rewrite_vxlan(): + """Positive: ACL rewrites outer DSCP to EXPECTED_DSCP for all 4 encap combos.""" + sent_dscp = 33 + + table_specs = [ + (TABLE_V4, "UNDERLAY_SET_DSCP", "DSCP rewrite v4-inner"), + (TABLE_V6, "UNDERLAY_SET_DSCPV6", "DSCP rewrite v6-inner"), + ] + + def rule_builder(scn): + return (scn["table"], scn["rule_name"], { + "PRIORITY": "9999", + "DSCP_ACTION": str(EXPECTED_DSCP), + scn["rule_field"]: "{}/{}".format(scn["dest"], scn["mask"]), + }) + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_scenario_results = run_dscp_scenarios_multi({sent_dscp: EXPECTED_DSCP}) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_scenario_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_scenario_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_no_rewrite_on_mismatch(): + """Negative: non-matching SRC_IP/SRC_IPV6 -- outer DSCP equals sent inner DSCP.""" + sent_dscp = 25 + + neg_cfg = { + "v4": { + "table": "ACL_DSCP_NEG_V4", + "src_field": "SRC_IP", + "src_value": "99.99.99.99/32", + "dst_field": "DST_IP", + }, + "v6": { + "table": "ACL_DSCP_NEG_V6", + "src_field": "SRC_IPV6", + "src_value": "9999::9999/128", + "dst_field": "DST_IPV6", + }, + } + + table_specs = [ + ("ACL_DSCP_NEG_V4", "UNDERLAY_SET_DSCP", "DSCP rewrite negative v4"), + ("ACL_DSCP_NEG_V6", "UNDERLAY_SET_DSCPV6", "DSCP rewrite negative v6"), + ] + + def rule_builder(scn): + cfg = neg_cfg[scn["inner"]] + return (cfg["table"], "RULE_NOMATCH_{}".format(scn["name"].upper()), { + "PRIORITY": "9999", + "DSCP_ACTION": str(EXPECTED_DSCP), + cfg["src_field"]: cfg["src_value"], + cfg["dst_field"]: "{}/{}".format(scn["dest"], scn["mask"]), + }) + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_scenario_results = run_dscp_scenarios_multi({sent_dscp: sent_dscp}) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_scenario_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_scenario_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_no_rewrite_partial_match(): + """Negative: DST matches but L4_SRC_PORT does not -- no DSCP rewrite.""" + sent_dscp = 27 + NOMATCH_L4_SRC_PORT = "9999" + + table_specs = [ + ("ACL_DSCP_PARTIAL_V4", "UNDERLAY_SET_DSCP", "DSCP rewrite partial v4"), + ("ACL_DSCP_PARTIAL_V6", "UNDERLAY_SET_DSCPV6", "DSCP rewrite partial v6"), + ] + + def rule_builder(scn): + tbl = "ACL_DSCP_PARTIAL_V4" if scn["inner"] == "v4" else "ACL_DSCP_PARTIAL_V6" + return (tbl, "RULE_PARTIAL_{}".format(scn["name"].upper()), { + "PRIORITY": "9999", + "DSCP_ACTION": str(EXPECTED_DSCP), + scn["rule_field"]: "{}/{}".format(scn["dest"], scn["mask"]), + "L4_SRC_PORT": NOMATCH_L4_SRC_PORT, + }) + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_scenario_results = run_dscp_scenarios_multi({sent_dscp: sent_dscp}) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_scenario_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_scenario_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_default_no_acl(): + """Default: no ACL -- outer DSCP copies inner DSCP.""" + sent_dscp = 33 + table_specs = [] + + def rule_builder(scn): + return None + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_scenario_results = run_dscp_scenarios_multi({sent_dscp: sent_dscp}) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_scenario_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_scenario_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_priority(): + """Highest-priority matching rule wins (DSCP=40 from priority 800).""" + sent_dscp = 33 + PRIORITY_DSCPS = [ + ("LOW", "100", 10), + ("MID", "500", 20), + ("HIGH", "800", EXPECTED_DSCP), + ] + + table_specs = [ + ("ACL_DSCP_PRIO_V4", "UNDERLAY_SET_DSCP", "DSCP rewrite priority v4"), + ("ACL_DSCP_PRIO_V6", "UNDERLAY_SET_DSCPV6", "DSCP rewrite priority v6"), + ] + + def rule_builder(scn): + tbl = "ACL_DSCP_PRIO_V4" if scn["inner"] == "v4" else "ACL_DSCP_PRIO_V6" + rules = [] + for tag, prio, dscp in PRIORITY_DSCPS: + rules.append((tbl, "RULE_PRIO_{}_{}".format(scn["name"].upper(), tag), { + "PRIORITY": prio, + "DSCP_ACTION": str(dscp), + scn["rule_field"]: "{}/{}".format(scn["dest"], scn["mask"]), + })) + return rules + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_scenario_results = run_dscp_scenarios_multi({sent_dscp: EXPECTED_DSCP}) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_scenario_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_scenario_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_match_on_inner_dscp(): + """Match on inner DSCP; priority resolves overlaps (DSCP=8 -> outer 48).""" + DSCP_RULES = [ + ("RULE1", "100", 8, 48), + ("RULE2", "200", 16, 46), + ("RULE3", "300", 24, 34), + ("RULE4", "400", 32, 26), + ("RULE5", "500", 40, 18), + ("RULE6", "50", 8, 63), + ] + expected_map = { + 8: 48, + 16: 46, + 24: 34, + 32: 26, + 40: 18, + 4: 4, + 56: 56, + } + + table_specs = [ + ("ACL_DSCP_MATCH_V4", "UNDERLAY_SET_DSCP", "DSCP match v4-inner"), + ("ACL_DSCP_MATCH_V6", "UNDERLAY_SET_DSCPV6", "DSCP match v6-inner"), + ] + + def rule_builder(scn): + tbl = "ACL_DSCP_MATCH_V4" if scn["inner"] == "v4" else "ACL_DSCP_MATCH_V6" + rules = [] + for rname, prio, dscp_in, dscp_out in DSCP_RULES: + rules.append((tbl, "{}_{}".format(rname, scn["name"].upper()), { + "PRIORITY": prio, + "DSCP": str(dscp_in), + "DSCP_ACTION": str(dscp_out), + scn["rule_field"]: "{}/{}".format(scn["dest"], scn["mask"]), + })) + return rules + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_results = run_dscp_scenarios_multi(expected_map) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_high_volume(): + """High-volume burst; sample captured frames for consistent DSCP rewrite.""" + sent_dscp = 33 + PKTS_PER_BURST = 50000 + RATE_PPS = 10000 + SAMPLE = 300 + + table_specs = [ + ("ACL_DSCP_BULK_V4", "UNDERLAY_SET_DSCP", "DSCP rewrite high volume v4"), + ("ACL_DSCP_BULK_V6", "UNDERLAY_SET_DSCPV6", "DSCP rewrite high volume v6"), + ] + + def rule_builder(scn): + tbl = "ACL_DSCP_BULK_V4" if scn["inner"] == "v4" else "ACL_DSCP_BULK_V6" + return (tbl, "RULE_BULK_{}".format(scn["name"].upper()), { + "PRIORITY": "9999", + "DSCP_ACTION": str(EXPECTED_DSCP), + scn["rule_field"]: "{}/{}".format(scn["dest"], scn["mask"]), + }) + + created_tables, created_rules = setup_acl(table_specs, rule_builder, data.ports) + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + st.report_fail("test_case_failed") + + per_scenario_results = {} + for scn in SCENARIOS: + st.log("Scenario {}: bulk send {} pkts at {} pps, sample {}".format( + scn["name"], PKTS_PER_BURST, RATE_PPS, SAMPLE)) + passed, checked, failed = capture_and_parse_traffic( + scn["name"], scn["inner"], + traffic_ip(scn["inner"], "ingress_src"), scn["dest"], sent_dscp, + mode="bulk", outer_family=IP_FAMILY[scn["outer"]], + pkts_per_burst=PKTS_PER_BURST, rate_pps=RATE_PPS, + bulk_sample=SAMPLE, expected_outer_dscp=EXPECTED_DSCP) + st.log("[{}] bulk result: passed={} checked={} failed={}".format( + scn["name"], passed, checked, failed)) + per_scenario_results[scn["name"]] = passed + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_scenario_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + cleanup_acl(created_tables, created_rules) + + if all(per_scenario_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") + + +@pytest.mark.acl +def test_acl_dscp_non_tunneled(): + """Non-tunneled v4/v6: no-match preserves DSCP; match rewrites without encap.""" + sent_dscp = 50 + + scenarios = [ + { + "name": "scn1_random_non_tunnel_no_match", + "v4_table": "ACL_NT1_V4", + "v6_table": "ACL_NT1_V6", + "v4_rule": "RULE_NT1_V4", + "v6_rule": "RULE_NT1_V6", + "v4_fields": {"DST_IP": "{}/32".format(DEST_V4_IN_V4)}, + "v6_fields": {"DST_IPV6": "{}/128".format(DEST_V6_IN_V4)}, + "expect_rewrite": False, + }, + { + "name": "scn2_match_no_encap_rewrite_fires", + "v4_table": "ACL_NT2_V4", + "v6_table": "ACL_NT2_V6", + "v4_rule": "RULE_NT2_V4", + "v6_rule": "RULE_NT2_V6", + "v4_fields": {"DST_IP": "{}/32".format(EGRESS_TG_IP)}, + "v6_fields": {"DST_IPV6": "{}/128".format(EGRESS_TG_IPV6)}, + "expect_rewrite": True, + }, + { + "name": "scn3_l4_dst_port_vxlan_no_match", + "v4_table": "ACL_NT3_V4", + "v6_table": "ACL_NT3_V6", + "v4_rule": "RULE_NT3_V4", + "v6_rule": "RULE_NT3_V6", + "v4_fields": {"L4_DST_PORT": str(VXLAN_PORT)}, + "v6_fields": {"L4_DST_PORT": str(VXLAN_PORT)}, + "expect_rewrite": False, + }, + ] + + per_results = {} + + for scn in scenarios: + st.log("===== {} =====".format(scn["name"])) + + fam_specs = [ + ("v4", scn["v4_table"], "UNDERLAY_SET_DSCP", scn["v4_rule"], scn["v4_fields"]), + ("v6", scn["v6_table"], "UNDERLAY_SET_DSCPV6", scn["v6_rule"], scn["v6_fields"]), + ] + + for _, tbl, ttype, rule, fields in fam_specs: + create_acl_table(tbl, ttype, scn["name"], data.ports) + full_fields = { + "PRIORITY": "9999", + "DSCP_ACTION": str(EXPECTED_DSCP), + } + full_fields.update(fields) + create_acl_rule(tbl, rule, full_fields) + + created_tables = [tbl for _, tbl, _, _, _ in fam_specs] + created_rules = [(tbl, rule) for _, tbl, _, rule, _ in fam_specs] + + if not verify_acl_setup_active(created_tables, created_rules): + cleanup_acl(created_tables, created_rules) + for fam, _, _, _, _ in fam_specs: + per_results["{}:{}".format(scn["name"], fam)] = False + continue + + for fam, tbl, _, rule, _ in fam_specs: + key = "{}:{}".format(scn["name"], fam) + st.log(" -- {} --".format(key)) + cap = capture_and_parse_traffic( + key, fam, + traffic_ip(fam, "ingress_src"), traffic_ip(fam, "egress_dst"), + sent_dscp, mode="plain", outer_family=IP_FAMILY[fam]) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a ({} {}) ----\n{}".format( + scn["name"], fam, aclshow_out)) + + expected_dscp = EXPECTED_DSCP if scn["expect_rewrite"] else sent_dscp + scn_pass = True + + if not cap["captured"]: + st.log("[{}] FAIL: no packet captured on egress".format(key)) + scn_pass = False + else: + if cap["is_vxlan"]: + st.log("[{}] FAIL: packet is VxLAN-encapsulated " + "(should be plain routed -- no VNET route for dst)".format(key)) + scn_pass = False + if cap["dscp"] != expected_dscp: + st.log("[{}] FAIL: DSCP expected={} (rewrite={}) got={}".format( + key, expected_dscp, scn["expect_rewrite"], cap["dscp"])) + scn_pass = False + if scn_pass: + st.log("[{}] PASS: dscp={} (expect_rewrite={})".format( + key, cap["dscp"], scn["expect_rewrite"])) + + per_results[key] = scn_pass + + cleanup_acl(created_tables, created_rules) + + st.log("PER-SCENARIO RESULTS:") + for name, passed in per_results.items(): + st.log(" {:12s}: {}".format(name, "PASS" if passed else "FAIL")) + st.config(data.dut, "sudo counterpoll acl enable || true") + try: + aclshow_out = st.show(data.dut, "sudo aclshow -a", skip_tmpl=True) + except Exception as exc: + aclshow_out = "".format(exc) + st.log("---- aclshow -a (post-traffic) ----\n{}".format(aclshow_out)) + + if all(per_results.values()): + st.report_pass("test_case_passed") + else: + st.report_fail("test_case_failed") diff --git a/sonic-mgmt/spytest/tests/cisco/ars/ars_acl.json b/sonic-mgmt/spytest/tests/cisco/ars/ars_acl.json new file mode 100644 index 00000000000..3c13b6788fc --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/ars_acl.json @@ -0,0 +1,15 @@ +{ + "ACL_RULE": { + "ARS_IPV4|RULE_1": { "ARS": "arsp", "PRIORITY": "9990", "DSCP": "57" }, + "NON_ARS_IPV4|RULE_1": { "PACKET_ACTION": "FORWARD", "PRIORITY": "9990", "DSCP": "58" }, + "ARS_IPV6|RULE_1": { "ARS": "arsp", "PRIORITY": "9990", "DSCP": "57" }, + "NON_ARS_IPV6|RULE_1": { "PACKET_ACTION": "FORWARD", "PRIORITY": "9990", "DSCP": "58" } + }, + "ACL_TABLE": { + "ARS_IPV4": { "type": "L3", "policy_desc": "ARS_IPV4", "ports": ["D3T1P1"], "stage": "INGRESS" }, + "NON_ARS_IPV4": { "type": "L3", "policy_desc": "NON_ARS_IPV4", "ports": ["D3T1P1"], "stage": "INGRESS" }, + "ARS_IPV6": { "type": "L3V6", "policy_desc": "ARS_IPV6", "ports": ["D3T1P1"], "stage": "INGRESS" }, + "NON_ARS_IPV6": { "type": "L3V6", "policy_desc": "NON_ARS_IPV6", "ports": ["D3T1P1"], "stage": "INGRESS" } + } +} + \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/ars_basic_cfg.yaml b/sonic-mgmt/spytest/tests/cisco/ars/ars_basic_cfg.yaml new file mode 100644 index 00000000000..d1530f66b22 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/ars_basic_cfg.yaml @@ -0,0 +1,269 @@ + +D1: + sonic: + config: | + sudo config interface ip add D1D2P1 1001:100:40::1/64 + sudo config interface ip add D1D2P2 1001:100:44::1/64 + sudo config interface ip add D1D2P3 1001:100:80::1/64 + sudo config interface ip add D1D2P4 1001:100:84::1/64 + sudo config interface ip add D1D2P5 1001:100:88::1/64 + sudo config interface ip add D1D2P7 1001:100:232::1/64 + sudo config interface ip add D1D2P8 1001:100:236::1/64 + sudo config interface ip add D1T1P1 2001:200:1::1/64 + + + sudo config interface ip add D1D2P1 100.100.40.1/24 + sudo config interface ip add D1D2P2 100.100.44.1/24 + sudo config interface ip add D1D2P3 100.100.80.1/24 + sudo config interface ip add D1D2P4 100.100.84.1/24 + sudo config interface ip add D1D2P5 100.100.88.1/24 + sudo config interface ip add D1D2P7 100.100.232.1/24 + sudo config interface ip add D1D2P8 100.100.236.1/24 + sudo config interface ip add D1T1P1 200.200.1.1/24 + deconfig: | + + sudo config interface ip rem D1D2P1 1001:100:40::1/64 + sudo config interface ip rem D1D2P2 1001:100:44::1/64 + sudo config interface ip rem D1D2P3 1001:100:80::1/64 + sudo config interface ip rem D1D2P4 1001:100:84::1/64 + sudo config interface ip rem D1D2P5 1001:100:88::1/64 + sudo config interface ip rem D1D2P7 1001:100:232::1/64 + sudo config interface ip rem D1D2P8 1001:100:236::1/64 + sudo config interface ip rem D1T1P1 2001:200:1::1/64 + + sudo config interface ip rem D1D2P1 100.100.40.1/24 + sudo config interface ip rem D1D2P2 100.100.44.1/24 + sudo config interface ip rem D1D2P3 100.100.80.1/24 + sudo config interface ip rem D1D2P4 100.100.84.1/24 + sudo config interface ip rem D1D2P5 100.100.88.1/24 + sudo config interface ip rem D1D2P7 100.100.232.1/24 + sudo config interface ip rem D1D2P8 100.100.236.1/24 + sudo config interface ip rem D1T1P1 200.200.1.1/24 + + sudo config interface startup D1D2P1 + bgp: + config: | + no router bgp + router bgp 65200 + bgp router-id 10.200.200.200 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + neighbor 100.100.40.2 remote-as 65201 + neighbor 100.100.44.2 remote-as 65201 + neighbor 100.100.80.2 remote-as 65201 + neighbor 100.100.84.2 remote-as 65201 + neighbor 100.100.88.2 remote-as 65201 + neighbor 100.100.232.2 remote-as 65201 + neighbor 100.100.236.2 remote-as 65201 + neighbor 200.200.1.2 remote-as 65205 + + neighbor 1001:100:40::2 remote-as 65201 + neighbor 1001:100:44::2 remote-as 65201 + neighbor 1001:100:80::2 remote-as 65201 + neighbor 1001:100:84::2 remote-as 65201 + neighbor 1001:100:88::2 remote-as 65201 + neighbor 1001:100:232::2 remote-as 65201 + neighbor 1001:100:236::2 remote-as 65201 + neighbor 2001:200:1::2 remote-as 65205 + + address-family ipv4 unicast + neighbor 100.100.40.2 activate + neighbor 100.100.44.2 activate + neighbor 100.100.80.2 activate + neighbor 100.100.84.2 activate + neighbor 100.100.88.2 activate + neighbor 100.100.232.2 activate + neighbor 100.100.236.2 activate + neighbor 200.200.1.2 activate + exit-address-family + + address-family ipv6 unicast + neighbor 1001:100:40::2 activate + neighbor 1001:100:40::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:40::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:44::2 activate + neighbor 1001:100:44::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:44::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:80::2 activate + neighbor 1001:100:80::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:80::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:84::2 activate + neighbor 1001:100:84::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:84::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:88::2 activate + neighbor 1001:100:88::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:88::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:232::2 activate + neighbor 1001:100:232::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:232::2 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:236::2 activate + neighbor 1001:100:236::2 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:236::2 route-map TO_BGP_PEER_V6 out + + neighbor 2001:200:1::2 activate + neighbor 2001:200:1::2 route-map FROM_BGP_PEER_V6 in + neighbor 2001:200:1::2 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + + end + exit + deconfig: | + no router bgp 65200 + end + exit + +D2: + sonic: + config: | + + sudo config interface ip add D2D1P1 100.100.40.2/24 + sudo config interface ip add D2D1P2 100.100.44.2/24 + sudo config interface ip add D2D1P3 100.100.80.2/24 + sudo config interface ip add D2D1P4 100.100.84.2/24 + sudo config interface ip add D2D1P5 100.100.88.2/24 + sudo config interface ip add D2D1P6 100.100.104.2/24 + sudo config interface ip add D2D1P7 100.100.232.2/24 + sudo config interface ip add D2D1P8 100.100.236.2/24 + sudo config interface ip add D2T1P1 200.100.1.1/24 + + sudo config interface ip add D2D1P1 1001:100:40::2/64 + sudo config interface ip add D2D1P2 1001:100:44::2/64 + sudo config interface ip add D2D1P3 1001:100:80::2/64 + sudo config interface ip add D2D1P4 1001:100:84::2/64 + sudo config interface ip add D2D1P5 1001:100:88::2/64 + sudo config interface ip add D2D1P6 1001:100:104::2/64 + sudo config interface ip add D2D1P7 1001:100:232::2/64 + sudo config interface ip add D2D1P8 1001:100:236::2/64 + sudo config interface ip add D2T1P1 2001:100:1::1/64 + deconfig: | + + sudo config interface ip rem D2D1P1 100.100.40.2/24 + sudo config interface ip rem D2D1P2 100.100.44.2/24 + sudo config interface ip rem D2D1P3 100.100.80.2/24 + sudo config interface ip rem D2D1P4 100.100.84.2/24 + sudo config interface ip rem D2D1P5 100.100.88.2/24 + sudo config interface ip rem D2D1P7 100.100.232.2/24 + sudo config interface ip rem D2D1P8 100.100.236.2/24 + sudo config interface ip rem D2T1P1 200.100.1.1/24 + + sudo config interface ip rem D2D1P1 1001:100:40::2/64 + sudo config interface ip rem D2D1P2 1001:100:44::2/64 + sudo config interface ip rem D2D1P3 1001:100:80::2/64 + sudo config interface ip rem D2D1P4 1001:100:84::2/64 + sudo config interface ip rem D2D1P5 1001:100:88::2/64 + sudo config interface ip rem D2D1P7 1001:100:232::2/64 + sudo config interface ip rem D2D1P8 1001:100:236::2/64 + sudo config interface ip rem D2T1P1 2001:100:1::1/64 + sudo config interface startup D2D1P1 + bgp: + config: | + no router bgp + router bgp 65201 + bgp router-id 10.200.200.201 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + + neighbor 100.100.40.1 remote-as 65200 + neighbor 100.100.44.1 remote-as 65200 + neighbor 100.100.80.1 remote-as 65200 + neighbor 100.100.84.1 remote-as 65200 + neighbor 100.100.88.1 remote-as 65200 + neighbor 100.100.232.1 remote-as 65200 + neighbor 100.100.236.1 remote-as 65200 + neighbor 200.100.1.2 remote-as 65206 + + neighbor 1001:100:40::1 remote-as 65200 + neighbor 1001:100:44::1 remote-as 65200 + neighbor 1001:100:80::1 remote-as 65200 + neighbor 1001:100:84::1 remote-as 65200 + neighbor 1001:100:88::1 remote-as 65200 + neighbor 1001:100:232::1 remote-as 65200 + neighbor 1001:100:236::1 remote-as 65200 + neighbor 2001:100:1::2 remote-as 65206 + + address-family ipv4 unicast + neighbor 100.100.40.1 activate + neighbor 100.100.44.1 activate + neighbor 100.100.80.1 activate + neighbor 100.100.84.1 activate + neighbor 100.100.88.1 activate + neighbor 100.100.104.1 activate + neighbor 100.100.232.1 activate + neighbor 100.100.236.1 activate + neighbor 200.100.1.2 activate + exit-address-family + + address-family ipv6 unicast + neighbor 1001:100:40::1 activate + neighbor 1001:100:40::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:40::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:44::1 activate + neighbor 1001:100:44::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:44::1 route-map TO_BGP_PEER_V6 out + + + neighbor 1001:100:80::1 activate + neighbor 1001:100:80::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:80::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:84::1 activate + neighbor 1001:100:84::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:84::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:88::1 activate + neighbor 1001:100:88::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:88::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:232::1 activate + neighbor 1001:100:232::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:232::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:236::1 activate + neighbor 1001:100:236::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:236::1 route-map TO_BGP_PEER_V6 out + + neighbor 2001:100:1::2 activate + neighbor 2001:100:1::2 route-map FROM_BGP_PEER_V6 in + neighbor 2001:100:1::2 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + + end + exit + deconfig: | + no router bgp 65201 + end + exit \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/ars_basic_cfg2.yaml b/sonic-mgmt/spytest/tests/cisco/ars/ars_basic_cfg2.yaml new file mode 100644 index 00000000000..7d4e201c343 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/ars_basic_cfg2.yaml @@ -0,0 +1,269 @@ + +D1: + sonic: + config: | + sudo config interface ip add D1D2P1 1001:100:40::1/127 + sudo config interface ip add D1D2P2 1001:100:44::1/127 + sudo config interface ip add D1D2P3 1001:100:80::1/127 + sudo config interface ip add D1D2P4 1001:100:84::1/127 + sudo config interface ip add D1D2P5 1001:100:88::1/127 + sudo config interface ip add D1D2P7 1001:100:232::1/127 + sudo config interface ip add D1D2P8 1001:100:236::1/127 + sudo config interface ip add D1T1P1 2001:200:1::1/64 + + sudo config interface ip add D1D2P1 100.100.40.1/31 + sudo config interface ip add D1D2P2 100.100.44.1/31 + sudo config interface ip add D1D2P3 100.100.80.1/31 + sudo config interface ip add D1D2P4 100.100.84.1/31 + sudo config interface ip add D1D2P5 100.100.88.1/31 + sudo config interface ip add D1D2P7 100.100.232.1/31 + sudo config interface ip add D1D2P8 100.100.236.1/31 + sudo config interface ip add D1T1P1 200.200.1.1/24 + deconfig: | + + sudo config interface ip remove D1D2P1 1001:100:40::1/127 + sudo config interface ip remove D1D2P2 1001:100:44::1/127 + sudo config interface ip remove D1D2P3 1001:100:80::1/127 + sudo config interface ip remove D1D2P4 1001:100:84::1/127 + sudo config interface ip remove D1D2P5 1001:100:88::1/127 + sudo config interface ip remove D1D2P7 1001:100:232::1/127 + sudo config interface ip remove D1D2P8 1001:100:236::1/127 + sudo config interface ip remove D1T1P1 2001:200:1::1/64 + + sudo config interface ip remove D1D2P1 100.100.40.1/31 + sudo config interface ip remove D1D2P2 100.100.44.1/31 + sudo config interface ip remove D1D2P3 100.100.80.1/31 + sudo config interface ip remove D1D2P4 100.100.84.1/31 + sudo config interface ip remove D1D2P5 100.100.88.1/31 + sudo config interface ip remove D1D2P7 100.100.232.1/31 + sudo config interface ip remove D1D2P8 100.100.236.1/31 + sudo config interface ip remove D1T1P1 200.200.1.1/24 + + sudo config interface startup D1D2P1 + bgp: + config: | + no router bgp + router bgp 65200 + bgp router-id 10.200.200.200 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + neighbor 100.100.40.0 remote-as 65201 + neighbor 100.100.44.0 remote-as 65201 + neighbor 100.100.80.0 remote-as 65201 + neighbor 100.100.84.0 remote-as 65201 + neighbor 100.100.88.0 remote-as 65201 + neighbor 100.100.232.0 remote-as 65201 + neighbor 100.100.236.0 remote-as 65201 + neighbor 200.200.1.2 remote-as 65205 + + neighbor 1001:100:40::0 remote-as 65201 + neighbor 1001:100:44::0 remote-as 65201 + neighbor 1001:100:80::0 remote-as 65201 + neighbor 1001:100:84::0 remote-as 65201 + neighbor 1001:100:88::0 remote-as 65201 + neighbor 1001:100:232::0 remote-as 65201 + neighbor 1001:100:236::0 remote-as 65201 + neighbor 2001:200:1::2 remote-as 65205 + + address-family ipv4 unicast + neighbor 100.100.40.0 activate + neighbor 100.100.44.0 activate + neighbor 100.100.80.0 activate + neighbor 100.100.84.0 activate + neighbor 100.100.88.0 activate + neighbor 100.100.232.0 activate + neighbor 100.100.236.0 activate + neighbor 200.200.1.2 activate + exit-address-family + + address-family ipv6 unicast + neighbor 1001:100:40::0 activate + neighbor 1001:100:40::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:40::0 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:44::0 activate + neighbor 1001:100:44::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:44::0 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:80::0 activate + neighbor 1001:100:80::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:80::0 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:84::0 activate + neighbor 1001:100:84::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:84::0 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:88::0 activate + neighbor 1001:100:88::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:88::0 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:232::0 activate + neighbor 1001:100:232::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:232::0 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:236::0 activate + neighbor 1001:100:236::0 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:236::0 route-map TO_BGP_PEER_V6 out + + neighbor 2001:200:1::2 activate + neighbor 2001:200:1::2 route-map FROM_BGP_PEER_V6 in + neighbor 2001:200:1::2 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + + end + exit + deconfig: | + no router bgp 65200 + end + exit + +D2: + sonic: + config: | + + sudo config interface ip add D2D1P1 100.100.40.0/31 + sudo config interface ip add D2D1P2 100.100.44.0/31 + sudo config interface ip add D2D1P3 100.100.80.0/31 + sudo config interface ip add D2D1P4 100.100.84.0/31 + sudo config interface ip add D2D1P5 100.100.88.0/31 + sudo config interface ip add D2D1P6 100.100.104.0/31 + sudo config interface ip add D2D1P7 100.100.232.0/31 + sudo config interface ip add D2D1P8 100.100.236.0/31 + sudo config interface ip add D2T1P1 200.100.1.1/24 + + sudo config interface ip add D2D1P1 1001:100:40::0/127 + sudo config interface ip add D2D1P2 1001:100:44::0/127 + sudo config interface ip add D2D1P3 1001:100:80::0/127 + sudo config interface ip add D2D1P4 1001:100:84::0/127 + sudo config interface ip add D2D1P5 1001:100:88::0/127 + sudo config interface ip add D2D1P6 1001:100:104::0/127 + sudo config interface ip add D2D1P7 1001:100:232::0/127 + sudo config interface ip add D2D1P8 1001:100:236::0/127 + sudo config interface ip add D2T1P1 2001:100:1::1/64 + deconfig: | + + sudo config interface ip remove D2D1P1 100.100.40.0/31 + sudo config interface ip remove D2D1P2 100.100.44.0/31 + sudo config interface ip remove D2D1P3 100.100.80.0/31 + sudo config interface ip remove D2D1P4 100.100.84.0/31 + sudo config interface ip remove D2D1P5 100.100.88.0/31 + sudo config interface ip remove D2D1P7 100.100.232.0/31 + sudo config interface ip remove D2D1P8 100.100.236.0/31 + sudo config interface ip remove D2T1P1 200.100.1.1/24 + + sudo config interface ip remove D2D1P1 1001:100:40::0/127 + sudo config interface ip remove D2D1P2 1001:100:44::0/127 + sudo config interface ip remove D2D1P3 1001:100:80::0/127 + sudo config interface ip remove D2D1P4 1001:100:84::0/127 + sudo config interface ip remove D2D1P5 1001:100:88::0/127 + sudo config interface ip remove D2D1P7 1001:100:232::0/127 + sudo config interface ip remove D2D1P8 1001:100:236::0/127 + sudo config interface ip remove D2T1P1 2001:100:1::1/64 + sudo config interface startup D2D1P1 + bgp: + config: | + no router bgp + router bgp 65201 + bgp router-id 10.200.200.201 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + no bgp network import-check + + + neighbor 100.100.40.1 remote-as 65200 + neighbor 100.100.44.1 remote-as 65200 + neighbor 100.100.80.1 remote-as 65200 + neighbor 100.100.84.1 remote-as 65200 + neighbor 100.100.88.1 remote-as 65200 + neighbor 100.100.232.1 remote-as 65200 + neighbor 100.100.236.1 remote-as 65200 + neighbor 200.100.1.2 remote-as 65206 + + neighbor 1001:100:40::1 remote-as 65200 + neighbor 1001:100:44::1 remote-as 65200 + neighbor 1001:100:80::1 remote-as 65200 + neighbor 1001:100:84::1 remote-as 65200 + neighbor 1001:100:88::1 remote-as 65200 + neighbor 1001:100:232::1 remote-as 65200 + neighbor 1001:100:236::1 remote-as 65200 + neighbor 2001:100:1::2 remote-as 65206 + + address-family ipv4 unicast + neighbor 100.100.40.1 activate + neighbor 100.100.44.1 activate + neighbor 100.100.80.1 activate + neighbor 100.100.84.1 activate + neighbor 100.100.88.1 activate + neighbor 100.100.104.1 activate + neighbor 100.100.232.1 activate + neighbor 100.100.236.1 activate + neighbor 200.100.1.2 activate + exit-address-family + + address-family ipv6 unicast + neighbor 1001:100:40::1 activate + neighbor 1001:100:40::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:40::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:44::1 activate + neighbor 1001:100:44::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:44::1 route-map TO_BGP_PEER_V6 out + + + neighbor 1001:100:80::1 activate + neighbor 1001:100:80::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:80::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:84::1 activate + neighbor 1001:100:84::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:84::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:88::1 activate + neighbor 1001:100:88::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:88::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:232::1 activate + neighbor 1001:100:232::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:232::1 route-map TO_BGP_PEER_V6 out + + neighbor 1001:100:236::1 activate + neighbor 1001:100:236::1 route-map FROM_BGP_PEER_V6 in + neighbor 1001:100:236::1 route-map TO_BGP_PEER_V6 out + + neighbor 2001:100:1::2 activate + neighbor 2001:100:1::2 route-map FROM_BGP_PEER_V6 in + neighbor 2001:100:1::2 route-map TO_BGP_PEER_V6 out + exit-address-family + exit + + route-map FROM_BGP_PEER_V6 permit 1 + on-match next + set ipv6 next-hop prefer-global + exit + route-map FROM_BGP_PEER_V6 permit 100 + exit + route-map TO_BGP_PEER_V6 permit 100 + + end + exit + deconfig: | + no router bgp 65201 + end + exit + \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/ars_common_utils.py b/sonic-mgmt/spytest/tests/cisco/ars/ars_common_utils.py new file mode 100644 index 00000000000..d04e63d8048 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/ars_common_utils.py @@ -0,0 +1,120 @@ +import os +import yaml +import json +import re +import pytest +from spytest import st, tgapi + +def reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2): + tg1.tg_traffic_control(action='reset', port_handle=[tg_handle_1, tg_handle_2]) + tg2.tg_traffic_control(action='reset', port_handle=[tg_handle_1, tg_handle_2]) + + +def add_ars(dut, global_mode="true", mode="flowlet-quality", idle_time="N/A"): + cmd = "sudo -s config ars-profile add arsp --enable-all-packets {} --mode {}".format(global_mode, mode) + if mode == "flowlet-quality": + cmd += " --idle-time {}".format(idle_time) + st.config(dut,cmd) + res = st.show(dut, "show ars-profile") + expected_values = {"ars_profile_name": "arsp", "enable_all_packets": global_mode, "ars_mode": mode} + if mode == "flowlet-quality": + expected_values["ars_idle_time"] = idle_time + if not check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not SET Appropriately While Adding") + return + +def check_ars(ars, expected_values): + if len(ars) ==0 and len(expected_values)==0: + st.log("ARS Value Set Appropriately") + return True + actual_values = ars[0] + for key in expected_values: + if actual_values.get(key) != expected_values[key]: + st.log("Value mismatch for {}: expected {}, got {}".format(key, expected_values[key], actual_values.get(key))) + return False + st.log("ARS Value Set Appropriately") + return True + +def del_ars(dut): + st.config(dut, "sudo -s config ars-profile del arsp") + res = st.show(dut, "show ars-profile") + if not check_ars(res, expected_values = []): + st.report_fail("test_case_failed_msg", "ARS Value Not SET Appropriately While Deleting") + return + +def check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counters, intfrecord, margin = 0.25, packetlosstolerance = 0.001): + """ + Check if traffic is balanced across multiple interfaces. + """ + total_count = 0 + interface_counts = [] + stats_tg1 = tg1.tg_traffic_stats(port_handle=tg_handle_1, mode='aggregate') + stats_tg2 = tg2.tg_traffic_stats(port_handle=tg_handle_2, mode='aggregate') + tgen_source_port = int(stats_tg1[tg_handle_1]['aggregate']['tx']['total_pkts']) + tgen_recieve_port = int(stats_tg2[tg_handle_2]['aggregate']['rx']['total_pkts']) + st.banner("Total Outgoing traffic from Source Port "+str(tgen_source_port)) + st.banner("Total Incoming traffic from Dest Port" + str(tgen_recieve_port)) + for record in counters: + if record.get('iface') in intfrecord: + ok_value = int(record.get('tx_ok', '0').replace(',', '')) + total_count += ok_value + interface_counts.append(ok_value) + average_count = tgen_source_port/ len(intfrecord) + toleranceB = average_count * (1-margin) + toleranceA = average_count * (1+margin) + st.banner("Average Count per Interface: " + str(average_count)) + for pkt_count in interface_counts: + if not (toleranceB <= pkt_count <= toleranceA): + st.banner("Traffic is not evenly Distributed Across Interface " + str(pkt_count) + " is not within the tolerance range [" + str(toleranceB) + ", " + str(toleranceA) + "]") + return False + return int(tgen_source_port) <= int(tgen_recieve_port)*(1+packetlosstolerance) + +def check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counters, intfrecord, tolerance = 0.001, packetlosstolerance = 0.001): + """ + Check if traffic is sent through a single interface. + """ + tx_ok_count = 0 + stats_tg1 = tg1.tg_traffic_stats(port_handle=tg_handle_1, mode='aggregate') + stats_tg2 = tg2.tg_traffic_stats(port_handle=tg_handle_2, mode='aggregate') + tgen_source_port = int(stats_tg1[tg_handle_1]['aggregate']['tx']['total_pkts']) + tgen_recieve_port = int(stats_tg2[tg_handle_2]['aggregate']['rx']['total_pkts']) + st.banner("Total Outgoing traffic from Source Port "+ str(tgen_source_port)) + st.banner("Totoal Incoming traffic from Dest Port " + str(tgen_recieve_port)) + for record in counters: + if record.get('iface') in intfrecord: + tx_ok_value = int(record.get('tx_ok', '0').replace(',', '')) + if tx_ok_value >=int(tgen_source_port)*(1-tolerance) : # check if there is single interface carrying 99% of the traffic tolerance 0.01 in case few packet travel through different interface + tx_ok_count += 1 + return tx_ok_count == 1 and int(tgen_source_port) <= int(tgen_recieve_port)*(1+packetlosstolerance) # Makes Sure the sending packets from source Always less than recieved packet at Destination Making sure No packet loss + +def run_traffic(stream,tg_handle_1, tg1, data_glob): + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.wait(5) + # st.config(data_glob.dut1,"sudo -s show platform npu ars info -s 1") + # st.config(data_glob.dut1,"sudo -s show platform npu ars flows -s 1") + st.wait(5) + tg1.tg_traffic_control(action='stop', handle=stream) + + +def add_nhg_equal_to_ecmp(data_glob, vars): + st.config(data_glob.dut1, "sudo -s config ars-portlist add non_global_port_list --ars-profile-name arsp") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P1 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P2 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P3 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P4 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P7 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P8 +" --ars-portlist non_global_port_list") + st.config(data_glob.dut1, "sudo -s show ars-portlist-member") + +def del_nhg_equal_to_ecmp(data_glob, vars): + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P1) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P2) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P3) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P4) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P7) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P8) + st.config(data_glob.dut1, "sudo -s show ars-portlist-member") + st.config(data_glob.dut1, "sudo -s config ars-portlist delete non_global_port_list") + st.config(data_glob.dut1, "sudo -s show ars-portlist-member") \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/ars_l2vni_cfg.yaml b/sonic-mgmt/spytest/tests/cisco/ars/ars_l2vni_cfg.yaml new file mode 100644 index 00000000000..c26fd8f12ca --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/ars_l2vni_cfg.yaml @@ -0,0 +1,247 @@ +spine0: + sonic: + config: | + sudo counterpoll tunnel enable + sudo config interface startup D1D3P1 + sudo config interface startup D1D3P2 + sudo config interface startup D1D4P1 + sudo config interface startup D1D4P2 + sudo config interface ipv6 enable use-link-local-only D1D3P1 + sudo config interface ipv6 enable use-link-local-only D1D3P2 + sudo config interface ipv6 enable use-link-local-only D1D4P1 + sudo config interface ipv6 enable use-link-local-only D1D4P2 + deconfig: | + sudo config interface ipv6 disable use-link-local-only D1D3P1 + sudo config interface ipv6 disable use-link-local-only D1D3P2 + sudo config interface ipv6 disable use-link-local-only D1D4P1 + sudo config interface ipv6 disable use-link-local-only D1D4P2 + sudo counterpoll tunnel disable + + bgp: + config: | + no router bgp + router bgp 65202 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor D1D3P1 interface peer-group TRANSIT + neighbor D1D3P2 interface peer-group TRANSIT + neighbor D1D4P1 interface peer-group TRANSIT + neighbor D1D4P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + end + exit + deconfig: | + no router bgp 65202 + end + exit + +spine1: + sonic: + config: | + sudo counterpoll tunnel enable + sudo config interface startup D2D3P1 + sudo config interface startup D2D3P2 + sudo config interface startup D2D4P1 + sudo config interface startup D2D4P2 + sudo config interface ipv6 enable use-link-local-only D2D3P1 + sudo config interface ipv6 enable use-link-local-only D2D3P2 + sudo config interface ipv6 enable use-link-local-only D2D4P1 + sudo config interface ipv6 enable use-link-local-only D2D4P2 + deconfig: | + sudo config interface ipv6 disable use-link-local-only D2D3P1 + sudo config interface ipv6 disable use-link-local-only D2D3P2 + sudo config interface ipv6 disable use-link-local-only D2D4P1 + sudo config interface ipv6 disable use-link-local-only D2D4P2 + sudo counterpoll tunnel disable + + bgp: + config: | + no router bgp + router bgp 65203 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor D2D3P1 interface peer-group TRANSIT + neighbor D2D3P2 interface peer-group TRANSIT + neighbor D2D4P1 interface peer-group TRANSIT + neighbor D2D4P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + end + exit + deconfig: | + no router bgp 65203 + end + exit + +leaf0: + sonic: + config: | + sudo config interface startup D3D1P1 + sudo config interface startup D3D1P2 + sudo config interface startup D3D2P1 + sudo config interface startup D3D2P2 + sudo config interface startup D3T1P1 + sudo config interface ipv6 enable use-link-local-only D3D1P1 + sudo config interface ipv6 enable use-link-local-only D3D1P2 + sudo config interface ipv6 enable use-link-local-only D3D2P1 + sudo config interface ipv6 enable use-link-local-only D3D2P2 + sudo config interface ip add Loopback27 2001:db8:1::3/128 + sudo config vlan add 100 + sudo config interface ipv6 disable use-link-local-only D3T1P1 + sudo config vlan member add -u 100 D3T1P1 + sudo config vxlan add Vtep 2001:db8:1::3 + sudo config vxlan evpn_nvo add NVO Vtep + sudo config vxlan map add Vtep 100 2727 + sudo counterpoll tunnel enable + sudo counterpoll tunnel interval 2000 + deconfig: | + sudo config vxlan map del Vtep 100 2727 + sudo config vxlan evpn_nvo del NVO + sudo config vxlan del Vtep + sudo config vlan member del 100 D3T1P1 + sudo config vlan del 100 + sudo config interface ip remove Loopback27 2001:db8:1::3/128 + sudo config interface ipv6 disable use-link-local-only D3D1P1 + sudo config interface ipv6 disable use-link-local-only D3D1P2 + sudo config interface ipv6 disable use-link-local-only D3D2P1 + sudo config interface ipv6 disable use-link-local-only D3D2P2 + + bgp: + config: | + no router bgp + router bgp 65200 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor OVERLAY peer-group + neighbor OVERLAY remote-as external + neighbor OVERLAY disable-connected-check + neighbor OVERLAY ebgp-multihop 255 + neighbor OVERLAY update-source Loopback27 + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor 2001:db8:1::1 peer-group OVERLAY + neighbor D3D1P1 interface peer-group TRANSIT + neighbor D3D1P2 interface peer-group TRANSIT + neighbor D3D2P1 interface peer-group TRANSIT + neighbor D3D2P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family l2vpn evpn + neighbor OVERLAY activate + advertise-all-vni + advertise ipv4 unicast + exit-address-family + end + exit + deconfig: | + no router bgp 65200 + end + exit + + +leaf1: + sonic: + config: | + sudo config interface startup D4D1P1 + sudo config interface startup D4D1P2 + sudo config interface startup D4D2P1 + sudo config interface startup D4D2P2 + sudo config interface startup D4T1P1 + sudo config interface ipv6 enable use-link-local-only D4D1P1 + sudo config interface ipv6 enable use-link-local-only D4D1P2 + sudo config interface ipv6 enable use-link-local-only D4D2P1 + sudo config interface ipv6 enable use-link-local-only D4D2P2 + sudo config interface ip add Loopback27 2001:db8:1::1/128 + sudo config vlan add 100 + sudo config interface ipv6 disable use-link-local-only D4T1P1 + sudo config vlan member add -u 100 D4T1P1 + sudo config vxlan add Vtep 2001:db8:1::1 + sudo config vxlan evpn_nvo add NVO Vtep + sudo config vxlan map add Vtep 100 2727 + sudo counterpoll tunnel enable + sudo counterpoll tunnel interval 2000 + deconfig: | + sudo config vxlan map del Vtep 100 2727 + sudo config vxlan evpn_nvo del NVO + sudo config vxlan del Vtep + sudo config vlan member del 100 D4T1P1 + sudo config vlan del 100 + sudo config interface ip remove Loopback27 2001:db8:1::1/128 + sudo config interface ipv6 disable use-link-local-only D4D1P1 + sudo config interface ipv6 disable use-link-local-only D4D1P2 + sudo config interface ipv6 disable use-link-local-only D4D2P1 + sudo config interface ipv6 disable use-link-local-only D4D2P2 + + bgp: + config: | + no router bgp + router bgp 65201 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor OVERLAY peer-group + neighbor OVERLAY remote-as external + neighbor OVERLAY disable-connected-check + neighbor OVERLAY ebgp-multihop 255 + neighbor OVERLAY update-source Loopback27 + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor 2001:db8:1::3 peer-group OVERLAY + neighbor D4D1P1 interface peer-group TRANSIT + neighbor D4D1P2 interface peer-group TRANSIT + neighbor D4D2P1 interface peer-group TRANSIT + neighbor D4D2P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family l2vpn evpn + neighbor OVERLAY activate + advertise-all-vni + advertise ipv4 unicast + exit-address-family + end + exit + deconfig: | + no router bgp 65201 + end + exit + diff --git a/sonic-mgmt/spytest/tests/cisco/ars/ars_l3vni_cfg.yaml b/sonic-mgmt/spytest/tests/cisco/ars/ars_l3vni_cfg.yaml new file mode 100644 index 00000000000..cb179df369b --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/ars_l3vni_cfg.yaml @@ -0,0 +1,330 @@ +spine0: + sonic: + config: | + sudo counterpoll tunnel enable + sudo config interface startup D1D3P1 + sudo config interface startup D1D3P2 + sudo config interface startup D1D4P1 + sudo config interface startup D1D4P2 + sudo config interface ipv6 enable use-link-local-only D1D3P1 + sudo config interface ipv6 enable use-link-local-only D1D3P2 + sudo config interface ipv6 enable use-link-local-only D1D4P1 + sudo config interface ipv6 enable use-link-local-only D1D4P2 + deconfig: | + sudo config interface ipv6 disable use-link-local-only D1D3P1 + sudo config interface ipv6 disable use-link-local-only D1D3P2 + sudo config interface ipv6 disable use-link-local-only D1D4P1 + sudo config interface ipv6 disable use-link-local-only D1D4P2 + sudo counterpoll tunnel disable + + bgp: + config: | + no router bgp + router bgp 65202 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor D1D3P1 interface peer-group TRANSIT + neighbor D1D3P2 interface peer-group TRANSIT + neighbor D1D4P1 interface peer-group TRANSIT + neighbor D1D4P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + end + exit + deconfig: | + no router bgp 65202 + end + exit + +spine1: + sonic: + config: | + sudo counterpoll tunnel enable + sudo config interface startup D2D3P1 + sudo config interface startup D2D3P2 + sudo config interface startup D2D4P1 + sudo config interface startup D2D4P2 + sudo config interface ipv6 enable use-link-local-only D2D3P1 + sudo config interface ipv6 enable use-link-local-only D2D3P2 + sudo config interface ipv6 enable use-link-local-only D2D4P1 + sudo config interface ipv6 enable use-link-local-only D2D4P2 + deconfig: | + sudo config interface ipv6 disable use-link-local-only D2D3P1 + sudo config interface ipv6 disable use-link-local-only D2D3P2 + sudo config interface ipv6 disable use-link-local-only D2D4P1 + sudo config interface ipv6 disable use-link-local-only D2D4P2 + sudo counterpoll tunnel disable + + bgp: + config: | + no router bgp + router bgp 65203 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor D2D3P1 interface peer-group TRANSIT + neighbor D2D3P2 interface peer-group TRANSIT + neighbor D2D4P1 interface peer-group TRANSIT + neighbor D2D4P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + end + exit + deconfig: | + no router bgp 65203 + end + exit + +leaf0: + sonic: + config: | + sudo config interface startup D3D1P1 + sudo config interface startup D3D1P2 + sudo config interface startup D3D2P1 + sudo config interface startup D3D2P2 + sudo config interface startup D3T1P1 + sudo config interface ipv6 enable use-link-local-only D3D1P1 + sudo config interface ipv6 enable use-link-local-only D3D1P2 + sudo config interface ipv6 enable use-link-local-only D3D2P1 + sudo config interface ipv6 enable use-link-local-only D3D2P2 + sudo config interface ip add Loopback27 2001:db8:1::3/128 + sudo config vxlan add Vtep 2001:db8:1::3 + sudo config vlan add 2 + sudo config interface ipv6 disable use-link-local-only D3T1P1 + sudo config vlan member add -u 2 D3T1P1 + sudo config vlan add 3 + sudo config vxlan evpn_nvo add NVO Vtep + sudo config vxlan map add Vtep 2 5002 + sudo config vxlan map add Vtep 3 5003 + sudo config vrf add Vrf01 + sudo config interface vrf bind Vlan2 Vrf01 + sudo config interface vrf bind Vlan3 Vrf01 + sudo config vlan add 100 + sudo config interface vrf bind Vlan100 Vrf01 + sudo config vxlan map add Vtep 100 1000 + sudo config vrf add_vrf_vni_map Vrf01 1000 + sudo config interface ip add Vlan2 100.100.100.254/24 + sudo config interface ip add Vlan3 100.100.101.253/24 + sudo config interface ip add Vlan2 100:100:100::254/64 + sudo config interface ip add Vlan3 100:100:101::253/64 + sudo counterpoll tunnel enable + sudo counterpoll tunnel interval 2000 + deconfig: | + sudo config interface ip rem Vlan2 100.100.100.254/24 + sudo config interface ip rem Vlan3 100.100.101.253/24 + sudo config interface ip rem Vlan2 100:100:100::254/64 + sudo config interface ip rem Vlan3 100:100:101::253/64 + sudo config vrf del_vrf_vni_map Vrf01 + sudo config vxlan map del Vtep 100 1000 + sudo config interface vrf unbind Vlan100 + sudo config vlan del 100 + sudo config interface vrf unbind Vlan2 + sudo config interface vrf unbind Vlan3 + sudo config vrf del Vrf01 + sudo config vxlan map del Vtep 2 5002 + sudo config vxlan map del Vtep 3 5003 + sudo config vxlan evpn_nvo del NVO + sudo config vxlan del Vtep + sudo config vlan member del 2 D3T1P1 + sudo config vlan del 2 + sudo config vlan del 3 + sudo config interface ip remove Loopback27 2001:db8:1::3/128 + sudo config interface ipv6 disable use-link-local-only D3D1P1 + sudo config interface ipv6 disable use-link-local-only D3D1P2 + sudo config interface ipv6 disable use-link-local-only D3D2P1 + sudo config interface ipv6 disable use-link-local-only D3D2P2 + + bgp: + config: | + no router bgp + router bgp 65200 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor OVERLAY peer-group + neighbor OVERLAY remote-as external + neighbor OVERLAY disable-connected-check + neighbor OVERLAY ebgp-multihop 255 + neighbor OVERLAY update-source Loopback27 + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor 2001:db8:1::1 peer-group OVERLAY + neighbor D3D1P1 interface peer-group TRANSIT + neighbor D3D1P2 interface peer-group TRANSIT + neighbor D3D2P1 interface peer-group TRANSIT + neighbor D3D2P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family l2vpn evpn + neighbor OVERLAY activate + advertise-all-vni + advertise ipv4 unicast + exit-address-family + exit + vrf Vrf01 + vni 1000 + exit + router bgp 65200 vrf Vrf01 + address-family ipv4 unicast + redistribute connected + exit-address-family + address-family ipv6 unicast + redistribute connected + exit-address-family + address-family l2vpn evpn + advertise ipv4 unicast + exit-address-family + end + exit + deconfig: | + no router bgp 65200 vrf Vrf01 + no router bgp 65200 + end + exit + + +leaf1: + sonic: + config: | + sudo config interface startup D4D1P1 + sudo config interface startup D4D1P2 + sudo config interface startup D4D2P1 + sudo config interface startup D4D2P2 + sudo config interface startup D4T1P1 + sudo config interface ipv6 enable use-link-local-only D4D1P1 + sudo config interface ipv6 enable use-link-local-only D4D1P2 + sudo config interface ipv6 enable use-link-local-only D4D2P1 + sudo config interface ipv6 enable use-link-local-only D4D2P2 + sudo config interface ip add Loopback27 2001:db8:1::1/128 + sudo config vlan add 2 + sudo config vlan add 3 + sudo config interface ipv6 disable use-link-local-only D4T1P1 + sudo config vlan member add -u 3 D4T1P1 + sudo config vxlan add Vtep 2001:db8:1::1 + sudo config vxlan evpn_nvo add NVO Vtep + sudo config vxlan map add Vtep 2 5002 + sudo config vxlan map add Vtep 3 5003 + sudo config vrf add Vrf01 + sudo config interface vrf bind Vlan2 Vrf01 + sudo config interface vrf bind Vlan3 Vrf01 + sudo config vlan add 100 + sudo config interface vrf bind Vlan100 Vrf01 + sudo config vxlan map add Vtep 100 1000 + sudo config vrf add_vrf_vni_map Vrf01 1000 + sudo config interface ip add Vlan2 100.100.100.253/24 + sudo config interface ip add Vlan3 100.100.101.254/24 + sudo config interface ip add Vlan2 100:100:100::253/64 + sudo config interface ip add Vlan3 100:100:101::254/64 + sudo counterpoll tunnel enable + sudo counterpoll tunnel interval 2000 + deconfig: | + sudo config interface ip rem Vlan2 100.100.100.253/24 + sudo config interface ip rem Vlan3 100.100.101.254/24 + sudo config interface ip rem Vlan2 100:100:100::253/64 + sudo config interface ip rem Vlan3 100:100:101::254/64 + sudo config vrf del_vrf_vni_map Vrf01 + sudo config vxlan map del Vtep 100 1000 + sudo config interface vrf unbind Vlan100 + sudo config vlan del 100 + sudo config interface vrf unbind Vlan2 + sudo config interface vrf unbind Vlan3 + sudo config vrf del Vrf01 + sudo config vxlan map del Vtep 2 5002 + sudo config vxlan map del Vtep 3 5003 + sudo config vxlan evpn_nvo del NVO + sudo config vxlan del Vtep + sudo config vlan member del 3 D4T1P1 + sudo config vlan del 2 + sudo config vlan del 3 + sudo config interface ip remove Loopback27 2001:db8:1::1/128 + sudo config interface ipv6 disable use-link-local-only D4D1P1 + sudo config interface ipv6 disable use-link-local-only D4D1P2 + sudo config interface ipv6 disable use-link-local-only D4D2P1 + sudo config interface ipv6 disable use-link-local-only D4D2P2 + + + bgp: + config: | + no router bgp + router bgp 65201 + no bgp ebgp-requires-policy + no bgp default ipv4-unicast + bgp disable-ebgp-connected-route-check + bgp bestpath as-path multipath-relax + neighbor OVERLAY peer-group + neighbor OVERLAY remote-as external + neighbor OVERLAY disable-connected-check + neighbor OVERLAY ebgp-multihop 255 + neighbor OVERLAY update-source Loopback27 + neighbor TRANSIT peer-group + neighbor TRANSIT remote-as external + neighbor TRANSIT ebgp-multihop 1 + neighbor 2001:db8:1::3 peer-group OVERLAY + neighbor D4D1P1 interface peer-group TRANSIT + neighbor D4D1P2 interface peer-group TRANSIT + neighbor D4D2P1 interface peer-group TRANSIT + neighbor D4D2P2 interface peer-group TRANSIT + address-family ipv4 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family ipv6 unicast + redistribute connected + neighbor TRANSIT activate + exit-address-family + address-family l2vpn evpn + neighbor OVERLAY activate + advertise-all-vni + advertise ipv4 unicast + exit-address-family + exit + vrf Vrf01 + vni 1000 + exit + router bgp 65201 vrf Vrf01 + address-family ipv4 unicast + redistribute connected + exit-address-family + address-family ipv6 unicast + redistribute connected + exit-address-family + address-family l2vpn evpn + advertise ipv4 unicast + exit-address-family + end + exit + deconfig: | + no router bgp 65201 vrf Vrf01 + no router bgp 65201 + end + exit + diff --git a/sonic-mgmt/spytest/tests/cisco/ars/common_utils.py b/sonic-mgmt/spytest/tests/cisco/ars/common_utils.py new file mode 100644 index 00000000000..72f345702d6 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/common_utils.py @@ -0,0 +1,283 @@ +import os +import yaml +import json +import re +import pytest +from spytest import st, tgapi + +def get_handles(): + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D3P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D4P1") + return (tg1, tg2, tg_ph_1, tg_ph_2) + +def modify_config_file(config_file,var_dict): + output_yaml_file = "temp_config.yaml" + input_yaml_file = config_file + dir_path = os.path.dirname(os.path.realpath(__file__))+"/" + result = os.system("cp {1} {0}{2}".format(dir_path,input_yaml_file,output_yaml_file)) + if result != 0: + st.report_fail('msg', "config file copy failed") + st.wait(2) + for item, value in var_dict.items(): + if re.match("(D.D.P.)|(D.T.P.)", item): + find_and_replace(dir_path+output_yaml_file, var_dict, item, value) + return dir_path+output_yaml_file + +def replace_string(obj, var_dict): + if isinstance(obj, str): + for item, value in var_dict.items(): + if re.match("(D.D.P.)|(D.T.P.)", item): + obj = obj.replace(item, value) + return obj + elif isinstance(obj, dict): + return {key: replace_string(value, var_dict) for key, value in obj.items()} + elif isinstance(obj, list): + return [replace_string(item, var_dict) for item in obj] + else: + return obj + +def find_and_replace(file_path, var_dict, target_string, replacement_string): + with open(file_path, 'r') as file: + data = yaml.safe_load(file) + # Iterate through the YAML data recursively + updated_data = replace_string(data, var_dict) + with open(file_path, 'w') as file: + yaml.dump(updated_data, file) + +def modify_json_file(json_file, var_dict): + """ + Takes a JSON file and replaces keywords from var_dict, returns the path to a new JSON file. + """ + output_json_file = "temp_config.json" + dir_path = os.path.dirname(os.path.realpath(__file__)) + "/" + input_json_file = json_file + result = os.system("cp {1} {0}{2}".format(dir_path, input_json_file, output_json_file)) + if result != 0: + st.report_fail('msg', "JSON file copy failed") + st.wait(2) + file_path = dir_path + output_json_file + with open(file_path, 'r') as file: + data = json.load(file) + + updated_data = replace_string(data, var_dict) + with open(file_path, 'w') as file: + json.dump(updated_data, file, indent=4) + return file_path + +def config_node(node, config, type=''): + if type: + st.config(node, config, type=type, skip_error_check=False, conf=True) + else: + st.config(node, config, skip_error_check=False, conf=True) + +def config_static(node, config_domain, add, config_file, device_type = 'sonic'): + + domain = '' + if config_domain == 'bgp': + domain = 'vtysh' + + with open(config_file) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + if add: + cmd = config_list[node][config_domain]['config'] + else: + cmd = config_list[node][config_domain]['deconfig'] + if device_type == 'linux': + cmd = ";".join(cmd.splitlines()) + config_node(node, cmd, domain) + +def remove_temp_config(updated_config_file): + os.system("rm {}".format(updated_config_file)) + +def reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2): + tg1.tg_traffic_control(action='reset', port_handle=[tg_handle_1, tg_handle_2]) + tg2.tg_traffic_control(action='reset', port_handle=[tg_handle_1, tg_handle_2]) + +def configure_tg_interfaces_v4(tg1, tg2, tg_handle_1, tg_handle_2, data1, data2): + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', intf_ip_addr=data1.t1d1_ip_addr, gateway=data1.t1d1_ip_gateway, src_mac_addr=data1.t1d1_mac_addr, arp_send_req='1', enable_ping_response=1) + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', intf_ip_addr=data2.t1d2_ip_addr, gateway=data2.t1d2_ip_gateway, src_mac_addr=data2.t1d2_mac_addr, arp_send_req='1', enable_ping_response=1) + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + return tg1_interface, tg2_interface + +def configure_tg_interfaces_v6(tg1, tg2, tg_handle_1, tg_handle_2, data1, data2): + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', ipv6_intf_addr=data1.t1d1_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data1.t1d1_ipv6_gateway, src_mac_addr=data1.t1d1_mac_addr, arp_send_req='1', enable_ping_response=1) + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', ipv6_intf_addr=data2.t1d2_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data2.t1d2_ipv6_gateway, src_mac_addr=data2.t1d2_mac_addr, arp_send_req='1', enable_ping_response=1) + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + return tg1_interface, tg2_interface + +def verify_ping_helper(tg, tg_handle, tg_interface, dest_ip): + ping_max_iteration=2 + for iter in range(ping_max_iteration): + res = tgapi.verify_ping(src_obj=tg, port_handle=tg_handle, dev_handle=tg_interface, dst_ip=dest_ip, ping_count='5', exp_count='5') + st.log("PING_RES: " + str(res)) + if res: + st.log("Ping succeeded.") + return + st.log('msg', "Ping Failed") + +def configure_traffic_streams_BUM(tg1, tg2, tg_handle_1, tg_handle_2, data1, data2): + st.banner("Configuring BUM Traffic Stream on TGEN port1 towards DUT1") + trBUM = {} + trBUM['unicast'] = tg1.tg_traffic_config(port_handle=tg_handle_1, mac_src = data1.t1d1_mac_addr, mac_dst=data2.t1d2_mac_addr, + mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', + tx_delay_unit='bytes', min_gap_bytes='12') + + trBUM['multicast'] = tg1.tg_traffic_config(port_handle=tg_handle_1, mac_src = data1.t1d1_mac_addr, mac_dst="01:00:5e:44:44:44", + mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', + tx_delay_unit='bytes', min_gap_bytes='12') + + trBUM['broadcast'] = tg1.tg_traffic_config(port_handle=tg_handle_1, mac_src = data1.t1d1_mac_addr, mac_dst="ff:ff:ff:ff:ff:ff", + mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', + tx_delay_unit='bytes', min_gap_bytes='12') + return trBUM + +def configure_traffic_streams(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface, tcircuit_endpoint_type): + st.banner("Configuring Traffic Stream on TGEN port1 towards DUT1") + trBurst = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=tg2_interface['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', + length_mode='fixed', transmit_mode='multi_burst', pkts_per_burst='999', inter_burst_gap="2000000", + inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', min_gap_bytes='12') + + trContinuous = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=tg2_interface['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', length_mode='fixed', + transmit_mode='continuous', rate_percent=10) + + traffic_args = {} + if tcircuit_endpoint_type == 'ipv4': + traffic_args = {'ip_dscp': 57} + else: + traffic_args = {'ipv6_traffic_class': 228} + + trDSCP1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=tg2_interface['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12', **traffic_args) + + if tcircuit_endpoint_type == 'ipv4': + traffic_args = {'ip_dscp': 58} + else: + traffic_args = {'ipv6_traffic_class': 232} + + trDSCP2 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=tg2_interface['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12', **traffic_args) + + return trBurst, trContinuous, trDSCP1, trDSCP2 + +def run_traffic(dut, tg1, tg_handle_1, stream): + st.config(dut, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.wait(10) + tg1.tg_traffic_control(action='stop', handle=stream) + +def tg_interface_cleanup(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface): + reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + #st.wait(100) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + #st.wait(100) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(100) + +def add_ars(dut, global_mode="true", mode="flowlet-quality", idle_time="N/A"): + cmd = "sudo -s config ars-profile add arsp --enable-all-packets {} --mode {}".format(global_mode, mode) + if mode == "flowlet-quality": + cmd += " --idle-time {}".format(idle_time) + st.config(dut,cmd) + res = st.show(dut, "show ars-profile") + expected_values = {"ars_profile_name": "arsp", "enable_all_packets": global_mode, "ars_mode": mode} + if mode == "flowlet-quality": + expected_values["ars_idle_time"] = idle_time + if not check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not SET Appropriately While Adding") + return + +def check_ars(ars, expected_values): + if len(ars) == 0 and len(expected_values) == 0: + st.log("ARS Value Set Appropriately") + return True + actual_values = ars[0] + for key in expected_values: + if actual_values.get(key) != expected_values[key]: + st.log("Value mismatch for {}: expected {}, got {}".format(key, expected_values[key], actual_values.get(key))) + return False + st.log("ARS Value Set Appropriately") + return True + +def del_ars(dut): + st.config(dut, "sudo -s config ars-profile del arsp") + res = st.show(dut, "show ars-profile") + if not check_ars(res, expected_values = []): + st.report_fail("test_case_failed_msg", "ARS Value Not SET Appropriately While Deleting") + return + +def check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counters, intfrecord, margin = 0.2, packetlosstolerance = 0.001): + """ + Check if traffic is balanced across multiple interfaces. + """ + total_count = 0 + interface_counts = [] + stats_tg1 = tg1.tg_traffic_stats(port_handle=tg_handle_1, mode='aggregate') + stats_tg2 = tg2.tg_traffic_stats(port_handle=tg_handle_2, mode='aggregate') + tgen_source_port = int(stats_tg1[tg_handle_1]['aggregate']['tx']['total_pkts']) + tgen_recieve_port = int(stats_tg2[tg_handle_2]['aggregate']['rx']['total_pkts']) + st.banner("Total Outgoing traffic from Source Port "+str(tgen_source_port)) + st.banner("Total Incoming traffic from Dest Port" + str(tgen_recieve_port)) + for record in counters: + if record.get('iface') in intfrecord: + ok_value = int(record.get('tx_ok', '0').replace(',', '')) + total_count += ok_value + interface_counts.append(ok_value) + average_count = tgen_source_port/ len(intfrecord) + toleranceB = average_count * (1-margin) + toleranceA = average_count * (1+margin) + st.banner("Average Count per Interface: " + str(average_count)) + for pkt_count in interface_counts: + if not (toleranceB <= pkt_count <= toleranceA): + st.banner("Traffic is not evenly Distributed Across Interface " + str(pkt_count) + " is not within the tolerance range [" + str(toleranceB) + ", " + str(toleranceA) + "]") + return False + return int(tgen_source_port) <= int(tgen_recieve_port)*(1+packetlosstolerance) + +def check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counters, intfrecord, tolerance = 0.001, packetlosstolerance = 0.001): + """ + Check if traffic is sent through a single interface. + """ + tx_ok_count = 0 + stats_tg1 = tg1.tg_traffic_stats(port_handle=tg_handle_1, mode='aggregate') + stats_tg2 = tg2.tg_traffic_stats(port_handle=tg_handle_2, mode='aggregate') + tgen_source_port = int(stats_tg1[tg_handle_1]['aggregate']['tx']['total_pkts']) + tgen_recieve_port = int(stats_tg2[tg_handle_2]['aggregate']['rx']['total_pkts']) + st.banner("Total Outgoing traffic from Source Port "+ str(tgen_source_port)) + st.banner("Totoal Incoming traffic from Dest Port " + str(tgen_recieve_port)) + for record in counters: + if record.get('iface') in intfrecord: + tx_ok_value = int(record.get('tx_ok', '0').replace(',', '')) + if tx_ok_value >=int(tgen_source_port)*(1-tolerance) : # check if there is single interface carrying 99% of the traffic tolerance 0.01 in case few packet travel through different interface + tx_ok_count += 1 + return tx_ok_count == 1 and int(tgen_source_port) <= int(tgen_recieve_port)*(1+packetlosstolerance) # Makes Sure the sending packets from source Always less than recieved packet at Destination Making sure No packet loss + +def create_acl_table_and_rule(dut, acl_json_file_path = None): + st.log("Creating ACL table") + with open(acl_json_file_path, 'r') as file: + acl_table_data = json.load(file) + print(acl_table_data) + acl_json_string = json.dumps(acl_table_data) + print(acl_json_string) + st.apply_json2(dut, acl_json_string) + +def delete_acl_table(dut): + st.log("Deleting ACL table") + command = "sudo config acl remove table ARS_IPV4" + st.config(dut, command) \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/test_acl_reload_reboot.py b/sonic-mgmt/spytest/tests/cisco/ars/test_acl_reload_reboot.py new file mode 100644 index 00000000000..fc373fb975c --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/test_acl_reload_reboot.py @@ -0,0 +1,493 @@ +import os +import yaml +import pytest +from spytest import st, tgapi, SpyTestDict +import tests.cisco.tortuga.common.tortuga_common_utils as common_obj +import json +import paramiko +from scp import SCPClient +from apis.system.reboot import config_save_reboot, config_save_reload +import ars_common_utils + +ACL_JSON_FILE = "ars_acl.json" +ACL_JSON_FILE_PATH = os.path.dirname(os.path.realpath(__file__)) + '/' + ACL_JSON_FILE + +# Tgen config +data = SpyTestDict() +data.t1d1_ipv6_addr = "2001:200:1::2" #source IPv6 +data.t1d1_ip_addr = "200.200.1.2" #source IPv4 +data.t1d1_mac_addr = "00:0A:03:00:11:01" #source Mac +data.t1d2_ipv6_addr = "2001:100:1::2" +data.t1d2_ip_addr = "200.100.1.2" +data.t1d2_mac_addr = "00:0A:04:00:12:01" +data.t1d1_ipv6_gateway = "2001:200:1::1" #source Gateway ipv6 +data.t1d2_ipv6_gateway = "2001:100:1::1" +data.t1d1_ip_gateway = "200.200.1.1" #source Gateway ipv4 +data.t1d2_ip_gateway = "200.100.1.1" +data.tgen1_asn = "65205" +data.tgen2_asn = "65206" +data.v6_mask="64" +f_size='1024' +t_mode='create' +t_l4_protocol="tcp" +t_tcp_src_port=1002 +t_high_speed_result_analysis='1' +# Tgen config + +IPv4_subnet_24_Ipv6_subnet_64_config = 'ars_basic_cfg.yaml' +@pytest.fixture(scope='module', autouse=True, params=[IPv4_subnet_24_Ipv6_subnet_64_config]) +def setup_teardown_basic(request): + global vars, updated_path, data_glob + global tg1, tg2, tg_handle_1, tg_handle_2 + global trC1, trB1, trB2, trB4, trB5, trB1M + config_file = request.param + initialize_globals(config_file) + set_frr_cfg_persistent() + st.config(data_glob.dut1, "sudo config reload -y") + st.wait(30) + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, True, updated_path) + yield 'setup_teardown_basic' + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, False, updated_path) + common_obj.remove_temp_config(updated_path) + +def initialize_globals(config_file): + global vars, data_glob, tg1, tg2, tg_handle_1, tg_handle_2, updated_path + vars = st.get_testbed_vars() + tg1, tg2, tg_handle_1, tg_handle_2 = get_handles() + data_glob = SpyTestDict() + data_glob.nodes = [vars.D1, vars.D2] + data_glob.dut1 = data_glob.nodes[0] + data_glob.dut2 = data_glob.nodes[1] + data_glob.interfaces = [vars.D1D2P1, vars.D1D2P2, vars.D1D2P3, vars.D1D2P4,vars.D1D2P5, vars.D1D2P7, vars.D1D2P8] + data.dut_asn_list = {data_glob.dut1: "65200", data_glob.dut2: "65201"} + dir_path = os.path.dirname(os.path.realpath(__file__)) + updated_path = common_obj.modify_config_file(f'{dir_path}/{config_file}', vars) + +def set_frr_cfg_persistent(): + cfgdb =ConfigDB("D1", "1.3.103.35", username="cisco", password= "cisco123") + cfgdb.set_leaf_value(['DEVICE_METADATA', 'localhost', 'docker_routing_config_mode'], + 'split-unified') + cfgdb.write_db() + +def configure_tg_interfaces_v6(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', ipv6_intf_addr=data.t1d1_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d1_ipv6_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', ipv6_intf_addr=data.t1d2_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d2_ipv6_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +def configure_tg_interfaces_v4(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', intf_ip_addr=data.t1d1_ip_addr, gateway=data.t1d1_ip_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', intf_ip_addr=data.t1d2_ip_addr, gateway=data.t1d2_ip_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +@pytest.fixture(scope = 'class') +def fixture_v6(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v6() + ping_dut_interface_from_tg(dst_ip1 ="2001:200:1::1", dst_ip2="2001:100:1::1") + configure_bgp_v6() + configure_traffic_streams('ipv6') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +@pytest.fixture(scope = 'class') +def fixture_v4(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v4() + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + configure_bgp_v4() + configure_traffic_streams('ipv4') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +def configure_bgp_v6(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ipv6_addr=data.t1d1_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + global bgp_rtr2 + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2],remote_ipv6_addr=data.t1d2_ipv6_gateway, ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + global bgp_route1, bgp_route2, bgp_route3 + # Destination Network group + bgp_route1 = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='2001:db8::20:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + +def configure_bgp_v4(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ip_addr=data.t1d1_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + global bgp_rtr2 + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ip_addr=data.t1d2_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + global bgp_route1, bgp_route2, bgp_route3 + # Destination Network group + bgp_route1 = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='20.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + +def configure_traffic_streams(tcircuit_endpoint_type): + st.banner("Configuring Traffic Stream on TGEN port1 towards DUT1") + global trDSCP1, trDSCP2, trB1, trDSCP3 + trB1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route1['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes',min_gap_bytes='12') + traffic_args = {} + if tcircuit_endpoint_type == 'ipv4': + traffic_args = {'ip_dscp': 57} + traffic_args2 = {'ip_dscp': 58} + st.banner("IN IPV4") + else: + traffic_args = {'ipv6_traffic_class': 228} + traffic_args2 = {'ipv6_traffic_class': 232} + st.banner("IN IPV6") + trDSCP1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle= bgp_route1['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12', **traffic_args) + trDSCP3 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle= bgp_route1['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12', **traffic_args2) + if tcircuit_endpoint_type == 'ipv4': + traffic_args = {'ip_dscp': 59} + else: + traffic_args = {'ipv6_traffic_class': 236} + trDSCP2 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle= bgp_route1['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode='create', high_speed_result_analysis='1', length_mode='fixed', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap="2000000", inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12', **traffic_args) + +def get_handles(): + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D1P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D2P1") + return (tg1, tg2, tg_ph_1, tg_ph_2) + +def ping_dut_interface_from_tg(dst_ip1 , dst_ip2): + res1 = tgapi.verify_ping(src_obj=tg1, port_handle=tg_handle_1, dev_handle=tg1_interface['handle'], + dst_ip=dst_ip1, ping_count='1', exp_count='1') + res2 = tgapi.verify_ping(src_obj=tg2, port_handle=tg_handle_2, dev_handle=tg2_interface['handle'], + dst_ip=dst_ip2, ping_count='1', exp_count='1') + if res1 and res2: + st.log("Ping succeeded.") + else: + st.warn("Ping failed.") + +def create_acl_table_and_rule(dut, acl_json_file_path = None): + st.log("Creating ACL table") + with open(acl_json_file_path, 'r') as file: + acl_table_data = json.load(file) + port_name = vars.D1T1P1 + for table in acl_table_data["ACL_TABLE"].values(): + table["ports"] = [port_name] + acl_json_string = json.dumps(acl_table_data) + st.apply_json2(dut, acl_json_string) + +def delete_acl_table(dut): + st.log("Deleting ACL table") + command1 = "sudo config acl remove table ARS_IPV4" + command2 = "sudo config acl remove table ARS_IPV6" + command3 = "sudo config acl remove table NON_ARS_IPV4" + command4 = "sudo config acl remove table NON_ARS_IPV6" + st.config(dut, command1) + st.config(dut, command2) + st.config(dut, command3) + st.config(dut, command4) + +def scp_download(local_path, remote_path, hostaddr, username, password, port=22): + try: + ssh_client = paramiko.SSHClient() + ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh_client.connect(hostaddr, port=port, username=username, password=password) + with SCPClient(ssh_client.get_transport()) as scp: + scp.get(remote_path, local_path=local_path) + finally: + ssh_client.close() + +def scp_upload(local_path, remote_path, hostaddr, username, password, port=22): + try: + ssh_client = paramiko.SSHClient() + ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh_client.connect(hostaddr, port=port, username=username, password=password) + with SCPClient(ssh_client.get_transport()) as scp: + scp.put(local_path, remote_path) + finally: + ssh_client.close() + +class ConfigDB(object): + def __init__(self, dut, address, username, password): + self._config_db = {} + self.dut = dut + self.address = address + self.username = username + self.password = password + self.temp_db = '__config_db_{}__.json'.format(self.dut) + self.local_temp_db_path = './' + self.temp_db + self.remote_temp_db_path = '/home/{}/'.format(self.username) + self.temp_db + self.remote_db_path = '/etc/sonic/config_db.json' + self.read_db() + + def read_db(self): + try: + scp_download(local_path=self.local_temp_db_path, + remote_path= self.remote_db_path, + hostaddr=self.address, + username=self.username, password=self.password) + with open(self.local_temp_db_path) as fd: + self._config_db = json.load(fd) + finally: + os.system('rm -rf {}'.format(self.local_temp_db_path)) + + + def write_db(self): + try: + db_data_json = json.dumps(self._config_db, indent=4, sort_keys=False) + with open(self.local_temp_db_path, 'w') as fd: + fd.write(db_data_json) + + scp_upload(local_path=self.local_temp_db_path, + remote_path=self.remote_temp_db_path, + hostaddr=self.address, + username=self.username, password=self.password) + st.show(self.dut, 'sudo cp {} {}'.format(self.remote_temp_db_path, + self.remote_db_path), skip_tmpl=True) + finally: + os.system('rm -rf {}'.format(self.local_temp_db_path)) + st.show(self.dut, 'sudo rm {}'.format(self.remote_temp_db_path), skip_tmpl=True) + + def _find_key_val_dict(self, keys): + if type(keys) is str: + keys = [keys] + if type(keys) is not list: + raise Exception('Keys not in list format') + ret_dict = self._config_db + for key in keys[:-1]: + ret_dict = ret_dict[key] + if type(ret_dict) is not dict: + raise Exception('Key is a leaf') + return ret_dict + + def get_leaf_value(self, keys): + try: + key_dict = self._find_key_val_dict(keys) + val = key_dict[keys[-1]] + except Exception as err: + raise Exception('Invalid key: {}'.format(err)) + + def set_leaf_value(self, keys, value): + try: + key_dict = self._find_key_val_dict(keys) + key = keys[-1] + val = str(value) + key_dict[key] = val + except Exception as err: + raise Exception('Invalid key: {}'.format(err)) + +@pytest.mark.usefixtures('fixture_v6') +class Test_IPV6_config_ars(): + def test_ACl(self): + st.banner("Verify traffic distribution for ARS Flowlet Quality with DSCP") + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + create_acl_table_and_rule(data_glob.dut1, ACL_JSON_FILE_PATH) + st.config(data_glob.dut1, "counterpoll acl enable") + st.banner("ACL Table") + st.show(data_glob.dut1, "sudo show acl table") + st.banner("ACL Rule") + st.show(data_glob.dut1, "sudo show acl rule") + stream = trDSCP1['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic load is not Distributed for DSCP Traffic with ACL rule") + st.banner("Test Passed: Traffic Load Distributed Evenly for DSCP Traffic with ACL rule with ARS") + stream = trDSCP2['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter2 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter2, data_glob.interfaces): + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not flow thorugh single interface for DSCP Traffic without ACL rule") + st.banner("Test Passed: Traffic passes through Single Interface for DSCP Traffic without ACL rule") + stream = trDSCP3['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter3 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter3, data_glob.interfaces): + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not flow thorugh single interface for DSCP Traffic with ACL rule without ARS") + st.banner("Test Passed: Traffic passes through Single Interface for DSCP Traffic with ACL rule without ARS") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_pass('test_case_passed') + +@pytest.mark.usefixtures('fixture_v4') +class Test_IPV4_config_ars(): + def test_ACl(self): + st.banner("Verify traffic distribution for ARS Flowlet Quality with DSCP") + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + create_acl_table_and_rule(data_glob.dut1, ACL_JSON_FILE_PATH) + st.config(data_glob.dut1, "counterpoll acl enable") + st.banner("ACL Table") + st.show(data_glob.dut1, "sudo show acl table") + st.banner("ACL Rule") + st.show(data_glob.dut1, "sudo show acl rule") + stream = trDSCP1['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic load is not Distributed for DSCP Traffic with ACL rule") + st.banner("Test Passed: Traffic Load Distributed Evenly for DSCP Traffic with ACL rule with ARS") + stream = trDSCP2['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter2 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter2, data_glob.interfaces): + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not flow thorugh single interface for DSCP Traffic without ACL rule") + st.banner("Test Passed: Traffic passes through Single Interface for DSCP Traffic without ACL rule") + stream = trDSCP3['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter3 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter3, data_glob.interfaces): + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not flow thorugh single interface for DSCP Traffic with ACL rule without ARS") + st.banner("Test Passed: Traffic passes through Single Interface for DSCP Traffic with ACL rule without ARS") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV4") + st.config(data_glob.dut1, "acl-loader delete ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV6") + st.config(data_glob.dut1, "acl-loader delete NON_ARS_IPV4") + delete_acl_table(data_glob.dut1) + ars_common_utils.del_ars(data_glob.dut1) + st.report_pass('test_case_passed') + + def test_reboot(self): + st.config(data_glob.dut1, "sudo -s config ars-profile add arsp --enable-all-packets true --mode flowlet-quality --idle-time 1000") + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + config_save_reboot(data_glob.dut1) + st.wait(100) + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + res = st.show(data_glob.dut1, "sudo show ars-profile") + expected_values = {'ars_profile_name': 'arsp', 'enable_all_packets': 'true', 'ars_mode': 'flowlet-quality', 'ars_idle_time': "1000" } + ars_common_utils.check_ars(res, expected_values) + stream1 = trB1['stream_id'] + ars_common_utils.run_traffic(stream1,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "traffic is not distributed ARS not enabled") + st.banner("Test Passed: Traffic Load Distributed Evenly ARS enabled") + ars_common_utils.del_ars(data_glob.dut1) + st.report_pass('test_case_passed') + + def test_reload(self): + st.config(data_glob.dut1, "sudo -s config ars-profile add arsp --enable-all-packets true --mode flowlet-quality --idle-time 1000") + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + config_save_reload(data_glob.dut1) + st.wait(100) + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + res = st.show(data_glob.dut1, "sudo show ars-profile") + expected_values = {'ars_profile_name': 'arsp', 'enable_all_packets': 'true', 'ars_mode': 'flowlet-quality', 'ars_idle_time': "1000" } + ars_common_utils.check_ars(res, expected_values) + stream1 = trB1['stream_id'] + ars_common_utils.run_traffic(stream1,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "traffic is not distributed ARS not enabled") + st.banner("Test Passed: Traffic Load Distributed Evenly ARS enabled") + ars_common_utils.del_ars(data_glob.dut1) + st.report_pass('test_case_passed') + \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/test_ars_basic_perpacket_flowlet.py b/sonic-mgmt/spytest/tests/cisco/ars/test_ars_basic_perpacket_flowlet.py new file mode 100644 index 00000000000..a8abd435a67 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/test_ars_basic_perpacket_flowlet.py @@ -0,0 +1,901 @@ +import os +import yaml +import pytest +from spytest import st, tgapi, SpyTestDict +import tests.cisco.tortuga.common.tortuga_common_utils as common_obj +import apis.system.interface as interface_obj +import ars_common_utils + +# Tgen config +data = SpyTestDict() +data.t1d1_ipv6_addr = "2001:200:1::2" #source IPv6 +data.t1d1_ip_addr = "200.200.1.2" #source IPv4 +data.t1d1_mac_addr = "00:0A:03:00:11:01" #source Mac +data.t1d2_ipv6_addr = "2001:100:1::2" +data.t1d2_ip_addr = "200.100.1.2" +data.t1d2_mac_addr = "00:0A:04:00:12:01" +data.t1d1_ipv6_gateway = "2001:200:1::1" #source Gateway ipv6 +data.t1d2_ipv6_gateway = "2001:100:1::1" +data.t1d1_ip_gateway = "200.200.1.1" #source Gateway ipv4 +data.t1d2_ip_gateway = "200.100.1.1" +data.tgen1_asn = "65205" +data.tgen2_asn = "65206" +data.v6_mask="64" +f_size='1024' +t_mode='create' +t_l4_protocol="tcp" +t_tcp_src_port=1002 +t_high_speed_result_analysis='1' +# Tgen config + +IPv4_subnet_24_Ipv6_subnet_64_config = 'ars_basic_cfg.yaml' +@pytest.fixture(scope='module', autouse=True, params=[IPv4_subnet_24_Ipv6_subnet_64_config]) +def setup_teardown_basic(request): + global vars, updated_path, data_glob + global tg1, tg2, tg_handle_1, tg_handle_2 + global trC1, trB1, trB2, trB4, trB5, trB1M + config_file = request.param + initialize_globals(config_file) + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, True, updated_path) + yield 'setup_teardown_basic' + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, config in config.items(): + common_obj.config_static(node, domain, False, updated_path) + common_obj.remove_temp_config(updated_path) + +def initialize_globals(config_file): + global vars, data_glob, tg1, tg2, tg_handle_1, tg_handle_2, updated_path + vars = st.get_testbed_vars() + tg1, tg2, tg_handle_1, tg_handle_2 = get_handles() + data_glob = SpyTestDict() + data_glob.nodes = [vars.D1, vars.D2] + data_glob.dut1 = data_glob.nodes[0] + data_glob.dut2 = data_glob.nodes[1] + data_glob.interfaces = [vars.D1D2P1, vars.D1D2P2, vars.D1D2P3, vars.D1D2P4, vars.D1D2P5, vars.D1D2P7, vars.D1D2P8] + data.dut_asn_list = {data_glob.dut1: "65200", data_glob.dut2: "65201"} + dir_path = os.path.dirname(os.path.realpath(__file__)) + updated_path = common_obj.modify_config_file(f'{dir_path}/{config_file}', vars) + +def configure_tg_interfaces_v6(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', ipv6_intf_addr=data.t1d1_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d1_ipv6_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', ipv6_intf_addr=data.t1d2_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d2_ipv6_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +def configure_tg_interfaces_v4(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', intf_ip_addr=data.t1d1_ip_addr, gateway=data.t1d1_ip_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', intf_ip_addr=data.t1d2_ip_addr, gateway=data.t1d2_ip_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +@pytest.fixture(scope = 'class') +def fixture_v6(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v6() + ping_dut_interface_from_tg(dst_ip1 ="2001:200:1::1", dst_ip2="2001:100:1::1") + configure_bgp_v6() + configure_traffic_streams('ipv6') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB2['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB4['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB5['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +@pytest.fixture(scope = 'class') +def fixture_v4(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v4() + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + configure_bgp_v4() + configure_traffic_streams('ipv4') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB2['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB4['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB5['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(30) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(30) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(30) + +def configure_bgp_v6(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ipv6_addr=data.t1d1_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ipv6_addr=data.t1d2_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='2001:db8::20:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='2001:db8:20:21::1' , ip_version='6',ipv6_prefix_length= '128' , route_ip_addr_step='::1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='2001:db8:10:11::1', ip_version='6', ipv6_prefix_length= '128' , route_ip_addr_step='::1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_bgp_v4(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ip_addr=data.t1d1_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ip_addr=data.t1d2_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='20.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='20.20.21.1', prefix_step='0.0.0.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='10.10.11.1', prefix_step = '0.0.0.1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_traffic_streams(tcircuit_endpoint_type): + st.banner("Configuring Traffic Stream on TGEN port1 towards DUT1") + global trB1, trB2, trB4, trB5, trC1, trB1M, trC1M + trB1, trB2, trB4, trB5 = None, None, None, None + traffic_map = { "trB1": "2000000", "trB2": "3000000", "trB4": "200000", "trB5": "400000"} + for key, param in traffic_map.items(): + result = tg1.tg_traffic_config( port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=bgp_route['handle'], + circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, high_speed_result_analysis=t_high_speed_result_analysis, + frame_size=f_size, transmit_mode='multi_burst', pkts_per_burst='999', inter_burst_gap=param, + inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', min_gap_bytes='12') + traffic_map[key] = result + trB1, trB2, trB4, trB5 = traffic_map["trB1"], traffic_map["trB2"], traffic_map["trB4"], traffic_map["trB5"] + trC1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + trB1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='20000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + trC1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + +def get_handles(): + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D1P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D2P1") + return (tg1, tg2, tg_ph_1, tg_ph_2) + +def ping_dut_interface_from_tg(dst_ip1 , dst_ip2): + res1 = tgapi.verify_ping(src_obj=tg1, port_handle=tg_handle_1, dev_handle=tg1_interface['handle'], + dst_ip=dst_ip1, ping_count='1', exp_count='1') + res2 = tgapi.verify_ping(src_obj=tg2, port_handle=tg_handle_2, dev_handle=tg2_interface['handle'], + dst_ip=dst_ip2, ping_count='1', exp_count='1') + if res1 and res2: + st.log("Ping succeeded.") + else: + st.warn("Ping failed.") + +def run_traffic_multiple_stream(stream, check_type='single'): + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + if check_type == 'single': + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + return False + else: + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + return False + return True + +def verify_single_interface_traffic(counter, intfrecord): + tx_ok_count = sum(1 for record in counter if record.get('iface') in intfrecord and int(record.get('tx_ok', '0').replace(',', '')) >= 1000) + if tx_ok_count != 1: + st.report_fail("test_case_failed_msg", "Traffic Load does not Pass through single interface on ARS Disable") + +def verify_traffic_distribution(counter, intfrecord, tolerance_factor=0.4): + total_count = 0 + interface_counts = [] + for record in counter: + if record.get('iface') in intfrecord: + ok_value = int(record.get('tx_ok', '0').replace(',', '')) + total_count += ok_value + interface_counts.append(ok_value) + if not interface_counts: + st.report_fail("test_case_failed_msg", "No traffic data available for the specified interfaces") + average_count = total_count / len(intfrecord) + toleranceB = average_count * (1 - tolerance_factor) # Lower bound + toleranceA = average_count * (1 + tolerance_factor) # Upper bound + for pkt_count in interface_counts: + if not (toleranceB <= pkt_count <= toleranceA): + st.report_fail("test_case_failed_msg", "Traffic Load does not Distributed Evenly with ARS Enable") + +@pytest.mark.usefixtures('fixture_v6') +class Test_IPV6_config_ars(): + def test_ars_then_nhg_flowlet_v6(self): + st.banner("Verify traffic distribution on NHG created after ARS config Flowlet: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1',prefix='2002:db8::15:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv6', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1,"sudo -s show interface counters ") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", " traffic load is not Distributed") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_singleflow_without_burst_flowlet_v6(self): + st.banner("Testing Single Flow Without Bursts Flowlet: Traffic Expected to flow thorugh single interface for Continuous Traffic") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","traffic pass through Multiple Interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_flowlet_v6(self): + st.banner("Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS) Flowlet") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + verify_single_interface_traffic(counter, data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter, data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_burst_time_lower_idle_timegap_flowlet_v6(self): + st.banner("TEST Burst time gap in IXIA set to values lower than the idle time gap Flowlet: Traffic Expected to Pass through Single interface for Burst Time Lower than idle Time gap") # idle time Gap 1 milisecond + test_failcount = 0 + streams = [trB4['stream_id'], trB5['stream_id']] # streams with burst time 200K 400K (0.2 Mili second , 0.4 Mili Second) + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For Burst Time Lower than idle Time Gap") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through Single interface for Burst Time Lower than idle Time gap") + else: + st.banner("Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + def test_burst_time_higher_idle_timegap_flowlet_v6(self): + st.banner("TestBurst time in IXIA set to values higher than the idle time gap Flowlet: Traffic Expected to Distribute for Burst TIme Higher than idle Time Gap") + test_failcount = 0 + streams = [trB1['stream_id'], trB2['stream_id']] + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream, 'balanced'): + test_failcount += 1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For idle time more than Burst gap") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for Burst Time Higher than idle Time Gap") + else: + st.banner("Test Passed: Traffic is Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_continuous_traffic_various_idle_timegap_flowlet_v6(self): + st.banner("Test Various idle Time GAP Single Continous Traffic Flow Flowlet: Traffic Expected to Pass through single interface for various time gap") + idleTimeGapArray = ["100", "800"] + stream = trC1["stream_id"] + test_failcount = 0 + for i in range(0, 2): + timegap =idleTimeGapArray[i] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time= timegap) + res = st.show(data_glob.dut1, "sudo show ars-profile") + expected_values = {'ars_profile_name': 'arsp', 'enable_all_packets': 'true', 'ars_mode': 'flowlet-quality', 'ars_idle_time': timegap } + if not ars_common_utils.check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not SET Appropriately While Adding") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: Various idle Time GAP Single Continous Traffic Flow") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through single interface for various time gap") + else: + st.banner("Test Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + + def test_multiple_flow_with_and_without_burst_flowlet_v6(self): + st.banner("Test Multiple Flow With and Without Burst Flowlet: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream1,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream2,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With and without Burst Flowlet mode") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_perpacket_v6(self): + st.banner("(Perpacket) Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS)") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + verify_single_interface_traffic(counter,data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter,data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_singleflow_continuous_perpacket_v6(self): + st.banner("(perpacket)Testing Single Flow Without Bursts : Traffic Expected to flow thorugh single interface for Continuous Traffic") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed traffic load is not Distributed") + st.report_fail("test_case_failed_msg","Traffic does not Distribute among interface when ARS Enable") + st.banner("Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_ars_then_nhg_perpacket_v6(self): + st.banner("(perpacket)Verify traffic distribution on NHG created after ARS config: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1',prefix='2001:db8::15:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv6', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_config(mode = 'disable', stream_id =trB7['stream_id']) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic does not pass thorugh single interface on Config ARS before Ixia Prefixes") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + + def test_multiple_flow_with_and_without_burst_perpacket_v6(self): + st.banner("(perpacket) Test Multiple Flow With and without Burst: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + # Multi Flow Burst Mode + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With and without Burst mode") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_flowlet_v6(self): + st.banner("IN TEST Bring Down One Interface Flowlet: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + interface_obj.interface_noshutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(20) + intfrecord =[vars.D1D2P2, vars.D1D2P3, vars.D1D2P4, vars.D1D2P5, vars.D1D2P7, vars.D1D2P8] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.wait(50) + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_perpacket_v6(self): + st.banner("IN TEST Bring Down One Interface Perpacket: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters ") + interface_obj.interface_noshutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(50) + intfrecord =[vars.D1D2P2, vars.D1D2P3, vars.D1D2P4, vars.D1D2P5, vars.D1D2P7, vars.D1D2P8] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + + +@pytest.mark.usefixtures('fixture_v4') +class Test_IPV4_config_ars(): + def test_ars_then_nhg_perpacket_v4(self): + st.banner("(perpacket) Verify traffic distribution on NHG created after ARS config Flowlet: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='19.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv4', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic does not pass thorugh single interface on Config ARS before Ixia Prefixes") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_ars_then_nhg_flowlet_v4(self): + st.banner("Verify traffic distribution on NHG created after ARS config Flowlet: Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + #Configure Ixia Prefix Next Hop Group + dest_G = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='18.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(5) + trB7 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], emulation_dst_handle=dest_G['handle'], + circuit_endpoint_type='ipv4', mode='create', l4_protocol="tcp", tcp_src_port=1002, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + stream = trB7['stream_id'] + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_config(mode = 'disable', stream_id =trB7['stream_id']) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface on Config ARS before Ixia Prefixes") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_singleflow_without_burst_flowlet_v4(self): + st.banner("Testing Single Flow Without Bursts Flowlet: Traffic Expected to flow thorugh single interface for Continuous Traffic") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface for Continuous Traffic") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_flowlet_v4(self): + st.banner("Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS) Flowlet") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + verify_single_interface_traffic(counter, data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + tg1.tg_traffic_control(action='stop', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter, data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_burst_time_lower_idle_timegap_flowlet_v4(self): + st.banner("TEST Burst time gap in IXIA set to values lower than the idle time gap Flowlet: Traffic Expected to Pass through Single interface for Burst Time Lower than idle Time gap") # idle time Gap 1 milisecond + test_failcount = 0 + streams = [trB4['stream_id'], trB5['stream_id']] # streams with burst time 200K 400K (0.2 Mili second , 0.4 Mili Second) + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For Burst Time Lower than idle Time Gap") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through Single interface for Burst Time Lower than idle Time gap") + else: + st.banner("Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + def test_burst_time_higher_idle_timegap_flowlet_v4(self): + st.banner("TestBurst time in IXIA set to values higher than the idle time gap Flowlet: Traffic Expected to Distribute for Burst TIme Higher than idle Time Gap") + test_failcount = 0 + streams = [trB1['stream_id'], trB2['stream_id']] + for stream in streams: + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + if not run_traffic_multiple_stream(stream, 'balanced'): + test_failcount += 1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: For idle time more than Burst gap") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for Burst TIme Higher than idle Time Gap") + else: + st.banner("Test Passed: Traffic is Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_multiple_flow_with_and_without_burst_flowlet_v4(self): + st.banner("Test Multiple Flow With and without Burst Flowlet: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + # Multi Flow Burst Mode + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With Burst mode") + st.report_pass('test_case_passed') + + def test_continuous_traffic_various_idle_timegap_flowlet_v4(self): + st.banner("Test Various idle Time GAP Single Continous Traffic Flow Flowlet: Traffic Expected to Pass through single interface for various time gap") + idleTimeGapArray = ["100", "800"] + stream = trC1["stream_id"] + test_failcount = 0 + for i in range(0, 2): + timegap =idleTimeGapArray[i] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time= timegap) + res = st.show(data_glob.dut1, "sudo show ars-profile") + expected_values = {'ars_profile_name': 'arsp', 'enable_all_packets': 'true', 'ars_mode': 'flowlet-quality', 'ars_idle_time': timegap } + if not ars_common_utils.check_ars(res, expected_values): + st.report_fail("test_case_failed_msg", "ARS Value Not SET Appropriately While Adding") + if not run_traffic_multiple_stream(stream): + test_failcount+=1 + ars_common_utils.del_ars(data_glob.dut1) + if test_failcount > 0: + st.banner("Test Failed: Various idle Time GAP Single Continous Traffic Flow") + st.report_fail("test_case_failed_msg", "Traffic does not Pass through single interface for various time gap") + else: + st.banner("Test Passed: Traffic Pass through single interface") + st.report_pass('test_case_passed') + + def test_ars_traffic_intransit_perpacket_v4(self): + st.banner("(Perpacket) Test Add and Remove when traffic is being sent through, making sure traffic no distributed (on removal) and distributed (on adding ARS)") + stream = trB1['stream_id'] + # Disabling ARS in Running traffic + st.banner("Disabling ARS in Running traffic") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + ars_common_utils.del_ars(data_glob.dut1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + verify_single_interface_traffic(counter, data_glob.interfaces) + # Adding ARS in Running traffic + st.banner("Adding ARS in Running traffic") + tg1.tg_traffic_control(action="clear_stats", port_handle=tg_handle_1) + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + tg1.tg_traffic_control(action='run', handle=stream) + st.banner("ARS Enable") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + st.wait(2) + tg1.tg_traffic_control(action='stop', handle=stream) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_ars(data_glob.dut1) + verify_traffic_distribution(counter, data_glob.interfaces) + st.banner("test ARS in traffic transit Passed") + st.report_pass('test_case_passed') + + def test_singleflow_continuous_perpacket_v4(self): + st.banner("(perpacket)Testing Single Flow Without Bursts : Traffic Expected to Distribute Across Interface") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Failed traffic load is not Distributed") + st.report_fail("test_case_failed_msg","Traffic does not Distribute among interface when ARS Enable") + st.banner("Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + + def test_multiple_flow_with_and_without_burst_perpacket_v4(self): + st.banner("(perpacket)Test Multiple Flow With Burst: Traffic Expected to Distribute for MultiFlow Burst traffic") + st.show(data_glob.dut1, "sudo show ars-profile") + stream1 = trB1M['stream_id'] + # Multi Flow Burst Mode + st.banner("Starting to RUN traffic Multi Flow Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + stream2 = trC1M['stream_id'] + st.banner("Starting to RUN traffic Multi Flow without Burst Mode") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow Burst Mode Traffic") + # Traffic should pass through ECMP after ARS disable + ars_common_utils.run_traffic(stream1, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + + ars_common_utils.run_traffic(stream2, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces, margin= 0.5): + st.banner("Test Failed: traffic load not distributed") + st.report_fail("test_case_failed_msg", "Traffic does not Distribute for MultiFlow after ARS Disable traffic") + st.banner("Test Passed: for Multi Flow With Burst mode") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_flowlet_v4(self): + st.banner("IN TEST Bring Down One Interface Flowlet: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="flowlet-quality", idle_time="1000") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + interface_obj.interface_noshutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(20) + intfrecord =[vars.D1D2P2, vars.D1D2P3, vars.D1D2P4, vars.D1D2P5, vars.D1D2P7, vars.D1D2P8] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.wait(50) + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + + def test_bring_down_one_nhop_member_perpacket_v4(self): + st.banner("IN TEST Bring Down One Interface Perpacket: Traffic is expected to Distribute on ARS Enable Before and After Interface Shutdown") + stream = trB1['stream_id'] + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + ars_common_utils.add_ars(data_glob.dut1, global_mode="true", mode="per-packet-quality") + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, data_glob.interfaces): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable Before Interface Shutdown") + st.config(data_glob.dut1, "sudo -s sonic-clear counters") + #Bring down one interface + interface_obj.interface_shutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(2) + ars_common_utils.run_traffic(stream, tg_handle_1, tg1, data_glob) + ars_common_utils.del_ars(data_glob.dut1) + counter = st.show(data_glob.dut1, "sudo -s show interface counters") + interface_obj.interface_noshutdown(vars.D1, vars.D1D2P1, skip_verify=False) + st.wait(20) + intfrecord =[vars.D1D2P2, vars.D1D2P3, vars.D1D2P4, vars.D1D2P5, vars.D1D2P7, vars.D1D2P8] + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter, intfrecord): + st.banner("Test Failed: traffic load not distributed") + ars_common_utils.del_ars(data_glob.dut1) + st.report_fail("test_case_failed_msg", "Traffic does not Distribute on ARS Enable after Interface Shutdown") + st.wait(50) + st.banner("Test Passed Traffic is Load Distributed Evenly Even after bringing down interface") + st.report_pass('test_case_passed') + \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/ars/test_ars_vxlan.py b/sonic-mgmt/spytest/tests/cisco/ars/test_ars_vxlan.py new file mode 100644 index 00000000000..d452fdd24c3 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/test_ars_vxlan.py @@ -0,0 +1,440 @@ +import os +import yaml +import pytest +from spytest import st, tgapi, SpyTestDict +import common_utils +import apis.system.basic as basic_obj + +ACL_JSON_FILE = "ars_acl.json" +ACL_JSON_FILE_PATH = os.path.dirname(os.path.realpath(__file__)) + '/' + ACL_JSON_FILE + +# Tgen config +data_tgen_l2vni = SpyTestDict() +data_tgen_l2vni.my_dut_list = None +data_tgen_l2vni.vlan = "2" + +data_tgen_l2vni.t1d1_ip_addr = "100.100.100.1" +data_tgen_l2vni.t1d1_ipv6_addr = "100:100:100::1" +data_tgen_l2vni.t1d1_mac_addr = "00:0A:03:00:11:01" + +data_tgen_l2vni.t1d2_ip_addr = "100.100.100.2" +data_tgen_l2vni.t1d2_ipv6_addr = "100:100:100::2" +data_tgen_l2vni.t1d2_mac_addr = "00:0A:04:00:12:01" + +data_tgen_l2vni.t1d1_ip_gateway = data_tgen_l2vni.t1d2_ip_addr +data_tgen_l2vni.t1d1_ipv6_gateway = data_tgen_l2vni.t1d2_ipv6_addr +data_tgen_l2vni.t1d2_ip_gateway = data_tgen_l2vni.t1d1_ip_addr +data_tgen_l2vni.t1d2_ipv6_gateway = data_tgen_l2vni.t1d1_ipv6_addr + +data_tgen_l2vni.t1d1_dest_mac_addr = data_tgen_l2vni.t1d2_mac_addr +data_tgen_l2vni.t1d2_dest_mac_addr = data_tgen_l2vni.t1d1_mac_addr + +data_tgen_l3vni = SpyTestDict() +data_tgen_l3vni.my_dut_list = None +data_tgen_l3vni.vlan = "2" + +data_tgen_l3vni.t1d1_ip_addr = "100.100.100.1" +data_tgen_l3vni.t1d1_ipv6_addr = "100:100:100::1" +data_tgen_l3vni.t1d1_mac_addr = "00:0A:03:00:11:01" + +data_tgen_l3vni.t1d2_ip_addr = "100.100.101.2" +data_tgen_l3vni.t1d2_ipv6_addr = "100:100:101::2" +data_tgen_l3vni.t1d2_mac_addr = "00:0A:04:00:12:01" + +data_tgen_l3vni.t1d1_ip_gateway = "100.100.100.254" +data_tgen_l3vni.t1d1_ipv6_gateway = "100:100:100::254" +data_tgen_l3vni.t1d2_ip_gateway = "100.100.101.254" +data_tgen_l3vni.t1d2_ipv6_gateway = "100:100:101::254" +# Tgen config + +def initialize_globals(vni_type): + global vars, data_glob, tg1, tg2, tg_handle_1, tg_handle_2, updated_path, updated_acl_file_path + vars = st.get_testbed_vars() + tg1, tg2, tg_handle_1, tg_handle_2 = common_utils.get_handles() + data_glob = SpyTestDict() + data_glob.nodes = [vars.D1, vars.D2, vars.D3, vars.D4] + data_glob.spine0 = data_glob.nodes[0] + data_glob.spine1 = data_glob.nodes[1] + data_glob.leaf0 = data_glob.nodes[2] + data_glob.leaf1 = data_glob.nodes[3] + data_glob.interfaces = [vars.D3D1P1, vars.D3D1P2, vars.D3D2P1, vars.D3D2P2] + dir_path = os.path.dirname(os.path.realpath(__file__)) + if vni_type == 'l2vni': + CONFIGS_FILE = 'ars_l2vni_cfg.yaml' + updated_path = common_utils.modify_config_file(dir_path + '/' + CONFIGS_FILE, vars) + + else: + CONFIGS_FILE = 'ars_l3vni_cfg.yaml' + updated_path = common_utils.modify_config_file(dir_path + '/' + CONFIGS_FILE, vars) + data_tgen_l3vni.t1d1_dest_mac_addr = basic_obj.get_ifconfig_ether(data_glob.leaf0, 'Vlan2') + data_tgen_l3vni.t1d2_dest_mac_addr = basic_obj.get_ifconfig_ether(data_glob.leaf1, 'Vlan3') + updated_acl_file_path = common_utils.modify_json_file(ACL_JSON_FILE_PATH, vars) + +# Parametrized setup/teardown for vni_type +@pytest.fixture(scope='module', autouse=False) +def setup_vni(request): + vni_type = request.param + initialize_globals(vni_type) + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, configs in config.items(): + common_utils.config_static(node, domain, True, updated_path) + st.wait(100) + yield + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, configs in config.items(): + common_utils.config_static(node, domain, False, updated_path) + common_utils.remove_temp_config(updated_path) + +def tg_cleanup(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface): + tg1.tg_traffic_config(mode = 'disable', stream_id =trBurst['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trContinuous['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trDSCP1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trDSCP2['stream_id']) + common_utils.tg_interface_cleanup(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface) + +@pytest.fixture(scope = 'function') +def fixture_BUM(request): + test_instance = request.instance + if getattr(test_instance, 'vni_type', 'l2vni') != 'l2vni': + yield + return + global trBUM, tg1_interface, tg2_interface + common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + tg1_interface, tg2_interface = common_utils.configure_tg_interfaces_v4(tg1, tg2, tg_handle_1, tg_handle_2, data_tgen_l2vni, data_tgen_l2vni) + common_utils.verify_ping_helper(tg1, tg_handle_1, tg1_interface['handle'], data_tgen_l2vni.t1d2_ip_addr) + common_utils.verify_ping_helper(tg2, tg_handle_2, tg2_interface['handle'], data_tgen_l2vni.t1d1_ip_addr) + trBUM = common_utils.configure_traffic_streams_BUM(tg1, tg2, tg_handle_1, tg_handle_2, data_tgen_l2vni, data_tgen_l2vni) + yield + for traffic_type in ['unicast', 'multicast', 'broadcast']: + tg1.tg_traffic_config(mode='disable', stream_id=trBUM[traffic_type]['stream_id']) + common_utils.tg_interface_cleanup(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface) + +@pytest.fixture(scope = 'function') +def fixture_v4(request): + st.banner("Fixture for IPv4") + global tg1_interface, tg2_interface, trBurst, trContinuous, trDSCP1, trDSCP2 + common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + test_instance = request.instance + vni_type = getattr(test_instance, 'vni_type', 'l2vni') + data_tgen = data_tgen_l2vni if vni_type == 'l2vni' else data_tgen_l3vni + tg1_interface, tg2_interface = common_utils.configure_tg_interfaces_v4(tg1, tg2, tg_handle_1, tg_handle_2, data_tgen, data_tgen) + common_utils.verify_ping_helper(tg1, tg_handle_1, tg1_interface['handle'], data_tgen.t1d2_ip_addr) + common_utils.verify_ping_helper(tg2, tg_handle_2, tg2_interface['handle'], data_tgen.t1d1_ip_addr) + trBurst, trContinuous, trDSCP1, trDSCP2 = common_utils.configure_traffic_streams(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface, 'ipv4') + yield + tg_cleanup(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface) + +# ============================================================================= +# ARS VXLAN L2VNI Testbed Topology +# +# +--------+ +--------+ +# | Spine0 | | Spine1 | +# | D1 | | D2 | +# +--------+ +--------+ +# | \ | / +# | \ | / +# | \ | / +# | \ | / +# | \ |/ +# +-------------------------+ +# | | +# +--------+ +--------+ +# | Leaf0 | | Leaf1 | +# | D3 | | D4 | +# +--------+ +--------+ +# | | +# [TG1] [TG2] +# +# Connections: +# - Spine0 (D1) <-> Leaf0 (D3): D1D3P1, D1D3P2 +# - Spine0 (D1) <-> Leaf1 (D4): D1D4P1, D1D4P2 +# - Spine1 (D2) <-> Leaf0 (D3): D2D3P1, D2D3P2 +# - Spine1 (D2) <-> Leaf1 (D4): D2D4P1, D2D4P2 +# - Leaf0 (D3) <-> TG1: D3T1P1 (Vlan 2) +# - Leaf1 (D4) <-> TG2: D4T1P1 (Vlan 2) +# +# Key Configurations: +# - VLANs 2, 3, 100 used for L2VNI and bridging +# - All traffic is Intra-Vlan (Vlan 2) +# - BGP EVPN overlay/underlay with appropriate ASNs +# - VXLAN tunnels and mappings configured per leaf +# - IPv4 and IPv6 addressing on VLAN interfaces +# - All interfaces between spines and leaves are started and enabled for IPv6 link-local +# +# Refer to ars_l2vni_cfg.yaml for full configuration details. +# ============================================================================= + +# ============================================================================= +# ARS VXLAN L3VNI Testbed Topology +# +# +--------+ +--------+ +# | Spine0 | | Spine1 | +# | D1 | | D2 | +# +--------+ +--------+ +# | \ | / +# | \ | / +# | \ | / +# | \ | / +# | \ |/ +# +-------------------------+ +# | | +# +--------+ +--------+ +# | Leaf0 | | Leaf1 | +# | D3 | | D4 | +# +--------+ +--------+ +# | | +# [TG1] [TG2] +# +# Connections: +# - Spine0 (D1) <-> Leaf0 (D3): D1D3P1, D1D3P2 +# - Spine0 (D1) <-> Leaf1 (D4): D1D4P1, D1D4P2 +# - Spine1 (D2) <-> Leaf0 (D3): D2D3P1, D2D3P2 +# - Spine1 (D2) <-> Leaf1 (D4): D2D4P1, D2D4P2 +# - Leaf0 (D3) <-> TG1: D3T1P1 (Vlan 2) +# - Leaf1 (D4) <-> TG2: D4T1P1 (Vlan 3) +# +# Key Configurations: +# - Loopback27 on leaves used for VTEP IPs (e.g., 2001:db8:1::3 on D3, 2001:db8:1::1 on D4) +# - VLANs 2, 3, 100 used for L3VNI and VRF mapping +# - All traffic is Inter-Vlan (TG1 in Vlan 2, TG2 in Vlan 3) +# - BGP EVPN overlay/underlay with VRF Vrf01 and VNI 1000 +# - VXLAN tunnels and mappings configured per leaf +# - IPv4 and IPv6 addressing on VLAN interfaces +# +# Refer to ars_l3vni_cfg.yaml for full configuration details. +# ============================================================================= + +@pytest.fixture(scope = 'function') +def fixture_v6(request): + st.banner("Fixture for IPv6") + global tg1_interface, tg2_interface, trBurst, trContinuous, trDSCP1, trDSCP2 + common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + test_instance = request.instance + vni_type = getattr(test_instance, 'vni_type', 'l2vni') + data_tgen = data_tgen_l2vni if vni_type == 'l2vni' else data_tgen_l3vni + tg1_interface, tg2_interface = common_utils.configure_tg_interfaces_v6(tg1, tg2, tg_handle_1, tg_handle_2, data_tgen, data_tgen) + common_utils.verify_ping_helper(tg1, tg_handle_1, tg1_interface['handle'], data_tgen.t1d2_ipv6_addr) + common_utils.verify_ping_helper(tg2, tg_handle_2, tg2_interface['handle'], data_tgen.t1d1_ipv6_addr) + trBurst, trContinuous, trDSCP1, trDSCP2 = common_utils.configure_traffic_streams(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface, 'ipv6') + yield + tg_cleanup(tg1, tg2, tg_handle_1, tg_handle_2, tg1_interface, tg2_interface) + +class ARS_VXLAN: + ''' + For L2VNI, verify ARS functionality with BUM traffic + ARS Config Mode - Flowlet Quality with idle time 1000 micro seconds + Traffic Type - Unicast, Multicast, Broadcast (V4)(Burst) + ''' + def ars_BUM(self): + st.banner("Verify BUM traffic distribution for ARS Flowlet Quality with idle time 1000 micro seconds") + common_utils.add_ars(data_glob.leaf0, global_mode="true", mode="flowlet-quality", idle_time="1000") + for traffic_type in ['unicast', 'multicast', 'broadcast']: + st.banner("Traffic Type: {}".format(traffic_type)) + stream = trBUM[traffic_type]['stream_id'] + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + st.banner("Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + assert common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic load is not Distributed for BUM traffic of type {}".format(traffic_type) + common_utils.del_ars(data_glob.leaf0) + st.banner("Test Passed: Traffic Load Distributed Evenly") + + ''' + For L2VNI and L3VNI, verify ARS functionality with Unicast traffic + ARS Config Mode - Flowlet Quality with idle time 1000 micro seconds + Traffic Type - V4/V6 Burst Unicast + ''' + def ars_flowlet(self): + st.banner("Verify traffic distribution for ARS Flowlet Quality with idle time 1000 micro seconds") + common_utils.add_ars(data_glob.leaf0, global_mode="true", mode="flowlet-quality", idle_time="1000") + stream = trBurst['stream_id'] + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + common_utils.del_ars(data_glob.leaf0) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + st.banner("Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + assert common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic load is not Distributed" + st.banner("Test Passed: Traffic Load Distributed Evenly") + + ''' + For L2VNI and L3VNI, verify ARS functionality with Unicast traffic + ARS Config Mode - Per Packet Quality + Traffic Type - V4/V6 Burst Unicast + Note : Per Packet Quality with Continuous traffic is validated in ars_portlist test case + ''' + def ars_perpacket(self): + st.banner("Verify traffic distribution for ARS Per Packet Quality") + common_utils.add_ars(data_glob.leaf0, global_mode="true", mode="per-packet-quality") + stream = trBurst['stream_id'] + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + common_utils.del_ars(data_glob.leaf0) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + st.banner("Traffic is expected to be load balanced after NHG is created, Ars oid should be getting attached to it.") + assert common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic load is not Distributed (perpacket)" + st.banner("Test Passed: Traffic Load Distributed Evenly") + + ''' + Negative Test Case + For L2VNI and L3VNI, verify ARS should not load balance continuous traffic when configured in flowlet quality mode + ARS Config Mode - Flowlet Quality with idle time 1000 micro seconds + Traffic Type - V4/V6 Continuous Unicast + ''' + def continuous_traffic_ars(self): + st.banner("Testing Single Continuous Flow with ARS Flowlet Quality with idle time 1000 micro seconds") + stream = trContinuous['stream_id'] + common_utils.add_ars(data_glob.leaf0, global_mode="true", mode="flowlet-quality", idle_time="1000") + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + common_utils.del_ars(data_glob.leaf0) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + st.banner("Traffic Expected to flow thorugh single interface for Continuous Traffic") + assert common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic does not flow thorugh single interface for Continuous Traffic" + st.banner("Passed: Traffic passes through Single Interface") + + ''' + For L2VNI and L3VNI, verify Conditional DLB functionality + ARS Config Mode - Flowlet Quality with idle time 1000 micro seconds + ACL Config - ACL rule to match DSCP value 57 + Traffic Type - V4/V6 DSCP Traffic with ACL rule and without ACL rule + ''' + def ars_acl(self): + pytest.skip("Skipping : ARS ACL over VXLAN not supported yet") + st.banner("Verify traffic distribution for ARS Flowlet Quality with DSCP") + common_utils.add_ars(data_glob.leaf0, global_mode="false", mode="flowlet-quality", idle_time="1000") + common_utils.create_acl_table_and_rule(data_glob.leaf0, updated_acl_file_path) + st.config(data_glob.leaf0, "counterpoll acl enable") + st.banner("ACL Table") + st.config(data_glob.leaf0, "show acl table") + st.banner("ACL Rule") + st.config(data_glob.leaf0, "show acl rule") + stream = trDSCP1['stream_id'] + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + st.banner("Traffic is expected to be load balanced for DSCP Traffic with ACL rule.") + assert common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic load is not Distributed for DSCP Traffic with ACL rule" + st.banner("Test Passed: Traffic Load Distributed Evenly for DSCP Traffic with ACL rule") + stream = trDSCP2['stream_id'] + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + st.config(data_glob.leaf0, "acl-loader delete ARS_IPV4") + common_utils.delete_acl_table(data_glob.leaf0) + common_utils.del_ars(data_glob.leaf0) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + st.banner("Traffic Expected to flow thorugh single interface for DSCP Traffic without ACL rule") + assert common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic does not flow thorugh single interface for DSCP Traffic without ACL rule" + st.banner("Test Passed: Traffic passes through Single Interface for DSCP Traffic without ACL rule") + + ''' + For L2VNI and L3VNI, verify ARS Portlist functionality with Unicast traffic + ARS Config Mode - Per Packet Quality (per-packet-quality) + Traffic Type - V4/V6 Continuous Unicast + ''' + def ars_portlist(self): + st.banner("Testing ARS Portlist (per-packet) with Continuous Traffic") + stream = trContinuous['stream_id'] + common_utils.add_ars(data_glob.leaf0, global_mode="false", mode="per-packet-quality") + st.config(data_glob.leaf0,"sudo -s config ars-portlist add ars_pl --ars-profile-name arsp") + for intf in data_glob.interfaces: + st.config(data_glob.leaf0, "sudo -s config ars-portlist-member add {} --ars-portlist ars_pl".format(intf)) + common_utils.run_traffic(data_glob.leaf0, tg1, tg_handle_1, stream) + counter1 = st.show(data_glob.leaf0, "sudo -s show interface counters") + for intf in data_glob.interfaces: + st.config(data_glob.leaf0, "sudo -s config ars-portlist-member del {}".format(intf)) + st.config(data_glob.leaf0,"sudo -s config ars-portlist del ars_pl") + common_utils.del_ars(data_glob.leaf0) + st.banner("Traffic Expected to be load balanced for ARS Portlist (per-packet) with Continuous Traffic") + assert common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces), "Traffic load is not Distributed for ARS Portlist (per-packet) with Continuous Traffic" + st.banner("Passed: Traffic Load Distributed Evenly for ARS Portlist (per-packet) with Continuous Traffic") + + +# Run all L2VNI TCs, then all L3VNI TCs, with correct config/unconfig order +@pytest.mark.parametrize('setup_vni', ['l2vni', 'l3vni'], indirect=True) +class TestARS_VXLAN_ALL(ARS_VXLAN): + @pytest.fixture(autouse=True) + def _setup_vni(self, setup_vni): + # This fixture ensures setup_vni is used for each vni_type group + pass + + @pytest.fixture(autouse=True) + def _set_vni_type(self, request): + # Set vni_type attribute for test logic and fixtures + self.vni_type = request.node.callspec.params['setup_vni'] + + # L2VNI-only test + @pytest.mark.usefixtures('fixture_BUM') + def test_ars_BUM(self): + if self.vni_type != 'l2vni': + st.report_pass("test_case_passed", "Skipping BUM test case for L3VNI") + return + try: + super().ars_BUM() + st.report_pass("test_case_passed", "ars_BUM test case passed") + except AssertionError as e: + common_utils.del_ars(data_glob.leaf0) + st.report_fail("test_case_failed_msg", f"ars_BUM assertion failed: {e}") + + # IPv6 + @pytest.mark.usefixtures('fixture_v6') + def test_v6_traffic(self): + failures = [] + skipped = [] + for fn in [ + ('ars_flowlet', super().ars_flowlet), + ('ars_perpacket', super().ars_perpacket), + ('continuous_traffic_ars', super().continuous_traffic_ars), + ('ars_acl', super().ars_acl), + ('ars_portlist', super().ars_portlist), + ]: + try: + fn[1]() + except pytest.skip.Exception as e: + skipped.append(f"{fn[0]}: {str(e)}") + continue + except Exception as e: + failures.append(f"{fn[0]}: {str(e)}") + try: + common_utils.del_ars(data_glob.leaf0) + except: + pass + continue + + # Report final results + if skipped: + st.log(f"Skipped IPv6 sub-tests: {skipped}") + if failures: + st.report_fail("test_case_failed_msg", f"IPv6 sub-tests failed: {failures}") + else: + st.report_pass("test_case_passed", "All IPv6 sub-tests passed") + + # IPv4 + @pytest.mark.usefixtures('fixture_v4') + def test_v4_traffic(self): + failures = [] + skipped = [] + for fn in [ + ('ars_flowlet', super().ars_flowlet), + ('ars_perpacket', super().ars_perpacket), + ('continuous_traffic_ars', super().continuous_traffic_ars), + ('ars_acl', super().ars_acl), + ('ars_portlist', super().ars_portlist), + ]: + try: + fn[1]() + except pytest.skip.Exception as e: + skipped.append(f"{fn[0]}: {str(e)}") + continue + except Exception as e: + failures.append(f"{fn[0]}: {str(e)}") + try: + common_utils.del_ars(data_glob.leaf0) + except: + pass + continue + + # Report final results + if skipped: + st.log(f"Skipped IPv4 sub-tests: {skipped}") + if failures: + st.report_fail("test_case_failed_msg", f"IPv4 sub-tests failed: {failures}") + else: + st.report_pass("test_case_passed", "All IPv4 sub-tests passed") diff --git a/sonic-mgmt/spytest/tests/cisco/ars/test_port_list.py b/sonic-mgmt/spytest/tests/cisco/ars/test_port_list.py new file mode 100644 index 00000000000..73fb0b56aad --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/ars/test_port_list.py @@ -0,0 +1,580 @@ +import os +import yaml +import pytest +from spytest import st, tgapi, SpyTestDict +import apis.routing.ip as ipapi +import tests.cisco.tortuga.common.tortuga_common_utils as common_obj +import apis.system.interface as interface_obj +import ars_common_utils + +# Tgen config +data = SpyTestDict() +data.t1d1_ipv6_addr = "2001:200:1::2" #Source IPv6 +data.t1d1_ip_addr = "200.200.1.2" #source IPv4 +data.t1d1_mac_addr = "00:0A:03:00:11:01" #source Mac +data.t1d2_ipv6_addr = "2001:100:1::2" +data.t1d2_ip_addr = "200.100.1.2" +data.t1d2_mac_addr = "00:0A:04:00:12:01" +data.t1d1_ipv6_gateway = "2001:200:1::1" #source Gateway ipv6 +data.t1d2_ipv6_gateway = "2001:100:1::1" +data.t1d1_ip_gateway = "200.200.1.1" #source Gateway ipv4 +data.t1d2_ip_gateway = "200.100.1.1" +data.tgen1_asn = "65205" +data.tgen2_asn = "65206" +data.v6_mask="64" +f_size='1024' +t_mode='create' +t_l4_protocol="tcp" +t_tcp_src_port=1002 +t_high_speed_result_analysis='1' +# Tgen config + +@pytest.fixture(scope='module', autouse=True) +def setup_teardown_basic(): + global vars, updated_path, data_glob + global tg1, tg2, tg_handle_1, tg_handle_2 + global trC1, trB1, trB1M + initialize_globals() + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, configs in config.items(): + common_obj.config_static(node, domain, True, updated_path) + interface_obj.interface_shutdown(vars.D1, vars.D1D2P5, skip_verify=False) + yield 'setup_teardown_basic' + with open(updated_path) as c: + config_list = yaml.load(c, Loader=yaml.FullLoader) + for node, config in config_list.items(): + for domain, configs in config.items(): + common_obj.config_static(node, domain, False, updated_path) + interface_obj.interface_noshutdown(vars.D1, vars.D1D2P5, skip_verify=False) + common_obj.remove_temp_config(updated_path) + +def initialize_globals(): + global vars, data_glob, tg1, tg2, tg_handle_1, tg_handle_2, updated_path + vars = st.get_testbed_vars() + tg1, tg2, tg_handle_1, tg_handle_2 = get_handles() + data_glob = SpyTestDict() + data_glob.nodes = [vars.D1, vars.D2] + data_glob.dut1 = data_glob.nodes[0] + data_glob.dut2 = data_glob.nodes[1] + data.dut_asn_list = {data_glob.dut1: "65200", data_glob.dut2: "65201"} + data_glob.interfaces = [ vars.D1D2P1, vars.D1D2P2, vars.D1D2P3, vars.D1D2P4, vars.D1D2P7, vars.D1D2P8] + CONFIGS_FILE = 'ars_basic_cfg.yaml' + dir_path = os.path.dirname(os.path.realpath(__file__)) + updated_path = common_obj.modify_config_file(f'{dir_path}/{CONFIGS_FILE}', vars) + +def configure_tg_interfaces_v6(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', ipv6_intf_addr=data.t1d1_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d1_ipv6_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', ipv6_intf_addr=data.t1d2_ipv6_addr,ipv6_prefix_length='64', ipv6_gateway=data.t1d2_ipv6_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +def configure_tg_interfaces_v4(): + global tg1_interface, tg2_interface + st.log("Creating Devices & adding IP Addresses along with ARP requests") + res1 = tg1.tg_interface_config(port_handle=tg_handle_1, mode='config', intf_ip_addr=data.t1d1_ip_addr, gateway=data.t1d1_ip_gateway, src_mac_addr=data.t1d1_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res1)) + tg1_interface = res1 + res2 = tg2.tg_interface_config(port_handle=tg_handle_2, mode='config', intf_ip_addr=data.t1d2_ip_addr, gateway=data.t1d2_ip_gateway, src_mac_addr=data.t1d2_mac_addr, arp_send_req='1') + st.log("INTFCONF: " + str(res2)) + tg2_interface = res2 + +@pytest.fixture(scope = 'class') +def fixture_v6(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v6() + ping_dut_interface_from_tg(dst_ip1 ="2001:200:1::1", dst_ip2="2001:100:1::1") + configure_bgp_v6() + configure_traffic_streams('ipv6') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(5) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(5) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(5) + +@pytest.fixture(scope = 'class') +def fixture_v4(): + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + configure_tg_interfaces_v4() + ping_dut_interface_from_tg(dst_ip1 ="200.200.1.1", dst_ip2="200.100.1.1") + configure_bgp_v4() + configure_traffic_streams('ipv4') + yield + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trC1['stream_id']) + tg1.tg_traffic_config(mode = 'disable', stream_id =trB1M['stream_id']) + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='stop') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='stop') + ars_common_utils.reset_tg_interfaces(tg1, tg2, tg_handle_1, tg_handle_2) + st.wait(5) + tg1.tg_interface_config(port_handle=tg_handle_1, handle=tg1_interface['handle'], mode='destroy') + st.wait(5) + tg2.tg_interface_config(port_handle=tg_handle_2, handle=tg2_interface['handle'], mode='destroy') + st.wait(5) + +def configure_bgp_v6(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ipv6_addr=data.t1d1_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ipv6_addr=data.t1d2_ipv6_gateway,ip_version='6', + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='2001:db8::20:20:20', ip_version='6') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='2001:db8:20:21::1' , ip_version='6', ipv6_prefix_length= '128', route_ip_addr_step='::1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='2001:db8:10:11::1', ip_version='6', ipv6_prefix_length= '128', route_ip_addr_step='::1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_bgp_v4(): + st.banner("Configuring BGP on TGEN-T1D1P1 towards DUT1") + global bgp_rtr1, bgp_route, Dest_NG, Src_NG, bgp_rtr2 + bgp_rtr1 = tg1.tg_emulation_bgp_config(handle=tg1_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen1_asn, remote_as=data.dut_asn_list[data_glob.dut1], remote_ip_addr=data.t1d1_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + st.banner("Configuring BGP on TGEN-T1D2P1 towards DUT2") + bgp_rtr2 = tg2.tg_emulation_bgp_config(handle=tg2_interface['handle'], + mode='enable', active_connect_enable='1', + local_as=data.tgen2_asn, remote_as=data.dut_asn_list[data_glob.dut2], remote_ip_addr=data.t1d2_ip_gateway, + enable_4_byte_as='1', graceful_restart_enable='1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Destination Network group + bgp_route = tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='1', prefix='20.20.20.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + st.banner("Prefix advertisement MultiFlow ") + # Destination Network group Multi Flow + Dest_NG= tg2.tg_emulation_bgp_route_config(handle=bgp_rtr2['handle'], mode='add', num_routes='512', prefix='20.20.21.1', prefix_step='0.0.0.1') + tg2.tg_emulation_bgp_control(handle=bgp_rtr2['handle'], mode='start') + st.wait(2) + # Souce Network group Multi Flow + Src_NG = tg1.tg_emulation_bgp_route_config(handle=bgp_rtr1['handle'], mode='add', num_routes='512', prefix='10.10.11.1', prefix_step = '0.0.0.1') + tg1.tg_emulation_bgp_control(handle=bgp_rtr1['handle'], mode='start') + st.wait(2) + +def configure_traffic_streams(tcircuit_endpoint_type): + st.banner("Configuring Traffic Stream on TGEN port1 towards DUT1") + global trB1, trC1, trB1M, trC1M + trB1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, + high_speed_result_analysis='1', frame_size='1024', transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='2000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + trC1 = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle=tg1_interface['handle'], + emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + trB1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='multi_burst', + pkts_per_burst='999', inter_burst_gap='20000000', inter_burst_gap_unit='ns', tx_delay='0', tx_delay_unit='bytes', + min_gap_bytes='12') + trC1M = tg1.tg_traffic_config(port_handle=tg_handle_1, emulation_src_handle= Src_NG['handle'], + emulation_dst_handle=Dest_NG['handle'], circuit_endpoint_type=tcircuit_endpoint_type, mode=t_mode, l4_protocol=t_l4_protocol, tcp_src_port=t_tcp_src_port, + high_speed_result_analysis=t_high_speed_result_analysis, frame_size=f_size, transmit_mode='continuous', rate_percent=99.5) + +def get_handles(): + tg1, tg_ph_1 = tgapi.get_handle_byname("T1D1P1") + tg2, tg_ph_2 = tgapi.get_handle_byname("T1D2P1") + return (tg1, tg2, tg_ph_1, tg_ph_2) + +def ping_dut_interface_from_tg(dst_ip1 , dst_ip2): + res1 = tgapi.verify_ping(src_obj=tg1, port_handle=tg_handle_1, dev_handle=tg1_interface['handle'], + dst_ip=dst_ip1, ping_count='1', exp_count='1') + res2 = tgapi.verify_ping(src_obj=tg2, port_handle=tg_handle_2, dev_handle=tg2_interface['handle'], + dst_ip=dst_ip2, ping_count='1', exp_count='1') + if res1 and res2: + st.log("Ping succeeded.") + else: + st.warn("Ping failed.") + +@pytest.mark.usefixtures('fixture_v4') +class Test_IPV4_config_ars(): + def test_nhg_equal_ecmp_flowlet_withburst(self): + st.banner("Test NHG member equal to ECMP for Flowlet with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_less_ecmp_flowlet_withburst(self): + st.banner("Test NHG member less ECMP for Flowlet with Burst: ARS expected to disable and traffic not distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P8) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D2P8 + " --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_nhg_greater_ecmp_flowlet_withburst(self): + st.banner("Test NHG member greater than ECMP for Flowlet with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D2P5 + " --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P5) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_perpacket_withburst(self): + st.banner("Test NHG member equal to ECMP for Perpacket with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_less_ecmp_perpacket_withburst(self): + st.banner("Test NHG member less ECMP for Perpacket With Burst: ARS expected to disable and traffic not distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del " + vars.D1D2P8) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D2P8 + " --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_nhg_greater_ecmp_perpacket_withburst(self): + st.banner("Test NHG member greater than ECMP for perpacket With Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D2P5 +" --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P5) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_flowlet_multiflow_with_and_without_burst(self): + st.banner("Test NHG member equal to ECMP for MultiFlow Flowlet With Burst: ARS expected to enable and traffic distirbuted") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_perpacket_multiflow_with_and_without_burst(self): + st.banner("Test NHG member equal to ECMP for MultiFlow perpacket with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_flowlet_without_burst(self): + st.banner("Test NHG member equal to ECMP Flowlet Without Burst: ARS expected to enable and traffic not distirbuted") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_perpacket_without_burst(self): + st.banner("Test NHG member equal to ECMP for Perpacket Without Burst: ARS expected to enable and traffic distirbuted") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + +@pytest.mark.usefixtures('fixture_v6') +class Test_IPV6_config_ars(): + def test_nhg_equal_ecmp_flowlet_withburst_v6(self): + st.banner("Test NHG member equal to ECMP for Flowlet With Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_less_ecmp_flowlet_withburst_v6(self): + st.banner("Test NHG member less ECMP for Flowlet With Burst: ARS expected to disable and traffic not distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P8) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D2P8 +" --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_nhg_greater_ecmp_flowlet_withburst_v6(self): + st.banner("Test NHG member greater than ECMP for Flowlet with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add " + vars.D1D2P5 + " --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P5) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_perpacket_withburst_v6(self): + st.banner("Test NHG member equal to ECMP for Perpacket with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_less_ecmp_perpacket_withburst_v6(self): + st.banner("Test NHG member less ECMP for Perpacket with Burst: ARS expected to disable and traffic not distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P8) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P8 +" --ars-portlist non_global_port_list") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_nhg_greater_ecmp_perpacket_withburst_v6(self): + st.banner("Test NHG member greater than ECMP for perpacket with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + st.config(data_glob.dut1, "sudo -s config ars-portlist-member add "+ vars.D1D2P5 +" --ars-portlist non_global_port_list") + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + st.config(data_glob.dut1, "sudo -s config ars-portlist-member del "+ vars.D1D2P5) + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_flowlet_multiflow_with_and_without_burst_v6(self): + st.banner("Test NHG member equal to ECMP for MultiFlow Flowlet with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic does not pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_perpacket_multiflow_with_and_without_burst_v6(self): + st.banner("Test NHG member equal to ECMP for MultiFlow perpacket with Burst: ARS expected to enable and traffic distirbuted") + stream = trB1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + stream = trC1M['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_flowlet_without_burst_v6(self): + st.banner("Test NHG member equal to ECMP Flowlet Without Burst: ARS expected to enable and traffic not distirbuted") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="flowlet-quality", idle_time="1000") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_single_interface(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Failed: traffic pass through Multiple Interface") + st.report_fail("test_case_failed_msg","Traffic does not flow thorugh single interface") + st.banner("Passed: Traffic passes through Single Interface") + st.report_pass('test_case_passed') + + def test_nhg_equal_ecmp_perpacket_without_burst_v6(self): + st.banner("Test NHG member equal to ECMP for Perpacket Without Burst: ARS expected to enable and traffic distirbuted") + stream = trC1['stream_id'] + ars_common_utils.add_ars(data_glob.dut1, global_mode="false", mode="per-packet-quality") + ars_common_utils.add_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.run_traffic(stream,tg_handle_1, tg1, data_glob) + counter1 = st.show(data_glob.dut1, "sudo -s show interface counters") + ars_common_utils.del_nhg_equal_to_ecmp(data_glob, vars) + ars_common_utils.del_ars(data_glob.dut1) + if not ars_common_utils.check_traffic_balanced(tg1, tg2, tg_handle_1, tg_handle_2, counter1, data_glob.interfaces): + st.banner("Test Failed: traffic load is not Distributed") + st.report_fail("test_case_failed_msg", "Traffic pass thorugh single interface") + st.banner("Test Passed: Traffic Load Distributed Evenly") + st.report_pass('test_case_passed') \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/common/sample_traffic_test1.py b/sonic-mgmt/spytest/tests/cisco/common/sample_traffic_test1.py new file mode 100644 index 00000000000..d2c41c41088 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/common/sample_traffic_test1.py @@ -0,0 +1,126 @@ +import time +import sys +import json +import pytest +import pprint +from traffic_stream_api import ( + traffic_gen_init, print_stream_stats, tgen_port_config, create_pfc_stream, + create_traffic_stream, start_stream, stop_stream, remove_stream, + stop_all_streams, remove_all_streams +) + +from spytest import st, tgapi, SpyTestDict + +import apis.system.port as papi +import apis.system.interface as intapi +import apis.routing.ip as ip_obj +import apis.system.basic as basic_obj +from apis.common.sonic_hooks import SonicHooks + +SPIRENT_12_1_MAC = '00:10:94:00:00:0B' +SPIRENT_12_9_MAC = '00:10:94:00:00:0C' + + +''' + See testbed file for more details + Spirent 12/1 <--> Ethernet104 + Spirent 12/9 <--> Ethernet120 +''' + +@pytest.fixture(scope="module", autouse=True) +def setup_topo(): + global tesbed_dict + global is_multi_asic + global dut1 + global tg1_d1_p1, tg1_d1_p1_port + global tg1_d1_p2, tg1_d1_p2_port + global pfc_ids + global p1_ids + global p2_ids + + st.log("setup topology Started") + sonichooks = SonicHooks() + testbed_dict = st.ensure_min_topology("D1") + pprint.pprint(testbed_dict) + dut1 = testbed_dict.D1 + # Assume both DUT1 and DUT2 are multi asic or single asic + is_multi_asic = sonichooks.is_multi_asic(dut1) + tg1_d1_p1, tg1_d1_p1_port = tgapi.get_handle_byname("T1D1P1") + tg1_d1_p2, tg1_d1_p2_port = tgapi.get_handle_byname("T1D1P2") + st.log("setup topology Done") + pfc_ids = [] + p1_ids = [] + p2_ids = [] + traffic_gen_init(dut1, '-n asic1') + yield + +def test_two_device_traffic(): + # Access DUT and ports + st.config(dut1, "config interface -n asic1 ip add Ethernet104 104.1.1.1/24") + st.config(dut1, "config interface -n asic1 ip add Ethernet120 120.1.1.1/24") + st.config(dut1, "ip netns exec asic1 arp -s 104.1.1.10" + SPIRENT_12_1_MAC) + st.config(dut1, "ip netns exec asic1 arp -s 120.1.1.10" + SPIRENT_12_9_MAC) + + # shut/no shut the Sonic interfaces + st.config(dut1, "config platform cisco interface Ethernet104 tx disable") + st.config(dut1, "config platform cisco interface Ethernet120 tx disable") + time.sleep(1) + st.config(dut1, "config platform cisco interface Ethernet104 tx enable") + st.config(dut1, "config platform cisco interface Ethernet120 tx enable") + + # Configure IP address and subnet mask on Traffic generator ports + tgen_port_config(tg1_d1_p1, tg1_d1_p1_port, '104.1.1.10', '255.255.255.0', \ + '104.1.1.1') + tgen_port_config(tg1_d1_p2, tg1_d1_p2_port, '120.1.1.10', '255.255.255.0', \ + '120.1.1.1') + + # Create PFC3 frame stream on P1 + pfc_ids.append(create_pfc_stream(tg1_d1_p1, tg1_d1_p1_port, 3, \ + SPIRENT_12_1_MAC, 9000)) + # Create PFC4 frame stream on P1 + pfc_ids.append(create_pfc_stream(tg1_d1_p1, tg1_d1_p1_port, 4, \ + SPIRENT_12_1_MAC, 9000)) + + # Configure 8 traffic streams on P2 and P1 + for i in range(8): + id = create_traffic_stream(dut1, tg1_d1_p2, tg1_d1_p2_port,\ + i, '120.1.1.10', '104.1.1.10', '44:b6:be:46:48:d3', 128, 10) + if id != -1: + p2_ids.append(id) + + id = create_traffic_stream(dut1, tg1_d1_p1, tg1_d1_p1_port,\ + i, '104.1.1.10', '120.1.1.10', '44:b6:be:46:48:d3', 128, 10) + if id != -1: + p1_ids.append(id) + + # Run traffic on 8 streams + for id in p1_ids: + start_stream(tg1_d1_p1, id) + for id in p2_ids: + start_stream(tg1_d1_p2, id) + + time.sleep(5) + + # Stop traffic on 8 streams + for id in p1_ids: + stop_stream(tg1_d1_p1, id) + for id in p2_ids: + stop_stream(tg1_d1_p2, id) + + # Print the stream statistics + rv1 = print_stream_stats(tg1_d1_p1, tg1_d1_p1_port) + rv2 = print_stream_stats(tg1_d1_p2, tg1_d1_p2_port) + + # Remove all streams on ports P1 and P2 + remove_all_streams(tg1_d1_p1, tg1_d1_p1_port); + remove_all_streams(tg1_d1_p2, tg1_d1_p2_port); + + tg1_d1_p1.local_stc_tapi_call(f'stc::perform DetachPorts -PortList port1') + tg1_d1_p1.local_stc_tapi_call(f'stc::apply') + tg1_d1_p2.local_stc_tapi_call(f'stc::perform DetachPorts -PortList port2') + tg1_d1_p2.local_stc_tapi_call(f'stc::apply') + + if rv1 is None and rv2 is None: + st.report_pass("test_case_passed") + else: + st.report_fail("Test failed") diff --git a/sonic-mgmt/spytest/tests/cisco/common/sonic_2port_tgen.yaml b/sonic-mgmt/spytest/tests/cisco/common/sonic_2port_tgen.yaml new file mode 100644 index 00000000000..bb1500a2c72 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/common/sonic_2port_tgen.yaml @@ -0,0 +1,31 @@ +version: 2.0 + +services: {default: "!include sonic_services.yaml"} + +params: "!include sonic_params.yaml" +builds: "!include sonic_builds.yaml" +speeds: "!include sonic_speeds.yaml" +errors: "!include sonic_errors.yaml" +instrument: "!include sonic_instrument.yaml" + +configs: + default: "!include sonic_configs.yaml" + empty: {current: [], restore: []} + +devices: + LC-01: + device_type: DevSonic + access: {protocol: ssh, ip: 1.74.25.61, port: 22} + credentials: {username: cisco, password: cisco123, altpassword: none} + properties: {config: default, build: default, services: default, params: def_dut, speed: default} + rpip: 1.74.25.1 + stc-01: + device_type: TGEN + properties: {type: stc, version: 5.45, ip: 172.27.147.23, params: def_tg} + +topology: + LC-01: + interfaces: + Ethernet104: {EndDevice: stc-01, EndPort: 12/1, params: def_tg_link} + Ethernet120: {EndDevice: stc-01, EndPort: 12/9, params: def_tg_link} + diff --git a/sonic-mgmt/spytest/tests/cisco/common/traffic_stream_api.py b/sonic-mgmt/spytest/tests/cisco/common/traffic_stream_api.py new file mode 100644 index 00000000000..4509bcee459 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/common/traffic_stream_api.py @@ -0,0 +1,141 @@ +import time +import sys +import json +import pytest +import pprint + +from spytest import st, tgapi, SpyTestDict + +import apis.system.port as papi +import apis.system.interface as intapi +import apis.routing.ip as ip_obj +import apis.system.basic as basic_obj + +# List to keep track of PFC streams +pfc_streams = [] +all_streams = [] + +# Table of PFC traffic class patterns (hex strings for each TC) +# The API is intelligent enough to ignore spaces +pfc_tc_table = [\ +'0101 0001 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0002 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0004 0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0008 0000 0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0010 0000 0000 0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0020 0000 0000 0000 0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0040 0000 0000 0000 0000 0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +'0101 0080 0000 0000 0000 0000 0000 0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000', +] + +tc_to_dscp_map = {} +# Build a mapping from traffic class (TC) to DSCP value using device output +# This is used to set the correct DSCP for each traffic class in test streams +def get_tc_to_dscp_map(dut, asic_str=''): + + if dut in tc_to_dscp_map: + return tc_to_dscp_map[dut] + + tc_to_dscp_map[dut] = {} + + # Get json output for dscp to tc map and reverse it to create + # the dictionary we need for DSCP values + dscp_to_tc_map = st.show(dut, \ + "sonic-cfggen -d --var-json DSCP_TO_TC_MAP " + asic_str, skip_tmpl=True) + idx = dscp_to_tc_map.rfind('}') + if idx == -1: + print("Bad format of dscp to tc map") + return + + dscp_to_tc_map = json.loads(dscp_to_tc_map[:idx + 1]) + dscp_to_tc_map = dscp_to_tc_map['AZURE'] + for k,v in dscp_to_tc_map.items(): + if int(v) not in tc_to_dscp_map[dut]: + tc_to_dscp_map[dut][int(v)] = int(k) + if len(tc_to_dscp_map[dut]) == 8: + break + if len(tc_to_dscp_map[dut]) < 8: + st.warn("Some traffic classes are unavailable in DSCP_TO_TC_MAP") + return tc_to_dscp_map[dut] + +# Check if a stream_id corresponds to a PFC stream +def is_pfc_stream(stream_id): + for stream in pfc_streams: + if stream['stream_id'] == stream_id: + return True + return False + +# Print traffic stream statistics and check for packet loss +def print_stream_stats(dev_handle, port_handle): + stats = dev_handle.tg_traffic_stats(port_handle=port_handle, mode='streams') + stats = stats[port_handle]['stream'] + print("{} Stats {}".format(port_handle, stats)); + for key in stats: + tx_pkts = stats[key]['tx']['total_pkts'] + rx_pkts = stats[key]['rx']['total_pkts'] + if is_pfc_stream(key): + print("PFC Stream {} : Rx {} Tx {}".format(key, rx_pkts, tx_pkts)) + elif rx_pkts != tx_pkts: + print("Stream {} test FAILED: Rx {} Tx {}".format(key, rx_pkts, tx_pkts)) + return key + else: + print("Stream {} test PASSED: Rx {} Tx {}".format(key, rx_pkts, tx_pkts)) + return None + +# Configure a router interface on the traffic generator +def tgen_port_config(dev_handle, p_handle, ip_addr, nmask, gw): + dev_handle.tg_interface_config(mode='config', port_handle=p_handle,\ + intf_ip_addr=ip_addr, netmask=nmask, gateway=gw) + +# Create a PFC (Priority Flow Control) stream for a given traffic class +def create_pfc_stream(dev_handle, p_handle, tc_num, src_mac, pps): + if tc_num < 0 or tc_num > 7: + print("Bad traffic class {}".format(tc_num)) + return + + new_stream = \ + dev_handle.tg_traffic_config(mode='create', port_handle=p_handle,\ + l2_encap='ethernet_ii', mac_src=src_mac, \ + mac_dst='01:80:C2:00:00:01', ether_type='8808',\ + custom_pattern=pfc_tc_table[tc_num],\ + rate_pps=pps, transmit_mode='continuous', \ + high_speed_result_analysis=1) + pfc_streams.append(new_stream) + all_streams.append(new_stream) + return (len(all_streams) - 1) + +# Create a regular traffic stream for a given traffic class and DSCP +def create_traffic_stream(dut, dev_handle, p_handle, tc_num, ip_src, ip_dst, dst_mac, pkt_size, percnt): + + if dut not in tc_to_dscp_map or tc_num >= len(tc_to_dscp_map[dut]): + st.warn("Traffic class {} unavailable".format(tc_num)) + return -1 + + new_stream = \ + dev_handle.tg_traffic_config(mode='create', \ + port_handle=p_handle, l3_protocol='ipv4', \ + ip_src_addr=ip_src, ip_dst_addr=ip_dst,\ + mac_dst=dst_mac, ip_dscp=tc_to_dscp_map[dut][tc_num],\ + ip_ecn='01', frame_size=pkt_size, rate_percent=percnt,\ + transmit_mode='continuous', high_speed_result_analysis=1) + all_streams.append(new_stream) + return (len(all_streams) - 1) + +def start_stream(dev_handle, idx): + dev_handle.tg_traffic_control(action='run', handle=all_streams[idx]['stream_id']) + +def stop_stream(dev_handle, idx): + dev_handle.tg_traffic_control(action='stop', handle=all_streams[idx]['stream_id']) + +def stop_all_streams(dev_handle, p_handle): + dev_handle.tg_traffic_control(action='stop', port_handle=p_handle) + +def remove_stream(dev_handle, idx): + dev_handle.tg_traffic_config(mode='remove', handle=all_streams[idx]['stream_id']) + +def remove_all_streams(dev_handle, p_handle): + dev_handle.tg_traffic_config(mode='remove', port_handle=p_handle) + +def traffic_gen_init(dut, asic_str=''): + get_tc_to_dscp_map(dut, asic_str) + diff --git a/sonic-mgmt/spytest/tests/cisco/diag/test_sai_online_diag_cli.py b/sonic-mgmt/spytest/tests/cisco/diag/test_sai_online_diag_cli.py new file mode 100644 index 00000000000..ac825359149 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/diag/test_sai_online_diag_cli.py @@ -0,0 +1,381 @@ +""" +Verify online diag feature +""" +import random +import re + +import pytest + +from spytest import st +from apis.common.sonic_hooks import SonicHooks + +ONLINE_DIAG_SHOW = "show sai online-diag config" +ONLINE_DIAG_STATUS = "show sai online-diag status" +SIM_CORRUPT_EN = 'debug sai online-diag simulate corruption slice 2 enable' +SIM_CORRUPT_DIS = 'debug sai online-diag simulate corruption slice 2 disable' +SIM_DROP_EN = 'debug sai online-diag simulate drop slice 2 enable' +SIM_DROP_DIS = 'debug sai online-diag simulate drop slice 2 disable' +SIM_SLICE_ID = 2 +WAIT_STATUS_SEC = 3 +# Expected syslog line after online-diag corruption simulation (see show logging). +ONLINEDIAG_PAYLOAD_CORRUPTION_LOG_RE = re.compile( + r"OnlineDiag:\s*Payload corruption detected\.", + re.I, +) +CORRUPTION_SYSLOG_POLL_TIMEOUT_SEC = 30 +CONFIG_RELOAD_POST_WAIT_SEC = 300 +CONFIG_RELOAD_CORRUPTION_POLL_TIMEOUT_SEC = 120 + + +@pytest.fixture(scope="module", autouse=True) +def _module_setup(): + global vars, sonichooks + vars = st.get_testbed_vars() + sonichooks = SonicHooks() + yield + + +def _output_indicates_success(output): + text = (output or "").strip() + if not text: + return True + lower = text.lower() + if re.search(r"\b(error|failed|cannot|not found|command not found)\b", lower): + return False + return True + + +def _cells_from_line(line): + line = line.rstrip() + if "|" not in line: + return [] + return [c.strip() for c in line.split("|")[1:-1]] + + +def _packet_corruption_column_index(output): + """Locate column index for packet-corruption-errors (excluding packet-loss).""" + for line in output.splitlines(): + if "+-" in line and "---" in line: + continue + cells = _cells_from_line(line) + if not cells: + continue + first = cells[0].lower().replace("\n", " ") + if not first.startswith("slice"): + continue + for i, h in enumerate(cells): + hlow = h.lower().replace("\n", " ") + if "packet-corruption" in hlow and "loss" not in hlow: + return i + for line in output.splitlines(): + cells = _cells_from_line(line) + for i, h in enumerate(cells): + hlow = h.lower().replace("\n", " ") + if "packet-corruption" in hlow and "loss" not in hlow: + return i + return 5 + + +def _parse_online_diag_status_rows(output): + """Return list of (slice_id, packet_corruption_errors).""" + corruption_col = _packet_corruption_column_index(output) + rows = [] + for line in output.splitlines(): + if "+-" in line: + continue + if "---" in line and line.strip().startswith("|"): + continue + cells = _cells_from_line(line) + if len(cells) <= corruption_col: + continue + if not cells[0].isdigit(): + continue + try: + sid = int(cells[0]) + cor = int(str(cells[corruption_col]).replace(",", "")) + except ValueError: + continue + rows.append((sid, cor)) + return rows + + +def _packet_loss_column_index(output): + """Locate column index for packet-loss-errors.""" + for line in output.splitlines(): + if "+-" in line and "---" in line: + continue + cells = _cells_from_line(line) + if not cells: + continue + first = cells[0].lower().replace("\n", " ") + if not first.startswith("slice"): + continue + for i, h in enumerate(cells): + hlow = h.lower().replace("\n", " ") + if "packet-loss" in hlow: + return i + for line in output.splitlines(): + cells = _cells_from_line(line) + for i, h in enumerate(cells): + hlow = h.lower().replace("\n", " ") + if "packet-loss" in hlow: + return i + return None + + +def _parse_online_diag_status_loss_rows(output): + """Return list of (slice_id, packet_loss_errors).""" + loss_col = _packet_loss_column_index(output) + if loss_col is None: + return [] + rows = [] + for line in output.splitlines(): + if "+-" in line: + continue + if "---" in line and line.strip().startswith("|"): + continue + cells = _cells_from_line(line) + if len(cells) <= loss_col: + continue + if not cells[0].isdigit(): + continue + try: + sid = int(cells[0]) + loss = int(str(cells[loss_col]).replace(",", "")) + except ValueError: + continue + rows.append((sid, loss)) + return rows + + +def _run_s1_cli_show(dut, cmd): + out = st.show(dut, cmd, skip_tmpl=True, skip_error_check=False) + if not _output_indicates_success(out): + st.report_fail("sudo s1-cli-sonic output suggests failure for cmd={!r}: {!r}".format(cmd, out)) + return out + + +def _s1_cmd(asic_num, inner_c): + quoted = '"{}"'.format(inner_c) + if asic_num is None: + return "sudo s1-cli-sonic -c {}".format(quoted) + return "sudo s1-cli-sonic --asic-num {} -c {}".format(asic_num, quoted) + + +def _parse_asic_ids_from_docker_ps(output): + """ + Parse ASIC numbers from `docker ps` output: container names starting with syncd, + extract syncd -> N for s1-cli-sonic --asic-num. + """ + ids = [] + for line in (output or "").splitlines(): + s = line.strip() + if not s or s.upper().startswith("CONTAINER ID"): + continue + m = re.match(r"^syncd(\d+)\b", s, re.I) + if m: + ids.append(int(m.group(1))) + continue + for n in re.findall(r"(? container names.""" + for cmd in ( + "sudo docker ps --format '{{.Names}}'", + "docker ps --format '{{.Names}}'", + ): + out = st.show(dut, cmd, skip_tmpl=True, skip_error_check=True) + ids = _parse_asic_ids_from_docker_ps(out) + if ids: + return ids + out = st.show(dut, "sudo docker ps", skip_tmpl=True, skip_error_check=True) + if not out: + out = st.show(dut, "docker ps", skip_tmpl=True, skip_error_check=True) + return _parse_asic_ids_from_docker_ps(out) if out else [] + + +def _asic_ids_for_multi_asic_dut(dut): + """ + Return list of ASIC instance ids from docker ps (containers named syncd only). + If none found, log error and fail the test (no ip netns / ASIC Count fallback). + """ + asic_ids = _asic_ids_from_syncd_dockers(dut) + if not asic_ids: + st.error( + "multi-ASIC: no running docker container with name matching syncd " + "(from docker ps --format / docker ps). Cannot determine ASIC ids.", + dut=dut, + ) + st.report_fail( + "multi-ASIC online-diag tests require at least one syncd* container in docker ps output." + ) + return asic_ids + + +def _sim_asic_num(dut): + """None for single-ASIC; random --asic-num from syncd docker names (see _asic_ids_for_multi_asic_dut).""" + if not sonichooks.is_multi_asic(dut): + return None + asic_ids = _asic_ids_for_multi_asic_dut(dut) + return random.choice(asic_ids) + + +def _foreach_asic_num(dut): + """ + Single-ASIC: yield None once. + Multi-ASIC: ASIC ids from docker ps syncd names only, then yield one id at random. + """ + if sonichooks.is_multi_asic(dut): + asic_ids = _asic_ids_for_multi_asic_dut(dut) + yield random.choice(asic_ids) + else: + yield None + + +def _foreach_all_asic_nums(dut): + """Single-ASIC: yield None once. Multi-ASIC: yield every ASIC id from syncd* docker names.""" + if sonichooks.is_multi_asic(dut): + for num in _asic_ids_for_multi_asic_dut(dut): + yield num + else: + yield None + + +def _show_logging_has_payload_corruption_detected(dut): + """True if current buffer from `show logging` contains the OnlineDiag payload-corruption line.""" + out = st.show(dut, "show logging | grep 'Payload corruption detected'", skip_tmpl=True, skip_error_check=True) + if not out or not _output_indicates_success(out): + return False + return True + +def _verify_packet_corruption_zero_all_asics(dut): + """Return True if every slice's packet-corruption-errors is 0 on every ASIC (soft show for poll).""" + for num in _foreach_all_asic_nums(dut): + cmd = _s1_cmd(num, ONLINE_DIAG_STATUS) + out = st.show(dut, cmd, skip_tmpl=True, skip_error_check=True) + if not _output_indicates_success(out): + return False + rows = _parse_online_diag_status_rows(out) + if not rows: + return False + bad = [(s, c) for s, c in rows if c != 0] + if bad: + return False + return True + + +def test_sai_online_diag_config_s1_cli_sonic(): + """ + Multi-ASIC: pick one random ASIC id from docker ps syncd container names (required), run + s1-cli-sonic --asic-num -c "show sai online-diag config" + Single-ASIC: run + s1-cli-sonic -c "show sai online-diag config" + """ + dut = vars.D1 + for num in _foreach_asic_num(dut): + cmd = _s1_cmd(num, ONLINE_DIAG_SHOW) + _run_s1_cli_show(dut, cmd) + st.report_pass("test_case_passed") + + +def test_sai_online_diag_packet_corruption_zero_after_config_reload(): + """ + Save and config reload, wait, then verify show sai online-diag status reports zero + packet-corruption-errors for every slice on each ASIC (poll until true or timeout). + """ + dut = vars.D1 + st.config_db_reload(dut, save=True) + st.wait(CONFIG_RELOAD_POST_WAIT_SEC) + if not st.poll_wait( + _verify_packet_corruption_zero_all_asics, + CONFIG_RELOAD_CORRUPTION_POLL_TIMEOUT_SEC, + dut, + ): + st.report_fail( + "Packet-corruption-errors not all zero after config reload " + "(within {}s poll)".format(CONFIG_RELOAD_CORRUPTION_POLL_TIMEOUT_SEC) + ) + st.report_pass("test_case_passed") + + +def test_sai_online_diag_simulate_corruption_slice_asic(): + """ + On one randomly chosen ASIC (multi-ASIC): read baseline packet-corruption-errors for slice 2 + from status; enable corruption simulate; verify syslog shows 'OnlineDiag: Payload corruption detected.' + (show logging); verify the count increases vs baseline; disable simulate and confirm the count + does not increase across polls. Single-ASIC: same without --asic-num. + """ + dut = vars.D1 + sim_asic = _sim_asic_num(dut) + disable_cmd = _s1_cmd(sim_asic, SIM_CORRUPT_DIS) + + try: + cmd_status = _s1_cmd(sim_asic, ONLINE_DIAG_STATUS) + out0 = _run_s1_cli_show(dut, cmd_status) + rows0 = _parse_online_diag_status_rows(out0) + slices = dict(rows0) + if SIM_SLICE_ID not in slices: + st.report_fail( + "Slice {} not present in online-diag status (asic={}): {!r}".format( + SIM_SLICE_ID, sim_asic, out0[:800] + ) + ) + baseline_corruption = slices[SIM_SLICE_ID] + + cmd_en = _s1_cmd(sim_asic, SIM_CORRUPT_EN) + _run_s1_cli_show(dut, cmd_en) + st.wait(WAIT_STATUS_SEC) + + if not st.poll_wait( + _show_logging_has_payload_corruption_detected, + CORRUPTION_SYSLOG_POLL_TIMEOUT_SEC, + dut, + ): + st.report_fail( + "After corruption simulate enable, expected 'OnlineDiag: Payload corruption detected.' " + "in output of 'show logging' (within {}s poll)".format( + CORRUPTION_SYSLOG_POLL_TIMEOUT_SEC + ) + ) + + out1 = _run_s1_cli_show(dut, cmd_status) + slices1 = dict(_parse_online_diag_status_rows(out1)) + if SIM_SLICE_ID not in slices1: + st.report_fail("Slice {} missing after enable simulate: {!r}".format(SIM_SLICE_ID, out1[:800])) + if slices1[SIM_SLICE_ID] <= baseline_corruption: + st.report_fail( + "After corruption simulate enable, slice {} packet-corruption-errors expected to increase " + "(baseline={}, after={})".format( + SIM_SLICE_ID, baseline_corruption, slices1[SIM_SLICE_ID] + ) + ) + + _run_s1_cli_show(dut, disable_cmd) + st.wait(WAIT_STATUS_SEC) + + out2 = _run_s1_cli_show(dut, cmd_status) + c_a = dict(_parse_online_diag_status_rows(out2)).get(SIM_SLICE_ID) + if c_a is None: + st.report_fail("Slice {} missing after disable simulate (first poll)".format(SIM_SLICE_ID)) + + st.wait(WAIT_STATUS_SEC) + + out3 = _run_s1_cli_show(dut, cmd_status) + c_b = dict(_parse_online_diag_status_rows(out3)).get(SIM_SLICE_ID) + if c_b is None: + st.report_fail("Slice {} missing after disable simulate (second poll)".format(SIM_SLICE_ID)) + + if c_b != c_a: + st.report_fail( + "After simulate disable, slice {} packet-corruption-errors should not increment " + "(stable across polls): first={} second={}".format(SIM_SLICE_ID, c_a, c_b) + ) + finally: + st.show(dut, disable_cmd, skip_tmpl=True, skip_error_check=True) + + st.report_pass("test_case_passed") + + diff --git a/sonic-mgmt/spytest/tests/cisco/dsf/README.md b/sonic-mgmt/spytest/tests/cisco/dsf/README.md new file mode 100644 index 00000000000..9faa2d3a3b0 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/dsf/README.md @@ -0,0 +1 @@ +Base directory for DSF based Spytest scripts diff --git a/sonic-mgmt/spytest/tests/cisco/fx3/qos/README.md b/sonic-mgmt/spytest/tests/cisco/fx3/qos/README.md new file mode 100644 index 00000000000..ab0779db8b1 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/fx3/qos/README.md @@ -0,0 +1,145 @@ +# FX3 QoS Spytests + +SpyTest + IXIA validation of FX3 QoS: DSCP→TC mapping, scheduler (DWRR / strict +priority), WRED, and buffer behavior. ASIC: Tahoe (Sundown1). SDK: Nexus SDK. + +## Layout + +The directory mirrors the FX3 QoS SAI test layout in `cisco-nx-sai` +(`test/python/hw/mig_hw/fx3/qos/`) so the same area exists on both sides. + +```text +qos/ +├── conftest.py # registers `smoke` marker, hoists smoke first +├── qos_helpers.py +├── test_qos_integration.py # cross-area end-to-end (DWRR + SP + WRED) +├── test_simple_connect.py # topology sanity (auto-detects non-breakout D1T1:3 vs breakout D1T1:1+D1D2:1+D2T1:1; PASS/FAIL only, never SKIP) +├── buffer/ +├── qos_map/ +├── scheduler/ +└── wred/ +``` + +`test_qos_integration.py` holds the multi-port end-to-end scenarios (the +"tortuga" use case). The area subdirectories hold focused per-feature tests. + +## Running + +Tests are invoked via `bin/spytest` from `sonic-mgmt/spytest/`. See the +[Testbed Setup wiki](https://ciscoteams.atlassian.net/wiki/spaces/WHITEBOX/pages/967479575/Testbed+Setup) +for environment prerequisites (spytest container, mounts, IXIA access). + +### Run modes + +A curated 12-test smoke set is split across two topology-targeted markers so +smoke runs cover both the non-breakout and breakout testbeds without +duplicating coverage: + +- `@pytest.mark.smoke_non_breakout` (9 IDs) — pin to `fx3_qos_testbed.yaml` + (cheaper, 1 DUT). Covers config / DB / SAI checks plus the tests where + topology doesn't add coverage. +- `@pytest.mark.smoke_breakout` (3 IDs) — pin to + `fx3_qos_testbed_breakout.yaml` so the 4×25G peer-link egress path gets + exercised in smoke. + +For IPv4/IPv6 traffic-test pairs, the two AFs are split across topologies — +same egress queueing/drop machinery either way; topology is what's worth +varying. Total smoke count is 12, distributed 9 + 3. + +`-m smoke` is auto-applied as the union (so `-m smoke` and +`git grep smoke` keep working). `conftest.py` also hoists any smoke item to +the front of the collection, so the full-suite invocation runs smoke first. + +| Goal | Command | +|---|---| +| Smoke (non-breakout topology) | `bin/spytest --testbed-file testbeds/fx3/fx3_qos_testbed.yaml ... -m smoke_non_breakout cisco/fx3/qos/` | +| Smoke (breakout topology) | `bin/spytest --testbed-file testbeds/fx3/fx3_qos_testbed_breakout.yaml ... -m smoke_breakout cisco/fx3/qos/` | +| Smoke union | `bin/spytest ... -m smoke cisco/fx3/qos/` | +| Smoke first, then the rest | `bin/spytest ... cisco/fx3/qos/` (default) | +| Same, fail fast on smoke | `bin/spytest ... --maxfail 3 cisco/fx3/qos/` | +| Just non-smoke | `bin/spytest ... -m "not smoke" cisco/fx3/qos/` | +| Smoke for one area only | `bin/spytest ... -m smoke cisco/fx3/qos/scheduler/` | +| One specific test | `bin/spytest ... cisco/fx3/qos/::` | + +To see what is in each smoke set: +`git grep -E 'smoke_(non_)?breakout' sonic-mgmt/spytest/tests/cisco/fx3/qos/`. + +Canonical full-suite command (smoke first, then everything else): + +```bash +bin/spytest --testbed-file testbeds/fx3/fx3_qos_testbed.yaml \ + --device-feature-group master \ + --module-init-max-timeout=72000 \ + --tc-max-timeout=72000 \ + --port-init-wait 1 \ + --skip-init-checks \ + --breakout-mode none \ + --logs-path run_logs/ \ + cisco/fx3/qos/ 2>&1 | tee log +``` + +### Testbed YAMLs + +Available in `testbeds/fx3/`: + +- `fx3_qos_testbed.yaml` — default 2×100G ingress → 1×100G egress +- `fx3_qos_testbed_breakout.yaml` — breakout topology +- `fx3_qos_testbed_config_only.yaml` — config-only (no traffic) +- `fx3_qos_testbed_peer_link.yaml` — peer-link variant + +Swap YAMLs to run the same tests against a different topology. + +## What a passing run looks like + +### Scheduler DWRR (`test_scheduler_dwrr_validation`) + +DWRR weight distribution validated across Q0–Q5; observed TX share within +±20% of configured weight. Strict-priority Q6/Q7 see zero drops. + +```text +DWRR TX-SHARE VALIDATION — Tolerance ±20% +Total weight: 170 (Q0=20 Q1=20 Q2=20 Q3=40 Q4=40 Q5=30) + +Queue Weight Expected % Actual % Acceptable Range Result +Q0 20 11.8% 11.6% [9.4% .. 14.1%] PASS +Q1 20 11.8% 11.6% [9.4% .. 14.1%] PASS +Q2 20 11.8% 11.6% [9.4% .. 14.1%] PASS +Q3 40 23.5% 23.5% [18.8% .. 28.2%] PASS +Q4 40 23.5% 23.5% [18.8% .. 28.2%] PASS +Q5 30 17.6% 18.0% [14.1% .. 21.2%] PASS +DWRR share result: 6 passed, 0 failed + +Strict-Priority (zero drops expected): +Q6 Drop Delta 0 PASS +Q7 Drop Delta 0 PASS +``` + +### WRED linearity (`test_wred_linearity`) + +Oversubscription drives queue depth from ~1.1 MB to ~3.0 MB; measured drop +rate tracks expected probability in linear region (Zone B). + +```text +WRED LINEARITY SUMMARY (egress 100000M) +Margin Rate% Avg Depth Est. Prob WRED Drop Zone Status +250M 100.250% 1.12MB 0.30% 0.25% B OK +500M 100.500% 1.20MB 0.51% 0.50% B OK +1000M 101.000% 1.43MB 1.06% 0.99% B OK +2000M 102.000% 1.80MB 2.00% 1.96% B OK +5500M 105.500% 3.00MB 5.00% 5.29% B OK +``` + +## Recent changes — FX3 SAI Queue Init drop (MIGSOFTWAR-41509) + +- `qos_helpers.py`: large helper expansion (DCHAL probes, ASIC_DB parsing, golden WRED/scheduler validators) supporting the queue-init flows. +- `scheduler/test_scheduler.py`: scheduler validation expanded for queue-init coverage. +- `wred/test_wred_profile_validation.py`: WRED profile validation expanded. +- `wred/test_wred_threshold_validation.py`: adds `_wait_insshell_ready()` — polls the `dchalshell` Thrift sidecar (127.0.0.1:9091 in `syncd`) for up to 60 s after every `config qos reload` so the next DCHAL probe doesn't race the sidecar restart. +- `test_simple_connect.py`: now detects the active testbed shape (single-DUT D1T1:3 vs two-DUT D1T1:1+D1D2:1+D2T1:1 breakout) at runtime and runs the matching reachability check; reports PASS or FAIL only. + +Status: passed all non-breakout runs on FX3 (SAI 1.16.4, Nexus SDK, Tahoe Sundown1). + +## References + +- Testbed setup: +- SAI suite: (`test/python/hw/mig_hw/fx3/qos/`) diff --git a/sonic-mgmt/spytest/tests/cisco/fx3/qos/buffer/conftest.py b/sonic-mgmt/spytest/tests/cisco/fx3/qos/buffer/conftest.py new file mode 100644 index 00000000000..fb7e13cd7f7 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/fx3/qos/buffer/conftest.py @@ -0,0 +1,5 @@ +import sys +import os + +# Add parent qos/ directory to path so qos_helpers can be found +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) diff --git a/sonic-mgmt/spytest/tests/cisco/fx3/qos/buffer/test_buffer.py b/sonic-mgmt/spytest/tests/cisco/fx3/qos/buffer/test_buffer.py new file mode 100644 index 00000000000..b2ff36d2797 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/fx3/qos/buffer/test_buffer.py @@ -0,0 +1,1424 @@ +#!/usr/bin/env python3 +# BEGIN_LEGAL +# +# Copyright (c) 2026-current, Cisco Systems, Inc. ("Cisco"). All Rights Reserved. +# +# This file and all technical concepts, proprietary knowledge, algorithms and +# intellectual property rights it contains (collectively the "Confidential Information"), +# are the sole propriety information of Cisco and shall remain at Cisco's ownership. +# You shall not disclose the Confidential Information to any third party and you +# shall use it solely in connection with operating and/or maintaining of Cisco's +# products and pursuant to the terms and conditions of the license agreement you +# entered into with Cisco. +# +# THE SOURCE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. +# IN NO EVENT SHALL CISCO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH +# THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# END_LEGAL + +""" +FX3 QoS Buffer Pool & Profile Tests — SONiC end-to-end verification. + +FX3 buffer_manager constraints (src/sai_buffer.cpp): + - One default egress pool seeded at init: + TYPE=EGRESS, THRESHOLD_MODE=DYNAMIC, SIZE=39,022,464 bytes + (DEFAULT_POOL_CELLS=93804 * CELL_SIZE_BYTES=416) + - One default egress profile seeded at init: + POOL_ID=, THRESHOLD_MODE=DYNAMIC, + SHARED_DYNAMIC_TH=5 (SONiC) → FX3 alpha index 9 → ASIC alpha=27 (0x1b) + - create with matching default attrs returns pre-seeded OID (idempotent) + - create with non-matching attrs → NOT_SUPPORTED + - set with matching HW value → SUCCESS; mismatch → NOT_SUPPORTED + - remove operations → NOT_SUPPORTED + - All IPG APIs → NOT_SUPPORTED + +FX3 HW constants: + CELL_SIZE_BYTES = 416 + DEFAULT_POOL_CELLS = 93804 + EXPECTED_POOL_SIZE = 93804 * 416 = 39,022,464 bytes + DEFAULT_DYNAMIC_TH = 5 (SONiC range -8..7; maps to FX3 alpha=27) + +SONiC Redis paths: + CONFIG_DB BUFFER_POOL| TYPE / MODE / SIZE + CONFIG_DB BUFFER_PROFILE| POOL / DYNAMIC_TH / STATIC_TH / XOFF / XON + ASIC_DB SAI_OBJECT_TYPE_BUFFER_POOL: + ASIC_DB SAI_OBJECT_TYPE_BUFFER_PROFILE: + COUNTERS_DB PERIODIC_WATERMARKS| (FX3: not COUNTERS:) + +Test plan mapping (scheduler_test_plan.md buffer section): + (test_fx3_buffer_pool_exists) — pool exists in CONFIG_DB + ASIC_DB + (test_fx3_buffer_pool_type_egress) — TYPE=egress + (test_fx3_buffer_pool_mode_dynamic) — MODE=dynamic + (test_fx3_buffer_pool_size) — SIZE matches HW constant + (test_fx3_buffer_profile_exists) — profile exists in CONFIG_DB + ASIC_DB + (test_fx3_buffer_profile_dynamic_th) — DYNAMIC_TH=5 in CONFIG_DB (SONiC valid range) + (test_fx3_buffer_pool_stats) — watermark/occupancy stats readable and sane +""" + +import pytest + +from qos_helpers import ( + setup_topo_common, + parse_redis_hget, + parse_redis_hgetall, + clear_dut_counters, + deploy_dchal_helper, + dchal_clear_counters, + dchal_peak_stats, + ensure_interfaces_admin_up, + get_dchal_queue_counters, + get_intf_counters, + tg_port_speed_gbps, + get_dut_mac, + parse_speed_to_mbps, + report_intf_counters, + report_peak_stats, + report_queue_counters, + V4_INGRESS_A_IP, V4_INGRESS_B_IP, V4_EGRESS_IP, + IXIA_INGRESS_A_IP, IXIA_INGRESS_B_IP, IXIA_EGRESS_IP, +) + +from spytest import st, tgapi + +# --------------------------------------------------------------------------- +# FX3 HW constants +# --------------------------------------------------------------------------- +CELL_SIZE_BYTES = 416 +DEFAULT_POOL_CELLS = 93804 +EXPECTED_POOL_SIZE = DEFAULT_POOL_CELLS * CELL_SIZE_BYTES # 39,022,464 +DEFAULT_DYNAMIC_TH = 5 + +# Default SONiC buffer object names on FX3 (as configured by config qos reload) +# FX3 uses lossy (not lossless) naming; two profiles exist: _dwrr and _sp. +DEFAULT_POOL_NAME = 'egress_lossy_pool' +DEFAULT_PROFILE_NAME = 'egress_lossy_profile_dwrr' + +# --------------------------------------------------------------------------- +# Module-level DUT/port state (populated by setup_topo fixture) +# --------------------------------------------------------------------------- +dut = None +port_info = {} +topo_mode = 'ixia' # 'ixia', 'peer_link', or 'breakout' — set by setup_topo + +# --------------------------------------------------------------------------- +# Module-level Ixia/traffic state (populated by setup_topo fixture) +# --------------------------------------------------------------------------- +tg = None # tg object from tgapi.get_handle_byname +tg_ph = {} # {'ingress_a': ph, 'egress': ph} +port_speeds = {} # {'ingress_a': 100, 'egress': 100} Gbps +STREAM_RATE_PCT = 90 # % of line rate; overwritten by setup_topo + +# L3 addressing — shared constants from qos_helpers (same across all topologies) +IXIA_IPV4 = { + 'ingress_a': IXIA_INGRESS_A_IP, + 'ingress_b': IXIA_INGRESS_B_IP, + 'egress': IXIA_EGRESS_IP, +} + +PKT_SIZE = 128 +TRAFFIC_DURATION = 10 +# DSCP value that maps to each TC/queue under the FX3 default AZURE DSCP map +QUEUE_TO_DSCP = {0: 0, 1: 6, 2: 2, 3: 3, 4: 4, 5: 46, 6: 48, 7: 49} + + +@pytest.fixture(scope='module') +def setup_topo(request): + """Resolve DUT handle and port map from testbed; verify interfaces up. + + Adapts automatically to the testbed topology via setup_topo_common: + * ixia — D1T1:3, 2 ingress + 1 egress, all IXIA on DUT1 + * peer_link — D1T1:2 + D1D2:1 + D2T1:1, egress via DUT2 + * breakout — D1T1:1 + D1D2:1 + D2T1:1, 1 ingress, 25G breakout egress + """ + global dut, port_info, tg, tg_ph, port_speeds, topo_mode, STREAM_RATE_PCT + + for result in setup_topo_common(tgapi, target_queue=0): + dut = result['dut'] + tg = result['tg'] + tg_ph = result['tg_ph'] + port_info = result['port_info'] + topo_mode = result['mode'] + + # Convert port speed strings ('100G', '25G') to integer Gbps + raw_speeds = result['port_speeds'] + port_speeds = {} + for role, spd_str in raw_speeds.items(): + mbps = parse_speed_to_mbps(spd_str) + port_speeds[role] = mbps // 1000 if mbps else 100 + + st.log("Buffer test topology (mode={}):".format(topo_mode)) + for role, intf in port_info.items(): + st.log(" {:<12} -> {} ({}G)".format( + role, intf, port_speeds.get(role, '?'))) + + yield + + +# --------------------------------------------------------------------------- +# Helper: read CONFIG_DB BUFFER_POOL| +# --------------------------------------------------------------------------- +def _get_pool_config(dut_h, pool_name): + out = st.show(dut_h, + 'sonic-db-cli CONFIG_DB HGETALL "BUFFER_POOL|{}"'.format(pool_name), + skip_tmpl=True) + return parse_redis_hgetall(out) + + +# --------------------------------------------------------------------------- +# Helper: read CONFIG_DB BUFFER_PROFILE| +# --------------------------------------------------------------------------- +def _get_profile_config(dut_h, profile_name): + out = st.show(dut_h, + 'sonic-db-cli CONFIG_DB HGETALL "BUFFER_PROFILE|{}"'.format(profile_name), + skip_tmpl=True) + return parse_redis_hgetall(out) + + +# --------------------------------------------------------------------------- +# Helper: get ASIC_DB OID for a buffer pool by name (via STATE_DB or COUNTERS_DB) +# --------------------------------------------------------------------------- +def _get_pool_oid(dut_h, pool_name): + """Return the ASIC_DB OID string for a buffer pool, or None if not found.""" + out = st.show(dut_h, + 'sonic-db-cli COUNTERS_DB HGET "COUNTERS_BUFFER_POOL_NAME_MAP" "{}"'.format( + pool_name), + skip_tmpl=True) + return parse_redis_hget(out).strip() or None + + +# --------------------------------------------------------------------------- +# Helper: get ASIC_DB buffer pool attributes by OID +# --------------------------------------------------------------------------- +def _get_pool_asic_attrs(dut_h, pool_oid): + out = st.show(dut_h, + 'sonic-db-cli ASIC_DB HGETALL "ASIC_STATE:SAI_OBJECT_TYPE_BUFFER_POOL:{}"'.format( + pool_oid), + skip_tmpl=True) + return parse_redis_hgetall(out) + + +# --------------------------------------------------------------------------- +# Helper: get COUNTERS_DB watermark stats for a pool OID +# --------------------------------------------------------------------------- +def _get_pool_stats(dut_h, pool_oid): + """Read buffer pool watermark stats from COUNTERS_DB. + + Returns dict with key 'SAI_BUFFER_POOL_STAT_WATERMARK_BYTES' from + PERIODIC_WATERMARKS: (periodic/read-and-clear, 60s poll). + """ + out = st.show(dut_h, + 'sonic-db-cli COUNTERS_DB HGETALL "PERIODIC_WATERMARKS:{}"'.format(pool_oid), + skip_tmpl=True) + return parse_redis_hgetall(out) + + +def _get_pool_stats_persistent(dut_h, pool_oid): + """Read USER_WATERMARKS from COUNTERS_DB (cleared by 'watermarkstat -c').""" + out = st.show(dut_h, + 'sonic-db-cli COUNTERS_DB HGETALL "USER_WATERMARKS:{}"'.format(pool_oid), + skip_tmpl=True) + return parse_redis_hgetall(out) + + +def _get_pool_stats_true_persistent(dut_h, pool_oid): + """Read PERSISTENT_WATERMARKS from COUNTERS_DB (never cleared — truly sticky).""" + out = st.show(dut_h, + 'sonic-db-cli COUNTERS_DB HGETALL "PERSISTENT_WATERMARKS:{}"'.format(pool_oid), + skip_tmpl=True) + return parse_redis_hgetall(out) + + +# =========================================================================== +# Test cases — Buffer Pool +# =========================================================================== + +@pytest.mark.smoke_non_breakout +def test_fx3_buffer_pool_exists(setup_topo): + """Default egress buffer pool exists in CONFIG_DB and has an ASIC_DB OID. + + Maps to SAI test_default_create_pool_succeeds. + + Steps: + 1. Read CONFIG_DB BUFFER_POOL|egress_lossy_pool + 2. Verify key is present (non-empty) + 3. Lookup OID in COUNTERS_DB COUNTERS_BUFFER_POOL_NAME_MAP + 4. Verify OID is non-empty and non-zero + """ + fail_msgs = [] + + st.banner("test_fx3_buffer_pool_exists") + + # Step 1: CONFIG_DB + pool_cfg = _get_pool_config(dut, DEFAULT_POOL_NAME) + st.log(" CONFIG_DB BUFFER_POOL|{}: {}".format(DEFAULT_POOL_NAME, pool_cfg)) + if not pool_cfg: + fail_msgs.append( + "CONFIG_DB BUFFER_POOL|{} is empty — pool not configured".format( + DEFAULT_POOL_NAME)) + + # Step 2: ASIC_DB OID + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + st.log(" COUNTERS_DB pool OID: {}".format(pool_oid)) + if not pool_oid or pool_oid in ('0', 'oid:0x0'): + fail_msgs.append( + "Buffer pool '{}' has no valid ASIC_DB OID (got '{}')".format( + DEFAULT_POOL_NAME, pool_oid)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer pool exists check FAILED — see above') + else: + st.log(" BUFFER POOL EXISTS — PASSED") + st.log(" Pool '{}' present in CONFIG_DB and ASIC_DB OID={}".format( + DEFAULT_POOL_NAME, pool_oid)) + st.log("=" * 72) + st.report_pass('msg', + "Buffer pool '{}' exists: CONFIG_DB present, ASIC_DB OID={}".format( + DEFAULT_POOL_NAME, pool_oid)) + + +def test_fx3_buffer_pool_type_egress(setup_topo): + """Default buffer pool TYPE must be 'egress'. + + Maps to SAI test_pool_type_is_egress. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_type_egress") + + pool_cfg = _get_pool_config(dut, DEFAULT_POOL_NAME) + st.log(" CONFIG_DB BUFFER_POOL|{}: {}".format(DEFAULT_POOL_NAME, pool_cfg)) + + pool_type = pool_cfg.get('type', '').lower() + st.log(" type = '{}' expected 'egress'".format(pool_type)) + if pool_type != 'egress': + fail_msgs.append( + "BUFFER_POOL|{} type='{}', expected 'egress'".format( + DEFAULT_POOL_NAME, pool_type)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer pool type check FAILED — see above') + else: + st.log(" BUFFER POOL TYPE — PASSED (type=egress)") + st.log("=" * 72) + st.report_pass('msg', "Buffer pool type=egress: PASSED") + + +def test_fx3_buffer_pool_mode_dynamic(setup_topo): + """Default buffer pool THRESHOLD MODE must be 'dynamic'. + + Maps to SAI test_pool_threshold_mode_is_dynamic. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_mode_dynamic") + + pool_cfg = _get_pool_config(dut, DEFAULT_POOL_NAME) + mode = pool_cfg.get('mode', '').lower() + st.log(" mode = '{}' expected 'dynamic'".format(mode)) + if mode != 'dynamic': + fail_msgs.append( + "BUFFER_POOL|{} mode='{}', expected 'dynamic'".format( + DEFAULT_POOL_NAME, mode)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer pool mode check FAILED — see above') + else: + st.log(" BUFFER POOL MODE — PASSED (mode=dynamic)") + st.log("=" * 72) + st.report_pass('msg', "Buffer pool mode=dynamic: PASSED") + + +def test_fx3_buffer_pool_size(setup_topo): + """Default buffer pool SIZE must match FX3 HW constant (39,022,464 bytes). + + Maps to SAI test_pool_size. + EXPECTED_POOL_SIZE = DEFAULT_POOL_CELLS(93804) * CELL_SIZE_BYTES(416) + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_size") + st.log(" Expected pool size: {:,} bytes ({} cells x {} bytes/cell)".format( + EXPECTED_POOL_SIZE, DEFAULT_POOL_CELLS, CELL_SIZE_BYTES)) + + pool_cfg = _get_pool_config(dut, DEFAULT_POOL_NAME) + size_str = pool_cfg.get('size', '') + st.log(" CONFIG_DB size = '{}'".format(size_str)) + + try: + actual_size = int(size_str) + except (ValueError, TypeError): + fail_msgs.append( + "BUFFER_POOL|{} size='{}' is not an integer".format( + DEFAULT_POOL_NAME, size_str)) + actual_size = None + + if actual_size is not None and actual_size != EXPECTED_POOL_SIZE: + fail_msgs.append( + "BUFFER_POOL|{} size={}, expected {:,} bytes".format( + DEFAULT_POOL_NAME, actual_size, EXPECTED_POOL_SIZE)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer pool size check FAILED — see above') + else: + st.log(" BUFFER POOL SIZE — PASSED ({:,} bytes)".format(actual_size)) + st.log("=" * 72) + st.report_pass('msg', + "Buffer pool size={:,} bytes matches HW constant: PASSED".format( + actual_size)) + + +# =========================================================================== +# Test cases — Buffer Profile +# =========================================================================== + +def test_fx3_buffer_profile_exists(setup_topo): + """Default egress buffer profile exists in CONFIG_DB and references the default pool. + + Maps to SAI test_default_create_profile_succeeds + test_profile_pool_id_matches_default_pool. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_exists") + + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + st.log(" CONFIG_DB BUFFER_PROFILE|{}: {}".format(DEFAULT_PROFILE_NAME, profile_cfg)) + + if not profile_cfg: + fail_msgs.append( + "CONFIG_DB BUFFER_PROFILE|{} is empty — profile not configured".format( + DEFAULT_PROFILE_NAME)) + else: + pool_ref = profile_cfg.get('pool', '') + st.log(" pool reference = '{}'".format(pool_ref)) + if DEFAULT_POOL_NAME not in pool_ref: + fail_msgs.append( + "BUFFER_PROFILE|{} pool='{}', expected reference to '{}'".format( + DEFAULT_PROFILE_NAME, pool_ref, DEFAULT_POOL_NAME)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile exists check FAILED — see above') + else: + st.log(" BUFFER PROFILE EXISTS — PASSED") + st.log(" Profile '{}' present; references pool '{}'".format( + DEFAULT_PROFILE_NAME, DEFAULT_POOL_NAME)) + st.log("=" * 72) + st.report_pass('msg', + "Buffer profile '{}' exists and references '{}': PASSED".format( + DEFAULT_PROFILE_NAME, DEFAULT_POOL_NAME)) + + +def test_fx3_buffer_profile_dynamic_th(setup_topo): + """Default buffer profile DYNAMIC_TH must be 5 (SONiC range -8..7; maps to FX3 ASIC alpha=27). + + Maps to SAI test_profile_dynamic_th. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_dynamic_th") + st.log(" Expected dynamic_th = {} (FX3 alpha=0x1b)".format(DEFAULT_DYNAMIC_TH)) + + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + dynamic_th_str = profile_cfg.get('dynamic_th', '') + st.log(" CONFIG_DB dynamic_th = '{}'".format(dynamic_th_str)) + + try: + actual_th = int(dynamic_th_str) + except (ValueError, TypeError): + fail_msgs.append( + "BUFFER_PROFILE|{} dynamic_th='{}' is not an integer".format( + DEFAULT_PROFILE_NAME, dynamic_th_str)) + actual_th = None + + if actual_th is not None and actual_th != DEFAULT_DYNAMIC_TH: + fail_msgs.append( + "BUFFER_PROFILE|{} dynamic_th={}, expected {}".format( + DEFAULT_PROFILE_NAME, actual_th, DEFAULT_DYNAMIC_TH)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile dynamic_th check FAILED — see above') + else: + st.log(" BUFFER PROFILE DYNAMIC_TH — PASSED (dynamic_th={})".format(actual_th)) + st.log("=" * 72) + st.report_pass('msg', + "Buffer profile dynamic_th={} matches FX3 HW alpha: PASSED".format(actual_th)) + + +# =========================================================================== +# Test cases — Buffer Pool Stats +# =========================================================================== + +def test_fx3_buffer_pool_stats(setup_topo): + """Buffer pool watermark stat is readable and within bounds. + + Maps to SAI tests: + test_watermark_bytes_is_nonnegative + test_watermark_bytes_within_pool_bounds + + Note: SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES, CURR_OCCUPANCY_CELLS, and + WATERMARK_CELLS are not exported to COUNTERS_DB by SONiC today — they require + changes to watermarkorch.cpp, bufferorch.cpp, and flexcounterorch.cpp in + sonic-swss. Only SAI_BUFFER_POOL_STAT_WATERMARK_BYTES is validated here. + + Steps: + 1. Resolve pool OID from COUNTERS_DB name map + 2. Read PERIODIC_WATERMARKS stats for the pool OID + 3. Verify SAI_BUFFER_POOL_STAT_WATERMARK_BYTES >= 0 + 4. Verify SAI_BUFFER_POOL_STAT_WATERMARK_BYTES <= EXPECTED_POOL_SIZE + 5. Verify watermark_bytes is cell-aligned (divisible by CELL_SIZE_BYTES) + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_stats") + + # Step 1: resolve OID + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + st.log(" Pool '{}' OID: {}".format(DEFAULT_POOL_NAME, pool_oid)) + if not pool_oid or pool_oid in ('0', 'oid:0x0'): + st.report_fail('msg', + 'Buffer pool stats FAILED — could not resolve pool OID for {}'.format( + DEFAULT_POOL_NAME)) + return + + # Step 2: read stats + stats = _get_pool_stats(dut, pool_oid) + st.log(" COUNTERS_DB stats for {}: {}".format(pool_oid, stats)) + + if not stats: + st.report_fail('msg', + 'Buffer pool stats FAILED — no COUNTERS_DB entries for OID {}'.format(pool_oid)) + return + + watermark_key = 'SAI_BUFFER_POOL_STAT_WATERMARK_BYTES' + wm_str = stats.get(watermark_key, None) + if wm_str is None: + st.report_fail('msg', + "Buffer pool stats FAILED — stat '{}' not found for pool {}".format( + watermark_key, pool_oid)) + return + try: + watermark_bytes = int(wm_str) + except (ValueError, TypeError): + st.report_fail('msg', + "Buffer pool stats FAILED — stat '{}' = '{}' is not an integer".format( + watermark_key, wm_str)) + return + + st.log(" watermark_bytes = {:,}".format(watermark_bytes)) + + # Step 3 + if watermark_bytes < 0: + fail_msgs.append("watermark_bytes={} is negative".format(watermark_bytes)) + # Step 4 + if watermark_bytes > EXPECTED_POOL_SIZE: + fail_msgs.append( + "watermark_bytes={:,} exceeds pool size {:,}".format( + watermark_bytes, EXPECTED_POOL_SIZE)) + # Step 5 + if watermark_bytes % CELL_SIZE_BYTES != 0: + fail_msgs.append( + "watermark_bytes={} is not cell-aligned (cell={})".format( + watermark_bytes, CELL_SIZE_BYTES)) + + st.log("=" * 72) + if fail_msgs: + st.log(" BUFFER POOL STATS — FAILURES ({} total):".format(len(fail_msgs))) + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', + 'Buffer pool stats FAILED ({} failures) — see above'.format(len(fail_msgs))) + else: + st.log(" BUFFER POOL STATS — ALL CHECKS PASSED") + st.log(" watermark_bytes={:,} pool_size={:,} cell_aligned=True".format( + watermark_bytes, EXPECTED_POOL_SIZE)) + st.log("=" * 72) + st.report_pass('msg', + 'Buffer pool stats PASSED: watermark={:,} bytes, ' + 'non-negative, cell-aligned, within pool bounds'.format(watermark_bytes)) + + +def test_fx3_buffer_pool_xoff_size_is_zero(setup_topo): + """Default buffer pool XOFF_SIZE must be 0 (lossy pool, no PFC headroom). + + Maps to SAI test_pool_xoff_size_is_zero. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_xoff_size_is_zero") + + pool_cfg = _get_pool_config(dut, DEFAULT_POOL_NAME) + xoff = pool_cfg.get('xoff', '0').strip() + st.log(" xoff_size = '{}' expected '0'".format(xoff)) + try: + xoff_val = int(xoff) if xoff else 0 + except ValueError: + xoff_val = None + fail_msgs.append("BUFFER_POOL|{} xoff='{}' is not an integer".format( + DEFAULT_POOL_NAME, xoff)) + if xoff_val is not None and xoff_val != 0: + fail_msgs.append("BUFFER_POOL|{} xoff_size={}, expected 0".format( + DEFAULT_POOL_NAME, xoff_val)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer pool xoff_size check FAILED — see above') + else: + st.log(" BUFFER POOL XOFF_SIZE — PASSED (xoff_size=0)") + st.log("=" * 72) + st.report_pass('msg', "Buffer pool xoff_size=0 (lossy pool): PASSED") + + +def test_fx3_buffer_profile_static_th(setup_topo): + """Default buffer profile has no static_th — it is a dynamic-mode profile. + + Maps to SAI test_profile_static_th. + + The FX3 default profile uses DYNAMIC threshold mode (dynamic_th=5, maps to ASIC alpha=27). + In dynamic mode SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH is not set + in ASIC_DB. CONFIG_DB has no 'static_th' key either. + + Validates: + 1. CONFIG_DB 'static_th' key is absent (dynamic profile has no static_th) + 2. ASIC_DB SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH is absent + (dynamic profile does not carry a static threshold) + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_static_th") + + # Check CONFIG_DB — static_th key must be absent + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + static_th_str = profile_cfg.get('static_th', None) + st.log(" CONFIG_DB static_th = {}".format( + repr(static_th_str) if static_th_str is not None else '')) + + if static_th_str is not None: + fail_msgs.append( + "BUFFER_PROFILE|{} has unexpected 'static_th'='{}' " + "(dynamic profile should have no static_th)".format( + DEFAULT_PROFILE_NAME, static_th_str)) + + # Check ASIC_DB — SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH must be absent + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + asic_static_th = None + if pool_oid: + # Iterate both profile OIDs (dwrr + sp) — check both + out = st.show(dut, + 'sonic-db-cli ASIC_DB KEYS "ASIC_STATE:SAI_OBJECT_TYPE_BUFFER_PROFILE:*"', + skip_tmpl=True) + profile_oids = [ln.split(':')[-1].strip() + for ln in (out or '').splitlines() + if 'SAI_OBJECT_TYPE_BUFFER_PROFILE' in ln] + for oid in profile_oids: + attrs = {} + attr_out = st.show(dut, + 'sonic-db-cli ASIC_DB HGETALL "ASIC_STATE:SAI_OBJECT_TYPE_BUFFER_PROFILE:{}"'.format(oid), + skip_tmpl=True) + from qos_helpers import parse_redis_hgetall as _hgetall + attrs = _hgetall(attr_out) + st.log(" ASIC profile {} attrs: {}".format(oid, attrs)) + if 'SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH' in attrs: + asic_static_th = attrs['SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH'] + fail_msgs.append( + "ASIC profile {} has SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH='{}' " + "(unexpected for dynamic profile)".format(oid, asic_static_th)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile static_th check FAILED — see above') + else: + st.log(" BUFFER PROFILE STATIC_TH — PASSED") + st.log(" Profile is dynamic-mode: no static_th in CONFIG_DB or ASIC_DB") + st.log("=" * 72) + st.report_pass('msg', + "Buffer profile static_th absent as expected " + "(dynamic profile: no SAI_BUFFER_PROFILE_ATTR_SHARED_STATIC_TH): PASSED") + + +def test_fx3_buffer_profile_reserved_buffer_size_is_zero(setup_topo): + """Default buffer profile reserved_buffer_size must be 0. + + Maps to SAI test_profile_reserved_buffer_size_is_zero. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_reserved_buffer_size_is_zero") + + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + resv = profile_cfg.get('reserved_buffer_size', '0').strip() + st.log(" reserved_buffer_size = '{}' expected '0'".format(resv)) + try: + resv_val = int(resv) if resv else 0 + except ValueError: + resv_val = None + fail_msgs.append("BUFFER_PROFILE|{} reserved_buffer_size='{}' is not an integer".format( + DEFAULT_PROFILE_NAME, resv)) + if resv_val is not None and resv_val != 0: + fail_msgs.append("BUFFER_PROFILE|{} reserved_buffer_size={}, expected 0".format( + DEFAULT_PROFILE_NAME, resv_val)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile reserved_buffer_size check FAILED — see above') + else: + st.log(" BUFFER PROFILE RESERVED_BUFFER_SIZE — PASSED (0)") + st.log("=" * 72) + st.report_pass('msg', "Buffer profile reserved_buffer_size=0: PASSED") + + +def test_fx3_buffer_profile_xoff_th_is_zero(setup_topo): + """Default buffer profile xoff_th must be 0. + + Maps to SAI test_profile_xoff_th_is_zero. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_xoff_th_is_zero") + + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + xoff = profile_cfg.get('xoff_th', '0').strip() + st.log(" xoff_th = '{}' expected '0'".format(xoff)) + try: + val = int(xoff) if xoff else 0 + except ValueError: + val = None + fail_msgs.append("BUFFER_PROFILE|{} xoff_th='{}' not an integer".format( + DEFAULT_PROFILE_NAME, xoff)) + if val is not None and val != 0: + fail_msgs.append("BUFFER_PROFILE|{} xoff_th={}, expected 0".format( + DEFAULT_PROFILE_NAME, val)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile xoff_th check FAILED — see above') + else: + st.log(" BUFFER PROFILE XOFF_TH — PASSED (0)") + st.log("=" * 72) + st.report_pass('msg', "Buffer profile xoff_th=0: PASSED") + + +def test_fx3_buffer_profile_xon_th_is_zero(setup_topo): + """Default buffer profile xon_th must be 0. + + Maps to SAI test_profile_xon_th_is_zero. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_xon_th_is_zero") + + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + xon = profile_cfg.get('xon_th', '0').strip() + st.log(" xon_th = '{}' expected '0'".format(xon)) + try: + val = int(xon) if xon else 0 + except ValueError: + val = None + fail_msgs.append("BUFFER_PROFILE|{} xon_th='{}' not an integer".format( + DEFAULT_PROFILE_NAME, xon)) + if val is not None and val != 0: + fail_msgs.append("BUFFER_PROFILE|{} xon_th={}, expected 0".format( + DEFAULT_PROFILE_NAME, val)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile xon_th check FAILED — see above') + else: + st.log(" BUFFER PROFILE XON_TH — PASSED (0)") + st.log("=" * 72) + st.report_pass('msg', "Buffer profile xon_th=0: PASSED") + + +def test_fx3_buffer_profile_xon_offset_th_is_zero(setup_topo): + """Default buffer profile xon_offset_th must be 0. + + Maps to SAI test_profile_xon_offset_th_is_zero. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_profile_xon_offset_th_is_zero") + + profile_cfg = _get_profile_config(dut, DEFAULT_PROFILE_NAME) + xon_off = profile_cfg.get('xon_offset_th', '0').strip() + st.log(" xon_offset_th = '{}' expected '0'".format(xon_off)) + try: + val = int(xon_off) if xon_off else 0 + except ValueError: + val = None + fail_msgs.append("BUFFER_PROFILE|{} xon_offset_th='{}' not an integer".format( + DEFAULT_PROFILE_NAME, xon_off)) + if val is not None and val != 0: + fail_msgs.append("BUFFER_PROFILE|{} xon_offset_th={}, expected 0".format( + DEFAULT_PROFILE_NAME, val)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer profile xon_offset_th check FAILED — see above') + else: + st.log(" BUFFER PROFILE XON_OFFSET_TH — PASSED (0)") + st.log("=" * 72) + st.report_pass('msg', "Buffer profile xon_offset_th=0: PASSED") + + +# =========================================================================== +# Negative tests — operations that must fail / not be supported on FX3 +# =========================================================================== + +def test_fx3_create_buffer_pool_ingress_not_supported(setup_topo): + """Creating a buffer pool with type=ingress must be rejected by SONiC/SAI. + + Maps to SAI test_create_buffer_pool_not_supported_ingress. + Attempts to set CONFIG_DB BUFFER_POOL with type=ingress; verifies the + config either gets rejected or is not propagated to ASIC_DB. + """ + fail_msgs = [] + st.banner("test_fx3_create_buffer_pool_ingress_not_supported") + + bad_pool = 'test_ingress_pool_negative' + st.log(" Attempting to add CONFIG_DB BUFFER_POOL|{} with type=ingress".format(bad_pool)) + + # Write a non-supported pool to CONFIG_DB + st.config(dut, + 'sonic-db-cli CONFIG_DB HSET "BUFFER_POOL|{}" ' + '"type" "ingress" "mode" "dynamic" "size" "{}"'.format(bad_pool, EXPECTED_POOL_SIZE), + skip_error_check=True) + st.wait(2) + + # Verify it is NOT present in ASIC_DB (no OID in name map) + oid = _get_pool_oid(dut, bad_pool) + st.log(" ASIC_DB OID for '{}': '{}'".format(bad_pool, oid)) + if oid and oid not in ('', '0', 'oid:0x0'): + fail_msgs.append( + "Ingress pool '{}' unexpectedly got ASIC_DB OID='{}' — " + "ingress pool should be rejected".format(bad_pool, oid)) + + # Cleanup: remove the test entry from CONFIG_DB + st.config(dut, + 'sonic-db-cli CONFIG_DB DEL "BUFFER_POOL|{}"'.format(bad_pool), + skip_error_check=True) + st.wait(1) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', + 'Ingress pool not-supported check FAILED — see above') + else: + st.log(" CREATE BUFFER POOL INGRESS — PASSED (not propagated to ASIC_DB)") + st.log("=" * 72) + st.report_pass('msg', + "Ingress buffer pool correctly not propagated to ASIC_DB: PASSED") + + +def test_fx3_buffer_pool_size_mismatch_not_supported(setup_topo): + """Setting buffer pool size to a non-default value must not change ASIC_DB. + + Maps to SAI test_set_buffer_pool_size_mismatch + test_create_buffer_pool_not_supported_wrong_size. + Attempts to set CONFIG_DB pool size to EXPECTED_POOL_SIZE//2 and verifies + ASIC_DB pool size remains at the HW constant. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_size_mismatch_not_supported") + + wrong_size = EXPECTED_POOL_SIZE // 2 + st.log(" Setting CONFIG_DB pool size to {:,} (wrong, expect ASIC to reject)".format( + wrong_size)) + + # Save original + pool_cfg_before = _get_pool_config(dut, DEFAULT_POOL_NAME) + original_size = pool_cfg_before.get('size', str(EXPECTED_POOL_SIZE)) + + # Attempt mismatch set + st.config(dut, + 'sonic-db-cli CONFIG_DB HSET "BUFFER_POOL|{}" "size" "{}"'.format( + DEFAULT_POOL_NAME, wrong_size), + skip_error_check=True) + st.wait(2) + + # Check ASIC_DB — size must still be the HW constant + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + if pool_oid: + asic_attrs = _get_pool_asic_attrs(dut, pool_oid) + st.log(" ASIC_DB pool attrs after mismatch set: {}".format(asic_attrs)) + asic_size_str = asic_attrs.get('SAI_BUFFER_POOL_ATTR_SIZE', '') + try: + asic_size = int(asic_size_str) + except (ValueError, TypeError): + asic_size = None + if asic_size is not None and asic_size != EXPECTED_POOL_SIZE: + fail_msgs.append( + "ASIC_DB pool size={} after mismatch set, expected {:,} — " + "mismatch value should be rejected".format(asic_size, EXPECTED_POOL_SIZE)) + else: + fail_msgs.append("Could not resolve pool OID to verify ASIC_DB") + + # Restore original size + st.config(dut, + 'sonic-db-cli CONFIG_DB HSET "BUFFER_POOL|{}" "size" "{}"'.format( + DEFAULT_POOL_NAME, original_size), + skip_error_check=True) + st.wait(2) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', 'Buffer pool size mismatch check FAILED — see above') + else: + st.log(" BUFFER POOL SIZE MISMATCH — PASSED (ASIC_DB size unchanged)") + st.log("=" * 72) + st.report_pass('msg', + "Buffer pool size mismatch correctly rejected by ASIC: PASSED") + + +# =========================================================================== +# Buffer Pool Stats — cells consistency and clear tests +# =========================================================================== + +def test_fx3_buffer_pool_stats_cells_consistent(setup_topo): + """watermark_bytes is divisible by CELL_SIZE_BYTES (cell-aligned). + + Maps to SAI test_watermark_cells_consistent_with_bytes. + + Note: SAI_BUFFER_POOL_STAT_WATERMARK_CELLS, CURR_OCCUPANCY_BYTES, and + CURR_OCCUPANCY_CELLS are not exported to COUNTERS_DB by SONiC today. + Only WATERMARK_BYTES is available; cell-alignment serves as the equivalent + consistency check (bytes % CELL_SIZE == 0 ↔ bytes / CELL_SIZE is integral). + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_stats_cells_consistent") + + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + if not pool_oid or pool_oid in ('0', 'oid:0x0'): + st.report_fail('msg', 'Buffer pool stats cells check FAILED — no pool OID') + return + + stats = _get_pool_stats(dut, pool_oid) + if not stats: + st.report_fail('msg', 'Buffer pool stats cells check FAILED — no COUNTERS_DB entries') + return + + wm_bytes_str = stats.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') + try: + wm_bytes = int(wm_bytes_str) + except (ValueError, TypeError) as e: + st.report_fail('msg', + 'Buffer pool stats cells check FAILED — non-integer watermark_bytes: {}'.format(e)) + return + + implied_cells = wm_bytes // CELL_SIZE_BYTES + st.log(" watermark_bytes={:,} implied_cells={:,} CELL_SIZE={}".format( + wm_bytes, implied_cells, CELL_SIZE_BYTES)) + + if wm_bytes % CELL_SIZE_BYTES != 0: + fail_msgs.append( + "watermark_bytes({}) % CELL_SIZE({}) = {} != 0 — not cell-aligned".format( + wm_bytes, CELL_SIZE_BYTES, wm_bytes % CELL_SIZE_BYTES)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', + 'Buffer pool stats cells consistency FAILED ({} failures) — see above'.format( + len(fail_msgs))) + else: + st.log(" BUFFER POOL STATS CELLS CONSISTENT — PASSED") + st.log(" watermark_bytes={:,} is cell-aligned (implied {} cells)".format( + wm_bytes, implied_cells)) + st.log("=" * 72) + st.report_pass('msg', + "Buffer pool stats cells consistent: watermark_bytes={:,} " + "is cell-aligned (implied {} cells): PASSED".format(wm_bytes, implied_cells)) + + +def test_fx3_buffer_pool_stats_repeated_reads_consistent(setup_topo): + """Two consecutive COUNTERS_DB reads must both be non-negative, cell-aligned, + and watermark must be monotonically non-decreasing. + + Maps to SAI test_repeated_reads_are_consistent. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_stats_repeated_reads_consistent") + + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + if not pool_oid or pool_oid in ('0', 'oid:0x0'): + st.report_fail('msg', 'Repeated reads check FAILED — no pool OID') + return + + stats1 = _get_pool_stats(dut, pool_oid) + st.wait(1) + stats2 = _get_pool_stats(dut, pool_oid) + + for label, stats in [('read1', stats1), ('read2', stats2)]: + wm_str = stats.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') + try: + wm = int(wm_str) + except (ValueError, TypeError): + fail_msgs.append("{} watermark='{}' not an integer".format(label, wm_str)) + continue + st.log(" {} watermark_bytes = {:,}".format(label, wm)) + if wm < 0: + fail_msgs.append("{} watermark_bytes={} is negative".format(label, wm)) + if wm % CELL_SIZE_BYTES != 0: + fail_msgs.append("{} watermark_bytes={} not cell-aligned".format(label, wm)) + + if not fail_msgs: + try: + wm1 = int(stats1.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0')) + wm2 = int(stats2.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0')) + if wm2 < wm1: + fail_msgs.append( + "Watermark decreased between reads: read1={:,} read2={:,} " + "(peak counter must be monotonically non-decreasing)".format(wm1, wm2)) + except (ValueError, TypeError): + pass + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', + 'Repeated reads consistency FAILED ({} failures) — see above'.format(len(fail_msgs))) + else: + st.log(" BUFFER POOL STATS REPEATED READS — PASSED") + st.log("=" * 72) + st.report_pass('msg', + "Buffer pool stats repeated reads: both non-negative, cell-aligned, " + "watermark non-decreasing: PASSED") + + +def test_fx3_buffer_pool_stats_clear(setup_topo): + """sonic-db-cli COUNTERS_DB watermark clear succeeds and resets watermark. + + Maps to SAI tests: + test_clear_stats_does_not_raise + test_clear_stats_returned_watermark_is_cell_aligned + test_clear_stats_returned_occupancy_is_cell_aligned + test_clear_stats_resets_watermark + test_clear_stats_idempotent + test_clear_stats_second_watermark_is_nonnegative + + SONiC mechanism: 'watermarkstat -c' or 'show watermark queue ...' triggers + a clear of COUNTERS_DB watermark entries. Here we use 'watermarkstat -c' + to reset watermarks and then re-read COUNTERS_DB to verify. + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_stats_clear") + + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + if not pool_oid or pool_oid in ('0', 'oid:0x0'): + st.report_fail('msg', 'Buffer pool stats clear check FAILED — no pool OID') + return + + # Read before clear + stats_before = _get_pool_stats(dut, pool_oid) + wm_before_str = stats_before.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') + try: + wm_before = int(wm_before_str) + except (ValueError, TypeError): + wm_before = 0 + st.log(" Watermark before clear: {:,} bytes".format(wm_before)) + + # Step 1: clear watermarks (first clear) + st.config(dut, "watermarkstat -c -t buffer_pool", skip_error_check=True) + st.wait(2) + + # Read after first clear + stats_after1 = _get_pool_stats(dut, pool_oid) + wm_after1_str = stats_after1.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') + try: + wm_after1 = int(wm_after1_str) + except (ValueError, TypeError): + wm_after1 = 0 + + st.log(" Watermark after first clear: {:,} bytes".format(wm_after1)) + + # Step 1 assertions + if wm_after1 < 0: + fail_msgs.append("After first clear: watermark={} is negative".format(wm_after1)) + if wm_after1 % CELL_SIZE_BYTES != 0: + fail_msgs.append("After first clear: watermark={} not cell-aligned".format(wm_after1)) + if wm_after1 > wm_before: + fail_msgs.append( + "After clear: watermark {:,} > pre-clear {:,} — " + "HW peak counter may not have been reset".format(wm_after1, wm_before)) + + # Step 2: second clear (idempotent) + st.config(dut, "watermarkstat -c -t buffer_pool", skip_error_check=True) + st.wait(2) + + stats_after2 = _get_pool_stats(dut, pool_oid) + wm_after2_str = stats_after2.get('SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') + try: + wm_after2 = int(wm_after2_str) + except (ValueError, TypeError): + wm_after2 = 0 + + st.log(" Watermark after second clear: {:,} bytes".format(wm_after2)) + + if wm_after2 < 0: + fail_msgs.append("After second clear: watermark={} is negative".format(wm_after2)) + if wm_after2 % CELL_SIZE_BYTES != 0: + fail_msgs.append("After second clear: watermark={} not cell-aligned".format(wm_after2)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', + 'Buffer pool stats clear FAILED ({} failures) — see above'.format(len(fail_msgs))) + else: + st.log(" BUFFER POOL STATS CLEAR — ALL CHECKS PASSED") + st.log(" First clear: watermark={:,} (cell-aligned, >= 0, <= pre-clear)".format(wm_after1)) + st.log(" Second clear (idempotent): watermark={:,} (cell-aligned, >= 0)".format(wm_after2)) + st.log("=" * 72) + st.report_pass('msg', + "Buffer pool stats clear PASSED: watermark reset after clear; " + "cell-aligned; idempotent second clear: PASSED") + + +# --------------------------------------------------------------------------- +# Flex counter poll interval helpers. +# +# counterpoll watermark interval is the supported SONiC control surface for +# watermark poll timing. Keep the direct FLEX_COUNTER_DB update as a +# compatibility nudge for images that still expose per-stat group rows. +# --------------------------------------------------------------------------- +_FLEX_COUNTER_DB_NUM = 5 +_FLEX_GROUP_KEY = 'FLEX_COUNTER_GROUP_TABLE:BUFFER_POOL_WATERMARK_STAT_COUNTER' +_DEFAULT_POLL_MS = 60000 # SONiC default (60 s) +_TEST_POLL_MS = 5000 # shortened during traffic tests (5 s) +_POLL_SETTLE_SECS = 12 # wait after shortening interval for a poll to fire + + +def _set_watermark_poll_interval(dut_h, interval_ms): + """Set watermark flex counter poll interval (ms).""" + st.config(dut_h, "counterpoll watermark interval {}".format(interval_ms), + skip_error_check=True) + st.config(dut_h, + 'redis-cli -n {} HSET "{}" POLL_INTERVAL {}'.format( + _FLEX_COUNTER_DB_NUM, _FLEX_GROUP_KEY, interval_ms), + skip_error_check=True) + st.log(" Flex counter poll interval set to {}ms".format(interval_ms)) + + +def _restore_watermark_poll_interval(dut_h): + """Restore default watermark flex counter poll interval.""" + st.config(dut_h, "counterpoll watermark interval {}".format(_DEFAULT_POLL_MS), + skip_error_check=True) + st.config(dut_h, + 'redis-cli -n {} HSET "{}" POLL_INTERVAL {}'.format( + _FLEX_COUNTER_DB_NUM, _FLEX_GROUP_KEY, _DEFAULT_POLL_MS), + skip_error_check=True) + st.log(" Flex counter poll interval restored to default ({}ms)".format(_DEFAULT_POLL_MS)) + + +# =========================================================================== +# Test cases — Buffer pool watermark under traffic +# =========================================================================== + +@pytest.mark.smoke_non_breakout +def test_fx3_buffer_pool_watermark_nonzero_under_traffic(setup_topo): + """SAI_BUFFER_POOL_STAT_WATERMARK_BYTES is positive after congesting traffic. + + Sends 90%-rate IPv4 traffic on Q1 (DSCP 6) from all available ingress + ports to congest the egress buffer pool, then reads + SAI_BUFFER_POOL_STAT_WATERMARK_BYTES from: + - USER_WATERMARKS: (cleared by 'watermarkstat -c') + - PERSISTENT_WATERMARKS: (never cleared, truly sticky) + + Topology-aware: uses all ingress roles present in port_info (1 in + breakout/peer_link, 2 in ixia). 90% per ingress stream oversubscribes + the egress link in all topologies (100G ingress vs <=100G egress). + + Note: PERIODIC_WATERMARKS is not validated here as it is cleared + by the flex counter poll immediately after traffic stops (timing-sensitive). + USER_WATERMARKS is read while traffic is still active for the same reason. + PERSISTENT_WATERMARKS can carry a stale peak from an earlier test, so it is + only treated as fresh evidence when it increases over the pre-traffic + baseline. + + On FX3 breakout images the COUNTERS_DB buffer-pool watermark can stay flat + even while ASIC queue/peak counters prove live congestion. In that case, + the test accepts DCHAL peak watermark evidence, but only when Q1 also shows + real egress/drop traffic in the same run. This prevents a stale persistent + watermark from masking a traffic failure. + + Validates: + 1. USER_WATERMARKS becomes positive, or PERSISTENT_WATERMARKS increases + 2. Positive watermark_bytes values are cell-aligned + 3. Positive watermark_bytes values are <= EXPECTED_POOL_SIZE + """ + fail_msgs = [] + st.banner("test_fx3_buffer_pool_watermark_nonzero_under_traffic") + + # ── Step 1: Resolve pool OID ────────────────────────────────────────── + pool_oid = _get_pool_oid(dut, DEFAULT_POOL_NAME) + if not pool_oid or pool_oid in ('0', 'oid:0x0'): + st.report_fail('msg', + 'Watermark-under-traffic FAILED — no pool OID in COUNTERS_DB') + return + + _ingress_roles = sorted(k for k in port_info if k not in ('egress', 'egress_sink')) + target_queue = 1 + egress_intf = port_info['egress'] + dscp = QUEUE_TO_DSCP[target_queue] # Q1 / TC1 + st.log(" Ingress roles: {} Topology: {}".format(_ingress_roles, topo_mode)) + st.log(" Streams: Q1 DSCP={} | rate={}% each | frame={}B | dur={}s | " + "{}×ingress->egress".format( + dscp, STREAM_RATE_PCT, PKT_SIZE, TRAFFIC_DURATION, len(_ingress_roles))) + + stream_handles = [] + + traffic_started = False + wm_user_before = 0 + wm_true_before = 0 + wm_user = 0 + wm_true = 0 + q_before = {} + q_mid = {} + q_after = {} + intf_before = {} + intf_after = {} + peak_data = None + try: + # ── Step 2: Shorten flex poll interval so watermark updates quickly ─ + _set_watermark_poll_interval(dut, _TEST_POLL_MS) + st.wait(_POLL_SETTLE_SECS) # let one clean poll fire at the new rate + + # Clear USER/PERIODIC watermark state so the post-traffic result is + # fresh. PERSISTENT_WATERMARKS is sticky by design and may remain set. + st.config(dut, "watermarkstat -c -t buffer_pool", skip_error_check=True) + st.wait(2) + + # Clear DUT/DCHAL counters so this run has its own traffic proof. + deploy_dchal_helper(dut) + clear_dut_counters(dut) + dchal_clear_counters(dut, egress_intf) + intf_before = get_intf_counters(dut, port_info.values()) + q_before = get_dchal_queue_counters( + dut, egress_intf, label="BEFORE buffer watermark traffic") + + # ── Step 3: Baselines ───────────────────────────────────────────── + wm_user_before = int( + (_get_pool_stats_persistent(dut, pool_oid) or {}).get( + 'SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') or '0') + wm_true_before = int( + (_get_pool_stats_true_persistent(dut, pool_oid) or {}).get( + 'SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') or '0') + st.log(" Baseline — USER: {:,} PERSISTENT: {:,} bytes".format( + wm_user_before, wm_true_before)) + + # ── Step 4: Send oversubscribing traffic from all ingress ports ─── + tg.tg_traffic_control(action='clear_stats') + for role in _ingress_roles: + dut_mac = get_dut_mac(dut, port_info[role]) + result = tg.tg_traffic_config( + mode='create', port_handle=tg_ph[role], + l3_protocol='ipv4', l4_protocol='icmp', + ip_src_addr=IXIA_IPV4[role], + ip_dst_addr=IXIA_EGRESS_IP, + mac_dst=dut_mac, + ip_dscp=dscp, ip_ttl=64, + frame_size=PKT_SIZE, + rate_percent=STREAM_RATE_PCT, + transmit_mode='continuous', + high_speed_result_analysis=0, + ) + stream_handles.append(result) + tg.tg_traffic_control(action='apply') + tg.tg_traffic_control(action='run') + traffic_started = True + + # ── Step 5: Wait for USER/PERSISTENT watermark tables to settle while + # traffic is still active. Reading after stop can race with a poll that + # observes zero depth and overwrites USER_WATERMARKS. + st.wait(max(TRAFFIC_DURATION, _POLL_SETTLE_SECS)) + + # ── Step 6: Read live ASIC queue state plus USER/PERSISTENT tables ─ + q_mid = get_dchal_queue_counters( + dut, egress_intf, label="MID buffer watermark traffic") + wm_user = int( + (_get_pool_stats_persistent(dut, pool_oid) or {}).get( + 'SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') or '0') + wm_true = int( + (_get_pool_stats_true_persistent(dut, pool_oid) or {}).get( + 'SAI_BUFFER_POOL_STAT_WATERMARK_BYTES', '0') or '0') + st.log(" After traffic — USER_WATERMARKS: {:,} bytes".format(wm_user)) + st.log(" After traffic — PERSISTENT_WATERMARKS: {:,} bytes".format(wm_true)) + + tg.tg_traffic_control(action='stop') + traffic_started = False + st.wait(2) + + q_after = get_dchal_queue_counters( + dut, egress_intf, label="AFTER buffer watermark traffic") + peak_data = dchal_peak_stats( + dut, egress_intf, label="buffer watermark traffic") + intf_after = get_intf_counters(dut, port_info.values()) + # Do not call tg_traffic_stats(mode='aggregate') here. Some IxNetwork + # HLTAPI builds fatal-abort with "can't read matched_str", which marks + # the whole rerun TGenFail and hides the DUT-side watermark evidence. + + finally: + # ── Always stop traffic, restore poll interval, and remove streams ─ + if traffic_started: + try: + tg.tg_traffic_control(action='stop') + st.wait(2) + except Exception: + pass + _restore_watermark_poll_interval(dut) + for sr in stream_handles: + try: + sid = sr.get('stream_id') if sr else None + if sid: + tg.tg_traffic_config(mode='remove', stream_id=sid) + except Exception: + pass + + # ── Step 7: Assertions ──────────────────────────────────────────────── + st.log("=" * 72) + st.log(" USER_WATERMARKS: {:,} bytes".format(wm_user)) + st.log(" PERSISTENT_WATERMARKS: {:,} bytes".format(wm_true)) + wm_user_delta = wm_user - wm_user_before + wm_true_delta = wm_true - wm_true_before + st.log(" USER delta: {:,} bytes".format(wm_user_delta)) + st.log(" PERSISTENT delta: {:,} bytes".format(wm_true_delta)) + + report_intf_counters(port_info, intf_before, intf_after) + + q_deltas = {} + q_drop_deltas = {} + for qi in range(8): + q_deltas[qi] = ( + q_after.get(qi, {}).get('pkts', 0) + - q_before.get(qi, {}).get('pkts', 0)) + q_drop_deltas[qi] = ( + q_after.get(qi, {}).get('drop_pkts', 0) + - q_before.get(qi, {}).get('drop_pkts', 0)) + report_queue_counters(egress_intf, q_deltas, q_drop_deltas, + source="DCHAL") + report_peak_stats(peak_data, target_queue=target_queue) + + target_egress_pkts = q_deltas.get(target_queue, 0) + target_drop_pkts = q_drop_deltas.get(target_queue, 0) + target_total_pkts = target_egress_pkts + target_drop_pkts + mid_depth_bytes = q_mid.get(target_queue, {}).get('q_depth_bytes', 0) + peak_queue_bytes = 0 + peak_mem_bytes = 0 + if peak_data: + peak_queue_bytes = ( + peak_data.get('uc_peak', [0] * 8)[target_queue] * CELL_SIZE_BYTES) + peak_mem_bytes = peak_data.get('mem_bytes', 0) + + st.log(" Q{} traffic proof: egress={:,} pkts drops={:,} pkts " + "mid_depth={:,} bytes peak_queue={:,} bytes peak_mem={:,} bytes".format( + target_queue, target_egress_pkts, target_drop_pkts, + mid_depth_bytes, peak_queue_bytes, peak_mem_bytes)) + + fresh_pool_wm = wm_user_delta > 0 or wm_true_delta > 0 + asic_peak_wm = ( + peak_queue_bytes > 0 or peak_mem_bytes > 0 or mid_depth_bytes > 0) + traffic_seen = target_total_pkts > 0 + + if not fresh_pool_wm: + if asic_peak_wm and traffic_seen: + st.log(" WARNING: COUNTERS_DB buffer-pool watermark did not " + "increase in this run; accepting DCHAL ASIC peak " + "watermark plus Q{} traffic as fresh FX3 evidence.".format( + target_queue)) + else: + fail_msgs.append( + "No fresh buffer-pool watermark observed under traffic: " + "USER delta={:,}, PERSISTENT delta={:,}; DCHAL peak=" + "{:,} bytes, mem_peak={:,} bytes, mid_depth={:,} bytes, " + "Q{} traffic={:,} pkts".format( + wm_user_delta, wm_true_delta, peak_queue_bytes, + peak_mem_bytes, mid_depth_bytes, target_queue, + target_total_pkts)) + if wm_true_delta < 0: + fail_msgs.append( + "PERSISTENT_WATERMARKS decreased from {:,} to {:,}".format( + wm_true_before, wm_true)) + if not traffic_seen: + fail_msgs.append( + "No Q{} egress/drop traffic observed by DCHAL; cannot prove the " + "buffer pool was exercised".format( + target_queue)) + + for label, wm in [ + ('USER_WATERMARKS', wm_user), + ('PERSISTENT_WATERMARKS', wm_true), + ('DCHAL_Q{}_PEAK'.format(target_queue), peak_queue_bytes), + ]: + if wm > 0 and wm % CELL_SIZE_BYTES != 0: + fail_msgs.append( + "{} watermark_bytes={:,} not cell-aligned (CELL_SIZE_BYTES={})".format( + label, wm, CELL_SIZE_BYTES)) + if wm > EXPECTED_POOL_SIZE: + fail_msgs.append( + "{} watermark_bytes={:,} > EXPECTED_POOL_SIZE={:,}".format( + label, wm, EXPECTED_POOL_SIZE)) + + st.log("=" * 72) + if fail_msgs: + for i, msg in enumerate(fail_msgs, 1): + st.log(" [{:02d}] {}".format(i, msg)) + st.log("=" * 72) + st.report_fail('msg', + 'Watermark-nonzero-under-traffic FAILED ({} failures) — ' + 'see above'.format(len(fail_msgs))) + else: + st.log(" WATERMARK NONZERO UNDER TRAFFIC — PASSED") + st.log(" user={:,} delta={:,} persistent={:,} delta={:,} bytes " + "dchal_q{}={:,} bytes dchal_mem={:,} bytes " + "(cell-aligned, within bounds)".format( + wm_user, wm_user_delta, wm_true, wm_true_delta, + target_queue, peak_queue_bytes, peak_mem_bytes)) + st.log("=" * 72) + st.report_pass('msg', + 'Watermark-nonzero-under-traffic PASSED: ' + 'user={:,} bytes (delta={:,}), persistent={:,} bytes ' + '(delta={:,}), dchal_q{}={:,} bytes, dchal_mem={:,} bytes, ' + 'cell-aligned, within bounds'.format( + wm_user, wm_user_delta, wm_true, wm_true_delta, + target_queue, peak_queue_bytes, peak_mem_bytes)) diff --git a/sonic-mgmt/spytest/tests/cisco/fx3/qos/config_db.json b/sonic-mgmt/spytest/tests/cisco/fx3/qos/config_db.json new file mode 100644 index 00000000000..0804f337677 --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/fx3/qos/config_db.json @@ -0,0 +1,5081 @@ +{ + "ASIC_SENSORS": { + "ASIC_SENSORS_POLLER_INTERVAL": { + "interval": "10" + }, + "ASIC_SENSORS_POLLER_STATUS": { + "admin_status": "enable" + } + }, + "AUTO_TECHSUPPORT": { + "GLOBAL": { + "available_mem_threshold": "10.0", + "max_core_limit": "5.0", + "max_techsupport_limit": "10.0", + "min_available_mem": "200", + "rate_limit_interval": "180", + "since": "2 days ago", + "state": "enabled" + } + }, + "AUTO_TECHSUPPORT_FEATURE": { + "apm": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "bgp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "database": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "dhcp_relay": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "eventd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "gnmi": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "lldp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "macsec": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mgmt-framework": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "mux": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "nat": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "pmon": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "radv": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "sflow": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "snmp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "stp": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "swss": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "syncd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + }, + "teamd": { + "available_mem_threshold": "10.0", + "rate_limit_interval": "600", + "state": "enabled" + } + }, + "BANNER_MESSAGE": { + "global": { + "login": "Debian GNU/Linux 11", + "logout": "", + "motd": "You are on\n ____ ___ _ _ _ ____\n / ___| / _ \\| \\ | (_)/ ___|\n \\___ \\| | | | \\| | | |\n ___) | |_| | |\\ | | |___\n |____/ \\___/|_| \\_|_|\\____|\n\n-- Software for Open Networking in the Cloud --\n\nUnauthorized access and/or use are prohibited.\nAll access and/or use are subject to monitoring.\n\nHelp: https://sonic-net.github.io/SONiC/\n\n", + "state": "disabled" + } + }, + "BGP_DEVICE_GLOBAL": { + "STATE": { + "idf_isolation_state": "unisolated", + "tsa_enabled": "false" + } + }, + "BUFFER_POOL": { + "egress_lossy_pool": { + "mode": "dynamic", + "size": "39022464", + "type": "egress" + } + }, + "BUFFER_PROFILE": { + "egress_lossy_profile_dwrr": { + "dynamic_th": "27", + "pool": "egress_lossy_pool", + "size": "0" + }, + "egress_lossy_profile_sp": { + "dynamic_th": "27", + "pool": "egress_lossy_pool", + "size": "0" + } + }, + "BUFFER_QUEUE": { + "Ethernet1_1|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_1|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_1|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_1|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_1|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_1|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_1|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_1|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_2|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_2|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_2|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_2|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_2|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_2|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_2|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_2|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_3|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_3|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_3|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_3|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_3|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_3|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_3|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_3|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_4|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_4|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_4|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_4|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_4|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_4|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_4|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_4|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_5|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_5|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_5|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_5|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_5|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_5|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_5|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_5|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_6|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_6|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_6|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_6|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_6|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_6|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_6|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_6|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_7|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_7|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_7|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_7|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_7|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_7|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_7|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_7|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_8|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_8|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_8|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_8|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_8|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_8|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_8|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_8|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_9|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_9|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_9|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_9|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_9|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_9|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_9|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_9|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_10|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_10|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_10|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_10|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_10|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_10|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_10|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_10|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_11|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_11|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_11|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_11|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_11|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_11|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_11|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_11|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_12|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_12|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_12|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_12|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_12|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_12|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_12|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_12|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_13|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_13|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_13|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_13|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_13|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_13|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_13|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_13|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_14|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_14|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_14|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_14|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_14|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_14|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_14|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_14|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_15|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_15|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_15|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_15|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_15|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_15|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_15|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_15|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_16|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_16|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_16|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_16|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_16|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_16|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_16|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_16|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_17|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_17|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_17|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_17|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_17|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_17|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_17|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_17|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_18|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_18|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_18|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_18|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_18|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_18|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_18|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_18|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_19|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_19|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_19|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_19|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_19|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_19|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_19|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_19|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_20|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_20|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_20|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_20|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_20|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_20|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_20|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_20|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_21|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_21|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_21|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_21|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_21|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_21|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_21|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_21|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_22|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_22|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_22|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_22|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_22|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_22|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_22|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_22|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_23|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_23|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_23|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_23|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_23|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_23|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_23|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_23|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_24|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_24|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_24|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_24|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_24|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_24|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_24|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_24|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_25|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_25|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_25|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_25|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_25|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_25|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_25|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_25|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_26|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_26|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_26|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_26|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_26|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_26|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_26|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_26|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_27|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_27|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_27|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_27|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_27|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_27|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_27|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_27|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_28|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_28|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_28|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_28|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_28|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_28|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_28|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_28|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_29|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_29|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_29|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_29|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_29|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_29|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_29|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_29|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_30|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_30|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_30|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_30|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_30|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_30|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_30|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_30|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_31|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_31|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_31|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_31|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_31|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_31|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_31|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_31|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_32|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_32|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_32|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_32|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_32|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_32|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_32|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_32|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_33|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_33|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_33|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_33|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_33|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_33|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_33|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_33|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_34|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_34|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_34|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_34|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_34|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_34|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_34|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_34|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_35|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_35|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_35|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_35|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_35|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_35|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_35|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_35|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_36|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_36|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_36|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_36|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_36|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_36|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_36|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_36|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_37|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_37|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_37|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_37|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_37|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_37|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_37|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_37|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_38|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_38|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_38|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_38|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_38|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_38|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_38|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_38|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_39|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_39|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_39|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_39|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_39|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_39|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_39|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_39|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_40|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_40|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_40|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_40|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_40|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_40|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_40|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_40|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_41|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_41|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_41|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_41|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_41|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_41|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_41|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_41|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_42|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_42|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_42|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_42|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_42|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_42|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_42|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_42|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_43|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_43|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_43|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_43|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_43|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_43|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_43|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_43|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_44|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_44|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_44|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_44|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_44|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_44|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_44|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_44|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_45|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_45|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_45|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_45|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_45|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_45|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_45|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_45|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_46|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_46|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_46|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_46|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_46|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_46|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_46|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_46|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_47|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_47|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_47|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_47|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_47|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_47|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_47|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_47|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_48|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_48|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_48|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_48|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_48|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_48|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_48|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_48|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_49|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_49|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_49|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_49|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_49|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_49|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_49|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_49|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_50|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_50|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_50|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_50|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_50|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_50|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_50|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_50|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_51|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_51|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_51|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_51|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_51|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_51|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_51|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_51|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_52|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_52|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_52|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_52|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_52|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_52|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_52|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_52|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_53|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_53|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_53|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_53|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_53|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_53|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_53|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_53|7": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_54|0": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_54|1": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_54|2": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_54|3": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_54|4": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_54|5": { + "profile": "egress_lossy_profile_dwrr" + }, + "Ethernet1_54|6": { + "profile": "egress_lossy_profile_sp" + }, + "Ethernet1_54|7": { + "profile": "egress_lossy_profile_sp" + } + }, + "CABLE_LENGTH": { + "AZURE": { + "Ethernet1_1": "5m", + "Ethernet1_10": "5m", + "Ethernet1_11": "5m", + "Ethernet1_12": "5m", + "Ethernet1_13": "5m", + "Ethernet1_14": "5m", + "Ethernet1_15": "5m", + "Ethernet1_16": "5m", + "Ethernet1_17": "5m", + "Ethernet1_18": "5m", + "Ethernet1_19": "5m", + "Ethernet1_2": "5m", + "Ethernet1_20": "5m", + "Ethernet1_21": "5m", + "Ethernet1_22": "5m", + "Ethernet1_23": "5m", + "Ethernet1_24": "5m", + "Ethernet1_25": "5m", + "Ethernet1_26": "5m", + "Ethernet1_27": "5m", + "Ethernet1_28": "5m", + "Ethernet1_29": "5m", + "Ethernet1_3": "5m", + "Ethernet1_30": "5m", + "Ethernet1_31": "5m", + "Ethernet1_32": "5m", + "Ethernet1_33": "5m", + "Ethernet1_34": "5m", + "Ethernet1_35": "5m", + "Ethernet1_36": "5m", + "Ethernet1_37": "5m", + "Ethernet1_38": "5m", + "Ethernet1_39": "5m", + "Ethernet1_4": "5m", + "Ethernet1_40": "5m", + "Ethernet1_41": "5m", + "Ethernet1_42": "5m", + "Ethernet1_43": "5m", + "Ethernet1_44": "5m", + "Ethernet1_45": "5m", + "Ethernet1_46": "5m", + "Ethernet1_47": "5m", + "Ethernet1_48": "5m", + "Ethernet1_49": "5m", + "Ethernet1_5": "5m", + "Ethernet1_50": "5m", + "Ethernet1_51": "5m", + "Ethernet1_52": "5m", + "Ethernet1_53": "5m", + "Ethernet1_54": "5m", + "Ethernet1_6": "5m", + "Ethernet1_7": "5m", + "Ethernet1_8": "5m", + "Ethernet1_9": "5m" + } + }, + "CRM": { + "Config": { + "acl_counter_high_threshold": "85", + "acl_counter_low_threshold": "70", + "acl_counter_threshold_type": "percentage", + "acl_entry_high_threshold": "85", + "acl_entry_low_threshold": "70", + "acl_entry_threshold_type": "percentage", + "acl_group_high_threshold": "85", + "acl_group_low_threshold": "70", + "acl_group_threshold_type": "percentage", + "acl_table_high_threshold": "85", + "acl_table_low_threshold": "70", + "acl_table_threshold_type": "percentage", + "dnat_entry_high_threshold": "85", + "dnat_entry_low_threshold": "70", + "dnat_entry_threshold_type": "percentage", + "fdb_entry_high_threshold": "85", + "fdb_entry_low_threshold": "70", + "fdb_entry_threshold_type": "percentage", + "ipmc_entry_high_threshold": "85", + "ipmc_entry_low_threshold": "70", + "ipmc_entry_threshold_type": "percentage", + "ipv4_neighbor_high_threshold": "85", + "ipv4_neighbor_low_threshold": "70", + "ipv4_neighbor_threshold_type": "percentage", + "ipv4_nexthop_high_threshold": "85", + "ipv4_nexthop_low_threshold": "70", + "ipv4_nexthop_threshold_type": "percentage", + "ipv4_route_high_threshold": "85", + "ipv4_route_low_threshold": "70", + "ipv4_route_threshold_type": "percentage", + "ipv6_neighbor_high_threshold": "85", + "ipv6_neighbor_low_threshold": "70", + "ipv6_neighbor_threshold_type": "percentage", + "ipv6_nexthop_high_threshold": "85", + "ipv6_nexthop_low_threshold": "70", + "ipv6_nexthop_threshold_type": "percentage", + "ipv6_route_high_threshold": "85", + "ipv6_route_low_threshold": "70", + "ipv6_route_threshold_type": "percentage", + "mpls_inseg_high_threshold": "85", + "mpls_inseg_low_threshold": "70", + "mpls_inseg_threshold_type": "percentage", + "mpls_nexthop_high_threshold": "85", + "mpls_nexthop_low_threshold": "70", + "mpls_nexthop_threshold_type": "percentage", + "nexthop_group_high_threshold": "85", + "nexthop_group_low_threshold": "70", + "nexthop_group_member_high_threshold": "85", + "nexthop_group_member_low_threshold": "70", + "nexthop_group_member_threshold_type": "percentage", + "nexthop_group_threshold_type": "percentage", + "polling_interval": "300", + "snat_entry_high_threshold": "85", + "snat_entry_low_threshold": "70", + "snat_entry_threshold_type": "percentage" + } + }, + "DEVICE_METADATA": { + "localhost": { + "buffer_model": "traditional", + "default_bgp_status": "up", + "default_pfcwd_status": "enable", + "hwsku": "Cisco-N9K-C93108TC-FX3", + "mac": "80:61:32:1A:4E:B0", + "platform": "x86_64-N9K-C93108TC-FX3-r0", + "timezone": "UTC" + } + }, + "DSCP_TO_TC_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "10": "0", + "11": "0", + "12": "0", + "13": "0", + "14": "0", + "15": "0", + "16": "0", + "17": "0", + "18": "0", + "19": "0", + "2": "2", + "20": "0", + "21": "0", + "22": "0", + "23": "0", + "24": "0", + "25": "0", + "26": "0", + "27": "0", + "28": "0", + "29": "0", + "3": "3", + "30": "0", + "31": "0", + "32": "0", + "33": "0", + "34": "0", + "35": "0", + "36": "0", + "37": "0", + "38": "0", + "39": "0", + "4": "4", + "40": "0", + "41": "0", + "42": "0", + "43": "0", + "44": "0", + "45": "0", + "46": "5", + "47": "1", + "48": "6", + "49": "7", + "5": "2", + "50": "1", + "51": "1", + "52": "1", + "53": "1", + "54": "1", + "55": "1", + "56": "1", + "57": "1", + "58": "1", + "59": "1", + "6": "1", + "60": "1", + "61": "1", + "62": "1", + "63": "1", + "7": "1", + "8": "0", + "9": "0" + } + }, + "FEATURE": { + "apm": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "bgp": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "database": { + "auto_restart": "always_enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "always_enabled", + "support_syslog_rate_limit": "true" + }, + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "eventd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "gnmi": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "lldp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "macsec": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "disabled", + "support_syslog_rate_limit": "True" + }, + "mgmt-framework": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "mux": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "always_disabled", + "support_syslog_rate_limit": "true" + }, + "nat": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "pmon": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "radv": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "sflow": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "disabled", + "support_syslog_rate_limit": "true" + }, + "snmp": { + "auto_restart": "enabled", + "delayed": "True", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "stp": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "swss": { + "auto_restart": "enabled", + "check_up_status": "false", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "syncd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + }, + "teamd": { + "auto_restart": "enabled", + "delayed": "False", + "has_global_scope": "False", + "has_per_asic_scope": "True", + "high_mem_alert": "disabled", + "state": "enabled", + "support_syslog_rate_limit": "true" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "false", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + }, + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable" + }, + "RIF": { + "FLEX_COUNTER_STATUS": "enable" + } + }, + "INTERFACE": { + "Ethernet1_49": {}, + "Ethernet1_49|10.10.10.1/24": {}, + "Ethernet1_50": {}, + "Ethernet1_50|10.10.11.1/24": {}, + "Ethernet1_51": {}, + "Ethernet1_51|20.20.20.1/24": {} + }, + "KDUMP": { + "config": { + "enabled": "true", + "memory": "0M-2G:256M,2G-4G:320M,4G-8G:384M,8G-:448M", + "num_dumps": "3" + } + }, + "LOGGER": { + "SAI_API_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ARS_PROFILE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BFD": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BMTOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BRIDGE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_BUFFER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ACL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_DIRECTION_LOOKUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_ENI": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_INBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_METER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_CA_TO_PA": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_OUTBOUND_ROUTING": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_PA_VALIDATION": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VIP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DASH_VNET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DEBUG_COUNTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_DTEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_GENERIC_PROGRAMMABLE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HASH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_HOSTIF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPMC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_IPSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ISOLATION_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_L2MC_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_LAG": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MACSEC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MCAST_FDB": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MIRROR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MPLS": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_MY_MAC": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NAT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEIGHBOR": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_NEXT_HOP_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_POLICER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QOS_MAP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_QUEUE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_ROUTER_INTERFACE": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_RPF_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SAMPLEPACKET": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SCHEDULER_GROUP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SRV6": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_STP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SWITCH": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_SYSTEM_PORT": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TAM": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TUNNEL": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_TWAMP": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_UDF": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VIRTUAL_ROUTER": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_VLAN": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "SAI_API_WRED": { + "LOGLEVEL": "SAI_LOG_LEVEL_NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "apm": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "bfdsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "buffermgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "coppmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fabricmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fdbsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "fpmsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "gearsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "intfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "ipmmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "nbrmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "neighsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "orchagent": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "portsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "stpd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "stpmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "syncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teammgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "teamsyncd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "telemetry": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tlm_teamd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "tunnelmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vrfmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + }, + "vxlanmgrd": { + "LOGLEVEL": "NOTICE", + "LOGOUTPUT": "SYSLOG" + } + }, + "MAP_PFC_PRIORITY_TO_QUEUE": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "NTP": { + "global": { + "admin_state": "enabled", + "authentication": "disabled", + "dhcp": "enabled", + "server_role": "disabled", + "src_intf": "eth0", + "vrf": "default" + } + }, + "PASSW_HARDENING": { + "POLICIES": { + "digits_class": "true", + "expiration": "180", + "expiration_warning": "15", + "history_cnt": "10", + "len_min": "8", + "lower_class": "true", + "reject_user_passw_match": "true", + "special_class": "true", + "state": "disabled", + "upper_class": "true" + } + }, + "PORT": { + "Ethernet1_1": { + "admin_status": "up", + "alias": "Ethernet1_1", + "autoneg": "on", + "fec": "none", + "index": "0", + "lanes": "1", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_2": { + "admin_status": "up", + "alias": "Ethernet1_2", + "autoneg": "on", + "fec": "none", + "index": "4", + "lanes": "5", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_3": { + "admin_status": "up", + "alias": "Ethernet1_3", + "autoneg": "on", + "fec": "none", + "index": "8", + "lanes": "9", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_4": { + "admin_status": "up", + "alias": "Ethernet1_4", + "autoneg": "on", + "fec": "none", + "index": "12", + "lanes": "13", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_5": { + "admin_status": "up", + "alias": "Ethernet1_5", + "autoneg": "on", + "fec": "none", + "index": "16", + "lanes": "17", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_6": { + "admin_status": "up", + "alias": "Ethernet1_6", + "autoneg": "on", + "fec": "none", + "index": "20", + "lanes": "21", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_7": { + "admin_status": "up", + "alias": "Ethernet1_7", + "autoneg": "on", + "fec": "none", + "index": "24", + "lanes": "25", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_8": { + "admin_status": "up", + "alias": "Ethernet1_8", + "autoneg": "on", + "fec": "none", + "index": "28", + "lanes": "29", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_9": { + "admin_status": "up", + "alias": "Ethernet1_9", + "autoneg": "on", + "fec": "none", + "index": "32", + "lanes": "33", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_10": { + "admin_status": "up", + "alias": "Ethernet1_10", + "autoneg": "on", + "fec": "none", + "index": "36", + "lanes": "37", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_11": { + "admin_status": "up", + "alias": "Ethernet1_11", + "autoneg": "on", + "fec": "none", + "index": "40", + "lanes": "41", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_12": { + "admin_status": "up", + "alias": "Ethernet1_12", + "autoneg": "on", + "fec": "none", + "index": "44", + "lanes": "45", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_13": { + "admin_status": "up", + "alias": "Ethernet1_13", + "autoneg": "on", + "fec": "none", + "index": "48", + "lanes": "49", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_14": { + "admin_status": "up", + "alias": "Ethernet1_14", + "autoneg": "on", + "fec": "none", + "index": "52", + "lanes": "53", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_15": { + "admin_status": "up", + "alias": "Ethernet1_15", + "autoneg": "on", + "fec": "none", + "index": "56", + "lanes": "57", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_16": { + "admin_status": "up", + "alias": "Ethernet1_16", + "autoneg": "on", + "fec": "none", + "index": "60", + "lanes": "61", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_17": { + "admin_status": "up", + "alias": "Ethernet1_17", + "autoneg": "on", + "fec": "none", + "index": "64", + "lanes": "65", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_18": { + "admin_status": "up", + "alias": "Ethernet1_18", + "autoneg": "on", + "fec": "none", + "index": "68", + "lanes": "69", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_19": { + "admin_status": "up", + "alias": "Ethernet1_19", + "autoneg": "on", + "fec": "none", + "index": "72", + "lanes": "73", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_20": { + "admin_status": "up", + "alias": "Ethernet1_20", + "autoneg": "on", + "fec": "none", + "index": "76", + "lanes": "77", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_21": { + "admin_status": "up", + "alias": "Ethernet1_21", + "autoneg": "on", + "fec": "none", + "index": "80", + "lanes": "81", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_22": { + "admin_status": "up", + "alias": "Ethernet1_22", + "autoneg": "on", + "fec": "none", + "index": "84", + "lanes": "85", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_23": { + "admin_status": "up", + "alias": "Ethernet1_23", + "autoneg": "on", + "fec": "none", + "index": "88", + "lanes": "89", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_24": { + "admin_status": "up", + "alias": "Ethernet1_24", + "autoneg": "on", + "fec": "none", + "index": "92", + "lanes": "93", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_25": { + "admin_status": "up", + "alias": "Ethernet1_25", + "autoneg": "on", + "fec": "none", + "index": "96", + "lanes": "97", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_26": { + "admin_status": "up", + "alias": "Ethernet1_26", + "autoneg": "on", + "fec": "none", + "index": "100", + "lanes": "101", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_27": { + "admin_status": "up", + "alias": "Ethernet1_27", + "autoneg": "on", + "fec": "none", + "index": "104", + "lanes": "105", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_28": { + "admin_status": "up", + "alias": "Ethernet1_28", + "autoneg": "on", + "fec": "none", + "index": "108", + "lanes": "109", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_29": { + "admin_status": "up", + "alias": "Ethernet1_29", + "autoneg": "on", + "fec": "none", + "index": "112", + "lanes": "113", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_30": { + "admin_status": "up", + "alias": "Ethernet1_30", + "autoneg": "on", + "fec": "none", + "index": "116", + "lanes": "117", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_31": { + "admin_status": "up", + "alias": "Ethernet1_31", + "autoneg": "on", + "fec": "none", + "index": "120", + "lanes": "121", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_32": { + "admin_status": "up", + "alias": "Ethernet1_32", + "autoneg": "on", + "fec": "none", + "index": "124", + "lanes": "125", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_33": { + "admin_status": "up", + "alias": "Ethernet1_33", + "autoneg": "on", + "fec": "none", + "index": "128", + "lanes": "129", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_34": { + "admin_status": "up", + "alias": "Ethernet1_34", + "autoneg": "on", + "fec": "none", + "index": "132", + "lanes": "133", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_35": { + "admin_status": "up", + "alias": "Ethernet1_35", + "autoneg": "on", + "fec": "none", + "index": "136", + "lanes": "137", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_36": { + "admin_status": "up", + "alias": "Ethernet1_36", + "autoneg": "on", + "fec": "none", + "index": "140", + "lanes": "141", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_37": { + "admin_status": "up", + "alias": "Ethernet1_37", + "autoneg": "on", + "fec": "none", + "index": "144", + "lanes": "145", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_38": { + "admin_status": "up", + "alias": "Ethernet1_38", + "autoneg": "on", + "fec": "none", + "index": "148", + "lanes": "149", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_39": { + "admin_status": "up", + "alias": "Ethernet1_39", + "autoneg": "on", + "fec": "none", + "index": "152", + "lanes": "153", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_40": { + "admin_status": "up", + "alias": "Ethernet1_40", + "autoneg": "on", + "fec": "none", + "index": "156", + "lanes": "157", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_41": { + "admin_status": "up", + "alias": "Ethernet1_41", + "autoneg": "on", + "fec": "none", + "index": "160", + "lanes": "161", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_42": { + "admin_status": "up", + "alias": "Ethernet1_42", + "autoneg": "on", + "fec": "none", + "index": "164", + "lanes": "165", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_43": { + "admin_status": "up", + "alias": "Ethernet1_43", + "autoneg": "on", + "fec": "none", + "index": "168", + "lanes": "169", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_44": { + "admin_status": "up", + "alias": "Ethernet1_44", + "autoneg": "on", + "fec": "none", + "index": "172", + "lanes": "173", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_45": { + "admin_status": "up", + "alias": "Ethernet1_45", + "autoneg": "on", + "fec": "none", + "index": "176", + "lanes": "177", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_46": { + "admin_status": "up", + "alias": "Ethernet1_46", + "autoneg": "on", + "fec": "none", + "index": "180", + "lanes": "181", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_47": { + "admin_status": "up", + "alias": "Ethernet1_47", + "autoneg": "on", + "fec": "none", + "index": "184", + "lanes": "185", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_48": { + "admin_status": "up", + "alias": "Ethernet1_48", + "autoneg": "on", + "fec": "none", + "index": "188", + "lanes": "189", + "mtu": "9100", + "speed": "10000" + }, + "Ethernet1_49": { + "admin_status": "up", + "alias": "Ethernet1_49", + "autoneg": "on", + "fec": "rs", + "index": "192", + "lanes": "193,194,195,196", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1_50": { + "admin_status": "up", + "alias": "Ethernet1_50", + "autoneg": "on", + "fec": "rs", + "index": "196", + "lanes": "197,198,199,200", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1_51": { + "admin_status": "up", + "alias": "Ethernet1_51", + "autoneg": "on", + "fec": "rs", + "index": "200", + "lanes": "201,202,203,204", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1_52": { + "admin_status": "up", + "alias": "Ethernet1_52", + "autoneg": "on", + "fec": "rs", + "index": "204", + "lanes": "205,206,207,208", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1_53": { + "admin_status": "up", + "alias": "Ethernet1_53", + "autoneg": "on", + "fec": "rs", + "index": "208", + "lanes": "209,210,211,212", + "mtu": "9100", + "speed": "100000" + }, + "Ethernet1_54": { + "admin_status": "up", + "alias": "Ethernet1_54", + "autoneg": "on", + "fec": "rs", + "index": "212", + "lanes": "213,214,215,216", + "mtu": "9100", + "speed": "100000" + } + }, + "PORT_QOS_MAP": { + "Ethernet1_1": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_2": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_3": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_4": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_5": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_6": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_7": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_8": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_9": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_10": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_11": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_12": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_13": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_14": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_15": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_16": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_17": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_18": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_19": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_20": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_21": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_22": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_23": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_24": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_25": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_26": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_27": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_28": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_29": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_30": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_31": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_32": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_33": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_34": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_35": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_36": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_37": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_38": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_39": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_40": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_41": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_42": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_43": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_44": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_45": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_46": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_47": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_48": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_49": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_50": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_51": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_52": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_53": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + }, + "Ethernet1_54": { + "dscp_to_tc_map": "AZURE", + "pfc_enable": "", + "pfc_to_queue_map": "AZURE", + "pfcwd_sw_enable": "", + "tc_to_pg_map": "AZURE", + "tc_to_queue_map": "AZURE" + } + }, + "QUEUE": { + "Ethernet1_1|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_1|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_2|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_2|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_3|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_3|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_4|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_4|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_5|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_5|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_6|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_6|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_7|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_7|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_8|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_8|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_9|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_9|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_10|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_10|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_11|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_11|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_12|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_12|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_13|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_13|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_14|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_14|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_15|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_15|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_16|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_16|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_17|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_17|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_18|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_18|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_19|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_19|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_20|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_20|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_21|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_21|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_22|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_22|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_23|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_23|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_24|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_24|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_25|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_25|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_26|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_26|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_27|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_27|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_28|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_28|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_29|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_29|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_30|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_30|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_31|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_31|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_32|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_32|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_33|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_33|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_34|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_34|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_35|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_35|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_36|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_36|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_37|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_37|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_38|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_38|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_39|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_39|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_40|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_40|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_41|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_41|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_42|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_42|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_43|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_43|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_44|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_44|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_45|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_45|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_46|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_46|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_47|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_47|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_48|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_48|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_49|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_49|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_50|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_50|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_51|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_51|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_52|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_52|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_53|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_53|7": { + "scheduler": "scheduler.7" + }, + "Ethernet1_54|0": { + "scheduler": "scheduler.0", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|1": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|2": { + "scheduler": "scheduler.2", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|3": { + "scheduler": "scheduler.3", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|4": { + "scheduler": "scheduler.4", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|5": { + "scheduler": "scheduler.5", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|6": { + "scheduler": "scheduler.6", + "wred_profile": "AZURE_LOSSY" + }, + "Ethernet1_54|7": { + "scheduler": "scheduler.7" + } + }, + "SCHEDULER": { + "scheduler.0": { + "type": "DWRR", + "weight": "20" + }, + "scheduler.1": { + "type": "DWRR", + "weight": "20" + }, + "scheduler.2": { + "type": "DWRR", + "weight": "20" + }, + "scheduler.3": { + "type": "DWRR", + "weight": "40" + }, + "scheduler.4": { + "type": "DWRR", + "weight": "40" + }, + "scheduler.5": { + "type": "DWRR", + "weight": "30" + }, + "scheduler.6": { + "meter_type": "bytes", + "type": "STRICT" + }, + "scheduler.7": { + "meter_type": "bytes", + "type": "STRICT" + } + }, + "SYSLOG_CONFIG": { + "GLOBAL": { + "rate_limit_burst": "0", + "rate_limit_interval": "0" + } + }, + "SYSLOG_CONFIG_FEATURE": { + "apm": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "bgp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "database": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "dhcp_relay": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "eventd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "gnmi": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "lldp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "macsec": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mgmt-framework": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "mux": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "nat": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "pmon": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "radv": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "sflow": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "snmp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "stp": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "swss": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "syncd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + }, + "teamd": { + "rate_limit_burst": "20000", + "rate_limit_interval": "300" + } + }, + "SYSTEM_DEFAULTS": { + "mux_tunnel_egress_acl": { + "status": "disabled" + } + }, + "TC_TO_PRIORITY_GROUP_MAP": { + "AZURE": { + "0": "0", + "1": "0", + "2": "0", + "3": "0", + "4": "0", + "5": "0", + "6": "0", + "7": "7" + } + }, + "TC_TO_QUEUE_MAP": { + "AZURE": { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7" + } + }, + "VERSIONS": { + "DATABASE": { + "VERSION": "version_202405_01" + } + }, + "WRED_PROFILE": { + "AZURE_LOSSY": { + "ecn": "ecn_none", + "green_drop_probability": "5", + "green_max_threshold": "3145728", + "green_min_threshold": "1048576", + "wred_green_enable": "true" + } + } +} \ No newline at end of file diff --git a/sonic-mgmt/spytest/tests/cisco/fx3/qos/conftest.py b/sonic-mgmt/spytest/tests/cisco/fx3/qos/conftest.py new file mode 100644 index 00000000000..38dcd097bac --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/fx3/qos/conftest.py @@ -0,0 +1,36 @@ +import pytest + + +def pytest_configure(config): + config.addinivalue_line( + "markers", + "smoke: union of smoke_breakout and smoke_non_breakout; " + "auto-applied. Hoisted to the front of any fx3/qos/ collection " + "so the full suite runs smoke first.", + ) + config.addinivalue_line( + "markers", + "smoke_breakout: smoke tests targeted at the breakout testbed " + "(fx3_qos_testbed_breakout.yaml).", + ) + config.addinivalue_line( + "markers", + "smoke_non_breakout: smoke tests targeted at the non-breakout " + "testbed (fx3_qos_testbed.yaml).", + ) + + +@pytest.hookimpl(tryfirst=True) +def pytest_itemcollected(item): + if (item.get_closest_marker("smoke_breakout") + or item.get_closest_marker("smoke_non_breakout")): + item.add_marker(pytest.mark.smoke) + + +@pytest.hookimpl(trylast=True) +def pytest_collection_modifyitems(config, items): + smoke, rest = [], [] + for item in items: + (smoke if item.get_closest_marker("smoke") else rest).append(item) + if smoke and rest: + items[:] = smoke + rest diff --git a/sonic-mgmt/spytest/tests/cisco/fx3/qos/qos_helpers.py b/sonic-mgmt/spytest/tests/cisco/fx3/qos/qos_helpers.py new file mode 100644 index 00000000000..46050fe42ef --- /dev/null +++ b/sonic-mgmt/spytest/tests/cisco/fx3/qos/qos_helpers.py @@ -0,0 +1,7791 @@ +#!/usr/bin/env python3 +# BEGIN_LEGAL +# +# Copyright (c) 2026-current, Cisco Systems, Inc. ("Cisco"). All Rights Reserved. +# +# This file and all technical concepts, proprietary knowledge, algorithms and +# intellectual property rights it contains (collectively the "Confidential Information"), +# are the sole propriety information of Cisco and shall remain at Cisco's ownership. +# You shall not disclose the Confidential Information to any third party and you +# shall use it solely in connection with operating and/or maintaining of Cisco's +# products and pursuant to the terms and conditions of the license agreement you +# entered into with Cisco. +# +# THE SOURCE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. +# IN NO EVENT SHALL CISCO BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH +# THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# END_LEGAL + +""" +FX3 QoS helper library — shared utilities and golden data for FX3 QoS tests. + +Golden Data (default global config): + - QUEUE_TO_DSCP : DSCP value per queue (TC N = Q N) + - EXPECTED_SCHEDULERS : expected SCHEDULER profiles after 'config qos reload' + - TORTUGA_CONFIG : per-queue type/weight tuple + - GOLDEN_WRED_PROFILE : expected WRED_PROFILE|AZURE_LOSSY fields + - WRED_BOUND_QUEUES : queues 0-6 that bind to AZURE_LOSSY + - GOLDEN_DSCP_TO_TC : full 64-entry AZURE DSCP-to-TC map + +Configuration Verification (individual, composable): + - verify_dscp_to_tc_map() : DSCP_TO_TC_MAP|AZURE (64 entries) + - verify_port_qos_map() : PORT_QOS_MAP dscp_to_tc_map bindings + - verify_scheduler_profiles() : SCHEDULER|scheduler.N (type + weight) + - verify_queue_bindings() : QUEUE||N (scheduler + wred_profile) + - verify_wred_profile() : WRED_PROFILE|AZURE_LOSSY fields + + Each returns True/False and appends failures to fail_msgs. + Call individually to map to specific test cases, or use the combined: + - verify_config_db_baseline() : runs all 5 checks under a FX3 QoS banner + +DSCP-to-TC CONFIG_DB helpers (thin wrappers; no pass/fail logic): + - reload_qos() : run 'config qos reload' and wait + - get_dscp_to_tc_map() : HGETALL DSCP_TO_TC_MAP| → dict + - get_port_dscp_tc_map() : HGET PORT_QOS_MAP| dscp_to_tc_map + - redis_keys() : CONFIG_DB KEYS → list + +Display: + - print_banner() : prominent banner (=== >>> title <<< ===) + - print_section() : section header (=== title ===) + +Other Helpers: + - ensure_interfaces_admin_up() : check admin status + startup if needed + - verify_queue_counters() : confirm 'show queue counters' returns rows + - load_config_db_baseline() : load config_db.json as dict (golden baseline) + - unbind_wred_from_queues() : HDEL wred_profile from WRED-bound queues (0-6) + - validate_scheduler() : DWRR ratio + STRICT zero-drop validation + +DCHAL: + - DCHAL_QI_SCRIPT / deploy_dchal_helper() / dchal_show_queuing() + +Parsers: + - parse_redis_hgetall() / parse_redis_hget() + - get_queue_counters() / get_dut_mac() + - parse_dchal_queue_counters() / get_dchal_queue_counters() + - parse_dchal_egress_bw() / validate_dchal_bw_vs_weights() + - validate_queue_counters_vs_weights() + - validate_queue_counters() + - parse_dchal_queue_stats() + + +Usage: + from qos_helpers import ( + QUEUE_TO_DSCP, EXPECTED_SCHEDULERS, TORTUGA_CONFIG, + GOLDEN_WRED_PROFILE, WRED_BOUND_QUEUES, GOLDEN_DSCP_TO_TC, + print_banner, print_section, + verify_dscp_to_tc_map, verify_port_qos_map, + verify_scheduler_profiles, verify_queue_bindings, + verify_wred_profile, verify_config_db_baseline, + ensure_interfaces_admin_up, verify_queue_counters, + validate_scheduler, + reload_qos, get_dscp_to_tc_map, get_port_dscp_tc_map, redis_keys, + deploy_dchal_helper, dchal_show_queuing, + get_queue_counters, get_dut_mac, parse_dchal_queue_stats, + tcam_ipv4_dscp_entries, tcam_ipv6_dscp_entries, tcam_ipv6_wide_halves, + tcam_build_dscp_to_qos_idx, tcam_ipv6_build_dscp_to_qos_idx, + ) +""" + +import ast +import base64 +import json +import math +import os +import re + +from spytest import st + +# Path to the baseline config_db.json (same directory as this helper module). +_CONFIG_DB_JSON = os.path.join(os.path.dirname(__file__), 'config_db.json') + + +# ── FX3 QoS testbed L3 addresses ───────────────────────────────────────── +# Shared by all test modules. The ingress and egress subnet addresses are +# the same regardless of topology mode (ixia / peer_link / breakout). + +# DUT-side IPs (with prefix) +V4_INGRESS_A_IP = '10.10.10.1/24' +V4_INGRESS_B_IP = '10.10.11.1/24' +V4_EGRESS_IP = '20.20.20.1/24' +V6_INGRESS_A_IP = '2001:db8:10::1/64' +V6_INGRESS_B_IP = '2001:db8:11::1/64' +V6_EGRESS_IP = '2001:db8:20::1/64' + +# IXIA-side IPs (no prefix) +IXIA_INGRESS_A_IP = '10.10.10.2' +IXIA_INGRESS_B_IP = '10.10.11.2' +IXIA_EGRESS_IP = '20.20.20.2' +IXIA_INGRESS_A_IP6 = '2001:db8:10::2' +IXIA_INGRESS_B_IP6 = '2001:db8:11::2' +IXIA_EGRESS_IP6 = '2001:db8:20::2' + +NETMASK = '255.255.255.0' +PREFIX_LEN_V6 = 64 + +# ── Peer-link / breakout transit subnet (dut1 <-> dut2) ────────────────── +# Used in multi-DUT topologies (peer_link / breakout). The egress +# subnet (20.20.20.0/24) lives on dut2's IXIA port; dut1 reaches it via +# a static route through this transit subnet. +V4_TRANSIT_DUT1_IP = '30.30.30.1/24' +V4_TRANSIT_DUT2_IP = '30.30.30.2/24' +V6_TRANSIT_DUT1_IP = '2001:db8:30::1/64' +V6_TRANSIT_DUT2_IP = '2001:db8:30::2/64' +V4_TRANSIT_DUT2_BARE = '30.30.30.2' +V6_TRANSIT_DUT2_BARE = '2001:db8:30::2' + +# ── Traffic / WRED defaults ───────────────────────────────────────────── +NUM_QUEUES = 8 +PKT_SIZE = 128 +WRED_MIN_TH = 1048576 # 1 MB — below this, 0% drop probability +WRED_MAX_TH = 3145728 # 3 MB — above this, 100% tail drop +WRED_MAX_PROB = 5 # 5% max drop probability at max_th +WRED_TOLERANCE = 2.0 # percentage-point tolerance for pass/fail +WRED_DURATION = 40 # seconds per margin point +WRED_SETTLE_TIME = 5 # seconds before mid-traffic depth snapshot + + +# ── Golden data (default global config) ────────────────────────────────── + +# DSCP value that maps to each queue under the default AZURE map (TC N = Q N). +# Source: scheduler_test_plan.md DSCP-to-Queue Mapping table; +# test_scheduler_validation.py QUEUE_TO_DSCP. +QUEUE_TO_DSCP = { + 0: 0, 1: 6, 2: 2, 3: 3, 4: 4, 5: 46, 6: 48, 7: 49, +} + +# Expected SCHEDULER profiles after 'config qos reload' on FX3 Tortuga. +# CONFIG_DB keys are SCHEDULER|scheduler.N (not generic SONiC sched_qN). +# Source: scheduler_test_plan.md Reference Configuration (test 17); +# test_scheduler_validation.py TORTUGA_CONFIG. +EXPECTED_SCHEDULERS = { + 'scheduler.0': {'type': 'DWRR', 'weight': '20'}, + 'scheduler.1': {'type': 'DWRR', 'weight': '20'}, + 'scheduler.2': {'type': 'DWRR', 'weight': '20'}, + 'scheduler.3': {'type': 'DWRR', 'weight': '40'}, + 'scheduler.4': {'type': 'DWRR', 'weight': '40'}, + 'scheduler.5': {'type': 'DWRR', 'weight': '30'}, + 'scheduler.6': {'type': 'STRICT'}, + 'scheduler.7': {'type': 'STRICT'}, +} + +# Tortuga per-queue scheduler type and weight (matches test_scheduler_validation.py). +TORTUGA_CONFIG = { + 0: ('DWRR', 20), + 1: ('DWRR', 20), + 2: ('DWRR', 20), + 3: ('DWRR', 40), + 4: ('DWRR', 40), + 5: ('DWRR', 30), + 6: ('STRICT', None), + 7: ('STRICT', None), +} + +# Expected WRED_PROFILE|AZURE_LOSSY fields after 'config qos reload' on FX3. +# Source: qos_fx3.j2 generate_wred_profiles() (non-GR2 branch). +# CONFIG_DB stores all values as strings. +GOLDEN_WRED_PROFILE = { + 'ecn': 'ecn_none', + 'wred_green_enable': 'true', + 'green_min_threshold': '1048576', + 'green_max_threshold': '3145728', + 'green_drop_probability': '5', +} + +# Queues 0-6 bind to AZURE_LOSSY; queue 7 (strict priority) has no WRED. +WRED_BOUND_QUEUES = range(7) + +# Full 64-entry AZURE DSCP-to-TC map (string keys/values to match CONFIG_DB). +# Source: dscp_to_tc_test_plan.md Default DSCP-to-TC Map table. +GOLDEN_DSCP_TO_TC = { + '0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '2', + '6': '1', '7': '1', '8': '0', '9': '0', '10': '0', '11': '0', + '12': '0', '13': '0', '14': '0', '15': '0', '16': '0', '17': '0', + '18': '0', '19': '0', '20': '0', '21': '0', '22': '0', '23': '0', + '24': '0', '25': '0', '26': '0', '27': '0', '28': '0', '29': '0', + '30': '0', '31': '0', '32': '0', '33': '0', '34': '0', '35': '0', + '36': '0', '37': '0', '38': '0', '39': '0', '40': '0', '41': '0', + '42': '0', '43': '0', '44': '0', '45': '0', '46': '5', '47': '1', + '48': '6', '49': '7', '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', +} + + +# ── Interface admin-state helper ────────────────────────────────────────── + +def ensure_interfaces_admin_up(dut, interfaces): + """Check admin status and run 'config interface startup' for any that are down. + + Parses 'show interfaces status ' for each interface. If the Admin + column reads 'down', issues 'config interface startup' and waits briefly. + """ + for intf in interfaces: + output = st.show(dut, "show interfaces status {}".format(intf), + skip_tmpl=True) + admin_down = False + for line in output.splitlines(): + if intf in line and 'down' in line.lower(): + cols = line.split() + for i, col in enumerate(cols): + if col.lower() == 'down': + admin_down = True + break + break + if admin_down: + st.log("ensure_interfaces_admin_up: {} admin is down — " + "running 'config interface startup'".format(intf)) + st.config(dut, "config interface startup {}".format(intf), + skip_error_check=True) + else: + st.log("ensure_interfaces_admin_up: {} admin is already up".format( + intf)) + st.wait(2) + + +def verify_queue_counters(dut, interfaces): + """Run 'show queue counters' on each interface and confirm rows are present. + + Logs the full counter table for each interface. Returns a list of + interface names for which no counter rows (ALLn) were found — an empty + list means all interfaces have valid queue counter output. + """ + missing = [] + for intf in interfaces: + output = st.show(dut, "show queue counters {}".format(intf), + skip_tmpl=True) + st.log("verify_queue_counters: {}\n{}".format(intf, output)) + has_rows = False + for line in output.splitlines(): + if intf in line and 'ALL' in line: + has_rows = True + break + if not has_rows: + st.log("verify_queue_counters: WARNING — no queue counter rows " + "found for {}".format(intf)) + missing.append(intf) + else: + st.log("verify_queue_counters: {} OK — queue counter rows present".format( + intf)) + return missing + + +# ── Interface-membership helpers ────────────────────────────────────────── + +def remove_interface_from_vlan(dut_handle, interface): + """Remove *interface* from every VLAN it belongs to on *dut_handle*.""" + output = st.show(dut_handle, "show vlan brief", skip_tmpl=True) + if not output: + return + vlans_to_remove = [] + current_vlan_id = None + for line in output.split('\n'): + if '===' in line or '---' in line or 'VLAN ID' in line or not line.strip(): + continue + if '|' not in line: + continue + fields = [f.strip() for f in line.split('|')] + if len(fields) > 1 and fields[1].isdigit(): + current_vlan_id = fields[1] + if interface in line and current_vlan_id: + if current_vlan_id not in vlans_to_remove: + vlans_to_remove.append(current_vlan_id) + for vlan_id in vlans_to_remove: + st.log("Removing {} from VLAN {}".format(interface, vlan_id)) + st.config(dut_handle, "config vlan member del {} {}".format( + vlan_id, interface), skip_error_check=True) + + +def remove_interface_from_portchannel(dut_handle, interface): + """Remove *interface* from the first PortChannel it belongs to.""" + output = st.show(dut_handle, "show interfaces portchannel", skip_tmpl=True) + if not output: + return + for line in output.split('\n'): + if interface in line: + parts = line.split() + for part in parts: + if part.startswith('PortChannel'): + st.log("Removing {} from {}".format(interface, part)) + st.config(dut_handle, + "config portchannel member del {} {}".format( + part, interface), + skip_error_check=True) + return + + +def remove_interface_from_all_memberships(dut_handle, interface): + """Remove *interface* from any VLAN and PortChannel memberships.""" + remove_interface_from_vlan(dut_handle, interface) + remove_interface_from_portchannel(dut_handle, interface) + + +def _wait_for_interfaces(dut_handle, interfaces, timeout=30, poll=5): + """Poll until all *interfaces* are present in /sys/class/net/ on the DUT.""" + for elapsed in range(0, timeout + 1, poll): + check = " && ".join( + "test -d /sys/class/net/{}".format(intf) for intf in interfaces) + out = st.show(dut_handle, + "{} && echo READY || echo NOTREADY".format(check), + skip_tmpl=True).strip() + if "READY" in out and "NOTREADY" not in out: + st.log("_wait_for_interfaces: all present after ~{}s".format( + elapsed)) + return True + st.log("_wait_for_interfaces: waiting ({}s / {}s)".format( + elapsed, timeout)) + if elapsed < timeout: + st.wait(poll) + st.warn("_wait_for_interfaces: timed out after {}s".format(timeout)) + return False + + +# ── Baseline config_db.json loader ──────────────────────────────────────── + +def load_config_db_baseline(): + """Load and return the baseline config_db.json as a dict. + + The file lives alongside this helper module at + tests/cisco/fx3/qos/config_db.json. + """ + with open(_CONFIG_DB_JSON, 'r') as fh: + return json.load(fh) + + +_ART_FX3_QOS = r""" + _____ __ __ _____ ___ ____ + | ___|\ \/ /|___ / / _ \ ___ / ___| + | |_ \ / |_ \ | | | |/ _ \\___ \ + | _| / \ ___) | | |_| | (_) |___) | + |_| /_/\_\|____/ \__\_\\___/|____/ +""" + +_ART_DSCP_TC = r""" + ____ ____ ____ ____ _______ ____ +| _ \/ ___| / ___| _ \ |_ _| / ___| +| | | \___ \| | | |_) | ______ | | | | +| |_| |___) | |___| __/ |_____| | | | |___ +|____/|____/ \____|_| |_| \____| +""" + +_ART_SCHEDULER = r""" + ____ _ _ _ +/ ___| ___| |__ ___ __| |_ _| | ___ _ __ +\___ \ / __| '_ \ / _ \/ _` | | | | |/ _ \ '__| + ___) | (__| | | | __/ (_| | |_| | | __/ | +|____/ \___|_| |_|\___|\__,_|\__,_|_|\___|_| +""" + +_ART_QUEUE = r""" + ___ + / _ \ _ _ ___ _ _ ___ +| | | | | | |/ _ \ | | |/ _ \ +| |_| | |_| | __/ |_| | __/ + \__\_\\__,_|\___|\__,_|\___| +""" + +_ART_WRED = r""" +__ ______ _____ ____ +\ \ / / _ \| ____| _ \ + \ \ /\ / /| |_) | _| | | | | + \ V V / | _ <| |___| |_| | + \_/\_/ |_| \_\_____|____/ +""" + +_SECTION_ART = { + 'dscp_to_tc': _ART_DSCP_TC, + 'scheduler': _ART_SCHEDULER, + 'queue': _ART_QUEUE, + 'wred': _ART_WRED, +} + + +def print_banner(title, width=74, char='='): + """Print the FX3 QoS ASCII art banner followed by a title line.""" + border = char * width + st.log(border) + for line in _ART_FX3_QOS.strip().splitlines(): + st.log(line) + st.log("") + st.log(" " + title) + st.log(border) + + +def print_section(title, width=70, char='=', art_key=None): + """Print a section header with optional ASCII art. + + art_key: one of 'dscp_to_tc', 'scheduler', 'queue', 'wred' + to display the matching ASCII art above the title. + """ + st.log(char * width) + if art_key and art_key in _SECTION_ART: + for line in _SECTION_ART[art_key].strip().splitlines(): + st.log(" " + line) + st.log("") + st.log(" " + title) + st.log(char * width) + + +# ── Individual configuration verification functions ─────────────────── +# +# Each verify_* function: +# 1. Fetches data from the DUT (all queries first) +# 2. Prints a clean table +# 3. Appends failure descriptions to fail_msgs +# 4. Returns True if section passed, False otherwise +# +# Test cases can call these individually or use verify_config_db_baseline() +# which calls them all under a main "FX3 QoS" banner. +# ────────────────────────────────────────────────────────────────────── + +def verify_dscp_to_tc_map(dut, fail_msgs, baseline=None): + """Verify DSCP_TO_TC_MAP|AZURE against baseline config_db.json. + + Returns True if all 64 entries match. + """ + if baseline is None: + baseline = load_config_db_baseline() + + st.log(" Fetching DSCP_TO_TC_MAP|AZURE ...") + expected_map = baseline.get('DSCP_TO_TC_MAP', {}).get('AZURE', {}) + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGETALL "DSCP_TO_TC_MAP|AZURE"', + skip_tmpl=True) + actual_map = parse_redis_hgetall(output) + + print_section("DSCP_TO_TC_MAP|AZURE ({} entries, expected {})".format( + len(actual_map), len(expected_map)), art_key='dscp_to_tc') + st.log(" {:<6} {:>10} {:>10} {:>8}".format( + 'DSCP', 'Expected', 'Actual', 'Status')) + st.log(" " + "-" * 40) + mismatches = 0 + for dscp in sorted(expected_map, key=lambda x: int(x)): + exp_tc = expected_map[dscp] + act_tc = actual_map.get(dscp, '(nil)') + ok = act_tc == exp_tc + tag = 'OK' if ok else '** FAIL' + st.log(" {:<6} {:>10} {:>10} {:>8}".format( + dscp, exp_tc, act_tc, tag)) + if not ok: + mismatches += 1 + fail_msgs.append( + "DSCP {} -> TC {}, expected {}".format(dscp, act_tc, exp_tc)) + if len(actual_map) != len(expected_map): + mismatches += 1 + fail_msgs.append( + "DSCP_TO_TC_MAP has {} entries, expected {}".format( + len(actual_map), len(expected_map))) + st.log(" DSCP_TO_TC_MAP: {} mismatches out of {} entries".format( + mismatches, len(expected_map))) + return mismatches == 0 + + +def verify_port_qos_map(dut, port_info, fail_msgs): + """Verify PORT_QOS_MAP dscp_to_tc_map binding on ingress interfaces. + + port_info: dict whose keys contain 'ingress' (e.g. 'ingress', + 'ingress_a', 'ingress_b'). All non-egress ports are checked. + Returns True if all bindings are AZURE. + """ + st.log(" Fetching PORT_QOS_MAP bindings ...") + ingress_labels = [k for k in port_info if 'ingress' in k] + if not ingress_labels: + ingress_labels = [k for k in port_info if k != 'egress'] + results = [] + for label in ingress_labels: + intf = port_info[label] + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGET "PORT_QOS_MAP|{}" ' + '"dscp_to_tc_map"'.format(intf), + skip_tmpl=True) + results.append((intf, parse_redis_hget(output))) + + print_section("PORT_QOS_MAP (dscp_to_tc_map binding)") + st.log(" {:<20} {:>14} {:>8}".format('Interface', 'Actual', 'Status')) + st.log(" " + "-" * 46) + passed = True + for intf, bound_map in results: + ok = bound_map and 'AZURE' in bound_map.upper() + tag = 'OK' if ok else '** FAIL' + st.log(" {:<20} {:>14} {:>8}".format(intf, bound_map or '(nil)', tag)) + if not ok: + passed = False + fail_msgs.append( + "{} dscp_to_tc_map = '{}', expected AZURE".format( + intf, bound_map)) + return passed + + +# ── DSCP-to-TC CONFIG_DB fetch helpers ──────────────────────────────────── +# +# Thin wrappers around sonic-db-cli with no pass/fail logic. +# Used by test_dscp_map_config.py and any future DSCP tests. +# ────────────────────────────────────────────────────────────────────────── + +def reload_qos(dut, wait=5): + """Run 'config qos reload' and wait *wait* seconds for CONFIG_DB to settle.""" + st.config(dut, "config qos reload", skip_error_check=True) + st.wait(wait) + + +def get_dscp_to_tc_map(dut, map_name='AZURE'): + """Return DSCP_TO_TC_MAP| from CONFIG_DB as a {str: str} dict. + + Returns {} if the key does not exist. Delegates to parse_redis_hgetall + for output normalisation (supports both dict-literal and numbered-line + formats emitted by different sonic-db-cli versions). + """ + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGETALL "DSCP_TO_TC_MAP|{}"'.format(map_name), + skip_tmpl=True) + return parse_redis_hgetall(output) + + +def get_port_dscp_tc_map(dut, intf): + """Return the dscp_to_tc_map field of PORT_QOS_MAP| from CONFIG_DB. + + Returns '' (empty string) when the field is not set. + """ + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGET "PORT_QOS_MAP|{}" "dscp_to_tc_map"'.format( + intf), + skip_tmpl=True) + return parse_redis_hget(output) + + +def redis_keys(dut, pattern): + """Return a list of CONFIG_DB keys matching *pattern* (glob-style). + + Filters shell-prompt lines (contain '@' and end with '$'). + Returns [] when no keys match. + """ + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB KEYS "{}"'.format(pattern), + skip_tmpl=True) + result = [] + for raw in (output or '').splitlines(): + line = raw.strip() + if not line: + continue + if line.endswith('$') and '@' in line: # shell prompt + continue + result.append(line) + return result + + +def asic_qos_map_types(dut): + """Return a list of SAI_QOS_MAP_ATTR_TYPE strings for every + ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP entry in ASIC_DB. + + Example return: ['SAI_QOS_MAP_TYPE_DSCP_TO_TC'] + """ + keys_out = st.show( + dut, + 'sonic-db-cli ASIC_DB KEYS "ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:*"', + skip_tmpl=True) + types = [] + for raw in (keys_out or '').splitlines(): + key = raw.strip() + if not key or (key.endswith('$') and '@' in key): + continue + type_out = st.show( + dut, + 'sonic-db-cli ASIC_DB HGET "{}" "SAI_QOS_MAP_ATTR_TYPE"'.format(key), + skip_tmpl=True) + for t in (type_out or '').splitlines(): + t = t.strip() + if not t or (t.endswith('$') and '@' in t): + continue + types.append(t) + return types + + +def asic_qos_map_oid(dut, map_type='SAI_QOS_MAP_TYPE_DSCP_TO_TC'): + """Return the ASIC_DB key for the first QoS map with the given type. + + Equivalent to the OID returned by SAI sai_create_qos_map(). + Returns the full key string e.g. + 'ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:oid:0x14000000000663' + or None if no matching map is found. + """ + keys_out = st.show( + dut, + 'sonic-db-cli ASIC_DB KEYS "ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:*"', + skip_tmpl=True) + for raw in (keys_out or '').splitlines(): + key = raw.strip() + if not key or (key.endswith('$') and '@' in key): + continue + type_out = st.show( + dut, + 'sonic-db-cli ASIC_DB HGET "{}" "SAI_QOS_MAP_ATTR_TYPE"'.format(key), + skip_tmpl=True) + for t in (type_out or '').splitlines(): + t = t.strip() + if t == map_type: + return key + return None + + +def asic_dscp_to_tc_map(dut): + """Read SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST from ASIC_DB and return + a {dscp_int: tc_int} dict. + + ASIC_DB stores the list as a JSON string: + {"count": 64, "list": [{"key": {"dscp": N, ...}, "value": {"tc": M, ...}}, ...]} + + Equivalent to SAI _readback_dscp_to_tc_map() which does: + raw = sai_get(oid, SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST) + return {entry[0][1]: entry[1][0] for entry in raw} + + Returns {} if the map OID is not found or the JSON cannot be parsed. + """ + # Collect all DSCP_TO_TC OIDs and pick the one with the most entries. + # This handles the case where a transient custom map OID (e.g. CUSTOM_3 with 3 + # entries) coexists with the global AZURE OID (64 entries) in ASIC_DB during + # a rebind operation — we always want the "full" map. + keys_out = st.show( + dut, + 'sonic-db-cli ASIC_DB KEYS "ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:*"', + skip_tmpl=True) + candidate_maps = {} + for raw in (keys_out or '').splitlines(): + key = raw.strip() + if not key or (key.endswith('$') and '@' in key): + continue + type_out = st.show( + dut, + 'sonic-db-cli ASIC_DB HGET "{}" "SAI_QOS_MAP_ATTR_TYPE"'.format(key), + skip_tmpl=True) + for t in (type_out or '').splitlines(): + t = t.strip() + if t != 'SAI_QOS_MAP_TYPE_DSCP_TO_TC': + continue + raw_out = st.show( + dut, + 'sonic-db-cli ASIC_DB HGET "{}" "SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST"'.format( + key), + skip_tmpl=True) + val_str = None + for line in (raw_out or '').splitlines(): + line = line.strip() + if not line or (line.endswith('$') and '@' in line): + continue + val_str = line + break + if not val_str: + continue + try: + data = json.loads(val_str) + entries = {entry['key']['dscp']: entry['value']['tc'] + for entry in data.get('list', [])} + candidate_maps[key] = entries + except (ValueError, KeyError): + pass + if not candidate_maps: + return {} + # Return the map with the greatest number of entries (the "full" AZURE map) + best_key = max(candidate_maps, key=lambda k: len(candidate_maps[k])) + return candidate_maps[best_key] + + +def asic_port_oid(dut, intf): + """Return the SAI port OID for *intf* using COUNTERS_PORT_NAME_MAP. + + Returns an OID string like 'oid:0x100000000002d', or None if not found. + Uses COUNTERS_DB which maps interface name → OID directly (single command). + """ + raw = st.show( + dut, + 'sonic-db-cli COUNTERS_DB HGET "COUNTERS_PORT_NAME_MAP" "{}"'.format(intf), + skip_tmpl=True) + for line in (raw or '').splitlines(): + line = line.strip() + if line and not (line.endswith('$') and '@' in line): + return line + return None + + +def asic_port_dscp_tc_map_oid(dut, intf): + """Return SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP OID for *intf* from ASIC_DB. + + Returns a string like 'oid:0x14000000000663' when a map is bound, + or 'oid:0x0' when no per-port binding is active (FX3 default: global map). + Returns None if the port OID cannot be resolved. + """ + port_oid = asic_port_oid(dut, intf) + if port_oid is None: + return None + raw = st.show( + dut, + 'sonic-db-cli ASIC_DB HGET "ASIC_STATE:SAI_OBJECT_TYPE_PORT:{}" ' + '"SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP"'.format(port_oid), + skip_tmpl=True) + for line in (raw or '').splitlines(): + line = line.strip() + if line and not (line.endswith('$') and '@' in line): + return line + return None + + +def asic_dscp_to_tc_map_oids(dut): + """Return a list of ASIC_DB keys for every SAI_QOS_MAP_TYPE_DSCP_TO_TC OID. + + Each element is a full key like + 'ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:oid:0x14000000000663'. + Order is not guaranteed. Returns [] when no DSCP_TO_TC maps exist. + """ + keys_out = st.show( + dut, + 'sonic-db-cli ASIC_DB KEYS "ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:*"', + skip_tmpl=True) + result = [] + for raw in (keys_out or '').splitlines(): + key = raw.strip() + if not key.startswith('ASIC_STATE:SAI_OBJECT_TYPE_QOS_MAP:oid:'): + continue + type_out = st.show( + dut, + 'sonic-db-cli ASIC_DB HGET "{}" "SAI_QOS_MAP_ATTR_TYPE"'.format(key), + skip_tmpl=True) + for t in (type_out or '').splitlines(): + t = t.strip() + if t == 'SAI_QOS_MAP_TYPE_DSCP_TO_TC': + result.append(key) + break + return result + + +def per_port_dscp_to_tc_oid(dut, intf): + """Return SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP for *intf*, or '' if unset. + + Post cisco-nx-sai PRs #494 + #514, this is the only ASIC_DB surface + that reflects per-port DSCP-to-TC binding on FX3. nxsai's + qos_map_manager::bind_to_port also builds an internal L3_VLAN_QOS ACL + table and writes its TYPE_B PORT_LAG_LABEL into the port's IFTMC, but + that ACL table is not exposed in ASIC_DB and SAI_PORT_ATTR_INGRESS_ACL + is never populated by this flow. + """ + return asic_port_dscp_tc_map_oid(dut, intf) or '' + + +def has_per_port_binding(oid): + """True iff *oid* is a non-default SAI port DSCP-to-TC map OID. + + *oid* is the string returned by per_port_dscp_to_tc_oid(). + """ + return bool(oid) and oid not in ('oid:0x0', 'nil', 'None') + + +def unbind_dscp_to_tc_map_from_all_ports(dut, wait=5): + """HDEL ``dscp_to_tc_map`` from every PORT_QOS_MAP|* key in CONFIG_DB. + + Drains references so a subsequent ``DEL DSCP_TO_TC_MAP|`` does + not trip orchagent's pending-remove guard (qosorch.cpp processWorkItem), + which would otherwise latch ``m_pendingRemove=true`` for the rest of + the swss lifetime and silently block every later HSET on that map. + """ + keys_out = st.show( + dut, + 'sonic-db-cli CONFIG_DB KEYS "PORT_QOS_MAP|*"', + skip_tmpl=True) + for raw in (keys_out or '').splitlines(): + key = raw.strip() + if not key.startswith('PORT_QOS_MAP|'): + continue + st.config( + dut, + 'sonic-db-cli CONFIG_DB HDEL "{}" "dscp_to_tc_map"'.format(key), + skip_error_check=True) + st.wait(wait) + + +def verify_scheduler_profiles(dut, fail_msgs, baseline=None, + egress_intf=None): + """Verify SCHEDULER|scheduler.N profiles against baseline config_db.json. + + When *egress_intf* is provided, also reads DCHAL egress queuing output + and validates hardware bandwidth percentages against TORTUGA_CONFIG. + + Returns True if all profiles match (type and weight). + """ + if baseline is None: + baseline = load_config_db_baseline() + + expected_scheds = baseline.get('SCHEDULER', {}) + st.log(" Fetching SCHEDULER profiles ({}) ...".format( + len(expected_scheds))) + sched_actuals = {} + for name in sorted(expected_scheds): + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGETALL "SCHEDULER|{}"'.format(name), + skip_tmpl=True) + sched_actuals[name] = parse_redis_hgetall(output) + + print_section("SCHEDULER profiles ({} profiles)".format( + len(expected_scheds)), art_key='scheduler') + st.log(" {:<16} {:>8} {:>8} {:>8} {:>8} {:>8}".format( + 'Profile', 'ExpType', 'ActType', 'ExpWt', 'ActWt', 'Status')) + st.log(" " + "-" * 62) + passed = True + for name in sorted(expected_scheds): + expected = expected_scheds[name] + actual = sched_actuals[name] + if not actual: + st.log(" {:<16} {:>8} {:>8} {:>8} {:>8} {:>8}".format( + name, expected.get('type', '-'), '(nil)', + expected.get('weight', '-'), '-', '** FAIL')) + fail_msgs.append("SCHEDULER|{}: empty or missing".format(name)) + passed = False + continue + + exp_type = expected.get('type', '-') + act_type = actual.get('type', '-') + exp_wt = expected.get('weight', '-') + act_wt = actual.get('weight', '-') + ok = True + for field, exp_val in expected.items(): + if actual.get(field, '') != exp_val: + ok = False + fail_msgs.append( + "SCHEDULER|{} {}: '{}', expected '{}'".format( + name, field, actual.get(field, ''), exp_val)) + tag = 'OK' if ok else '** FAIL' + st.log(" {:<16} {:>8} {:>8} {:>8} {:>8} {:>8}".format( + name, exp_type, act_type, exp_wt, act_wt, tag)) + if not ok: + passed = False + + if egress_intf: + st.log("") + st.log(" DCHAL HW scheduler verification for {} ...".format( + egress_intf)) + deploy_dchal_helper(dut) + dchal_out = dchal_show_queuing( + dut, "scheduler HW verify", egress_intf) + report_dchal_bw_check(dchal_out, fail_msgs) + + return passed + + +def verify_queue_bindings(dut, egress_intf, fail_msgs, baseline=None): + """Verify QUEUE||N scheduler and wred_profile bindings. + + Returns True if all 8 queue bindings match baseline. + """ + if baseline is None: + baseline = load_config_db_baseline() + + expected_queues = baseline.get('QUEUE', {}) + st.log(" Fetching QUEUE bindings on {} ...".format(egress_intf)) + queue_actuals = {} + for qi in range(8): + key = "{}|{}".format(egress_intf, qi) + sched_out = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGET "QUEUE|{}" "scheduler"'.format(key), + skip_tmpl=True) + wred_out = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGET "QUEUE|{}" "wred_profile"'.format( + key), + skip_tmpl=True) + queue_actuals[qi] = { + 'scheduler': parse_redis_hget(sched_out).strip() or '-', + 'wred_profile': parse_redis_hget(wred_out).strip() or '-', + } + + print_section("QUEUE bindings on {} (scheduler + wred_profile)".format( + egress_intf), art_key='queue') + st.log(" {:<6} {:>14} {:>14} {:>14} {:>14} {:>8}".format( + 'Queue', 'ExpSched', 'ActSched', 'ExpWRED', 'ActWRED', 'Status')) + st.log(" " + "-" * 76) + passed = True + for qi in range(8): + key = "{}|{}".format(egress_intf, qi) + expected_q = expected_queues.get(key, {}) + if not expected_q: + st.log(" Q{:<4} (not in baseline JSON — skipped)".format(qi)) + continue + + exp_sched = expected_q.get('scheduler', '-') + exp_wred = expected_q.get('wred_profile', '-') + act_sched = queue_actuals[qi]['scheduler'] + act_wred = queue_actuals[qi]['wred_profile'] + ok = True + + if 'scheduler' in expected_q and act_sched != exp_sched: + ok = False + fail_msgs.append( + "QUEUE|{} scheduler: '{}', expected '{}'".format( + key, act_sched, exp_sched)) + + if 'wred_profile' in expected_q: + if act_wred != exp_wred: + ok = False + fail_msgs.append( + "QUEUE|{} wred_profile: '{}', expected '{}'".format( + key, act_wred, exp_wred)) + else: + if act_wred and act_wred not in ('-', 'None', ''): + ok = False + fail_msgs.append( + "QUEUE|{} wred_profile: '{}', expected empty/unset" + .format(key, act_wred)) + + tag = 'OK' if ok else '** FAIL' + st.log(" Q{:<4} {:>14} {:>14} {:>14} {:>14} {:>8}".format( + qi, exp_sched, act_sched, exp_wred, act_wred, tag)) + if not ok: + passed = False + return passed + + +def verify_wred_profile(dut, fail_msgs, baseline=None, wred_profile=None): + """Verify WRED_PROFILE|AZURE_LOSSY fields against expected values. + + When *wred_profile* is provided, it is used as the expected values directly. + Otherwise the expected values come from the *baseline* config_db.json. + + Returns True if all fields match. + """ + if wred_profile is not None: + expected_wred = wred_profile + else: + if baseline is None: + baseline = load_config_db_baseline() + expected_wred = baseline.get('WRED_PROFILE', {}).get('AZURE_LOSSY', {}) + st.log(" Fetching WRED_PROFILE|AZURE_LOSSY ...") + output = st.show( + dut, + 'sonic-db-cli CONFIG_DB HGETALL "WRED_PROFILE|AZURE_LOSSY"', + skip_tmpl=True) + actual_wred = parse_redis_hgetall(output) + + print_section("WRED_PROFILE|AZURE_LOSSY", art_key='wred') + st.log(" {:<28} {:>14} {:>14} {:>8}".format( + 'Field', 'Expected', 'Actual', 'Status')) + st.log(" " + "-" * 68) + passed = True + if not actual_wred: + st.log(" (empty or missing)") + fail_msgs.append("WRED_PROFILE|AZURE_LOSSY: empty or missing") + return False + for field in sorted(expected_wred): + exp_val = expected_wred[field] + act_val = actual_wred.get(field, '(nil)') + ok = act_val.lower() == exp_val.lower() + tag = 'OK' if ok else '** FAIL' + st.log(" {:<28} {:>14} {:>14} {:>8}".format( + field, exp_val, act_val, tag)) + if not ok: + passed = False + fail_msgs.append( + "WRED_PROFILE {}: '{}', expected '{}'".format( + field, act_val, exp_val)) + return passed + + +def verify_config_db_baseline(dut, egress_intf, port_info, fail_msgs): + """Verify live CONFIG_DB matches the baseline config_db.json. + + Prints formatted tables showing expected vs actual for each section + under a main FX3 QoS banner. + + Checks: + 1. DSCP_TO_TC_MAP|AZURE (all 64 entries) + 2. PORT_QOS_MAP| (dscp_to_tc_map binding on ingress ports) + 3. SCHEDULER|scheduler.N (type and weight for all 8 profiles) + 4. QUEUE||N (scheduler and wred_profile bindings) + 5. WRED_PROFILE|AZURE_LOSSY (all fields) + + Each section can also be called independently via verify_dscp_to_tc_map(), + verify_port_qos_map(), verify_scheduler_profiles(), verify_queue_bindings(), + verify_wred_profile(). + """ + baseline = load_config_db_baseline() + + print_banner("FX3 QoS — Configuration Verification") + st.log("") + + verify_dscp_to_tc_map(dut, fail_msgs, baseline) + st.log("") + verify_port_qos_map(dut, port_info, fail_msgs) + st.log("") + verify_scheduler_profiles(dut, fail_msgs, baseline, + egress_intf=egress_intf) + st.log("") + verify_queue_bindings(dut, egress_intf, fail_msgs, baseline) + st.log("") + verify_wred_profile(dut, fail_msgs, baseline) + st.log("") + + if fail_msgs: + print_banner("FX3 QoS — Configuration FAILED ({} issues)".format( + len(fail_msgs)), char='!') + else: + print_banner("FX3 QoS — Configuration PASSED (all sections OK)") + + +# ── DCHAL wrapper script ───────────────────────────────────────────────── +# +# Deployed once into /tmp/dchal_qi.py inside the syncd container via +# deploy_dchal_helper(). Uses show_queuing_intf.py already present in +# /opt/cisco/syncd/dchalshell/ which calls 'insshell regdump dump' directly. +# +# On some image versions (e.g. 2021 DUT) interface_pb2 (gRPC protobuf module) +# is absent, so resolve_port()'s primary gRPC path raises ModuleNotFoundError +# (an ImportError subclass) instead of RuntimeError, bypassing the built-in +# platform.json fallback. We catch ImportError here and invoke the fallback +# (_resolve_sport_from_json + PortInfo) directly. +# +# _resolve_sport_from_json may itself raise RuntimeError when the interface +# is not present in platform.json (e.g. on some DUTs). In that +# case we print a clear error and exit 0 so the test can continue — DCHAL +# output is for visibility, not a hard gate. +DCHAL_QI_SCRIPT = """\ +import json, os, re, sys +sys.path.insert(0, '/opt/cisco/syncd/dchalshell') +sys.path.insert(0, '/opt/cisco/syncd/dchalshell/commands') +import show_queuing_intf +from show_queuing_intf import ( + collect_queuing_data, format_output, + PortInfo, _resolve_sport_from_json, +) + +def _name_variants(name): + variants = [name] + # Ethernet1_51 -> Ethernet1/51 + if '_' in name: + variants.append(name.replace('_', '/', 1)) + # Ethernet1/51 -> Ethernet1_51 + if '/' in name: + variants.append(name.replace('/', '_', 1)) + # Ethernet1_51 -> Ethernet51 (drop slot prefix) + m = re.match(r'(Ethernet)\\d+[_/](\\d+)$', name) + if m: + variants.append(m.group(1) + m.group(2)) + # Ethernet1_51 -> Ethernet200 (lookup by lanes in platform.json) + pj_path = '/usr/share/sonic/device/x86_64-cisco_8102_c8d48-r0/platform.json' + alt_paths = [ + '/usr/share/sonic/platform/platform.json', + '/usr/share/sonic/hwsku/platform.json', + ] + pj = None + for p in [pj_path] + alt_paths: + if os.path.isfile(p): + try: + with open(p) as f: + pj = json.load(f) + break + except Exception: + pass + if pj and 'interfaces' in pj: + for pj_name, pj_info in pj['interfaces'].items(): + alias = pj_info.get('alias', '') + if alias in variants or pj_name in variants: + if pj_name not in variants: + variants.append(pj_name) + if alias and alias not in variants: + variants.append(alias) + return variants + +if len(sys.argv) < 2: + print('DCHAL_SKIP: no interface argument provided') + sys.exit(0) + +intf = sys.argv[1] +names_to_try = _name_variants(intf) +pi = None +last_err = None + +for try_name in names_to_try: + try: + pi = show_queuing_intf.resolve_port(try_name) + break + except ImportError: + try: + sport, num_lanes = _resolve_sport_from_json(try_name) + pi = PortInfo(intf_name=try_name, slot=1, unit=0, slice_id=0, + asic_port=sport, fp_port=sport, num_lanes=num_lanes) + break + except Exception as e: + last_err = e + except Exception as e: + last_err = e + +if pi is None: + print('DCHAL_SKIP: cannot resolve {} (tried {}) — {}'.format( + intf, names_to_try, last_err)) + sys.exit(0) + +qd = collect_queuing_data(pi) +print(format_output(qd)) +""" + + +DCHAL_AQM_SCRIPT = """\ +import json, os, re, sys +sys.path.insert(0, '/opt/cisco/syncd/dchalshell') +sys.path.insert(0, '/opt/cisco/syncd/dchalshell/commands') +try: + import show_queuing_intf + from show_queuing_intf import ( + PortInfo, _resolve_sport_from_json, insshell_read, _entry_map, + ) +except ImportError as _ie: + print('DCHAL_AQM_SKIP: import failed — {}'.format(_ie)) + sys.exit(0) + +_NUM_QUEUES = 8 +_AQM_MAX_PROB_DIVISOR = 0x7ff + +_TBL_AQM_OQ_PROFILE_MAP = "tah_sun_bax_dhs_aqm_oqueue_profile_map" +_TBL_AQM_PROFILE = "tah_sun_bax_dhs_aqm_profile" +_TBL_AQM_UC_OQUEUE = "tah_sun_bax_dhs_aqm_uc_oqueue" +_TBL_ACCT_UC_OQ_COUNT = "tah_sun_bax_dhs_acct_uc_oqueue_count" + +def _name_variants(name): + variants = [name] + if '_' in name: + variants.append(name.replace('_', '/', 1)) + if '/' in name: + variants.append(name.replace('/', '_', 1)) + m = re.match(r'(Ethernet)\\d+[_/](\\d+)$', name) + if m: + variants.append(m.group(1) + m.group(2)) + pj_path = '/usr/share/sonic/device/x86_64-cisco_8102_c8d48-r0/platform.json' + alt_paths = [ + '/usr/share/sonic/platform/platform.json', + '/usr/share/sonic/hwsku/platform.json', + ] + pj = None + for p in [pj_path] + alt_paths: + if os.path.isfile(p): + try: + with open(p) as f: + pj = json.load(f) + break + except Exception: + pass + if pj and 'interfaces' in pj: + for pj_name, pj_info in pj['interfaces'].items(): + alias = pj_info.get('alias', '') + if alias in variants or pj_name in variants: + if pj_name not in variants: + variants.append(pj_name) + if alias and alias not in variants: + variants.append(alias) + return variants + +def collect_aqm(asic_port): + oq_base = asic_port * _NUM_QUEUES + r = {'asic_port': asic_port} + fields = ['aqm','mode','min_thr','max_thr','max_prob','max_prob_cfg', + 'ecn_enable','drop_en','q_depth','mfair','qold'] + for f in fields: + r[f] = [0] * _NUM_QUEUES + r['oqueue_idx'] = [oq_base + q for q in range(_NUM_QUEUES)] + prof_entries = insshell_read(_TBL_AQM_OQ_PROFILE_MAP, oq_base, _NUM_QUEUES) + prof_map = _entry_map(prof_entries) + for q in range(_NUM_QUEUES): + e = prof_map.get(oq_base + q, {}) + r['aqm'][q] = e.get('aqm', 0) + unique_profiles = set(r['aqm']) + profile_data = {} + for pid in unique_profiles: + entries = insshell_read(_TBL_AQM_PROFILE, pid, 1) + if entries: + profile_data[pid] = entries[0] + for q in range(_NUM_QUEUES): + prof = profile_data.get(r['aqm'][q], {}) + r['mode'][q] = prof.get('mode', 0) + r['min_thr'][q] = prof.get('min_thr', 0) + r['max_thr'][q] = prof.get('max_thr_qdes', prof.get('max_thr', 0)) + mp = prof.get('max_prob', 0) + r['max_prob'][q] = mp + r['max_prob_cfg'][q] = round(mp * 100.0 / _AQM_MAX_PROB_DIVISOR) if _AQM_MAX_PROB_DIVISOR else 0 + r['ecn_enable'][q] = prof.get('ecn_enable', 0) + r['drop_en'][q] = prof.get('drop_en', 0) + uc_entries = insshell_read(_TBL_AQM_UC_OQUEUE, oq_base, _NUM_QUEUES) + uc_map = _entry_map(uc_entries) + for q in range(_NUM_QUEUES): + e = uc_map.get(oq_base + q, {}) + r['mfair'][q] = e.get('mfair', 0) + r['qold'][q] = e.get('qold', 0) + depth_entries = insshell_read(_TBL_ACCT_UC_OQ_COUNT, oq_base, _NUM_QUEUES) + depth_map = _entry_map(depth_entries) + for q in range(_NUM_QUEUES): + e = depth_map.get(oq_base + q, {}) + r['q_depth'][q] = e.get('num_cell', 0) + return r + +if len(sys.argv) < 2: + print('DCHAL_AQM_SKIP: no interface argument') + sys.exit(0) + +intf = sys.argv[1] +names_to_try = _name_variants(intf) +pi = None +last_err = None +for try_name in names_to_try: + try: + pi = show_queuing_intf.resolve_port(try_name) + break + except ImportError: + try: + sport, num_lanes = _resolve_sport_from_json(try_name) + pi = PortInfo(intf_name=try_name, slot=1, unit=0, slice_id=0, + asic_port=sport, fp_port=sport, num_lanes=num_lanes) + break + except Exception as e: + last_err = e + except Exception as e: + last_err = e + +if pi is None: + print('DCHAL_AQM_SKIP: cannot resolve {} — {}'.format(intf, last_err)) + sys.exit(0) + +try: + data = collect_aqm(pi.asic_port) +except Exception as e: + print('DCHAL_AQM_ERROR: {}'.format(e)) + sys.exit(0) + +print('AQM_JSON:' + json.dumps(data)) +""" + + +DCHAL_WRED_VARIANCE_SCRIPT = """\ +import sys, os, json +sys.path.insert(0, '/opt/cisco/syncd/dchalshell') +sys.path.insert(0, '/opt/cisco/syncd/dchalshell/commands') +try: + import grpc + import qos_pb2 + import qos_pb2_grpc + channel = grpc.insecure_channel('127.0.0.1:50057') + stub = qos_pb2_grpc.qosStub(channel) + inp = qos_pb2.variance_input() + inp.feature = qos_pb2.DCHAL_QOS_WRED + inp.detail = qos_pb2.NO + res = stub.Get_hal_variance_info(inp) + if res.variance_result: + mismatches = [] + for entry in res.variance_result: + mismatches.append({ + 'intf': entry.ifstr, + 'table': entry.regstr, + 'field': entry.fieldstr, + 'expected': hex(entry.expected), + 'actual': hex(entry.actual), + }) + print('WRED_VARIANCE:' + json.dumps(mismatches)) + else: + print('WRED_VARIANCE:[]') +except Exception as e: + print('WRED_VARIANCE_ERROR: {}'.format(e)) +""" + + +# ── DCHAL TCAM script ──────────────────────────────────────────────────────── +# +# Deployed as /tmp/dchal_tcam.py inside syncd. Uses the dchalshell binary +# directly via subprocess pipe — the same technique used by +# dump_qos_tcam_tables.sh — because acl.py (the gRPC-based command module) +# requires acl_pb2 which is in generated/ and not on the default PYTHONPATH. +# +# Two modes (argv[1]): +# info — query region summary (Used / Start) +# prints: TCAM_INFO_JSON:{region, used, start_idx} +# dump — dump N entries from start_idx +# prints: TCAM_DUMP_JSON:[{hw_index, proto, +# dscp, qos_map_idx, stats_pkts}, ...] +# +# Both IPv4 and IPv6 entries expose 'dscp : 0xN/0x3f' as a key field. +# IPv4 entries: proto=='ipv4', dscp==int (0-63), 1 slot per DSCP. +# IPv6 entries: proto=='ipv6', dscp==int (0-63), 2 slots per DSCP — +# the first (active) slot has qos_map_idx set; the second (NOP) slot +# has qos_map_idx=None but still carries its own dscp value. +# Use tcam_ipv4_dscp_entries() / tcam_ipv6_dscp_entries() to filter. +DCHAL_TCAM_SCRIPT = """\ +import json, re, subprocess, sys + +_DCHALSHELL_DIR = '/opt/cisco/syncd/dchalshell' +_DCHALSHELL_BIN = './dchalshell' + + +def _dchal(cmd, timeout=30): + proc = subprocess.Popen( + [_DCHALSHELL_BIN], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + cwd=_DCHALSHELL_DIR, + ) + out, _ = proc.communicate((cmd + chr(10) + 'quit' + chr(10)).encode(), timeout=timeout) + return out.decode('utf-8', errors='replace') + + +def _mode_info(region): + out = _dchal('acl show tcam-info ingress region {}'.format(region)) + used = -1 + start = -1 + for line in out.splitlines(): + m = re.search(r'Start:\\s*(\\d+)', line) + if m: + start = int(m.group(1)) + m = re.search(r'Used:\\s*(\\d+)', line) + if m: + used = int(m.group(1)) + print('TCAM_INFO_JSON:' + json.dumps({'region': region, 'used': used, 'start_idx': start})) + + +def _mode_dump(start_idx, count): + out = _dchal('acl show tcam inst 0 ingress start-idx {} count {}'.format(start_idx, count)) + entries = [] + cur = None + in_ipv4 = False + in_ipv6 = False + for line in out.splitlines(): + if 'hw_index[' in line: + if cur is not None: + entries.append(cur) + m = re.search(r'hw_index\\[(\\d+)\\]', line) + hw_idx = int(m.group(1)) if m else -1 + wide = 'wide_key[1]' in line + cur = { + 'hw_index': hw_idx, + 'wide_half': wide, + 'proto': None, + 'dscp': None, + 'qos_map_idx': None, + 'stats_pkts': 0, + } + in_ipv4 = False + in_ipv6 = False + elif cur is not None: + if 'IPV4 FIELDS' in line: + in_ipv4 = True + in_ipv6 = False + cur['proto'] = 'ipv4' + elif 'IPV6 FIELDS' in line: + in_ipv6 = True + in_ipv4 = False + cur['proto'] = 'ipv6' + elif 'RESULT FIELDS' in line or 'ACL Stats' in line or 'key/mask values' in line: + in_ipv4 = False + in_ipv6 = False + m = re.match(r'\\s+dscp\\s*:\\s*(0x[0-9a-fA-F]+)/', line) + if m: + cur['dscp'] = int(m.group(1), 16) + m = re.match(r'\\s+qos_map_idx\\s*:\\s*(0x[0-9a-fA-F]+)', line) + if m: + cur['qos_map_idx'] = int(m.group(1), 16) + m = re.match(r'\\s+pkts:\\s*(\\d+)', line) + if m: + cur['stats_pkts'] = int(m.group(1)) + if cur is not None: + entries.append(cur) + print('TCAM_DUMP_JSON:' + json.dumps(entries)) + + +if len(sys.argv) < 2: + print('TCAM_ERROR: usage: dchal_tcam.py info | dump ') + sys.exit(0) + +mode = sys.argv[1] +try: + if mode == 'info': + region = sys.argv[2] if len(sys.argv) > 2 else 'ing-l3-vlan-qos' + _mode_info(region) + elif mode == 'dump': + sidx = int(sys.argv[2]) if len(sys.argv) > 2 else 1792 + cnt = int(sys.argv[3]) if len(sys.argv) > 3 else 256 + _mode_dump(sidx, cnt) + else: + print('TCAM_ERROR: unknown mode {}'.format(mode)) +except Exception as e: + print('TCAM_ERROR: {}'.format(e)) +""" + + +def deploy_dchal_helper(dut): + """Deploy DCHAL scripts into /tmp/ inside the syncd container. + + Deploys dchal_qi.py (queuing), dchal_aqm.py (AQM hw-info), + and dchal_wred_var.py (WRED variance). + Safe to call multiple times — idempotent. + + Honors the QOS_SKIP_DCHAL opt-out env var: when set to a truthy + value, this function logs once and returns without doing the + base64-encode + docker-exec dance. All five DCHAL consumer + helpers below ALSO honor QOS_SKIP_DCHAL and return their + documented failure-shape sentinel (None or '') immediately, so + skipping the deploy here is safe (nothing downstream will try + to invoke a missing script). + """ + if _dchal_skip_via_env(): + st.log("DCHAL: skipping script deploy (QOS_SKIP_DCHAL is set)") + return + for name, script in [('dchal_qi.py', DCHAL_QI_SCRIPT), + ('dchal_aqm.py', DCHAL_AQM_SCRIPT), + ('dchal_wred_var.py', DCHAL_WRED_VARIANCE_SCRIPT), + ('dchal_peak.py', DCHAL_PEAK_SCRIPT)]: + encoded = base64.b64encode(script.encode()).decode() + st.config(dut, + "sudo docker exec syncd sh -c " + "'echo {} | base64 -d > /tmp/{}'".format(encoded, name), + skip_error_check=True) + + +# ── DCHAL global opt-out env-var ───────────────────────────────────────── +# +# On the new SONiC image (202505c.1.0.0-23I-42045-20260523.192029+) the +# `insshell` binary moved to the host while its config files (sai.profile, +# etc.) stayed inside the syncd container, breaking every DCHAL read -- +# both the legacy 'docker exec syncd insshell ...' path AND a host-side +# direct invocation. Until the underlying image-side split is resolved +# (image-team fix to either restore insshell in syncd OR bind-mount the +# config files to the host), running ANY DCHAL helper produces a noisy +# RuntimeError traceback that adds zero signal to the test under +# investigation. +# +# QOS_SKIP_DCHAL gives operators a single global switch to silence ALL +# DCHAL reads for the duration of a test session. Other diagnostics +# (Ixia TX/RX stats, ARP/NDP, encap/decap correctness, CLI counters) +# continue to run -- only the per-queue/AQM/peak/WRED-variance ASIC +# register reads via insshell are skipped. +# +# Truthy values (case-insensitive): 1, true, yes, on +# Falsy (default): unset, empty, 0, false, no, off +# +# Each consumer function checks this exactly once at the top and +# returns its documented failure-shape sentinel: +# dchal_dump_platform_intfs -> '' (str) +# dchal_show_queuing -> '' (str) +# dchal_peak_stats -> None (dict-or-None contract) +# dchal_aqm_hw_info -> None (dict-or-None contract) +# dchal_wred_variance -> None (list-or-None contract) +# +# Returning the SAME sentinel each helper would emit on a real DCHAL +# failure means existing callers need no changes -- they already +# tolerate the None/empty branches. +# +# Sample usage (one-shot test invocation): +# QOS_SKIP_DCHAL=1 ./bin/spytest --testbed-file ... \ +# cisco/fx3/qos/qos_map/test_dscp_to_tc_portchannel_smoke_leaf0.py::... +# ───────────────────────────────────────────────────────────────────────── + +_DCHAL_SKIP_ENV = 'QOS_SKIP_DCHAL' +_DCHAL_SKIP_TRUTHY = ('1', 'true', 'yes', 'on') + +# Module-level latch to ensure the "DCHAL is being skipped" banner only +# prints once per session no matter how many helpers get called. Resets +# only on process restart, which is the desired granularity. +_dchal_skip_logged = False + + +def _dchal_skip_via_env(): + """Return True if the global QOS_SKIP_DCHAL env-var requests skipping + all DCHAL helpers, False otherwise. + + First call (in a process) that returns True also emits a one-shot + st.log banner so the operator sees WHY DCHAL output is missing from + the test log. Subsequent True returns are silent to avoid pollution. + + Why a module-level latch and not a one-line check inline: + Putting the truthy check inline in each of the five helpers would + duplicate the parsing rule and risk drift (one place upgrades + 'TRUE' acceptance, another doesn't). Centralising here keeps the + contract a single grep'able definition. + """ + global _dchal_skip_logged + raw = os.environ.get(_DCHAL_SKIP_ENV, '').strip().lower() + if raw not in _DCHAL_SKIP_TRUTHY: + return False + if not _dchal_skip_logged: + st.log("DCHAL: all helpers globally skipped via {}={}" + .format(_DCHAL_SKIP_ENV, raw)) + _dchal_skip_logged = True + return True + + +def dchal_dump_platform_intfs(dut): + """Diagnostic: list interface names from platform.json inside syncd. + + Useful for figuring out the correct naming convention when DCHAL + reports 'cannot resolve' for an interface. + """ + if _dchal_skip_via_env(): + return '' + cmd = ( + "sudo docker exec syncd python3 -c \"" + "import json, glob, os; " + "paths = glob.glob('/usr/share/sonic/*/platform.json') " + "+ ['/usr/share/sonic/platform/platform.json']; " + "[print('FILE:', p) or " + "[print(' ', k, '->', v.get('alias','')) " + "for k,v in sorted(json.load(open(p)).get('interfaces',{}).items())] " + "for p in paths if os.path.isfile(p)]" + "\"" + ) + out = st.show(dut, cmd, skip_tmpl=True, skip_error_check=True) + st.log("=== platform.json interface names ===\n{}".format(out)) + return out + + +def dchal_show_queuing(dut, label, interface): + """Run the deployed DCHAL show-queuing script and return raw output. + + Logs a banner and the full ASIC output at each call. The returned string + can be passed directly to parse_dchal_egress_bw() or + validate_dchal_bw_vs_weights(). + """ + if _dchal_skip_via_env(): + return '' + st.log("=== DCHAL queuing [{}] for {} ===".format(label, interface)) + out = st.show( + dut, + "sudo docker exec syncd python3 /tmp/dchal_qi.py {}".format(interface), + skip_tmpl=True, skip_error_check=True) or '' + st.log(out) + return out + + +def _parse_tcam_dump_output(out): + """Parse dchalshell 'acl show tcam inst ...' text output into entry dicts.""" + import re as _re + entries = [] + cur = None + in_ipv4 = False + in_ipv6 = False + for line in out.splitlines(): + if 'hw_index[' in line: + if cur is not None: + entries.append(cur) + m = _re.search(r'hw_index\[(\d+)\]', line) + hw_idx = int(m.group(1)) if m else -1 + wide = 'wide_key[1]' in line + cur = { + 'hw_index': hw_idx, + 'wide_half': wide, + 'proto': None, + 'dscp': None, + 'qos_map_idx': None, + 'stats_pkts': 0, + } + in_ipv4 = False + in_ipv6 = False + elif cur is not None: + if 'IPV4 FIELDS' in line: + in_ipv4 = True + in_ipv6 = False + cur['proto'] = 'ipv4' + elif 'IPV6 FIELDS' in line: + in_ipv6 = True + in_ipv4 = False + cur['proto'] = 'ipv6' + elif 'RESULT FIELDS' in line or 'ACL Stats' in line or 'key/mask values' in line: + in_ipv4 = False + in_ipv6 = False + m = _re.match(r'\s+dscp\s*:\s*(0x[0-9a-fA-F]+)/', line) + if m: + cur['dscp'] = int(m.group(1), 16) + m = _re.match(r'\s+qos_map_idx\s*:\s*(0x[0-9a-fA-F]+)', line) + if m: + cur['qos_map_idx'] = int(m.group(1), 16) + m = _re.match(r'\s+pkts:\s*(\d+)', line) + if m: + cur['stats_pkts'] = int(m.group(1)) + if cur is not None: + entries.append(cur) + return entries + + +def _parse_tcam_info_output(out, region): + """Parse dchalshell 'acl show tcam-info' text output into info dict. + + Two output shapes are handled: + - Region allocated: a line containing 'Start: NNN Total: NNN Used: NNN' + - Region not created: a line containing 'created: 0' + In this case Used is unambiguously 0 (no TCAM entries allocated), + and region_created is set to False so callers can detect the transient + 'region not yet allocated' state and retry if they expect non-zero. + """ + import re as _re + used = -1 + start = -1 + region_created = True # assume created unless we see 'created: 0' + for line in out.splitlines(): + # Region allocated — 'Start: 1792 Total: 512 Used: 192' + m = _re.search(r'Start:\s*(\d+)', line) + if m: + start = int(m.group(1)) + m = _re.search(r'Used:\s*(\d+)', line) + if m: + used = int(m.group(1)) + # Region not yet created — dchalshell emits 'created: 0' with no Used line. + # Treat this as 0 entries (not a parse error). + m = _re.search(r'\bcreated:\s*0\b', line) + if m: + region_created = False + if used == -1: + used = 0 + return {'region': region, 'used': used, 'start_idx': start, + 'region_created': region_created} + + +# How long to wait between retries when syncd's gRPC server is not yet ready +# after a swss/syncd restart. Each attempt costs _DCHAL_RETRY_WAIT seconds. +_DCHAL_RETRY_WAIT = 10 +_DCHAL_RETRY_MAX = 9 # up to ~90 s total + + +def dchal_tcam_info(dut, region="ing-l3-vlan-qos", min_used=None): + """Query TCAM region summary (Used / Start) by piping directly to dchalshell. + + Args: + min_used: When set to an int > 0, retry until used >= min_used or until + _DCHAL_RETRY_MAX attempts are exhausted. Use this after a + 'config qos reload' where the TCAM region may take a moment + to be re-allocated (dchalshell returns 'created: 0' while + orchagent is still programming the region). + + Returns a dict:: + + {'region': str, 'used': int, 'start_idx': int, 'region_created': bool} + + Returns {'used': -1, ...} only on a genuine parse failure that is not a + transient gRPC-unavailable or region-not-yet-created condition. + """ + cmd = ("sudo docker exec syncd sh -c " + "'printf \"acl show tcam-info ingress region {r}\\nquit\\n\" " + "| (cd /opt/cisco/syncd/dchalshell && ./dchalshell)'".format(r=region)) + + _GRPC_NOT_READY = ("Connection refused", "Server connection not opened", + "StatusCode.UNAVAILABLE", "UNKNOWN: ipv4:") + + result = {'region': region, 'used': -1, 'start_idx': -1, 'region_created': True} + for attempt in range(_DCHAL_RETRY_MAX): + out = st.show(dut, cmd, skip_tmpl=True, skip_error_check=True) or '' + result = _parse_tcam_info_output(out, region) + + # gRPC not ready — syncd still restarting. + if result['used'] == -1 and any(sig in out for sig in _GRPC_NOT_READY): + if attempt < _DCHAL_RETRY_MAX - 1: + st.log( + "WARN: dchal_tcam_info: syncd gRPC not ready " + "(attempt {}/{}); retrying in {} s...".format( + attempt + 1, _DCHAL_RETRY_MAX, _DCHAL_RETRY_WAIT)) + st.wait(_DCHAL_RETRY_WAIT) + continue + st.log("WARN: dchal_tcam_info: gRPC still unavailable after {} attempts.".format( + _DCHAL_RETRY_MAX)) + break + + # Region not yet created after reload — wait for orchagent to allocate. + if (min_used is not None and min_used > 0 + and result['used'] < min_used + and not result.get('region_created', True)): + if attempt < _DCHAL_RETRY_MAX - 1: + st.log( + "WARN: dchal_tcam_info: region not yet created " + "(used={}, want>={}) (attempt {}/{}); retrying in {} s...".format( + result['used'], min_used, + attempt + 1, _DCHAL_RETRY_MAX, _DCHAL_RETRY_WAIT)) + st.wait(_DCHAL_RETRY_WAIT) + continue + break + + # Generic parse failure (no specific transient signal). + if result['used'] == -1: + st.log("WARN: dchal_tcam_info: could not parse Used/Start from:\n{}".format( + out[:400])) + break + + # Success (or min_used satisfied). + return result + return result + + +def dchal_tcam_dump(dut, start_idx=1792, count=256): + """Dump TCAM entries by piping directly to dchalshell inside syncd. + + Returns a list of entry dicts:: + + [{'hw_index': int, + 'wide_half': bool, # True = upper half of an IPv6 wide-key entry + 'proto': 'ipv4'|'ipv6'|None, + 'dscp': int|None, # int 0-63 for IPv4 and IPv6 entries + 'qos_map_idx': int|None, + 'stats_pkts': int}, ...] + + Returns [] on any failure. + """ + import json as _json + cmd = ("sudo docker exec syncd sh -c " + "'printf \"acl show tcam inst 0 ingress start-idx {s} count {c}\\nquit\\n\" " + "| (cd /opt/cisco/syncd/dchalshell && ./dchalshell)'".format( + s=start_idx, c=count)) + out = st.show(dut, cmd, skip_tmpl=True, skip_error_check=True) or '' + entries = _parse_tcam_dump_output(out) + if not entries: + st.log("WARN: dchal_tcam_dump: no entries parsed from output:\n{}".format(out[:300])) + else: + st.log("TCAM_DUMP_JSON:" + _json.dumps(entries)) + return entries + + +DCHAL_PEAK_SCRIPT = """\ +import json, os, re, sys +sys.path.insert(0, '/opt/cisco/syncd/dchalshell') +sys.path.insert(0, '/opt/cisco/syncd/dchalshell/commands') +try: + import show_queuing_intf + from show_queuing_intf import PortInfo, _resolve_sport_from_json + import show_peak_stats +except ImportError as _ie: + print('DCHAL_PEAK_SKIP: import failed — {}'.format(_ie)) + sys.exit(0) + +def _name_variants(name): + variants = [name] + if '_' in name: + variants.append(name.replace('_', '/', 1)) + if '/' in name: + variants.append(name.replace('/', '_', 1)) + m = re.match(r'(Ethernet)\\d+[_/](\\d+)$', name) + if m: + variants.append(m.group(1) + m.group(2)) + pj_path = '/usr/share/sonic/device/x86_64-cisco_8102_c8d48-r0/platform.json' + alt_paths = [ + '/usr/share/sonic/platform/platform.json', + '/usr/share/sonic/hwsku/platform.json', + ] + pj = None + for p in [pj_path] + alt_paths: + if os.path.isfile(p): + try: + with open(p) as f: + pj = json.load(f) + break + except Exception: + pass + if pj and 'interfaces' in pj: + for pj_name, pj_info in pj['interfaces'].items(): + alias = pj_info.get('alias', '') + if alias in variants or pj_name in variants: + if pj_name not in variants: + variants.append(pj_name) + if alias and alias not in variants: + variants.append(alias) + return variants + +if len(sys.argv) < 2: + print('DCHAL_PEAK_SKIP: no interface argument') + sys.exit(0) + +intf = sys.argv[1] +names_to_try = _name_variants(intf) +pi = None +last_err = None +for try_name in names_to_try: + try: + pi = show_queuing_intf.resolve_port(try_name) + break + except ImportError: + try: + sport, num_lanes = _resolve_sport_from_json(try_name) + pi = PortInfo(intf_name=try_name, slot=1, unit=0, slice_id=0, + asic_port=sport, fp_port=sport, num_lanes=num_lanes) + break + except Exception as e: + last_err = e + except Exception as e: + last_err = e + +if pi is None: + print('DCHAL_PEAK_SKIP: cannot resolve {} — {}'.format(intf, last_err)) + sys.exit(0) + +try: + pd = show_peak_stats.collect_peak_data(asic_port=pi.asic_port) + print(show_peak_stats.format_peak_output(pd, asic_port=pi.asic_port)) + uc = pd.uc_queue_peak[pi.asic_port] + mc = pd.mc_queue_peak[pi.asic_port] + peak_json = { + 'asic_port': pi.asic_port, + 'uc_peak': uc, + 'mc_peak': mc, + 'mem_cells': pd.mem_peak_cell, + 'mem_bytes': pd.mem_peak_cell * 416, + } + print('PEAK_JSON:' + json.dumps(peak_json)) +except Exception as e: + print('DCHAL_PEAK_ERROR: {}'.format(e)) +""" + + +def dchal_peak_stats(dut, interface, label="peak stats"): + """Run DCHAL peak stats script and return parsed per-queue peak data. + + Uses the same pattern as dchal_qi.py — deploys a standalone script + that imports show_peak_stats directly and calls collect_peak_data(). + + Returns dict: + {'uc_peak': [Q0..Q7 in cells], 'mc_peak': [Q0..Q7 in cells], + 'mem_cells': int, 'mem_bytes': int} + or None on failure. + """ + if _dchal_skip_via_env(): + return None + st.log("=== DCHAL peak stats [{}] for {} ===".format(label, interface)) + out = st.show( + dut, + "sudo docker exec syncd python3 /tmp/dchal_peak.py {}".format( + interface), + skip_tmpl=True, skip_error_check=True) + st.log(out) + for line in (out or '').splitlines(): + if line.startswith('PEAK_JSON:'): + try: + return json.loads(line[len('PEAK_JSON:'):]) + except (json.JSONDecodeError, ValueError): + st.log(" Peak JSON parse error") + return None + if 'DCHAL_PEAK_SKIP' in line or 'DCHAL_PEAK_ERROR' in line: + st.log(" Peak stats failed: {}".format(line)) + return None + return _parse_peak_stats(out) + + +def _parse_peak_stats(output): + """Parse DCHAL peak stats output into per-queue peak dict. + + Looks for the 'Queue Peak counters' section and extracts the UC-> row. + The UC-> row has 8 values in Q7..Q0 order (right to left). + Also extracts Mem Cells and bytes from Memory Peak section. + """ + if not output: + return None + result = { + 'uc_peak': [0] * 8, + 'mc_peak': [0] * 8, + 'mem_cells': 0, + 'mem_bytes': 0, + } + in_queue_section = False + for line in output.splitlines(): + stripped = line.strip() + if 'Queue Peak counters' in stripped: + in_queue_section = True + continue + if in_queue_section and stripped.startswith('UC->'): + vals = [v.strip() for v in stripped.replace('UC->', '').split() + if v.strip() and v.strip() != '|'] + nums = [] + for v in vals: + try: + nums.append(int(v)) + except ValueError: + pass + if len(nums) >= 8: + for q in range(8): + result['uc_peak'][q] = nums[7 - q] + if in_queue_section and stripped.startswith('MC->'): + vals = [v.strip() for v in stripped.replace('MC->', '').split() + if v.strip() and v.strip() != '|'] + nums = [] + for v in vals: + try: + nums.append(int(v)) + except ValueError: + pass + if len(nums) >= 8: + for q in range(8): + result['mc_peak'][q] = nums[7 - q] + if 'Mem Cells' in stripped: + parts = stripped.split(':') + if len(parts) >= 2: + cell_part = parts[1].strip().split() + if cell_part: + try: + result['mem_cells'] = int(cell_part[0]) + except ValueError: + pass + for p in cell_part: + if p.endswith('bytes)'): + try: + result['mem_bytes'] = int( + p.replace('bytes)', '').replace('(', '')) + except ValueError: + pass + return result + + +_CELL_SIZE = 416 + + +def report_peak_stats(peak_data, target_queue=None): + """Print formatted peak watermark summary.""" + if not peak_data: + st.log(" Peak stats not available") + return + sep = "=" * 70 + st.log(sep) + st.log(" QUEUE PEAK WATERMARKS (max depth during test)") + st.log(sep) + st.log(" {:>5} {:>12} {:>14} {:>14}".format( + 'Queue', 'Peak Cells', 'Peak Bytes', 'Peak MB')) + st.log(" " + "-" * 50) + for q in range(8): + cells = peak_data['uc_peak'][q] + bytes_val = cells * _CELL_SIZE + mb_val = bytes_val / (1024.0 * 1024) + marker = ' <-- target' if target_queue is not None and q == target_queue else '' + st.log(" Q{:<4} {:>12,} {:>14,} {:>13.2f}MB{}".format( + q, cells, bytes_val, mb_val, marker)) + st.log(" " + "-" * 50) + st.log(" Mem peak: {:,} cells ({:,} bytes, {:.2f} MB)".format( + peak_data['mem_cells'], + peak_data['mem_bytes'], + peak_data['mem_bytes'] / (1024.0 * 1024) if peak_data['mem_bytes'] else 0)) + st.log(sep) + + +def dchal_aqm_hw_info(dut, interface): + """Run DCHAL AQM hw-info script and return parsed per-queue AQM dict. + + Returns dict with keys per-queue arrays (Q0..Q7): + aqm, mode, min_thr, max_thr, max_prob, max_prob_cfg, + ecn_enable, drop_en, q_depth, mfair, qold + Returns None if DCHAL fails. + """ + if _dchal_skip_via_env(): + return None + st.log("=== DCHAL AQM hw-info for {} ===".format(interface)) + out = st.show( + dut, + "sudo docker exec syncd python3 /tmp/dchal_aqm.py {}".format(interface), + skip_tmpl=True, skip_error_check=True) + st.log(out) + for line in (out or '').splitlines(): + if line.startswith('AQM_JSON:'): + try: + return json.loads(line[len('AQM_JSON:'):]) + except (json.JSONDecodeError, ValueError): + st.log(" AQM JSON parse error") + return None + if 'DCHAL_AQM_SKIP' in line or 'DCHAL_AQM_ERROR' in line: + st.log(" AQM collection failed: {}".format(line)) + return None + return None + + +def dchal_wred_variance(dut): + """Run DCHAL WRED variance check and return list of mismatches. + + Returns [] if no variance (ASIC matches expected), or a list of dicts + with keys: intf, table, field, expected, actual. + Returns None on error. + """ + if _dchal_skip_via_env(): + return None + st.log("=== DCHAL WRED variance check ===") + out = st.show( + dut, + "sudo docker exec syncd python3 /tmp/dchal_wred_var.py", + skip_tmpl=True, skip_error_check=True) + st.log(out) + for line in (out or '').splitlines(): + if line.startswith('WRED_VARIANCE:'): + try: + return json.loads(line[len('WRED_VARIANCE:'):]) + except (json.JSONDecodeError, ValueError): + st.log(" WRED variance JSON parse error") + return None + if 'WRED_VARIANCE_ERROR' in line: + st.log(" WRED variance check failed: {}".format(line)) + return None + return None + + +def report_aqm_hw_info(aqm_data, fail_msgs=None): + """Print formatted AQM HW register summary and optionally validate. + + Logs a table showing per-queue AQM mode, thresholds, drop probability, + ECN, and queue depth from ASIC registers. + """ + if not aqm_data: + st.log(" AQM HW data not available — skipping") + return + + sep = "=" * 78 + st.log(sep) + st.log(" AQM HW REGISTERS (ASIC-level WRED config)") + st.log(sep) + st.log(" {:>5} {:>6} {:>10} {:>10} {:>10} {:>5} {:>5} {:>8}".format( + 'Queue', 'Mode', 'MinThr', 'MaxThr', 'MaxProb%', + 'ECN', 'Drop', 'Depth')) + st.log(" " + "-" * 72) + for q in range(8): + mode = aqm_data.get('mode', [0]*8)[q] + min_t = aqm_data.get('min_thr', [0]*8)[q] + max_t = aqm_data.get('max_thr', [0]*8)[q] + prob_cfg = aqm_data.get('max_prob_cfg', [0]*8)[q] + ecn = aqm_data.get('ecn_enable', [0]*8)[q] + drop = aqm_data.get('drop_en', [0]*8)[q] + depth = aqm_data.get('q_depth', [0]*8)[q] + st.log(" Q{:<4} {:>6} {:>10} {:>10} {:>9}% {:>5} {:>5} {:>8}".format( + q, mode, min_t, max_t, prob_cfg, ecn, drop, depth)) + st.log(sep) + + +def report_wred_variance(mismatches, fail_msgs=None): + """Print WRED variance results and add failures if mismatches found.""" + sep = "=" * 78 + st.log(sep) + st.log(" WRED VARIANCE CHECK (expected vs actual HW registers)") + st.log(sep) + if mismatches is None: + st.log(" Variance check unavailable (gRPC error)") + st.log(sep) + return + if not mismatches: + st.log(" No variance found — ASIC registers match expected values") + st.log(sep) + return + st.log(" {:>12} {:>40} {:>16} {:>10} {:>10}".format( + 'Interface', 'Table', 'Field', 'Expected', 'Actual')) + st.log(" " + "-" * 92) + for m in mismatches: + st.log(" {:>12} {:>40} {:>16} {:>10} {:>10}".format( + m.get('intf', ''), m.get('table', ''), + m.get('field', ''), m.get('expected', ''), + m.get('actual', ''))) + st.log(sep) + if fail_msgs is not None: + fail_msgs.append("WRED variance: {} register mismatch(es) found".format( + len(mismatches))) + + +# ── FX3 / Sundown1 WRED HW constants ───────────────────────────────────── +# Source: hal/inc/int_inc/cloudscale/sundown/qos/qos.h +# hal/src/cloudscale/qos/queue.c hal_cscale_qos_queue_wred_params_adjust() +# hal/src/shell/commands/qos.py _AQM_MAX_PROB_DIVISOR + +_WRED_CELL_SIZE = 416 # bytes per BAX cell (HAL_SUNDOWN1_QOS_CELL_SIZE) +_WRED_OCC_RANGE = 64 # 2^AQM_OCC_RANGE = 2^6 (HAL_SUNDOWN1_QOS_AQM_OCC_RANGE) +_WRED_MAX_PROB_HW = 0x7FF # 2047 (HAL_CSCALE_QOS_AQM_MAX_PROB) + + +def _wred_bytes_to_hw_thr(bytes_val): + """Convert CONFIG_DB bytes threshold to DCHAL HW QDES units. + + Formula (from hal_cscale_qos_queue_wred_params_adjust): + hw_thr = floor(bytes / CELL_SIZE) / OCC_RANGE + = floor(bytes / 416) / 64 + """ + return int(bytes_val) // _WRED_CELL_SIZE // _WRED_OCC_RANGE + + +def _wred_prob_to_hw(percent): + """Convert CONFIG_DB drop_probability (0-100%) to HW max_prob register. + + Formula: + max_prob = floor(percent * 2047 / 100) + """ + return int(percent) * _WRED_MAX_PROB_HW // 100 + + +def verify_wred_config_values_prog_in_dchal(dut, interface, qid, + min_threshold, max_threshold, + drop_probability): + """Verify that CONFIG_DB WRED values are correctly programmed in DCHAL HW. + + Converts CONFIG_DB byte thresholds and drop probability to the expected + DCHAL register values using FX3/Sundown1 HAL formulas, then reads back + the live ASIC AQM registers and compares them queue by queue. + + Conversion formulas (hal_cscale_qos_queue_wred_params_adjust): + min_thr = floor(min_threshold_bytes / 416) // 64 + max_thr = floor(max_threshold_bytes / 416) // 64 + max_prob = floor(drop_probability_pct * 2047 / 100) + + Args: + dut : spytest DUT handle + interface : egress interface string (e.g. 'Ethernet1_51') + qid : queue index 0-7 to validate + min_threshold : CONFIG_DB green_min_threshold (bytes, int or str) + max_threshold : CONFIG_DB green_max_threshold (bytes, int or str) + drop_probability : CONFIG_DB green_drop_probability (percent, int or str) + + Returns: + 0 — all three values match HW + -1 — min_thr mismatch + -2 — max_thr mismatch + -3 — drop_prob (max_prob) mismatch + """ + # ── Step 1: Convert CONFIG_DB values to expected HW register values ── + exp_min_thr = _wred_bytes_to_hw_thr(min_threshold) + exp_max_thr = _wred_bytes_to_hw_thr(max_threshold) + exp_max_prob = _wred_prob_to_hw(drop_probability) + + sep = "=" * 72 + st.log(sep) + st.log(" verify_wred_config_values_prog_in_dchal: {} Q{}".format( + interface, qid)) + st.log(sep) + st.log(" CONFIG_DB input:") + st.log(" green_min_threshold = {} bytes".format(min_threshold)) + st.log(" green_max_threshold = {} bytes".format(max_threshold)) + st.log(" green_drop_probability = {}%".format(drop_probability)) + st.log("") + st.log(" Expected HW registers (formula: bytes/416//64, prob*2047//100):") + st.log(" min_thr = {}".format(exp_min_thr)) + st.log(" max_thr = {}".format(exp_max_thr)) + st.log(" max_prob = {}".format(exp_max_prob)) + st.log(sep) + + # ── Step 2: Read live DCHAL AQM HW registers ────────────────────────── + deploy_dchal_helper(dut) + aqm_data = dchal_aqm_hw_info(dut, interface) + + if aqm_data is None: + st.log(" ERROR: DCHAL AQM data unavailable for {} — cannot verify".format( + interface)) + return -1 + + act_min_thr = aqm_data.get('min_thr', [0] * 8)[qid] + act_max_thr = aqm_data.get('max_thr', [0] * 8)[qid] + act_max_prob = aqm_data.get('max_prob', [0] * 8)[qid] + + # ── Step 3: Print comparison table ─────────────────────────────────── + st.log(sep) + st.log(" DCHAL AQM register comparison for Q{}:".format(qid)) + st.log(sep) + st.log(" {:>14} {:>12} {:>12} {:>8}".format( + 'Field', 'Expected', 'Actual', 'Status')) + st.log(" " + "-" * 50) + + min_ok = (act_min_thr == exp_min_thr) + max_ok = (act_max_thr == exp_max_thr) + prob_ok = (act_max_prob == exp_max_prob) + + st.log(" {:>14} {:>12} {:>12} {:>8}".format( + 'min_thr', exp_min_thr, act_min_thr, 'OK' if min_ok else '** FAIL')) + st.log(" {:>14} {:>12} {:>12} {:>8}".format( + 'max_thr', exp_max_thr, act_max_thr, 'OK' if max_ok else '** FAIL')) + st.log(" {:>14} {:>12} {:>12} {:>8}".format( + 'max_prob', exp_max_prob, act_max_prob, 'OK' if prob_ok else '** FAIL')) + st.log(sep) + + # ── Step 4: Return result code ──────────────────────────────────────── + if not min_ok: + st.log(" RESULT: FAIL — min_thr mismatch (expected {}, got {})".format( + exp_min_thr, act_min_thr)) + return -1 + if not max_ok: + st.log(" RESULT: FAIL — max_thr mismatch (expected {}, got {})".format( + exp_max_thr, act_max_thr)) + return -2 + if not prob_ok: + st.log(" RESULT: FAIL — max_prob mismatch (expected {}, got {})".format( + exp_max_prob, act_max_prob)) + return -3 + + st.log(" RESULT: PASS — all WRED HW registers match CONFIG_DB") + return 0 + + +def unbind_wred_from_queues(dut, egress_intf, wait_secs=5): + """Remove the wred_profile field from each WRED-bound queue in CONFIG_DB. + + Deletes the ``wred_profile`` hash field from + ``QUEUE||`` for every queue in WRED_BOUND_QUEUES + (0-6). Waits *wait_secs* afterwards for orchagent to propagate + the change through SAI and into DCHAL HW. + + This is the config-path equivalent of test-plan step 19.6: + redis-cli -n 4 HDEL "QUEUE||" wred_profile + + Args: + dut: spytest DUT handle + egress_intf: egress interface string (e.g. 'Ethernet1_49') + wait_secs: seconds to wait for orchagent propagation (default 5) + """ + for q in WRED_BOUND_QUEUES: + key = "QUEUE|{}|{}".format(egress_intf, q) + st.log(" unbind_wred_from_queues: HDEL \"{}\" wred_profile".format(key)) + st.config( + dut, + 'sonic-db-cli CONFIG_DB HDEL "{}" "wred_profile"'.format(key), + skip_error_check=True) + st.log(" unbind_wred_from_queues: waiting {}s for orchagent".format( + wait_secs)) + st.wait(wait_secs) + + +# ── Redis / CONFIG_DB parsers ───────────────────────────────────────────── + +def parse_redis_hgetall(output): + """Parse sonic-db-cli HGETALL output into a dict. + + Newer sonic-db-cli prints the whole hash as one Python dict line, e.g. + ``{'0': '0', '1': '1', ...}``. Older paths emit redis-cli-style numbered + lines or alternating key/value lines. Shell captures may append a prompt + line after the dict; that must not be paired as a bogus key/value. + """ + for raw_line in output.strip().splitlines(): + line = raw_line.strip() + if line.startswith('{') and line.endswith('}'): + try: + parsed = ast.literal_eval(line) + except (ValueError, SyntaxError): + continue + if isinstance(parsed, dict): + return {str(k): str(v) for k, v in parsed.items()} + + result = {} + cleaned = [] + for raw_line in output.strip().splitlines(): + line = raw_line.strip() + if not line: + continue + if line.endswith('$') and '@' in line: + continue + m = re.match(r'^\d+\)\s*(.*)$', line) + val = m.group(1) if m else line + val = val.strip('"').strip("'") + cleaned.append(val) + + for i in range(0, len(cleaned) - 1, 2): + result[cleaned[i]] = cleaned[i + 1] + return result + + +def parse_redis_hget(output): + """Parse sonic-db-cli HGET output into a single string value. + + Returns '' for nil/empty responses. Filters out shell prompts + (e.g. 'admin@sonic:~$') that appear when the key has no value. + """ + for raw_line in output.strip().splitlines(): + line = raw_line.strip() + if not line: + continue + if '@' in line and line.rstrip().endswith('$'): + continue + for ch in ('"', "'"): + if line.startswith(ch) and line.endswith(ch): + line = line[1:-1] + return line + return '' + + +def get_first_asic_wred_profile_oid(dut_handle): + """Return the ``oid:0x...`` string for the first WRED object in ASIC_DB, or ''. + + Used to obtain the expected *bound* WRED profile OID before unbind tests. + """ + out = st.show( + dut_handle, + "sonic-db-cli ASIC_DB KEYS '*SAI_OBJECT_TYPE_WRED*'", + skip_tmpl=True) + for line in str(out).splitlines(): + line = line.strip() + if 'SAI_OBJECT_TYPE_WRED' in line and line.startswith('ASIC_STATE'): + parts = line.split(':') + return ':'.join(parts[-2:]) if len(parts) >= 2 else line + return '' + + +def get_queue_wred_oid(dut_handle, port, queue_idx): + """Return ``SAI_QUEUE_ATTR_WRED_PROFILE_ID`` for a specific port/queue from ASIC_DB. + + Resolves the queue object id via ``COUNTERS_QUEUE_NAME_MAP`` in COUNTERS_DB, + then reads ``SAI_QUEUE_ATTR_WRED_PROFILE_ID`` for that queue. + + Returns: + WRED profile OID (e.g. ``oid:0x1300...``) when bound, ``oid:0x0`` when + unbound, or ``''`` if the queue OID could not be resolved. + """ + oid_out = st.show( + dut_handle, + 'sonic-db-cli COUNTERS_DB HGET COUNTERS_QUEUE_NAME_MAP ' + '"{}:{}"'.format(port, queue_idx), + skip_tmpl=True) + queue_oid = parse_redis_hget(oid_out).strip() + if not queue_oid: + st.log(" get_queue_wred_oid: no OID for {}:{}".format(port, queue_idx)) + return '' + + asic_key = "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:{}".format(queue_oid) + wred_out = st.show( + dut_handle, + 'sonic-db-cli ASIC_DB HGET "{}" ' + '"SAI_QUEUE_ATTR_WRED_PROFILE_ID"'.format(asic_key), + skip_tmpl=True) + return parse_redis_hget(wred_out).strip() + + +def verify_queues_wred_binding(dut_handle, port, queues, expected_oid, + fail_msgs, label): + """Check ``SAI_QUEUE_ATTR_WRED_PROFILE_ID`` for each queue index on *port*. + + Appends mismatches to *fail_msgs*. Returns the number of queues that matched + *expected_oid*. + """ + matched = 0 + for q in queues: + actual = get_queue_wred_oid(dut_handle, port, q) + if actual == expected_oid: + st.log(" {} Q{} WRED={} — OK".format(label, q, actual)) + matched += 1 + else: + fail_msgs.append( + "{}: Q{} WRED expected='{}', actual='{}'".format( + label, q, expected_oid, actual)) + return matched + + +# ── Queue counter / MAC helpers ─────────────────────────────────────────── + +def get_queue_counters(dut_handle, interface): + """Return {qi: {'pkts': int, 'bytes': int, 'drop_pkts': int, 'drop_bytes': int}} + from 'show queue counters'. Returns an empty dict if output cannot be parsed. + """ + output = st.show(dut_handle, "show queue counters {}".format(interface), + skip_tmpl=True) + st.log("Raw queue counters output:\n{}".format(output)) + counters = {} + for line in output.splitlines(): + if interface not in line: + continue + cols = line.split() + if len(cols) < 6: + continue + m = re.match(r'ALL(\d+)', cols[1]) + if not m: + continue + try: + qi = int(m.group(1)) + counters[qi] = { + 'pkts': int(cols[2].replace(',', '')), + 'bytes': int(cols[3].replace(',', '')), + 'drop_pkts': int(cols[4].replace(',', '')), + 'drop_bytes': int(cols[5].replace(',', '')), + } + except (ValueError, IndexError): + continue + return counters + + +def parse_dchal_queue_counters(dchal_output): + """Parse DCHAL show-queuing output into per-queue counter dict. + + Returns {qi: {'pkts': int, 'bytes': int, 'drop_pkts': int, 'drop_bytes': int}} + matching the same format as get_queue_counters() so they are interchangeable. + + Parses the QOS GROUP N blocks:: + + +-------------------------------------------------------------+ + | QOS GROUP 0 | + +-------------------------------------------------------------+ + | Tx Pkts | 50800151| 0| + | Tx Byts | 6502419328| 0| + | WRED/AFD & Tail Drop Pkts | 51803821| 0| + | WRED/AFD & Tail Drop Byts | 6630889088| 0| + +-------------------------------------------------------------+ + """ + def _parse_val(text): + """Extract first integer from a pipe-delimited DCHAL table cell.""" + vals = [] + for p in text.split('|'): + p = p.strip() + if p and p != '-': + try: + vals.append(int(p.replace(',', ''))) + except ValueError: + pass + return vals[0] if vals else 0 + + counters = {} + current_qi = None + for line in dchal_output.splitlines(): + stripped = line.strip() + + if 'QOS GROUP' in stripped: + qg_match = re.search(r'QOS GROUP\s+(\d+)', stripped) + if qg_match: + current_qi = int(qg_match.group(1)) + counters.setdefault(current_qi, { + 'pkts': 0, 'bytes': 0, + 'drop_pkts': 0, 'drop_bytes': 0, + 'q_depth_bytes': 0}) + else: + current_qi = None + continue + + if current_qi is None: + continue + + if 'Tx Pkts' in stripped and 'Drop' not in stripped: + counters[current_qi]['pkts'] = _parse_val( + stripped.split('Tx Pkts')[-1]) + elif 'Tx Byts' in stripped and 'Drop' not in stripped: + counters[current_qi]['bytes'] = _parse_val( + stripped.split('Tx Byts')[-1]) + elif 'Drop Pkts' in stripped: + counters[current_qi]['drop_pkts'] = _parse_val( + stripped.split('Drop Pkts')[-1]) + elif 'Drop Byts' in stripped: + counters[current_qi]['drop_bytes'] = _parse_val( + stripped.split('Drop Byts')[-1]) + elif 'Q Depth' in stripped: + counters[current_qi]['q_depth_bytes'] = _parse_val( + stripped.split('Q Depth Byts')[-1]) + + return counters + + +def get_dchal_queue_counters(dut_handle, interface, label="DCHAL snapshot"): + """Get per-queue counters via DCHAL (ASIC-level, more reliable than + 'show queue counters' on FX3). + + Returns {qi: {'pkts': int, 'bytes': int, 'drop_pkts': int, + 'drop_bytes': int, 'q_depth_bytes': int}} + Returns {} if DCHAL produces no output — does NOT fall back to + 'show queue counters' which is unreliable on FX3. + """ + dchal_out = dchal_show_queuing(dut_handle, label, interface) + counters = parse_dchal_queue_counters(dchal_out) + if not counters: + st.log("WARNING: DCHAL returned no queue data for {} [{}] — " + "returning empty counters. " + "'show queue counters' will NOT be used as fallback " + "(unreliable on FX3).".format(interface, label)) + return {} + return counters + + +def get_mid_traffic_depth(dut_handle, interface): + """Capture instantaneous per-queue depth via DCHAL while traffic is flowing. + + Returns {qi: depth_bytes} for each QOS GROUP. + """ + dchal_out = dchal_show_queuing(dut_handle, "mid-traffic depth", interface) + counters = parse_dchal_queue_counters(dchal_out) + return {qi: data.get('q_depth_bytes', 0) for qi, data in counters.items()} + + +def log_queue_counters(q_snap, all_queues=range(8)): + """Print per-queue counter snapshot as a formatted table. + + q_snap: {qi: {'pkts': int, 'bytes': int, 'drop_pkts': int, 'drop_bytes': int}} + Suitable for output from get_dchal_queue_counters() or get_queue_counters(). + """ + st.log(" {:<8} {:>20} {:>16} {:>20} {:>16}".format( + "Queue", "Tx Pkts", "Tx Bytes", "Drop Pkts", "Drop Bytes")) + st.log(" " + "-" * 76) + for qi in all_queues: + d = q_snap.get(qi, {}) + st.log(" Q{:<7} {:>20,} {:>16,} {:>20,} {:>16,}".format( + qi, + d.get('pkts', 0), d.get('bytes', 0), + d.get('drop_pkts', 0), d.get('drop_bytes', 0))) + + +def get_dut_mac(dut_handle, interface): + """Return the MAC address string of a DUT interface.""" + output = st.show(dut_handle, "ip -o link show {}".format(interface), + skip_tmpl=True) + m = re.search(r'link/ether\s+([\da-fA-F:]+)', output) + if m: + return m.group(1) + st.warn("Could not determine MAC for {}; using zeros".format(interface)) + return "00:00:00:00:00:00" + +# ── DCHAL per-queue counter parsing ─────────────────────────────────────── + +def parse_dchal_queue_stats(dchal_output): + """Parse DCHAL queuing output into per-queue statistics. + + Returns ``{qos_group_int: {'tx_pkts': int, 'tx_bytes': int, + 'wred_drop_pkts': int, 'wred_drop_bytes': int, 'q_depth_bytes': int}}``. + + Extracts unicast column values from each numbered QOS GROUP block (0-7). + CONTROL and SPAN QOS GROUP sections are ignored to prevent overwriting + the last numbered group's data. + """ + stats = {} + current_qg = None + for line in dchal_output.splitlines(): + stripped = line.strip() + if 'QOS GROUP' in stripped: + m = re.search(r'QOS GROUP\s+(\d+)', stripped) + if m: + current_qg = int(m.group(1)) + if current_qg not in stats: + stats[current_qg] = {} + else: + current_qg = None + continue + if current_qg is None: + continue + parts = stripped.split('|') + if len(parts) < 4: + continue + label = parts[1].strip() + unicast_str = parts[2].strip() + if not unicast_str: + continue + try: + val = int(unicast_str) + except ValueError: + continue + if 'Tx Pkts' in label and 'Drop' not in label: + stats[current_qg]['tx_pkts'] = val + elif 'Tx Byts' in label and 'Drop' not in label: + stats[current_qg]['tx_bytes'] = val + elif 'WRED' in label and 'Pkts' in label: + stats[current_qg]['wred_drop_pkts'] = val + elif 'WRED' in label and 'Byts' in label: + stats[current_qg]['wred_drop_bytes'] = val + elif 'Q Depth' in label: + stats[current_qg]['q_depth_bytes'] = val + return stats + +def clear_dut_counters(dut_handle): + """Clear interface and queue counters via CLI, with Redis COUNTERS_DB fallback. + + sonic-clear counters/queuecounters save the current counter values as a + baseline in /tmp/.portstat-iterate and /tmp/.queuestat-iterate. + 'show interfaces counters' and 'show queue counters' then display + deltas from that baseline. We must NOT delete these files — doing so + would cause the CLI to show raw cumulative values instead of zeros. + """ + st.config(dut_handle, "sonic-clear counters", skip_error_check=True, + sudo=False) + st.config(dut_handle, "sonic-clear queuecounters", skip_error_check=True, + sudo=False) + + st.config(dut_handle, + "sonic-db-cli COUNTERS_DB EVAL " + "\"local keys = redis.call('KEYS','USER_WATERMARKS*') " + "for _,k in ipairs(keys) do redis.call('DEL',k) end " + "return #keys\" 0", + skip_error_check=True) + + st.log("DUT counters cleared (CLI + Redis watermarks)") + + +# -------------------------------------------------------------------------- +# Diagnostic-only `show queue counters` dump (CLI source of truth) +# -------------------------------------------------------------------------- +# Purpose: complement the DCHAL ASIC-counter snapshots with a parallel +# capture from `show queue counters`, which reads COUNTERS_DB (populated +# by counterpoll's queue stats poller). This is a SECOND data source -- +# the DCHAL path is still authoritative for PASS/FAIL. +# +# Why we want it on top of DCHAL: +# * On new SONiC images dchal_qi.py can fail silently with empty output +# (split insshell host/container runtime, missing sai.profile, etc.). +# When that happens the test today logs "(no DUT2 per-queue deltas +# available)" and we lose visibility. A CLI snapshot survives those +# failures. +# * Operators can correlate the CLI numbers (queue 0..7 packet / byte / +# drop columns) against the DCHAL output to catch drift between the +# two paths -- itself diagnostic information. +# +# Why we don't use it as the AUTHORITATIVE source (yet): +# * Counter poll cadence is 10s by default -- the AFTER snapshot can +# race ahead of the most recent COUNTERS_DB update. +# * The legacy "_QueueCounterSnap ... unreliable on FX3" verdict still +# stands for assertion logic. This helper exists purely to +# supplement the log, not to drive verdicts. +# +# Pattern: +# sonic-clear queuecounters # called at BEFORE (per DUT, once) +# ... traffic ... +# show queue counters # called at AFTER (per port) -- already +# # displays delta-from-baseline because +# # sonic-clear saved /tmp/.queuestat-iterate +def _parse_show_queue_counters(raw): + """Parse the `show queue counters ` text into per-queue dicts. + + Observed format on this build (SONiC FX3, mid-2026): + + For namespace : + Port TxQ Counter/pkts Counter/bytes Drop/pkts Drop/bytes + ------------ ----- -------------- --------------- ----------- ------------ + Ethernet1_49 ALL0 30 3360 0 0 + Ethernet1_49 ALL1 0 0 0 0 + ... + Ethernet1_49 ALL7 0 0 0 0 + + On older builds the TxQ column may show ``UC0``/``MC0``/``UC1``/``MC1`` + style labels (UC + MC split into separate rows). This parser + handles both by stripping the alpha prefix and using the trailing + digit(s) as the queue index, then SUMMING any rows that map to the + same queue index. That gives us per-queue UC+MC totals on both + flavors of build with zero special-casing. + + Args: + raw: full stdout from one `show queue counters ` call + (skip_tmpl=True). May be None or empty. + + Returns: + {qi: {'pkts': int, 'bytes': int, 'drop_pkts': int, + 'drop_bytes': int}} for qi in 0..7. Queues not seen in + the input map to all-zero dicts so callers can index any of + 0..7 without KeyError. On parse failure, returns the + all-zeros dict (does not raise). + """ + # Pre-populate so every consumer can index 0..7 without guarding. + parsed = {qi: {'pkts': 0, 'bytes': 0, 'drop_pkts': 0, 'drop_bytes': 0} + for qi in range(8)} + if not raw: + return parsed + + # Match rows like " ALL0 30 3360 0 0" or " UC0 ..." + # Whitespace separators (no fixed column widths -- the dashes-row + # under each header gives the eye a column boundary but the data + # rows use plain whitespace). Anchored at the queue-label column; + # the leading port name is whatever the caller passed and we + # don't constrain it. + # + # Numbers may include comma thousands separators (e.g. "1,280") + # on some SONiC builds -- this is purely a display convention + # added by sonic-cli's queuestat helper when the value exceeds + # 999. Accept the commas in the regex and strip them before + # int() conversion. This was a real bug: bursts of >=100 packets + # produced byte counts >=1000 (e.g. 100 pkts * 128 bytes = 12,800), + # which the comma-less regex silently rejected -- the entire row + # got dropped and the queue's parsed entry stayed at zero, so + # the flow table showed "Q5 D2-OUT 0->0(+0)" even when the raw + # CLI dump above clearly showed "Ethernet1_49 ALL5 10 1,280 0 0". + # + # Group breakdown: + # (\S+) port name (e.g. Ethernet1_49) + # ([A-Z]+) queue-label prefix: ALL / UC / MC / etc. + # (\d+) queue index (0..7 on this build, but we allow more) + # then four space-separated unsigned integers in this order: + # counter/pkts counter/bytes drop/pkts drop/bytes + # each may carry comma thousands separators. + row_re = re.compile( + r"^\s*(\S+)\s+" # port name (e.g. Ethernet1_49) + r"([A-Za-z]+)(\d+)\s+" # ALL0 / UC3 / MC5 ... + r"([\d,]+)\s+([\d,]+)\s+" # pkts, bytes (commas OK) + r"([\d,]+)\s+([\d,]+)\s*$" # drop_pkts, drop_bytes (commas OK) + ) + + # Track how many rows looked like data but failed to parse. + # Most filtered lines are header/banner noise (already pre-filtered + # below), so a non-zero count here indicates a real format drift + # that callers should know about. Currently logged only when + # >0 to avoid noise on healthy parses. + unparseable_data_rows = 0 + + for line in raw.splitlines(): + # Cheap pre-filter -- skip headers, the dash row, namespace + # banner, "Last cached time" annotations, and blank lines + # without paying the regex cost. All of these are normal + # CLI noise, NOT a format mismatch. + stripped = line.strip() + if not stripped \ + or stripped.startswith('-') \ + or stripped.startswith('For namespace') \ + or stripped.lower().startswith('port') \ + or 'Last cached time' in stripped \ + or stripped.startswith('admin@'): + continue + m = row_re.match(line) + if not m: + # Looks like a data row (passed the pre-filter) but the + # regex didn't match. Could be a format drift on a new + # SONiC build. Bump the counter so we can warn the + # caller once; don't try to recover. + unparseable_data_rows += 1 + continue + _port, _qkind, qi_str, pkts, _bytes, dpkts, dbytes = m.groups() + try: + qi = int(qi_str) + except ValueError: + continue + if qi < 0 or qi >= 8: + # Out-of-range queue index -- belongs in a future-flexible + # bucket but we don't have one. Skip without noise. + continue + # SUM into the bucket: lets us collapse UC/MC rows on + # older builds while being a no-op on ALL builds. Strip + # comma thousands separators before int() conversion. + parsed[qi]['pkts'] += int(pkts.replace(',', '')) + parsed[qi]['bytes'] += int(_bytes.replace(',', '')) + parsed[qi]['drop_pkts'] += int(dpkts.replace(',', '')) + parsed[qi]['drop_bytes'] += int(dbytes.replace(',', '')) + + if unparseable_data_rows: + # Format drift: emit a single warning per parse call so the + # operator sees there's data we couldn't interpret. We don't + # raise -- the partial result is still useful (other queues + # may have parsed cleanly), and the raw dump is already in + # the log if anyone wants to eyeball it. + try: + st.log( + "_parse_show_queue_counters: {} data row(s) didn't match " + "the regex -- possible format drift on this SONiC build. " + "Parsed result may be incomplete; raw CLI text was " + "already dumped above for forensic comparison.".format( + unparseable_data_rows)) + except Exception: + # Never let logging trouble break the parser. + pass + + return parsed + + +def format_queue_flow_table(snap_before, snap_after, port_order, + title=None, ixia_columns=None, + extra_rows=None, footer=None): + """Render a BEFORE -> AFTER (delta) per-queue table across many hops. + + Used by the smoke test to visualize the queue counter progression + along the full data path: + + IXIA-TX -> D1-IN -> D1-OUT -> D2-IN -> D2-OUT -> IXIA-RX + + SONiC hops (D1/D2 ports) get per-queue B->A(D) cells from the CLI + `show queue counters` snapshots. Ixia hops have NO queue concept + on the wire, so their cells are filled from a separate + ``ixia_columns`` dict that the caller pre-populates with the + burst's expected_tc-row totals and per-protocol noise classification + counts. + + Args: + snap_before: dict keyed by (dut_handle, port) -> {qi: {'pkts', + 'drop_pkts', ...}}. Output of dump_show_queue_counters(). + Only SONiC ports go in here. + snap_after: same shape, captured AFTER traffic. + port_order: list of (label, dut_handle, port) triples in the + order columns should appear, left-to-right. Label is the + human-readable hop name (e.g. "D1-IN", "D1-OUT", "IXIA-TX"). + For Ixia columns the dut_handle field is None and the + port field carries the Ixia port-handle string (used as + a stable key into ixia_columns). + title: optional banner string prepended to the table. + ixia_columns: optional dict keyed by the Ixia column's port- + handle string -> + { + 'per_q': {qi: {'pkts': N, 'drops': N}}, # one row per queue + 'extras': {row_label: {'pkts': N, 'drops': N}}, + # extra rows + # like LACP/ARP + } + Cells for queue rows that lack a 'per_q' entry render as + '-' so the operator can tell "Ixia has no per-queue notion + here" rather than "Ixia received zero". Extras populate + the rows named by extra_rows (see below). + extra_rows: optional list of extra row labels to add BELOW the + 8 queue rows. Typically the union of protocol classes + seen across all Ixia capture buffers (e.g. ['LACP', 'ARP', + 'BGP-TCP']). Per-row SONiC cells render as '-' (no per- + protocol breakdown in SONiC queue stats); per-row Ixia + cells render from ixia_columns[col]['extras'][row_label]. + footer: optional multi-line string appended below the table. + Used to dump Ixia aggregate counters (IxNet TX, agg RX, + capture-decoded count) so all three Ixia-side numbers are + visible in one place. + + Returns: + Multi-line string suitable for st.log(). Always 8 queue rows + (0..7), plus zero or more extra rows below them. If both + snapshots are empty AND no Ixia columns are supplied, returns + a single "(no CLI snapshots captured)" line. + + Does not raise. + """ + if not snap_before and not snap_after and not ixia_columns: + return "{}\n(no CLI snapshots captured)".format(title or "") + + snap_before = snap_before or {} + snap_after = snap_after or {} + port_order = port_order or [] + ixia_columns = ixia_columns or {} + extra_rows = extra_rows or [] + + # Per-column width budget: "B->A(+D)" where each number is up to + # 10 digits (10 + 2 + 10 + 4 + 10 = ~36). Bursts in this test are + # 5 packets so most cells will be much narrower, but we size for + # the worst case so cumulative-counter fallback (when sonic-clear + # fails) still renders without truncation. + cell_w = 22 + # Width of the leading queue-label / row-label column. Wide + # enough for "BGPv6-TCP" + a little slack so the extra-rows + # section never breaks alignment. + rowlbl_w = 12 + + def _fmt_triple(b, a): + # b/a are ints. Compose "b->a(+d)" or "b->a(d)" honoring sign. + d = a - b + sign = "+" if d >= 0 else "" + return "{}->{}({}{})".format(b, a, sign, d) + + def _fmt_ixia_pkts(pkts, ref_pkts=None): + # For Ixia columns we display absolute count, optionally with + # a "/ref" reference (so "5/5" means we got 5, expected 5). + # Loss = ref - pkts is shown in the drops row below. + if ref_pkts is None: + return "{}".format(pkts) + return "{}/{}".format(pkts, ref_pkts) + + def _cell(text): + # Pad / truncate to cell_w. Truncation is unlikely but if + # cumulative counters are huge we'd rather show ">99...<" than + # break alignment. + if len(text) > cell_w: + return text[:cell_w - 1] + ">" + return text.ljust(cell_w) + + def _rowlbl(text): + if len(text) > rowlbl_w: + return text[:rowlbl_w - 1] + ">" + return text.ljust(rowlbl_w) + + def _is_ixia_col(dut, port): + # Convention: Ixia columns have dut=None. Use port string as + # the key into ixia_columns. + return dut is None and port in ixia_columns + + lines = [] + if title: + lines.append(title) + n_cols = max(1, len(port_order)) + border = "=" * (rowlbl_w + 2 + (cell_w + 3) * n_cols) + lines.append(border) + + # ── Header rows ─────────────────────────────────────────────────── + hdr_labels = _rowlbl("Queue") + " |" + hdr_pkts = _rowlbl("") + " |" + hdr_drops = _rowlbl("") + " |" + for label, dut_h, port in port_order: + hdr_labels += " " + _cell(label) + " |" + if _is_ixia_col(dut_h, port): + # Ixia columns: counts are absolute rx vs. ref, drop = loss + hdr_pkts += " " + _cell("pkts: rx/ref") + " |" + hdr_drops += " " + _cell("drop: tx-rx") + " |" + else: + hdr_pkts += " " + _cell("pkts: B->A(D)") + " |" + hdr_drops += " " + _cell("drop: B->A(D)") + " |" + lines.append(hdr_labels) + lines.append(hdr_pkts) + lines.append(hdr_drops) + lines.append("-" * len(border)) + + # ── Data rows: one block per queue (always 8) ───────────────────── + for qi in range(8): + pkts_row = _rowlbl(" Q{}".format(qi)) + " |" + drops_row = _rowlbl("") + " |" + for _label, dut_h, port in port_order: + if _is_ixia_col(dut_h, port): + # Ixia cell: fill ONLY at the queues we have data for + # (typically just expected_tc). Other queues render + # as "-" because Ixia has no per-queue counter. + col = ixia_columns.get(port, {}) or {} + per_q = col.get('per_q', {}) or {} + q_entry = per_q.get(qi) + if q_entry is None: + pkts_row += " " + _cell("-") + " |" + drops_row += " " + _cell("-") + " |" + continue + pkts = int(q_entry.get('pkts', 0)) + drops = int(q_entry.get('drops', 0)) + ref = q_entry.get('ref') + pkts_row += " " + _cell( + _fmt_ixia_pkts(pkts, ref)) + " |" + drops_row += " " + _cell(str(drops)) + " |" + continue + # SONiC cell. + key = (dut_h, port) + bsnap = snap_before.get(key) + asnap = snap_after.get(key) + if bsnap is None and asnap is None: + pkts_row += " " + _cell("n/a") + " |" + drops_row += " " + _cell("n/a") + " |" + continue + # Tolerate one-sided snapshots: missing side = zeros. + bq = (bsnap or {}).get(qi, {}) + aq = (asnap or {}).get(qi, {}) + b_pkts = int(bq.get('pkts', 0)) + a_pkts = int(aq.get('pkts', 0)) + b_drops = int(bq.get('drop_pkts', 0)) + a_drops = int(aq.get('drop_pkts', 0)) + pkts_row += " " + _cell(_fmt_triple(b_pkts, a_pkts)) + " |" + drops_row += " " + _cell(_fmt_triple(b_drops, a_drops)) + " |" + lines.append(pkts_row) + lines.append(drops_row) + + # ── Extra rows (LACP / ARP / etc.) below the queue rows ─────────── + if extra_rows: + lines.append("-" * len(border)) + for row_label in extra_rows: + pkts_row = _rowlbl(row_label) + " |" + drops_row = _rowlbl("") + " |" + for _label, dut_h, port in port_order: + if _is_ixia_col(dut_h, port): + col = ixia_columns.get(port, {}) or {} + extras = col.get('extras', {}) or {} + entry = extras.get(row_label) + if entry is None: + pkts_row += " " + _cell("-") + " |" + drops_row += " " + _cell("-") + " |" + continue + pkts = int(entry.get('pkts', 0)) + drops = int(entry.get('drops', 0)) + pkts_row += " " + _cell(str(pkts)) + " |" + drops_row += " " + _cell(str(drops)) + " |" + continue + # SONiC has no per-protocol classification in queue + # stats -- mark these cells as "-" so it's obvious + # the row is Ixia-only. + pkts_row += " " + _cell("-") + " |" + drops_row += " " + _cell("-") + " |" + lines.append(pkts_row) + lines.append(drops_row) + + lines.append(border) + if footer: + lines.append(footer) + lines.append(border) + return "\n".join(lines) + + +def dump_show_queue_counters(label, duts_ports, clear_first=False): + """Dump `show queue counters ` for each (dut, ports) pair. + + Args: + label: human-readable banner (e.g. "BEFORE leaf0-ucast[tc5-dscp46]"). + Printed in the log so consumers can pair BEFORE/AFTER blocks. + duts_ports: iterable of (dut_handle, [port, port, ...]) tuples. + Each port gets one `show queue counters ` call. + Ports may be physical interfaces (Ethernet*) or LAG names + (PortChannel*); SONiC's CLI accepts both, though LAG + aggregation may be partial depending on build. + clear_first: when True, runs `sonic-clear queuecounters` on each + DUT BEFORE the dump. Use this at the BEFORE point of a + BEFORE/AFTER pair so the AFTER dump naturally shows + delta-from-baseline (the SONiC CLI displays values relative + to the saved /tmp/.queuestat-iterate file). + At the AFTER point pass clear_first=False so the dump + reflects "what arrived during the test". + + Behavior: + * Every shell call is wrapped in try/except. A CLI hiccup never + propagates out of this helper -- it just logs the exception + and moves on. This is a DIAGNOSTIC dump: it must never be the + reason a test fails. + * Output is logged in raw form (skip_tmpl=True) under a clear + banner per port. Operators can grep the log by the `label` + string to pair BEFORE/AFTER blocks. + + Returns: + Dict {(dut_handle, port): {qi: {'pkts', 'bytes', 'drop_pkts', + 'drop_bytes'}}} for every port we successfully read. Ports + that failed to read are simply absent from the dict (the + failure is logged). Callers may ignore the return value if + they only want the raw log dump. + + Does not raise. + """ + parsed_snap = {} + + if not duts_ports: + st.log("dump_show_queue_counters[{}]: no DUT/port pairs supplied -- " + "nothing to dump".format(label)) + return parsed_snap + + border = "=" * 78 + st.log(border) + st.log("show queue counters dump :: {} :: clear_first={}".format( + label, clear_first)) + st.log(border) + + for entry in duts_ports: + try: + dut_handle, ports = entry + except (TypeError, ValueError): + st.log("dump_show_queue_counters[{}]: skipping malformed entry " + "{!r} (expected (dut, [ports]))".format(label, entry)) + continue + if dut_handle is None: + st.log("dump_show_queue_counters[{}]: skipping entry with None " + "DUT handle (likely single-DUT topology)".format(label)) + continue + port_list = [p for p in (ports or []) if p] + if not port_list: + st.log("dump_show_queue_counters[{}]: DUT {} has no ports to " + "dump -- skipping".format(label, dut_handle)) + continue + + if clear_first: + try: + # Note: sonic-clear queuecounters saves the current + # cumulative counter values as a delta baseline in + # /tmp/.queuestat-iterate. Subsequent `show queue + # counters` then renders values relative to that file. + # We must NOT delete /tmp/.queuestat-iterate -- doing + # so causes the CLI to flip back to absolute values. + # See clear_dut_counters() docstring for the full + # description of this contract. + st.config(dut_handle, "sonic-clear queuecounters", + skip_error_check=True, sudo=False) + st.log("dump_show_queue_counters[{}]: DUT {} -- " + "sonic-clear queuecounters issued; subsequent " + "`show queue counters` will report deltas from " + "this baseline".format(label, dut_handle)) + except Exception as exc: + # If clear fails we still proceed with the dump. The + # numbers will be cumulative-since-boot instead of + # delta-since-clear, but they're still useful for + # eyeballing whether traffic moved at all. This is + # exactly the fallback behavior requested in the + # original feature ticket: "if clear counter not work, + # we should keep counter baseline before sending". + st.log("dump_show_queue_counters[{}]: DUT {} -- " + "sonic-clear queuecounters FAILED ({}); " + "dump will show CUMULATIVE values instead of " + "deltas".format(label, dut_handle, exc)) + + for port in port_list: + try: + # skip_tmpl=True: return raw CLI text instead of a + # parsed list-of-dicts. We want the human-readable + # table in the log AND the parsed dict for the + # summary table renderer. + out = st.show(dut_handle, + "show queue counters {}".format(port), + skip_tmpl=True) + st.log("--- show queue counters {} (DUT {}) [{}] ---\n{}" + .format(port, dut_handle, label, + out if out else "")) + # Parse defensively -- failures inside the parser + # return all-zero dicts rather than raising, so we + # always have something to put in the snapshot. + parsed_snap[(dut_handle, port)] = \ + _parse_show_queue_counters(out) + except Exception as exc: + # Per-port failure is non-fatal: continue to the next + # port so a single bad port doesn't blank out the + # whole snapshot. + st.log("dump_show_queue_counters[{}]: DUT {} port {} -- " + "show queue counters FAILED ({}); skipping this " + "port".format(label, dut_handle, port, exc)) + + st.log(border) + return parsed_snap + + +def dchal_clear_counters(dut_handle, interface): + """Clear ASIC-level queue counters and peak watermarks via dchalshell. + + Runs two dchalshell commands inside the syncd container: + - qos clear counters interface (TX + WRED/drop) + - qos clear counters buffers interface (peak watermarks) + """ + st.config(dut_handle, + "sudo docker exec syncd bash -c " + "\"cd /opt/cisco/syncd/dchalshell && " + "echo 'qos clear counters interface {}' " + "| ./dchalshell\"".format(interface), + skip_error_check=True) + st.config(dut_handle, + "sudo docker exec syncd bash -c " + "\"cd /opt/cisco/syncd/dchalshell && " + "echo 'qos clear counters buffers interface {}' " + "| ./dchalshell\"".format(interface), + skip_error_check=True) + st.log("DCHAL counters cleared for {} (queue + peak buffers)".format( + interface)) + + +def get_intf_counters(dut_handle, interfaces): + """Return {intf: {'rx_ok': int, 'tx_ok': int, 'tx_drp': int}} + from 'show interfaces counters'. + + Column layout (whitespace-split): + [0]Intf [1]State [2]RX_OK [3]RX_RATE [4]RX_UNIT [5]RX_UTIL + [6]RX_ERR [7]RX_DRP [8]RX_OVR + [9]TX_OK [10]TX_RATE [11]TX_UNIT [12]TX_UTIL + [13]TX_ERR [14]TX_DRP [15]TX_OVR + + *interfaces* is an iterable of interface names to capture. + """ + intf_list = list(interfaces) + output = st.show(dut_handle, "show interfaces counters", skip_tmpl=True) + counters = {} + for line in output.splitlines(): + cols = line.split() + if len(cols) < 16: + continue + line_intf = cols[0] + if line_intf not in intf_list: + continue + try: + rx_ok = int(cols[2].replace(',', '')) + tx_ok = int(cols[9].replace(',', '')) + tx_drp = int(cols[14].replace(',', '')) + except (IndexError, ValueError): + continue + counters[line_intf] = { + 'rx_ok': rx_ok, 'tx_ok': tx_ok, 'tx_drp': tx_drp} + return counters + + +def _parse_show_interfaces_status_speeds(output, intf_list): + """Extract {intf: speed_str} from 'show interfaces status' output. + + Returns only entries where the Speed column is a recognizable + 'NNNG' / 'NNNM' / 'NNNK' token. + """ + speeds = {} + for line in (output or '').splitlines(): + for intf in intf_list: + if intf not in line: + continue + cols = line.split() + if len(cols) < 3: + continue + for col in cols: + if re.match(r'^\d+[GMK]$', col, re.IGNORECASE): + speeds[intf] = col + break + return speeds + + +def _parse_show_interfaces_status_oper(output, intf_list): + """Extract {intf: oper_state_lower} from 'show interfaces status' output. + + The SONiC ``show interfaces status`` output has columns (in order): + Interface, Lanes, Speed, MTU, FEC, Alias, Vlan, Oper, Admin, Type, + [Asym PFC]. We locate the row by interface-name prefix, then look + for the two tokens 'up' or 'down' that appear after the Speed/MTU + columns; the FIRST one is Oper, the SECOND is Admin. This is more + robust than a fixed column index because some SONiC variants insert + or omit the FEC/Alias columns. + + Returns {intf: 'up' | 'down' | ''} -- '' means we could not parse a + state for that interface (do not treat as down; treat as unknown). + """ + opers = {} + for line in (output or '').splitlines(): + for intf in intf_list: + if intf in opers: + continue + cols = line.split() + # Defensive: the interface name must appear as a standalone + # token (otherwise 'Ethernet1_5' would match 'Ethernet1_50'). + if not cols or cols[0] != intf: + continue + # Find the Speed column to anchor where Oper starts. + speed_idx = -1 + for i, col in enumerate(cols): + if re.match(r'^\d+[GMK]$', col, re.IGNORECASE): + speed_idx = i + break + if speed_idx < 0: + continue + # Walk the remaining columns; the first two 'up'/'down' + # tokens are Oper then Admin. + state_tokens = [] + for col in cols[speed_idx + 1:]: + lc = col.lower() + if lc in ('up', 'down'): + state_tokens.append(lc) + if len(state_tokens) == 2: + break + if state_tokens: + opers[intf] = state_tokens[0] + return opers + + +def get_intf_oper_states(dut_handle, interfaces, retries=4, retry_delay=3): + """Return {intf: 'up' | 'down' | 'unknown'} for the given interfaces. + + Polls ``show interfaces status`` up to ``retries`` times to let the + link come up after a recent admin enable or QoS reload. An + interface that consistently appears with Oper='down' is reported + as 'down'; one we cannot parse at all is reported 'unknown' + (treated as 'do not block' by the caller -- only confirmed-down + blocks). Falls back to APPL_DB ``oper_status`` for any interface + we still could not parse. + """ + intf_list = list(interfaces) + states = {} + attempts = max(1, int(retries)) + for attempt in range(1, attempts + 1): + try: + output = st.show(dut_handle, "show interfaces status", + skip_tmpl=True) or '' + except Exception: + output = '' + parsed = _parse_show_interfaces_status_oper(output, intf_list) + # On each pass, update only the interfaces we have not seen UP + # yet -- if we ever see 'up', keep that (transient flaps after + # the first observation are not our concern here). + for intf, st_val in parsed.items(): + if states.get(intf) == 'up': + continue + states[intf] = st_val + # Done if every interface is UP. + if all(states.get(intf) == 'up' for intf in intf_list): + break + # Otherwise log and (if attempts remain) sleep + retry. + missing_or_down = [i for i in intf_list + if states.get(i) != 'up'] + st.log("get_intf_oper_states: attempt {}/{}, not-up: {} " + "(retrying after {}s)".format( + attempt, attempts, missing_or_down, retry_delay)) + if attempt < attempts: + st.wait(retry_delay) + + # APPL_DB fallback for anything we could not parse at all. + unparsed = [i for i in intf_list if i not in states] + if unparsed: + for intf in unparsed: + try: + out = st.show( + dut_handle, + 'sonic-db-cli APPL_DB HGET "PORT_TABLE:{}" ' + '"oper_status"'.format(intf), + skip_tmpl=True, skip_error_check=True) or '' + except Exception: + out = '' + db_val = '' + for line in out.splitlines(): + line = line.strip().lower() + if line in ('up', 'down'): + db_val = line + break + states[intf] = db_val or 'unknown' + + # Anything still missing -> 'unknown'. + for intf in intf_list: + states.setdefault(intf, 'unknown') + return states + + +def assert_critical_ports_oper_up(dut_handle, port_role_map, dut_label='dut'): + """Env-fail-fast guard: env-fail the module if a critical port is DOWN. + + *port_role_map* is a dict ``{'role': 'EthernetX_Y'}`` covering the + ports whose data-plane state actually matters for the test (e.g. + ingress, egress, peer-link). We poll oper-state on each, and: + + * If ALL are 'up' -> log OK and return. + * If any are 'down' (confirmed by + show interfaces status AND APPL_DB) -> env-fail the module + with a precise message naming the offending role/interface. + * If any are 'unknown' -> log a warning and + proceed to the ping phase (which will catch a real failure + if there is one). + + This is intentionally STRICTER than the ping-retry guard: a port + that is oper-down WILL NOT come up just because we wait 30 s, so + the cheap pre-flight saves ~50 s vs. waiting for the 3-retry ping + loop to time out. + + Honors the same ``QOS_SKIP_TOPO_PING_GUARD`` escape hatch as the + ping-retry guard: setting it to 1 demotes the env-fail to a + warning (used by operators who know the testbed is fine). + """ + intfs = list(port_role_map.values()) + if not intfs: + return + states = get_intf_oper_states(dut_handle, intfs) + down_roles = [] + unknown_roles = [] + for role, intf in port_role_map.items(): + st_val = states.get(intf, 'unknown') + if st_val == 'down': + down_roles.append((role, intf)) + elif st_val != 'up': + unknown_roles.append((role, intf)) + if unknown_roles: + st.warn("assert_critical_ports_oper_up [{}]: could not " + "determine oper-state for {} -- ping phase will " + "still catch hard failures".format( + dut_label, + ", ".join("{}={}".format(r, i) + for r, i in unknown_roles))) + if not down_roles: + if not unknown_roles: + st.log("assert_critical_ports_oper_up [{}]: all critical " + "ports oper-UP ({})".format( + dut_label, + ", ".join("{}={}".format(r, i) + for r, i in port_role_map.items()))) + return + + st.banner("setup_topo: CRITICAL PORT(S) OPER-DOWN on {} -- " + "env-failing module before ping phase".format(dut_label)) + for role, intf in down_roles: + st.log("setup_topo: {} role={!r} interface={!r} is Oper=DOWN".format( + dut_label, role, intf)) + st.log("setup_topo: a port whose `show interfaces status` Oper " + "column is 'down' has NO physical link -- ARP/ND can never " + "resolve, every ping will return 'Destination Host " + "Unreachable', and every WRED traffic test will produce " + "depth=0. This is invariably a CABLE or OPTIC issue on " + "the testbed, NOT a software bug.") + st.log("setup_topo: REMEDY: (1) check the QSFP/SFP transceiver on " + "the listed port(s); (2) verify the fiber/DAC cable is " + "seated at both ends; (3) `show interfaces transceiver " + "presence {}` to confirm the optic is detected; (4) try " + "`config interface shutdown {}` then " + "`config interface startup {}` to force a link re-train.".format( + down_roles[0][1], down_roles[0][1], down_roles[0][1])) + st.log("setup_topo: to OVERRIDE this guard (e.g. for config-only " + "verification), set QOS_SKIP_TOPO_PING_GUARD=1 before " + "re-running.") + if _topo_ping_guard_should_env_fail(): + st.report_env_fail( + 'msg', + "setup_topo: critical ports OPER-DOWN on {}: {}".format( + dut_label, + ", ".join("{}={}".format(r, i) for r, i in down_roles))) + raise RuntimeError( + "setup_topo: critical ports OPER-DOWN: {}".format(down_roles)) + st.warn("setup_topo: QOS_SKIP_TOPO_PING_GUARD set -- oper-down " + "env-fail demoted to warning; ping phase will likely also " + "fail") + + +def _intf_speeds_from_appl_db(dut_handle, interfaces): + """Fallback: read port speed (Mbps int) directly from APPL_DB / CONFIG_DB. + + SONiC stores port speed under PORT_TABLE in APPL_DB and PORT in CONFIG_DB + in Mbps (e.g. '100000' for 100G). This is more robust than parsing + 'show interfaces status' which can return an empty header during + transient interface state changes. + + Returns {intf: 'NNNG' | 'NNNM' | ''} for each requested interface. + """ + intf_list = list(interfaces) + speeds = {} + for intf in intf_list: + for db, key_fmt in (('APPL_DB', 'PORT_TABLE:{}'), + ('CONFIG_DB', 'PORT|{}')): + try: + out = st.show( + dut_handle, + 'sonic-db-cli {} HGET "{}" "speed"'.format( + db, key_fmt.format(intf)), + skip_tmpl=True, skip_error_check=True) or '' + except Exception: + out = '' + for line in out.splitlines(): + line = line.strip() + if not line or not line.isdigit(): + continue + mbps = int(line) + if mbps <= 0: + continue + if mbps >= 1000 and mbps % 1000 == 0: + speeds[intf] = '{}G'.format(mbps // 1000) + else: + speeds[intf] = '{}M'.format(mbps) + break + if speeds.get(intf): + break + return speeds + + +def get_intf_speeds(dut_handle, interfaces, retries=6, retry_delay=2): + """Return {intf: speed_str} for the requested interfaces. + + Tries 'show interfaces status' first and retries while the output is + incomplete (Speed='N/A' or interface missing). Falls back to + APPL_DB/CONFIG_DB for any interfaces that still have no speed at the + end of the retry loop, because port speed is always populated there + once the SONiC stack is up. + + E.g. {'Ethernet1_49': '100G', 'Ethernet1_1': '10G'}. + Caller must still validate that every required interface received a + non-empty speed and fail loudly if not. + """ + intf_list = list(interfaces) + speeds = {} + + attempts = max(1, int(retries)) + for attempt in range(1, attempts + 1): + try: + output = st.show(dut_handle, "show interfaces status", + skip_tmpl=True) or '' + except Exception: + output = '' + parsed = _parse_show_interfaces_status_speeds(output, intf_list) + for intf, sp in parsed.items(): + if sp: + speeds[intf] = sp + if all(intf in speeds for intf in intf_list): + break + missing = [i for i in intf_list if i not in speeds] + st.log("get_intf_speeds: attempt {}/{} missing speed for {} - " + "retrying after {}s".format( + attempt, attempts, missing, retry_delay)) + if attempt < attempts: + st.wait(retry_delay) + + missing = [i for i in intf_list if i not in speeds] + if missing: + st.log("get_intf_speeds: 'show interfaces status' did not yield " + "speed for {} after {} attempts - falling back to " + "APPL_DB/CONFIG_DB".format(missing, attempts)) + db_speeds = _intf_speeds_from_appl_db(dut_handle, missing) + for intf, sp in db_speeds.items(): + if sp: + speeds[intf] = sp + + return speeds + + +def parse_speed_to_mbps(speed_str): + """Convert a speed string to Mbps. + + '100G' -> 100000, '10G' -> 10000, '25G' -> 25000, + '1000M' -> 1000, '100M' -> 100. + Returns 0 if the string cannot be parsed. + """ + m = re.match(r'^(\d+)\s*([GMK])', speed_str, re.IGNORECASE) + if not m: + return 0 + value = int(m.group(1)) + unit = m.group(2).upper() + if unit == 'G': + return value * 1000 + elif unit == 'M': + return value + elif unit == 'K': + return value // 1000 + return 0 + + +def tg_port_speed_gbps(tg_handle, port_handle): + """Return the line speed in Gbps for a TGen *port_handle*. + + Reads tg_handle.tg_port_speed (set from testbed config, in Mbps e.g. 100000). + Falls back to 100 Gbps — correct for all FX3 100GE ports. + + NOTE: tg_traffic_stats(mode='aggregate') must NOT be used here. Calling it + before any traffic streams are configured triggers a fatal Tcl abort in the + Ixia HLTAPI parser ('can't read matched_str') that kills the TG session and + bypasses Python exception handling entirely. + """ + try: + speed_str = str(getattr(tg_handle, 'tg_port_speed', '') or '').strip() + if speed_str: + m = re.search(r'(\d+)', speed_str) + if m: + val = int(m.group(1)) + # testbed encodes speed in Mbps (100000 → 100G); small values + # are already in Gbps (100 → 100G). + return val // 1000 if val >= 1000 else val + except Exception: + pass + return 100 + + +def compute_dwrr_stream_rate_pct(tg_handle, ingress_phs, egress_ph, weight_map, + margin=1.3, egress_speed_gbps=None): + """Return the per-stream Tx rate (% of line rate) needed to congest every DWRR queue. + + Accepts any number of ingress port handles with any mix of line speeds. Each + ingress port sends traffic at *rate_pct*% of its own line rate, so the total + ingress bandwidth for one queue is:: + + total_ingress_bw = sum(speed_i for each ingress port) + arrival_per_queue = rate_pct/100 * total_ingress_bw + + For validate_dwrr_ratios to produce meaningful results every DWRR queue must + be congested, meaning arrival > its weighted share of the egress link:: + + arrival_per_queue > max_weight/sum_weights * egress_bw + rate_pct > max_weight/sum_weights * egress_bw / total_ingress_bw * 100 + + After applying *margin* and rounding up, the result is capped at 90% to avoid + saturating the ingress ports themselves. + + Parameters + ---------- + tg_handle : tg object returned by tgapi.get_handle_byname + ingress_phs : list of port handles for all ingress ports (any count, any speed) + egress_ph : port handle for the egress port (pass None if no TGen on egress) + weight_map : dict {queue_index: weight} — only DWRR queues + margin : headroom factor above the minimum (default 1.3 = 30%) + egress_speed_gbps : override egress speed in Gbps (e.g. 25 for breakout); + when None, auto-detected from egress_ph or defaults to 100 + + Returns + ------- + int — stream rate percent (at least 10%, at most 90%) + """ + ingress_speeds = [tg_port_speed_gbps(tg_handle, ph) for ph in ingress_phs] + if egress_speed_gbps is not None: + egress_gbps = egress_speed_gbps + elif egress_ph: + egress_gbps = tg_port_speed_gbps(tg_handle, egress_ph) + else: + egress_gbps = 100 + total_ingress_gbps = sum(ingress_speeds) + + max_w = max(weight_map.values()) + sum_w = sum(weight_map.values()) + min_pct = (max_w / float(sum_w)) * (egress_gbps / float(total_ingress_gbps)) * 100 + rate_pct = max(10, min(90, int(math.ceil(min_pct * margin)))) + + st.log( + "compute_dwrr_stream_rate_pct: {} ingress port(s) {}G egress={}G " + "max_w={}/sum_w={} congestion_floor={:.1f}% " + "-> STREAM_RATE_PCT={}% (margin={:.1f}x)".format( + len(ingress_phs), + "+".join(str(s) for s in ingress_speeds), + egress_gbps, max_w, sum_w, + min_pct, rate_pct, margin) + ) + return rate_pct + + +def report_intf_counters(port_info, intf_before, intf_after): + """Print DUT INTERFACE COUNTERS (delta) table. + + port_info: {'ingress_a': 'Ethernet1_49', 'ingress_b': 'Ethernet1_50', + 'egress': 'Ethernet1_51'} + """ + sep = "=" * 70 + st.log(sep) + st.log(" DUT INTERFACE COUNTERS (delta)") + st.log(sep) + st.log(" {:<18} {:>5} {:>14} {:>14} {:>14}".format( + 'Interface', 'Role', 'RX OK', 'TX OK', 'TX DRP')) + st.log(" " + "-" * 63) + role_map = {v: k for k, v in port_info.items()} + role_labels = {'ingress': 'Ingress', 'ingress_a': 'TX1-in', + 'ingress_b': 'TX2-in', 'egress': 'Egress'} + for intf in port_info.values(): + bef = intf_before.get(intf, {}) + aft = intf_after.get(intf, {}) + d_rx = aft.get('rx_ok', 0) - bef.get('rx_ok', 0) + d_tx = aft.get('tx_ok', 0) - bef.get('tx_ok', 0) + d_drp = aft.get('tx_drp', 0) - bef.get('tx_drp', 0) + role_key = role_map.get(intf, '') + role = role_labels.get(role_key, role_key) + st.log(" {:<18} {:>5} {:>14,} {:>14,} {:>14,}".format( + intf, role, d_rx, d_tx, d_drp)) + + +# ── DCHAL Bandwidth% validation ─────────────────────────────────────────── + +def parse_dchal_egress_bw(dchal_output): + """Parse DCHAL Egress Queuing output into per-queue HW scheduling info. + + Returns {qos_group: {'bw_pct': int_or_None, 'prio': int_or_None}}. + - DWRR queues have bw_pct set, prio is None. + - STRICT queues have prio set, bw_pct is None. + + Scans for the 'QoS-Group# Bandwidth% PrioLevel ...' table header. + """ + result = {} + in_table = False + data_started = False + for line in dchal_output.splitlines(): + stripped = line.strip() + if 'QoS-Group#' in stripped and 'Bandwidth%' in stripped: + in_table = True + data_started = False + continue + if not in_table: + continue + if 'Min' in stripped and 'Max' in stripped and 'Units' in stripped: + continue + if stripped.startswith('---'): + data_started = True + continue + if data_started: + if not stripped or stripped.startswith('+'): + break + parts = stripped.split() + if len(parts) < 3 or not parts[0].isdigit(): + continue + qg = int(parts[0]) + bw_val = None + prio_val = None + if parts[1] != '-': + try: + bw_val = int(parts[1]) + except ValueError: + pass + if parts[2] != '-': + try: + prio_val = int(parts[2]) + except ValueError: + pass + result[qg] = {'bw_pct': bw_val, 'prio': prio_val} + return result + + +def report_dchal_bw_check(dchal_output, fail_msgs): + """Print DCHAL HW SCHEDULER table and validate against config_db.json weights. + + Verifies: + - DWRR queues: Bandwidth% matches weight/total_weight*100 (±1.5%) + - DWRR sum: all BW% values sum to ~100% (±10%) + - STRICT queues: PrioLevel is set (not None) + """ + hw = parse_dchal_egress_bw(dchal_output) + if not hw: + st.warn("DCHAL: no Egress Queuing data parsed — skipping HW scheduler check") + return + + dwrr_weights = {qi: w for qi, (stype, w) in TORTUGA_CONFIG.items() + if stype == 'DWRR'} + total_w = sum(dwrr_weights.values()) + + sep = "=" * 70 + st.log(sep) + st.log(" DCHAL HW SCHEDULER vs config_db.json") + st.log(sep) + st.log(" {:<6} {:<8} {:>6} {:>10} {:>10} {:>8} {}".format( + 'Queue', 'Type', 'Weight', 'Expect%', 'DCHAL BW%', 'Prio', 'Status')) + st.log(" " + "-" * 63) + + for qi in range(8): + stype, weight = TORTUGA_CONFIG[qi] + info = hw.get(qi, {}) + actual_bw = info.get('bw_pct') + actual_prio = info.get('prio') + + if stype == 'DWRR': + expected_pct = weight / total_w * 100 + wt_str = str(weight) + exp_str = '{:.1f}%'.format(expected_pct) + bw_str = '{}%'.format(actual_bw) if actual_bw is not None else '?' + prio_str = '-' + if actual_bw is None: + status = 'FAIL' + fail_msgs.append( + "DCHAL Q{} (DWRR wt {}) missing BW% in HW".format(qi, weight)) + elif abs(actual_bw - expected_pct) > 1.5: + status = 'FAIL' + fail_msgs.append( + "DCHAL Q{} BW%={}, expected ~{:.1f}% " + "(weight {}/{})".format(qi, actual_bw, expected_pct, + weight, total_w)) + else: + status = 'OK' + else: + wt_str = '-' + exp_str = '-' + bw_str = '-' + prio_str = str(actual_prio) if actual_prio is not None else '?' + if actual_prio is None: + status = 'FAIL' + fail_msgs.append( + "DCHAL Q{} (STRICT) missing PrioLevel in HW".format(qi)) + else: + status = 'OK' + + st.log(" Q{:<4} {:<8} {:>6} {:>10} {:>10} {:>8} {}".format( + qi, stype, wt_str, exp_str, bw_str, prio_str, status)) + + bw_sum = sum(hw.get(qi, {}).get('bw_pct', 0) or 0 for qi in dwrr_weights) + st.log(" " + "-" * 63) + st.log(" DWRR BW% sum = {}% (expected ~100%, tolerance +-10%)".format(bw_sum)) + if abs(bw_sum - 100) > 10: + fail_msgs.append( + "DCHAL DWRR BW% sum={}, expected ~100%".format(bw_sum)) + + +def validate_dchal_bw_vs_weights(label, dchal_output, weight_map, fail_msgs): + """Validate DCHAL Bandwidth% values against a dynamic weight_map. + + Used by test_fx3_scheduler_2022.py which changes weights at runtime. + Unlike report_dchal_bw_check (uses hardcoded TORTUGA_CONFIG), this + function accepts an arbitrary weight_map so step-by-step weight changes + can be verified against the expected ASIC BW% at each checkpoint. + + Tolerances applied: + - Per-queue BW%: abs(actual - expected) <= 2.0% (FX3 ASIC granularity) + - DWRR BW% sum: abs(sum - 100) <= 10% (matches SAI API test tolerance; + transient 1% fallback during HDEL can lower sum slightly) + + Returns the parsed bw dict (or None if no data), so callers can pass it + to record_checkpoint for summary logging. + """ + bw = parse_dchal_egress_bw(dchal_output) + if not bw: + st.log("[{}] DCHAL: no Bandwidth% data parsed — skipping weight validation".format(label)) + return bw + total_w = sum(weight_map.values()) + st.log("[{}] DCHAL Bandwidth% parsed={}, weight_map={}, total_weight={}".format( + label, bw, weight_map, total_w)) + for qg, w in sorted(weight_map.items()): + expected_pct = w / total_w * 100 + actual_pct = (bw.get(qg) or {}).get('bw_pct') + if actual_pct is None: + fail_msgs.append( + "[{}] DCHAL QoS-Group {} (weight {}) missing from Bandwidth% output".format( + label, qg, w)) + continue + if abs(actual_pct - expected_pct) > 2.0: + fail_msgs.append( + "[{}] DCHAL QoS-Group {} Bandwidth%={}, expected ~{:.1f}% " + "(weight={}, total_weight={})".format( + label, qg, actual_pct, expected_pct, w, total_w)) + + bw_sum = sum((bw.get(qg) or {}).get('bw_pct', 0) or 0 for qg in weight_map) + if abs(bw_sum - 100) > 10: + fail_msgs.append( + "[{}] DCHAL DWRR Bandwidth% sum={}, expected ~100% (tolerance ±10)".format( + label, bw_sum)) + return bw + + +def validate_queue_counters_vs_weights(label, q_before, q_after, weight_map, fail_msgs): + """Validate that queue counter deltas are proportional to DWRR weights. + + Requires congested traffic (total ingress rate > egress port capacity) to + produce meaningful DWRR differentiation. At low (non-congested) rates all + queues drain freely and counters will be approximately equal regardless of + weight. + + weight_map: {qos_group_int: weight_int} — only the DWRR queues under test. + + Rules applied for each queue pair (qi, qj): + - Equal weights → counter ratio qi/qj should be 0.70 … 1.43 (within 30%). + - wi > wj → delta(qi) >= delta(qj) × 0.80 (allow 20% slack). + - wi < wj → delta(qi) <= delta(qj) × 1.20 (allow 20% slack). + + If all deltas are zero (counters unavailable or traffic not reaching DUT) + the proportional check is skipped with a warning. + """ + deltas = {qg: max(0, q_after.get(qg, {}).get('pkts', 0) + - q_before.get(qg, {}).get('pkts', 0)) + for qg in weight_map} + + st.log("[{}] Queue counter deltas (pkts): {}".format( + label, {qg: deltas[qg] for qg in sorted(weight_map)})) + + if not any(deltas.values()): + st.log("[{}] All queue counter deltas are 0 — " + "skipping proportional check".format(label)) + return + + checked = set() + for qi, wi in sorted(weight_map.items()): + for qj, wj in sorted(weight_map.items()): + if (qj, qi) in checked or qi == qj: + continue + checked.add((qi, qj)) + di, dj = deltas[qi], deltas[qj] + if di == 0 or dj == 0: + continue + + if wi == wj: + # Equal weights: counters should be similar + ratio = min(di, dj) / max(di, dj) + if ratio < 0.70: + fail_msgs.append( + "[{}] Q{} and Q{} have equal weight ({}) but counter " + "ratio={:.2f} (expected >= 0.70); " + "Q{}={} Q{}={}".format( + label, qi, qj, wi, ratio, qi, di, qj, dj)) + else: + st.log(" [{}] Q{}/Q{} equal-weight OK: " + "ratio={:.2f} (weights {}/{})".format( + label, qi, qj, ratio, wi, wj)) + elif wi > wj: + # qi has more weight — should have higher counter + if di < dj * 0.80: + fail_msgs.append( + "[{}] Q{}(w={}) delta={} < Q{}(w={}) delta={} × 0.80 " + "— expected Q{} to dominate".format( + label, qi, wi, di, qj, wj, dj, qi)) + else: + st.log(" [{}] Q{}>Q{} weight ordering OK: " + "Q{}={} Q{}={} (weights {}/{})".format( + label, qi, qj, qi, di, qj, dj, wi, wj)) + else: + # qi has less weight — should have lower counter + if di > dj * 1.20: + fail_msgs.append( + "[{}] Q{}(w={}) delta={} > Q{}(w={}) delta={} × 1.20 " + "— expected Q{} to dominate".format( + label, qi, wi, di, qj, wj, dj, qj)) + else: + st.log(" [{}] Q{} 0. + Typical use: DWRR queues under active traffic. + check_no_drops (list): Queue indices whose drop_pkts delta must be == 0. + Typical use: STRICT queues (must never be tail-dropped + when given absolute priority). + + Returns: + dict: {qi: tx_delta} — per-queue tx packet deltas (informational). + """ + # Compute tx_pkts and drop_pkts deltas for all queues that appear in + # either snapshot. + all_queues = sorted(set(q_before) | set(q_after)) + tx_deltas = {} + drop_deltas = {} + for qi in all_queues: + b = q_before.get(qi, {}) + a = q_after.get(qi, {}) + tx_deltas[qi] = max(0, a.get('pkts', 0) - b.get('pkts', 0)) + drop_deltas[qi] = max(0, a.get('drop_pkts', 0) - b.get('drop_pkts', 0)) + + # ── Log delta table ─────────────────────────────────────────────────── + sep = "=" * 72 + st.log(sep) + st.log(" QUEUE COUNTER DELTAS [{}]".format(label)) + st.log(sep) + st.log(" {:<8} {:>20} {:>20}".format("Queue", "Tx Pkts Delta", "Drop Pkts Delta")) + st.log(" " + "-" * 50) + for qi in all_queues: + st.log(" Q{:<7} {:>20,} {:>20,}".format(qi, tx_deltas[qi], drop_deltas[qi])) + st.log(sep) + + # ── Check 1: check_zeros — tx_pkts delta must be 0 ─────────────────── + if check_zeros: + for qi in check_zeros: + delta = tx_deltas.get(qi, 0) + st.log(" [{}] Q{} (check_zeros): tx delta={} (expected 0)".format( + label, qi, delta)) + if delta != 0: + fail_msgs.append( + "[{}] Q{} tx_pkts delta={} — expected 0 " + "(queue must not carry traffic in this scenario)".format( + label, qi, delta)) + + # ── Check 2: check_nonzero — tx_pkts delta must be > 0 ─────────────── + if check_nonzero: + for qi in check_nonzero: + delta = tx_deltas.get(qi, 0) + st.log(" [{}] Q{} (check_nonzero): tx delta={} (expected > 0)".format( + label, qi, delta)) + if delta <= 0: + fail_msgs.append( + "[{}] Q{} tx_pkts delta={} — expected > 0 " + "(traffic must reach this queue)".format( + label, qi, delta)) + + # ── Check 3: check_no_drops — drop_pkts delta must be 0 ────────────── + if check_no_drops: + for qi in check_no_drops: + drops = drop_deltas.get(qi, 0) + st.log(" [{}] Q{} (check_no_drops): drop delta={} (expected 0)".format( + label, qi, drops)) + if drops != 0: + fail_msgs.append( + "[{}] Q{} drop_pkts delta={} — expected 0 " + "(this queue must not drop packets)".format( + label, qi, drops)) + + # ── Check 4: weight proportionality ────────────────────────────────── + if weight_map: + # Re-package deltas into the format expected by the existing helper. + _q_delta_snap = {qi: {'pkts': tx_deltas.get(qi, 0)} for qi in weight_map} + _zero_snap = {qi: {'pkts': 0} for qi in weight_map} + validate_queue_counters_vs_weights( + label, _zero_snap, _q_delta_snap, weight_map, fail_msgs) + + return tx_deltas + + +# ── DWRR ratio / scheduler validation (from test_scheduler_validation.py) ── + +TORTUGA_DWRR_RATIO_CHECKS = [ + (1, 0, 1.0, 'w20/w20'), + (2, 0, 1.0, 'w20/w20'), + (3, 0, 2.0, 'w40/w20'), + (4, 1, 2.0, 'w40/w20'), + (4, 3, 1.0, 'w40/w40'), + (5, 0, 1.5, 'w30/w20'), +] + +DWRR_TOLERANCE = 0.20 + + +def validate_scheduler(q_deltas, q_drop_deltas, fail_msgs): + """Check DWRR weight ratios and STRICT zero-drop invariants. + + Same logic as test_scheduler_validation.py validate_scheduler(), adapted + for SpyTest (st.log instead of print, fail_msgs instead of sys.exit). + + q_deltas: {qi: pkt_count_delta} for queues 0-7. + q_drop_deltas: {qi: drop_pkt_delta} for queues 0-7. + fail_msgs: list to append failure descriptions to. + + DWRR ratio checks (±20% tolerance): + Q1/Q0 = 1.0 (w20/w20), Q2/Q0 = 1.0 (w20/w20), + Q3/Q0 = 2.0 (w40/w20), Q4/Q1 = 2.0 (w40/w20), + Q4/Q3 = 1.0 (w40/w40), Q5/Q0 = 1.5 (w30/w20). + + STRICT zero-drop: Q6, Q7 must have 0 drop_pkts. + """ + tol = DWRR_TOLERANCE + + st.log(" DWRR Weight Ratios (tolerance {:.0%}):".format(tol)) + for qi_num, qi_den, expected, ratio_label in TORTUGA_DWRR_RATIO_CHECKS: + num = q_deltas.get(qi_num, 0) + den = q_deltas.get(qi_den, 0) + if den == 0: + actual = float('inf') if num > 0 else 0.0 + ok = False + else: + actual = num / den + ok = abs(actual - expected) <= tol * expected + tag = 'PASS' if ok else '** FAIL' + desc = "Q{}/Q{} ({})".format(qi_num, qi_den, ratio_label) + st.log(" {:<18s} expected {:.2f} actual {:.2f} {}".format( + desc, expected, actual, tag)) + if not ok: + fail_msgs.append( + "{}: expected {:.2f}, actual {:.2f}".format( + desc, expected, actual)) + + st.log("") + st.log(" STRICT Priority (zero drops expected):") + for qi in (6, 7): + drops = q_drop_deltas.get(qi, 0) + ok = drops == 0 + tag = 'PASS' if ok else '** FAIL' + desc = "Q{} (STRICT)".format(qi) + st.log(" {:<18s} drops {:>14,} {}".format(desc, drops, tag)) + if not ok: + fail_msgs.append( + "{}: {} drop_pkts (expected 0)".format(desc, drops)) + + +def validate_dwrr_ratios(label, q_before, q_after, weight_map, fail_msgs, + strict_queues=(6, 7), tolerance=DWRR_TOLERANCE): + """Validate each DWRR queue's Tx share against its weight proportion. + + For each queue: + expected_share% = w_i / sum(all weights) * 100 + actual_share% = delta_i / total_egress * 100 + pass if abs(actual_share - expected_share) <= tolerance * expected_share + + This is the packet-counter equivalent of validate_dchal_bw_vs_weights(): + both check the same invariant — one via ASIC register readout, one via + live Tx packet deltas under congested traffic. + + label: checkpoint label for log messages. + q_before: {qi: {'pkts': int, 'drop_pkts': int}} snapshot before traffic. + q_after: {qi: {'pkts': int, 'drop_pkts': int}} snapshot after traffic. + weight_map: {qi: weight_int} — DWRR queues to check. + fail_msgs: list to append failure descriptions to. + strict_queues: queue indices expected to have zero drops. + tolerance: fractional tolerance (default 0.20 = ±20% of expected share). + """ + SEP = "=" * 72 + DASH = "-" * 72 + total_w = sum(weight_map.values()) + + # ── Header ─────────────────────────────────────────────────────────── + st.log(SEP) + st.log(" DWRR TX-SHARE VALIDATION — {}".format(label)) + st.log(" Tolerance : {:.0%} (±{:.0%} of expected share)".format(tolerance, tolerance)) + st.log(" Total weight: {} ({})".format( + total_w, + " ".join("Q{}={}".format(q, w) for q, w in sorted(weight_map.items())))) + st.log(SEP) + + # ── Build deltas ───────────────────────────────────────────────────── + deltas = {} + drop_deltas = {} + st.log(" {:<8} {:<8} {:>16} {:>16} {:>14} {:>14}".format( + "Queue", "Weight", "Before (pkts)", "After (pkts)", "Tx Delta", "Drop Delta")) + st.log(" " + DASH) + for qi in sorted(weight_map): + before_pkts = q_before.get(qi, {}).get('pkts', 0) + after_pkts = q_after.get(qi, {}).get('pkts', 0) + before_drop = q_before.get(qi, {}).get('drop_pkts', 0) + after_drop = q_after.get(qi, {}).get('drop_pkts', 0) + deltas[qi] = max(0, after_pkts - before_pkts) + drop_deltas[qi] = max(0, after_drop - before_drop) + st.log(" Q{:<7} {:<8} {:>16,} {:>16,} {:>14,} {:>14,}".format( + qi, weight_map[qi], before_pkts, after_pkts, deltas[qi], drop_deltas[qi])) + + total_egress = sum(deltas.values()) + st.log(" " + DASH) + st.log(" Total Tx delta: {:,} pkts".format(total_egress)) + st.log("") + + if not any(deltas.values()): + st.log(" WARNING: all queue Tx deltas are 0 — skipping share validation") + st.log(SEP) + return + + # ── Per-queue share validation ──────────────────────────────────────── + st.log(" {:<8} {:<8} {:>14} {:>14} {:>20} {}".format( + "Queue", "Weight", "Expected %", "Actual %", "Acceptable Range", "Result")) + st.log(" " + DASH) + pass_count = 0 + fail_count = 0 + for qi, wi in sorted(weight_map.items()): + expected_pct = wi / float(total_w) * 100 + actual_pct = deltas[qi] / float(total_egress) * 100 + lo = expected_pct * (1.0 - tolerance) + hi = expected_pct * (1.0 + tolerance) + ok = lo <= actual_pct <= hi + tag = 'PASS' if ok else '** FAIL **' + if ok: + pass_count += 1 + else: + fail_count += 1 + st.log(" Q{:<7} {:<8} {:>13.1f}% {:>13.1f}% [{:.1f}% .. {:.1f}%] {}".format( + qi, wi, expected_pct, actual_pct, lo, hi, tag)) + if not ok: + direction = "low" if actual_pct < expected_pct else "high" + fail_msgs.append( + "[{}] Q{} (w={}): Tx share={:.1f}%, expected {:.1f}% " + "acceptable [{:.1f}% .. {:.1f}%] " + "(delta={:,}, total={:,}) actual Tx share is {}".format( + label, qi, wi, actual_pct, expected_pct, lo, hi, + deltas[qi], total_egress, direction)) + + st.log(" " + DASH) + st.log(" DWRR share result : {} passed, {} failed".format(pass_count, fail_count)) + st.log("") + + # ── Strict-priority drop check ─────────────────────────────────────── + if strict_queues: + st.log(" Strict-Priority Queues (zero drops expected):") + st.log(" " + DASH) + st.log(" {:<10} {:>16} {:>16} {:>14} {}".format( + "Queue", "Before (drop)", "After (drop)", "Drop Delta", "Result")) + st.log(" " + DASH) + for qi in sorted(strict_queues): + before_drop = q_before.get(qi, {}).get('drop_pkts', 0) + after_drop = q_after.get(qi, {}).get('drop_pkts', 0) + drops = max(0, after_drop - before_drop) + ok = drops == 0 + tag = 'PASS' if ok else '** FAIL **' + st.log(" Q{:<9} {:>16,} {:>16,} {:>14,} {}".format( + qi, before_drop, after_drop, drops, tag)) + if not ok: + fail_msgs.append( + "[{}] Q{} (STRICT): {:,} drop_pkts (expected 0)".format( + label, qi, drops)) + st.log(" " + DASH) + + st.log(SEP) + + +# ── Traffic report helpers ───────────────────────────────────────────── +# +# Formatted output tables for IXIA stats, DUT queue counters, +# scheduler validation, and end-to-end summary. +# Designed to match the reference output from test_scheduler_validation.py. + +def report_ixia_port_stats(tg_handle, tg_ports, num_queues): + """Print IXIA PORT STATS table. + + tg_ports: list of (port_handle, role_label) e.g. + [(ph_a, 'TX1'), (ph_b, 'TX2'), (ph_e, 'RX')] + num_queues: number of queues (8) to compute per-DSCP estimate. + + Returns: + (total_tx_pkts, total_rx_pkts, rx_port_pkts, rx_port_name) + """ + sep = "=" * 70 + st.log(sep) + st.log(" IXIA PORT STATS") + st.log(sep) + st.log(" {:<9}{:<10} {:>14} {:>14}".format( + 'Port', 'Role', 'TX pkts', 'RX pkts')) + st.log(" " + "-" * 50) + + total_tx = 0 + total_rx = 0 + rx_pkts = 0 + rx_port_name = '' + for ph, role in tg_ports: + try: + stats = tg_handle.tg_traffic_stats( + port_handle=ph, mode='aggregate') + agg = stats.get(ph, {}).get('aggregate', {}) + tx = int(agg.get('tx', {}).get('total_pkts', 0)) + rx = int(agg.get('rx', {}).get('total_pkts', 0)) + port_name = agg.get('port_name', ph) + except Exception as exc: + st.log(" WARNING: tg_traffic_stats failed for {} ({}): {}".format( + ph, role, exc)) + tx, rx, port_name = 0, 0, ph + st.log(" {:<9}{:<10} {:>14,} {:>14,}".format( + port_name, role, tx, rx)) + total_tx += tx + total_rx += rx + if role.startswith('RX'): + rx_pkts = rx + rx_port_name = port_name + + num_tx_ports = sum(1 for _, r in tg_ports if r.startswith('TX')) + if num_tx_ports > 0 and num_queues > 0: + per_dscp = total_tx // (num_tx_ports * num_queues) + st.log("") + st.log(" Combined TX per DSCP (est): ~{:,} pkts".format(per_dscp)) + + return total_tx, total_rx, rx_pkts, rx_port_name + + +def report_queue_counters(egress_intf, q_deltas, q_drop_deltas, + num_queues=8, source="show queue counters"): + """Print DUT QUEUE COUNTERS table. + + Returns total_egress (sum of all queue egress deltas). + *source* is displayed in the banner to identify where the data came from + (e.g. 'DCHAL' or 'show queue counters'). + """ + sep = "=" * 70 + st.log(sep) + st.log(" DUT QUEUE COUNTERS via {}: {} (delta)".format( + source, egress_intf)) + st.log(sep) + hdr = " {:<6} {:>4} {:<7} {:>3} {:>14} {:>14} {:>7}".format( + 'Queue', 'DSCP', 'Sched', 'Wt', 'Egress pkts', 'Drop pkts', 'Thru') + st.log(hdr) + st.log(" " + "-" * 63) + total_egress = sum(q_deltas.get(qi, 0) for qi in range(num_queues)) + for qi in range(num_queues): + dscp = QUEUE_TO_DSCP[qi] + stype, weight = TORTUGA_CONFIG[qi] + wt_str = str(weight) if weight else '-' + egress = q_deltas.get(qi, 0) + drops = q_drop_deltas.get(qi, 0) + q_input = egress + drops + thru = (egress / q_input * 100) if q_input else 0 + st.log(" Q{:<4} {:>4} {:<7} {:>3} {:>14,} {:>14,} {:>6.1f}%".format( + qi, dscp, stype, wt_str, egress, drops, thru)) + return total_egress + + +def report_wred_linearity(data_points, egress_speed_mbps=10000, + wred_profile=GOLDEN_WRED_PROFILE): + """Print formatted WRED linearity summary table with zone-based validation. + + *data_points* is a list of dicts, each with keys: + margin_mbps, rate_pct, q_depth_bytes, egress_pkts, drop_pkts, + total_pkts, drop_rate_pct + *egress_speed_mbps* is used internally (sanity check only). + *wred_profile* is an optional dict with green_min_threshold, + green_max_threshold, and green_drop_probability keys (string values). + Defaults to GOLDEN_WRED_PROFILE when None. + + Validation is zone-based (proves WRED is working, not just traffic + conservation): + Zone A depth < min_th : no WRED, drops must be ~0 + Zone B min_th <= depth <= max_th : WRED active, prob 0-5% + Zone C depth > max_th : tail drop, prob capped at 100% + + Returns True only if every data point passes its zone check and + WRED Prob increases monotonically with margin. + """ + if egress_speed_mbps > 0: + egr_spd = egress_speed_mbps + else: + # Should never happen with current setup_topo_common (which + # aborts if egress speed is undetermined). Warn loudly to make + # sure a stale ctx value cannot silently mask an issue. + st.warn("report_wred_linearity: egress_speed_mbps={} <= 0; " + "falling back to 10000 Mbps for the summary table only".format( + egress_speed_mbps)) + egr_spd = 10000 + min_th_bytes = int(wred_profile.get('green_min_threshold', '1048576')) + max_th_bytes = int(wred_profile.get('green_max_threshold', '3145728')) + max_prob = float(wred_profile.get('green_drop_probability', '5')) + min_th_mb = min_th_bytes / (1024.0 * 1024) + max_th_mb = max_th_bytes / (1024.0 * 1024) + + fanin = bool(data_points and + data_points[0].get('rate_pct_per_port') is not None) + if fanin: + tbl_w = 88 + else: + tbl_w = 68 + sep = "=" * (tbl_w + 2) + st.log(sep) + st.log(" WRED LINEARITY SUMMARY (egress {}M)".format(egr_spd)) + st.log(sep) + if fanin: + st.log(" {:>8} {:>9} {:>9} {:>9} {:>9} {:>10} {:>10} {:>6} {:>8}".format( + 'Margin', 'Port A', 'Port B', 'Rate%', + 'Avg Depth', 'Est. Prob', 'WRED Drop', 'Zone', 'Status')) + else: + st.log(" {:>8} {:>9} {:>9} {:>10} {:>10} {:>6} {:>8}".format( + 'Margin', 'Rate%', 'Avg Depth', + 'Est. Prob', 'WRED Drop', 'Zone', 'Status')) + st.log(" " + "-" * tbl_w) + prev_wred_prob = -1.0 + all_passed = True + any_drops = False + for dp in data_points: + margin = dp['margin_mbps'] + rate = dp['rate_pct'] + drop_rate = dp['drop_rate_pct'] + + samples = dp.get('depth_samples', []) + if samples: + avg_depth = sum(samples) / len(samples) + else: + avg_depth = dp['q_depth_bytes'] + peak = dp.get('peak_bytes', 0) + depth_mb = avg_depth / (1024.0 * 1024) + peak_mb = peak / (1024.0 * 1024) + + # Zone classification: peak_watermark is authoritative for Zone C. + # Avg depth oscillates and routinely sits just below max_th when + # the queue is repeatedly hitting the ceiling and tail-dropping. + # If peak >= max_th the queue did enter Zone C, regardless of avg. + peak_in_c = peak >= max_th_bytes + all_samples_in_c = (samples and + all(s > max_th_bytes for s in samples)) + + if peak_in_c: + zone = 'C*' if dp.get('rebaselined', False) else 'C' + elif depth_mb < min_th_mb: + zone = 'A' + else: + zone = 'B' + + if drop_rate > 0: + any_drops = True + + is_zone_c = zone.startswith('C') + + # Confirm Zone C only when at least one of: + # - all sampled depths > max_th, OR + # - peak >= max_th AND drops were observed + # This avoids classifying a single noisy peak (e.g. counter + # latching) as a real tail-drop event. + if is_zone_c and not (all_samples_in_c + or (peak_in_c and drop_rate > 0)): + reasons_skip = [] + if not all_samples_in_c: + reasons_skip.append("not all depth samples > max_th") + if not peak_in_c: + reasons_skip.append("peak < max_th") + if drop_rate <= 0: + reasons_skip.append("no drops") + st.log(" {:>7}M Zone {} skipped: {}".format( + margin, zone, ', '.join(reasons_skip))) + continue + + # Estimated WRED probability follows the linear ramp between + # min_th and max_th. In Zone C the avg may sit just below + # max_th while the queue is in tail drop; pin est_prob to 100% + # whenever peak proves the queue reached Zone C. + if is_zone_c: + wred_prob = 100.0 + elif depth_mb <= min_th_mb: + wred_prob = 0.0 + elif depth_mb >= max_th_mb: + wred_prob = 100.0 + else: + wred_prob = max_prob * (depth_mb - min_th_mb) / (max_th_mb - min_th_mb) + + if is_zone_c: + wred_drop_display = 100.0 + else: + wred_drop_display = drop_rate + + reasons = [] + if zone == 'A': + if drop_rate > 0.5: + reasons.append("WRED Drop {:.2f}% in Zone A".format(drop_rate)) + elif zone == 'B': + if wred_prob <= 0 and margin > 0: + reasons.append("Est. Prob=0 in Zone B") + if wred_prob > max_prob + 0.5: + reasons.append("Est. Prob {:.2f}% exceeds max {}%".format( + wred_prob, max_prob)) + if drop_rate <= 0 and margin > 0: + reasons.append("WRED Drop=0 in Zone B") + + if wred_prob < prev_wred_prob - 0.5: + reasons.append("est. prob not monotonic") + + if reasons: + tag = 'FAIL' + all_passed = False + else: + tag = 'OK' + + if fanin: + pp = dp.get('rate_pct_per_port', rate / 2.0) + st.log(" {:>7}M {:>8.3f}% {:>8.3f}% {:>8.3f}% " + "{:>7.2f}MB {:>9.2f}% {:>9.2f}% {:>6} {:>8}".format( + margin, pp, pp, rate, + depth_mb, wred_prob, wred_drop_display, zone, tag)) + else: + st.log(" {:>7}M {:>8.3f}% {:>7.2f}MB {:>9.2f}% {:>9.2f}% " + "{:>6} {:>8}".format( + margin, rate, depth_mb, wred_prob, + wred_drop_display, zone, tag)) + if reasons: + st.log(" -> {}".format(', '.join(reasons))) + prev_wred_prob = wred_prob + st.log(sep) + if fanin: + st.log(" Port A/B = per-port IXIA rate (each 100G ingress port)") + st.log(" Rate% = combined rate (Port A + Port B) as % of egress") + st.log(" Avg Depth = mid-traffic queue depth (average of sampled snapshots)") + st.log(" Est. Prob = estimated WRED probability from avg queue depth:") + st.log(" {}% x (depth - {:.0f}MB) / ({:.0f}MB - {:.0f}MB), " + "capped at 100%".format(int(max_prob), min_th_mb, max_th_mb, min_th_mb)) + st.log(" WRED Drop = WRED drop probability") + st.log(" Zone A/B: from DCHAL drop_pkts / (tx + drop) x 100") + st.log(" Zone C: 100% (tail drop confirmed when ALL depth") + st.log(" samples > max_th AND peak watermark >= max_th)") + st.log(" C* = Zone C with DCHAL counters re-baselined mid-traffic") + st.log(" (Zone A/B ramp-up drops excluded from measurement)") + st.log(" WRED profile: AZURE_LOSSY (from config_db.json)") + st.log(" green_min_threshold = {} bytes ({:.2f} MB)".format( + min_th_bytes, min_th_mb)) + st.log(" green_max_threshold = {} bytes ({:.2f} MB)".format( + max_th_bytes, max_th_mb)) + st.log(" green_drop_probability = {}%".format(int(max_prob))) + st.log(" Zone A: depth < {:.0f}MB (below min_th, no WRED drops)".format(min_th_mb)) + st.log(" Zone B: {:.0f}MB <= depth <= {:.0f}MB (WRED active, " + "prob 0-{}%)".format(min_th_mb, max_th_mb, int(max_prob))) + st.log(" Zone C: depth > {:.0f}MB (above max_th, tail drop)".format(max_th_mb)) + st.log(" Status: PASS when Est. Prob follows WRED curve and") + st.log(" WRED Drop confirms actual ASIC drops") + st.log(sep) + + if not any_drops: + st.log(" WRED NOT ACTIVE: all WRED Drop rates are 0% — " + "check port state and WRED config") + all_passed = False + elif all_passed: + st.log(" Zone validation: PASSED (Est. Prob follows WRED curve, " + "WRED Drop confirms actual drops)") + else: + st.log(" Zone validation: FAILED") + st.log(sep) + + if any_drops and len(data_points) >= 3: + _print_wred_diagrams(data_points, egr_spd, wred_profile=wred_profile) + + return all_passed + + +def run_wred_linearity(ctx, af, margins, verify_egress_neighbor_fn, + duration=20, num_depth_samples=3, cooldown=5, + wred_profile=GOLDEN_WRED_PROFILE): + """Run a full WRED linearity sweep and return (fail_msgs, data_points). + + Orchestrates config verification, neighbor resolution, fan-in traffic + at each margin point, monotonicity checking, and per-point sanity + validation. Designed for reuse across multiple WRED linearity tests. + + Parameters: + ctx: shared WRED context dict (dut, tg, port handles, speeds, etc.) + af: address family — 'ipv4' or 'ipv6' + margins: list of margin values in Mbps to sweep (e.g. + [0, 250, 500, 1000, 2000, 3000, 4000, 5000, 5250, 5500]) + verify_egress_neighbor_fn: callable(af) -> bool that checks + ARP/NDP resolution for the egress next-hop. Test modules + supply their own since the target IP is test-specific. + duration: seconds to send traffic per margin point (default 20) + num_depth_samples: number of mid-traffic ASIC queue depth + snapshots per margin point (default 3) + cooldown: seconds to wait between margin points for the queue + to drain (default 5) + wred_profile: optional dict with green_min_threshold, + green_max_threshold, and green_drop_probability keys + (string values). Defaults to GOLDEN_WRED_PROFILE when None. + + Returns: + (fail_msgs, data_points) where: + fail_msgs — list of failure description strings (empty on success) + data_points — list of per-margin measurement dicts from + wred_fanin_send_and_measure() + """ + _dut = ctx['dut'] + egress_speed_mbps = ctx['egress_speed_mbps'] + fail_msgs = [] + + st.log("Phase 1: Verifying WRED config") + verify_wred_config(ctx, fail_msgs, wred_profile=wred_profile) + deploy_dchal_helper(_dut) + if fail_msgs: + return fail_msgs, [] + + if not verify_egress_neighbor_fn(af): + fail_msgs.append( + 'Egress neighbor resolution failed for {}'.format(af)) + return fail_msgs, [] + + st.log("Phase 2: Running {} margin points".format(len(margins))) + data_points = [] + for m in margins: + st.log("--- Margin {}M ---".format(m)) + r = wred_fanin_send_and_measure(ctx, af, m, duration=duration, + num_depth_samples=num_depth_samples) + report_wred_result(ctx, r, "LINEARITY point {}M".format(m)) + data_points.append(r) + st.wait(cooldown) + + monotonic = report_wred_linearity(data_points, egress_speed_mbps, + wred_profile=wred_profile) + + if not monotonic: + fail_msgs.append("Drop rates are NOT monotonically increasing") + + for dp in data_points: + if dp['egress_pkts'] <= 0: + fail_msgs.append("Margin={}M: egress_pkts=0 — traffic not " + "forwarded".format(dp['margin_mbps'])) + if dp['margin_mbps'] > 0 and dp['drop_pkts'] <= 0: + fail_msgs.append("Margin={}M: 0 drops — WRED not active".format( + dp['margin_mbps'])) + + return fail_msgs, data_points + + +def _print_wred_diagrams(data_points, egr_spd, wred_profile=GOLDEN_WRED_PROFILE): + """Print ASCII diagrams: WRED prob vs margin, WRED prob vs queue depth. + + Each data point is plotted as '*