diff --git a/.azure-pipelines/dependency-check.yml b/.azure-pipelines/dependency-check.yml new file mode 100644 index 00000000000..fe278fc20fb --- /dev/null +++ b/.azure-pipelines/dependency-check.yml @@ -0,0 +1,12 @@ +steps: +- script: | + set -x + + pip3 install natsort + + python3 ./.azure-pipelines/dependency_check/dependency_check.py tests + if [[ $? -ne 0 ]]; then + echo "##vso[task.complete result=Failed;]Condition check failed." + exit 1 + fi + displayName: "Dependency Check" diff --git a/.azure-pipelines/dependency_check/README.md b/.azure-pipelines/dependency_check/README.md new file mode 100644 index 00000000000..a5f8731a08f --- /dev/null +++ b/.azure-pipelines/dependency_check/README.md @@ -0,0 +1,108 @@ +## Background +We introduced a new approach to PR testing called _Impacted area based PR testing_. \ +In this model, the scope of PR testing is determined by the specific areas of the code that are impacted by the changes, +allowing for more focused and efficient testing. +This means, we need to establish clear boundaries between different sections of code +and minimize dependencies as much as possible. + +We can consider the test scripts in this way: +``` +sonic-mgmgt + | + | - tests + | + | - common ---------- shared + | - arp -----| + | - ecmp | --- features + | - vlan | + | - ...... -----| +``` +Within the tests directory in sonic-mgmt, we categorize scripts into two sections: shared and features. +Scripts in the common folder fall under the shared section and can be utilized across different folders. +In contrast, scripts in other folders belong to the features section, representing specific functionalities such as arp, ecmp, and vlan, +and are intended for use within their respective folders. + +However, the previous code had numerous cross-feature dependencies. +To achieve the above goal, we have removed the cross-feature references from the existing code. +But we need a mechanism to check future modifications and new code to prevent reintroducing these issues. + + +## Design +The _ast_ module helps python applications to process trees of the python abstract syntax grammar. +This module produces a tree of objects, where each object is an instance of a class that inherits from _ast.AST_. +There are two classes related to the imports: + +#### ast.Import + - An import statement such as `import x as a,y` + - _names_ is a list of alias nodes. +``` + Import(names=[ + alias(name='x', + asname='a') + ]), + Import(names=[ + alias(name='y', + asname=None) + ]), +``` +#### ast.ImportFrom + - Represents `from x import y,z`. + - _module_ is a raw string of the ‘from’ name, without any leading dots, or None for statements such as `from . import foo.` + - _level_ is an integer holding the level of the relative import (0 means absolute import) +``` +ImportFrom( + module='x', + names=[ + alias(name='y', asname=None), + alias(name='z', asname=None)], + level=0) +``` + +To achieve our goal, we need to follow these steps. + + Gather all scripts to be analyzed + + Identify all imported modules in each script along with their import paths + + Compare each imported path with its corresponding script path + +### Gather all scripts to be analyzed +To collect all scripts for analysis, +we can use `os.walk` to gather every script within the specified path + +### Identify all imported modules in each script along with their import paths +To identify all imported modules, +we can use the _ast_ module, as mentioned above, to analyze each collected script and obtain its abstract syntax tree. +Then, using the _ast.ImportFrom_ and _ast.Import_ classes, we can extract the imported modules from each script. + + +Here are the steps and configuration methods for Python to search for module paths: ++ The current script's directory or the directory from which the Python interpreter is started. ++ Standard library path: Contains the standard library modules from the Python installation directory. ++ Third-party library path: For example, the site-packages directory, where third-party libraries installed via pip and other tools are stored. ++ Environment variable path: Custom directories can be added to sys.path via the PYTHONPATH environment variable. + +As paths of project is not included in the sys path, we need to add them into sys path first. + ++ `importlib.util.find_spec` is a function in Python that is used to find the specification of a module. + The specification contains details about the module, such as its location (file path), loader, and other attributes. + It can find the path of standard library, third-party libraries and custom modules which are imported with no hierarchy. + + For statement like `import math`, `from tests.common.plugins.allure_wrapper import allure_step_wrapper`, `from gnmi_utils import apply_gnmi_file`, + we can use `importlib.util.find_spec` to get their imported path. ++ For hierarchy imported, we can calculate the abs path using the current file path and level to navigate up to the corresponding directory. + +### Compare each imported path with its corresponding script path +We will focus only on imported paths that start with `sonic-mgmt/tests`. +Paths imported from other folders within `sonic-mgmt` are treated as common locations. + +For paths beginning with `sonic-mgmt/tests`, there are three special cases: ++ sonic-mgmt/tests/common ++ sonic-mgmt/tests/ptf_runner.py ++ sonic-mgmt/tests/conftest.py +which are also considered as common paths. + +For all other paths, we will compare each imported path to the path of the corresponding script based on the following principles: ++ The first-level folders under `sonic-mgmt/tests` (e.g., arp, bgp) are considered feature folders. ++ If both the imported module and the script are in the same feature folder, there is no cross-feature dependency. ++ If they are in different feature folders, it indicates a cross-feature dependency, causing the check to fail. + + +We will add this check as a step in `Pre_test` in PR test. diff --git a/.azure-pipelines/dependency_check/__init__.py b/.azure-pipelines/dependency_check/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/.azure-pipelines/dependency_check/dependency_check.py b/.azure-pipelines/dependency_check/dependency_check.py new file mode 100644 index 00000000000..d9fab29e677 --- /dev/null +++ b/.azure-pipelines/dependency_check/dependency_check.py @@ -0,0 +1,221 @@ +import ast +import sys +import os +import importlib.util +from natsort import natsorted +from contextlib import contextmanager + + +def collect_all_scripts(): + """ + Recursively find all files ending with ".py" under the folder "tests" + Note: The full path and name of files are stored in a list named "files" + + Returns: + A list of files ending with ".py" under the folder "tests" + """ + location = sys.argv[1] + files = [] + for root, dirs, file in os.walk(location): + for f in file: + if f.endswith(".py"): + files.append(os.path.join(root, f)) + files = natsorted(files) + return files + + +@contextmanager +def set_sys_path(file_path): + """ + Add all the paths related to the file into sys path + + Args: + file_path (list): A list of files ending with ".py" under the folder "tests" + Returns: + None + """ + original_sys_path = sys.path.copy() + try: + current_dir = os.path.abspath(os.path.dirname(file_path)) + while current_dir != os.path.dirname(current_dir): + if current_dir.endswith("/tests"): + sys.path.append(os.path.join(current_dir, "common")) + + sys.path.append(current_dir) + current_dir = os.path.dirname(current_dir) + yield + finally: + sys.path = original_sys_path + + +def get_module_path(imported_module, level=0, file_path=""): + """ + Get the abs path of the imported module + + Args: + imported_module (string): The imported module imported in the script. + level (int): The import level that generated by ast. + file_path (string): The path of a test script. + Returns: + string/None: The absolute path of the imported module or None + """ + try: + if level == 0: + # Level 0 means an absolute import. + # This means that the import statement is intended to refer directly + # to the module or package path as specified without any relative hierarchy. + # So we can get the module path using "importlib.util.find_spec" + spec = importlib.util.find_spec(imported_module) + if spec and spec.origin: + return spec.origin + if level == 1: + # Level 1 means the import is relative to the current package level, + # so the module path shares the same dirname with the file. + # To save time, we don't need to check such import module. + return None + else: + # For level which is higher than 1, + # the number represents how many levels up in the package hierarchy the import should go. + # Based on the current file path and the specified level, we can navigate up to the corresponding directory + # and then combine the module name with the upper-level path to form an absolute path + base_dir = os.path.abspath(file_path) + for _ in range(level): + base_dir = os.path.dirname(base_dir) + return os.path.join(base_dir, *imported_module.split(".")) + except ModuleNotFoundError: + return None + + +def get_imported_modules(files): + """ + Get all imported modules in each file. + + Args: + files (list): A list of files ending with ".py" under the folder "tests" + Returns: + dict: All imported modules in test scripts. The output formatted as below + { + '../tests/acl/custom_acl_table/test_custom_acl_table.py': [ + { + 'type': 'from_import', + 'module': 'ptf.mask', + 'module_path': '/usr/local/lib/python3.8/dist-packages/ptf/mask.py', + 'alias': 'Mask', + 'asname': None + }, + { + 'type': 'from_import', + 'module': 'tests.common.fixtures.ptfhost_utils', + 'module_path': '/data/sonic-mgmt/tests/common/fixtures/ptfhost_utils.py', + 'alias': 'skip_traffic_test', + 'asname': None + } + ], + '../tests/bgp/test_bgp_session_flap.py': [ + { + 'type': 'from_import', + 'module': 'tests.common.utilities', + 'module_path': '/data/sonic-mgmt/tests/common/utilities.py', + 'alias': 'InterruptableThread', + 'asname': None + } + ] + } + """ + imported_modules_in_files = {} + for file_path in files: + # For each file, we need to add its related path into sys path + with set_sys_path(file_path): + # We use ast to analyse the file as an abstract syntax tree, + # and get all imported modules using class `ast.Import` and `ast.ImportFrom` + with open(file_path, "r", encoding="utf-8") as file: + tree = ast.parse(file.read(), filename=file_path) + imported_modules_in_files[file_path] = [] + for node in ast.walk(tree): + # Check for `import` statements + if isinstance(node, ast.Import): + for entry in node.names: + imported_modules_in_files[file_path].append({ + "type": "import", + "module": entry.name, + "module_path": get_module_path(entry.name), + "asname": entry.asname + }) + # Check for `from ... import ...` statements + if isinstance(node, ast.ImportFrom): + for entry in node.names: + imported_modules_in_files[file_path].append({ + "type": "from_import", + "module": node.module, + "module_path": get_module_path(node.module, node.level, file_path), + "alias": entry.name, + "asname": entry.asname + }) + return imported_modules_in_files + + +def get_feature_path(path): + """ + For our repo, we can consider the folders like "acl", "bgp" as feature folders. + In this function, we will retrieve the path of the top-level feature directories. + In other words, we will retrieve the absolute paths of the first-level folders under `sonic-mgmt/tests` + + Args: + path (string): The path of a file or an import module + Returns: + string/None: The absolute feature path or None + """ + if path is None: + return None + + file_path = os.path.abspath(path) + target_path = "tests" + index = file_path.find(target_path) + + if index != -1: + project_path = file_path[:index + len(target_path)] + else: + return None + + feature = file_path[len(project_path) + 1:].split("/")[0] + return os.path.join(project_path, feature) + + +def check_cross_dependency(imports_in_script): + """ + Check if there are cross-feature dependency in each file. + + Args: + imports_in_script (dict): All imported modules in test scripts. + Returns: + bool: True is there are cross-feature dependencies and False is there is no cross-feature dependencies + """ + cross_dependency = False + for file_path, imported_modules in imports_in_script.items(): + file_feature_path = get_feature_path(file_path) + for imported_module in imported_modules: + imported_module_feature_path = get_feature_path(imported_module["module_path"]) + if imported_module_feature_path is not None: + project_path = os.path.dirname(file_feature_path) + # Import from these paths are allowed. + if imported_module_feature_path not in [os.path.join(project_path, "common"), + os.path.join(project_path, "ptf_runner.py"), + os.path.join(project_path, "conftest.py"), + file_feature_path]: + print("There is a cross-feature dependence. File: {}, import module: {}" + .format(file_path, imported_module["module"])) + cross_dependency = True + return cross_dependency + + +if __name__ == '__main__': + files = collect_all_scripts() + imported_modules_in_files = get_imported_modules(files) + cross_dependency = check_cross_dependency(imported_modules_in_files) + if cross_dependency: + print("\033[31mThere are cross-feature dependencies, which is not allowed in our repo\033[0m") + print("\033[31mTo resolve this issue, please move the shared function to common place, " + "such as 'tests/common'\033[0m") + sys.exit(1) + + sys.exit(0) diff --git a/.azure-pipelines/markers-check.yml b/.azure-pipelines/markers-check.yml new file mode 100644 index 00000000000..75e449262fb --- /dev/null +++ b/.azure-pipelines/markers-check.yml @@ -0,0 +1,12 @@ +steps: +- script: | + set -x + + pip3 install natsort + + python3 ./.azure-pipelines/markers_check/markers_check.py tests + if [[ $? -ne 0 ]]; then + echo "##vso[task.complete result=Failed;]Markers check fails." + exit 1 + fi + displayName: "Markers Check" diff --git a/.azure-pipelines/markers_check/__init__.py b/.azure-pipelines/markers_check/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/.azure-pipelines/markers_check/markers_check.py b/.azure-pipelines/markers_check/markers_check.py new file mode 100644 index 00000000000..2b1c700fa8a --- /dev/null +++ b/.azure-pipelines/markers_check/markers_check.py @@ -0,0 +1,70 @@ +import re +import os +import sys +import logging + +from natsort import natsorted + + +def collect_scripts_without_topology_markers(): + """ + This function collects all test scripts under the folder 'tests/' and check the topology type marked in the script. + + Returns: + List: A list of test scripts without the topology type marker. + """ + location = sys.argv[1] + + # Recursively find all scripts starting with "test_" and ending with ".py" + # Note: The full path and name of files are stored in a list named "scripts" + scripts = [] + for root, dirs, script in os.walk(location): + for s in script: + if s.startswith("test_") and s.endswith(".py"): + scripts.append(os.path.join(root, s)) + scripts = natsorted(scripts) + + # Open each script and search for regex pattern + pattern = re.compile(r"[^@]pytest\.mark\.topology\(([^\)]*)\)") + + scripts_without_marker = [] + + for s in scripts: + has_markers = False + # Remove prefix from file name: + script_name = s[len(location) + 1:] + try: + with open(s, 'r') as script: + for line in script: + # Get topology type of script from marker `pytest.mark.topology` + match = pattern.search(line) + if match: + has_markers = True + break + + if not has_markers: + scripts_without_marker.append(script_name) + + except Exception as e: + raise Exception('Exception occurred while trying to get marker in {}, error {}'.format(s, e)) + + return scripts_without_marker + + +def main(): + try: + scripts_without_marker = collect_scripts_without_topology_markers() + + if scripts_without_marker: + for script in scripts_without_marker: + print("\033[31mPlease add mark `pytest.mark.topology` in script {}\033[0m".format(script)) + sys.exit(1) + + sys.exit(0) + except Exception as e: + logging.error(e) + sys.exit(2) + + +if __name__ == '__main__': + main() diff --git a/.azure-pipelines/pr_test_scripts.yaml b/.azure-pipelines/pr_test_scripts.yaml index 290ce1d9a7d..1874727ba7b 100644 --- a/.azure-pipelines/pr_test_scripts.yaml +++ b/.azure-pipelines/pr_test_scripts.yaml @@ -220,6 +220,14 @@ t0: - telemetry/test_telemetry.py - platform_tests/test_cont_warm_reboot.py - snmp/test_snmp_link_local.py + - arp/test_arp_update.py + - decap/test_subnet_decap.py + - fdb/test_fdb_mac_learning.py + - ip/test_mgmt_ipv6_only.py + - zmq/test_gnmi_zmq.py + - bgp/test_bgp_route_neigh_learning.py + - l2/test_l2_configure.py + - srv6/test_srv6_basic_sanity.py t0-2vlans: - dhcp_relay/test_dhcp_relay.py @@ -241,7 +249,9 @@ dualtor: - arp/test_arp_dualtor.py - arp/test_arp_extended.py - dualtor/test_ipinip.py + - dualtor/test_standalone_tunnel_route.py - dualtor/test_switchover_failure.py + - dualtor/test_switchover_faulty_ycable.py - dualtor/test_tor_ecn.py - dualtor/test_tunnel_memory_leak.py - dualtor_io/test_heartbeat_failure.py @@ -423,6 +433,12 @@ t1-lag: - generic_config_updater/test_cacl.py - telemetry/test_telemetry.py - snmp/test_snmp_link_local.py + - mpls/test_mpls.py + - vxlan/test_vxlan_route_advertisement.py + - lldp/test_lldp_syncd.py + - ipfwd/test_nhop_group.py + - restapi/test_restapi_vxlan_ecmp.py + - srv6/test_srv6_basic_sanity.py multi-asic-t1-lag: - bgp/test_bgp_bbr.py @@ -464,17 +480,13 @@ onboarding_t0: - lldp/test_lldp_syncd.py # Flaky, we will triage and fix it later, move to onboarding to unblock pr check - dhcp_relay/test_dhcp_relay_stress.py - - arp/test_arp_update.py - - decap/test_subnet_decap.py - - fdb/test_fdb_mac_learning.py - - ip/test_mgmt_ipv6_only.py - + - pc/test_lag_member_forwarding.py onboarding_t1: - - lldp/test_lldp_syncd.py - - mpls/test_mpls.py - - vxlan/test_vxlan_route_advertisement.py - + - pc/test_lag_member_forwarding.py + - pfcwd/test_pfcwd_all_port_storm.py + - pfcwd/test_pfcwd_function.py + - pfcwd/test_pfcwd_timer_accuracy.py specific_param: t0-sonic: diff --git a/.azure-pipelines/pr_test_skip_scripts.yaml b/.azure-pipelines/pr_test_skip_scripts.yaml index f233f470736..cb2969406d3 100644 --- a/.azure-pipelines/pr_test_skip_scripts.yaml +++ b/.azure-pipelines/pr_test_skip_scripts.yaml @@ -7,6 +7,10 @@ t0: - dualtor_io/test_normal_op.py # This script would toggle PDU, which is not supported on KVM - dualtor_io/test_tor_failure.py + # This script only supported on Broadcom + - ecmp/test_ecmp_sai_value.py + # This script only supported on Mellanox + - ecmp/test_fgnhg.py # This script only supported on Mellanox - generic_config_updater/test_pfcwd_interval.py # There is no k8s in inventory file @@ -22,6 +26,8 @@ t0: - ospf/test_ospf.py - ospf/test_ospf_bfd.py # Test is not supported on vs testbed + - pfc_asym/test_pfc_asym.py + # Test is not supported on vs testbed - platform_tests/test_intf_fec.py # Platform api needs the module `sonic_platform`, which is not included in vs # So skip these scripts @@ -226,6 +232,7 @@ tgen: - snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_member_flap.py - snappi_tests/multidut/bgp/test_bgp_outbound_uplink_process_crash.py - snappi_tests/multidut/ecn/test_multidut_dequeue_ecn_with_snappi.py + - snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_snappi.py - snappi_tests/multidut/ecn/test_multidut_red_accuracy_with_snappi.py - snappi_tests/multidut/pfc/test_lossless_response_to_external_pause_storms.py - snappi_tests/multidut/pfc/test_lossless_response_to_throttling_pause_storms.py @@ -236,6 +243,7 @@ tgen: - snappi_tests/multidut/pfc/test_multidut_global_pause_with_snappi.py - snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossless_with_snappi.py - snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossy_with_snappi.py + - snappi_tests/multidut/pfc/test_tx_drop_counter_with_snappi.py - snappi_tests/multidut/pfcwd/test_multidut_pfcwd_a2a_with_snappi.py - snappi_tests/multidut/pfcwd/test_multidut_pfcwd_basic_with_snappi.py - snappi_tests/multidut/pfcwd/test_multidut_pfcwd_burst_storm_with_snappi.py @@ -251,6 +259,7 @@ tgen: - snappi_tests/pfc/test_pfc_pause_unset_bit_enable_vector.py - snappi_tests/pfc/test_pfc_pause_zero_mac.py - snappi_tests/pfc/test_valid_pfc_frame_with_snappi.py + - snappi_tests/pfc/test_valid_src_mac_pfc_frame.py - snappi_tests/pfcwd/test_pfcwd_a2a_with_snappi.py - snappi_tests/pfcwd/test_pfcwd_basic_with_snappi.py - snappi_tests/pfcwd/test_pfcwd_burst_storm_with_snappi.py diff --git a/.azure-pipelines/run-test-elastictest-template.yml b/.azure-pipelines/run-test-elastictest-template.yml index 595a6cb3136..49220090daa 100644 --- a/.azure-pipelines/run-test-elastictest-template.yml +++ b/.azure-pipelines/run-test-elastictest-template.yml @@ -1,3 +1,10 @@ +# Description: +# - This template manages the entire life cycle of the Elastictest test plan in test pipelines. +# +# Important!!!: +# - This template is referenced in multiple pipelines. +# - Any updates to this file must be tested on all dependent pipelines to ensure compatibility and prevent disruptions. + parameters: - name: TOPOLOGY type: string @@ -115,16 +122,32 @@ parameters: type: string default: "" + # Enable parallel run for test cases that support parallel run + - name: ENABLE_PARALLEL_RUN + type: string + default: "" + + # Specify the file that contains the parallel mode for test cases that need to run in parallel when + # ENABLE_PARALLEL_RUN is set to True. Default value is the test_parallel_modes/default.json file in this repo. + # This field will be ignored if ENABLE_PARALLEL_RUN is set to False. + - name: PARALLEL_MODES_FILE + type: string + default: "" + + # The number of retries when the script fails. Global retry if retry_cases_include and retry_cases_exclude are both empty, otherwise specific retry - name: RETRY_TIMES type: string default: "" - - name: DUMP_KVM_IF_FAIL + # Retry cases to include, works when retry_times>0, support both feature and script level, such as "bgp,test_features.py" + - name: RETRY_CASES_INCLUDE type: string - default: "False" # KVM dump has beed deleted - values: - - "True" - - "False" + default: "" + + # Retry cases to exclude, works when retry_times>0, support both feature and script level, such as "bgp,test_features.py" + - name: RETRY_CASES_EXCLUDE + type: string + default: "" - name: REQUESTER type: string @@ -178,212 +201,187 @@ steps: # Check if azure cli is installed. If not, try to install it if ! command -v az; then echo "Azure CLI is not installed. Trying to install it..." - curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + + echo "Get packages needed for the installation process" + sudo apt-get -o DPkg::Lock::Timeout=600 update + sudo apt-get -o DPkg::Lock::Timeout=600 -y install apt-transport-https ca-certificates curl gnupg lsb-release + + echo "Download and install the Microsoft signing key" + sudo mkdir -p /etc/apt/keyrings + curl -sLS https://packages.microsoft.com/keys/microsoft.asc | + gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null + sudo chmod go+r /etc/apt/keyrings/microsoft.gpg + + echo "Add the Azure CLI software repository" + AZ_DIST=$(lsb_release -cs) + echo "Types: deb + URIs: https://packages.microsoft.com/repos/azure-cli/ + Suites: ${AZ_DIST} + Components: main + Architectures: $(dpkg --print-architecture) + Signed-by: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/azure-cli.sources + + echo "Update repository information and install the azure-cli package" + sudo apt-get -o DPkg::Lock::Timeout=600 update + sudo apt-get -o DPkg::Lock::Timeout=600 -y install azure-cli else echo "Azure CLI is already installed" fi displayName: "Install azure-cli" - - task: AzureCLI@2 - inputs: - azureSubscription: "SONiC-Automation" - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - set -e - - pip install PyYAML - - rm -f new_test_plan_id.txt - - python ./.azure-pipelines/test_plan.py create \ - -t ${{ parameters.TOPOLOGY }} \ - -o new_test_plan_id.txt \ - --min-worker ${{ parameters.MIN_WORKER }} \ - --max-worker ${{ parameters.MAX_WORKER }} \ - --lock-wait-timeout-seconds ${{ parameters.LOCK_WAIT_TIMEOUT_SECONDS }} \ - --test-set ${{ parameters.TEST_SET }} \ - --kvm-build-id $(KVM_BUILD_ID) \ - --kvm-image-branch "${{ parameters.KVM_IMAGE_BRANCH }}" \ - --deploy-mg-extra-params="${{ parameters.DEPLOY_MG_EXTRA_PARAMS }}" \ - --common-extra-params="${{ parameters.COMMON_EXTRA_PARAMS }}" \ - --vm-type ${{ parameters.VM_TYPE }} --num-asic ${{ parameters.NUM_ASIC }} \ - --ptf_image_tag ${{ parameters.PTF_IMAGE_TAG }} \ - --image_url ${{ parameters.IMAGE_URL }} \ - --upgrade-image-param="${{ parameters.UPGRADE_IMAGE_PARAM }}" \ - --hwsku ${{ parameters.HWSKU }} \ - --test-plan-type ${{ parameters.TEST_PLAN_TYPE }} \ - --platform ${{ parameters.PLATFORM }} \ - --testbed-name "${{ parameters.TESTBED_NAME }}" \ - --scripts "${{ parameters.SCRIPTS }}" \ - --features "${{ parameters.FEATURES }}" \ - --scripts-exclude "${{ parameters.SCRIPTS_EXCLUDE }}" \ - --features-exclude "${{ parameters.FEATURES_EXCLUDE }}" \ - --specific-param='${{ parameters.SPECIFIC_PARAM }}' \ - --affinity='${{ parameters.AFFINITY }}' \ - --build-reason ${{ parameters.BUILD_REASON }} \ - --repo-name ${{ parameters.REPO_NAME }} \ - --mgmt-branch ${{ parameters.MGMT_BRANCH }} \ - --stop-on-failure ${{ parameters.STOP_ON_FAILURE }} \ - --retry-times ${{ parameters.RETRY_TIMES }} \ - --dump-kvm-if-fail ${{ parameters.DUMP_KVM_IF_FAIL }} \ - --requester "${{ parameters.REQUESTER }}" \ - --max-execute-seconds $((${{ parameters.MAX_RUN_TEST_MINUTES }} * 60)) \ - --test-plan-num ${{ parameters.TEST_PLAN_NUM }} - - TEST_PLAN_ID_LIST=( $(cat new_test_plan_id.txt) ) - echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" - for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" - do - echo "Created test plan $TEST_PLAN_ID" - echo -e -n "\033[33mPlease visit Elastictest page \033[0m" - echo -n "$(FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " - echo -e "\033[33mfor detailed test plan progress \033[0m" - done - TEST_PLAN_ID_LIST_STRING=$(printf "%s," "${TEST_PLAN_ID_LIST[@]}") - TEST_PLAN_ID_LIST_STRING=${TEST_PLAN_ID_LIST_STRING%,} - echo "##vso[task.setvariable variable=TEST_PLAN_ID_LIST_STRING]$TEST_PLAN_ID_LIST_STRING" + - script: | + set -e + + pip install PyYAML + + rm -f new_test_plan_id.txt + + python ./.azure-pipelines/test_plan.py create \ + -t ${{ parameters.TOPOLOGY }} \ + -o new_test_plan_id.txt \ + --min-worker ${{ parameters.MIN_WORKER }} \ + --max-worker ${{ parameters.MAX_WORKER }} \ + --lock-wait-timeout-seconds ${{ parameters.LOCK_WAIT_TIMEOUT_SECONDS }} \ + --test-set ${{ parameters.TEST_SET }} \ + --kvm-build-id $(KVM_BUILD_ID) \ + --kvm-image-branch "${{ parameters.KVM_IMAGE_BRANCH }}" \ + --deploy-mg-extra-params="${{ parameters.DEPLOY_MG_EXTRA_PARAMS }}" \ + --common-extra-params="${{ parameters.COMMON_EXTRA_PARAMS }}" \ + --vm-type ${{ parameters.VM_TYPE }} --num-asic ${{ parameters.NUM_ASIC }} \ + --ptf_image_tag ${{ parameters.PTF_IMAGE_TAG }} \ + --image_url ${{ parameters.IMAGE_URL }} \ + --upgrade-image-param="${{ parameters.UPGRADE_IMAGE_PARAM }}" \ + --hwsku ${{ parameters.HWSKU }} \ + --test-plan-type ${{ parameters.TEST_PLAN_TYPE }} \ + --platform ${{ parameters.PLATFORM }} \ + --testbed-name "${{ parameters.TESTBED_NAME }}" \ + --scripts "${{ parameters.SCRIPTS }}" \ + --features "${{ parameters.FEATURES }}" \ + --scripts-exclude "${{ parameters.SCRIPTS_EXCLUDE }}" \ + --features-exclude "${{ parameters.FEATURES_EXCLUDE }}" \ + --specific-param='${{ parameters.SPECIFIC_PARAM }}' \ + --affinity='${{ parameters.AFFINITY }}' \ + --build-reason ${{ parameters.BUILD_REASON }} \ + --repo-name ${{ parameters.REPO_NAME }} \ + --mgmt-branch ${{ parameters.MGMT_BRANCH }} \ + --stop-on-failure ${{ parameters.STOP_ON_FAILURE }} \ + --enable-parallel-run ${{ parameters.ENABLE_PARALLEL_RUN }} \ + --parallel-modes-file ${{ parameters.PARALLEL_MODES_FILE }} \ + --retry-times ${{ parameters.RETRY_TIMES }} \ + --retry-cases-include ${{ parameters.RETRY_CASES_INCLUDE }} \ + --retry-cases-exclude ${{ parameters.RETRY_CASES_EXCLUDE }} \ + --requester "${{ parameters.REQUESTER }}" \ + --max-execute-seconds $((${{ parameters.MAX_RUN_TEST_MINUTES }} * 60)) \ + --test-plan-num ${{ parameters.TEST_PLAN_NUM }} + + TEST_PLAN_ID_LIST=( $(cat new_test_plan_id.txt) ) + echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" + for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" + do + echo "Created test plan $TEST_PLAN_ID" + echo -e -n "\033[33mPlease visit Elastictest page \033[0m" + echo -n "$(ELASTICTEST_FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " + echo -e "\033[33mfor detailed test plan progress \033[0m" + done + TEST_PLAN_ID_LIST_STRING=$(printf "%s," "${TEST_PLAN_ID_LIST[@]}") + TEST_PLAN_ID_LIST_STRING=${TEST_PLAN_ID_LIST_STRING%,} + echo "##vso[task.setvariable variable=TEST_PLAN_ID_LIST_STRING]$TEST_PLAN_ID_LIST_STRING" displayName: "Trigger test" - - task: AzureCLI@2 - inputs: - azureSubscription: "SONiC-Automation" - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - set -o - echo "Lock testbed" - - echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" - IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" - failure_count=0 - for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" - do - echo -e -n "\033[33mPlease visit Elastictest page \033[0m" - echo -n "$(FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " - echo -e "\033[33mfor detailed test plan progress \033[0m" - # When "LOCK_TESTBED" finish, it changes into "PREPARE_TESTBED" - echo "[test_plan.py] poll LOCK_TESTBED status" - python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state LOCK_TESTBED - RET=$? - if [ $RET -ne 0 ]; then - ((failure_count++)) - fi - done - - if [ $failure_count -eq ${#TEST_PLAN_ID_LIST[@]} ]; then - echo "All testplan failed, cancel following steps" - exit 3 - fi + - script: | + set -o + echo "Lock testbed" + + echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" + IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" + failure_count=0 + for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" + do + echo -e -n "\033[33mPlease visit Elastictest page \033[0m" + echo -n "$(ELASTICTEST_FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " + echo -e "\033[33mfor detailed test plan progress \033[0m" + # When "LOCK_TESTBED" finish, it changes into "PREPARE_TESTBED" + echo "[test_plan.py] poll LOCK_TESTBED status" + python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state LOCK_TESTBED + RET=$? + if [ $RET -ne 0 ]; then + ((failure_count++)) + fi + done + + if [ $failure_count -eq ${#TEST_PLAN_ID_LIST[@]} ]; then + echo "All testplan failed, cancel following steps" + exit 3 + fi displayName: "Lock testbed" - - task: AzureCLI@2 - inputs: - azureSubscription: "SONiC-Automation" - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - set -o - echo "Prepare testbed" - echo "Preparing the testbed(add-topo, deploy-mg) may take 15-30 minutes. Before the testbed is ready, the progress of the test plan keeps displayed as 0, please be patient" - - echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" - IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" - failure_count=0 - for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" - do - echo -e -n "\033[33mPlease visit Elastictest page \033[0m" - echo -n "$(FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " - echo -e "\033[33mfor detailed test plan progress \033[0m" - # When "PREPARE_TESTBED" finish, it changes into "EXECUTING" - echo "[test_plan.py] poll PREPARE_TESTBED status" - python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state PREPARE_TESTBED - RET=$? - if [ $RET -ne 0 ]; then - ((failure_count++)) - fi - done - - if [ "$failure_count" -eq ${#TEST_PLAN_ID_LIST[@]} ]; then - echo "All testplan failed, cancel following steps" - exit 3 - fi + - script: | + set -o + echo "Prepare testbed" + echo "Preparing the testbed(add-topo, deploy-mg) may take 15-30 minutes. Before the testbed is ready, the progress of the test plan keeps displayed as 0, please be patient" + + echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" + IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" + failure_count=0 + for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" + do + echo -e -n "\033[33mPlease visit Elastictest page \033[0m" + echo -n "$(ELASTICTEST_FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " + echo -e "\033[33mfor detailed test plan progress \033[0m" + # When "PREPARE_TESTBED" finish, it changes into "EXECUTING" + echo "[test_plan.py] poll PREPARE_TESTBED status" + python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state PREPARE_TESTBED + RET=$? + if [ $RET -ne 0 ]; then + ((failure_count++)) + fi + done + + if [ "$failure_count" -eq ${#TEST_PLAN_ID_LIST[@]} ]; then + echo "All testplan failed, cancel following steps" + exit 3 + fi displayName: "Prepare testbed" - - task: AzureCLI@2 - inputs: - azureSubscription: "SONiC-Automation" - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - set -o - echo "Run test" - - echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" - IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" - failure_count=0 - for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" - do - echo -e -n "\033[33mPlease visit Elastictest page \033[0m" - echo -n "$(FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " - echo -e "\033[33mfor detailed test plan progress \033[0m" - # When "EXECUTING" finish, it changes into "KVMDUMP", "FAILED", "CANCELLED" or "FINISHED" - echo "[test_plan.py] poll EXECUTING status" - python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state EXECUTING --expected-result ${{ parameters.EXPECTED_RESULT }} - RET=$? - if [ $RET -ne 0 ]; then - ((failure_count++)) - fi - done - - if [ $failure_count -eq ${#TEST_PLAN_ID_LIST[@]} ]; then - echo "All testplan failed, cancel following steps" - exit 3 - fi + - script: | + set -o + echo "Run test" + + echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" + IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" + failure_count=0 + for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" + do + echo -e -n "\033[33mPlease visit Elastictest page \033[0m" + echo -n "$(ELASTICTEST_FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " + echo -e "\033[33mfor detailed test plan progress \033[0m" + # When "EXECUTING" finish, it changes into "KVMDUMP", "FAILED", "CANCELLED" or "FINISHED" + echo "[test_plan.py] poll EXECUTING status" + python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state EXECUTING --expected-result ${{ parameters.EXPECTED_RESULT }} + RET=$? + if [ $RET -ne 0 ]; then + ((failure_count++)) + fi + done + + if [ $failure_count -eq ${#TEST_PLAN_ID_LIST[@]} ]; then + echo "All testplan failed, cancel following steps" + exit 3 + fi displayName: "Run test" timeoutInMinutes: ${{ parameters.MAX_RUN_TEST_MINUTES }} - - ${{ if eq(parameters.DUMP_KVM_IF_FAIL, 'True') }}: - - task: AzureCLI@2 - inputs: - azureSubscription: "SONiC-Automation" - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - set -e - echo "KVM dump" - - echo -e "\033[33mSONiC PR system-level test is powered by SONiC Elastictest, for any issue, please send email to sonicelastictest@microsoft.com \033[0m" - IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" - for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" - do - echo -e -n "\033[33mPlease visit Elastictest page \033[0m" - echo -n "$(FRONTEND_URL)/scheduler/testplan/$TEST_PLAN_ID " - echo -e "\033[33mfor detailed test plan progress \033[0m" - # When "KVMDUMP" finish, it changes into "FAILED", "CANCELLED" or "FINISHED" - echo "##[group][test_plan.py] poll KVMDUMP status" - python ./.azure-pipelines/test_plan.py poll -i $TEST_PLAN_ID --expected-state KVMDUMP - done - - condition: succeededOrFailed() - displayName: "KVM dump" - - - task: AzureCLI@2 - inputs: - azureSubscription: "SONiC-Automation" - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - set -e - echo "Try to cancel test plan $TEST_PLAN_ID, cancelling finished test plan has no effect." - IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" - for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" - do - python ./.azure-pipelines/test_plan.py cancel -i $TEST_PLAN_ID - done + - script: | + set -e + echo "Try to cancel test plan $TEST_PLAN_ID, cancelling finished test plan has no effect." + IFS=',' read -ra TEST_PLAN_ID_LIST <<< "$TEST_PLAN_ID_LIST_STRING" + for TEST_PLAN_ID in "${TEST_PLAN_ID_LIST[@]}" + do + python ./.azure-pipelines/test_plan.py cancel -i $TEST_PLAN_ID + done condition: always() displayName: "Finalize running test plan" diff --git a/.azure-pipelines/test_plan.py b/.azure-pipelines/test_plan.py index f4b07bb2d18..84e0cd33efd 100644 --- a/.azure-pipelines/test_plan.py +++ b/.azure-pipelines/test_plan.py @@ -1,3 +1,12 @@ +""" +Description: +- This script provides access to Elastictest test plan API, including creating, canceling, and polling status. + +Important!!!: +- This script is downloaded in multiple pipelines. +- Any updates to this file must be tested on all dependent pipelines to ensure compatibility and prevent disruptions. +""" + from __future__ import print_function, division import argparse @@ -8,7 +17,7 @@ import subprocess import copy import time -from datetime import datetime, timedelta +from datetime import datetime, timezone import requests import yaml @@ -22,8 +31,7 @@ INTERNAL_SONIC_MGMT_REPO = "https://dev.azure.com/mssonic/internal/_git/sonic-mgmt-int" PR_TEST_SCRIPTS_FILE = "pr_test_scripts.yaml" SPECIFIC_PARAM_KEYWORD = "specific_param" -TOLERATE_HTTP_EXCEPTION_TIMES = 20 -TOKEN_EXPIRE_HOURS = 1 +MAX_POLL_RETRY_TIMES = 10 MAX_GET_TOKEN_RETRY_TIMES = 3 TEST_PLAN_STATUS_UNSUCCESSFUL_FINISHED = ["FAILED", "CANCELLED"] TEST_PLAN_STEP_STATUS_UNFINISHED = ["EXECUTING", None] @@ -83,13 +91,15 @@ def __init__(self, status): def get_status(self): return self.status.value - def print_logs(self, test_plan_id, resp_data, start_time): + def print_logs(self, test_plan_id, resp_data, expected_status, start_time): status = resp_data.get("status", None) current_status = test_plan_status_factory(status).get_status() if current_status == self.get_status(): - print("Test plan id: {}, status: {}, elapsed: {:.0f} seconds" - .format(test_plan_id, resp_data.get("status", None), time.time() - start_time)) + print( + f"Test plan id: {test_plan_id}, status: {resp_data.get('status', None)}, " + f"expected_status: {expected_status}, elapsed: {time.time() - start_time:.0f} seconds" + ) class InitStatus(AbstractStatus): @@ -111,10 +121,12 @@ class ExecutingStatus(AbstractStatus): def __init__(self): super(ExecutingStatus, self).__init__(TestPlanStatus.EXECUTING) - def print_logs(self, test_plan_id, resp_data, start_time): - print("Test plan id: {}, status: {}, progress: {:.2f}%, elapsed: {:.0f} seconds" - .format(test_plan_id, resp_data.get("status", None), - resp_data.get("progress", 0) * 100, time.time() - start_time)) + def print_logs(self, test_plan_id, resp_data, expected_status, start_time): + print( + f"Test plan id: {test_plan_id}, status: {resp_data.get('status', None)}, " + f"expected_status: {expected_status}, progress: {resp_data.get('progress', 0) * 100:.2f}%, " + f"elapsed: {time.time() - start_time:.0f} seconds" + ) class KvmDumpStatus(AbstractStatus): @@ -150,74 +162,81 @@ def parse_list_from_str(s): if single_str.strip()] +def run_cmd(cmd): + process = subprocess.Popen( + cmd.split(), + shell=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + stdout, stderr = process.communicate() + return_code = process.returncode + + if return_code != 0: + raise Exception(f'Command {cmd} execution failed, rc={return_code}, error={stderr}') + return stdout, stderr, return_code + + class TestPlanManager(object): - def __init__(self, scheduler_url, community_url, frontend_url, client_id=None): + def __init__(self, scheduler_url, frontend_url, client_id, managed_identity_id): self.scheduler_url = scheduler_url - self.community_url = community_url self.frontend_url = frontend_url self.client_id = client_id - self.with_auth = False - self._token = None - self._token_expires_on = None - if self.client_id: - self.with_auth = True - self.get_token() - - 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 az_run(self, cmd): - stdout, stderr, retcode = self.cmd(cmd.split()) - if retcode != 0: - raise Exception(f'Command {cmd} execution failed, rc={retcode}, error={stderr}') - return stdout, stderr, retcode + self.managed_identity_id = managed_identity_id def get_token(self): - token_is_valid = \ - self._token_expires_on is not None and \ - (self._token_expires_on - datetime.now()) > timedelta(hours=TOKEN_EXPIRE_HOURS) + # 1. Run az login with re-try + az_login_cmd = f"az login --identity --username {self.managed_identity_id}" + az_login_attempts = 0 + while az_login_attempts < MAX_GET_TOKEN_RETRY_TIMES: + try: + stdout, _, _ = run_cmd(az_login_cmd) + print(f"Az login successfully. Login time: {datetime.now(timezone.utc)}") + break + except Exception as exception: + az_login_attempts += 1 + print( + f"Failed to az login with exception: {repr(exception)}. " + f"Retry {MAX_GET_TOKEN_RETRY_TIMES - az_login_attempts} times to login." + ) - if self._token is not None and token_is_valid: - return self._token + # If az login failed, return with exception + if az_login_attempts >= MAX_GET_TOKEN_RETRY_TIMES: + raise Exception(f"Failed to az login after {MAX_GET_TOKEN_RETRY_TIMES} attempts.") - cmd = 'az account get-access-token --resource {}'.format(self.client_id) - attempt = 0 - while attempt < MAX_GET_TOKEN_RETRY_TIMES: + # 2. Get access token with re-try + get_token_cmd = f"az account get-access-token --resource {self.client_id}" + get_token_attempts = 0 + while get_token_attempts < MAX_GET_TOKEN_RETRY_TIMES: try: - stdout, _, _ = self.az_run(cmd) + stdout, _, _ = run_cmd(get_token_cmd) token = json.loads(stdout.decode("utf-8")) - self._token = token.get("accessToken", None) - if not self._token: - raise Exception("Parse token from stdout failed") + access_token = token.get("accessToken", None) + if not access_token: + raise Exception("Parse token from stdout failed, accessToken is None.") # Parse token expires time from string token_expires_on = token.get("expiresOn", "") - self._token_expires_on = datetime.strptime(token_expires_on, "%Y-%m-%d %H:%M:%S.%f") - print("Get token successfully.") - return self._token + if token_expires_on: + print(f"Get token successfully. Token will expire on {token_expires_on}.") + + return access_token except Exception as exception: - attempt += 1 - print("Failed to get token with exception: {}".format(repr(exception))) + get_token_attempts += 1 + print(f"Failed to get token with exception: {repr(exception)}.") - raise Exception("Failed to get token after {} attempts".format(MAX_GET_TOKEN_RETRY_TIMES)) + # If az get token failed, return with exception + if get_token_attempts >= MAX_GET_TOKEN_RETRY_TIMES: + raise Exception(f"Failed to get token after {MAX_GET_TOKEN_RETRY_TIMES} attempts") def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params="", kvm_build_id="", min_worker=None, max_worker=None, pr_id="unknown", output=None, common_extra_params="", **kwargs): - tp_url = "{}/test_plan".format(self.scheduler_url) + tp_url = f"{self.scheduler_url}/test_plan" testbed_name = parse_list_from_str(kwargs.get("testbed_name", None)) image_url = kwargs.get("image_url", None) hwsku = kwargs.get("hwsku", None) @@ -227,10 +246,14 @@ def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params features = parse_list_from_str(kwargs.get("features", None)) scripts_exclude = parse_list_from_str(kwargs.get("scripts_exclude", None)) features_exclude = parse_list_from_str(kwargs.get("features_exclude", None)) + retry_cases_include = parse_list_from_str(kwargs.get("retry_cases_include", None)) + retry_cases_exclude = parse_list_from_str(kwargs.get("retry_cases_exclude", None)) ptf_image_tag = kwargs.get("ptf_image_tag", None) - print("Creating test plan, topology: {}, name: {}, build info:{} {} {}".format(topology, test_plan_name, - repo_name, pr_id, build_id)) + print( + f"Creating test plan, topology: {topology}, name: {test_plan_name}, " + f"build info:{repo_name} {pr_id} {build_id}" + ) print("Test scripts to be covered in this test plan:") print(json.dumps(scripts, indent=4)) @@ -283,7 +306,11 @@ def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params }, "test_option": { "stop_on_failure": kwargs.get("stop_on_failure", True), + "enable_parallel_run": kwargs.get("enable_parallel_run", False), + "parallel_modes_file": kwargs.get("parallel_modes_file", "default.json"), "retry_times": kwargs.get("retry_times", 2), + "retry_cases_include": retry_cases_include, + "retry_cases_exclude": retry_cases_exclude, "test_cases": { "features": features, "scripts": scripts, @@ -308,7 +335,6 @@ def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params "affinity": affinity, "deploy_mg_param": deploy_mg_extra_params, "max_execute_seconds": kwargs.get("max_execute_seconds", None), - "dump_kvm_if_fail": kwargs.get("dump_kvm_if_fail", False), }, "type": test_plan_type, "trigger": { @@ -320,10 +346,9 @@ def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params "extra_params": {}, "priority": 10 } - print('Creating test plan with payload:\n{}'.format(json.dumps(payload, indent=4))) + print(f"Creating test plan with payload:\n{json.dumps(payload, indent=4)}") headers = { - "Authorization": "Bearer {}".format(self.get_token()), - "scheduler-site": "PRTest", + "Authorization": f"Bearer {self.get_token()}", "Content-Type": "application/json" } raw_resp = {} @@ -331,17 +356,16 @@ def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params raw_resp = requests.post(tp_url, headers=headers, data=json.dumps(payload), timeout=10) resp = raw_resp.json() except Exception as exception: - raise Exception("HTTP execute failure, url: {}, raw_resp: {}, exception: {}" - .format(tp_url, str(raw_resp), str(exception))) + raise Exception(f"HTTP execute failure, url: {tp_url}, raw_resp: {raw_resp}, exception: {str(exception)}") if not resp["data"]: - raise Exception("Pre deploy action failed with error: {}".format(resp["errmsg"])) + raise Exception(f"Create test plan failed with error: {resp['errmsg']}") if not resp["success"]: - raise Exception("Create test plan failed with error: {}".format(resp["errmsg"])) + raise Exception(f"Create test plan failed with error: {resp['errmsg']}") - print("Result of creating test plan: {}".format(str(resp["data"]))) + print(f"Result of creating test plan: {str(resp['data'])}") if output: - print("Store new test plan id to file {}".format(output)) + print(f"Store new test plan id to file {output}") with open(output, "a") as f: f.write(str(resp["data"]) + "\n") @@ -349,15 +373,14 @@ def create(self, topology, test_plan_name="my_test_plan", deploy_mg_extra_params def cancel(self, test_plan_id): - tp_url = "{}/test_plan/{}".format(self.scheduler_url, test_plan_id) - cancel_url = "{}/cancel".format(tp_url) + tp_url = f"{self.scheduler_url}/test_plan/{test_plan_id}" + cancel_url = f"{tp_url}/cancel" - print("Cancelling test plan at {}".format(cancel_url)) + print(f"Cancelling test plan at {cancel_url}") payload = json.dumps({}) headers = { - "Authorization": "Bearer {}".format(self.get_token()), - "scheduler-site": "PRTest", + "Authorization": f"Bearer {self.get_token()}", "Content-Type": "application/json" } @@ -366,73 +389,57 @@ def cancel(self, test_plan_id): raw_resp = requests.post(cancel_url, headers=headers, data=payload, timeout=10) resp = raw_resp.json() except Exception as exception: - raise Exception("HTTP execute failure, url: {}, raw_resp: {}, exception: {}" - .format(cancel_url, str(raw_resp), str(exception))) + raise Exception(f"HTTP execute failure, url: {cancel_url}, raw_resp: {str(raw_resp)}, " + f"exception: {str(exception)}") if not resp["success"]: - raise Exception("Cancel test plan failed with error: {}".format(resp["errmsg"])) + raise Exception(f"Cancel test plan failed with error: {resp['errmsg']}") - print("Result of cancelling test plan at {}:".format(tp_url)) + print(f"Result of cancelling test plan at {tp_url}:") print(str(resp["data"])) def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expected_result=None): - print("Polling progress and status of test plan at {}/scheduler/testplan/{}" - .format(self.frontend_url, test_plan_id)) - print("Polling interval: {} seconds".format(interval)) + print(f"Polling progress and status of test plan at {self.frontend_url}/scheduler/testplan/{test_plan_id}") + print(f"Polling interval: {interval} seconds") - poll_url = "{}/test_plan/{}/get_test_plan_status".format(self.scheduler_url, test_plan_id) - poll_url_no_auth = "{}/get_test_plan_status/{}".format(self.community_url, test_plan_id) + poll_url = f"{self.scheduler_url}/test_plan/{test_plan_id}/get_test_plan_status" + # In current polling task, initialize headers one time to avoid frequent token accessing + # For some tasks running over 24h, then token may expire, need a fresh headers = { + "Authorization": f"Bearer {self.get_token()}", "Content-Type": "application/json" } start_time = time.time() - http_exception_times = 0 - http_exception_times_no_auth = 0 - failed_poll_auth_url = False + poll_retry_times = 0 while timeout < 0 or (time.time() - start_time) < timeout: resp = None - # To make the transition smoother, first try to access the original API - if not failed_poll_auth_url: - try: - if self.with_auth: - headers["Authorization"] = "Bearer {}".format(self.get_token()) - resp = requests.get(poll_url, headers=headers, timeout=10).json() - except Exception as exception: - print("HTTP execute failure, url: {}, raw_resp: {}, exception: {}".format(poll_url, resp, - str(exception))) - http_exception_times = http_exception_times + 1 - if http_exception_times >= TOLERATE_HTTP_EXCEPTION_TIMES: - failed_poll_auth_url = True - else: - time.sleep(interval) - continue - - # If failed on poll auth url(most likely token has expired), try with no-auth url - else: - print("Polling test plan status failed with auth url, try with no-auth url.") - try: - resp = requests.get(poll_url_no_auth, headers={"Content-Type": "application/json"}, - timeout=10).json() - except Exception as e: - print("HTTP execute failure, url: {}, raw_resp: {}, exception: {}".format(poll_url_no_auth, resp, - repr(e))) - http_exception_times_no_auth = http_exception_times_no_auth + 1 - if http_exception_times_no_auth >= TOLERATE_HTTP_EXCEPTION_TIMES: - raise Exception( - "HTTP execute failure, url: {}, raw_resp: {}, exception: {}".format(poll_url_no_auth, resp, - repr(e))) - else: - time.sleep(interval) - continue + try: + resp = requests.get(poll_url, headers=headers, timeout=10).json() + + if not resp: + raise Exception("Poll test plan status failed with request error, no response!") - if not resp: - raise Exception("Poll test plan status failed with request error, no response!") + if not resp["success"]: + raise Exception(f"Get test plan status failed with error: {resp['errmsg']}") - if not resp["success"]: - raise Exception("Query test plan at {} failed with error: {}".format(poll_url, resp["errmsg"])) + resp_data = resp.get("data", None) + if not resp_data: + raise Exception("No valid data in response.") - resp_data = resp.get("data", None) - if not resp_data: - raise Exception("No valid data in response: {}".format(str(resp))) + except Exception as exception: + print(f"Failed to get valid response, url: {poll_url}, raw_resp: {resp}, exception: {str(exception)}") + + # Refresh headers token to address token expiration issue + headers = { + "Authorization": f"Bearer {self.get_token()}", + "Content-Type": "application/json" + } + + poll_retry_times = poll_retry_times + 1 + if poll_retry_times >= MAX_POLL_RETRY_TIMES: + raise Exception("Poll test plan status failed, exceeded the maximum number of retries.") + else: + time.sleep(interval) + continue current_tp_status = resp_data.get("status", None) current_tp_result = resp_data.get("result", None) @@ -441,11 +448,10 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte current_status = test_plan_status_factory(current_tp_status) expected_status = test_plan_status_factory(expected_state) - print("current test plan status: {}, expected status: {}".format(current_tp_status, expected_state)) + current_status.print_logs(test_plan_id, resp_data, expected_state, start_time) - if expected_status.get_status() == current_status.get_status(): - current_status.print_logs(test_plan_id, resp_data, start_time) - elif expected_status.get_status() < current_status.get_status(): + # If test plan has finished current step, its now status will behind the expected status + if expected_status.get_status() < current_status.get_status(): steps = None step_status = None runtime = resp_data.get("runtime", None) @@ -460,7 +466,7 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte # Print test summary test_summary = resp_data.get("runtime", {}).get("test_summary", None) if test_summary: - print("Test summary:\n{}".format(json.dumps(test_summary, indent=4))) + print(f"Test summary:\n{json.dumps(test_summary, indent=4)}") """ In below scenarios, need to return false to pipeline. @@ -477,38 +483,34 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte # Print error type and message err_code = resp_data.get("runtime", {}).get("err_code", None) if err_code: - print("Error type: {}".format(err_code)) + print(f"Error type: {err_code}") err_msg = resp_data.get("runtime", {}).get("message", None) if err_msg: - print("Error message: {}".format(err_msg)) + print(f"Error message: {err_msg}") - raise Exception("Test plan id: {}, status: {}, result: {}, Elapsed {:.0f} seconds. " - "Check {}/scheduler/testplan/{} for test plan status" - .format(test_plan_id, step_status, current_tp_result, time.time() - start_time, - self.frontend_url, - test_plan_id)) + raise Exception( + f"Test plan id: {test_plan_id}, status: {step_status}, " + f"result: {current_tp_result}, Elapsed {time.time() - start_time:.0f} seconds. " + f"Check {self.frontend_url}/scheduler/testplan/{test_plan_id} for test plan status" + ) if expected_result: if current_tp_result != expected_result: - raise Exception("Test plan id: {}, status: {}, result: {} not match expected result: {}, " - "Elapsed {:.0f} seconds. " - "Check {}/scheduler/testplan/{} for test plan status" - .format(test_plan_id, step_status, current_tp_result, - expected_result, time.time() - start_time, - self.frontend_url, - test_plan_id)) - - print("Current step status is {}".format(step_status)) + raise Exception( + f"Test plan id: {test_plan_id}, status: {step_status}, " + f"result: {current_tp_result} not match expected result: {expected_result}, " + f"Elapsed {time.time() - start_time:.0f} seconds. " + f"Check {self.frontend_url}/scheduler/testplan/{test_plan_id} for test plan status" + ) + + print(f"Current step status is {step_status}.") return - else: - print("Current test plan state is {}, waiting for the expected state {}".format(current_tp_status, - expected_state)) time.sleep(interval) else: raise PollTimeoutException( - "Max polling time reached, test plan at {} is not successfully finished or cancelled".format(poll_url) + f"Max polling time reached, test plan at {poll_url} is not successfully finished or cancelled" ) @@ -819,6 +821,27 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte choices=[True, False], help="Stop whole test plan if test failed." ) + parser_create.add_argument( + "--enable-parallel-run", + type=ast.literal_eval, + dest="enable_parallel_run", + nargs='?', + const='False', + default='False', + required=False, + choices=[True, False], + help="Enable parallel run or not." + ) + parser_create.add_argument( + "--parallel-modes-file", + type=str, + dest="parallel_modes_file", + nargs='?', + const='default.json', + default='default.json', + required=False, + help="Which parallel modes file to use when parallel run is enabled." + ) parser_create.add_argument( "--retry-times", type=int, @@ -830,15 +853,24 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte help="Retry times after tests failed." ) parser_create.add_argument( - "--dump-kvm-if-fail", - type=ast.literal_eval, - dest="dump_kvm_if_fail", + "--retry-cases-include", + type=str, + dest="retry_cases_include", nargs='?', - const='True', - default='True', + const=None, + default=None, required=False, - choices=[True, False], - help="Dump KVM DUT if test plan failed, only supports KVM test plan." + help="Include testcases to retry, support feature/script. Split by ',', like: 'bgp, lldp, ecmp/test_fgnhg.py'" + ) + parser_create.add_argument( + "--retry-cases-exclude", + type=str, + dest="retry_cases_exclude", + nargs='?', + const=None, + default=None, + required=False, + help="Exclude testcases to retry, support feature/script. Split by ',', like: 'bgp, lldp, ecmp/test_fgnhg.py'" ) parser_create.add_argument( "--requester", @@ -930,30 +962,28 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte # https://github.com/microsoft/azure-pipelines-tasks/issues/10331 args.test_plan_id = args.test_plan_id.replace("'", "") - print("Test plan utils parameters: {}".format(args)) - auth_env = ["CLIENT_ID"] - required_env = ["ELASTICTEST_SCHEDULER_BACKEND_URL"] + print(f"Test plan utils parameters: {args}") - if args.action in ["create", "cancel"]: - required_env.extend(auth_env) + required_env = ["ELASTICTEST_SCHEDULER_BACKEND_URL", "CLIENT_ID", "SONIC_AUTOMATION_UMI"] env = { - "elastictest_scheduler_backend_url": os.environ.get("ELASTICTEST_SCHEDULER_BACKEND_URL"), - "elastictest_community_url": os.environ.get("ELASTICTEST_COMMUNITY_URL"), - "client_id": os.environ.get("ELASTICTEST_MSAL_CLIENT_ID"), - "frontend_url": os.environ.get("ELASTICTEST_FRONTEND_URL", "https://elastictest.org"), + "ELASTICTEST_SCHEDULER_BACKEND_URL": os.environ.get("ELASTICTEST_SCHEDULER_BACKEND_URL"), + "CLIENT_ID": os.environ.get("ELASTICTEST_MSAL_CLIENT_ID"), + "FRONTEND_URL": os.environ.get("ELASTICTEST_FRONTEND_URL", "https://elastictest.org"), + "SONIC_AUTOMATION_UMI": os.environ.get("SONIC_AUTOMATION_UMI"), } env_missing = [k.upper() for k, v in env.items() if k.upper() in required_env and not v] if env_missing: - print("Missing required environment variables: {}".format(env_missing)) + print(f"Missing required environment variables: {env_missing}.") sys.exit(1) try: tp = TestPlanManager( - env["elastictest_scheduler_backend_url"], - env["elastictest_community_url"], - env["frontend_url"], - env["client_id"]) + env["ELASTICTEST_SCHEDULER_BACKEND_URL"], + env["FRONTEND_URL"], + env["CLIENT_ID"], + env["SONIC_AUTOMATION_UMI"] + ) if args.action == "create": pr_id = os.environ.get("SYSTEM_PULLREQUEST_PULLREQUESTNUMBER") or os.environ.get( @@ -964,14 +994,7 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte job_name = os.environ.get("SYSTEM_JOBDISPLAYNAME") repo_name = args.repo_name if args.repo_name else os.environ.get("BUILD_REPOSITORY_NAME") - test_plan_prefix = "{repo}_{reason}_PR_{pr_id}_BUILD_{build_id}_JOB_{job_name}" \ - .format( - repo=repo, - reason=reason, - pr_id=pr_id, - build_id=build_id, - job_name=job_name - ).replace(' ', '_') + test_plan_prefix = f"{repo}_{reason}_PR_{pr_id}_BUILD_{build_id}_JOB_{job_name}".replace(' ', '_') scripts = args.scripts specific_param = json.loads(args.specific_param) @@ -989,7 +1012,7 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte for num in range(args.test_plan_num): test_plan_name = copy.copy(test_plan_prefix) if args.test_plan_num > 1: - test_plan_name = "{}_{}".format(test_plan_name, num + 1) + test_plan_name = f"{test_plan_name}_{num + 1}" tp.create( args.topology, @@ -1021,8 +1044,11 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte test_plan_type=args.test_plan_type, platform=args.platform, stop_on_failure=args.stop_on_failure, + enable_parallel_run=args.enable_parallel_run, + parallel_modes_file=args.parallel_modes_file, retry_times=args.retry_times, - dump_kvm_if_fail=args.dump_kvm_if_fail, + retry_cases_include=args.retry_cases_include, + retry_cases_exclude=args.retry_cases_exclude, requester=args.requester, max_execute_seconds=args.max_execute_seconds, lock_wait_timeout_seconds=args.lock_wait_timeout_seconds, @@ -1033,8 +1059,8 @@ def poll(self, test_plan_id, interval=60, timeout=-1, expected_state="", expecte tp.cancel(args.test_plan_id) sys.exit(0) except PollTimeoutException as e: - print("Polling test plan failed with exception: {}".format(repr(e))) + print(f"Polling test plan failed with exception: {repr(e)}") sys.exit(2) except Exception as e: - print("Operation failed with exception: {}".format(repr(e))) + print(f"Operation failed with exception: {repr(e)}") sys.exit(3) diff --git a/.azure-pipelines/testbed_health_check.py b/.azure-pipelines/testbed_health_check.py old mode 100755 new mode 100644 index eb7d3e4b1ae..569858da20f --- a/.azure-pipelines/testbed_health_check.py +++ b/.azure-pipelines/testbed_health_check.py @@ -86,6 +86,9 @@ def __init__(self, inventory, testbed_name, testbed_file, log_verbosity, output_ self.localhost = None self.sonichosts = None + self.duts_basic_facts = None + self.is_multi_asic = False + self.is_chassis = False self.inventory = inventory self.testbed_name = testbed_name @@ -111,6 +114,13 @@ def init_hosts(self): if not self.sonichosts: raise HostInitFailed("sonichosts is None. Please check testbed name/file/inventory.") + self.duts_basic_facts = self.sonichosts.dut_basic_facts() + self.is_multi_asic = self.duts_basic_facts[self.sonichosts[0].hostname][ + "ansible_facts"]["dut_basic_facts"]["is_multi_asic"] + + self.is_chassis = self.duts_basic_facts[self.sonichosts[0].hostname][ + "ansible_facts"]["dut_basic_facts"]["is_chassis"] + logger.info("======================= init_hosts ends =======================") def pre_check(self): @@ -208,20 +218,13 @@ def pre_check(self): if len(ipv4_not_exists_hosts) > 0: raise HostsUnreachable(self.check_result.errmsg) + # TODO: Refactor the following code to specify a "leader" T2 Testbed and skip the check on "followers" # Retrieve the basic facts of the DUTs - duts_basic_facts = self.sonichosts.dut_basic_facts() - - for dut_name, single_dut_basic_facts in duts_basic_facts.items(): - - # Get the basic facts of one DUT - dut_basic_facts = single_dut_basic_facts["ansible_facts"]["dut_basic_facts"] - - # todo: Skip multi_asic check on multi_asic dut now because currently not support get asic object - if dut_basic_facts["is_multi_asic"]: - errmsg = "Not support to perform checks on multi-asic DUT now." - logger.info(errmsg) + if self.is_multi_asic: + errmsg = "Not support to perform checks on multi-asic DUT now." + logger.info(errmsg) - raise SkipCurrentTestbed(errmsg) + raise SkipCurrentTestbed(errmsg) logger.info("======================= pre_check ends =======================") @@ -297,12 +300,21 @@ def check_bgp_session_state(self, state="established"): state: str. The target state to compare the BGP session state against. Defaults to "established". """ + def find_unexpected_bgp_neighbors(neigh_bgp_facts, expected_state, unexpected_neighbors): + for k, v in list(neigh_bgp_facts['bgp_neighbors'].items()): + if v['state'] != expected_state: + unexpected_neighbors.append(f"{k}, {v['state']}") + failed = False bgp_facts_on_hosts = {} logger.info("======================= check_bgp_session_state starts =======================") for sonichost in self.sonichosts: + if (self.is_chassis and + self.duts_basic_facts[sonichost.hostname]["ansible_facts"]["dut_basic_facts"]["is_supervisor"]): + logger.info("Skip check_bgp_session_state on Supervisor.") + continue hostname = sonichost.hostname @@ -310,15 +322,25 @@ def check_bgp_session_state(self, state="established"): hostname)) # Retrieve BGP facts for the Sonic host - bgp_facts = sonichost.bgp_facts()['ansible_facts'] + bgp_facts = {} + if self.is_multi_asic: + host_asics_list = self.duts_basic_facts[sonichost.hostname][ + "ansible_facts"]["dut_basic_facts"]["asic_index_list"] + + for instance_id in host_asics_list: + bgp_facts[instance_id] = sonichost.bgp_facts(instance_id=instance_id)['ansible_facts'] + else: + bgp_facts = sonichost.bgp_facts()['ansible_facts'] bgp_facts_on_hosts[hostname] = bgp_facts # Check BGP session state for each neighbor neigh_not_ok = [] - for k, v in list(bgp_facts['bgp_neighbors'].items()): - if v['state'] != state: - neigh_not_ok.append(f"{k}, {v['state']}") + if self.is_multi_asic: + for instance_id, facts in bgp_facts.items(): + find_unexpected_bgp_neighbors(facts, state, neigh_not_ok) + else: + find_unexpected_bgp_neighbors(bgp_facts, state, neigh_not_ok) errlog = "BGP neighbors that not established on {}: {}".format(hostname, neigh_not_ok) @@ -349,36 +371,74 @@ def check_interface_status_of_up_ports(self): logger.info("======================= check_interface_status_of_up_ports starts =======================") for sonichost in self.sonichosts: + if (self.is_chassis and + self.duts_basic_facts[sonichost.hostname]["ansible_facts"]["dut_basic_facts"]["is_supervisor"]): + logger.info("Skip check_interface_status_of_up_ports on Supervisor.") + continue hostname = sonichost.hostname logger.info( "----------------------- check_interface_status_of_up_ports on [{}] -----------------------".format( hostname)) - # Retrieve the configuration facts for the DUT - cfg_facts = sonichost.config_facts(host=hostname, source='running')['ansible_facts'] + # 1. Retrieve the configuration facts for the DUT + # 2. Get a list of up ports from the configuration facts + # 3. Retrieve the interface facts for the up ports + if self.is_multi_asic: + host_asics_list = self.duts_basic_facts[sonichost.hostname][ + "ansible_facts"]["dut_basic_facts"]["asic_index_list"] - # Get a list of up ports from the configuration facts - up_ports = [p for p, v in list(cfg_facts['PORT'].items()) if v.get('admin_status', None) == 'up'] + interface_facts = {} + for asic_id in host_asics_list: + cfg_facts_of_asic = sonichost.config_facts( + host=hostname, source='running', namespace='asic{}'.format(asic_id) + )['ansible_facts'] - logger.info('up_ports: {}'.format(up_ports)) + up_ports = [ + p for p, v in list(cfg_facts_of_asic['PORT'].items()) + if v.get('admin_status', None) == 'up' + ] - # Retrieve the interface facts for the up ports - interface_facts = sonichost.interface_facts(up_ports=up_ports)['ansible_facts'] + logger.info('up_ports: {}'.format(up_ports)) + interface_facts_of_asic = sonichost.interface_facts( + up_ports=up_ports, namespace='asic{}'.format(asic_id) + )['ansible_facts'] - interface_facts_on_hosts[hostname] = interface_facts + interface_facts[asic_id] = interface_facts_of_asic + if hostname not in interface_facts_on_hosts: + interface_facts_on_hosts[hostname] = {} - errlog = 'ansible_interface_link_down_ports on {}: {}'.format( - hostname, interface_facts['ansible_interface_link_down_ports']) + interface_facts_on_hosts[hostname][asic_id] = interface_facts - logger.info(errlog) + errlog = 'ansible_interface_link_down_ports on asic{} of {}: {}'.format( + asic_id, hostname, interface_facts[asic_id]['ansible_interface_link_down_ports']) - # Check if there are any link down ports in the interface facts - if len(interface_facts['ansible_interface_link_down_ports']) > 0: - # Set failed to True if any BGP neighbors are not established - failed = True - # Add errlog to check result errmsg - self.check_result.errmsg.append(errlog) + logger.info(errlog) + + # Check if there are any link down ports in the interface facts + if len(interface_facts[asic_id]['ansible_interface_link_down_ports']) > 0: + # Set failed to True if any BGP neighbors are not established + failed = True + # Add errlog to check result errmsg + self.check_result.errmsg.append(errlog) + + else: + cfg_facts = sonichost.config_facts(host=hostname, source='running')['ansible_facts'] + up_ports = [p for p, v in list(cfg_facts['PORT'].items()) if v.get('admin_status', None) == 'up'] + logger.info('up_ports: {}'.format(up_ports)) + interface_facts = sonichost.interface_facts(up_ports=up_ports)['ansible_facts'] + interface_facts_on_hosts[hostname] = interface_facts + errlog = 'ansible_interface_link_down_ports on {}: {}'.format( + hostname, interface_facts['ansible_interface_link_down_ports']) + + logger.info(errlog) + + # Check if there are any link down ports in the interface facts + if len(interface_facts['ansible_interface_link_down_ports']) > 0: + # Set failed to True if any BGP neighbors are not established + failed = True + # Add errlog to check result errmsg + self.check_result.errmsg.append(errlog) # Set the check result self.check_result.data["interface_facts_on_hosts"] = interface_facts_on_hosts @@ -405,6 +465,10 @@ def check_critical_containers_running(self, critical_containers: list = None): logger.info("======================= check_critical_containers_running starts =======================") for sonichost in self.sonichosts: + host_asics_list = [] + if self.is_multi_asic: + host_asics_list = self.duts_basic_facts[sonichost.hostname][ + "ansible_facts"]["dut_basic_facts"]["asic_index_list"] hostname = sonichost.hostname logger.info( @@ -415,7 +479,21 @@ def check_critical_containers_running(self, critical_containers: list = None): running_containers = sonichost.shell(r"docker ps -f 'status=running' --format \{\{.Names\}\}")[ 'stdout_lines'] - for critical_container in critical_containers: + containers_to_check = critical_containers + if self.is_multi_asic: + if (self.is_chassis and + self.duts_basic_facts[sonichost.hostname]["ansible_facts"]["dut_basic_facts"]["is_supervisor"]): + containers_to_check = [ + "{}{}".format(container, asic) + for asic in host_asics_list for container in critical_containers if container != "bgp" + ] + else: + containers_to_check = [ + "{}{}".format(container, asic) + for asic in host_asics_list for container in critical_containers + ] + + for critical_container in containers_to_check: # If the critical container is not running, add an error log if critical_container not in running_containers: diff --git a/.github/workflows/pr_cherrypick_prestep.yml b/.github/workflows/pr_cherrypick_prestep.yml index 2f5be6035c4..44b44d2969b 100644 --- a/.github/workflows/pr_cherrypick_prestep.yml +++ b/.github/workflows/pr_cherrypick_prestep.yml @@ -107,24 +107,22 @@ jobs: else # Create PR to release branch git push mssonicbld HEAD:cherry/$branch/${pr_id} -f - result=$(gh pr create -R ${repository} -H mssonicbld:cherry/$branch/${pr_id} -B $branch -t "[action] [PR:$pr_id] $title" -b "$body" 2>&1) - echo $result | grep "already exists" && { echo $result; return 0; } - echo $result | grep github.com || { echo $result; return 1; } - new_pr_rul=$(echo $result | grep github.com) - echo new_pr_rul: $new_pr_rul + result=$(gh pr create -R ${repository} -H mssonicbld:cherry/$branch/${pr_id} -B $branch -t "[action] [PR:$pr_id] $title" -b "$body" 2>&1 || true) + new_pr_url=$(echo $result | grep -Eo https://github.com/sonic-net/sonic-mgmt/pull/[0-9]*) + echo new_pr_url: $new_pr_url # Add label to old PR gh pr edit $pr_url --add-label "Created PR to $branch branch" echo Add label Created PR to $branch branch # Add comment to old PR - gh pr comment $pr_url --body "Cherry-pick PR to $branch: ${new_pr_rul}" + gh pr comment $pr_url --body "Cherry-pick PR to $branch: ${new_pr_url}" echo Add comment to old PR # Add label to new PR - gh pr edit $new_pr_rul --add-label "automerge" + gh pr edit $new_pr_url --add-label "automerge" echo Add label automerge to new PR # Add comment to new PR - gh pr comment $new_pr_rul --body "Original PR: ${pr_url}" + gh pr comment $new_pr_url --body "Original PR: ${pr_url}" echo Add comment to new PR fi } diff --git a/.gitignore b/.gitignore index 128f40544ba..0af5dc589b0 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ ansible/*_tmp .idea/ .python-version + +sonic-dump/ diff --git a/ansible/config_sonic_basedon_testbed.yml b/ansible/config_sonic_basedon_testbed.yml index dd7636751b3..44ab5a3e1a0 100644 --- a/ansible/config_sonic_basedon_testbed.yml +++ b/ansible/config_sonic_basedon_testbed.yml @@ -205,7 +205,7 @@ - name: gather hwsku that supports ComputeAI deployment set_fact: - hwsku_list_compute_ai: "['Cisco-8111-O64', 'Cisco-8111-O32', 'Cisco-8122-O64', 'Cisco-8122-O128']" + hwsku_list_compute_ai: "['Cisco-8111-O64', 'Cisco-8111-O32', 'Cisco-8122-O64', 'Cisco-8122-O64S2', 'Cisco-8122-O128']" - name: enable ComputeAI deployment set_fact: @@ -577,6 +577,12 @@ become: true when: topo == "mx" + - name: Copy smartswitch config + copy: src=golden_config_db/smartswitch_t1-28-lag.json + dest=/tmp/smartswitch.json + become: true + when: topo == "t1-28-lag" + - name: Generate golden_config_db.json generate_golden_config_db: topo_name: "{{ topo }}" diff --git a/ansible/devutil/device_inventory.py b/ansible/devutil/device_inventory.py index c890e86830f..78d26f34fce 100644 --- a/ansible/devutil/device_inventory.py +++ b/ansible/devutil/device_inventory.py @@ -1,3 +1,4 @@ +import copy import os import csv import glob @@ -22,7 +23,7 @@ def __init__( self.device_type = device_type self.protocol = protocol self.os = os - self.console_device = None + self.physical_hostname = None self.console_port = 0 @staticmethod @@ -50,6 +51,107 @@ def is_ssh_supported(self) -> bool: return True +class DeviceLinkInfo: + """Device link information.""" + + def __init__( + self, + start_device: str, + start_port: str, + end_device: str, + end_port: str, + bandwidth: int, + vlan_ranges: List[range], + vlan_mode: str, + auto_neg: str + ): + self.start_device = start_device + self.start_port = start_port + self.end_device = end_device + self.end_port = end_port + self.bandwidth = bandwidth + self.vlan_ranges = vlan_ranges + self.vlan_mode = vlan_mode + self.auto_neg = auto_neg + + @staticmethod + def from_csv_row(row: List[str]) -> "DeviceLinkInfo": + vlan_list = row[5] if row[5] else "" + vlan_ranges_str = vlan_list.split(",") if vlan_list != "" else [] + vlan_ranges = [] + for vlan_range_str in vlan_ranges_str: + vlan_range = vlan_range_str.split("-") + if len(vlan_range) == 1: + vlan_ranges.append(range(int(vlan_range[0]), int(vlan_range[0]) + 1)) + elif len(vlan_range) == 2: + vlan_ranges.append(range(int(vlan_range[0]), int(vlan_range[1]) + 1)) + else: + raise ValueError(f"Invalid vlan range: {vlan_range_str}") + + return DeviceLinkInfo( + start_device=row[0], + start_port=row[1], + end_device=row[2], + end_port=row[3], + bandwidth=int(row[4]), + vlan_ranges=vlan_ranges, + vlan_mode=row[6], + auto_neg=row[7] if len(row) > 7 else "" + ) + + def create_reverse_link(self) -> "DeviceLinkInfo": + return DeviceLinkInfo( + start_device=self.end_device, + start_port=self.end_port, + end_device=self.start_device, + end_port=self.start_port, + bandwidth=self.bandwidth, + vlan_ranges=self.vlan_ranges, + vlan_mode=self.vlan_mode, + auto_neg=self.auto_neg + ) + + +class DeviceLinkMap: + """Device link map.""" + + @staticmethod + def from_csv_file(file_path: str) -> "DeviceLinkMap": + links = DeviceLinkMap() + with open(file_path, newline="") as file: + reader = csv.reader(file) + + # Skip the header line + next(reader) + + for row in reader: + if row: + device_link = DeviceLinkInfo.from_csv_row(row) + links.add_link(device_link) + + return links + + def __init__(self): + self.links: Dict[str, Dict[str, DeviceLinkInfo]] = {} + + def add_link(self, link: DeviceLinkInfo): + if link.start_device not in self.links: + self.links[link.start_device] = {} + self.links[link.start_device][link.start_port] = link + + reverse_link = link.create_reverse_link() + if reverse_link.start_device not in self.links: + self.links[reverse_link.start_device] = {} + self.links[reverse_link.start_device][reverse_link.start_port] = reverse_link + + def get_links(self, device: str) -> Optional[Dict[str, DeviceLinkInfo]]: + return self.links.get(device) + + def get_link(self, device: str, port: str) -> Optional[DeviceLinkInfo]: + links = self.get_links(device) + return links.get(port) if links else None + + class DeviceInventory(object): """Device inventory from csv files.""" @@ -59,15 +161,22 @@ def __init__( self.inv_name = inv_name self.device_file_name = device_file_name self.devices = devices + self.links = DeviceLinkMap() @staticmethod def from_device_files(device_file_pattern: str) -> "List[DeviceInventory]": inv: List[DeviceInventory] = [] for file_path in glob.glob(device_file_pattern): device_inventory = DeviceInventory.from_device_file(file_path) + console_links_file_path = file_path.replace("_devices", "_console_links") if os.path.exists(console_links_file_path): device_inventory.load_console_links_info(console_links_file_path) + + device_links_file_path = file_path.replace("_devices", "_links") + if os.path.exists(device_links_file_path): + device_inventory.load_device_link_map(device_links_file_path) + inv.append(device_inventory) return inv @@ -116,8 +225,17 @@ def load_console_links_info(self, file_path: str): if not device_info: print(f"Unknown device hostname {device_hostname}, skipping") continue - device_info.console_device = console_device_info - device_info.console_port = console_port + + device_console_device = copy.deepcopy(console_device_info) + device_console_device.hostname = f"{device_hostname}-console" + device_console_device.device_type = "Console" # Make it different from ConsoleServer + device_console_device.physical_hostname = console_hostname + device_console_device.console_port = console_port + self.devices[device_console_device.hostname] = device_console_device + + def load_device_link_map(self, file_path: str): + print(f"Loading device links inventory: {file_path}") + self.links = DeviceLinkMap.from_csv_file(file_path) def get_device(self, hostname: str) -> Optional[DeviceInfo]: return self.devices.get(hostname) diff --git a/ansible/devutil/devices/sonic.py b/ansible/devutil/devices/sonic.py index e7f63e4b085..9cdd53f7eed 100644 --- a/ansible/devutil/devices/sonic.py +++ b/ansible/devutil/devices/sonic.py @@ -41,25 +41,10 @@ def upgrade_by_sonic(sonichosts, localhost, image_url, disk_used_percent): # Chassis DUT need to firstly upgrade and reboot supervisor cards. # Until supervisor cards back online, then upgrade and reboot line cards. rp_hostnames = get_chassis_hostnames(sonichosts, ChassisCardType.SUPERVISOR_CARD) - lc_hostnames = get_chassis_hostnames(sonichosts, ChassisCardType.LINE_CARD) sonichosts.shell("reboot", target_hosts=rp_hostnames, module_attrs={"become": True, "async": 300, "poll": 0}) logger.info("Sleep 900s to wait for supervisor card to be ready...") time.sleep(900) - for i in range(len(sonichosts.ips)): - localhost.wait_for( - host=sonichosts.ips[i], - port=22, - state="started", - search_regex="OpenSSH", - delay=0, - timeout=600, - module_attrs={"changed_when": False} - ) - sonichosts.shell("reboot", target_hosts=lc_hostnames, - module_attrs={"become": True, "async": 300, "poll": 0}) - logger.info("Sleep 300s to wait for line cards to be ready...") - time.sleep(300) else: sonichosts.shell("reboot", module_attrs={"become": True, "async": 300, "poll": 0}) diff --git a/ansible/devutil/ssh_session_repo.py b/ansible/devutil/ssh_session_repo.py index 8324c660c3c..3daf5382b54 100644 --- a/ansible/devutil/ssh_session_repo.py +++ b/ansible/devutil/ssh_session_repo.py @@ -5,15 +5,28 @@ """ import os +from typing import Dict, List, Optional import sshconf from Crypto.Hash import SHA256 from Crypto.Cipher import AES +from devutil.device_inventory import DeviceInfo +import jinja2 + + +class DeviceSSHInfo(object): + """SSH info for devices.""" + + def __init__(self, ip: Optional[str], ipv6: Optional[str], user: Optional[str], password: Optional[str]): + self.ip = ip + self.ipv6 = ipv6 + self.user = user + self.password = password class SshSessionRepoGenerator(object): """Base class for ssh session repo generator.""" - def __init__(self, target, template_file): + def __init__(self, target: str, template_file: str): """Store all parameters as attributes. Args: @@ -23,7 +36,7 @@ def __init__(self, target, template_file): self.target = target self.template = self._load_template(template_file) - def _load_template(self, template_file): + def _load_template(self, template_file: str): """Load SSH session template file. Args: @@ -34,17 +47,11 @@ def _load_template(self, template_file): """ raise NotImplementedError - def generate(self, session_path, ssh_ip, ssh_ipv6, ssh_user, ssh_pass, - console_ssh_ip, console_ssh_port, console_ssh_user, console_ssh_pass): + def generate(self, repo_type: str, inv_name: str, testbed_name: str, + device: DeviceInfo, device_name: str, ssh_info: DeviceSSHInfo): """Generate SSH session for a node. This is a virtual method that should be implemented by child class. - - Args: - session_path(str): SSH session path. - ssh_ip (str): SSH IP address. - ssh_user (str): SSH username. - ssh_pass (str): SSH password. """ raise NotImplementedError @@ -53,7 +60,31 @@ def finish(self): This is a virtual method that should be implemented by child class. """ - raise NotImplementedError + pass + + def _get_device_type_short_name(self, device: DeviceInfo) -> str: + """Get the short name of the device type. + + Args: + device_type (str): Device type. + + Returns: + str: Short name of the device type. + """ + device_type = "dut" + + if device.device_type == "PTF": + device_type = "ptf" + elif "Root" in device.device_type: + device_type = "root" + elif "Fanout" in device.device_type: + device_type = "fan" + elif "Console" in device.device_type: + device_type = "console" + elif "Server" in device.device_type: + device_type = "server" + + return device_type class SecureCRTSshSessionRepoGenerator(SshSessionRepoGenerator): @@ -103,22 +134,23 @@ def _load_template(self, template_file): return template - def generate(self, session_path, ssh_ip, ssh_ipv6, ssh_user, ssh_pass, - console_ssh_ip, console_ssh_port, console_ssh_user, console_ssh_pass): + def generate(self, repo_type: str, inv_name: str, testbed_name: str, + device: DeviceInfo, ssh_info: DeviceSSHInfo): """Generate SSH session for a testbed node.""" + device_name = f"{self._get_device_type_short_name(device)}-{device.hostname}" + session_file_matrix = [ - (session_path, ssh_ip, ssh_user, ssh_pass), - (session_path + "-v6", ssh_ipv6, ssh_user, ssh_pass), - (session_path + "-console", console_ssh_ip, f"{console_ssh_user}:{console_ssh_port}", console_ssh_pass), + (device_name, ssh_info.ip, ssh_info), + (device_name + "-v6", ssh_info.ipv6, ssh_info), ] - for (session_name, ip, user, password) in session_file_matrix: - if not ip or not user: + for (device_name, ip, ssh_info) in session_file_matrix: + if not ip or not ssh_info.user: continue # In SecureCRT, every SSH session is stored in a ini file separately, # hence we add .ini extension to the session path in order to generate individual SSH session file. - ssh_session_file_path = os.path.join(self.target, session_name + ".ini") + ssh_session_file_path = os.path.join(self.target, repo_type, inv_name, testbed_name, device_name + ".ini") # Recursively create SSH session file directory ssh_session_folder = os.path.dirname(ssh_session_file_path) @@ -126,7 +158,7 @@ def generate(self, session_path, ssh_ip, ssh_ipv6, ssh_user, ssh_pass, # Generate SSH session file ssh_session_file_content = self._generate_ssh_session_file_content( - session_name, ip, user, password + device_name, ip, ssh_info ) with open(ssh_session_file_path, "w") as ssh_session_file: ssh_session_file.write(ssh_session_file_content) @@ -135,10 +167,10 @@ def generate(self, session_path, ssh_ip, ssh_ipv6, ssh_user, ssh_pass, ssh_session_folder_data = SecureCRTRepoFolderData.from_folder( ssh_session_folder, create_if_not_exist=True ) - ssh_session_folder_data.add_session(session_name) + ssh_session_folder_data.add_session(device_name) ssh_session_folder_data.save() - def _create_ssh_session_folder(self, ssh_session_file_dir): + def _create_ssh_session_folder(self, ssh_session_file_dir: str): """Recursively create SSH session file directory level by level if it does not exist, and init the folder with a folder data ini file. @@ -164,7 +196,7 @@ def _create_ssh_session_folder(self, ssh_session_file_dir): parent_folder_data.save() def _generate_ssh_session_file_content( - self, session_name, ssh_ip, ssh_user, ssh_pass + self, session_name: str, ssh_ip: str, ssh_info: DeviceSSHInfo ): """Generate SSH session file content: @@ -177,17 +209,13 @@ def _generate_ssh_session_file_content( Returns: str: SSH session file content. """ - encrypted_pass = "02:" + self.crypto.encrypt(ssh_pass) + encrypted_pass = "02:" + self.crypto.encrypt(ssh_info.password) return ( - self.template.replace("%USERNAME%", ssh_user) + self.template.replace("%USERNAME%", ssh_info.user) .replace("%HOST%", ssh_ip) .replace("%PASSWORD%", encrypted_pass) ) - def finish(self): - """Finish SSH session generation.""" - pass - class SecureCRTRepoFolderData(object): """This class represents the __FolderData__.ini file in SecureCRT SSH session repository.""" @@ -247,7 +275,7 @@ def _parse_ini_file(self): elif line.startswith('S:"Is Expanded"='): self.is_expanded = bool(int(line.split("=")[1].strip())) - def add_folder(self, folder): + def add_folder(self, folder: str): """Add a folder to the folder list. Args: @@ -255,7 +283,7 @@ def add_folder(self, folder): """ self.folder_list.add(folder) - def add_session(self, session): + def add_session(self, session: str): """Add a session to the session list. Args: @@ -263,7 +291,7 @@ def add_session(self, session): """ self.session_list.add(session) - def set_is_expanded(self, is_expanded): + def set_is_expanded(self, is_expanded: bool): """Set is_expanded. Args: @@ -337,7 +365,7 @@ class SshConfigSshSessionRepoGenerator(SshSessionRepoGenerator): It derives from SshSessionRepoGenerator and implements the generate method. """ - def __init__(self, target, ssh_config_params, console_ssh_config_params): + def __init__(self, target: str, ssh_config_params: Dict[str, str], console_ssh_config_params: Dict[str, str]): super().__init__(target, "") # Load SSH config file from target file path @@ -348,8 +376,8 @@ def __init__(self, target, ssh_config_params, console_ssh_config_params): self.ssh_config = sshconf.read_ssh_config(self.target) # Add SSH config parameters - self.ssh_config_params = ssh_config_params - self.console_ssh_config_params = console_ssh_config_params + self.ssh_config_params = ssh_config_params if ssh_config_params is not None else {} + self.console_ssh_config_params = console_ssh_config_params if console_ssh_config_params is not None else {} def _load_template(self, template_file): """Load SSH session template file. @@ -358,43 +386,113 @@ def _load_template(self, template_file): """ pass - def generate(self, session_path, ssh_ip, ssh_ipv6, ssh_user, ssh_pass, - console_ssh_ip, console_ssh_port, console_ssh_user, console_ssh_pass): + def generate(self, repo_type: str, inv_name: str, testbed_name: str, + device: DeviceInfo, ssh_info: DeviceSSHInfo): """Generate SSH session for a testbed node.""" - ssh_session_name = os.path.basename(session_path) + ssh_session_name = device.hostname current_hosts = self.ssh_config.hosts() ssh_config = {} - if ssh_user: - ssh_config["User"] = ssh_user + if ssh_info.user: + ssh_config["User"] = ssh_info.user # Add new host config - if ssh_ip: + if ssh_info.ip: session_name = ssh_session_name - ssh_config["Hostname"] = ssh_ip + ssh_config["Hostname"] = ssh_info.ip if session_name in current_hosts: self.ssh_config.set(session_name, **ssh_config, **self.ssh_config_params) else: self.ssh_config.add(session_name, **ssh_config, **self.ssh_config_params) - if ssh_ipv6: + + if ssh_info.ipv6: session_name = ssh_session_name + "-v6" - ssh_config["Hostname"] = ssh_ipv6 + ssh_config["Hostname"] = ssh_info.ipv6 if session_name in current_hosts: self.ssh_config.set(session_name, **ssh_config, **self.ssh_config_params) else: self.ssh_config.add(session_name, **ssh_config, **self.ssh_config_params) - if console_ssh_ip: - session_name = ssh_session_name + "-console" - ssh_config["User"] = f"{console_ssh_user}:{console_ssh_port}" - ssh_config["Hostname"] = console_ssh_ip - if session_name in current_hosts: - self.ssh_config.set(session_name, **ssh_config, **self.ssh_config_params, - **self.console_ssh_config_params) - else: - self.ssh_config.add(session_name, **ssh_config, **self.ssh_config_params, - **self.console_ssh_config_params) def finish(self): """Finish SSH session generation.""" # Write SSH config to target file path self.ssh_config.write(self.target) + + +class SshConfigTmuxinatorSessionRepoGenerator(SshSessionRepoGenerator): + """Tmuxinator session repo generator for tmuxinator configs. + + It derives from SshSessionRepoGenerator and implements the generate method. + """ + + def __init__(self, target: str, ssh_config_params: Dict[str, str], console_ssh_config_params: Dict[str, str]): + super().__init__(target, "") + + self.testbeds = {} + + # Create target folder + self.target = os.path.expanduser(self.target) + os.makedirs(self.target, exist_ok=True) + + # Add SSH config parameters + self.ssh_config_params = "".join([f" -o {k}={v}" for k, v in ssh_config_params.items()] + if ssh_config_params is not None else []) + + self.console_ssh_config_params = "".join([f" -o {k}={v}" for k, v in console_ssh_config_params.items()] + if console_ssh_config_params is not None else []) + + def _load_template(self, template_file): + """Load SSH session template file. + + This function will pass since tmuxinator config does not need a template file. + """ + + template = """ +name: {{ testbed_name }} +root: . +enable_pane_titles: true + +windows: +{%- for device_type, panes in config.items() %} + - {{ device_type }}: + layout: main-vertical + panes: + {%- for title, command in panes.items() %} + - {{ title }}: + - {{ command }} + {%- endfor %} +{%- endfor %} +""" + return jinja2.Template(template) + + def generate(self, repo_type: str, inv_name: str, testbed_name: str, + device: DeviceInfo, ssh_info: DeviceSSHInfo): + config = self.testbeds.setdefault(testbed_name, {}) + self._generate_tmuxinator_config_for_device(config, device, ssh_info.ip, ssh_info) + + def _generate_tmuxinator_config_for_device(self, config: Dict[str, List[str]], device: DeviceInfo, + ssh_ip: str, ssh_info: DeviceSSHInfo): + device_type = self._get_device_type_short_name(device) + ssh_pass = f"sshpass -p {ssh_info.password} " if ssh_info.password else "" + ssh_common_params = "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + + if device.device_type == "Console": + command = f"{ssh_pass}ssh {ssh_common_params}{self.console_ssh_config_params} -l {ssh_info.user} {ssh_ip}" + else: + command = f"{ssh_pass}ssh {ssh_common_params}{self.ssh_config_params} {ssh_info.user}@{ssh_ip}" + + panes = config.setdefault(device_type, {}) + panes[device.hostname] = command + + def finish(self): + for testbed_name, config in self.testbeds.items(): + self._generate_tmuxinator_session_file(testbed_name, config) + + def _generate_tmuxinator_session_file(self, testbed_name: str, config: Dict[str, List[str]]): + tmux_config_file_path = os.path.join(self.target, testbed_name + ".yml") + + config_file_content = self.template.render(testbed_name=testbed_name, + config=config) + + with open(tmux_config_file_path, "w") as f: + f.write(config_file_content) diff --git a/ansible/devutil/testbed.py b/ansible/devutil/testbed.py index 58892335494..209431d77d2 100644 --- a/ansible/devutil/testbed.py +++ b/ansible/devutil/testbed.py @@ -2,6 +2,7 @@ Utility classes for loading and managing testbed data. """ +import itertools import os import re import yaml @@ -71,6 +72,11 @@ def __init__(self, raw_dict: Any, device_inventories: List[DeviceInventory]): protocol="ssh", ) + self.console_nodes = {} + self.fanout_nodes = {} + self.root_fanout_nodes = {} + self.server_nodes = {} + # Loop through each DUT in the testbed and find the device info self.dut_nodes = {} for dut in raw_dict["dut"]: @@ -78,6 +84,7 @@ def __init__(self, raw_dict: Any, device_inventories: List[DeviceInventory]): device = inv.get_device(dut) if device is not None: self.dut_nodes[dut] = device + self.link_dut_related_devices(inv, device) break else: print(f"Error: Failed to find device info for DUT {dut}") @@ -86,3 +93,71 @@ def __init__(self, raw_dict: Any, device_inventories: List[DeviceInventory]): # so we need to use "unknown" as inv_name instead. if not hasattr(self, "inv_name"): self.inv_name = "unknown" + + def link_dut_related_devices(self, inv: DeviceInventory, dut: DeviceInfo) -> None: + """Link all devices that is relavent to the given DUT.""" + links = inv.links.get_links(dut.hostname) + if links is None: + return None + + # Get all DUT VLANs + dut_vlan_list = [] + for link in links.values(): + dut_vlan_list.extend(link.vlan_ranges) + dut_vlans = list(itertools.chain(*dut_vlan_list)) + + # Use the VLANs to find all connected nodes + linked_devices = [] + visited_devices = {dut.hostname: True} + pending_devices = [dut] + while len(pending_devices) > 0: + device_name = pending_devices.pop(0).hostname + + # Enumerate all links of the device and find the ones with VLANs used by the DUT + device_links = inv.links.get_links(device_name) + for link in device_links.values(): + link_has_vlan = False + for dut_vlan in dut_vlans: + for link_vlan_range in link.vlan_ranges: + if dut_vlan in link_vlan_range: + link_has_vlan = True + break + if link_has_vlan: + break + + # The link has VLANs used by the DUTs + if link_has_vlan: + if link.end_device in visited_devices: + continue + visited_devices[link.end_device] = True + + peer_device = inv.get_device(link.end_device) + if peer_device is None: + raise ValueError(f"Link to device is defined by failed to find device info: {link.end_device}") + + # Count the peer device as linked and add it to the pending list + linked_devices.append(peer_device) + pending_devices.append(peer_device) + + # print(f"Linked devices for DUT {dut.hostname}:") + for linked_device in linked_devices: + if "Root" in linked_device.device_type: + self.root_fanout_nodes[linked_device.hostname] = linked_device + # print(f" RootFanout: {linked_device.hostname}") + elif "Fanout" in linked_device.device_type: + self.fanout_nodes[linked_device.hostname] = linked_device + # print(f" Fanout: {linked_device.hostname}") + elif linked_device.device_type == "Server": + self.server_nodes[linked_device.hostname] = linked_device + # print(f" Server: {linked_device.hostname}") + elif "Dev" in linked_device.device_type: + print(f"ERROR: Conflicting VLAN ID is found between 2 DUTs: {dut.hostname} and " + f"{linked_device.hostname}! Please fix the testbed config.") + else: + raise ValueError(f"Unknown device type: {linked_device.device_type} " + f"(DUT: {dut.hostname}, Linked: {linked_device.hostname})") + + dut_console_node_name = f"{dut.hostname}-console" + dut_console_node = inv.get_device(dut_console_node_name) + if dut_console_node is not None: + self.console_nodes[dut_console_node.hostname] = dut_console_node diff --git a/ansible/generate_topo.py b/ansible/generate_topo.py index b78b15bf724..b340e028e32 100755 --- a/ansible/generate_topo.py +++ b/ansible/generate_topo.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 -from typing import Any, Dict, List -import ipaddress +import copy +from typing import Any, Dict, List, Tuple +from ipaddress import IPv4Network, IPv6Network import click import jinja2 @@ -22,24 +23,31 @@ } +vlan_group_cfgs = [ + {"name": "one_vlan_a", "vlan_count": 1, "v4_prefix": "192.168.0.0/21", "v6_prefix": "fc02:1000::0/64"}, + {"name": "two_vlan_a", "vlan_count": 2, "v4_prefix": "192.168.0.0/22", "v6_prefix": "fc02:100::0/64"}, + {"name": "four_vlan_a", "vlan_count": 4, "v4_prefix": "192.168.0.0/22", "v6_prefix": "fc02:100::0/64"}, +] + + # Utility functions to calculate IP addresses def calc_ipv4_pair(subnet_str, port_id): - subnet = ipaddress.IPv4Network(subnet_str) + subnet = IPv4Network(subnet_str) return (str(subnet.network_address + 2*port_id), str(subnet.network_address + 2*port_id + 1)) def calc_ipv6_pair(subnet_str, port_id): - subnet = ipaddress.IPv6Network(subnet_str) + subnet = IPv6Network(subnet_str) return (str(subnet.network_address + 4*port_id+1), str(subnet.network_address + 4*port_id + 2)) def calc_ipv4(subnet_str, port_id): - subnet = ipaddress.IPv4Network(subnet_str) + subnet = IPv4Network(subnet_str) return str(subnet.network_address + port_id) def calc_ipv6(subnet_str, port_id): - subnet = ipaddress.IPv6Network(subnet_str) + subnet = IPv6Network(subnet_str) return str(subnet.network_address + port_id) @@ -72,7 +80,7 @@ def __init__(self, self.dut_intf_ipv4, self.pc_intf_ipv4 = calc_ipv4_pair("10.0.0.0", self.ip_offset) self.dut_intf_ipv6, self.pc_intf_ipv6 = calc_ipv6_pair("FC00::", self.ip_offset) self.loopback_ipv4 = calc_ipv4("100.1.0.0", self.ip_offset+1) - self.loopback_ipv6 = calc_ipv6("2064:100::", self.ip_offset+1) + self.loopback_ipv6 = calc_ipv6("2064:100::", (self.ip_offset+1) * 2**64) # Backplane IPs will go with the VM ID self.bp_ipv4 = calc_ipv4("10.10.246.1", self.vm_offset+1) @@ -85,7 +93,50 @@ def __init__(self, port_id: int): self.port_id = port_id -def generate_topo(role: str, port_count: int, uplink_ports: List[int], peer_ports: List[int]): +class Vlan: + """ Class to represent a VLAN in the topology """ + def __init__(self, + vlan_id: int, + hostifs: List[HostInterface], + v4_prefix: IPv4Network, + v6_prefix: IPv6Network): + + self.id = vlan_id + self.intfs = hostifs + self.port_ids = [hostif.port_id for hostif in hostifs] + self.v4_prefix = copy.deepcopy(v4_prefix) + self.v4_prefix.network_address += 1 + self.v6_prefix = copy.deepcopy(v6_prefix) + self.v6_prefix.network_address += 1 + + +class VlanGroup: + """ Class to represent a group of VLANs in the topology """ + def __init__(self, name: str, vlan_count: int, hostifs: List[HostInterface], v4_prefix: str, v6_prefix: str): + self.name = name + self.vlans = [] + + # Split host if into the number of VLANs + hostif_count_per_vlan = len(hostifs) // vlan_count + hostif_groups = [hostifs[i*hostif_count_per_vlan:(i+1)*hostif_count_per_vlan] for i in range(vlan_count)] + + v4_prefix = IPv4Network(v4_prefix) + v6_prefix = IPv6Network(v6_prefix) + for vlan_index in range(len(hostif_groups)): + vlan = Vlan(1000 + vlan_index * 100, hostif_groups[vlan_index], v4_prefix, v6_prefix) + self.vlans.append(vlan) + + # Move to next subnet based on the prefix length + v4_prefix.network_address += 2**(32 - v4_prefix.prefixlen) + v6_prefix.network_address += 2**96 + + +def generate_topo(role: str, + port_count: int, + uplink_ports: List[int], + peer_ports: List[int] + ) -> Tuple[List[VM], List[HostInterface]]: + dut_role_cfg = roles_cfg[role] vm_list = [] @@ -131,10 +182,25 @@ def generate_topo(role: str, port_count: int, uplink_ports: List[int], peer_port return vm_list, hostif_list -def generate_topo_file_content(role: str, - template_file: str, - vm_list: List[VM], - hostif_list: List[HostInterface]): +def generate_vlan_groups(hostif_list: List[HostInterface]) -> List[VlanGroup]: + if len(hostif_list) == 0: + return [] + + vlan_groups = [] + for vlan_group_cfg in vlan_group_cfgs: + vlan_group = VlanGroup(vlan_group_cfg["name"], vlan_group_cfg["vlan_count"], hostif_list, + vlan_group_cfg["v4_prefix"], vlan_group_cfg["v6_prefix"]) + vlan_groups.append(vlan_group) + + return vlan_groups + + +def generate_topo_file(role: str, + template_file: str, + vm_list: List[VM], + hostif_list: List[HostInterface], + vlan_group_list: List[VlanGroup] + ) -> str: with open(template_file) as f: template = jinja2.Template(f.read()) @@ -142,17 +208,18 @@ def generate_topo_file_content(role: str, output = template.render(role=role, dut=roles_cfg[role], vm_list=vm_list, - hostif_list=hostif_list) + hostif_list=hostif_list, + vlan_group_list=vlan_group_list) return output -def output_topo_file(role: str, - keyword: str, - downlink_port_count: int, - uplink_port_count: int, - peer_port_count: int, - file_content: str): +def write_topo_file(role: str, + keyword: str, + downlink_port_count: int, + uplink_port_count: int, + peer_port_count: int, + file_content: str): downlink_keyword = f"d{downlink_port_count}" if downlink_port_count > 0 else "" uplink_keyword = f"u{uplink_port_count}" if uplink_port_count > 0 else "" peer_keyword = f"s{peer_port_count}" if peer_port_count > 0 else "" @@ -166,7 +233,7 @@ def output_topo_file(role: str, @click.command() -@click.option("--role", "-r", required=True, type=click.Choice(['t1']), help="Role of the device") +@click.option("--role", "-r", required=True, type=click.Choice(['t0', 't1']), help="Role of the device") @click.option("--keyword", "-k", required=True, type=str, help="Keyword for the topology file") @click.option("--template", "-t", required=True, type=str, help="Path to the Jinja template file") @click.option("--port-count", "-c", required=True, type=int, help="Number of ports on the device") @@ -180,14 +247,16 @@ def main(role: str, keyword: str, template: str, port_count: int, uplinks: str, Examples (in the ansible directory): - ./generate_topo.py -r t1 -k isolated -t t1-isolated -c 128 - ./generate_topo.py -r t1 -k isolated -t t1-isolated -c 232 -u 48,49,58,59,164,165,174,175 + - ./generate_topo.py -r t0 -k isolated -t t0-isolated -c 130 -p 128,129 -u 25,26,27,28,29,30,31,32 """ uplink_ports = [int(port) for port in uplinks.split(",")] if uplinks != "" else [] peer_ports = [int(port) for port in peers.split(",")] if peers != "" else [] vm_list, hostif_list = generate_topo(role, port_count, uplink_ports, peer_ports) - file_content = generate_topo_file_content(role, f"templates/topo_{template}.j2", vm_list, hostif_list) - output_topo_file(role, keyword, port_count - len(uplink_ports) - len(peer_ports), len(uplink_ports), - len(peer_ports), file_content) + vlan_group_list = generate_vlan_groups(hostif_list) + file_content = generate_topo_file(role, f"templates/topo_{template}.j2", vm_list, hostif_list, vlan_group_list) + write_topo_file(role, keyword, port_count - len(uplink_ports) - len(peer_ports), len(uplink_ports), + len(peer_ports), file_content) if __name__ == "__main__": diff --git a/ansible/golden_config_db/smartswitch_t1-28-lag.json b/ansible/golden_config_db/smartswitch_t1-28-lag.json new file mode 100644 index 00000000000..7117fb396cc --- /dev/null +++ b/ansible/golden_config_db/smartswitch_t1-28-lag.json @@ -0,0 +1,129 @@ +{ + "CHASSIS_MODULE": { + "DPU1": { + "admin_status": "down" + }, + "DPU2": { + "admin_status": "down" + }, + "DPU3": { + "admin_status": "down" + }, + "DPU4": { + "admin_status": "down" + }, + "DPU5": { + "admin_status": "down" + }, + "DPU6": { + "admin_status": "down" + }, + "DPU7": { + "admin_status": "down" + } + }, + "DHCP_SERVER_IPV4": { + "bridge-midplane": { + "gateway": "169.254.200.254", + "lease_time": "31536000", + "mode": "PORT", + "netmask": "255.255.255.0", + "state": "enabled" + } + }, + "DHCP_SERVER_IPV4_PORT": { + "bridge-midplane|dpu0": { + "ips": [ + "169.254.200.0" + ] + }, + "bridge-midplane|dpu1": { + "ips": [ + "169.254.200.1" + ] + }, + "bridge-midplane|dpu2": { + "ips": [ + "169.254.200.2" + ] + }, + "bridge-midplane|dpu3": { + "ips": [ + "169.254.200.3" + ] + }, + "bridge-midplane|dpu4": { + "ips": [ + "169.254.200.4" + ] + }, + "bridge-midplane|dpu5": { + "ips": [ + "169.254.200.5" + ] + }, + "bridge-midplane|dpu6": { + "ips": [ + "169.254.200.6" + ] + }, + "bridge-midplane|dpu7": { + "ips": [ + "169.254.200.7" + ] + } + }, + "DPUS": { + "dpu0": { + "midplane_interface": "dpu0" + }, + "dpu1": { + "midplane_interface": "dpu1" + }, + "dpu2": { + "midplane_interface": "dpu2" + }, + "dpu3": { + "midplane_interface": "dpu3" + }, + "dpu4": { + "midplane_interface": "dpu4" + }, + "dpu5": { + "midplane_interface": "dpu5" + }, + "dpu6": { + "midplane_interface": "dpu6" + }, + "dpu7": { + "midplane_interface": "dpu7" + } + }, + "MID_PLANE_BRIDGE": { + "GLOBAL": { + "bridge": "bridge-midplane", + "ip_prefix": "169.254.200.254/24" + } + }, + "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": "50052" + } + }, + "STATIC_ROUTE": { + "default|10.2.0.1/32": { + "blackhole": "false", + "distance": "0", + "ifname": "", + "nexthop": "18.0.202.1", + "nexthop-vrf": "default" + } + } +} diff --git a/ansible/group_vars/sonic/sku-sensors-data.yml b/ansible/group_vars/sonic/sku-sensors-data.yml index 58c5578476e..1d0572c06ae 100644 --- a/ansible/group_vars/sonic/sku-sensors-data.yml +++ b/ansible/group_vars/sonic/sku-sensors-data.yml @@ -6044,501 +6044,6 @@ sensors_checks: psu_skips: {} sensor_skip_per_version: {} - x86_64-8101_32h_o-r0: - alarms: - voltage: - - 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-59/CPU_U117_P1P2V_VOUT/in3_lcrit_alarm - - tps53679-i2c-21-59/CPU_U117_P1P2V_VOUT/in3_crit_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 - - - 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_VOUT/in3_lcrit_alarm - - tps53679-i2c-25-65/MB_3_3V_R_L1_VOUT/in3_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-21-58/CPU_U17_PVCCIN_VOUT/in3_lcrit_alarm - - tps53679-i2c-21-58/CPU_U17_PVCCIN_VOUT/in3_crit_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-25-60/MB_GB_VDDS_L1_VOUT/in3_lcrit_alarm - - tps53679-i2c-25-60/MB_GB_VDDS_L1_VOUT/in3_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_VOUT/in3_lcrit_alarm - - tps53679-i2c-25-65/MB_3_3V_R_L1_VOUT/in3_crit_alarm - - - tps53679-i2c-25-64/MB_3_3V_L_L1_VOUT/in3_lcrit_alarm - - tps53679-i2c-25-64/MB_3_3V_L_L1_VOUT/in3_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 - - - tps53679-i2c-25-64/MB_3_3V_L_L1_IOUT/curr1_max_alarm - - tps53679-i2c-25-64/MB_3_3V_L_L1_IOUT/curr1_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 - - - - tps53679-i2c-25-64/MB_3_3V_L_L1_VIN/in1_input - - tps53679-i2c-25-64/MB_3_3V_L_L1_VIN/in1_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 - - - - tps53679-i2c-25-64/MB_3_3V_L_L1_IOUT/curr1_input - - tps53679-i2c-25-64/MB_3_3V_L_L1_IOUT/curr1_max - - - tps53679-i2c-25-64/MB_3_3V_L_L1_IOUT/curr1_input - - tps53679-i2c-25-64/MB_3_3V_L_L1_IOUT/curr1_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-wistron_sw_to3200k-r0: alarms: fan: [] diff --git a/ansible/group_vars/sonic/variables b/ansible/group_vars/sonic/variables index 2d2ec3f80d3..c104cf831a5 100644 --- a/ansible/group_vars/sonic/variables +++ b/ansible/group_vars/sonic/variables @@ -15,14 +15,14 @@ broadcom_th_hwskus: ['Force10-S6100', 'Arista-7060CX-32S-C32', 'Arista-7060CX-32 broadcom_th2_hwskus: ['Arista-7260CX3-D108C8', 'Arista-7260CX3-C64', 'Arista-7260CX3-Q64'] broadcom_th3_hwskus: ['DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32'] broadcom_th4_hwskus: ['Arista-7060DX5-32', 'Arista-7060DX5-64S'] -broadcom_th5_hwskus: ['Arista-7060X6-64DE', 'Arista-7060X6-64DE-64x400G', 'Arista-7060X6-64DE-256x200G', 'Arista-7060X6-64PE', 'Arista-7060X6-64PE-64x400G', 'Arista-7060X6-64PE-128x400G', 'Arista-7060X6-64PE-256x200G', 'Arista-7060X6-64PE-C256S2'] +broadcom_th5_hwskus: ['Arista-7060X6-64DE', 'Arista-7060X6-64DE-64x400G', 'Arista-7060X6-64DE-O128S2', 'Arista-7060X6-64DE-256x200G', 'Arista-7060X6-64PE', 'Arista-7060X6-64PE-64x400G', 'Arista-7060X6-64PE-O128S2', 'Arista-7060X6-64PE-256x200G', 'Arista-7060X6-64PE-C256S2', 'Arista-7060X6-64PE-C224O8'] broadcom_j2c+_hwskus: ['Nokia-IXR7250E-36x100G', 'Nokia-IXR7250E-36x400G', 'Arista-7800R3A-36DM2-C36', 'Arista-7800R3A-36DM2-D36', 'Arista-7800R3AK-36DM2-C36', 'Arista-7800R3AK-36DM2-D36'] broadcom_jr2_hwskus: ['Arista-7800R3-48CQ2-C48', 'Arista-7800R3-48CQM2-C48'] mellanox_spc1_hwskus: [ 'ACS-MSN2700', 'ACS-MSN2740', 'ACS-MSN2100', 'ACS-MSN2410', 'ACS-MSN2010', 'Mellanox-SN2700', 'Mellanox-SN2700-A1', 'Mellanox-SN2700-D48C8','Mellanox-SN2700-D40C8S8', 'Mellanox-SN2700-A1-D48C8'] mellanox_spc2_hwskus: [ 'ACS-MSN3700', 'ACS-MSN3700C', 'ACS-MSN3800', 'Mellanox-SN3800-D112C8' , 'ACS-MSN3420'] -mellanox_spc3_hwskus: [ 'ACS-MSN4700', 'Mellanox-SN4700-O28', 'ACS-MSN4600', 'ACS-MSN4600C', 'ACS-MSN4410', 'Mellanox-SN4600C-D112C8', 'Mellanox-SN4600C-C64', 'Mellanox-SN4700-O8C48', 'Mellanox-SN4700-O8V48', 'ACS-SN4280', 'Mellanox-SN4700-V64', 'Mellanox-SN4700-O32'] -mellanox_spc4_hwskus: [ 'ACS-SN5600' , 'Mellanox-SN5600-V256'] +mellanox_spc3_hwskus: [ 'ACS-MSN4700', 'Mellanox-SN4700-O28', 'ACS-MSN4600', 'ACS-MSN4600C', 'ACS-MSN4410', 'Mellanox-SN4600C-D112C8', 'Mellanox-SN4600C-C64', 'Mellanox-SN4700-O8C48', 'Mellanox-SN4700-O8V48', 'ACS-SN4280', 'Mellanox-SN4280-O28', 'Mellanox-SN4700-V64', 'Mellanox-SN4700-O32'] +mellanox_spc4_hwskus: [ 'ACS-SN5600' , 'Mellanox-SN5600-V256', 'Mellanox-SN5600-C256S1', 'Mellanox-SN5600-C224O8'] mellanox_hwskus: "{{ mellanox_spc1_hwskus + mellanox_spc2_hwskus + mellanox_spc3_hwskus + mellanox_spc4_hwskus }}" mellanox_dualtor_hwskus: [ 'Mellanox-SN4600C-C64' ] @@ -33,10 +33,10 @@ barefoot_hwskus: [ "montara", "mavericks", "Arista-7170-64C", "newport", "Arista marvell_hwskus: [ "et6448m" ] innovium_tl7_hwskus: ["Wistron_sw_to3200k_32x100" , "Wistron_sw_to3200k"] -cisco_hwskus: ["Cisco-8102-C64", "Cisco-8111-O32", "Cisco-8111-O64", "Cisco-8122-O64", "Cisco-8800-LC-48H-C48", "cisco-8101-p4-32x100-vs"] +cisco_hwskus: ["Cisco-8102-C64", "Cisco-8111-O32", "Cisco-8111-O64", "Cisco-8122-O64", "Cisco-8122-O64S2", "Cisco-8122-O128", "Cisco-8800-LC-48H-C48", "cisco-8101-p4-32x100-vs"] cisco-8000_gb_hwskus: ["Cisco-8102-C64", "Cisco-88-LC0-36FH-M-O36", "Cisco-8101-O8C48", "Cisco-8101-O32", "Cisco-88-LC0-36FH-O36"] cisco-8000_gr_hwskus: ["Cisco-8111-O32", "Cisco-8111-O64"] -cisco-8000_gr2_hwskus: ["Cisco-8122-O64"] +cisco-8000_gr2_hwskus: ["Cisco-8122-O64", "Cisco-8122-O64S2", "Cisco-8122-O128"] cisco-8000_pac_hwskus: ["Cisco-8800-LC-48H-C48"] ## Note: diff --git a/ansible/library/announce_routes.py b/ansible/library/announce_routes.py index 3128110b7ea..01f9fee2067 100644 --- a/ansible/library/announce_routes.py +++ b/ansible/library/announce_routes.py @@ -502,7 +502,14 @@ def fib_t1_lag(topo, ptf_ip, no_default_route=False, action="announce"): vms = topo['topology']['VMs'] vms_config = topo['configuration'] + dpus = None + if 'DPUs' in topo['topology']: + dpus = topo['topology']['DPUs'] + for k, v in vms_config.items(): + if dpus and k in dpus: + continue + vm_offset = vms[k]['vm_offset'] port = IPV4_BASE_PORT + vm_offset port6 = IPV6_BASE_PORT + vm_offset diff --git a/ansible/library/bgp_route.py b/ansible/library/bgp_route.py index 743f1cd6a48..1b96997fde7 100644 --- a/ansible/library/bgp_route.py +++ b/ansible/library/bgp_route.py @@ -177,7 +177,7 @@ def parse_bgp_route_adv_json(self, cmd_result): for k, rt in res['advertisedRoutes'].items(): entry = dict() entry['nexthop'] = rt['nextHop'] - entry['origin'] = rt['bgpOriginCode'] + entry['origin'] = rt.get('bgpOriginCode', rt['origin']) # Use bgpOriginCode if present, else origin entry['weigh'] = rt['weight'] entry['aspath'] = rt['path'].split() self.facts['bgp_route_neiadv']["{}/{}".format( diff --git a/ansible/library/dut_basic_facts.py b/ansible/library/dut_basic_facts.py index 7b9cfd7bce1..c34a627b621 100644 --- a/ansible/library/dut_basic_facts.py +++ b/ansible/library/dut_basic_facts.py @@ -11,7 +11,7 @@ from module_utils.parse_utils import parse_tabular_output from ansible.module_utils.basic import AnsibleModule -from sonic_py_common import device_info +from sonic_py_common import device_info, multi_asic DOCUMENTATION = ''' --- @@ -47,6 +47,17 @@ def main(): if hasattr(device_info, 'is_supervisor'): results['is_supervisor'] = device_info.is_supervisor() + results['is_chassis'] = False + if hasattr(device_info, 'is_chassis'): + results['is_chassis'] = device_info.is_chassis() + + if results['is_multi_asic']: + results['asic_index_list'] = [] + if results['is_chassis']: + results['asic_index_list'] = multi_asic.get_asic_presence_list() + else: + results['asic_index_list'] = [ns.replace('asic', '') for ns in multi_asic.get_namespace_list()] + # In case a image does not have /etc/sonic/sonic_release, guess release from 'build_version' if 'release' not in results or not results['release'] or results['release'] == 'none': if 'build_version' in results: diff --git a/ansible/library/extract_log.py b/ansible/library/extract_log.py index 124f89cf561..1f5fcc8f17e 100644 --- a/ansible/library/extract_log.py +++ b/ansible/library/extract_log.py @@ -122,6 +122,10 @@ def extract_number(s): def convert_date(fct, s): dt = None re_result = re.findall(r'^\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}\.?\d*', s) + if len(re_result) == 0: + re_result_with_year = re.findall(r'^\d{4}\s{1}\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}\.?\d*', s) + else: + re_result_with_year = list() # Workaround for pytest-ansible loc = locale.getlocale() locale.setlocale(locale.LC_ALL, (None, None)) @@ -138,6 +142,9 @@ def convert_date(fct, s): # 183 is the number of days in half year, just a reasonable choice if (dt - fct).days > 183: dt.replace(year=dt.year - 1) + elif len(re_result_with_year) > 0: + str_date = re_result_with_year[0] + dt = datetime.datetime.strptime(str_date, '%Y %b %d %X.%f') else: re_result = re.findall( r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}', s) diff --git a/ansible/library/generate_golden_config_db.py b/ansible/library/generate_golden_config_db.py index 43411478966..f61499f8954 100644 --- a/ansible/library/generate_golden_config_db.py +++ b/ansible/library/generate_golden_config_db.py @@ -23,8 +23,17 @@ GOLDEN_CONFIG_DB_PATH = "/etc/sonic/golden_config_db.json" TEMP_DHCP_SERVER_CONFIG_PATH = "/tmp/dhcp_server.json" +TEMP_SMARTSWITCH_CONFIG_PATH = "/tmp/smartswitch.json" DUMMY_QUOTA = "dummy_single_quota" +smartswitch_hwsku_config = { + "Cisco-8102-28FH-DPU-O-T1": { + "dpu_num": 8, + "port_key": "Ethernet-BP{}", + "interface_key": "Ethernet-BP{}|18.{}.202.0/31", + } +} + class GenerateGoldenConfigDBModule(object): def __init__(self): @@ -34,6 +43,25 @@ def __init__(self): self.topo_name = self.module.params['topo_name'] self.port_index_map = self.module.params['port_index_map'] + def generate_mgfx_golden_config_db(self): + 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)) + + # Generate config table from init_cfg.ini + 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 ("localhost" in golden_config_db["DEVICE_METADATA"] and + "default_pfcwd_status" in golden_config_db["DEVICE_METADATA"]["localhost"]): + golden_config_db["DEVICE_METADATA"]["localhost"]["default_pfcwd_status"] = "disable" + + if self.topo_name == "mx": + golden_config_db.update(self.generate_mx_golden_config_db()) + return json.dumps(golden_config_db, indent=4) + def generate_mx_golden_config_db(self): """ If FEATURE table in init_cfg.json contains dhcp_server, enable it. @@ -46,7 +74,7 @@ def generate_mx_golden_config_db(self): # Generate FEATURE table from init_cfg.ini ori_config_db = json.loads(out) if "FEATURE" not in ori_config_db or "dhcp_server" not in ori_config_db["FEATURE"]: - return "{}" + return {} ori_config_db["FEATURE"]["dhcp_server"]["state"] = "enabled" gold_config_db = { @@ -70,17 +98,69 @@ def generate_mx_golden_config_db(self): dhcp_server_config_obj["DHCP_SERVER_IPV4_PORT"] = dhcp_server_port_config gold_config_db.update(dhcp_server_config_obj) + return gold_config_db + + def generate_smartswitch_golden_config_db(self): + 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)) + + # Generate FEATURE table from init_cfg.ini + ori_config_db = json.loads(out) + if "DEVICE_METADATA" not in ori_config_db or "localhost" not in ori_config_db["DEVICE_METADATA"]: + return "{}" + ori_config_db["DEVICE_METADATA"]["localhost"]["subtype"] = "SmartSwitch" + hwsku = ori_config_db["DEVICE_METADATA"]["localhost"].get("hwsku", None) + + if "FEATURE" not in ori_config_db \ + or "dhcp_server" not in ori_config_db["FEATURE"] \ + or "dhcp_relay" not in ori_config_db["FEATURE"]: + return "{}" + ori_config_db["FEATURE"]["dhcp_server"]["state"] = "enabled" + ori_config_db["FEATURE"]["dhcp_relay"]["state"] = "enabled" + + # Generate INTERFACE table for EthernetBPXX + if "PORT" not in ori_config_db or "INTERFACE" not in ori_config_db: + return "{}" + + if hwsku not in smartswitch_hwsku_config: + return "{}" + + for i in range(smartswitch_hwsku_config["dpu_num"]): + port_key = smartswitch_hwsku_config["port_key"].format(i) + interface_key = smartswitch_hwsku_config["interface_key"].format(i, i) + if port_key in ori_config_db["PORT"]: + ori_config_db["PORT"][port_key]["admin_status"] = "up" + ori_config_db["INTERFACE"][port_key] = {} + ori_config_db["INTERFACE"][interface_key] = {} + + gold_config_db = { + "DEVICE_METADATA": copy.deepcopy(ori_config_db["DEVICE_METADATA"]), + "FEATURE": copy.deepcopy(ori_config_db["FEATURE"]), + "INTERFACE": copy.deepcopy(ori_config_db["INTERFACE"]), + "PORT": copy.deepcopy(ori_config_db["PORT"]) + } + + # Generate dhcp_server related configuration + rc, out, err = self.module.run_command("cat {}".format(TEMP_SMARTSWITCH_CONFIG_PATH)) + if rc != 0: + self.module.fail_json(msg="Failed to get smartswitch config: {}".format(err)) + smartswitch_config_obj = json.loads(out) + gold_config_db.update(smartswitch_config_obj) return json.dumps(gold_config_db, indent=4) def generate(self): - if self.topo_name == "mx": - config = self.generate_mx_golden_config_db() + if self.topo_name == "mx" or "m0" in self.topo_name: + config = self.generate_mgfx_golden_config_db() + elif self.topo_name == "t1-28-lag": + config = self.generate_smartswitch_golden_config_db() else: config = "{}" with open(GOLDEN_CONFIG_DB_PATH, "w") as temp_file: temp_file.write(config) self.module.run_command("sudo rm -f {}".format(TEMP_DHCP_SERVER_CONFIG_PATH)) + self.module.run_command("sudo rm -f {}".format(TEMP_SMARTSWITCH_CONFIG_PATH)) self.module.exit_json(change=True, msg="Success to generate golden_config_db.json") diff --git a/ansible/library/snmp_facts.py b/ansible/library/snmp_facts.py index 141e11dc44b..a7dbdc9beb4 100644 --- a/ansible/library/snmp_facts.py +++ b/ansible/library/snmp_facts.py @@ -463,9 +463,10 @@ def Tree(): return defaultdict(Tree) elif current_oid == v.sysLocation: results['ansible_syslocation'] = current_val + # Cisco 8800 has lots of interfacts, add timeout to tolerate the latency errorIndication, errorStatus, errorIndex, varTable = cmdGen.nextCmd( snmp_auth, - cmdgen.UdpTransportTarget((m_args['host'], 161)), + cmdgen.UdpTransportTarget((m_args['host'], 161), timeout=m_args['timeout']), cmdgen.MibVariable(p.ifIndex,), cmdgen.MibVariable(p.ifDescr,), cmdgen.MibVariable(p.ifType,), @@ -890,9 +891,10 @@ def Tree(): return defaultdict(Tree) ifIndex = int(current_oid.split('.')[12]) results['snmp_interfaces'][ifIndex]['lldpRemManAddrOID'] = current_val + # Cisco 8800 has lots of interfacts, add timeout to tolerate the latency errorIndication, errorStatus, errorIndex, varTable = cmdGen.nextCmd( snmp_auth, - cmdgen.UdpTransportTarget((m_args['host'], 161)), + cmdgen.UdpTransportTarget((m_args['host'], 161), timeout=m_args['timeout']), cmdgen.MibVariable(p.cpfcIfRequests,), cmdgen.MibVariable(p.cpfcIfIndications,), cmdgen.MibVariable(p.requestsPerPriority,), diff --git a/ansible/library/testbed_vm_info.py b/ansible/library/testbed_vm_info.py index 19b1a485819..61898d5c22e 100644 --- a/ansible/library/testbed_vm_info.py +++ b/ansible/library/testbed_vm_info.py @@ -80,6 +80,25 @@ def get_neighbor_eos(self): eos[eos_name] = vm_name return eos + def get_neighbor_dpu(self): + dpu = {} + with open(self.topofile) as f: + vm_topology = yaml.safe_load(f) + self.topoall = vm_topology + + if len(self.base_vm) > 2: + vm_start_index = int(self.base_vm[2:]) + vm_name_fmt = 'VM%0{}d'.format(len(self.base_vm) - 2) + + if 'DPUs' not in vm_topology['topology']: + return dpu + + for dpu_name, dpu_value in vm_topology['topology']['DPUs'].items(): + vm_name = vm_name_fmt % (vm_start_index + dpu_value['vm_offset']) + dpu[dpu_name] = vm_name + + return dpu + def gather_veos_vms(self): yaml_data = {} with open(self.vm_file, 'r') as default_f: @@ -111,6 +130,7 @@ def main(): vm_facts = TestbedVMFacts( m_args['topo'], m_args['base_vm'], m_args['vm_file']) neighbor_eos = vm_facts.get_neighbor_eos() + neighbor_eos.update(vm_facts.get_neighbor_dpu()) if has_dataloader: hosts = vm_facts.inv_mgr.hosts else: diff --git a/ansible/library/topo_facts.py b/ansible/library/topo_facts.py index 96b806d8bfc..c34b62e9b10 100644 --- a/ansible/library/topo_facts.py +++ b/ansible/library/topo_facts.py @@ -114,6 +114,13 @@ def parse_topo_defintion(self, topo_definition, po_map, dut_num, neigh_type='VMs dut_index = 0 for asic_intf in topo_definition['topology'][neigh_type][vm]['asic_intfs']: vmconfig[vm]['asic_intfs'][dut_index].append(asic_intf) + if neigh_type == 'DPUs': + vmconfig[vm]['interface_indexes'] = [[] + for i in range(dut_num)] + for vlan in topo_definition['topology'][neigh_type][vm]['vlans']: + (dut_index, vlan_index, _) = parse_vm_vlan_port(vlan) + vmconfig[vm]['interface_indexes'][dut_index].append( + vlan_index) # physical interface if 'configuration' in topo_definition: @@ -131,13 +138,13 @@ def parse_topo_defintion(self, topo_definition, po_map, dut_num, neigh_type='VMs vmconfig[vm]['intfs'][dut_index].append(intf) # ip interface - vmconfig[vm]['ip_intf'] = [None] * dut_num - vmconfig[vm]['peer_ipv4'] = [None] * dut_num - vmconfig[vm]['ipv4mask'] = [None] * dut_num - vmconfig[vm]['peer_ipv6'] = [None] * dut_num - vmconfig[vm]['ipv6mask'] = [None] * dut_num - vmconfig[vm]['bgp_ipv4'] = [None] * dut_num - vmconfig[vm]['bgp_ipv6'] = [None] * dut_num + vmconfig[vm]['ip_intf'] = [[] for _ in range(dut_num)] + vmconfig[vm]['peer_ipv4'] = [[] for _ in range(dut_num)] + vmconfig[vm]['ipv4mask'] = [[] for _ in range(dut_num)] + vmconfig[vm]['peer_ipv6'] = [[] for _ in range(dut_num)] + vmconfig[vm]['ipv6mask'] = [[] for _ in range(dut_num)] + vmconfig[vm]['bgp_ipv4'] = [[] for _ in range(dut_num)] + vmconfig[vm]['bgp_ipv6'] = [[] for _ in range(dut_num)] vmconfig[vm]['bgp_asn'] = None if 'configuration' in topo_definition: @@ -159,18 +166,21 @@ def parse_topo_defintion(self, topo_definition, po_map, dut_num, neigh_type='VMs (peer_ipv4, ipv4_mask) = \ topo_definition['configuration'][vm]['interfaces'][intf]['ipv4'].split( '/') - vmconfig[vm]['peer_ipv4'][dut_index] = peer_ipv4 - vmconfig[vm]['ipv4mask'][dut_index] = ipv4_mask - vmconfig[vm]['ip_intf'][dut_index] = intf + vmconfig[vm]['peer_ipv4'][dut_index].append(peer_ipv4) + vmconfig[vm]['ipv4mask'][dut_index].append(ipv4_mask) + if intf not in vmconfig[vm]['ip_intf'][dut_index]: + vmconfig[vm]['ip_intf'][dut_index].append(intf) + if (isinstance(topo_definition['configuration'][vm]['interfaces'], dict) and 'ipv6' in topo_definition['configuration'][vm]['interfaces'][intf] and ('loopback' not in intf.lower())): (ipv6_addr, ipv6_mask) = \ topo_definition['configuration'][vm]['interfaces'][intf]['ipv6'].split( '/') - vmconfig[vm]['peer_ipv6'][dut_index] = ipv6_addr.upper() - vmconfig[vm]['ipv6mask'][dut_index] = ipv6_mask - vmconfig[vm]['ip_intf'][dut_index] = intf + vmconfig[vm]['peer_ipv6'][dut_index].append(ipv6_addr.upper()) + vmconfig[vm]['ipv6mask'][dut_index].append(ipv6_mask) + if intf not in vmconfig[vm]['ip_intf'][dut_index]: + vmconfig[vm]['ip_intf'][dut_index].append(intf) # Configuration is provided via init_cfg_profile, no need to go through the topo file if "init_cfg_profile" in topo_definition['configuration'][vm]: @@ -191,10 +201,10 @@ def parse_topo_defintion(self, topo_definition, po_map, dut_num, neigh_type='VMs if ip.version == 4: # Each VM might not be connected to all the DUT's, # so check if this VM is a peer to DUT at dut_index - if vmconfig[vm]['peer_ipv4'][dut_index]: + for peer_ipv4_idx in range(len(vmconfig[vm]['peer_ipv4'][dut_index])): ipsubnet_str = \ - vmconfig[vm]['peer_ipv4'][dut_index] + \ - '/'+vmconfig[vm]['ipv4mask'][dut_index] + vmconfig[vm]['peer_ipv4'][dut_index][peer_ipv4_idx] + \ + '/'+vmconfig[vm]['ipv4mask'][dut_index][peer_ipv4_idx] if sys.version_info < (3, 0): ipsubnet = ipaddress.ip_interface( ipsubnet_str.decode('utf8')) @@ -202,17 +212,18 @@ def parse_topo_defintion(self, topo_definition, po_map, dut_num, neigh_type='VMs ipsubnet = ipaddress.ip_interface( ipsubnet_str) if ip in ipsubnet.network: - vmconfig[vm]['bgp_ipv4'][dut_index] = ipstr.upper() - elif neigh_type == "NEIGH_ASIC": - vmconfig[vm]['bgp_ipv4'][dut_index] = ipstr.upper() - vmconfig[vm]['ipv4mask'][dut_index] = ip_mask if ip_mask else '32' + vmconfig[vm]['bgp_ipv4'][dut_index].append(ipstr.upper()) + if (not vmconfig[vm]['peer_ipv4'][dut_index]) and neigh_type == "NEIGH_ASIC": + vmconfig[vm]['bgp_ipv4'][dut_index].append(ipstr.upper()) + vmconfig[vm]['ipv4mask'][dut_index].append(ip_mask if ip_mask else '32') + elif ip.version == 6: # Each VM might not be connected to all the DUT's, # so check if this VM is a peer to DUT at dut_index - if vmconfig[vm]['peer_ipv6'][dut_index]: + for peer_ipv6_idx in range(len(vmconfig[vm]['peer_ipv6'][dut_index])): ipsubnet_str = \ - vmconfig[vm]['peer_ipv6'][dut_index] + \ - '/'+vmconfig[vm]['ipv6mask'][dut_index] + vmconfig[vm]['peer_ipv6'][dut_index][peer_ipv6_idx] + \ + '/'+vmconfig[vm]['ipv6mask'][dut_index][peer_ipv6_idx] if sys.version_info < (3, 0): ipsubnet = ipaddress.ip_interface( ipsubnet_str.decode('utf8')) @@ -220,10 +231,11 @@ def parse_topo_defintion(self, topo_definition, po_map, dut_num, neigh_type='VMs ipsubnet = ipaddress.ip_interface( ipsubnet_str) if ip in ipsubnet.network: - vmconfig[vm]['bgp_ipv6'][dut_index] = ipstr.upper() - elif neigh_type == "NEIGH_ASIC": - vmconfig[vm]['bgp_ipv6'][dut_index] = ipstr.upper() - vmconfig[vm]['ipv6mask'][dut_index] = ip_mask if ip_mask else '128' + vmconfig[vm]['bgp_ipv6'][dut_index].append(ipstr.upper()) + if (not vmconfig[vm]['peer_ipv6'][dut_index]) and neigh_type == "NEIGH_ASIC": + vmconfig[vm]['bgp_ipv6'][dut_index].append(ipstr.upper()) + vmconfig[vm]['ipv6mask'][dut_index].append(ip_mask if ip_mask else '128') + return vmconfig def get_topo_config(self, topo_name, hwsku, testbed_name, asics_present, card_type): @@ -285,6 +297,10 @@ def get_topo_config(self, topo_name, hwsku, testbed_name, asics_present, card_ty vm_topo_config['vm'] = self.parse_topo_defintion( topo_definition, po_map, dut_num, 'VMs') + if 'DPUs' in topo_definition['topology']: + vm_topo_config['vm'].update(self.parse_topo_defintion( + topo_definition, po_map, dut_num, 'DPUs')) + if 'cable' in topo_name: dut_asn = topo_definition['configuration_properties']['common']['dut_asn'] vm_topo_config['dut_type'] = topo_definition['configuration_properties']['common']['dut_type'] diff --git a/ansible/minigraph/OCPSCH0104001MS.xml b/ansible/minigraph/OCPSCH0104001MS.xml deleted file mode 100644 index 50f749f9fff..00000000000 --- a/ansible/minigraph/OCPSCH0104001MS.xml +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - BGPSession - OCPSCH0104001MS - 10.10.1.2 - OCPSCH01040AALF - 10.10.1.1 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.6 - OCPSCH01040BBLF - 10.10.1.5 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.10 - OCPSCH01040CCLF - 10.10.1.9 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.14 - OCPSCH01040DDLF - 10.10.1.13 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.18 - OCPSCH01040EELF - 10.10.1.17 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.22 - OCPSCH01040FFLF - 10.10.1.21 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.26 - OCPSCH01040GGLF - 10.10.1.25 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104001MS - 10.10.1.30 - OCPSCH01040HHLF - 10.10.1.29 - 1 - 10 - 3 - - - - - 64542 - OCPSCH0104001MS - - - BGPPeer -
10.10.1.2
- - -
- - BGPPeer -
10.10.1.6
- - -
- - BGPPeer -
10.10.1.10
- - -
- - BGPPeer -
10.10.1.14
- - -
- - BGPPeer -
10.10.1.18
- - -
- - BGPPeer -
10.10.1.22
- - -
- - BGPPeer -
10.10.1.26
- - -
- - BGPPeer -
10.10.1.30
- - -
-
- -
- - 64536 - OCPSCH01040AALF - - - - 64536 - OCPSCH01040BBLF - - - - 64536 - OCPSCH01040CCLF - - - - 64536 - OCPSCH01040DDLF - - - - 64536 - OCPSCH01040EELF - - - - 64536 - OCPSCH01040FFLF - - - - 64536 - OCPSCH01040GGLF - - - - 64536 - OCPSCH01040HHLF - - -
-
- - - - - - LoopbackInterface - HostIP - Loopback0 - - 100.0.0.1/32 - - 100.0.0.1/32 - - - - - ManagementInterface - ManagementIP1 - Management0 - - 192.168.200.10/24 - - 192.168.200.10/24 - - - - - - OCPSCH0104001MS - - - - VlanInterface - Vlan851 - Ethernet32;Ethernet36;Ethernet40;Ethernet44 - False - 0.0.0.0/0 - - 851 - 10.20.1.0/24 - - - - - IPInterface - - Vlan851 - 10.20.1.1/24 - - - IPInterface - - Ethernet0 - 10.10.1.2/30 - - - IPInterface - - Ethernet4 - 10.10.1.6/30 - - - IPInterface - - Ethernet8 - 10.10.1.10/30 - - - IPInterface - - Ethernet12 - 10.10.1.14/30 - - - IPInterface - - Ethernet16 - 10.10.1.18/30 - - - IPInterface - - Ethernet20 - 10.10.1.22/30 - - - IPInterface - - Ethernet24 - 10.10.1.26/30 - - - IPInterface - - Ethernet28 - 10.10.1.30/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040AALF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet4 - OCPSCH01040BBLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet8 - OCPSCH01040CCLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet12 - OCPSCH01040DDLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet16 - OCPSCH01040EELF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet20 - OCPSCH01040FFLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet24 - OCPSCH01040GGLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet28 - OCPSCH01040HHLF - Ethernet0 - - - - - OCPSCH0104001MS - AS7512 - - - - - - - - OCPSCH0104001MS - AS7512 -
diff --git a/ansible/minigraph/OCPSCH0104002MS.xml b/ansible/minigraph/OCPSCH0104002MS.xml deleted file mode 100644 index 37fff59f8f7..00000000000 --- a/ansible/minigraph/OCPSCH0104002MS.xml +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - BGPSession - OCPSCH0104002MS - 10.10.2.2 - OCPSCH01040AALF - 10.10.2.1 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.6 - OCPSCH01040BBLF - 10.10.2.5 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.10 - OCPSCH01040CCLF - 10.10.2.9 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.14 - OCPSCH01040DDLF - 10.10.2.13 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.18 - OCPSCH01040EELF - 10.10.2.17 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.22 - OCPSCH01040FFLF - 10.10.2.21 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.26 - OCPSCH01040GGLF - 10.10.2.25 - 1 - 10 - 3 - - - BGPSession - OCPSCH0104002MS - 10.10.2.30 - OCPSCH01040HHLF - 10.10.2.29 - 1 - 10 - 3 - - - - - 64543 - OCPSCH0104002MS - - - BGPPeer -
10.10.2.2
- - -
- - BGPPeer -
10.10.2.6
- - -
- - BGPPeer -
10.10.2.10
- - -
- - BGPPeer -
10.10.2.14
- - -
- - BGPPeer -
10.10.2.18
- - -
- - BGPPeer -
10.10.2.22
- - -
- - BGPPeer -
10.10.2.26
- - -
- - BGPPeer -
10.10.2.30
- - -
-
- -
- - 64536 - OCPSCH01040AALF - - - - 64536 - OCPSCH01040BBLF - - - - 64536 - OCPSCH01040CCLF - - - - 64536 - OCPSCH01040DDLF - - - - 64536 - OCPSCH01040EELF - - - - 64536 - OCPSCH01040FFLF - - - - 64536 - OCPSCH01040GGLF - - - - 64536 - OCPSCH01040HHLF - - -
-
- - - - - - LoopbackInterface - HostIP - Loopback0 - - 100.0.0.2/32 - - 100.0.0.2/32 - - - - - ManagementInterface - ManagementIP1 - Management0 - - 192.168.200.11/24 - - 192.168.200.11/24 - - - - - - OCPSCH0104002MS - - - - VlanInterface - Vlan851 - Ethernet32;Ethernet36;Ethernet40;Ethernet44 - False - 0.0.0.0/0 - - 851 - 10.20.2.0/24 - - - - - IPInterface - - Vlan851 - 10.20.2.1/24 - - - IPInterface - - Ethernet0 - 10.10.2.2/30 - - - IPInterface - - Ethernet4 - 10.10.2.6/30 - - - IPInterface - - Ethernet8 - 10.10.2.10/30 - - - IPInterface - - Ethernet12 - 10.10.2.14/30 - - - IPInterface - - Ethernet16 - 10.10.2.18/30 - - - IPInterface - - Ethernet20 - 10.10.2.22/30 - - - IPInterface - - Ethernet24 - 10.10.2.26/30 - - - IPInterface - - Ethernet28 - 10.10.2.30/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040AALF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet4 - OCPSCH01040BBLF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet8 - OCPSCH01040CCLF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet12 - OCPSCH01040DDLF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet12 - OCPSCH01040DDLF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet16 - OCPSCH01040EELF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet20 - OCPSCH01040FFLF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet24 - OCPSCH01040GGLF - Ethernet4 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet28 - OCPSCH01040HHLF - Ethernet4 - - - - - OCPSCH0104002MS - ACS-MSN2700 - - - - - - - - OCPSCH0104002MS - ACS-MSN2700 -
diff --git a/ansible/minigraph/OCPSCH01040AALF.xml b/ansible/minigraph/OCPSCH01040AALF.xml deleted file mode 100644 index 86d8ca1a6e6..00000000000 --- a/ansible/minigraph/OCPSCH01040AALF.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.2 - OCPSCH01040AALF - 10.10.1.1 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.2 - OCPSCH01040AALF - 10.10.2.1 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040AALF - - -
10.10.1.1
- - -
- -
10.10.2.1
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.3/32 - - 100.0.0.3/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.12/24 - - 192.168.200.12/24 - - - - - - OCPSCH01040AALF - - - - - - Ethernet0 - 10.10.1.1/30 - - - - Ethernet4 - 10.10.2.1/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040AALF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040AALF - Ethernet4 - - - - - OCPSCH01040AALF - ACS-S6000 - - - - - - - - OCPSCH01040AALF - ACS-S6000 -
diff --git a/ansible/minigraph/OCPSCH01040BBLF.xml b/ansible/minigraph/OCPSCH01040BBLF.xml deleted file mode 100644 index 59be72e31bf..00000000000 --- a/ansible/minigraph/OCPSCH01040BBLF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.6 - OCPSCH01040BBLF - 10.10.1.5 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.6 - OCPSCH01040BBLF - 10.10.2.5 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040BBLF - - -
10.10.1.6
- - -
- -
10.10.2.6
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.4/32 - - 100.0.0.4/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.13/24 - - 192.168.200.13/24 - - - - - - OCPSCH01040BBLF - - - - - - Ethernet0 - 10.10.1.5/30 - - - - Ethernet4 - 10.10.2.5/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040BBLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040BBLF - Ethernet4 - - - - - OCPSCH01040BBLF - ACS-MSN2700 - - - - OCPSCH01040BBLF - ACS-MSN2700 -
diff --git a/ansible/minigraph/OCPSCH01040CCLF.xml b/ansible/minigraph/OCPSCH01040CCLF.xml deleted file mode 100644 index ce5cb71f25f..00000000000 --- a/ansible/minigraph/OCPSCH01040CCLF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.10 - OCPSCH01040CCLF - 10.10.1.9 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.10 - OCPSCH01040CCLF - 10.10.2.9 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040CCLF - - -
10.10.1.10
- - -
- -
10.10.2.10
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.5/32 - - 100.0.0.5/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.14/24 - - 192.168.200.14/24 - - - - - - OCPSCH01040CCLF - - - - - - Ethernet0 - 10.10.1.9/30 - - - - Ethernet4 - 10.10.2.9/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040CCLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040CCLF - Ethernet4 - - - - - OCPSCH01040CCLF - ACS-CAVM - - - - OCPSCH01040CCLF - ACS-CAVM -
diff --git a/ansible/minigraph/OCPSCH01040DDLF.xml b/ansible/minigraph/OCPSCH01040DDLF.xml deleted file mode 100644 index 47efabf7d81..00000000000 --- a/ansible/minigraph/OCPSCH01040DDLF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.14 - OCPSCH01040DDLF - 10.10.1.13 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.14 - OCPSCH01040DDLF - 10.10.2.13 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040DDLF - - -
10.10.1.14
- - -
- -
10.10.2.14
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.6/32 - - 100.0.0.6/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.15/24 - - 192.168.200.15/24 - - - - - - OCPSCH01040DDLF - - - - - - Ethernet0 - 10.10.1.13/30 - - - - Ethernet1 - 10.10.2.13/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH01040DDLF - Ethernet0 - OCPSCH0104012MS - Ethernet12 - - - 40000 - DeviceInterfaceLink - OCPCH01040DDLF - Ethernet1 - OCPSCH0104002MS - Ethernet12 - - - - - OCPSCH01040DDLF - Force10-Z9100 - - - - OCPSCH01040DDLF - Force10-Z9100 -
diff --git a/ansible/minigraph/OCPSCH01040EELF.xml b/ansible/minigraph/OCPSCH01040EELF.xml deleted file mode 100644 index 59c60fccdc5..00000000000 --- a/ansible/minigraph/OCPSCH01040EELF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.18 - OCPSCH01040EELF - 10.10.1.17 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.18 - OCPSCH01040EELF - 10.10.2.17 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040EELF - - -
10.10.1.18
- - -
- -
10.10.2.18
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.7/32 - - 100.0.0.7/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.16/24 - - 192.168.200.16/24 - - - - - - OCPSCH01040EELF - - - - - - Ethernet0 - 10.10.1.17/30 - - - - Ethernet4 - 10.10.2.17/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040EELF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040EELF - Ethernet4 - - - - - OCPSCH01040EELF - ACS-BF - - - - OCPSCH01040EELF - ACS-BF -
diff --git a/ansible/minigraph/OCPSCH01040FFLF.xml b/ansible/minigraph/OCPSCH01040FFLF.xml deleted file mode 100644 index e7b9afa01b0..00000000000 --- a/ansible/minigraph/OCPSCH01040FFLF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.22 - OCPSCH01040FFLF - 10.10.1.21 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.22 - OCPSCH01040FFLF - 10.10.2.21 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040FFLF - - -
10.10.1.10
- - -
- -
10.10.2.10
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.8/32 - - 100.0.0.8/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.17/24 - - 192.168.200.17/24 - - - - - - OCPSCH01040FFLF - - - - - - Ethernet0 - 10.10.1.21/30 - - - - Ethernet4 - 10.10.2.21/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040FFLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040FFLF - Ethernet4 - - - - - OCPSCH01040FFLF - ACS-A7050-QX32 - - - - OCPSCH01040FFLF - ACS-A7050-QX32 -
diff --git a/ansible/minigraph/OCPSCH01040GGLF.xml b/ansible/minigraph/OCPSCH01040GGLF.xml deleted file mode 100644 index 978577e5443..00000000000 --- a/ansible/minigraph/OCPSCH01040GGLF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.26 - OCPSCH01040GGLF - 10.10.1.25 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.26 - OCPSCH01040GGLF - 10.10.2.25 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040GGLF - - -
10.10.1.26
- - -
- -
10.10.2.26
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.9/32 - - 100.0.0.9/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.18/24 - - 192.168.200.18/24 - - - - - - OCPSCH01040GGLF - - - - - - Ethernet0 - 10.10.1.25/30 - - - - Ethernet4 - 10.10.2.25/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040GGLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040GGLF - Ethernet4 - - - - - OCPSCH01040GGLF - ACS-BF - - - - OCPSCH01040GGLF - ACS-BF -
diff --git a/ansible/minigraph/OCPSCH01040HHLF.xml b/ansible/minigraph/OCPSCH01040HHLF.xml deleted file mode 100644 index ba223330b9e..00000000000 --- a/ansible/minigraph/OCPSCH01040HHLF.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - OCPSCH0104001MS - 10.10.1.30 - OCPSCH01040HHLF - 10.10.1.29 - 1 - 10 - 3 - - - OCPSCH0104002MS - 10.10.2.30 - OCPSCH01040HHLF - 10.10.2.29 - 1 - 10 - 3 - - - - - 64536 - OCPSCH01040HHLF - - -
10.10.1.30
- - -
- -
10.10.2.30
- - -
-
- -
- - 64542 - OCPSCH0104001MS - - - - 64543 - OCPSCH0104002MS - - -
-
- - - - - - HostIP - Loopback0 - - 100.0.0.10/32 - - 100.0.0.10/32 - - - - - ManagementIP1 - Management0 - - 192.168.200.19/24 - - 192.168.200.19/24 - - - - - - OCPSCH01040HHLF - - - - - - Ethernet0 - 10.10.1.29/30 - - - - Ethernet4 - 10.10.2.29/30 - - - - - - - - - - - - 40000 - DeviceInterfaceLink - OCPSCH0104001MS - Ethernet0 - OCPSCH01040HHLF - Ethernet0 - - - 40000 - DeviceInterfaceLink - OCPSCH0104002MS - Ethernet0 - OCPSCH01040HHLF - Ethernet4 - - - - - OCPSCH01040HHLF - ACS-BF - - - - OCPSCH01040HHLF - ACS-BF -
diff --git a/ansible/minigraph/lab-s6000-01.t0.xml b/ansible/minigraph/SONIC01DPU.xml similarity index 60% rename from ansible/minigraph/lab-s6000-01.t0.xml rename to ansible/minigraph/SONIC01DPU.xml index b9a4af663ef..3127a5d0441 100644 --- a/ansible/minigraph/lab-s6000-01.t0.xml +++ b/ansible/minigraph/SONIC01DPU.xml @@ -3,77 +3,10 @@ - false - lab-s6000-01 - 10.0.0.56 - ARISTA01T1 - 10.0.0.57 - 1 - 10 - 3 - - - lab-s6000-01 - FC00::71 - ARISTA01T1 - FC00::72 - 1 - 10 - 3 - - - false - lab-s6000-01 - 10.0.0.58 - ARISTA02T1 - 10.0.0.59 - 1 - 10 - 3 - - - lab-s6000-01 - FC00::75 - ARISTA02T1 - FC00::76 - 1 - 10 - 3 - - - false - lab-s6000-01 - 10.0.0.60 - ARISTA03T1 - 10.0.0.61 - 1 - 10 - 3 - - - lab-s6000-01 - FC00::79 - ARISTA03T1 - FC00::7A - 1 - 10 - 3 - - - false - lab-s6000-01 - 10.0.0.62 - ARISTA04T1 - 10.0.0.63 - 1 - 10 - 3 - - - lab-s6000-01 - FC00::7D - ARISTA04T1 - FC00::7E + SONIC01DPU + FC00::4A + vlab-01 + FC00::49 1 10 3 @@ -81,77 +14,31 @@ - 65100 - lab-s6000-01 + 64003 + SONIC01DPU -
10.0.0.57
+
10.0.0.37
-
10.0.0.59
+
10.0.0.39
- -
10.0.0.61
- - - -
- -
10.0.0.63
- - - -
- - BGPPeer -
10.1.0.32
- - - - BGPSLBPassive - 10.255.0.0/25 -
- - BGPPeer -
10.1.0.32
- - - - BGPVac - 192.168.0.0/21 -
- 64600 - ARISTA01T1 - - - - 64600 - ARISTA02T1 - - - - 64600 - ARISTA03T1 - - - - 64600 - ARISTA04T1 + 65100 + vlab-01
- - + @@ -159,17 +46,17 @@ HostIP Loopback0 - 10.1.0.32/32 + 100.1.0.19/32 - 10.1.0.32/32 + 100.1.0.19/32 HostIP1 Loopback0 - FC00:1::32/128 + 2064:100::13/128 - FC00:1::32/128 + 2064:100::13/128 @@ -177,109 +64,48 @@ HostIP eth0 - 10.251.0.189/24 + 10.250.0.55/24 - 10.251.0.189/24 + 10.250.0.55/24 V6HostIP eth0 - fec0::ffff:afa:9/64 + fec0::ffff:afa:1/64 - fec0::ffff:afa:9/64 + fec0::ffff:afa:1/64 - lab-s6000-01 + SONIC01DPU - - PortChannel0001 - fortyGigE0/112 - - - - PortChannel0002 - fortyGigE0/116 - - - - PortChannel0003 - fortyGigE0/120 - - - - PortChannel0004 - fortyGigE0/124 - - - - Vlan1000 - fortyGigE0/4;fortyGigE0/8;fortyGigE0/12;fortyGigE0/16;fortyGigE0/20;fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/36;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/64;fortyGigE0/68;fortyGigE0/72;fortyGigE0/76;fortyGigE0/80;fortyGigE0/84;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96 - False - 0.0.0.0/0 - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - 1000 - 1000 - 192.168.0.0/21 - - PortChannel0001 - 10.0.0.56/31 - - - - PortChannel0001 - FC00::71/126 - - - - PortChannel0002 - 10.0.0.58/31 + eth1 + 10.0.0.37/31 - PortChannel0002 - FC00::75/126 + eth1 + fc00::4a/126 - PortChannel0003 - 10.0.0.60/31 + eth2 + 10.0.0.39/31 - PortChannel0003 - FC00::79/126 - - - - PortChannel0004 - 10.0.0.62/31 - - - - PortChannel0004 - FC00::7D/126 - - - - Vlan1000 - 192.168.0.1/21 - - - - Vlan1000 - fc02:1000::1/64 + eth2 + fc00::4e/126 @@ -294,6 +120,11 @@ SNMP SNMP + + VTY_LINE + ssh-only + SSH + ERSPAN Everflow @@ -305,12 +136,12 @@ EverflowV6 - VTY_LINE - ssh-only - SSH + fortyGigE0/0 + DataAcl + DataPlane - PortChannel0001;PortChannel0002;PortChannel0003;PortChannel0004 + fortyGigE0/4 DataAcl DataPlane @@ -318,245 +149,40 @@ - - + DeviceInterfaceLink - ARISTA01T1 - Ethernet1 - lab-s6000-01 - fortyGigE0/112 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet1 - lab-s6000-01 - fortyGigE0/116 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet1 - lab-s6000-01 - fortyGigE0/120 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet1 - lab-s6000-01 - fortyGigE0/124 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/4 - Servers0 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/8 - Servers1 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/12 - Servers2 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 + vlab-01 fortyGigE0/16 - Servers3 - eth0 + SONIC01DPU + fortyGigE0/0 DeviceInterfaceLink - lab-s6000-01 + vlab-01 fortyGigE0/20 - Servers4 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/24 - Servers5 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/28 - Servers6 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/32 - Servers7 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/36 - Servers8 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/40 - Servers9 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/44 - Servers10 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/48 - Servers11 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/52 - Servers12 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/56 - Servers13 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/60 - Servers14 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/64 - Servers15 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/68 - Servers16 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/72 - Servers17 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/76 - Servers18 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/80 - Servers19 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/84 - Servers20 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/88 - Servers21 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/92 - Servers22 - eth0 - - - DeviceInterfaceLink - lab-s6000-01 - fortyGigE0/96 - Servers23 - eth0 + SONIC01DPU + fortyGigE0/4 - - lab-s6000-01 + + vlab-01 Force10-S6000 - 10.251.0.189 + 10.250.0.101 - - ARISTA04T1 - - 10.250.0.5 - - Arista-VM - - - ARISTA03T1 + + SONIC01DPU - 10.250.0.4 + 10.250.0.55 - Arista-VM - - - ARISTA02T1 - - 10.250.0.3 - - Arista-VM - - - ARISTA01T1 - - 10.250.0.2 - - Arista-VM + SONiC-VM - - + true @@ -982,17 +608,21 @@ Force10-S6000 - - + - lab-s6000-01 + SONIC01DPU DeploymentId 1 + + CloudType + + Public + QosProfile @@ -1026,7 +656,12 @@ TacacsServer - 10.0.0.9;10.0.0.8 + 172.17.0.6 + + + ForcedMgmtRoutes + + 172.17.0.1/24 ErspanDestinationIpv4 @@ -1038,6 +673,6 @@ - lab-s6000-01 + SONIC01DPU Force10-S6000 diff --git a/ansible/minigraph/lab-a7260-01.t0-116.xml b/ansible/minigraph/lab-a7260-01.t0-116.xml deleted file mode 100644 index 188d60f69c1..00000000000 --- a/ansible/minigraph/lab-a7260-01.t0-116.xml +++ /dev/null @@ -1,2857 +0,0 @@ - - - - - - false - lab-a7260-01 - 10.0.0.32 - ARISTA01T1 - 10.0.0.33 - 1 - 10 - 3 - - - lab-a7260-01 - FC00::21 - ARISTA01T1 - FC00::22 - 1 - 10 - 3 - - - false - lab-a7260-01 - 10.0.0.34 - ARISTA02T1 - 10.0.0.35 - 1 - 10 - 3 - - - lab-a7260-01 - FC00::25 - ARISTA02T1 - FC00::26 - 1 - 10 - 3 - - - false - lab-a7260-01 - 10.0.0.36 - ARISTA03T1 - 10.0.0.37 - 1 - 10 - 3 - - - lab-a7260-01 - FC00::29 - ARISTA03T1 - FC00::2A - 1 - 10 - 3 - - - false - lab-a7260-01 - 10.0.0.38 - ARISTA04T1 - 10.0.0.39 - 1 - 10 - 3 - - - lab-a7260-01 - FC00::2D - ARISTA04T1 - FC00::2E - 1 - 10 - 3 - - - - - 4200065100 - lab-a7260-01 - - -
10.0.0.33
- - - -
- -
10.0.0.35
- - - -
- -
10.0.0.37
- - - -
- -
10.0.0.39
- - - -
- - BGPPeer -
10.1.0.32
- - - - BGPSLBPassive - 10.255.0.0/25 -
- - BGPPeer -
10.1.0.32
- - - - BGPVac - 192.168.0.0/21 -
-
- -
- - 4200064600 - ARISTA01T1 - - - - 4200064600 - ARISTA02T1 - - - - 4200064600 - ARISTA03T1 - - - - 4200064600 - ARISTA04T1 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.191/24 - - 10.251.0.191/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - lab-a7260-01 - - - PortChannel0001 - Ethernet13/1;Ethernet14/1 - - - - PortChannel0002 - Ethernet15/1;Ethernet16/1 - - - - PortChannel0003 - Ethernet17/1;Ethernet18/1 - - - - PortChannel0004 - Ethernet19/1;Ethernet20/1 - - - - - - Vlan1000 - Ethernet1/1;Ethernet1/3;Ethernet2/1;Ethernet2/3;Ethernet3/1;Ethernet3/3;Ethernet4/1;Ethernet4/3;Ethernet5/1;Ethernet5/3;Ethernet6/1;Ethernet6/3;Ethernet7/1;Ethernet7/3;Ethernet8/1;Ethernet8/3;Ethernet9/1;Ethernet9/3;Ethernet10/1;Ethernet10/3;Ethernet11/1;Ethernet11/3;Ethernet12/1;Ethernet12/3;Ethernet21/1;Ethernet21/3;Ethernet22/1;Ethernet22/3;Ethernet23/1;Ethernet23/3;Ethernet24/1;Ethernet24/3;Ethernet25/1;Ethernet25/3;Ethernet26/1;Ethernet26/3;Ethernet27/1;Ethernet27/3;Ethernet28/1;Ethernet28/3;Ethernet29/1;Ethernet29/3;Ethernet30/1;Ethernet30/3;Ethernet31/1;Ethernet31/3;Ethernet32/1;Ethernet32/3;Ethernet33/1;Ethernet33/3;Ethernet34/1;Ethernet34/3;Ethernet35/1;Ethernet35/3;Ethernet36/1;Ethernet36/3;Ethernet37/1;Ethernet37/3;Ethernet38/1;Ethernet38/3;Ethernet39/1;Ethernet39/3;Ethernet40/1;Ethernet40/3;Ethernet41/1;Ethernet41/3;Ethernet42/1;Ethernet42/3;Ethernet43/1;Ethernet43/3;Ethernet44/1;Ethernet44/3;Ethernet45/1;Ethernet45/3;Ethernet46/1;Ethernet46/3;Ethernet47/1;Ethernet47/3;Ethernet48/1;Ethernet48/3;Ethernet49/1;Ethernet49/3;Ethernet50/1;Ethernet50/3;Ethernet51/1;Ethernet51/3;Ethernet52/1;Ethernet52/3;Ethernet53/1;Ethernet53/3;Ethernet54/1;Ethernet54/3;Ethernet55/1;Ethernet55/3;Ethernet56/1;Ethernet56/3;Ethernet57/1;Ethernet57/3;Ethernet58/1;Ethernet58/3;Ethernet59/1;Ethernet59/3;Ethernet60/1;Ethernet60/3;Ethernet61/1;Ethernet61/3;Ethernet62/1;Ethernet62/3;Ethernet63/1;Ethernet63/3;Ethernet64/1;Ethernet64/3 - False - 0.0.0.0/0 - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - 1000 - 1000 - 192.168.0.0/21 - - - - - - PortChannel0001 - 10.0.0.32/31 - - - - PortChannel0001 - FC00::21/126 - - - - PortChannel0002 - 10.0.0.34/31 - - - - PortChannel0002 - FC00::25/126 - - - - PortChannel0003 - 10.0.0.36/31 - - - - PortChannel0003 - FC00::29/126 - - - - PortChannel0004 - 10.0.0.38/31 - - - - PortChannel0004 - FC00::2D/126 - - - - Vlan1000 - 192.168.0.1/21 - - - - Vlan1000 - fc02:1000::1/64 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel0001;PortChannel0002;PortChannel0003;PortChannel0004 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T1 - Ethernet1 - lab-a7260-01 - Ethernet13/1 - - - DeviceInterfaceLink - ARISTA01T1 - Ethernet2 - lab-a7260-01 - Ethernet14/1 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet1 - lab-a7260-01 - Ethernet15/1 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet2 - lab-a7260-01 - Ethernet16/1 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet1 - lab-a7260-01 - Ethernet17/1 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet2 - lab-a7260-01 - Ethernet18/1 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet1 - lab-a7260-01 - Ethernet19/1 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet2 - lab-a7260-01 - Ethernet20/1 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet1/1 - Servers0 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet1/3 - Servers1 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet2/1 - Servers2 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet2/3 - Servers3 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet3/1 - Servers4 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet3/3 - Servers5 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet4/1 - Servers6 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet4/3 - Servers7 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet5/1 - Servers8 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet5/3 - Servers9 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet6/1 - Servers10 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet6/3 - Servers11 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet7/1 - Servers12 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet7/3 - Servers13 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet8/1 - Servers14 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet8/3 - Servers15 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet9/1 - Servers16 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet9/3 - Servers17 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet10/1 - Servers18 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet10/3 - Servers19 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet11/1 - Servers20 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet11/3 - Servers21 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet12/1 - Servers22 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet12/3 - Servers23 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet21/1 - Servers24 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet21/3 - Servers25 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet22/1 - Servers26 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet22/3 - Servers27 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet23/1 - Servers28 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet23/3 - Servers29 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet24/1 - Servers30 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet24/3 - Servers31 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet25/1 - Servers32 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet25/3 - Servers33 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet26/1 - Servers34 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet26/3 - Servers35 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet27/1 - Servers36 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet27/3 - Servers37 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet28/1 - Servers38 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet28/3 - Servers39 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet29/1 - Servers40 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet29/3 - Servers41 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet30/1 - Servers42 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet30/3 - Servers43 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet31/1 - Servers44 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet31/3 - Servers45 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet32/1 - Servers46 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet32/3 - Servers47 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet33/1 - Servers48 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet33/3 - Servers49 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet34/1 - Servers50 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet34/3 - Servers51 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet35/1 - Servers52 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet35/3 - Servers53 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet36/1 - Servers54 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet36/3 - Servers55 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet37/1 - Servers56 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet37/3 - Servers57 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet38/1 - Servers58 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet38/3 - Servers59 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet39/1 - Servers60 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet39/3 - Servers61 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet40/1 - Servers62 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet40/3 - Servers63 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet41/1 - Servers64 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet41/3 - Servers65 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet42/1 - Servers66 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet42/3 - Servers67 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet43/1 - Servers68 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet43/3 - Servers69 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet44/1 - Servers70 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet44/3 - Servers71 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet45/1 - Servers72 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet45/3 - Servers73 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet46/1 - Servers74 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet46/3 - Servers75 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet47/1 - Servers76 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet47/3 - Servers77 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet48/1 - Servers78 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet48/3 - Servers79 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet49/1 - Servers80 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet49/3 - Servers81 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet50/1 - Servers82 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet50/3 - Servers83 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet51/1 - Servers84 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet51/3 - Servers85 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet52/1 - Servers86 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet52/3 - Servers87 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet53/1 - Servers88 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet53/3 - Servers89 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet54/1 - Servers90 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet54/3 - Servers91 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet55/1 - Servers92 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet55/3 - Servers93 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet56/1 - Servers94 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet56/3 - Servers95 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet57/1 - Servers96 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet57/3 - Servers97 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet58/1 - Servers98 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet58/3 - Servers99 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet59/1 - Servers100 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet59/3 - Servers101 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet60/1 - Servers102 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet60/3 - Servers103 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet61/1 - Servers104 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet61/3 - Servers105 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet62/1 - Servers106 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet62/3 - Servers107 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet63/1 - Servers108 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet63/3 - Servers109 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet64/1 - Servers110 - eth0 - - - DeviceInterfaceLink - lab-a7260-01 - Ethernet64/3 - Servers111 - eth0 - - - - - lab-a7260-01 - Arista-7260CX3-D108C8 - - 10.251.0.191 - - - - ARISTA04T1 - - 10.250.0.5 - - Arista-VM - - - ARISTA03T1 - - 10.250.0.4 - - Arista-VM - - - ARISTA02T1 - - 10.250.0.3 - - Arista-VM - - - ARISTA01T1 - - 10.250.0.2 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - Ethernet1/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet1/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet2/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet2/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet3/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet3/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet4/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet4/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet5/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet5/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet6/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet6/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet7/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet7/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet8/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet8/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet9/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet9/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet10/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet10/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet11/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet11/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet12/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet12/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet13/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet14/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet15/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet16/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet17/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet18/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet19/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet20/1 - - false - 0 - 0 - 100000 - - - DeviceInterface - - true - true - 1 - Ethernet21/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet21/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet22/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet22/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet23/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet23/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet24/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet24/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet25/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet25/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet26/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet26/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet27/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet27/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet28/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet28/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet29/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet29/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet30/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet30/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet31/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet31/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet32/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet32/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet33/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet33/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet34/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet34/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet35/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet35/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet36/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet36/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet37/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet37/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet38/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet38/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet39/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet39/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet40/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet40/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet41/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet41/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet42/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet42/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet43/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet43/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet44/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet44/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet45/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet45/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet46/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet46/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet47/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet47/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet48/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet48/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet49/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet49/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet50/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet50/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet51/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet51/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet52/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet52/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet53/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet53/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet54/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet54/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet55/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet55/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet56/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet56/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet57/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet57/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet58/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet58/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet59/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet59/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet60/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet60/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet61/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet61/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet62/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet62/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet63/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet63/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet64/1 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet64/3 - - false - 0 - 0 - 50000 - - - DeviceInterface - - true - true - 1 - Ethernet65 - - false - 0 - 0 - 10000 - - - DeviceInterface - - true - true - 1 - Ethernet66 - - false - 0 - 0 - 10000 - - - true - 0 - Arista-7260CX3-D108C8 - - - - - - - lab-a7260-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - lab-a7260-01 - Arista-7260CX3-D108C8 -
diff --git a/ansible/minigraph/lab-s6100-01.t0-64.xml b/ansible/minigraph/lab-s6100-01.t0-64.xml deleted file mode 100644 index 5ed5afde3d4..00000000000 --- a/ansible/minigraph/lab-s6100-01.t0-64.xml +++ /dev/null @@ -1,1571 +0,0 @@ - - - - - - false - lab-s6100-01 - 10.0.0.0 - ARISTA01T1 - 10.0.0.1 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::1 - ARISTA01T1 - FC00::2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.4 - ARISTA02T1 - 10.0.0.5 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::9 - ARISTA02T1 - FC00::A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.8 - ARISTA03T1 - 10.0.0.9 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::11 - ARISTA03T1 - FC00::12 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.12 - ARISTA04T1 - 10.0.0.13 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::19 - ARISTA04T1 - FC00::1A - 1 - 10 - 3 - - - - - 64601 - lab-s6100-01 - - -
10.0.0.1
- - - -
- -
10.0.0.5
- - - -
- -
10.0.0.9
- - - -
- -
10.0.0.13
- - - -
- - BGPPeer -
10.1.0.32
- - - - BGPSLBPassive - 10.255.0.0/25 -
- - BGPPeer -
10.1.0.32
- - - - BGPVac - 192.168.0.0/21 -
-
- -
- - 64802 - ARISTA01T1 - - - - 64802 - ARISTA02T1 - - - - 64802 - ARISTA03T1 - - - - 64802 - ARISTA04T1 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.190/24 - - 10.251.0.190/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - lab-s6100-01 - - - PortChannel0001 - fortyGigE1/1/1;fortyGigE1/1/2 - - - - PortChannel0002 - fortyGigE1/1/5;fortyGigE1/1/6 - - - - PortChannel0003 - fortyGigE1/2/1;fortyGigE1/2/2 - - - - PortChannel0004 - fortyGigE1/2/5;fortyGigE1/2/6 - - - - - - Vlan1000 - fortyGigE1/1/7;fortyGigE1/1/8;fortyGigE1/1/9;fortyGigE1/1/10;fortyGigE1/1/11;fortyGigE1/1/12;fortyGigE1/1/13;fortyGigE1/1/14;fortyGigE1/1/15;fortyGigE1/1/16;fortyGigE1/2/7;fortyGigE1/2/8;fortyGigE1/2/9;fortyGigE1/2/10;fortyGigE1/2/11;fortyGigE1/2/12;fortyGigE1/2/13;fortyGigE1/2/14;fortyGigE1/2/15;fortyGigE1/2/16;fortyGigE1/3/1;fortyGigE1/3/5;fortyGigE1/3/6;fortyGigE1/3/7;fortyGigE1/3/8;fortyGigE1/3/9;fortyGigE1/3/10;fortyGigE1/3/11;fortyGigE1/4/1;fortyGigE1/4/5;fortyGigE1/4/6;fortyGigE1/4/7;fortyGigE1/4/8;fortyGigE1/4/9;fortyGigE1/4/10;fortyGigE1/4/11 - False - 0.0.0.0/0 - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - 1000 - 1000 - 192.168.0.0/21 - - - - - - PortChannel0001 - 10.0.0.0/31 - - - - PortChannel0001 - FC00::1/126 - - - - PortChannel0002 - 10.0.0.4/31 - - - - PortChannel0002 - FC00::9/126 - - - - PortChannel0003 - 10.0.0.8/31 - - - - PortChannel0003 - FC00::11/126 - - - - PortChannel0004 - 10.0.0.12/31 - - - - PortChannel0004 - FC00::19/126 - - - - Vlan1000 - 192.168.0.1/21 - - - - Vlan1000 - fc02:1000::1/64 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel0001;PortChannel0002;PortChannel0003;PortChannel0004 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T1 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/1 - - - DeviceInterfaceLink - ARISTA01T1 - Ethernet2 - lab-s6100-01 - fortyGigE1/1/2 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/5 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet2 - lab-s6100-01 - fortyGigE1/1/6 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/1 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet2 - lab-s6100-01 - fortyGigE1/2/2 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/5 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet2 - lab-s6100-01 - fortyGigE1/2/6 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/7 - Servers0 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/8 - Servers1 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/9 - Servers2 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/10 - Servers3 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/11 - Servers4 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/12 - Servers5 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/13 - Servers6 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/14 - Servers7 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/15 - Servers8 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/1/16 - Servers9 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/7 - Servers10 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/8 - Servers11 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/9 - Servers12 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/10 - Servers13 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/11 - Servers14 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/12 - Servers15 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/13 - Servers16 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/14 - Servers17 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/15 - Servers18 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/2/16 - Servers19 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/1 - Servers20 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/5 - Servers21 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/6 - Servers22 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/7 - Servers23 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/8 - Servers24 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/9 - Servers25 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/10 - Servers26 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/3/11 - Servers27 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/1 - Servers28 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/5 - Servers29 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/6 - Servers30 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/7 - Servers31 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/8 - Servers32 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/9 - Servers33 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/10 - Servers34 - eth0 - - - DeviceInterfaceLink - lab-s6100-01 - fortyGigE1/4/11 - Servers35 - eth0 - - - - - lab-s6100-01 - Force10-S6100 - - 10.251.0.190 - - - - ARISTA04T1 - - 10.250.0.5 - - Arista-VM - - - ARISTA03T1 - - 10.250.0.4 - - Arista-VM - - - ARISTA02T1 - - 10.250.0.3 - - Arista-VM - - - ARISTA01T1 - - 10.250.0.2 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/16 - - false - 0 - 0 - 40000 - - - true - 0 - Force10-S6100 - - - - - - - lab-s6100-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - lab-s6100-01 - Force10-S6100 -
diff --git a/ansible/minigraph/lab-s6100-01.t1-64-lag.xml b/ansible/minigraph/lab-s6100-01.t1-64-lag.xml deleted file mode 100644 index 025bef62892..00000000000 --- a/ansible/minigraph/lab-s6100-01.t1-64-lag.xml +++ /dev/null @@ -1,2460 +0,0 @@ - - - - - - false - lab-s6100-01 - 10.0.0.32 - ARISTA01T0 - 10.0.0.33 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::41 - ARISTA01T0 - FC00::42 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.34 - ARISTA02T0 - 10.0.0.35 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::45 - ARISTA02T0 - FC00::46 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.36 - ARISTA03T0 - 10.0.0.37 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::49 - ARISTA03T0 - FC00::4A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::5 - ARISTA03T2 - FC00::6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.38 - ARISTA04T0 - 10.0.0.39 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::4D - ARISTA04T0 - FC00::4E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.40 - ARISTA05T0 - 10.0.0.41 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::51 - ARISTA05T0 - FC00::52 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::9 - ARISTA05T2 - FC00::A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.42 - ARISTA06T0 - 10.0.0.43 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::55 - ARISTA06T0 - FC00::56 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.44 - ARISTA07T0 - 10.0.0.45 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::59 - ARISTA07T0 - FC00::5A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::D - ARISTA07T2 - FC00::E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.46 - ARISTA08T0 - 10.0.0.47 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::5D - ARISTA08T0 - FC00::5E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.48 - ARISTA09T0 - 10.0.0.49 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::61 - ARISTA09T0 - FC00::62 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.50 - ARISTA10T0 - 10.0.0.51 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::65 - ARISTA10T0 - FC00::66 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.52 - ARISTA11T0 - 10.0.0.53 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::69 - ARISTA11T0 - FC00::6A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.54 - ARISTA12T0 - 10.0.0.55 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::6D - ARISTA12T0 - FC00::6E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.56 - ARISTA13T0 - 10.0.0.57 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::71 - ARISTA13T0 - FC00::72 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.58 - ARISTA14T0 - 10.0.0.59 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::75 - ARISTA14T0 - FC00::76 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.60 - ARISTA15T0 - 10.0.0.61 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::79 - ARISTA15T0 - FC00::7A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.62 - ARISTA16T0 - 10.0.0.63 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::7D - ARISTA16T0 - FC00::7E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.64 - ARISTA17T0 - 10.0.0.65 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::81 - ARISTA17T0 - FC00::82 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.66 - ARISTA18T0 - 10.0.0.67 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::85 - ARISTA18T0 - FC00::86 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.68 - ARISTA19T0 - 10.0.0.69 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::89 - ARISTA19T0 - FC00::8A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.70 - ARISTA20T0 - 10.0.0.71 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::8D - ARISTA20T0 - FC00::8E - 1 - 10 - 3 - - - - - 65100 - lab-s6100-01 - - -
10.0.0.33
- - - -
- -
10.0.0.1
- - - -
- -
10.0.0.35
- - - -
- -
10.0.0.37
- - - -
- -
10.0.0.5
- - - -
- -
10.0.0.39
- - - -
- -
10.0.0.41
- - - -
- -
10.0.0.9
- - - -
- -
10.0.0.43
- - - -
- -
10.0.0.45
- - - -
- -
10.0.0.13
- - - -
- -
10.0.0.47
- - - -
- -
10.0.0.49
- - - -
- -
10.0.0.51
- - - -
- -
10.0.0.53
- - - -
- -
10.0.0.55
- - - -
- -
10.0.0.57
- - - -
- -
10.0.0.59
- - - -
- -
10.0.0.61
- - - -
- -
10.0.0.63
- - - -
- -
10.0.0.65
- - - -
- -
10.0.0.67
- - - -
- -
10.0.0.69
- - - -
- -
10.0.0.71
- - - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 64009 - ARISTA09T0 - - - - 64010 - ARISTA10T0 - - - - 64011 - ARISTA11T0 - - - - 64012 - ARISTA12T0 - - - - 64013 - ARISTA13T0 - - - - 64014 - ARISTA14T0 - - - - 64015 - ARISTA15T0 - - - - 64016 - ARISTA16T0 - - - - 64017 - ARISTA17T0 - - - - 64018 - ARISTA18T0 - - - - 64019 - ARISTA19T0 - - - - 64020 - ARISTA20T0 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.190/24 - - 10.251.0.190/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - lab-s6100-01 - - - PortChannel0001 - fortyGigE1/3/3 - - - - PortChannel0002 - fortyGigE1/1/1;fortyGigE1/1/2 - - - - PortChannel0003 - fortyGigE1/3/5 - - - - PortChannel0004 - fortyGigE1/3/6 - - - - PortChannel0005 - fortyGigE1/1/5;fortyGigE1/1/6 - - - - PortChannel0006 - fortyGigE1/3/7 - - - - PortChannel0007 - fortyGigE1/3/8 - - - - PortChannel0008 - fortyGigE1/2/1;fortyGigE1/2/2 - - - - PortChannel0009 - fortyGigE1/3/11 - - - - PortChannel0010 - fortyGigE1/3/13 - - - - PortChannel0011 - fortyGigE1/2/5;fortyGigE1/2/6 - - - - PortChannel0012 - fortyGigE1/3/14 - - - - PortChannel0013 - fortyGigE1/3/15 - - - - PortChannel0014 - fortyGigE1/3/16 - - - - PortChannel0015 - fortyGigE1/4/3 - - - - PortChannel0016 - fortyGigE1/4/5 - - - - PortChannel0017 - fortyGigE1/4/6 - - - - PortChannel0018 - fortyGigE1/4/7 - - - - PortChannel0019 - fortyGigE1/4/8 - - - - PortChannel0020 - fortyGigE1/4/11 - - - - PortChannel0021 - fortyGigE1/4/13 - - - - PortChannel0022 - fortyGigE1/4/14 - - - - PortChannel0023 - fortyGigE1/4/15 - - - - PortChannel0024 - fortyGigE1/4/16 - - - - - - - - - PortChannel0001 - 10.0.0.32/31 - - - - PortChannel0001 - FC00::41/126 - - - - PortChannel0002 - 10.0.0.0/31 - - - - PortChannel0002 - FC00::1/126 - - - - PortChannel0003 - 10.0.0.34/31 - - - - PortChannel0003 - FC00::45/126 - - - - PortChannel0004 - 10.0.0.36/31 - - - - PortChannel0004 - FC00::49/126 - - - - PortChannel0005 - 10.0.0.4/31 - - - - PortChannel0005 - FC00::5/126 - - - - PortChannel0006 - 10.0.0.38/31 - - - - PortChannel0006 - FC00::4D/126 - - - - PortChannel0007 - 10.0.0.40/31 - - - - PortChannel0007 - FC00::51/126 - - - - PortChannel0008 - 10.0.0.8/31 - - - - PortChannel0008 - FC00::9/126 - - - - PortChannel0009 - 10.0.0.42/31 - - - - PortChannel0009 - FC00::55/126 - - - - PortChannel0010 - 10.0.0.44/31 - - - - PortChannel0010 - FC00::59/126 - - - - PortChannel0011 - 10.0.0.12/31 - - - - PortChannel0011 - FC00::D/126 - - - - PortChannel0012 - 10.0.0.46/31 - - - - PortChannel0012 - FC00::5D/126 - - - - PortChannel0013 - 10.0.0.48/31 - - - - PortChannel0013 - FC00::61/126 - - - - PortChannel0014 - 10.0.0.50/31 - - - - PortChannel0014 - FC00::65/126 - - - - PortChannel0015 - 10.0.0.52/31 - - - - PortChannel0015 - FC00::69/126 - - - - PortChannel0016 - 10.0.0.54/31 - - - - PortChannel0016 - FC00::6D/126 - - - - PortChannel0017 - 10.0.0.56/31 - - - - PortChannel0017 - FC00::71/126 - - - - PortChannel0018 - 10.0.0.58/31 - - - - PortChannel0018 - FC00::75/126 - - - - PortChannel0019 - 10.0.0.60/31 - - - - PortChannel0019 - FC00::79/126 - - - - PortChannel0020 - 10.0.0.62/31 - - - - PortChannel0020 - FC00::7D/126 - - - - PortChannel0021 - 10.0.0.64/31 - - - - PortChannel0021 - FC00::81/126 - - - - PortChannel0022 - 10.0.0.66/31 - - - - PortChannel0022 - FC00::85/126 - - - - PortChannel0023 - 10.0.0.68/31 - - - - PortChannel0023 - FC00::89/126 - - - - PortChannel0024 - 10.0.0.70/31 - - - - PortChannel0024 - FC00::8D/126 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel0001;PortChannel0002;PortChannel0003;PortChannel0004;PortChannel0005;PortChannel0006;PortChannel0007;PortChannel0008;PortChannel0009;PortChannel0010;PortChannel0011;PortChannel0012;PortChannel0013;PortChannel0014;PortChannel0015;PortChannel0016;PortChannel0017;PortChannel0018;PortChannel0019;PortChannel0020;PortChannel0021;PortChannel0022;PortChannel0023;PortChannel0024 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/3 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/1 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet2 - lab-s6100-01 - fortyGigE1/1/2 - - - DeviceInterfaceLink - ARISTA02T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/5 - - - DeviceInterfaceLink - ARISTA03T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/6 - - - DeviceInterfaceLink - ARISTA03T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/5 - - - DeviceInterfaceLink - ARISTA03T2 - Ethernet2 - lab-s6100-01 - fortyGigE1/1/6 - - - DeviceInterfaceLink - ARISTA04T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/7 - - - DeviceInterfaceLink - ARISTA05T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/8 - - - DeviceInterfaceLink - ARISTA05T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/1 - - - DeviceInterfaceLink - ARISTA05T2 - Ethernet2 - lab-s6100-01 - fortyGigE1/2/2 - - - DeviceInterfaceLink - ARISTA06T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/11 - - - DeviceInterfaceLink - ARISTA07T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/13 - - - DeviceInterfaceLink - ARISTA07T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/5 - - - DeviceInterfaceLink - ARISTA07T2 - Ethernet2 - lab-s6100-01 - fortyGigE1/2/6 - - - DeviceInterfaceLink - ARISTA08T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/14 - - - DeviceInterfaceLink - ARISTA09T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/15 - - - DeviceInterfaceLink - ARISTA10T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/16 - - - DeviceInterfaceLink - ARISTA11T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/3 - - - DeviceInterfaceLink - ARISTA12T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/5 - - - DeviceInterfaceLink - ARISTA13T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/6 - - - DeviceInterfaceLink - ARISTA14T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/7 - - - DeviceInterfaceLink - ARISTA15T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/8 - - - DeviceInterfaceLink - ARISTA16T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/11 - - - DeviceInterfaceLink - ARISTA17T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/13 - - - DeviceInterfaceLink - ARISTA18T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/14 - - - DeviceInterfaceLink - ARISTA19T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/15 - - - DeviceInterfaceLink - ARISTA20T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/16 - - - - - lab-s6100-01 - Force10-S6100 - - 10.251.0.190 - - - - ARISTA16T0 - - 10.250.0.21 - - Arista-VM - - - ARISTA11T0 - - 10.250.0.16 - - Arista-VM - - - ARISTA10T0 - - 10.250.0.15 - - Arista-VM - - - ARISTA17T0 - - 10.250.0.22 - - Arista-VM - - - ARISTA09T0 - - 10.250.0.14 - - Arista-VM - - - ARISTA20T0 - - 10.250.0.25 - - Arista-VM - - - ARISTA08T0 - - 10.250.0.13 - - Arista-VM - - - ARISTA07T0 - - 10.250.0.12 - - Arista-VM - - - ARISTA07T2 - - 10.250.0.5 - - Arista-VM - - - ARISTA01T2 - - 10.250.0.2 - - Arista-VM - - - ARISTA01T0 - - 10.250.0.6 - - Arista-VM - - - ARISTA05T2 - - 10.250.0.4 - - Arista-VM - - - ARISTA05T0 - - 10.250.0.10 - - Arista-VM - - - ARISTA02T0 - - 10.250.0.7 - - Arista-VM - - - ARISTA03T0 - - 10.250.0.8 - - Arista-VM - - - ARISTA03T2 - - 10.250.0.3 - - Arista-VM - - - ARISTA04T0 - - 10.250.0.9 - - Arista-VM - - - ARISTA18T0 - - 10.250.0.23 - - Arista-VM - - - ARISTA15T0 - - 10.250.0.20 - - Arista-VM - - - ARISTA19T0 - - 10.250.0.24 - - Arista-VM - - - ARISTA14T0 - - 10.250.0.19 - - Arista-VM - - - ARISTA12T0 - - 10.250.0.17 - - Arista-VM - - - ARISTA13T0 - - 10.250.0.18 - - Arista-VM - - - ARISTA06T0 - - 10.250.0.11 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/16 - - false - 0 - 0 - 40000 - - - true - 0 - Force10-S6100 - - - - - - - lab-s6100-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - lab-s6100-01 - Force10-S6100 -
diff --git a/ansible/minigraph/lab-s6100-01.t1-64.xml b/ansible/minigraph/lab-s6100-01.t1-64.xml deleted file mode 100644 index 7e606f07ffb..00000000000 --- a/ansible/minigraph/lab-s6100-01.t1-64.xml +++ /dev/null @@ -1,4472 +0,0 @@ - - - - - - false - lab-s6100-01 - 10.0.0.32 - ARISTA01T0 - 10.0.0.33 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::41 - ARISTA01T0 - FC00::42 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.34 - ARISTA02T0 - 10.0.0.35 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::45 - ARISTA02T0 - FC00::46 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.2 - ARISTA02T2 - 10.0.0.3 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::5 - ARISTA02T2 - FC00::6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.36 - ARISTA03T0 - 10.0.0.37 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::49 - ARISTA03T0 - FC00::4A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::9 - ARISTA03T2 - FC00::A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.38 - ARISTA04T0 - 10.0.0.39 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::4D - ARISTA04T0 - FC00::4E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.6 - ARISTA04T2 - 10.0.0.7 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::D - ARISTA04T2 - FC00::E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.40 - ARISTA05T0 - 10.0.0.41 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::51 - ARISTA05T0 - FC00::52 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::11 - ARISTA05T2 - FC00::12 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.42 - ARISTA06T0 - 10.0.0.43 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::55 - ARISTA06T0 - FC00::56 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.10 - ARISTA06T2 - 10.0.0.11 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::15 - ARISTA06T2 - FC00::16 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.44 - ARISTA07T0 - 10.0.0.45 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::59 - ARISTA07T0 - FC00::5A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::19 - ARISTA07T2 - FC00::1A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.46 - ARISTA08T0 - 10.0.0.47 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::5D - ARISTA08T0 - FC00::5E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.14 - ARISTA08T2 - 10.0.0.15 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::1D - ARISTA08T2 - FC00::1E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.48 - ARISTA09T0 - 10.0.0.49 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::61 - ARISTA09T0 - FC00::62 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::21 - ARISTA09T2 - FC00::22 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.50 - ARISTA10T0 - 10.0.0.51 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::65 - ARISTA10T0 - FC00::66 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.18 - ARISTA10T2 - 10.0.0.19 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::25 - ARISTA10T2 - FC00::26 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.52 - ARISTA11T0 - 10.0.0.53 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::69 - ARISTA11T0 - FC00::6A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::29 - ARISTA11T2 - FC00::2A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.54 - ARISTA12T0 - 10.0.0.55 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::6D - ARISTA12T0 - FC00::6E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.22 - ARISTA12T2 - 10.0.0.23 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::2D - ARISTA12T2 - FC00::2E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.56 - ARISTA13T0 - 10.0.0.57 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::71 - ARISTA13T0 - FC00::72 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::31 - ARISTA13T2 - FC00::32 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.58 - ARISTA14T0 - 10.0.0.59 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::75 - ARISTA14T0 - FC00::76 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.26 - ARISTA14T2 - 10.0.0.27 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::35 - ARISTA14T2 - FC00::36 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.60 - ARISTA15T0 - 10.0.0.61 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::79 - ARISTA15T0 - FC00::7A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::39 - ARISTA15T2 - FC00::3A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.62 - ARISTA16T0 - 10.0.0.63 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::7D - ARISTA16T0 - FC00::7E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.30 - ARISTA16T2 - 10.0.0.31 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::3D - ARISTA16T2 - FC00::3E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.64 - ARISTA17T0 - 10.0.0.65 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::81 - ARISTA17T0 - FC00::82 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.66 - ARISTA18T0 - 10.0.0.67 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::85 - ARISTA18T0 - FC00::86 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.68 - ARISTA19T0 - 10.0.0.69 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::89 - ARISTA19T0 - FC00::8A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.70 - ARISTA20T0 - 10.0.0.71 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::8D - ARISTA20T0 - FC00::8E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.72 - ARISTA21T0 - 10.0.0.73 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::91 - ARISTA21T0 - FC00::92 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.74 - ARISTA22T0 - 10.0.0.75 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::95 - ARISTA22T0 - FC00::96 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.76 - ARISTA23T0 - 10.0.0.77 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::99 - ARISTA23T0 - FC00::9A - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.78 - ARISTA24T0 - 10.0.0.79 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::9D - ARISTA24T0 - FC00::9E - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.80 - ARISTA25T0 - 10.0.0.81 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::A1 - ARISTA25T0 - FC00::A2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.82 - ARISTA26T0 - 10.0.0.83 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::A5 - ARISTA26T0 - FC00::A6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.84 - ARISTA27T0 - 10.0.0.85 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::A9 - ARISTA27T0 - FC00::AA - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.86 - ARISTA28T0 - 10.0.0.87 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::AD - ARISTA28T0 - FC00::AE - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.88 - ARISTA29T0 - 10.0.0.89 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::B1 - ARISTA29T0 - FC00::B2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.90 - ARISTA30T0 - 10.0.0.91 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::B5 - ARISTA30T0 - FC00::B6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.92 - ARISTA31T0 - 10.0.0.93 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::B9 - ARISTA31T0 - FC00::BA - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.94 - ARISTA32T0 - 10.0.0.95 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::BD - ARISTA32T0 - FC00::BE - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.96 - ARISTA33T0 - 10.0.0.97 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::C1 - ARISTA33T0 - FC00::C2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.98 - ARISTA34T0 - 10.0.0.99 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::C5 - ARISTA34T0 - FC00::C6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.100 - ARISTA35T0 - 10.0.0.101 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::C9 - ARISTA35T0 - FC00::CA - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.102 - ARISTA36T0 - 10.0.0.103 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::CD - ARISTA36T0 - FC00::CE - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.104 - ARISTA37T0 - 10.0.0.105 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::D1 - ARISTA37T0 - FC00::D2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.106 - ARISTA38T0 - 10.0.0.107 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::D5 - ARISTA38T0 - FC00::D6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.108 - ARISTA39T0 - 10.0.0.109 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::D9 - ARISTA39T0 - FC00::DA - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.110 - ARISTA40T0 - 10.0.0.111 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::DD - ARISTA40T0 - FC00::DE - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.112 - ARISTA41T0 - 10.0.0.113 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::E1 - ARISTA41T0 - FC00::E2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.114 - ARISTA42T0 - 10.0.0.115 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::E5 - ARISTA42T0 - FC00::E6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.116 - ARISTA43T0 - 10.0.0.117 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::E9 - ARISTA43T0 - FC00::EA - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.118 - ARISTA44T0 - 10.0.0.119 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::ED - ARISTA44T0 - FC00::EE - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.120 - ARISTA45T0 - 10.0.0.121 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::F1 - ARISTA45T0 - FC00::F2 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.122 - ARISTA46T0 - 10.0.0.123 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::F5 - ARISTA46T0 - FC00::F6 - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.124 - ARISTA47T0 - 10.0.0.125 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::F9 - ARISTA47T0 - FC00::FA - 1 - 10 - 3 - - - false - lab-s6100-01 - 10.0.0.126 - ARISTA48T0 - 10.0.0.127 - 1 - 10 - 3 - - - lab-s6100-01 - FC00::FD - ARISTA48T0 - FC00::FE - 1 - 10 - 3 - - - - - 65100 - lab-s6100-01 - - -
10.0.0.33
- - - -
- -
10.0.0.1
- - - -
- -
10.0.0.35
- - - -
- -
10.0.0.3
- - - -
- -
10.0.0.37
- - - -
- -
10.0.0.5
- - - -
- -
10.0.0.39
- - - -
- -
10.0.0.7
- - - -
- -
10.0.0.41
- - - -
- -
10.0.0.9
- - - -
- -
10.0.0.43
- - - -
- -
10.0.0.11
- - - -
- -
10.0.0.45
- - - -
- -
10.0.0.13
- - - -
- -
10.0.0.47
- - - -
- -
10.0.0.15
- - - -
- -
10.0.0.49
- - - -
- -
10.0.0.17
- - - -
- -
10.0.0.51
- - - -
- -
10.0.0.19
- - - -
- -
10.0.0.53
- - - -
- -
10.0.0.21
- - - -
- -
10.0.0.55
- - - -
- -
10.0.0.23
- - - -
- -
10.0.0.57
- - - -
- -
10.0.0.25
- - - -
- -
10.0.0.59
- - - -
- -
10.0.0.27
- - - -
- -
10.0.0.61
- - - -
- -
10.0.0.29
- - - -
- -
10.0.0.63
- - - -
- -
10.0.0.31
- - - -
- -
10.0.0.65
- - - -
- -
10.0.0.67
- - - -
- -
10.0.0.69
- - - -
- -
10.0.0.71
- - - -
- -
10.0.0.73
- - - -
- -
10.0.0.75
- - - -
- -
10.0.0.77
- - - -
- -
10.0.0.79
- - - -
- -
10.0.0.81
- - - -
- -
10.0.0.83
- - - -
- -
10.0.0.85
- - - -
- -
10.0.0.87
- - - -
- -
10.0.0.89
- - - -
- -
10.0.0.91
- - - -
- -
10.0.0.93
- - - -
- -
10.0.0.95
- - - -
- -
10.0.0.97
- - - -
- -
10.0.0.99
- - - -
- -
10.0.0.101
- - - -
- -
10.0.0.103
- - - -
- -
10.0.0.105
- - - -
- -
10.0.0.107
- - - -
- -
10.0.0.109
- - - -
- -
10.0.0.111
- - - -
- -
10.0.0.113
- - - -
- -
10.0.0.115
- - - -
- -
10.0.0.117
- - - -
- -
10.0.0.119
- - - -
- -
10.0.0.121
- - - -
- -
10.0.0.123
- - - -
- -
10.0.0.125
- - - -
- -
10.0.0.127
- - - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 65200 - ARISTA02T2 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 65200 - ARISTA04T2 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 65200 - ARISTA06T2 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 65200 - ARISTA08T2 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 65200 - ARISTA10T2 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 65200 - ARISTA12T2 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 65200 - ARISTA14T2 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - - - 65200 - ARISTA16T2 - - - - 64017 - ARISTA17T0 - - - - 64018 - ARISTA18T0 - - - - 64019 - ARISTA19T0 - - - - 64020 - ARISTA20T0 - - - - 64021 - ARISTA21T0 - - - - 64022 - ARISTA22T0 - - - - 64023 - ARISTA23T0 - - - - 64024 - ARISTA24T0 - - - - 64025 - ARISTA25T0 - - - - 64026 - ARISTA26T0 - - - - 64027 - ARISTA27T0 - - - - 64028 - ARISTA28T0 - - - - 64029 - ARISTA29T0 - - - - 64030 - ARISTA30T0 - - - - 64031 - ARISTA31T0 - - - - 64032 - ARISTA32T0 - - - - 64033 - ARISTA33T0 - - - - 64034 - ARISTA34T0 - - - - 64035 - ARISTA35T0 - - - - 64036 - ARISTA36T0 - - - - 64037 - ARISTA37T0 - - - - 64038 - ARISTA38T0 - - - - 64039 - ARISTA39T0 - - - - 64040 - ARISTA40T0 - - - - 64041 - ARISTA41T0 - - - - 64042 - ARISTA42T0 - - - - 64043 - ARISTA43T0 - - - - 64044 - ARISTA44T0 - - - - 64045 - ARISTA45T0 - - - - 64046 - ARISTA46T0 - - - - 64047 - ARISTA47T0 - - - - 64048 - ARISTA48T0 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.190/24 - - 10.251.0.190/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - lab-s6100-01 - - - - - - - - fortyGigE1/2/1 - 10.0.0.32/31 - - - - fortyGigE1/2/1 - FC00::41/126 - - - - fortyGigE1/1/1 - 10.0.0.0/31 - - - - fortyGigE1/1/1 - FC00::1/126 - - - - fortyGigE1/2/2 - 10.0.0.34/31 - - - - fortyGigE1/2/2 - FC00::45/126 - - - - fortyGigE1/1/2 - 10.0.0.2/31 - - - - fortyGigE1/1/2 - FC00::5/126 - - - - fortyGigE1/2/3 - 10.0.0.36/31 - - - - fortyGigE1/2/3 - FC00::49/126 - - - - fortyGigE1/1/3 - 10.0.0.4/31 - - - - fortyGigE1/1/3 - FC00::9/126 - - - - fortyGigE1/2/4 - 10.0.0.38/31 - - - - fortyGigE1/2/4 - FC00::4D/126 - - - - fortyGigE1/1/4 - 10.0.0.6/31 - - - - fortyGigE1/1/4 - FC00::D/126 - - - - fortyGigE1/2/5 - 10.0.0.40/31 - - - - fortyGigE1/2/5 - FC00::51/126 - - - - fortyGigE1/1/5 - 10.0.0.8/31 - - - - fortyGigE1/1/5 - FC00::11/126 - - - - fortyGigE1/2/6 - 10.0.0.42/31 - - - - fortyGigE1/2/6 - FC00::55/126 - - - - fortyGigE1/1/6 - 10.0.0.10/31 - - - - fortyGigE1/1/6 - FC00::15/126 - - - - fortyGigE1/2/7 - 10.0.0.44/31 - - - - fortyGigE1/2/7 - FC00::59/126 - - - - fortyGigE1/1/7 - 10.0.0.12/31 - - - - fortyGigE1/1/7 - FC00::19/126 - - - - fortyGigE1/2/8 - 10.0.0.46/31 - - - - fortyGigE1/2/8 - FC00::5D/126 - - - - fortyGigE1/1/8 - 10.0.0.14/31 - - - - fortyGigE1/1/8 - FC00::1D/126 - - - - fortyGigE1/2/9 - 10.0.0.48/31 - - - - fortyGigE1/2/9 - FC00::61/126 - - - - fortyGigE1/1/9 - 10.0.0.16/31 - - - - fortyGigE1/1/9 - FC00::21/126 - - - - fortyGigE1/2/10 - 10.0.0.50/31 - - - - fortyGigE1/2/10 - FC00::65/126 - - - - fortyGigE1/1/10 - 10.0.0.18/31 - - - - fortyGigE1/1/10 - FC00::25/126 - - - - fortyGigE1/2/11 - 10.0.0.52/31 - - - - fortyGigE1/2/11 - FC00::69/126 - - - - fortyGigE1/1/11 - 10.0.0.20/31 - - - - fortyGigE1/1/11 - FC00::29/126 - - - - fortyGigE1/2/12 - 10.0.0.54/31 - - - - fortyGigE1/2/12 - FC00::6D/126 - - - - fortyGigE1/1/12 - 10.0.0.22/31 - - - - fortyGigE1/1/12 - FC00::2D/126 - - - - fortyGigE1/2/13 - 10.0.0.56/31 - - - - fortyGigE1/2/13 - FC00::71/126 - - - - fortyGigE1/1/13 - 10.0.0.24/31 - - - - fortyGigE1/1/13 - FC00::31/126 - - - - fortyGigE1/2/14 - 10.0.0.58/31 - - - - fortyGigE1/2/14 - FC00::75/126 - - - - fortyGigE1/1/14 - 10.0.0.26/31 - - - - fortyGigE1/1/14 - FC00::35/126 - - - - fortyGigE1/2/15 - 10.0.0.60/31 - - - - fortyGigE1/2/15 - FC00::79/126 - - - - fortyGigE1/1/15 - 10.0.0.28/31 - - - - fortyGigE1/1/15 - FC00::39/126 - - - - fortyGigE1/2/16 - 10.0.0.62/31 - - - - fortyGigE1/2/16 - FC00::7D/126 - - - - fortyGigE1/1/16 - 10.0.0.30/31 - - - - fortyGigE1/1/16 - FC00::3D/126 - - - - fortyGigE1/3/1 - 10.0.0.64/31 - - - - fortyGigE1/3/1 - FC00::81/126 - - - - fortyGigE1/3/2 - 10.0.0.66/31 - - - - fortyGigE1/3/2 - FC00::85/126 - - - - fortyGigE1/3/3 - 10.0.0.68/31 - - - - fortyGigE1/3/3 - FC00::89/126 - - - - fortyGigE1/3/4 - 10.0.0.70/31 - - - - fortyGigE1/3/4 - FC00::8D/126 - - - - fortyGigE1/3/5 - 10.0.0.72/31 - - - - fortyGigE1/3/5 - FC00::91/126 - - - - fortyGigE1/3/6 - 10.0.0.74/31 - - - - fortyGigE1/3/6 - FC00::95/126 - - - - fortyGigE1/3/7 - 10.0.0.76/31 - - - - fortyGigE1/3/7 - FC00::99/126 - - - - fortyGigE1/3/8 - 10.0.0.78/31 - - - - fortyGigE1/3/8 - FC00::9D/126 - - - - fortyGigE1/3/9 - 10.0.0.80/31 - - - - fortyGigE1/3/9 - FC00::A1/126 - - - - fortyGigE1/3/10 - 10.0.0.82/31 - - - - fortyGigE1/3/10 - FC00::A5/126 - - - - fortyGigE1/3/11 - 10.0.0.84/31 - - - - fortyGigE1/3/11 - FC00::A9/126 - - - - fortyGigE1/3/12 - 10.0.0.86/31 - - - - fortyGigE1/3/12 - FC00::AD/126 - - - - fortyGigE1/3/13 - 10.0.0.88/31 - - - - fortyGigE1/3/13 - FC00::B1/126 - - - - fortyGigE1/3/14 - 10.0.0.90/31 - - - - fortyGigE1/3/14 - FC00::B5/126 - - - - fortyGigE1/3/15 - 10.0.0.92/31 - - - - fortyGigE1/3/15 - FC00::B9/126 - - - - fortyGigE1/3/16 - 10.0.0.94/31 - - - - fortyGigE1/3/16 - FC00::BD/126 - - - - fortyGigE1/4/1 - 10.0.0.96/31 - - - - fortyGigE1/4/1 - FC00::C1/126 - - - - fortyGigE1/4/2 - 10.0.0.98/31 - - - - fortyGigE1/4/2 - FC00::C5/126 - - - - fortyGigE1/4/3 - 10.0.0.100/31 - - - - fortyGigE1/4/3 - FC00::C9/126 - - - - fortyGigE1/4/4 - 10.0.0.102/31 - - - - fortyGigE1/4/4 - FC00::CD/126 - - - - fortyGigE1/4/5 - 10.0.0.104/31 - - - - fortyGigE1/4/5 - FC00::D1/126 - - - - fortyGigE1/4/6 - 10.0.0.106/31 - - - - fortyGigE1/4/6 - FC00::D5/126 - - - - fortyGigE1/4/7 - 10.0.0.108/31 - - - - fortyGigE1/4/7 - FC00::D9/126 - - - - fortyGigE1/4/8 - 10.0.0.110/31 - - - - fortyGigE1/4/8 - FC00::DD/126 - - - - fortyGigE1/4/9 - 10.0.0.112/31 - - - - fortyGigE1/4/9 - FC00::E1/126 - - - - fortyGigE1/4/10 - 10.0.0.114/31 - - - - fortyGigE1/4/10 - FC00::E5/126 - - - - fortyGigE1/4/11 - 10.0.0.116/31 - - - - fortyGigE1/4/11 - FC00::E9/126 - - - - fortyGigE1/4/12 - 10.0.0.118/31 - - - - fortyGigE1/4/12 - FC00::ED/126 - - - - fortyGigE1/4/13 - 10.0.0.120/31 - - - - fortyGigE1/4/13 - FC00::F1/126 - - - - fortyGigE1/4/14 - 10.0.0.122/31 - - - - fortyGigE1/4/14 - FC00::F5/126 - - - - fortyGigE1/4/15 - 10.0.0.124/31 - - - - fortyGigE1/4/15 - FC00::F9/126 - - - - fortyGigE1/4/16 - 10.0.0.126/31 - - - - fortyGigE1/4/16 - FC00::FD/126 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - fortyGigE1/2/1;fortyGigE1/1/1;fortyGigE1/2/2;fortyGigE1/1/2;fortyGigE1/2/3;fortyGigE1/1/3;fortyGigE1/2/4;fortyGigE1/1/4;fortyGigE1/2/5;fortyGigE1/1/5;fortyGigE1/2/6;fortyGigE1/1/6;fortyGigE1/2/7;fortyGigE1/1/7;fortyGigE1/2/8;fortyGigE1/1/8;fortyGigE1/2/9;fortyGigE1/1/9;fortyGigE1/2/10;fortyGigE1/1/10;fortyGigE1/2/11;fortyGigE1/1/11;fortyGigE1/2/12;fortyGigE1/1/12;fortyGigE1/2/13;fortyGigE1/1/13;fortyGigE1/2/14;fortyGigE1/1/14;fortyGigE1/2/15;fortyGigE1/1/15;fortyGigE1/2/16;fortyGigE1/1/16;fortyGigE1/3/1;fortyGigE1/3/2;fortyGigE1/3/3;fortyGigE1/3/4;fortyGigE1/3/5;fortyGigE1/3/6;fortyGigE1/3/7;fortyGigE1/3/8;fortyGigE1/3/9;fortyGigE1/3/10;fortyGigE1/3/11;fortyGigE1/3/12;fortyGigE1/3/13;fortyGigE1/3/14;fortyGigE1/3/15;fortyGigE1/3/16;fortyGigE1/4/1;fortyGigE1/4/2;fortyGigE1/4/3;fortyGigE1/4/4;fortyGigE1/4/5;fortyGigE1/4/6;fortyGigE1/4/7;fortyGigE1/4/8;fortyGigE1/4/9;fortyGigE1/4/10;fortyGigE1/4/11;fortyGigE1/4/12;fortyGigE1/4/13;fortyGigE1/4/14;fortyGigE1/4/15;fortyGigE1/4/16 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/1 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/1 - - - DeviceInterfaceLink - ARISTA02T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/2 - - - DeviceInterfaceLink - ARISTA02T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/2 - - - DeviceInterfaceLink - ARISTA03T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/3 - - - DeviceInterfaceLink - ARISTA03T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/3 - - - DeviceInterfaceLink - ARISTA04T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/4 - - - DeviceInterfaceLink - ARISTA04T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/4 - - - DeviceInterfaceLink - ARISTA05T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/5 - - - DeviceInterfaceLink - ARISTA05T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/5 - - - DeviceInterfaceLink - ARISTA06T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/6 - - - DeviceInterfaceLink - ARISTA06T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/6 - - - DeviceInterfaceLink - ARISTA07T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/7 - - - DeviceInterfaceLink - ARISTA07T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/7 - - - DeviceInterfaceLink - ARISTA08T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/8 - - - DeviceInterfaceLink - ARISTA08T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/8 - - - DeviceInterfaceLink - ARISTA09T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/9 - - - DeviceInterfaceLink - ARISTA09T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/9 - - - DeviceInterfaceLink - ARISTA10T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/10 - - - DeviceInterfaceLink - ARISTA10T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/10 - - - DeviceInterfaceLink - ARISTA11T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/11 - - - DeviceInterfaceLink - ARISTA11T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/11 - - - DeviceInterfaceLink - ARISTA12T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/12 - - - DeviceInterfaceLink - ARISTA12T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/12 - - - DeviceInterfaceLink - ARISTA13T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/13 - - - DeviceInterfaceLink - ARISTA13T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/13 - - - DeviceInterfaceLink - ARISTA14T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/14 - - - DeviceInterfaceLink - ARISTA14T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/14 - - - DeviceInterfaceLink - ARISTA15T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/15 - - - DeviceInterfaceLink - ARISTA15T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/15 - - - DeviceInterfaceLink - ARISTA16T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/2/16 - - - DeviceInterfaceLink - ARISTA16T2 - Ethernet1 - lab-s6100-01 - fortyGigE1/1/16 - - - DeviceInterfaceLink - ARISTA17T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/1 - - - DeviceInterfaceLink - ARISTA18T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/2 - - - DeviceInterfaceLink - ARISTA19T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/3 - - - DeviceInterfaceLink - ARISTA20T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/4 - - - DeviceInterfaceLink - ARISTA21T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/5 - - - DeviceInterfaceLink - ARISTA22T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/6 - - - DeviceInterfaceLink - ARISTA23T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/7 - - - DeviceInterfaceLink - ARISTA24T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/8 - - - DeviceInterfaceLink - ARISTA25T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/9 - - - DeviceInterfaceLink - ARISTA26T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/10 - - - DeviceInterfaceLink - ARISTA27T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/11 - - - DeviceInterfaceLink - ARISTA28T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/12 - - - DeviceInterfaceLink - ARISTA29T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/13 - - - DeviceInterfaceLink - ARISTA30T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/14 - - - DeviceInterfaceLink - ARISTA31T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/15 - - - DeviceInterfaceLink - ARISTA32T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/3/16 - - - DeviceInterfaceLink - ARISTA33T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/1 - - - DeviceInterfaceLink - ARISTA34T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/2 - - - DeviceInterfaceLink - ARISTA35T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/3 - - - DeviceInterfaceLink - ARISTA36T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/4 - - - DeviceInterfaceLink - ARISTA37T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/5 - - - DeviceInterfaceLink - ARISTA38T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/6 - - - DeviceInterfaceLink - ARISTA39T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/7 - - - DeviceInterfaceLink - ARISTA40T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/8 - - - DeviceInterfaceLink - ARISTA41T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/9 - - - DeviceInterfaceLink - ARISTA42T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/10 - - - DeviceInterfaceLink - ARISTA43T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/11 - - - DeviceInterfaceLink - ARISTA44T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/12 - - - DeviceInterfaceLink - ARISTA45T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/13 - - - DeviceInterfaceLink - ARISTA46T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/14 - - - DeviceInterfaceLink - ARISTA47T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/15 - - - DeviceInterfaceLink - ARISTA48T0 - Ethernet1 - lab-s6100-01 - fortyGigE1/4/16 - - - - - lab-s6100-01 - Force10-S6100 - - 10.251.0.190 - - - - ARISTA04T0 - - 10.250.0.21 - - Arista-VM - - - ARISTA16T2 - - 10.250.0.17 - - Arista-VM - - - ARISTA40T0 - - 10.250.0.57 - - Arista-VM - - - ARISTA16T0 - - 10.250.0.33 - - Arista-VM - - - ARISTA11T0 - - 10.250.0.28 - - Arista-VM - - - ARISTA10T0 - - 10.250.0.27 - - Arista-VM - - - ARISTA11T2 - - 10.250.0.12 - - Arista-VM - - - ARISTA10T2 - - 10.250.0.11 - - Arista-VM - - - ARISTA43T0 - - 10.250.0.60 - - Arista-VM - - - ARISTA17T0 - - 10.250.0.34 - - Arista-VM - - - ARISTA45T0 - - 10.250.0.62 - - Arista-VM - - - ARISTA21T0 - - 10.250.0.38 - - Arista-VM - - - ARISTA05T0 - - 10.250.0.22 - - Arista-VM - - - ARISTA44T0 - - 10.250.0.61 - - Arista-VM - - - ARISTA02T0 - - 10.250.0.19 - - Arista-VM - - - ARISTA46T0 - - 10.250.0.63 - - Arista-VM - - - ARISTA09T2 - - 10.250.0.10 - - Arista-VM - - - ARISTA09T0 - - 10.250.0.26 - - Arista-VM - - - ARISTA06T0 - - 10.250.0.23 - - Arista-VM - - - ARISTA06T2 - - 10.250.0.7 - - Arista-VM - - - ARISTA08T2 - - 10.250.0.9 - - Arista-VM - - - ARISTA08T0 - - 10.250.0.25 - - Arista-VM - - - ARISTA38T0 - - 10.250.0.55 - - Arista-VM - - - ARISTA39T0 - - 10.250.0.56 - - Arista-VM - - - ARISTA07T0 - - 10.250.0.24 - - Arista-VM - - - ARISTA07T2 - - 10.250.0.8 - - Arista-VM - - - ARISTA01T2 - - 10.250.0.2 - - Arista-VM - - - ARISTA03T0 - - 10.250.0.20 - - Arista-VM - - - ARISTA01T0 - - 10.250.0.18 - - Arista-VM - - - ARISTA37T0 - - 10.250.0.54 - - Arista-VM - - - ARISTA48T0 - - 10.250.0.65 - - Arista-VM - - - ARISTA34T0 - - 10.250.0.51 - - Arista-VM - - - ARISTA32T0 - - 10.250.0.49 - - Arista-VM - - - ARISTA26T0 - - 10.250.0.43 - - Arista-VM - - - ARISTA20T0 - - 10.250.0.37 - - Arista-VM - - - ARISTA35T0 - - 10.250.0.52 - - Arista-VM - - - ARISTA23T0 - - 10.250.0.40 - - Arista-VM - - - ARISTA24T0 - - 10.250.0.41 - - Arista-VM - - - ARISTA25T0 - - 10.250.0.42 - - Arista-VM - - - ARISTA02T2 - - 10.250.0.3 - - Arista-VM - - - ARISTA03T2 - - 10.250.0.4 - - Arista-VM - - - ARISTA28T0 - - 10.250.0.45 - - Arista-VM - - - ARISTA36T0 - - 10.250.0.53 - - Arista-VM - - - ARISTA22T0 - - 10.250.0.39 - - Arista-VM - - - ARISTA27T0 - - 10.250.0.44 - - Arista-VM - - - ARISTA18T0 - - 10.250.0.35 - - Arista-VM - - - ARISTA30T0 - - 10.250.0.47 - - Arista-VM - - - ARISTA05T2 - - 10.250.0.6 - - Arista-VM - - - ARISTA31T0 - - 10.250.0.48 - - Arista-VM - - - ARISTA29T0 - - 10.250.0.46 - - Arista-VM - - - ARISTA33T0 - - 10.250.0.50 - - Arista-VM - - - ARISTA15T0 - - 10.250.0.32 - - Arista-VM - - - ARISTA15T2 - - 10.250.0.16 - - Arista-VM - - - ARISTA04T2 - - 10.250.0.5 - - Arista-VM - - - ARISTA19T0 - - 10.250.0.36 - - Arista-VM - - - ARISTA14T0 - - 10.250.0.31 - - Arista-VM - - - ARISTA14T2 - - 10.250.0.15 - - Arista-VM - - - ARISTA12T2 - - 10.250.0.13 - - Arista-VM - - - ARISTA12T0 - - 10.250.0.29 - - Arista-VM - - - ARISTA42T0 - - 10.250.0.59 - - Arista-VM - - - ARISTA41T0 - - 10.250.0.58 - - Arista-VM - - - ARISTA13T2 - - 10.250.0.14 - - Arista-VM - - - ARISTA47T0 - - 10.250.0.64 - - Arista-VM - - - ARISTA13T0 - - 10.250.0.30 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/16 - - false - 0 - 0 - 40000 - - - true - 0 - Force10-S6100 - - - - - - - lab-s6100-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - lab-s6100-01 - Force10-S6100 -
diff --git a/ansible/minigraph/str-msn2700-01.t0.xml b/ansible/minigraph/str-msn2700-01.t0.xml deleted file mode 100644 index c784dbd9ba6..00000000000 --- a/ansible/minigraph/str-msn2700-01.t0.xml +++ /dev/null @@ -1,1043 +0,0 @@ - - - - - - false - str-msn2700-01 - 10.0.0.56 - ARISTA01T1 - 10.0.0.57 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::71 - ARISTA01T1 - FC00::72 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.58 - ARISTA02T1 - 10.0.0.59 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::75 - ARISTA02T1 - FC00::76 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.60 - ARISTA03T1 - 10.0.0.61 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::79 - ARISTA03T1 - FC00::7A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.62 - ARISTA04T1 - 10.0.0.63 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::7D - ARISTA04T1 - FC00::7E - 1 - 10 - 3 - - - - - 65100 - str-msn2700-01 - - -
10.0.0.57
- - - -
- -
10.0.0.59
- - - -
- -
10.0.0.61
- - - -
- -
10.0.0.63
- - - -
- - BGPPeer -
10.1.0.32
- - - - BGPSLBPassive - 10.255.0.0/25 -
- - BGPPeer -
10.1.0.32
- - - - BGPVac - 192.168.0.0/21 -
-
- -
- - 64600 - ARISTA01T1 - - - - 64600 - ARISTA02T1 - - - - 64600 - ARISTA03T1 - - - - 64600 - ARISTA04T1 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.188/24 - - 10.251.0.188/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - str-msn2700-01 - - - PortChannel0001 - etp29 - - - - PortChannel0002 - etp30 - - - - PortChannel0003 - etp31 - - - - PortChannel0004 - etp32 - - - - - - Vlan1000 - etp2;etp3;etp4;etp5;etp6;etp7;etp8;etp9;etp10;etp11;etp12;etp13;etp14;etp15;etp16;etp17;etp18;etp19;etp20;etp21;etp22;etp23;etp24;etp25 - False - 0.0.0.0/0 - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - 1000 - 1000 - 192.168.0.0/21 - - - - - - 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 - - - - Vlan1000 - 192.168.0.1/21 - - - - Vlan1000 - fc02:1000::1/64 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel0001;PortChannel0002;PortChannel0003;PortChannel0004 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T1 - Ethernet1 - str-msn2700-01 - etp29 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet1 - str-msn2700-01 - etp30 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet1 - str-msn2700-01 - etp31 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet1 - str-msn2700-01 - etp32 - - - DeviceInterfaceLink - str-msn2700-01 - etp2 - Servers0 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp3 - Servers1 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp4 - Servers2 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp5 - Servers3 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp6 - Servers4 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp7 - Servers5 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp8 - Servers6 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp9 - Servers7 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp10 - Servers8 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp11 - Servers9 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp12 - Servers10 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp13 - Servers11 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp14 - Servers12 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp15 - Servers13 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp16 - Servers14 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp17 - Servers15 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp18 - Servers16 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp19 - Servers17 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp20 - Servers18 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp21 - Servers19 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp22 - Servers20 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp23 - Servers21 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp24 - Servers22 - eth0 - - - DeviceInterfaceLink - str-msn2700-01 - etp25 - Servers23 - eth0 - - - - - str-msn2700-01 - ACS-MSN2700 - - 10.251.0.188 - - - - ARISTA04T1 - - 10.250.0.5 - - Arista-VM - - - ARISTA03T1 - - 10.250.0.4 - - Arista-VM - - - ARISTA02T1 - - 10.250.0.3 - - Arista-VM - - - ARISTA01T1 - - 10.250.0.2 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - etp1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp17 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp18 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp19 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp20 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp21 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp22 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp23 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp24 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp25 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp26 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp27 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp28 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp29 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp30 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp31 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp32 - - false - 0 - 0 - 40000 - - - true - 0 - ACS-MSN2700 - - - - - - - str-msn2700-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - str-msn2700-01 - ACS-MSN2700 -
diff --git a/ansible/minigraph/str-msn2700-01.t1-lag.xml b/ansible/minigraph/str-msn2700-01.t1-lag.xml deleted file mode 100644 index d71472c4637..00000000000 --- a/ansible/minigraph/str-msn2700-01.t1-lag.xml +++ /dev/null @@ -1,1992 +0,0 @@ - - - - - - false - str-msn2700-01 - 10.0.0.32 - ARISTA01T0 - 10.0.0.33 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::41 - ARISTA01T0 - FC00::42 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.34 - ARISTA02T0 - 10.0.0.35 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::45 - ARISTA02T0 - FC00::46 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.36 - ARISTA03T0 - 10.0.0.37 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::49 - ARISTA03T0 - FC00::4A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::9 - ARISTA03T2 - FC00::A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.38 - ARISTA04T0 - 10.0.0.39 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::4D - ARISTA04T0 - FC00::4E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.40 - ARISTA05T0 - 10.0.0.41 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::51 - ARISTA05T0 - FC00::52 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::11 - ARISTA05T2 - FC00::12 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.42 - ARISTA06T0 - 10.0.0.43 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::55 - ARISTA06T0 - FC00::56 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.44 - ARISTA07T0 - 10.0.0.45 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::59 - ARISTA07T0 - FC00::5A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::19 - ARISTA07T2 - FC00::1A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.46 - ARISTA08T0 - 10.0.0.47 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::5D - ARISTA08T0 - FC00::5E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.48 - ARISTA09T0 - 10.0.0.49 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::61 - ARISTA09T0 - FC00::62 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::21 - ARISTA09T2 - FC00::22 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.50 - ARISTA10T0 - 10.0.0.51 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::65 - ARISTA10T0 - FC00::66 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.52 - ARISTA11T0 - 10.0.0.53 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::69 - ARISTA11T0 - FC00::6A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::29 - ARISTA11T2 - FC00::2A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.54 - ARISTA12T0 - 10.0.0.55 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::6D - ARISTA12T0 - FC00::6E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.56 - ARISTA13T0 - 10.0.0.57 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::71 - ARISTA13T0 - FC00::72 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::31 - ARISTA13T2 - FC00::32 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.58 - ARISTA14T0 - 10.0.0.59 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::75 - ARISTA14T0 - FC00::76 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.60 - ARISTA15T0 - 10.0.0.61 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::79 - ARISTA15T0 - FC00::7A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::39 - ARISTA15T2 - FC00::3A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.62 - ARISTA16T0 - 10.0.0.63 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::7D - ARISTA16T0 - FC00::7E - 1 - 10 - 3 - - - - - 65100 - str-msn2700-01 - - -
10.0.0.33
- - - -
- -
10.0.0.1
- - - -
- -
10.0.0.35
- - - -
- -
10.0.0.37
- - - -
- -
10.0.0.5
- - - -
- -
10.0.0.39
- - - -
- -
10.0.0.41
- - - -
- -
10.0.0.9
- - - -
- -
10.0.0.43
- - - -
- -
10.0.0.45
- - - -
- -
10.0.0.13
- - - -
- -
10.0.0.47
- - - -
- -
10.0.0.49
- - - -
- -
10.0.0.17
- - - -
- -
10.0.0.51
- - - -
- -
10.0.0.53
- - - -
- -
10.0.0.21
- - - -
- -
10.0.0.55
- - - -
- -
10.0.0.57
- - - -
- -
10.0.0.25
- - - -
- -
10.0.0.59
- - - -
- -
10.0.0.61
- - - -
- -
10.0.0.29
- - - -
- -
10.0.0.63
- - - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.188/24 - - 10.251.0.188/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - str-msn2700-01 - - - PortChannel0002 - etp1;etp2 - - - - PortChannel0005 - etp3;etp4 - - - - PortChannel0008 - etp5;etp6 - - - - PortChannel0011 - etp7;etp8 - - - - PortChannel0014 - etp9;etp10 - - - - PortChannel0017 - etp11;etp12 - - - - PortChannel0020 - etp13;etp14 - - - - PortChannel0023 - etp15;etp16 - - - - - - - - - etp17 - 10.0.0.32/31 - - - - etp17 - FC00::41/126 - - - - PortChannel0002 - 10.0.0.0/31 - - - - PortChannel0002 - FC00::1/126 - - - - etp18 - 10.0.0.34/31 - - - - etp18 - FC00::45/126 - - - - etp19 - 10.0.0.36/31 - - - - etp19 - FC00::49/126 - - - - PortChannel0005 - 10.0.0.4/31 - - - - PortChannel0005 - FC00::9/126 - - - - etp20 - 10.0.0.38/31 - - - - etp20 - FC00::4D/126 - - - - etp21 - 10.0.0.40/31 - - - - etp21 - FC00::51/126 - - - - PortChannel0008 - 10.0.0.8/31 - - - - PortChannel0008 - FC00::11/126 - - - - etp22 - 10.0.0.42/31 - - - - etp22 - FC00::55/126 - - - - etp23 - 10.0.0.44/31 - - - - etp23 - FC00::59/126 - - - - PortChannel0011 - 10.0.0.12/31 - - - - PortChannel0011 - FC00::19/126 - - - - etp24 - 10.0.0.46/31 - - - - etp24 - FC00::5D/126 - - - - etp25 - 10.0.0.48/31 - - - - etp25 - FC00::61/126 - - - - PortChannel0014 - 10.0.0.16/31 - - - - PortChannel0014 - FC00::21/126 - - - - etp26 - 10.0.0.50/31 - - - - etp26 - FC00::65/126 - - - - etp27 - 10.0.0.52/31 - - - - etp27 - FC00::69/126 - - - - PortChannel0017 - 10.0.0.20/31 - - - - PortChannel0017 - FC00::29/126 - - - - etp28 - 10.0.0.54/31 - - - - etp28 - FC00::6D/126 - - - - etp29 - 10.0.0.56/31 - - - - etp29 - FC00::71/126 - - - - PortChannel0020 - 10.0.0.24/31 - - - - PortChannel0020 - FC00::31/126 - - - - etp30 - 10.0.0.58/31 - - - - etp30 - FC00::75/126 - - - - etp31 - 10.0.0.60/31 - - - - etp31 - FC00::79/126 - - - - PortChannel0023 - 10.0.0.28/31 - - - - PortChannel0023 - FC00::39/126 - - - - etp32 - 10.0.0.62/31 - - - - etp32 - FC00::7D/126 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel0002;PortChannel0005;PortChannel0008;PortChannel0011;PortChannel0014;PortChannel0017;PortChannel0020;PortChannel0023;etp17;etp18;etp19;etp20;etp21;etp22;etp23;etp24;etp25;etp26;etp27;etp28;etp29;etp30;etp31;etp32 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T0 - Ethernet1 - str-msn2700-01 - etp17 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet1 - str-msn2700-01 - etp1 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet2 - str-msn2700-01 - etp2 - - - DeviceInterfaceLink - ARISTA02T0 - Ethernet1 - str-msn2700-01 - etp18 - - - DeviceInterfaceLink - ARISTA03T0 - Ethernet1 - str-msn2700-01 - etp19 - - - DeviceInterfaceLink - ARISTA03T2 - Ethernet1 - str-msn2700-01 - etp3 - - - DeviceInterfaceLink - ARISTA03T2 - Ethernet2 - str-msn2700-01 - etp4 - - - DeviceInterfaceLink - ARISTA04T0 - Ethernet1 - str-msn2700-01 - etp20 - - - DeviceInterfaceLink - ARISTA05T0 - Ethernet1 - str-msn2700-01 - etp21 - - - DeviceInterfaceLink - ARISTA05T2 - Ethernet1 - str-msn2700-01 - etp5 - - - DeviceInterfaceLink - ARISTA05T2 - Ethernet2 - str-msn2700-01 - etp6 - - - DeviceInterfaceLink - ARISTA06T0 - Ethernet1 - str-msn2700-01 - etp22 - - - DeviceInterfaceLink - ARISTA07T0 - Ethernet1 - str-msn2700-01 - etp23 - - - DeviceInterfaceLink - ARISTA07T2 - Ethernet1 - str-msn2700-01 - etp7 - - - DeviceInterfaceLink - ARISTA07T2 - Ethernet2 - str-msn2700-01 - etp8 - - - DeviceInterfaceLink - ARISTA08T0 - Ethernet1 - str-msn2700-01 - etp24 - - - DeviceInterfaceLink - ARISTA09T0 - Ethernet1 - str-msn2700-01 - etp25 - - - DeviceInterfaceLink - ARISTA09T2 - Ethernet1 - str-msn2700-01 - etp9 - - - DeviceInterfaceLink - ARISTA09T2 - Ethernet2 - str-msn2700-01 - etp10 - - - DeviceInterfaceLink - ARISTA10T0 - Ethernet1 - str-msn2700-01 - etp26 - - - DeviceInterfaceLink - ARISTA11T0 - Ethernet1 - str-msn2700-01 - etp27 - - - DeviceInterfaceLink - ARISTA11T2 - Ethernet1 - str-msn2700-01 - etp11 - - - DeviceInterfaceLink - ARISTA11T2 - Ethernet2 - str-msn2700-01 - etp12 - - - DeviceInterfaceLink - ARISTA12T0 - Ethernet1 - str-msn2700-01 - etp28 - - - DeviceInterfaceLink - ARISTA13T0 - Ethernet1 - str-msn2700-01 - etp29 - - - DeviceInterfaceLink - ARISTA13T2 - Ethernet1 - str-msn2700-01 - etp13 - - - DeviceInterfaceLink - ARISTA13T2 - Ethernet2 - str-msn2700-01 - etp14 - - - DeviceInterfaceLink - ARISTA14T0 - Ethernet1 - str-msn2700-01 - etp30 - - - DeviceInterfaceLink - ARISTA15T0 - Ethernet1 - str-msn2700-01 - etp31 - - - DeviceInterfaceLink - ARISTA15T2 - Ethernet1 - str-msn2700-01 - etp15 - - - DeviceInterfaceLink - ARISTA15T2 - Ethernet2 - str-msn2700-01 - etp16 - - - DeviceInterfaceLink - ARISTA16T0 - Ethernet1 - str-msn2700-01 - etp32 - - - - - str-msn2700-01 - ACS-MSN2700 - - 10.251.0.188 - - - - ARISTA16T0 - - 10.250.0.25 - - Arista-VM - - - ARISTA11T0 - - 10.250.0.20 - - Arista-VM - - - ARISTA10T0 - - 10.250.0.19 - - Arista-VM - - - ARISTA11T2 - - 10.250.0.7 - - Arista-VM - - - ARISTA09T2 - - 10.250.0.6 - - Arista-VM - - - ARISTA09T0 - - 10.250.0.18 - - Arista-VM - - - ARISTA06T0 - - 10.250.0.15 - - Arista-VM - - - ARISTA08T0 - - 10.250.0.17 - - Arista-VM - - - ARISTA07T0 - - 10.250.0.16 - - Arista-VM - - - ARISTA07T2 - - 10.250.0.5 - - Arista-VM - - - ARISTA01T2 - - 10.250.0.2 - - Arista-VM - - - ARISTA01T0 - - 10.250.0.10 - - Arista-VM - - - ARISTA05T2 - - 10.250.0.4 - - Arista-VM - - - ARISTA05T0 - - 10.250.0.14 - - Arista-VM - - - ARISTA02T0 - - 10.250.0.11 - - Arista-VM - - - ARISTA03T0 - - 10.250.0.12 - - Arista-VM - - - ARISTA03T2 - - 10.250.0.3 - - Arista-VM - - - ARISTA04T0 - - 10.250.0.13 - - Arista-VM - - - ARISTA15T0 - - 10.250.0.24 - - Arista-VM - - - ARISTA15T2 - - 10.250.0.9 - - Arista-VM - - - ARISTA14T0 - - 10.250.0.23 - - Arista-VM - - - ARISTA12T0 - - 10.250.0.21 - - Arista-VM - - - ARISTA13T2 - - 10.250.0.8 - - Arista-VM - - - ARISTA13T0 - - 10.250.0.22 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - etp1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp17 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp18 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp19 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp20 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp21 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp22 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp23 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp24 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp25 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp26 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp27 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp28 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp29 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp30 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp31 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp32 - - false - 0 - 0 - 40000 - - - true - 0 - ACS-MSN2700 - - - - - - - str-msn2700-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - str-msn2700-01 - ACS-MSN2700 -
diff --git a/ansible/minigraph/str-msn2700-01.t1.xml b/ansible/minigraph/str-msn2700-01.t1.xml deleted file mode 100644 index 9a2e4de13f6..00000000000 --- a/ansible/minigraph/str-msn2700-01.t1.xml +++ /dev/null @@ -1,2328 +0,0 @@ - - - - - - false - str-msn2700-01 - 10.0.0.32 - ARISTA01T0 - 10.0.0.33 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::41 - ARISTA01T0 - FC00::42 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.34 - ARISTA02T0 - 10.0.0.35 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::45 - ARISTA02T0 - FC00::46 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.2 - ARISTA02T2 - 10.0.0.3 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::5 - ARISTA02T2 - FC00::6 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.36 - ARISTA03T0 - 10.0.0.37 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::49 - ARISTA03T0 - FC00::4A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::9 - ARISTA03T2 - FC00::A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.38 - ARISTA04T0 - 10.0.0.39 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::4D - ARISTA04T0 - FC00::4E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.6 - ARISTA04T2 - 10.0.0.7 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::D - ARISTA04T2 - FC00::E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.40 - ARISTA05T0 - 10.0.0.41 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::51 - ARISTA05T0 - FC00::52 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::11 - ARISTA05T2 - FC00::12 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.42 - ARISTA06T0 - 10.0.0.43 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::55 - ARISTA06T0 - FC00::56 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.10 - ARISTA06T2 - 10.0.0.11 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::15 - ARISTA06T2 - FC00::16 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.44 - ARISTA07T0 - 10.0.0.45 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::59 - ARISTA07T0 - FC00::5A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::19 - ARISTA07T2 - FC00::1A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.46 - ARISTA08T0 - 10.0.0.47 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::5D - ARISTA08T0 - FC00::5E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.14 - ARISTA08T2 - 10.0.0.15 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::1D - ARISTA08T2 - FC00::1E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.48 - ARISTA09T0 - 10.0.0.49 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::61 - ARISTA09T0 - FC00::62 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::21 - ARISTA09T2 - FC00::22 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.50 - ARISTA10T0 - 10.0.0.51 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::65 - ARISTA10T0 - FC00::66 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.18 - ARISTA10T2 - 10.0.0.19 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::25 - ARISTA10T2 - FC00::26 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.52 - ARISTA11T0 - 10.0.0.53 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::69 - ARISTA11T0 - FC00::6A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::29 - ARISTA11T2 - FC00::2A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.54 - ARISTA12T0 - 10.0.0.55 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::6D - ARISTA12T0 - FC00::6E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.22 - ARISTA12T2 - 10.0.0.23 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::2D - ARISTA12T2 - FC00::2E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.56 - ARISTA13T0 - 10.0.0.57 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::71 - ARISTA13T0 - FC00::72 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::31 - ARISTA13T2 - FC00::32 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.58 - ARISTA14T0 - 10.0.0.59 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::75 - ARISTA14T0 - FC00::76 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.26 - ARISTA14T2 - 10.0.0.27 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::35 - ARISTA14T2 - FC00::36 - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.60 - ARISTA15T0 - 10.0.0.61 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::79 - ARISTA15T0 - FC00::7A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::39 - ARISTA15T2 - FC00::3A - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.62 - ARISTA16T0 - 10.0.0.63 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::7D - ARISTA16T0 - FC00::7E - 1 - 10 - 3 - - - false - str-msn2700-01 - 10.0.0.30 - ARISTA16T2 - 10.0.0.31 - 1 - 10 - 3 - - - str-msn2700-01 - FC00::3D - ARISTA16T2 - FC00::3E - 1 - 10 - 3 - - - - - 65100 - str-msn2700-01 - - -
10.0.0.33
- - - -
- -
10.0.0.1
- - - -
- -
10.0.0.35
- - - -
- -
10.0.0.3
- - - -
- -
10.0.0.37
- - - -
- -
10.0.0.5
- - - -
- -
10.0.0.39
- - - -
- -
10.0.0.7
- - - -
- -
10.0.0.41
- - - -
- -
10.0.0.9
- - - -
- -
10.0.0.43
- - - -
- -
10.0.0.11
- - - -
- -
10.0.0.45
- - - -
- -
10.0.0.13
- - - -
- -
10.0.0.47
- - - -
- -
10.0.0.15
- - - -
- -
10.0.0.49
- - - -
- -
10.0.0.17
- - - -
- -
10.0.0.51
- - - -
- -
10.0.0.19
- - - -
- -
10.0.0.53
- - - -
- -
10.0.0.21
- - - -
- -
10.0.0.55
- - - -
- -
10.0.0.23
- - - -
- -
10.0.0.57
- - - -
- -
10.0.0.25
- - - -
- -
10.0.0.59
- - - -
- -
10.0.0.27
- - - -
- -
10.0.0.61
- - - -
- -
10.0.0.29
- - - -
- -
10.0.0.63
- - - -
- -
10.0.0.31
- - - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 65200 - ARISTA02T2 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 65200 - ARISTA04T2 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 65200 - ARISTA06T2 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 65200 - ARISTA08T2 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 65200 - ARISTA10T2 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 65200 - ARISTA12T2 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 65200 - ARISTA14T2 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - - - 65200 - ARISTA16T2 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.188/24 - - 10.251.0.188/24 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - - str-msn2700-01 - - - - - - - - etp17 - 10.0.0.32/31 - - - - etp17 - FC00::41/126 - - - - etp1 - 10.0.0.0/31 - - - - etp1 - FC00::1/126 - - - - etp18 - 10.0.0.34/31 - - - - etp18 - FC00::45/126 - - - - etp2 - 10.0.0.2/31 - - - - etp2 - FC00::5/126 - - - - etp19 - 10.0.0.36/31 - - - - etp19 - FC00::49/126 - - - - etp3 - 10.0.0.4/31 - - - - etp3 - FC00::9/126 - - - - etp20 - 10.0.0.38/31 - - - - etp20 - FC00::4D/126 - - - - etp4 - 10.0.0.6/31 - - - - etp4 - FC00::D/126 - - - - etp21 - 10.0.0.40/31 - - - - etp21 - FC00::51/126 - - - - etp5 - 10.0.0.8/31 - - - - etp5 - FC00::11/126 - - - - etp22 - 10.0.0.42/31 - - - - etp22 - FC00::55/126 - - - - etp6 - 10.0.0.10/31 - - - - etp6 - FC00::15/126 - - - - etp23 - 10.0.0.44/31 - - - - etp23 - FC00::59/126 - - - - etp7 - 10.0.0.12/31 - - - - etp7 - FC00::19/126 - - - - etp24 - 10.0.0.46/31 - - - - etp24 - FC00::5D/126 - - - - etp8 - 10.0.0.14/31 - - - - etp8 - FC00::1D/126 - - - - etp25 - 10.0.0.48/31 - - - - etp25 - FC00::61/126 - - - - etp9 - 10.0.0.16/31 - - - - etp9 - FC00::21/126 - - - - etp26 - 10.0.0.50/31 - - - - etp26 - FC00::65/126 - - - - etp10 - 10.0.0.18/31 - - - - etp10 - FC00::25/126 - - - - etp27 - 10.0.0.52/31 - - - - etp27 - FC00::69/126 - - - - etp11 - 10.0.0.20/31 - - - - etp11 - FC00::29/126 - - - - etp28 - 10.0.0.54/31 - - - - etp28 - FC00::6D/126 - - - - etp12 - 10.0.0.22/31 - - - - etp12 - FC00::2D/126 - - - - etp29 - 10.0.0.56/31 - - - - etp29 - FC00::71/126 - - - - etp13 - 10.0.0.24/31 - - - - etp13 - FC00::31/126 - - - - etp30 - 10.0.0.58/31 - - - - etp30 - FC00::75/126 - - - - etp14 - 10.0.0.26/31 - - - - etp14 - FC00::35/126 - - - - etp31 - 10.0.0.60/31 - - - - etp31 - FC00::79/126 - - - - etp15 - 10.0.0.28/31 - - - - etp15 - FC00::39/126 - - - - etp32 - 10.0.0.62/31 - - - - etp32 - FC00::7D/126 - - - - etp16 - 10.0.0.30/31 - - - - etp16 - FC00::3D/126 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - etp17;etp1;etp18;etp2;etp19;etp3;etp20;etp4;etp21;etp5;etp22;etp6;etp23;etp7;etp24;etp8;etp25;etp9;etp26;etp10;etp27;etp11;etp28;etp12;etp29;etp13;etp30;etp14;etp31;etp15;etp32;etp16 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T0 - Ethernet1 - str-msn2700-01 - etp17 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet1 - str-msn2700-01 - etp1 - - - DeviceInterfaceLink - ARISTA02T0 - Ethernet1 - str-msn2700-01 - etp18 - - - DeviceInterfaceLink - ARISTA02T2 - Ethernet1 - str-msn2700-01 - etp2 - - - DeviceInterfaceLink - ARISTA03T0 - Ethernet1 - str-msn2700-01 - etp19 - - - DeviceInterfaceLink - ARISTA03T2 - Ethernet1 - str-msn2700-01 - etp3 - - - DeviceInterfaceLink - ARISTA04T0 - Ethernet1 - str-msn2700-01 - etp20 - - - DeviceInterfaceLink - ARISTA04T2 - Ethernet1 - str-msn2700-01 - etp4 - - - DeviceInterfaceLink - ARISTA05T0 - Ethernet1 - str-msn2700-01 - etp21 - - - DeviceInterfaceLink - ARISTA05T2 - Ethernet1 - str-msn2700-01 - etp5 - - - DeviceInterfaceLink - ARISTA06T0 - Ethernet1 - str-msn2700-01 - etp22 - - - DeviceInterfaceLink - ARISTA06T2 - Ethernet1 - str-msn2700-01 - etp6 - - - DeviceInterfaceLink - ARISTA07T0 - Ethernet1 - str-msn2700-01 - etp23 - - - DeviceInterfaceLink - ARISTA07T2 - Ethernet1 - str-msn2700-01 - etp7 - - - DeviceInterfaceLink - ARISTA08T0 - Ethernet1 - str-msn2700-01 - etp24 - - - DeviceInterfaceLink - ARISTA08T2 - Ethernet1 - str-msn2700-01 - etp8 - - - DeviceInterfaceLink - ARISTA09T0 - Ethernet1 - str-msn2700-01 - etp25 - - - DeviceInterfaceLink - ARISTA09T2 - Ethernet1 - str-msn2700-01 - etp9 - - - DeviceInterfaceLink - ARISTA10T0 - Ethernet1 - str-msn2700-01 - etp26 - - - DeviceInterfaceLink - ARISTA10T2 - Ethernet1 - str-msn2700-01 - etp10 - - - DeviceInterfaceLink - ARISTA11T0 - Ethernet1 - str-msn2700-01 - etp27 - - - DeviceInterfaceLink - ARISTA11T2 - Ethernet1 - str-msn2700-01 - etp11 - - - DeviceInterfaceLink - ARISTA12T0 - Ethernet1 - str-msn2700-01 - etp28 - - - DeviceInterfaceLink - ARISTA12T2 - Ethernet1 - str-msn2700-01 - etp12 - - - DeviceInterfaceLink - ARISTA13T0 - Ethernet1 - str-msn2700-01 - etp29 - - - DeviceInterfaceLink - ARISTA13T2 - Ethernet1 - str-msn2700-01 - etp13 - - - DeviceInterfaceLink - ARISTA14T0 - Ethernet1 - str-msn2700-01 - etp30 - - - DeviceInterfaceLink - ARISTA14T2 - Ethernet1 - str-msn2700-01 - etp14 - - - DeviceInterfaceLink - ARISTA15T0 - Ethernet1 - str-msn2700-01 - etp31 - - - DeviceInterfaceLink - ARISTA15T2 - Ethernet1 - str-msn2700-01 - etp15 - - - DeviceInterfaceLink - ARISTA16T0 - Ethernet1 - str-msn2700-01 - etp32 - - - DeviceInterfaceLink - ARISTA16T2 - Ethernet1 - str-msn2700-01 - etp16 - - - - - str-msn2700-01 - ACS-MSN2700 - - 10.251.0.188 - - - - ARISTA16T2 - - 10.250.0.17 - - Arista-VM - - - ARISTA16T0 - - 10.250.0.33 - - Arista-VM - - - ARISTA11T0 - - 10.250.0.28 - - Arista-VM - - - ARISTA10T0 - - 10.250.0.27 - - Arista-VM - - - ARISTA11T2 - - 10.250.0.12 - - Arista-VM - - - ARISTA10T2 - - 10.250.0.11 - - Arista-VM - - - ARISTA09T2 - - 10.250.0.10 - - Arista-VM - - - ARISTA09T0 - - 10.250.0.26 - - Arista-VM - - - ARISTA06T0 - - 10.250.0.23 - - Arista-VM - - - ARISTA06T2 - - 10.250.0.7 - - Arista-VM - - - ARISTA08T2 - - 10.250.0.9 - - Arista-VM - - - ARISTA08T0 - - 10.250.0.25 - - Arista-VM - - - ARISTA07T0 - - 10.250.0.24 - - Arista-VM - - - ARISTA07T2 - - 10.250.0.8 - - Arista-VM - - - ARISTA01T2 - - 10.250.0.2 - - Arista-VM - - - ARISTA01T0 - - 10.250.0.18 - - Arista-VM - - - ARISTA05T2 - - 10.250.0.6 - - Arista-VM - - - ARISTA05T0 - - 10.250.0.22 - - Arista-VM - - - ARISTA02T0 - - 10.250.0.19 - - Arista-VM - - - ARISTA03T0 - - 10.250.0.20 - - Arista-VM - - - ARISTA02T2 - - 10.250.0.3 - - Arista-VM - - - ARISTA03T2 - - 10.250.0.4 - - Arista-VM - - - ARISTA04T2 - - 10.250.0.5 - - Arista-VM - - - ARISTA04T0 - - 10.250.0.21 - - Arista-VM - - - ARISTA15T0 - - 10.250.0.32 - - Arista-VM - - - ARISTA15T2 - - 10.250.0.16 - - Arista-VM - - - ARISTA14T0 - - 10.250.0.31 - - Arista-VM - - - ARISTA14T2 - - 10.250.0.15 - - Arista-VM - - - ARISTA12T2 - - 10.250.0.13 - - Arista-VM - - - ARISTA12T0 - - 10.250.0.29 - - Arista-VM - - - ARISTA13T2 - - 10.250.0.14 - - Arista-VM - - - ARISTA13T0 - - 10.250.0.30 - - Arista-VM - - - - - - true - - - DeviceInterface - - true - true - 1 - etp1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp17 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp18 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp19 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp20 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp21 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp22 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp23 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp24 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp25 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp26 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp27 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp28 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp29 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp30 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp31 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - etp32 - - false - 0 - 0 - 40000 - - - true - 0 - ACS-MSN2700 - - - - - - - str-msn2700-01 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - - - str-msn2700-01 - ACS-MSN2700 -
diff --git a/ansible/minigraph/switch-t0.xml b/ansible/minigraph/switch-t0.xml deleted file mode 100644 index 4e98e659ec9..00000000000 --- a/ansible/minigraph/switch-t0.xml +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - false - switch-t0 - 10.0.0.56 - ARISTA01T1 - 10.0.0.57 - 1 - 180 - 60 - - - switch-t0 - FC00::71 - ARISTA01T1 - FC00::72 - 1 - 180 - 60 - - - false - switch-t0 - 10.0.0.58 - ARISTA02T1 - 10.0.0.59 - 1 - 180 - 60 - - - switch-t0 - FC00::75 - ARISTA02T1 - FC00::76 - 1 - 180 - 60 - - - false - switch-t0 - 10.0.0.60 - ARISTA03T1 - 10.0.0.61 - 1 - 180 - 60 - - - switch-t0 - FC00::79 - ARISTA03T1 - FC00::7A - 1 - 180 - 60 - - - false - switch-t0 - 10.0.0.62 - ARISTA04T1 - 10.0.0.63 - 1 - 180 - 60 - - - switch-t0 - FC00::7D - ARISTA04T1 - FC00::7E - 1 - 180 - 60 - - - - - 65100 - switch-t0 - - -
10.0.0.57
- - - -
- -
10.0.0.59
- - - -
- -
10.0.0.61
- - - -
- -
10.0.0.63
- - - -
-
- -
- - 64600 - ARISTA01T1 - - - - 64600 - ARISTA02T1 - - - - 64600 - ARISTA03T1 - - - - 64600 - ARISTA04T1 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.0.0.100/24 - - 10.0.0.100/24 - - - - - - - switch-t0 - - - PortChannel01 - true - fortyGigE0/112 - - - - PortChannel02 - false - fortyGigE0/116 - - - - PortChannel03 - fortyGigE0/120 - - - - PortChannel04 - fortyGigE0/124 - - - - - - Vlan1000 - fortyGigE0/4;fortyGigE0/8;fortyGigE0/12;fortyGigE0/16;fortyGigE0/20;fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/36;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/64;fortyGigE0/68;fortyGigE0/72;fortyGigE0/76;fortyGigE0/80;fortyGigE0/84;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96 - False - 0.0.0.0/0 - - 1000 - 1000 - 192.168.0.0/27 - - - - - - PortChannel01 - 10.0.0.56/31 - - - - PortChannel01 - FC00::71/126 - - - - PortChannel02 - 10.0.0.58/31 - - - - PortChannel02 - FC00::75/126 - - - - PortChannel03 - 10.0.0.60/31 - - - - PortChannel03 - FC00::79/126 - - - - PortChannel04 - 10.0.0.62/31 - - - - PortChannel04 - FC00::7D/126 - - - - Vlan1000 - 192.168.0.1/27 - - - - - - - - - - - - DeviceInterfaceLink - ARISTA01T1 - Ethernet1/1 - switch-t0 - fortyGigE0/112 - - - DeviceInterfaceLink - ARISTA02T1 - Ethernet1/1 - switch-t0 - fortyGigE0/116 - - - DeviceInterfaceLink - ARISTA03T1 - Ethernet1/1 - switch-t0 - fortyGigE0/120 - - - DeviceInterfaceLink - ARISTA04T1 - Ethernet1/1 - switch-t0 - fortyGigE0/124 - - - - - switch-t0 - Force10-S6000 - - - ARISTA01T1 - Arista - - - ARISTA02T1 - Arista - - - ARISTA03T1 - Arista - - - ARISTA04T1 - Arista - - - - switch-t0 - Force10-S6000 -
diff --git a/ansible/minigraph/switch-t1-64-lag-clet.xml b/ansible/minigraph/switch-t1-64-lag-clet.xml deleted file mode 100644 index d6252148bde..00000000000 --- a/ansible/minigraph/switch-t1-64-lag-clet.xml +++ /dev/null @@ -1,2349 +0,0 @@ - - - - - - ARISTA01T0 - 10.0.0.33 - switch-t1-64-lag-clet - 10.0.0.32 - 1 - 10 - 3 - - - ARISTA01T0 - FC00::42 - switch-t1-64-lag-clet - FC00::41 - 1 - 10 - 3 - - - ARISTA02T0 - 10.0.0.35 - switch-t1-64-lag-clet - 10.0.0.34 - 1 - 10 - 3 - - - ARISTA02T0 - FC00::46 - switch-t1-64-lag-clet - FC00::45 - 1 - 10 - 3 - - - ARISTA03T0 - 10.0.0.37 - switch-t1-64-lag-clet - 10.0.0.36 - 1 - 10 - 3 - - - ARISTA03T0 - FC00::4A - switch-t1-64-lag-clet - FC00::49 - 1 - 10 - 3 - - - ARISTA04T0 - 10.0.0.39 - switch-t1-64-lag-clet - 10.0.0.38 - 1 - 10 - 3 - - - ARISTA04T0 - FC00::4E - switch-t1-64-lag-clet - FC00::4D - 1 - 10 - 3 - - - ARISTA05T0 - 10.0.0.41 - switch-t1-64-lag-clet - 10.0.0.40 - 1 - 10 - 3 - - - ARISTA05T0 - FC00::52 - switch-t1-64-lag-clet - FC00::51 - 1 - 10 - 3 - - - ARISTA06T0 - 10.0.0.43 - switch-t1-64-lag-clet - 10.0.0.42 - 1 - 10 - 3 - - - ARISTA06T0 - FC00::56 - switch-t1-64-lag-clet - FC00::55 - 1 - 10 - 3 - - - ARISTA07T0 - 10.0.0.45 - switch-t1-64-lag-clet - 10.0.0.44 - 1 - 10 - 3 - - - ARISTA07T0 - FC00::5A - switch-t1-64-lag-clet - FC00::59 - 1 - 10 - 3 - - - ARISTA08T0 - 10.0.0.47 - switch-t1-64-lag-clet - 10.0.0.46 - 1 - 10 - 3 - - - ARISTA08T0 - FC00::5E - switch-t1-64-lag-clet - FC00::5D - 1 - 10 - 3 - - - ARISTA09T0 - 10.0.0.49 - switch-t1-64-lag-clet - 10.0.0.48 - 1 - 10 - 3 - - - ARISTA09T0 - FC00::62 - switch-t1-64-lag-clet - FC00::61 - 1 - 10 - 3 - - - ARISTA10T0 - 10.0.0.51 - switch-t1-64-lag-clet - 10.0.0.50 - 1 - 10 - 3 - - - ARISTA10T0 - FC00::66 - switch-t1-64-lag-clet - FC00::65 - 1 - 10 - 3 - - - ARISTA11T0 - 10.0.0.53 - switch-t1-64-lag-clet - 10.0.0.52 - 1 - 10 - 3 - - - ARISTA11T0 - FC00::6A - switch-t1-64-lag-clet - FC00::69 - 1 - 10 - 3 - - - ARISTA12T0 - 10.0.0.55 - switch-t1-64-lag-clet - 10.0.0.54 - 1 - 10 - 3 - - - ARISTA12T0 - FC00::6E - switch-t1-64-lag-clet - FC00::6D - 1 - 10 - 3 - - - ARISTA13T0 - 10.0.0.57 - switch-t1-64-lag-clet - 10.0.0.56 - 1 - 10 - 3 - - - ARISTA13T0 - FC00::72 - switch-t1-64-lag-clet - FC00::71 - 1 - 10 - 3 - - - ARISTA14T0 - 10.0.0.59 - switch-t1-64-lag-clet - 10.0.0.58 - 1 - 10 - 3 - - - ARISTA14T0 - FC00::76 - switch-t1-64-lag-clet - FC00::75 - 1 - 10 - 3 - - - ARISTA15T0 - 10.0.0.61 - switch-t1-64-lag-clet - 10.0.0.60 - 1 - 10 - 3 - - - ARISTA15T0 - FC00::7A - switch-t1-64-lag-clet - FC00::79 - 1 - 10 - 3 - - - ARISTA16T0 - 10.0.0.63 - switch-t1-64-lag-clet - 10.0.0.62 - 1 - 10 - 3 - - - ARISTA16T0 - FC00::7E - switch-t1-64-lag-clet - FC00::7D - 1 - 10 - 3 - - - ARISTA17T0 - 10.0.0.65 - switch-t1-64-lag-clet - 10.0.0.64 - 1 - 10 - 3 - - - ARISTA17T0 - FC00::82 - switch-t1-64-lag-clet - FC00::81 - 1 - 10 - 3 - - - ARISTA18T0 - 10.0.0.67 - switch-t1-64-lag-clet - 10.0.0.66 - 1 - 10 - 3 - - - ARISTA18T0 - FC00::86 - switch-t1-64-lag-clet - FC00::85 - 1 - 10 - 3 - - - ARISTA19T0 - 10.0.0.69 - switch-t1-64-lag-clet - 10.0.0.68 - 1 - 10 - 3 - - - ARISTA19T0 - FC00::8A - switch-t1-64-lag-clet - FC00::89 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - FC00::5 - ARISTA01T2 - FC00::6 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - FC00::9 - ARISTA05T2 - FC00::A - 1 - 10 - 3 - - - switch-t1-64-lag-clet - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 10 - 3 - - - switch-t1-64-lag-clet - FC00::D - ARISTA05T2 - FC00::E - 1 - 10 - 3 - - - - - 65100 - switch-t1-64-lag-clet - - -
10.0.0.33
- - -
- -
10.0.0.35
- - -
- -
10.0.0.37
- - -
- -
10.0.0.39
- - -
- -
10.0.0.41
- - -
- -
10.0.0.43
- - -
- -
10.0.0.45
- - -
- -
10.0.0.47
- - -
- -
10.0.0.49
- - -
- -
10.0.0.51
- - -
- -
10.0.0.53
- - -
- -
10.0.0.55
- - -
- -
10.0.0.57
- - -
- -
10.0.0.59
- - -
- -
10.0.0.61
- - -
- -
10.0.0.63
- - -
- -
10.0.0.65
- - -
- -
10.0.0.67
- - -
- -
10.0.0.69
- - -
- -
10.0.0.1
- - -
- -
10.0.0.5
- - -
- -
10.0.0.9
- - -
- -
10.0.0.13
- - -
-
- -
- - 64001 - ARISTA01T0 - - - - 64002 - ARISTA02T0 - - - - 64003 - ARISTA03T0 - - - - 64004 - ARISTA04T0 - - - - 64005 - ARISTA05T0 - - - - 64006 - ARISTA06T0 - - - - 64007 - ARISTA07T0 - - - - 64008 - ARISTA08T0 - - - - 64009 - ARISTA09T0 - - - - 64010 - ARISTA10T0 - - - - 64011 - ARISTA11T0 - - - - 64012 - ARISTA12T0 - - - - 64013 - ARISTA13T0 - - - - 64014 - ARISTA14T0 - - - - 64015 - ARISTA15T0 - - - - 64016 - ARISTA16T0 - - - - 64017 - ARISTA17T0 - - - - 64018 - ARISTA18T0 - - - - 64019 - ARISTA19T0 - - - - 65200 - ARISTA01T2 - - - - 65200 - ARISTA03T2 - - - - 65200 - ARISTA05T2 - - - - 65200 - ARISTA07T2 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.64.247.225/23 - - 10.64.247.225/23 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - switch-t1-64-lag-clet - - - PortChannelInterface - PortChannel0 - fortyGigE1/1/1;fortyGigE1/1/2 - - - - PortChannelInterface - PortChannel4 - fortyGigE1/1/5;fortyGigE1/1/6 - - - - PortChannelInterface - PortChannel8 - fortyGigE1/2/1;fortyGigE1/2/2 - - - - PortChannelInterface - PortChannel12 - fortyGigE1/2/5;fortyGigE1/2/6 - - - - PortChannelInterface - PortChannel34 - fortyGigE1/3/3 - - - - PortChannelInterface - PortChannel36 - fortyGigE1/3/5 - - - - PortChannelInterface - PortChannel37 - fortyGigE1/3/6 - - - - PortChannelInterface - PortChannel38 - fortyGigE1/3/7 - - - - PortChannelInterface - PortChannel39 - fortyGigE1/3/8 - - - - PortChannelInterface - PortChannel42 - fortyGigE1/3/11 - - - - PortChannelInterface - PortChannel44 - fortyGigE1/3/13 - - - - PortChannelInterface - PortChannel45 - fortyGigE1/3/14 - - - - PortChannelInterface - PortChannel46 - fortyGigE1/3/15 - - - - PortChannelInterface - PortChannel47 - fortyGigE1/3/16 - - - - PortChannelInterface - PortChannel50 - fortyGigE1/4/3 - - - - PortChannelInterface - PortChannel52 - fortyGigE1/4/5 - - - - PortChannelInterface - PortChannel53 - fortyGigE1/4/6 - - - - PortChannelInterface - PortChannel54 - fortyGigE1/4/7 - - - - PortChannelInterface - PortChannel55 - fortyGigE1/4/8 - - - - PortChannelInterface - PortChannel58 - fortyGigE1/4/11 - - - - PortChannelInterface - PortChannel60 - fortyGigE1/4/13 - - - - PortChannelInterface - PortChannel61 - fortyGigE1/4/14 - - - - PortChannelInterface - PortChannel62 - fortyGigE1/4/15 - - - - PortChannelInterface - PortChannel63 - fortyGigE1/4/16 - - - - - - - IPInterface - - PortChannel0 - 10.0.0.0/31 - - - IPInterface - - PortChannel0 - FC00::1/126 - - - IPInterface - - PortChannel4 - 10.0.0.4/31 - - - IPInterface - - PortChannel4 - FC00::5/126 - - - IPInterface - - PortChannel8 - 10.0.0.8/31 - - - IPInterface - - PortChannel8 - FC00::9/126 - - - IPInterface - - PortChannel12 - 10.0.0.12/31 - - - IPInterface - - PortChannel12 - FC00::D/126 - - - IPInterface - - PortChannel34 - 10.0.0.32/31 - - - IPInterface - - PortChannel34 - FC00::41/126 - - - IPInterface - - PortChannel36 - 10.0.0.34/31 - - - IPInterface - - PortChannel36 - FC00::45/126 - - - IPInterface - - PortChannel37 - 10.0.0.36/31 - - - IPInterface - - PortChannel37 - FC00::49/126 - - - IPInterface - - PortChannel38 - 10.0.0.38/31 - - - IPInterface - - PortChannel38 - FC00::4D/126 - - - IPInterface - - PortChannel39 - 10.0.0.40/31 - - - IPInterface - - PortChannel39 - FC00::51/126 - - - IPInterface - - PortChannel42 - 10.0.0.42/31 - - - IPInterface - - PortChannel42 - FC00::55/126 - - - IPInterface - - PortChannel44 - 10.0.0.44/31 - - - IPInterface - - PortChannel44 - FC00::59/126 - - - IPInterface - - PortChannel45 - 10.0.0.46/31 - - - IPInterface - - PortChannel45 - FC00::5D/126 - - - IPInterface - - PortChannel46 - 10.0.0.48/31 - - - IPInterface - - PortChannel46 - FC00::61/126 - - - IPInterface - - PortChannel47 - 10.0.0.50/31 - - - IPInterface - - PortChannel47 - FC00::65/126 - - - IPInterface - - PortChannel50 - 10.0.0.52/31 - - - IPInterface - - PortChannel50 - FC00::69/126 - - - IPInterface - - PortChannel52 - 10.0.0.54/31 - - - IPInterface - - PortChannel52 - FC00::6D/126 - - - IPInterface - - PortChannel53 - 10.0.0.56/31 - - - IPInterface - - PortChannel53 - FC00::71/126 - - - IPInterface - - PortChannel54 - 10.0.0.58/31 - - - IPInterface - - PortChannel54 - FC00::75/126 - - - IPInterface - - PortChannel55 - 10.0.0.60/31 - - - IPInterface - - PortChannel55 - FC00::79/126 - - - IPInterface - - PortChannel58 - 10.0.0.62/31 - - - IPInterface - - PortChannel58 - FC00::7D/126 - - - IPInterface - - PortChannel60 - 10.0.0.64/31 - - - IPInterface - - PortChannel60 - FC00::81/126 - - - IPInterface - - PortChannel61 - 10.0.0.66/31 - - - IPInterface - - PortChannel61 - FC00::85/126 - - - IPInterface - - PortChannel62 - 10.0.0.68/31 - - - IPInterface - - PortChannel62 - FC00::89/126 - - - - - - - - - - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/1/1 - ARISTA01T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/1/2 - ARISTA01T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/1/5 - ARISTA03T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/1/6 - ARISTA03T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/2/1 - ARISTA05T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/2/2 - ARISTA05T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/2/5 - ARISTA07T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/2/6 - ARISTA07T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/3 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/3 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/6 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/7 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/8 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/11 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/11 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/14 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/15 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/3/16 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/3 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/3 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/6 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/7 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/8 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/11 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/11 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/14 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/15 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag-clet - fortyGigE1/4/16 - ARISTA04T0 - Ethernet1 - - - - - switch-t1-64-lag-clet - Force10-S6100 - - 10.64.247.225 - - - - "ARISTA01T0" - Arista-VM - - 10.64.247.204 - - - - "ARISTA01T2" - Arista-VM - - 10.64.247.200 - - - - "ARISTA02T0" - Arista-VM - - 10.64.247.205 - - - - "ARISTA03T0" - Arista-VM - - 10.64.247.206 - - - - "ARISTA03T2" - Arista-VM - - 10.64.247.201 - - - - "ARISTA04T0" - Arista-VM - - 10.64.247.207 - - - - "ARISTA05T0" - Arista-VM - - 10.64.247.208 - - - - "ARISTA05T2" - Arista-VM - - 10.64.247.202 - - - - "ARISTA06T0" - Arista-VM - - 10.64.247.209 - - - - "ARISTA07T0" - Arista-VM - - 10.64.247.210 - - - - "ARISTA07T2" - Arista-VM - - 10.64.247.203 - - - - "ARISTA08T0" - Arista-VM - - 10.64.247.211 - - - - "ARISTA09T0" - Arista-VM - - 10.64.247.212 - - - - "ARISTA10T0" - Arista-VM - - 10.64.247.213 - - - - "ARISTA11T0" - Arista-VM - - 10.64.247.214 - - - - "ARISTA12T0" - Arista-VM - - 10.64.247.215 - - - - "ARISTA13T0" - Arista-VM - - 10.64.247.216 - - - - "ARISTA14T0" - Arista-VM - - 10.64.247.217 - - - - "ARISTA15T0" - Arista-VM - - 10.64.247.218 - - - - "ARISTA16T0" - Arista-VM - - 10.64.247.219 - - - - "ARISTA17T0" - Arista-VM - - 10.64.247.220 - - - - "ARISTA18T0" - Arista-VM - - 10.64.247.221 - - - - "ARISTA19T0" - Arista-VM - - 10.64.247.222 - - - - - - - true - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/16 - - false - 0 - 0 - 40000 - - - true - 0 - Force10-S6100 - - - - switch-t1-64-lag-clet - Force10-S6100 -
diff --git a/ansible/minigraph/switch-t1-64-lag.xml b/ansible/minigraph/switch-t1-64-lag.xml deleted file mode 100644 index b871a337450..00000000000 --- a/ansible/minigraph/switch-t1-64-lag.xml +++ /dev/null @@ -1,2396 +0,0 @@ - - - - - - ARISTA01T0 - 10.0.0.33 - switch-t1-64-lag - 10.0.0.32 - 1 - 10 - 3 - - - ARISTA01T0 - FC00::42 - switch-t1-64-lag - FC00::41 - 1 - 10 - 3 - - - ARISTA02T0 - 10.0.0.35 - switch-t1-64-lag - 10.0.0.34 - 1 - 10 - 3 - - - ARISTA02T0 - FC00::46 - switch-t1-64-lag - FC00::45 - 1 - 10 - 3 - - - ARISTA03T0 - 10.0.0.37 - switch-t1-64-lag - 10.0.0.36 - 1 - 10 - 3 - - - ARISTA03T0 - FC00::4A - switch-t1-64-lag - FC00::49 - 1 - 10 - 3 - - - ARISTA04T0 - 10.0.0.39 - switch-t1-64-lag - 10.0.0.38 - 1 - 10 - 3 - - - ARISTA04T0 - FC00::4E - switch-t1-64-lag - FC00::4D - 1 - 10 - 3 - - - ARISTA05T0 - 10.0.0.41 - switch-t1-64-lag - 10.0.0.40 - 1 - 10 - 3 - - - ARISTA05T0 - FC00::52 - switch-t1-64-lag - FC00::51 - 1 - 10 - 3 - - - ARISTA06T0 - 10.0.0.43 - switch-t1-64-lag - 10.0.0.42 - 1 - 10 - 3 - - - ARISTA06T0 - FC00::56 - switch-t1-64-lag - FC00::55 - 1 - 10 - 3 - - - ARISTA07T0 - 10.0.0.45 - switch-t1-64-lag - 10.0.0.44 - 1 - 10 - 3 - - - ARISTA07T0 - FC00::5A - switch-t1-64-lag - FC00::59 - 1 - 10 - 3 - - - ARISTA08T0 - 10.0.0.47 - switch-t1-64-lag - 10.0.0.46 - 1 - 10 - 3 - - - ARISTA08T0 - FC00::5E - switch-t1-64-lag - FC00::5D - 1 - 10 - 3 - - - ARISTA09T0 - 10.0.0.49 - switch-t1-64-lag - 10.0.0.48 - 1 - 10 - 3 - - - ARISTA09T0 - FC00::62 - switch-t1-64-lag - FC00::61 - 1 - 10 - 3 - - - ARISTA10T0 - 10.0.0.51 - switch-t1-64-lag - 10.0.0.50 - 1 - 10 - 3 - - - ARISTA10T0 - FC00::66 - switch-t1-64-lag - FC00::65 - 1 - 10 - 3 - - - ARISTA11T0 - 10.0.0.53 - switch-t1-64-lag - 10.0.0.52 - 1 - 10 - 3 - - - ARISTA11T0 - FC00::6A - switch-t1-64-lag - FC00::69 - 1 - 10 - 3 - - - ARISTA12T0 - 10.0.0.55 - switch-t1-64-lag - 10.0.0.54 - 1 - 10 - 3 - - - ARISTA12T0 - FC00::6E - switch-t1-64-lag - FC00::6D - 1 - 10 - 3 - - - ARISTA13T0 - 10.0.0.57 - switch-t1-64-lag - 10.0.0.56 - 1 - 10 - 3 - - - ARISTA13T0 - FC00::72 - switch-t1-64-lag - FC00::71 - 1 - 10 - 3 - - - ARISTA14T0 - 10.0.0.59 - switch-t1-64-lag - 10.0.0.58 - 1 - 10 - 3 - - - ARISTA14T0 - FC00::76 - switch-t1-64-lag - FC00::75 - 1 - 10 - 3 - - - ARISTA15T0 - 10.0.0.61 - switch-t1-64-lag - 10.0.0.60 - 1 - 10 - 3 - - - ARISTA15T0 - FC00::7A - switch-t1-64-lag - FC00::79 - 1 - 10 - 3 - - - ARISTA16T0 - 10.0.0.63 - switch-t1-64-lag - 10.0.0.62 - 1 - 10 - 3 - - - ARISTA16T0 - FC00::7E - switch-t1-64-lag - FC00::7D - 1 - 10 - 3 - - - ARISTA17T0 - 10.0.0.65 - switch-t1-64-lag - 10.0.0.64 - 1 - 10 - 3 - - - ARISTA17T0 - FC00::82 - switch-t1-64-lag - FC00::81 - 1 - 10 - 3 - - - ARISTA18T0 - 10.0.0.67 - switch-t1-64-lag - 10.0.0.66 - 1 - 10 - 3 - - - ARISTA18T0 - FC00::86 - switch-t1-64-lag - FC00::85 - 1 - 10 - 3 - - - ARISTA19T0 - 10.0.0.69 - switch-t1-64-lag - 10.0.0.68 - 1 - 10 - 3 - - - ARISTA19T0 - FC00::8A - switch-t1-64-lag - FC00::89 - 1 - 10 - 3 - - - ARISTA20T0 - 10.0.0.71 - switch-t1-64-lag - 10.0.0.70 - 1 - 10 - 3 - - - ARISTA20T0 - FC00::8E - switch-t1-64-lag - FC00::8D - 1 - 10 - 3 - - - switch-t1-64-lag - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - switch-t1-64-lag - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - switch-t1-64-lag - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 10 - 3 - - - switch-t1-64-lag - FC00::5 - ARISTA01T2 - FC00::6 - 1 - 10 - 3 - - - switch-t1-64-lag - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 10 - 3 - - - switch-t1-64-lag - FC00::9 - ARISTA05T2 - FC00::A - 1 - 10 - 3 - - - switch-t1-64-lag - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 10 - 3 - - - switch-t1-64-lag - FC00::D - ARISTA05T2 - FC00::E - 1 - 10 - 3 - - - - - 65100 - switch-t1-64-lag - - -
10.0.0.33
- - -
- -
10.0.0.35
- - -
- -
10.0.0.37
- - -
- -
10.0.0.39
- - -
- -
10.0.0.41
- - -
- -
10.0.0.43
- - -
- -
10.0.0.45
- - -
- -
10.0.0.47
- - -
- -
10.0.0.49
- - -
- -
10.0.0.51
- - -
- -
10.0.0.53
- - -
- -
10.0.0.55
- - -
- -
10.0.0.57
- - -
- -
10.0.0.59
- - -
- -
10.0.0.61
- - -
- -
10.0.0.63
- - -
- -
10.0.0.65
- - -
- -
10.0.0.67
- - -
- -
10.0.0.69
- - -
- -
10.0.0.71
- - -
- -
10.0.0.1
- - -
- -
10.0.0.5
- - -
- -
10.0.0.9
- - -
- -
10.0.0.13
- - -
-
- -
- - 64001 - ARISTA01T0 - - - - 64002 - ARISTA02T0 - - - - 64003 - ARISTA03T0 - - - - 64004 - ARISTA04T0 - - - - 64005 - ARISTA05T0 - - - - 64006 - ARISTA06T0 - - - - 64007 - ARISTA07T0 - - - - 64008 - ARISTA08T0 - - - - 64009 - ARISTA09T0 - - - - 64010 - ARISTA10T0 - - - - 64011 - ARISTA11T0 - - - - 64012 - ARISTA12T0 - - - - 64013 - ARISTA13T0 - - - - 64014 - ARISTA14T0 - - - - 64015 - ARISTA15T0 - - - - 64016 - ARISTA16T0 - - - - 64017 - ARISTA17T0 - - - - 64018 - ARISTA18T0 - - - - 64019 - ARISTA19T0 - - - - 64020 - ARISTA20T0 - - - - 65200 - ARISTA01T2 - - - - 65200 - ARISTA03T2 - - - - 65200 - ARISTA05T2 - - - - 65200 - ARISTA07T2 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.64.247.225/23 - - 10.64.247.225/23 - - - V6HostIP - eth0 - - FC00:2::32/64 - - FC00:2::32/64 - - - - - - switch-t1-64-lag - - - PortChannelInterface - PortChannel0 - fortyGigE1/1/1;fortyGigE1/1/2 - - - - PortChannelInterface - PortChannel4 - fortyGigE1/1/5;fortyGigE1/1/6 - - - - PortChannelInterface - PortChannel8 - fortyGigE1/2/1;fortyGigE1/2/2 - - - - PortChannelInterface - PortChannel12 - fortyGigE1/2/5;fortyGigE1/2/6 - - - - PortChannelInterface - PortChannel34 - fortyGigE1/3/3 - - - - PortChannelInterface - PortChannel36 - fortyGigE1/3/5 - - - - PortChannelInterface - PortChannel37 - fortyGigE1/3/6 - - - - PortChannelInterface - PortChannel38 - fortyGigE1/3/7 - - - - PortChannelInterface - PortChannel39 - fortyGigE1/3/8 - - - - PortChannelInterface - PortChannel42 - fortyGigE1/3/11 - - - - PortChannelInterface - PortChannel44 - fortyGigE1/3/13 - - - - PortChannelInterface - PortChannel45 - fortyGigE1/3/14 - - - - PortChannelInterface - PortChannel46 - fortyGigE1/3/15 - - - - PortChannelInterface - PortChannel47 - fortyGigE1/3/16 - - - - PortChannelInterface - PortChannel50 - fortyGigE1/4/3 - - - - PortChannelInterface - PortChannel52 - fortyGigE1/4/5 - - - - PortChannelInterface - PortChannel53 - fortyGigE1/4/6 - - - - PortChannelInterface - PortChannel54 - fortyGigE1/4/7 - - - - PortChannelInterface - PortChannel55 - fortyGigE1/4/8 - - - - PortChannelInterface - PortChannel58 - fortyGigE1/4/11 - - - - PortChannelInterface - PortChannel60 - fortyGigE1/4/13 - - - - PortChannelInterface - PortChannel61 - fortyGigE1/4/14 - - - - PortChannelInterface - PortChannel62 - fortyGigE1/4/15 - - - - PortChannelInterface - PortChannel63 - fortyGigE1/4/16 - - - - - - - IPInterface - - PortChannel0 - 10.0.0.0/31 - - - IPInterface - - PortChannel0 - FC00::1/126 - - - IPInterface - - PortChannel4 - 10.0.0.4/31 - - - IPInterface - - PortChannel4 - FC00::5/126 - - - IPInterface - - PortChannel8 - 10.0.0.8/31 - - - IPInterface - - PortChannel8 - FC00::9/126 - - - IPInterface - - PortChannel12 - 10.0.0.12/31 - - - IPInterface - - PortChannel12 - FC00::D/126 - - - IPInterface - - PortChannel34 - 10.0.0.32/31 - - - IPInterface - - PortChannel34 - FC00::41/126 - - - IPInterface - - PortChannel36 - 10.0.0.34/31 - - - IPInterface - - PortChannel36 - FC00::45/126 - - - IPInterface - - PortChannel37 - 10.0.0.36/31 - - - IPInterface - - PortChannel37 - FC00::49/126 - - - IPInterface - - PortChannel38 - 10.0.0.38/31 - - - IPInterface - - PortChannel38 - FC00::4D/126 - - - IPInterface - - PortChannel39 - 10.0.0.40/31 - - - IPInterface - - PortChannel39 - FC00::51/126 - - - IPInterface - - PortChannel42 - 10.0.0.42/31 - - - IPInterface - - PortChannel42 - FC00::55/126 - - - IPInterface - - PortChannel44 - 10.0.0.44/31 - - - IPInterface - - PortChannel44 - FC00::59/126 - - - IPInterface - - PortChannel45 - 10.0.0.46/31 - - - IPInterface - - PortChannel45 - FC00::5D/126 - - - IPInterface - - PortChannel46 - 10.0.0.48/31 - - - IPInterface - - PortChannel46 - FC00::61/126 - - - IPInterface - - PortChannel47 - 10.0.0.50/31 - - - IPInterface - - PortChannel47 - FC00::65/126 - - - IPInterface - - PortChannel50 - 10.0.0.52/31 - - - IPInterface - - PortChannel50 - FC00::69/126 - - - IPInterface - - PortChannel52 - 10.0.0.54/31 - - - IPInterface - - PortChannel52 - FC00::6D/126 - - - IPInterface - - PortChannel53 - 10.0.0.56/31 - - - IPInterface - - PortChannel53 - FC00::71/126 - - - IPInterface - - PortChannel54 - 10.0.0.58/31 - - - IPInterface - - PortChannel54 - FC00::75/126 - - - IPInterface - - PortChannel55 - 10.0.0.60/31 - - - IPInterface - - PortChannel55 - FC00::79/126 - - - IPInterface - - PortChannel58 - 10.0.0.62/31 - - - IPInterface - - PortChannel58 - FC00::7D/126 - - - IPInterface - - PortChannel60 - 10.0.0.64/31 - - - IPInterface - - PortChannel60 - FC00::81/126 - - - IPInterface - - PortChannel61 - 10.0.0.66/31 - - - IPInterface - - PortChannel61 - FC00::85/126 - - - IPInterface - - PortChannel62 - 10.0.0.68/31 - - - IPInterface - - PortChannel62 - FC00::89/126 - - - IPInterface - - PortChannel63 - 10.0.0.70/31 - - - IPInterface - - PortChannel63 - FC00::8D/126 - - - - - - - - - - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/1/1 - ARISTA01T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/1/2 - ARISTA01T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/1/5 - ARISTA03T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/1/6 - ARISTA03T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/2/1 - ARISTA05T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/2/2 - ARISTA05T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/2/5 - ARISTA07T2 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/2/6 - ARISTA07T2 - Ethernet2 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/3 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/3 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/6 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/7 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/8 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/11 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/11 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/14 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/15 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/3/16 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/3 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/3 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/6 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/7 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/8 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/11 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/11 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/14 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/15 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch-t1-64-lag - fortyGigE1/4/16 - ARISTA04T0 - Ethernet1 - - - - - switch-t1-64-lag - Force10-S6100 - - 10.64.247.225 - - - - "ARISTA01T0" - Arista-VM - - 10.64.247.204 - - - - "ARISTA01T2" - Arista-VM - - 10.64.247.200 - - - - "ARISTA02T0" - Arista-VM - - 10.64.247.205 - - - - "ARISTA03T0" - Arista-VM - - 10.64.247.206 - - - - "ARISTA03T2" - Arista-VM - - 10.64.247.201 - - - - "ARISTA04T0" - Arista-VM - - 10.64.247.207 - - - - "ARISTA05T0" - Arista-VM - - 10.64.247.208 - - - - "ARISTA05T2" - Arista-VM - - 10.64.247.202 - - - - "ARISTA06T0" - Arista-VM - - 10.64.247.209 - - - - "ARISTA07T0" - Arista-VM - - 10.64.247.210 - - - - "ARISTA07T2" - Arista-VM - - 10.64.247.203 - - - - "ARISTA08T0" - Arista-VM - - 10.64.247.211 - - - - "ARISTA09T0" - Arista-VM - - 10.64.247.212 - - - - "ARISTA10T0" - Arista-VM - - 10.64.247.213 - - - - "ARISTA11T0" - Arista-VM - - 10.64.247.214 - - - - "ARISTA12T0" - Arista-VM - - 10.64.247.215 - - - - "ARISTA13T0" - Arista-VM - - 10.64.247.216 - - - - "ARISTA14T0" - Arista-VM - - 10.64.247.217 - - - - "ARISTA15T0" - Arista-VM - - 10.64.247.218 - - - - "ARISTA16T0" - Arista-VM - - 10.64.247.219 - - - - "ARISTA17T0" - Arista-VM - - 10.64.247.220 - - - - "ARISTA18T0" - Arista-VM - - 10.64.247.221 - - - - "ARISTA19T0" - Arista-VM - - 10.64.247.222 - - - - "ARISTA20T0" - Arista-VM - - 10.64.247.223 - - - - - - - true - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/1/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/2/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/3/16 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/8 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/9 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/10 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/11 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/12 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/13 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/14 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/15 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - fortyGigE1/4/16 - - false - 0 - 0 - 40000 - - - true - 0 - Force10-S6100 - - - - switch-t1-64-lag - Force10-S6100 -
diff --git a/ansible/minigraph/switch1.xml b/ansible/minigraph/switch1.xml deleted file mode 100644 index 4771c9a0427..00000000000 --- a/ansible/minigraph/switch1.xml +++ /dev/null @@ -1,1057 +0,0 @@ - - - - - - ARISTA01T0 - 10.0.0.33 - switch1 - 10.0.0.32 - 1 - 180 - 60 - - - switch1 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 180 - 60 - - - ARISTA02T0 - 10.0.0.35 - switch1 - 10.0.0.34 - 1 - 180 - 60 - - - switch1 - 10.0.0.2 - ARISTA02T2 - 10.0.0.3 - 1 - 180 - 60 - - - ARISTA03T0 - 10.0.0.37 - switch1 - 10.0.0.36 - 1 - 180 - 60 - - - switch1 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 180 - 60 - - - ARISTA04T0 - 10.0.0.39 - switch1 - 10.0.0.38 - 1 - 180 - 60 - - - switch1 - 10.0.0.6 - ARISTA04T2 - 10.0.0.7 - 1 - 180 - 60 - - - ARISTA05T0 - 10.0.0.41 - switch1 - 10.0.0.40 - 1 - 180 - 60 - - - switch1 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 180 - 60 - - - ARISTA06T0 - 10.0.0.43 - switch1 - 10.0.0.42 - 1 - 180 - 60 - - - switch1 - 10.0.0.10 - ARISTA06T2 - 10.0.0.11 - 1 - 180 - 60 - - - ARISTA07T0 - 10.0.0.45 - switch1 - 10.0.0.44 - 1 - 180 - 60 - - - switch1 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 180 - 60 - - - ARISTA08T0 - 10.0.0.47 - switch1 - 10.0.0.46 - 1 - 180 - 60 - - - switch1 - 10.0.0.14 - ARISTA08T2 - 10.0.0.15 - 1 - 180 - 60 - - - ARISTA09T0 - 10.0.0.49 - switch1 - 10.0.0.48 - 1 - 180 - 60 - - - switch1 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 180 - 60 - - - ARISTA10T0 - 10.0.0.51 - switch1 - 10.0.0.50 - 1 - 180 - 60 - - - switch1 - 10.0.0.18 - ARISTA10T2 - 10.0.0.19 - 1 - 180 - 60 - - - ARISTA11T0 - 10.0.0.53 - switch1 - 10.0.0.52 - 1 - 180 - 60 - - - switch1 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 180 - 60 - - - ARISTA12T0 - 10.0.0.55 - switch1 - 10.0.0.54 - 1 - 180 - 60 - - - switch1 - 10.0.0.22 - ARISTA12T2 - 10.0.0.23 - 1 - 180 - 60 - - - ARISTA13T0 - 10.0.0.57 - switch1 - 10.0.0.56 - 1 - 180 - 60 - - - switch1 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 180 - 60 - - - ARISTA14T0 - 10.0.0.59 - switch1 - 10.0.0.58 - 1 - 180 - 60 - - - switch1 - 10.0.0.26 - ARISTA14T2 - 10.0.0.27 - 1 - 180 - 60 - - - ARISTA15T0 - 10.0.0.61 - switch1 - 10.0.0.60 - 1 - 180 - 60 - - - switch1 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 180 - 60 - - - ARISTA16T0 - 10.0.0.63 - switch1 - 10.0.0.62 - 1 - 180 - 60 - - - switch1 - 10.0.0.30 - ARISTA16T2 - 10.0.0.31 - 1 - 180 - 60 - - - - - 65100 - switch1 - - -
10.0.0.33
- - -
- -
10.0.0.1
- - -
- -
10.0.0.35
- - -
- -
10.0.0.3
- - -
- -
10.0.0.37
- - -
- -
10.0.0.5
- - -
- -
10.0.0.39
- - -
- -
10.0.0.7
- - -
- -
10.0.0.41
- - -
- -
10.0.0.9
- - -
- -
10.0.0.43
- - -
- -
10.0.0.11
- - -
- -
10.0.0.45
- - -
- -
10.0.0.13
- - -
- -
10.0.0.47
- - -
- -
10.0.0.15
- - -
- -
10.0.0.49
- - -
- -
10.0.0.17
- - -
- -
10.0.0.51
- - -
- -
10.0.0.19
- - -
- -
10.0.0.53
- - -
- -
10.0.0.21
- - -
- -
10.0.0.55
- - -
- -
10.0.0.23
- - -
- -
10.0.0.57
- - -
- -
10.0.0.25
- - -
- -
10.0.0.59
- - -
- -
10.0.0.27
- - -
- -
10.0.0.61
- - -
- -
10.0.0.29
- - -
- -
10.0.0.63
- - -
- -
10.0.0.31
- - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 65200 - ARISTA02T2 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 65200 - ARISTA04T2 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 65200 - ARISTA06T2 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 65200 - ARISTA08T2 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 65200 - ARISTA10T2 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 65200 - ARISTA12T2 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 65200 - ARISTA14T2 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - - - 65200 - ARISTA16T2 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - - - HostIP - eth0 - - 10.0.0.100/24 - - 10.0.0.100/24 - - - - - - switch1 - - - - - - fortyGigE0/0 - 10.0.0.0/31 - - - - fortyGigE0/4 - 10.0.0.2/31 - - - - fortyGigE0/8 - 10.0.0.4/31 - - - - fortyGigE0/12 - 10.0.0.6/31 - - - - fortyGigE0/16 - 10.0.0.8/31 - - - - fortyGigE0/20 - 10.0.0.10/31 - - - - fortyGigE0/24 - 10.0.0.12/31 - - - - fortyGigE0/28 - 10.0.0.14/31 - - - - fortyGigE0/32 - 10.0.0.16/31 - - - - fortyGigE0/36 - 10.0.0.18/31 - - - - fortyGigE0/40 - 10.0.0.20/31 - - - - fortyGigE0/44 - 10.0.0.22/31 - - - - fortyGigE0/48 - 10.0.0.24/31 - - - - fortyGigE0/52 - 10.0.0.26/31 - - - - fortyGigE0/56 - 10.0.0.28/31 - - - - fortyGigE0/60 - 10.0.0.30/31 - - - - fortyGigE0/64 - 10.0.0.32/31 - - - - fortyGigE0/68 - 10.0.0.34/31 - - - - fortyGigE0/72 - 10.0.0.36/31 - - - - fortyGigE0/76 - 10.0.0.38/31 - - - - fortyGigE0/80 - 10.0.0.40/31 - - - - fortyGigE0/84 - 10.0.0.42/31 - - - - fortyGigE0/88 - 10.0.0.44/31 - - - - fortyGigE0/92 - 10.0.0.46/31 - - - - fortyGigE0/96 - 10.0.0.48/31 - - - - fortyGigE0/100 - 10.0.0.50/31 - - - - fortyGigE0/104 - 10.0.0.52/31 - - - - fortyGigE0/108 - 10.0.0.54/31 - - - - fortyGigE0/112 - 10.0.0.56/31 - - - - fortyGigE0/116 - 10.0.0.58/31 - - - - fortyGigE0/120 - 10.0.0.60/31 - - - - fortyGigE0/124 - 10.0.0.62/31 - - - - - - - - - - - - DeviceInterfaceLink - switch1 - fortyGigE0/0 - ARISTA01T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/4 - ARISTA02T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/8 - ARISTA03T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/12 - ARISTA04T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/16 - ARISTA05T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/20 - ARISTA06T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/24 - ARISTA07T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/28 - ARISTA08T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/32 - ARISTA09T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/36 - ARISTA10T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/40 - ARISTA11T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/44 - ARISTA12T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/48 - ARISTA13T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/52 - ARISTA14T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/56 - ARISTA15T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/60 - ARISTA16T2 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/64 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/68 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/72 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/76 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/80 - ARISTA05T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/84 - ARISTA06T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/88 - ARISTA07T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/92 - ARISTA08T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/96 - ARISTA09T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/100 - ARISTA10T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/104 - ARISTA11T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/108 - ARISTA12T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/112 - ARISTA13T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/116 - ARISTA14T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/120 - ARISTA15T0 - Ethernet1 - - - DeviceInterfaceLink - switch1 - fortyGigE0/124 - ARISTA16T0 - Ethernet1 - - - - - switch1 - Force10-S6000 - - - - switch1 - Force10-S6000 -
diff --git a/ansible/minigraph/switch2.xml b/ansible/minigraph/switch2.xml deleted file mode 100644 index 1e42e638f63..00000000000 --- a/ansible/minigraph/switch2.xml +++ /dev/null @@ -1,1057 +0,0 @@ - - - - - - ARISTA01T0 - 10.0.0.33 - switch2 - 10.0.0.32 - 1 - 180 - 60 - - - switch2 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 180 - 60 - - - ARISTA02T0 - 10.0.0.35 - switch2 - 10.0.0.34 - 1 - 180 - 60 - - - switch2 - 10.0.0.2 - ARISTA02T2 - 10.0.0.3 - 1 - 180 - 60 - - - ARISTA03T0 - 10.0.0.37 - switch2 - 10.0.0.36 - 1 - 180 - 60 - - - switch2 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 180 - 60 - - - ARISTA04T0 - 10.0.0.39 - switch2 - 10.0.0.38 - 1 - 180 - 60 - - - switch2 - 10.0.0.6 - ARISTA04T2 - 10.0.0.7 - 1 - 180 - 60 - - - ARISTA05T0 - 10.0.0.41 - switch2 - 10.0.0.40 - 1 - 180 - 60 - - - switch2 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 180 - 60 - - - ARISTA06T0 - 10.0.0.43 - switch2 - 10.0.0.42 - 1 - 180 - 60 - - - switch2 - 10.0.0.10 - ARISTA06T2 - 10.0.0.11 - 1 - 180 - 60 - - - ARISTA07T0 - 10.0.0.45 - switch2 - 10.0.0.44 - 1 - 180 - 60 - - - switch2 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 180 - 60 - - - ARISTA08T0 - 10.0.0.47 - switch2 - 10.0.0.46 - 1 - 180 - 60 - - - switch2 - 10.0.0.14 - ARISTA08T2 - 10.0.0.15 - 1 - 180 - 60 - - - ARISTA09T0 - 10.0.0.49 - switch2 - 10.0.0.48 - 1 - 180 - 60 - - - switch2 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 180 - 60 - - - ARISTA10T0 - 10.0.0.51 - switch2 - 10.0.0.50 - 1 - 180 - 60 - - - switch2 - 10.0.0.18 - ARISTA10T2 - 10.0.0.19 - 1 - 180 - 60 - - - ARISTA11T0 - 10.0.0.53 - switch2 - 10.0.0.52 - 1 - 180 - 60 - - - switch2 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 180 - 60 - - - ARISTA12T0 - 10.0.0.55 - switch2 - 10.0.0.54 - 1 - 180 - 60 - - - switch2 - 10.0.0.22 - ARISTA12T2 - 10.0.0.23 - 1 - 180 - 60 - - - ARISTA13T0 - 10.0.0.57 - switch2 - 10.0.0.56 - 1 - 180 - 60 - - - switch2 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 180 - 60 - - - ARISTA14T0 - 10.0.0.59 - switch2 - 10.0.0.58 - 1 - 180 - 60 - - - switch2 - 10.0.0.26 - ARISTA14T2 - 10.0.0.27 - 1 - 180 - 60 - - - ARISTA15T0 - 10.0.0.61 - switch2 - 10.0.0.60 - 1 - 180 - 60 - - - switch2 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 180 - 60 - - - ARISTA16T0 - 10.0.0.63 - switch2 - 10.0.0.62 - 1 - 180 - 60 - - - switch2 - 10.0.0.30 - ARISTA16T2 - 10.0.0.31 - 1 - 180 - 60 - - - - - 65100 - switch2 - - -
10.0.0.33
- - -
- -
10.0.0.1
- - -
- -
10.0.0.35
- - -
- -
10.0.0.3
- - -
- -
10.0.0.37
- - -
- -
10.0.0.5
- - -
- -
10.0.0.39
- - -
- -
10.0.0.7
- - -
- -
10.0.0.41
- - -
- -
10.0.0.9
- - -
- -
10.0.0.43
- - -
- -
10.0.0.11
- - -
- -
10.0.0.45
- - -
- -
10.0.0.13
- - -
- -
10.0.0.47
- - -
- -
10.0.0.15
- - -
- -
10.0.0.49
- - -
- -
10.0.0.17
- - -
- -
10.0.0.51
- - -
- -
10.0.0.19
- - -
- -
10.0.0.53
- - -
- -
10.0.0.21
- - -
- -
10.0.0.55
- - -
- -
10.0.0.23
- - -
- -
10.0.0.57
- - -
- -
10.0.0.25
- - -
- -
10.0.0.59
- - -
- -
10.0.0.27
- - -
- -
10.0.0.61
- - -
- -
10.0.0.29
- - -
- -
10.0.0.63
- - -
- -
10.0.0.31
- - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 65200 - ARISTA02T2 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 65200 - ARISTA04T2 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 65200 - ARISTA06T2 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 65200 - ARISTA08T2 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 65200 - ARISTA10T2 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 65200 - ARISTA12T2 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 65200 - ARISTA14T2 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - - - 65200 - ARISTA16T2 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - - - HostIP - eth0 - - 10.0.0.101/24 - - 10.0.0.101/24 - - - - - - switch2 - - - - - - Ethernet0 - 10.0.0.0/31 - - - - Ethernet4 - 10.0.0.2/31 - - - - Ethernet8 - 10.0.0.4/31 - - - - Ethernet12 - 10.0.0.6/31 - - - - Ethernet16 - 10.0.0.8/31 - - - - Ethernet20 - 10.0.0.10/31 - - - - Ethernet24 - 10.0.0.12/31 - - - - Ethernet28 - 10.0.0.14/31 - - - - Ethernet32 - 10.0.0.16/31 - - - - Ethernet36 - 10.0.0.18/31 - - - - Ethernet40 - 10.0.0.20/31 - - - - Ethernet44 - 10.0.0.22/31 - - - - Ethernet48 - 10.0.0.24/31 - - - - Ethernet52 - 10.0.0.26/31 - - - - Ethernet56 - 10.0.0.28/31 - - - - Ethernet60 - 10.0.0.30/31 - - - - Ethernet64 - 10.0.0.32/31 - - - - Ethernet68 - 10.0.0.34/31 - - - - Ethernet72 - 10.0.0.36/31 - - - - Ethernet76 - 10.0.0.38/31 - - - - Ethernet80 - 10.0.0.40/31 - - - - Ethernet84 - 10.0.0.42/31 - - - - Ethernet88 - 10.0.0.44/31 - - - - Ethernet92 - 10.0.0.46/31 - - - - Ethernet96 - 10.0.0.48/31 - - - - Ethernet100 - 10.0.0.50/31 - - - - Ethernet104 - 10.0.0.52/31 - - - - Ethernet108 - 10.0.0.54/31 - - - - Ethernet112 - 10.0.0.56/31 - - - - Ethernet116 - 10.0.0.58/31 - - - - Ethernet120 - 10.0.0.60/31 - - - - Ethernet124 - 10.0.0.62/31 - - - - - - - - - - - - DeviceInterfaceLink - switch2 - Ethernet0 - ARISTA01T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet4 - ARISTA02T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet8 - ARISTA03T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet12 - ARISTA04T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet16 - ARISTA05T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet20 - ARISTA06T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet24 - ARISTA07T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet28 - ARISTA08T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet32 - ARISTA09T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet36 - ARISTA10T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet40 - ARISTA11T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet44 - ARISTA12T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet48 - ARISTA13T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet52 - ARISTA14T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet56 - ARISTA15T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet60 - ARISTA16T2 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet64 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet68 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet72 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet76 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet80 - ARISTA05T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet84 - ARISTA06T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet88 - ARISTA07T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet92 - ARISTA08T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet96 - ARISTA09T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet100 - ARISTA10T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet104 - ARISTA11T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet108 - ARISTA12T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet112 - ARISTA13T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet116 - ARISTA14T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet120 - ARISTA15T0 - Ethernet1 - - - DeviceInterfaceLink - switch2 - Ethernet124 - ARISTA16T0 - Ethernet1 - - - - - switch2 - ACS-MSN2700 - - - - switch2 - ACS-MSN2700 -
diff --git a/ansible/minigraph/switch3.xml b/ansible/minigraph/switch3.xml deleted file mode 100644 index acd1416fdfb..00000000000 --- a/ansible/minigraph/switch3.xml +++ /dev/null @@ -1,922 +0,0 @@ - - - - - - ARISTA01T0 - 10.0.0.33 - switch3 - 10.0.0.32 - 1 - 180 - 60 - - - switch3 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 180 - 60 - - - ARISTA02T0 - 10.0.0.35 - switch3 - 10.0.0.34 - 1 - 180 - 60 - - - ARISTA03T0 - 10.0.0.37 - switch3 - 10.0.0.36 - 1 - 180 - 60 - - - switch3 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 180 - 60 - - - ARISTA04T0 - 10.0.0.39 - switch3 - 10.0.0.38 - 1 - 180 - 60 - - - ARISTA05T0 - 10.0.0.41 - switch3 - 10.0.0.40 - 1 - 180 - 60 - - - switch3 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 180 - 60 - - - ARISTA06T0 - 10.0.0.43 - switch3 - 10.0.0.42 - 1 - 180 - 60 - - - ARISTA07T0 - 10.0.0.45 - switch3 - 10.0.0.44 - 1 - 180 - 60 - - - switch3 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 180 - 60 - - - ARISTA08T0 - 10.0.0.47 - switch3 - 10.0.0.46 - 1 - 180 - 60 - - - ARISTA09T0 - 10.0.0.49 - switch3 - 10.0.0.48 - 1 - 180 - 60 - - - switch3 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 180 - 60 - - - ARISTA10T0 - 10.0.0.51 - switch3 - 10.0.0.50 - 1 - 180 - 60 - - - ARISTA11T0 - 10.0.0.53 - switch3 - 10.0.0.52 - 1 - 180 - 60 - - - switch3 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 180 - 60 - - - ARISTA12T0 - 10.0.0.55 - switch3 - 10.0.0.54 - 1 - 180 - 60 - - - ARISTA13T0 - 10.0.0.57 - switch3 - 10.0.0.56 - 1 - 180 - 60 - - - switch3 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 180 - 60 - - - ARISTA14T0 - 10.0.0.59 - switch3 - 10.0.0.58 - 1 - 180 - 60 - - - ARISTA15T0 - 10.0.0.61 - switch3 - 10.0.0.60 - 1 - 180 - 60 - - - switch3 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 180 - 60 - - - ARISTA16T0 - 10.0.0.63 - switch3 - 10.0.0.62 - 1 - 180 - 60 - - - - - 65100 - switch3 - - -
10.0.0.33
- - -
- -
10.0.0.1
- - -
- -
10.0.0.35
- - -
- -
10.0.0.37
- - -
- -
10.0.0.5
- - -
- -
10.0.0.39
- - -
- -
10.0.0.41
- - -
- -
10.0.0.9
- - -
- -
10.0.0.43
- - -
- -
10.0.0.45
- - -
- -
10.0.0.13
- - -
- -
10.0.0.47
- - -
- -
10.0.0.49
- - -
- -
10.0.0.17
- - -
- -
10.0.0.51
- - -
- -
10.0.0.53
- - -
- -
10.0.0.21
- - -
- -
10.0.0.55
- - -
- -
10.0.0.57
- - -
- -
10.0.0.25
- - -
- -
10.0.0.59
- - -
- -
10.0.0.61
- - -
- -
10.0.0.29
- - -
- -
10.0.0.63
- - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - - - HostIP - eth0 - - 10.0.0.102/24 - - 10.0.0.102/24 - - - - - - switch3 - - - PortChannelInterface - PortChannel0 - fortyGigE0/0;fortyGigE0/4 - - - - PortChannelInterface - PortChannel8 - fortyGigE0/8;fortyGigE0/12 - - - - PortChannelInterface - PortChannel16 - fortyGigE0/16;fortyGigE0/20 - - - - PortChannelInterface - PortChannel24 - fortyGigE0/24;fortyGigE0/28 - - - - PortChannelInterface - PortChannel32 - fortyGigE0/32;fortyGigE0/36 - - - - PortChannelInterface - PortChannel40 - fortyGigE0/40;fortyGigE0/44 - - - - PortChannelInterface - PortChannel48 - fortyGigE0/48;fortyGigE0/52 - - - - PortChannelInterface - PortChannel56 - fortyGigE0/56;fortyGigE0/60 - - - - - - - IPInterface - - PortChannel0 - 10.0.0.0/31 - - - IPInterface - - PortChannel8 - 10.0.0.4/31 - - - IPInterface - - PortChannel16 - 10.0.0.8/31 - - - IPInterface - - PortChannel24 - 10.0.0.12/31 - - - IPInterface - - PortChannel32 - 10.0.0.16/31 - - - IPInterface - - PortChannel40 - 10.0.0.20/31 - - - IPInterface - - PortChannel48 - 10.0.0.24/31 - - - IPInterface - - PortChannel56 - 10.0.0.28/31 - - - - fortyGigE0/64 - 10.0.0.32/31 - - - - fortyGigE0/68 - 10.0.0.34/31 - - - - fortyGigE0/72 - 10.0.0.36/31 - - - - fortyGigE0/76 - 10.0.0.38/31 - - - - fortyGigE0/80 - 10.0.0.40/31 - - - - fortyGigE0/84 - 10.0.0.42/31 - - - - fortyGigE0/88 - 10.0.0.44/31 - - - - fortyGigE0/92 - 10.0.0.46/31 - - - - fortyGigE0/96 - 10.0.0.48/31 - - - - fortyGigE0/100 - 10.0.0.50/31 - - - - fortyGigE0/104 - 10.0.0.52/31 - - - - fortyGigE0/108 - 10.0.0.54/31 - - - - fortyGigE0/112 - 10.0.0.56/31 - - - - fortyGigE0/116 - 10.0.0.58/31 - - - - fortyGigE0/120 - 10.0.0.60/31 - - - - fortyGigE0/124 - 10.0.0.62/31 - - - - - - - - - - - - DeviceInterfaceLink - switch3 - fortyGigE0/0 - ARISTA01T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/4 - ARISTA01T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/8 - ARISTA03T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/12 - ARISTA03T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/16 - ARISTA05T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/20 - ARISTA05T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/24 - ARISTA07T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/28 - ARISTA07T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/32 - ARISTA09T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/36 - ARISTA09T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/40 - ARISTA11T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/44 - ARISTA11T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/48 - ARISTA13T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/52 - ARISTA13T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/56 - ARISTA15T2 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/60 - ARISTA15T2 - Ethernet2 - - - DeviceInterfaceLink - switch3 - fortyGigE0/64 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/68 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/72 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/76 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/80 - ARISTA05T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/84 - ARISTA06T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/88 - ARISTA07T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/92 - ARISTA08T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/96 - ARISTA09T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/100 - ARISTA10T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/104 - ARISTA11T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/108 - ARISTA12T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/112 - ARISTA13T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/116 - ARISTA14T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/120 - ARISTA15T0 - Ethernet1 - - - DeviceInterfaceLink - switch3 - fortyGigE0/124 - ARISTA16T0 - Ethernet1 - - - - - switch3 - Force10-S6000 - - - - switch3 - Force10-S6000 -
diff --git a/ansible/minigraph/switch5.xml b/ansible/minigraph/switch5.xml deleted file mode 100644 index e3754462b89..00000000000 --- a/ansible/minigraph/switch5.xml +++ /dev/null @@ -1,1274 +0,0 @@ - - - - - - ARISTA01T0 - 10.0.0.33 - switch5 - 10.0.0.32 - 1 - 180 - 60 - - - ARISTA01T0 - FC00::42 - switch5 - FC00::41 - 1 - 180 - 60 - - - switch5 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 180 - 60 - - - switch5 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 180 - 60 - - - ARISTA02T0 - 10.0.0.35 - switch5 - 10.0.0.34 - 1 - 180 - 60 - - - ARISTA02T0 - FC00::46 - switch5 - FC00::45 - 1 - 180 - 60 - - - ARISTA03T0 - 10.0.0.37 - switch5 - 10.0.0.36 - 1 - 180 - 60 - - - ARISTA03T0 - FC00::4A - switch5 - FC00::49 - 1 - 180 - 60 - - - switch5 - 10.0.0.4 - ARISTA03T2 - 10.0.0.5 - 1 - 180 - 60 - - - switch5 - FC00::9 - ARISTA03T2 - FC00::A - 1 - 180 - 60 - - - ARISTA04T0 - 10.0.0.39 - switch5 - 10.0.0.38 - 1 - 180 - 60 - - - ARISTA04T0 - FC00::4E - switch5 - FC00::4D - 1 - 180 - 60 - - - ARISTA05T0 - 10.0.0.41 - switch5 - 10.0.0.40 - 1 - 180 - 60 - - - ARISTA05T0 - FC00::52 - switch5 - FC00::51 - 1 - 180 - 60 - - - switch5 - 10.0.0.8 - ARISTA05T2 - 10.0.0.9 - 1 - 180 - 60 - - - switch5 - FC00::11 - ARISTA05T2 - FC00::12 - 1 - 180 - 60 - - - ARISTA06T0 - 10.0.0.43 - switch5 - 10.0.0.42 - 1 - 180 - 60 - - - ARISTA06T0 - FC00::56 - switch5 - FC00::55 - 1 - 180 - 60 - - - ARISTA07T0 - 10.0.0.45 - switch5 - 10.0.0.44 - 1 - 180 - 60 - - - ARISTA07T0 - FC00::5A - switch5 - FC00::59 - 1 - 180 - 60 - - - switch5 - 10.0.0.12 - ARISTA07T2 - 10.0.0.13 - 1 - 180 - 60 - - - switch5 - FC00::19 - ARISTA07T2 - FC00::1A - 1 - 180 - 60 - - - ARISTA08T0 - 10.0.0.47 - switch5 - 10.0.0.46 - 1 - 180 - 60 - - - ARISTA08T0 - FC00::5E - switch5 - FC00::5D - 1 - 180 - 60 - - - ARISTA09T0 - 10.0.0.49 - switch5 - 10.0.0.48 - 1 - 180 - 60 - - - ARISTA09T0 - FC00::62 - switch5 - FC00::61 - 1 - 180 - 60 - - - switch5 - 10.0.0.16 - ARISTA09T2 - 10.0.0.17 - 1 - 180 - 60 - - - switch5 - FC00::21 - ARISTA09T2 - FC00::22 - 1 - 180 - 60 - - - ARISTA10T0 - 10.0.0.51 - switch5 - 10.0.0.50 - 1 - 180 - 60 - - - ARISTA10T0 - FC00::66 - switch5 - FC00::65 - 1 - 180 - 60 - - - ARISTA11T0 - 10.0.0.53 - switch5 - 10.0.0.52 - 1 - 180 - 60 - - - ARISTA11T0 - FC00::6A - switch5 - FC00::69 - 1 - 180 - 60 - - - switch5 - 10.0.0.20 - ARISTA11T2 - 10.0.0.21 - 1 - 180 - 60 - - - switch5 - FC00::29 - ARISTA11T2 - FC00::2A - 1 - 180 - 60 - - - ARISTA12T0 - 10.0.0.55 - switch5 - 10.0.0.54 - 1 - 180 - 60 - - - ARISTA12T0 - FC00::6E - switch5 - FC00::6D - 1 - 180 - 60 - - - ARISTA13T0 - 10.0.0.57 - switch5 - 10.0.0.56 - 1 - 180 - 60 - - - ARISTA13T0 - FC00::72 - switch5 - FC00::71 - 1 - 180 - 60 - - - switch5 - 10.0.0.24 - ARISTA13T2 - 10.0.0.25 - 1 - 180 - 60 - - - switch5 - FC00::31 - ARISTA13T2 - FC00::32 - 1 - 180 - 60 - - - ARISTA14T0 - 10.0.0.59 - switch5 - 10.0.0.58 - 1 - 180 - 60 - - - ARISTA14T0 - FC00::76 - switch5 - FC00::75 - 1 - 180 - 60 - - - ARISTA15T0 - 10.0.0.61 - switch5 - 10.0.0.60 - 1 - 180 - 60 - - - ARISTA15T0 - FC00::7A - switch5 - FC00::79 - 1 - 180 - 60 - - - switch5 - 10.0.0.28 - ARISTA15T2 - 10.0.0.29 - 1 - 180 - 60 - - - switch5 - FC00::39 - ARISTA15T2 - FC00::3A - 1 - 180 - 60 - - - ARISTA16T0 - 10.0.0.63 - switch5 - 10.0.0.62 - 1 - 180 - 60 - - - ARISTA16T0 - FC00::7E - switch5 - FC00::7D - 1 - 180 - 60 - - - - - 65100 - switch5 - - -
10.0.0.33
- - -
- -
10.0.0.1
- - -
- -
10.0.0.35
- - -
- -
10.0.0.37
- - -
- -
10.0.0.5
- - -
- -
10.0.0.39
- - -
- -
10.0.0.41
- - -
- -
10.0.0.9
- - -
- -
10.0.0.43
- - -
- -
10.0.0.45
- - -
- -
10.0.0.13
- - -
- -
10.0.0.47
- - -
- -
10.0.0.49
- - -
- -
10.0.0.17
- - -
- -
10.0.0.51
- - -
- -
10.0.0.53
- - -
- -
10.0.0.21
- - -
- -
10.0.0.55
- - -
- -
10.0.0.57
- - -
- -
10.0.0.25
- - -
- -
10.0.0.59
- - -
- -
10.0.0.61
- - -
- -
10.0.0.29
- - -
- -
10.0.0.63
- - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 64002 - ARISTA02T0 - - - - 64003 - ARISTA03T0 - - - - 65200 - ARISTA03T2 - - - - 64004 - ARISTA04T0 - - - - 64005 - ARISTA05T0 - - - - 65200 - ARISTA05T2 - - - - 64006 - ARISTA06T0 - - - - 64007 - ARISTA07T0 - - - - 65200 - ARISTA07T2 - - - - 64008 - ARISTA08T0 - - - - 64009 - ARISTA09T0 - - - - 65200 - ARISTA09T2 - - - - 64010 - ARISTA10T0 - - - - 64011 - ARISTA11T0 - - - - 65200 - ARISTA11T2 - - - - 64012 - ARISTA12T0 - - - - 64013 - ARISTA13T0 - - - - 65200 - ARISTA13T2 - - - - 64014 - ARISTA14T0 - - - - 64015 - ARISTA15T0 - - - - 65200 - ARISTA15T2 - - - - 64016 - ARISTA16T0 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - 200A:0100::20/128 - - 200A:0100::20/128 - - - - - HostIP - eth0 - - 10.3.147.47/24 - - 10.3.147.47/24 - - - - - - switch5 - - - PortChannelInterface - PortChannel0 - Ethernet0;Ethernet4 - - - - PortChannelInterface - PortChannel8 - Ethernet8;Ethernet12 - - - - PortChannelInterface - PortChannel16 - Ethernet16;Ethernet20 - - - - PortChannelInterface - PortChannel24 - Ethernet24;Ethernet28 - - - - PortChannelInterface - PortChannel32 - Ethernet32;Ethernet36 - - - - PortChannelInterface - PortChannel40 - Ethernet40;Ethernet44 - - - - PortChannelInterface - PortChannel48 - Ethernet48;Ethernet52 - - - - PortChannelInterface - PortChannel56 - Ethernet56;Ethernet60 - - - - - - - IPInterface - - PortChannel0 - 10.0.0.0/31 - - - IPInterface - - PortChannel0 - FC00::1/126 - - - IPInterface - - PortChannel8 - 10.0.0.4/31 - - - IPInterface - - PortChannel8 - FC00::9/126 - - - IPInterface - - PortChannel16 - 10.0.0.8/31 - - - IPInterface - - PortChannel16 - FC00::11/126 - - - IPInterface - - PortChannel24 - 10.0.0.12/31 - - - IPInterface - - PortChannel24 - FC00::19/126 - - - IPInterface - - PortChannel32 - 10.0.0.16/31 - - - IPInterface - - PortChannel32 - FC00::21/126 - - - IPInterface - - PortChannel40 - 10.0.0.20/31 - - - IPInterface - - PortChannel40 - FC00::29/126 - - - IPInterface - - PortChannel48 - 10.0.0.24/31 - - - IPInterface - - PortChannel48 - FC00::31/126 - - - IPInterface - - PortChannel56 - 10.0.0.28/31 - - - IPInterface - - PortChannel56 - FC00::39/126 - - - - Ethernet64 - 10.0.0.32/31 - - - - Ethernet64 - FC00::41/126 - - - - Ethernet68 - 10.0.0.34/31 - - - - Ethernet68 - FC00::45/126 - - - - Ethernet72 - 10.0.0.36/31 - - - - Ethernet72 - FC00::49/126 - - - - Ethernet76 - 10.0.0.38/31 - - - - Ethernet76 - FC00::4D/126 - - - - Ethernet80 - 10.0.0.40/31 - - - - Ethernet80 - FC00::51/126 - - - - Ethernet84 - 10.0.0.42/31 - - - - Ethernet84 - FC00::55/126 - - - - Ethernet88 - 10.0.0.44/31 - - - - Ethernet88 - FC00::59/126 - - - - Ethernet92 - 10.0.0.46/31 - - - - Ethernet92 - FC00::5D/126 - - - - Ethernet96 - 10.0.0.48/31 - - - - Ethernet96 - FC00::61/126 - - - - Ethernet100 - 10.0.0.50/31 - - - - Ethernet100 - FC00::65/126 - - - - Ethernet104 - 10.0.0.52/31 - - - - Ethernet104 - FC00::69/126 - - - - Ethernet108 - 10.0.0.54/31 - - - - Ethernet108 - FC00::6D/126 - - - - Ethernet112 - 10.0.0.56/31 - - - - Ethernet112 - FC00::71/126 - - - - Ethernet116 - 10.0.0.58/31 - - - - Ethernet116 - FC00::75/126 - - - - Ethernet120 - 10.0.0.60/31 - - - - Ethernet120 - FC00::79/126 - - - - Ethernet124 - 10.0.0.62/31 - - - - Ethernet124 - FC00::7D/126 - - - - - - - - - - - - DeviceInterfaceLink - switch5 - Ethernet0 - ARISTA01T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet4 - ARISTA01T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet8 - ARISTA03T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet12 - ARISTA03T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet16 - ARISTA05T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet20 - ARISTA05T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet24 - ARISTA07T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet28 - ARISTA07T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet32 - ARISTA09T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet36 - ARISTA09T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet40 - ARISTA11T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet44 - ARISTA11T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet48 - ARISTA13T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet52 - ARISTA13T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet56 - ARISTA15T2 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet60 - ARISTA15T2 - Ethernet2 - - - DeviceInterfaceLink - switch5 - Ethernet64 - ARISTA01T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet68 - ARISTA02T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet72 - ARISTA03T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet76 - ARISTA04T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet80 - ARISTA05T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet84 - ARISTA06T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet88 - ARISTA07T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet92 - ARISTA08T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet96 - ARISTA09T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet100 - ARISTA10T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet104 - ARISTA11T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet108 - ARISTA12T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet112 - ARISTA13T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet116 - ARISTA14T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet120 - ARISTA15T0 - Ethernet1 - - - DeviceInterfaceLink - switch5 - Ethernet124 - ARISTA16T0 - Ethernet1 - - - - - switch5 - ACS-MSN2700 - - - - switch5 - ACS-MSN2700 -
diff --git a/ansible/minigraph/t0-64-32.xml b/ansible/minigraph/t0-64-32.xml deleted file mode 100644 index 8bc775cfb12..00000000000 --- a/ansible/minigraph/t0-64-32.xml +++ /dev/null @@ -1,585 +0,0 @@ - - - - - - ARISTA01T1 - 10.0.0.1 - t0-64-32 - 10.0.0.0 - 1 - 180 - 60 - - - ARISTA02T1 - 10.0.0.5 - t0-64-32 - 10.0.0.4 - 1 - 180 - 60 - - - ARISTA03T1 - 10.0.0.9 - t0-64-32 - 10.0.0.8 - 1 - 180 - 60 - - - ARISTA04T1 - 10.0.0.13 - t0-64-32 - 10.0.0.12 - 1 - 180 - 60 - - - ARISTA01T1 - FC00::2 - t0-64-32 - FC00::1 - 1 - 180 - 60 - - - ARISTA02T1 - FC00::A - t0-64-32 - FC00::9 - 1 - 180 - 60 - - - ARISTA03T1 - FC00::12 - t0-64-32 - FC00::11 - 1 - 180 - 60 - - - ARISTA04T1 - FC00::1A - t0-64-32 - FC00::19 - 1 - 180 - 60 - - - - - 64601 - t0-64-32 - - - BGPPeer -
10.0.0.1
- - - -
- - BGPPeer -
10.0.0.5
- - - -
- - BGPPeer -
10.0.0.9
- - - -
- - BGPPeer -
10.0.0.13
- - - -
- - BGPPeer -
FC00::2
- - - -
- - BGPPeer -
FC00::A
- - - -
- - BGPPeer -
FC00::12
- - - -
- - BGPPeer -
FC00::1A
- - - -
-
- -
- - 64802 - ARISTA01T1 - - - - 64802 - ARISTA02T1 - - - - 64802 - ARISTA03T1 - - - - 64802 - ARISTA04T1 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.33/32 - - 10.1.0.33/32 - - - HostIP1 - Loopback0 - - FC00:1::33/128 - - FC00:1::33/128 - - - - - HostIP - eth0 - - 10.250.0.113/23 - - 10.250.0.113/23 - - - - - - t0-64-32 - - - PortChannelInterface - PortChannel1 - fortyGigE0/0;fortyGigE0/4 - - - - PortChannelInterface - PortChannel4 - fortyGigE0/16;fortyGigE0/20 - - - - PortChannelInterface - PortChannel16 - fortyGigE0/64;fortyGigE0/68 - - - - PortChannelInterface - PortChannel20 - fortyGigE0/80;fortyGigE0/84 - - - - - - VlanInterface - Vlan2 - fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96;fortyGigE0/100;fortyGigE0/104;fortyGigE0/108;fortyGigE0/112;fortyGigE0/116;fortyGigE0/120;fortyGigE0/124 - False - 0.0.0.0/0 - - 2 - 2 - 172.0.0.0/26 - - - - - IPInterface - - PortChannel1 - 10.0.0.0/31 - - - IPInterface - - PortChannel4 - 10.0.0.4/31 - - - IPInterface - - PortChannel16 - 10.0.0.8/31 - - - IPInterface - - PortChannel20 - 10.0.0.12/31 - - - IPInterface - - PortChannel1 - FC00::1/126 - - - IPInterface - - PortChannel4 - FC00::9/126 - - - IPInterface - - PortChannel16 - FC00::11/126 - - - IPInterface - - PortChannel20 - FC00::19/126 - - - IPInterface - - Vlan2 - 172.0.0.1/26 - - - - - - - - - - - - DeviceInterfaceLink - true - 40000 - ARISTA01T1 - Ethernet1 - true - t0-64-32 - fortyGigE0/0 - - - DeviceInterfaceLink - true - 40000 - ARISTA01T1 - Ethernet2 - true - t0-64-32 - fortyGigE0/4 - - - DeviceInterfaceLink - true - 40000 - ARISTA02T1 - Ethernet1 - true - t0-64-32 - fortyGigE0/16 - - - DeviceInterfaceLink - true - 40000 - ARISTA02T1 - Ethernet2 - true - t0-64-32 - fortyGigE0/20 - - - DeviceInterfaceLink - true - 40000 - ARISTA03T1 - Ethernet1 - true - t0-64-32 - fortyGigE0/64 - - - DeviceInterfaceLink - true - 40000 - ARISTA03T1 - Ethernet2 - true - t0-64-32 - fortyGigE0/68 - - - DeviceInterfaceLink - true - 40000 - ARISTA04T1 - Ethernet1 - true - t0-64-32 - fortyGigE0/80 - - - DeviceInterfaceLink - true - 40000 - ARISTA04T1 - Ethernet2 - true - t0-64-32 - fortyGigE0/84 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/24 - true - server-01 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/28 - true - server-02 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/32 - true - server-03 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/40 - true - server-05 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/44 - true - server-06 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/48 - true - server-07 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/52 - true - server-08 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/56 - true - server-09 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/60 - true - server-10 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/88 - true - server-19 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/92 - true - server-20 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/96 - true - server-21 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/100 - true - server-22 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/104 - true - server-23 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/108 - true - server-24 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/112 - true - server-25 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/116 - true - server-26 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/120 - true - server-27 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64-32 - fortyGigE0/124 - true - server-28 - 0 - - - - - t0-64-32 - Force10-S6000 - - 10.250.0.113 - - - - - t0-64-32 - Force10-S6000 -
diff --git a/ansible/minigraph/t0-64.xml b/ansible/minigraph/t0-64.xml deleted file mode 100644 index 8b5f9fa7f10..00000000000 --- a/ansible/minigraph/t0-64.xml +++ /dev/null @@ -1,755 +0,0 @@ - - - - - - ARISTA01T1 - 10.0.0.1 - t0-64 - 10.0.0.0 - 1 - 180 - 60 - - - ARISTA02T1 - 10.0.0.5 - t0-64 - 10.0.0.4 - 1 - 180 - 60 - - - ARISTA03T1 - 10.0.0.9 - t0-64 - 10.0.0.8 - 1 - 180 - 60 - - - ARISTA04T1 - 10.0.0.13 - t0-64 - 10.0.0.12 - 1 - 180 - 60 - - - ARISTA01T1 - FC00::2 - t0-64 - FC00::1 - 1 - 180 - 60 - - - ARISTA02T1 - FC00::A - t0-64 - FC00::9 - 1 - 180 - 60 - - - ARISTA03T1 - FC00::12 - t0-64 - FC00::11 - 1 - 180 - 60 - - - ARISTA04T1 - FC00::1A - t0-64 - FC00::19 - 1 - 180 - 60 - - - - - 64601 - t0-64 - - - BGPPeer -
10.0.0.1
- - - -
- - BGPPeer -
10.0.0.5
- - - -
- - BGPPeer -
10.0.0.9
- - - -
- - BGPPeer -
10.0.0.13
- - - -
- - BGPPeer -
FC00::2
- - - -
- - BGPPeer -
FC00::A
- - - -
- - BGPPeer -
FC00::12
- - - -
- - BGPPeer -
FC00::1A
- - - -
-
- -
- - 64802 - ARISTA01T1 - - - - 64802 - ARISTA02T1 - - - - 64802 - ARISTA03T1 - - - - 64802 - ARISTA04T1 - - -
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.251.0.243/23 - - 10.251.0.243/23 - - - - - - t0-64 - - - PortChannelInterface - PortChannel1 - fortyGigE1/1/1;fortyGigE1/1/2 - - - - PortChannelInterface - PortChannel4 - fortyGigE1/1/5;fortyGigE1/1/6 - - - - PortChannelInterface - PortChannel16 - fortyGigE1/2/1;fortyGigE1/2/2 - - - - PortChannelInterface - PortChannel20 - fortyGigE1/2/5;fortyGigE1/2/6 - - - - - - VlanInterface - Vlan2 - fortyGigE1/1/7;fortyGigE1/1/8;fortyGigE1/1/9;fortyGigE1/1/10;fortyGigE1/1/11;fortyGigE1/1/12;fortyGigE1/1/13;fortyGigE1/1/14;fortyGigE1/1/15;fortyGigE1/1/16;fortyGigE1/3/1;fortyGigE1/3/5;fortyGigE1/3/6;fortyGigE1/3/7;fortyGigE1/3/8;fortyGigE1/3/9;fortyGigE1/3/10;fortyGigE1/3/11;fortyGigE1/2/7;fortyGigE1/2/8;fortyGigE1/2/9;fortyGigE1/2/10;fortyGigE1/2/11;fortyGigE1/2/12;fortyGigE1/2/13;fortyGigE1/2/14;fortyGigE1/2/15;fortyGigE1/2/16;fortyGigE1/4/1;fortyGigE1/4/5;fortyGigE1/4/6;fortyGigE1/4/7;fortyGigE1/4/8;fortyGigE1/4/9;fortyGigE1/4/10;fortyGigE1/4/11 - False - 0.0.0.0/0 - - 2 - 2 - 172.0.0.0/26 - - - - - IPInterface - - PortChannel1 - 10.0.0.0/31 - - - IPInterface - - PortChannel4 - 10.0.0.4/31 - - - IPInterface - - PortChannel16 - 10.0.0.8/31 - - - IPInterface - - PortChannel20 - 10.0.0.12/31 - - - IPInterface - - PortChannel1 - FC00::1/126 - - - IPInterface - - PortChannel4 - FC00::9/126 - - - IPInterface - - PortChannel16 - FC00::11/126 - - - IPInterface - - PortChannel20 - FC00::19/126 - - - IPInterface - - Vlan2 - 172.0.0.1/26 - - - - - - - - - - - - DeviceInterfaceLink - true - 40000 - ARISTA01T1 - Ethernet1 - true - t0-64 - fortyGigE1/1/1 - - - DeviceInterfaceLink - true - 40000 - ARISTA01T1 - Ethernet2 - true - t0-64 - fortyGigE1/1/2 - - - DeviceInterfaceLink - true - 40000 - ARISTA02T1 - Ethernet1 - true - t0-64 - fortyGigE1/1/5 - - - DeviceInterfaceLink - true - 40000 - ARISTA02T1 - Ethernet2 - true - t0-64 - fortyGigE1/1/6 - - - DeviceInterfaceLink - true - 40000 - ARISTA03T1 - Ethernet1 - true - t0-64 - fortyGigE1/2/1 - - - DeviceInterfaceLink - true - 40000 - ARISTA03T1 - Ethernet2 - true - t0-64 - fortyGigE1/2/2 - - - DeviceInterfaceLink - true - 40000 - ARISTA04T1 - Ethernet1 - true - t0-64 - fortyGigE1/2/5 - - - DeviceInterfaceLink - true - 40000 - ARISTA04T1 - Ethernet2 - true - t0-64 - fortyGigE1/2/6 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/7 - true - server-01 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/8 - true - server-02 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/9 - true - server-03 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/10 - true - server-04 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/11 - true - server-05 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/12 - true - server-06 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/13 - true - server-07 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/14 - true - server-08 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/15 - true - server-09 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/1/16 - true - server-10 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/1 - true - server-11 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/5 - true - server-12 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/6 - true - server-13 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/7 - true - server-14 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/8 - true - server-15 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/9 - true - server-16 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/10 - true - server-17 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/3/11 - true - server-18 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/7 - true - server-19 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/8 - true - server-20 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/9 - true - server-21 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/10 - true - server-22 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/11 - true - server-23 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/12 - true - server-24 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/13 - true - server-25 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/14 - true - server-26 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/15 - true - server-27 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/2/16 - true - server-28 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/1 - true - server-29 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/5 - true - server-30 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/6 - true - server-31 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/7 - true - server-32 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/8 - true - server-33 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/9 - true - server-34 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/10 - true - server-35 - 0 - - - DeviceInterfaceLink - true - 40000 - t0-64 - fortyGigE1/4/11 - true - server-36 - 0 - - - - - t0-64 - Force10-S6100 - - 10.251.0.243 - - - - - t0-64 - Force10-S6100 -
diff --git a/ansible/minigraph/vlab-08.t1-8-lag.xml b/ansible/minigraph/vlab-08.t1-8-lag.xml deleted file mode 100644 index 7ad4f918683..00000000000 --- a/ansible/minigraph/vlab-08.t1-8-lag.xml +++ /dev/null @@ -1,1634 +0,0 @@ - - - - - - false - vlab-08 - 10.0.0.32 - ARISTA01T0 - 10.0.0.33 - 1 - 10 - 3 - - - false - ASIC1 - 10.0.0.32 - ARISTA01T0 - 10.0.0.33 - 1 - 10 - 3 - - - vlab-08 - FC00::41 - ARISTA01T0 - FC00::42 - 1 - 10 - 3 - - - ASIC1 - FC00::41 - ARISTA01T0 - FC00::42 - 1 - 10 - 3 - - - false - vlab-08 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - false - ASIC0 - 10.0.0.0 - ARISTA01T2 - 10.0.0.1 - 1 - 10 - 3 - - - vlab-08 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - ASIC0 - FC00::1 - ARISTA01T2 - FC00::2 - 1 - 10 - 3 - - - false - ASIC1 - 10.1.0.7 - ASIC3 - 10.1.0.6 - 1 - 0 - 0 - - - ASIC1 - 2603:10E2:400:1::E - ASIC3 - 2603:10E2:400:1::D - 1 - 0 - 0 - - - false - ASIC1 - 10.1.0.5 - ASIC2 - 10.1.0.4 - 1 - 0 - 0 - - - ASIC1 - 2603:10E2:400:1::A - ASIC2 - 2603:10E2:400:1::9 - 1 - 0 - 0 - - - - false - ASIC0 - 10.1.0.3 - ASIC3 - 10.1.0.2 - 1 - 0 - 0 - - - ASIC0 - 2603:10E2:400:1::6 - ASIC3 - 2603:10E2:400:1::5 - 1 - 0 - 0 - - - false - ASIC0 - 10.1.0.1 - ASIC2 - 10.1.0.0 - 1 - 0 - 0 - - - ASIC0 - 2603:10E2:400:1::2 - ASIC2 - 2603:10E2:400:1::1 - 1 - 0 - 0 - - - - false - ASIC3 - 10.1.0.6 - ASIC1 - 10.1.0.7 - 1 - 0 - 0 - - - ASIC3 - 2603:10E2:400:1::D - ASIC1 - 2603:10E2:400:1::E - 1 - 0 - 0 - - - false - ASIC3 - 10.1.0.2 - ASIC0 - 10.1.0.3 - 1 - 0 - 0 - - - ASIC3 - 2603:10E2:400:1::5 - ASIC0 - 2603:10E2:400:1::6 - 1 - 0 - 0 - - - - false - ASIC2 - 10.1.0.4 - ASIC1 - 10.1.0.5 - 1 - 0 - 0 - - - ASIC2 - 2603:10E2:400:1::9 - ASIC1 - 2603:10E2:400:1::A - 1 - 0 - 0 - - - false - ASIC2 - 10.1.0.0 - ASIC0 - 10.1.0.1 - 1 - 0 - 0 - - - ASIC2 - 2603:10E2:400:1::1 - ASIC0 - 2603:10E2:400:1::2 - 1 - 0 - 0 - - - - - - 65100 - vlab-08 - - -
10.0.0.33
- - - -
- -
10.0.0.1
- - - -
-
- -
- - 64001 - ARISTA01T0 - - - - 65200 - ARISTA01T2 - - - - 65100 - ASIC1 - - -
10.0.0.33
- - - -
- -
10.1.0.6
- - - -
- -
10.1.0.4
- - - -
-
- -
- - 65100 - ASIC0 - - -
10.0.0.1
- - - -
- -
10.1.0.2
- - - -
- -
10.1.0.0
- - - -
-
- -
- - 65100 - ASIC3 - - -
10.1.0.7
- - - -
- -
10.1.0.3
- - - -
-
- -
- - 65100 - ASIC2 - - -
10.1.0.5
- - - -
- -
10.1.0.1
- - - -
-
- -
-
-
- - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - - - HostIP - eth0 - - 10.250.0.112/24 - - 10.250.0.112/24 - - - V6HostIP - eth0 - - fec0::ffff:afa:c/64 - - fec0::ffff:afa:c/64 - - - - - - - vlab-08 - - - PortChannel101 - Ethernet1/5 - - - - PortChannel102 - Ethernet1/1;Ethernet1/2 - - - - - - - - - PortChannel101 - 10.0.0.32/31 - - - - PortChannel101 - FC00::41/126 - - - - PortChannel102 - 10.0.0.0/31 - - - - PortChannel102 - FC00::1/126 - - - - - - NTP_ACL - NTP - NTP - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel101;PortChannel102 - DataAcl - DataPlane - - - - - - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - HostIP1 - Loopback4096 - - 8.0.0.1/32 - - 8.0.0.1/32 - - - HostIP1 - Loopback4096 - - 2603:10e2:400::1/128 - - 2603:10e2:400::1/128 - - - - - HostIP - eth0 - - 10.250.0.112/24 - - 10.250.0.112/24 - - - V6HostIP - eth0 - - fec0::ffff:afa:c/64 - - fec0::ffff:afa:c/64 - - - - - - - ASIC1 - - - PortChannel101 - Eth0-ASIC1 - - - - PortChannel20 - Eth6-ASIC1;Eth7-ASIC1 - - - - PortChannel19 - Eth4-ASIC1;Eth5-ASIC1 - - - - - - - - PortChannel101 - 10.0.0.32/31 - - - - PortChannel101 - FC00::41/126 - - - - PortChannel20 - 10.1.0.7/31 - - - - PortChannel20 - 2603:10E2:400:1::E/126 - - - - PortChannel19 - 10.1.0.5/31 - - - - PortChannel19 - 2603:10E2:400:1::A/126 - - - - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel101;PortChannel20;PortChannel19;Eth0-ASIC1;Eth6-ASIC1;Eth4-ASIC1 - DataAcl - DataPlane - - - - - - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - HostIP1 - Loopback4096 - - 8.0.0.0/32 - - 8.0.0.0/32 - - - HostIP1 - Loopback4096 - - 2603:10e2:400::/128 - - 2603:10e2:400::/128 - - - - - HostIP - eth0 - - 10.250.0.112/24 - - 10.250.0.112/24 - - - V6HostIP - eth0 - - fec0::ffff:afa:c/64 - - fec0::ffff:afa:c/64 - - - - - - - ASIC0 - - - PortChannel102 - Eth0-ASIC0;Eth1-ASIC0 - - - - PortChannel04 - Eth6-ASIC0;Eth7-ASIC0 - - - - PortChannel03 - Eth4-ASIC0;Eth5-ASIC0 - - - - - - - - PortChannel102 - 10.0.0.0/31 - - - - PortChannel102 - FC00::1/126 - - - - PortChannel04 - 10.1.0.3/31 - - - - PortChannel04 - 2603:10E2:400:1::6/126 - - - - PortChannel03 - 10.1.0.1/31 - - - - PortChannel03 - 2603:10E2:400:1::2/126 - - - - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel102;PortChannel04;PortChannel03;Eth0-ASIC0;Eth6-ASIC0;Eth4-ASIC0 - DataAcl - DataPlane - - - - - - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - HostIP1 - Loopback4096 - - 8.0.0.3/32 - - 8.0.0.3/32 - - - HostIP1 - Loopback4096 - - 2603:10e2:400::3/128 - - 2603:10e2:400::3/128 - - - - - HostIP - eth0 - - 10.250.0.112/24 - - 10.250.0.112/24 - - - V6HostIP - eth0 - - fec0::ffff:afa:c/64 - - fec0::ffff:afa:c/64 - - - - - - - ASIC3 - - - PortChannel50 - Eth2-ASIC3;Eth3-ASIC3 - - - - PortChannel49 - Eth0-ASIC3;Eth1-ASIC3 - - - - - - - - PortChannel50 - 10.1.0.6/31 - - - - PortChannel50 - 2603:10E2:400:1::D/126 - - - - PortChannel49 - 10.1.0.2/31 - - - - PortChannel49 - 2603:10E2:400:1::5/126 - - - - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel50;PortChannel49;Eth2-ASIC3;Eth0-ASIC3 - DataAcl - DataPlane - - - - - - - - - - HostIP - Loopback0 - - 10.1.0.32/32 - - 10.1.0.32/32 - - - HostIP1 - Loopback0 - - FC00:1::32/128 - - FC00:1::32/128 - - - HostIP1 - Loopback4096 - - 8.0.0.2/32 - - 8.0.0.2/32 - - - HostIP1 - Loopback4096 - - 2603:10e2:400::2/128 - - 2603:10e2:400::2/128 - - - - - HostIP - eth0 - - 10.250.0.112/24 - - 10.250.0.112/24 - - - V6HostIP - eth0 - - fec0::ffff:afa:c/64 - - fec0::ffff:afa:c/64 - - - - - - - ASIC2 - - - PortChannel34 - Eth2-ASIC2;Eth3-ASIC2 - - - - PortChannel33 - Eth0-ASIC2;Eth1-ASIC2 - - - - - - - - PortChannel34 - 10.1.0.4/31 - - - - PortChannel34 - 2603:10E2:400:1::9/126 - - - - PortChannel33 - 10.1.0.0/31 - - - - PortChannel33 - 2603:10E2:400:1::1/126 - - - - - - SNMP_ACL - SNMP - SNMP - - - ERSPAN - Everflow - Everflow - - - ERSPANV6 - EverflowV6 - EverflowV6 - - - VTY_LINE - ssh-only - SSH - - - PortChannel34;PortChannel33;Eth2-ASIC2;Eth0-ASIC2 - DataAcl - DataPlane - - - - - - - - - - DeviceInterfaceLink - ARISTA01T0 - Ethernet1 - vlab-08 - Ethernet1/5 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet1 - vlab-08 - Ethernet1/1 - - - DeviceInterfaceLink - ARISTA01T2 - Ethernet2 - vlab-08 - Ethernet1/2 - - - DeviceInterfaceLink - 40000 - true - ASIC3 - Eth2-ASIC3 - true - ASIC1 - Eth6-ASIC1 - true - - - DeviceInterfaceLink - 40000 - true - ASIC3 - Eth3-ASIC3 - true - ASIC1 - Eth7-ASIC1 - true - - - DeviceInterfaceLink - 40000 - true - ASIC2 - Eth2-ASIC2 - true - ASIC1 - Eth4-ASIC1 - true - - - DeviceInterfaceLink - 40000 - true - ASIC2 - Eth3-ASIC2 - true - ASIC1 - Eth5-ASIC1 - true - - - DeviceInterfaceLink - 40000 - true - ASIC3 - Eth0-ASIC3 - true - ASIC0 - Eth6-ASIC0 - true - - - DeviceInterfaceLink - 40000 - true - ASIC3 - Eth1-ASIC3 - true - ASIC0 - Eth7-ASIC0 - true - - - DeviceInterfaceLink - 40000 - true - ASIC2 - Eth0-ASIC2 - true - ASIC0 - Eth4-ASIC0 - true - - - DeviceInterfaceLink - 40000 - true - ASIC2 - Eth1-ASIC2 - true - ASIC0 - Eth5-ASIC0 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth6-ASIC1 - true - ASIC3 - Eth2-ASIC3 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth7-ASIC1 - true - ASIC3 - Eth3-ASIC3 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth6-ASIC0 - true - ASIC3 - Eth0-ASIC3 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth7-ASIC0 - true - ASIC3 - Eth1-ASIC3 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth4-ASIC1 - true - ASIC2 - Eth2-ASIC2 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth5-ASIC1 - true - ASIC2 - Eth3-ASIC2 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth4-ASIC0 - true - ASIC2 - Eth0-ASIC2 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth5-ASIC0 - true - ASIC2 - Eth1-ASIC2 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth0-ASIC0 - true - vlab-08 - Ethernet1/1 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth1-ASIC0 - true - vlab-08 - Ethernet1/2 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth2-ASIC0 - true - vlab-08 - Ethernet1/3 - true - - - DeviceInterfaceLink - 40000 - true - ASIC0 - Eth3-ASIC0 - true - vlab-08 - Ethernet1/4 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth0-ASIC1 - true - vlab-08 - Ethernet1/5 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth1-ASIC1 - true - vlab-08 - Ethernet1/6 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth2-ASIC1 - true - vlab-08 - Ethernet1/7 - true - - - DeviceInterfaceLink - 40000 - true - ASIC1 - Eth3-ASIC1 - true - vlab-08 - Ethernet1/8 - true - - - - - vlab-08 - msft_four_asic_vs - - 10.250.0.112 - - - - ARISTA01T2 - - 10.250.0.79 - - Arista-VM - - - ARISTA01T0 - - 10.250.0.80 - - Arista-VM - - - Asic -
- 0.0.0.0/0 -
- - ::/0 - - - - - - - - - - 0.0.0.0/0 - - - ::/0 - - - ASIC0 - Broadcom-Trident2 -
- - Asic -
- 0.0.0.0/0 -
- - ::/0 - - - - - - - - - - 0.0.0.0/0 - - - ::/0 - - - ASIC1 - Broadcom-Trident2 -
- - Asic -
- 0.0.0.0/0 -
- - ::/0 - - - - - - - - - - 0.0.0.0/0 - - - ::/0 - - - ASIC2 - Broadcom-Trident2 -
- - Asic -
- 0.0.0.0/0 -
- - ::/0 - - - - - - - - - - 0.0.0.0/0 - - - ::/0 - - - ASIC3 - Broadcom-Trident2 -
-
-
- - - true - - - DeviceInterface - - true - true - 1 - Ethernet1/1 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/2 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/3 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/4 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/5 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/6 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/7 - - false - 0 - 0 - 40000 - - - DeviceInterface - - true - true - 1 - Ethernet1/8 - - false - 0 - 0 - 40000 - - - true - 0 - msft_four_asic_vs - - - - - - - vlab-08 - - - DeploymentId - - 1 - - - QosProfile - - Profile0 - - - DhcpResources - - 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 - - - NtpResources - - 10.0.0.1;10.0.0.2 - - - SnmpResources - - 10.0.0.9 - - - SyslogResources - - 10.0.0.5;10.0.0.6 - - - TacacsGroup - - testlab - - - TacacsServer - - 10.0.0.9;10.0.0.8 - - - ForcedMgmtRoutes - - 172.17.0.1 - - - ErspanDestinationIpv4 - - 10.0.0.7 - - - - - ASIC1 - - - SubRole - - FrontEnd - - - - - ASIC0 - - - SubRole - - FrontEnd - - - - - ASIC3 - - - SubRole - - BackEnd - - - - - ASIC2 - - - SubRole - - BackEnd - - - - - - - vlab-08 - msft_four_asic_vs -
diff --git a/ansible/module_utils/port_utils.py b/ansible/module_utils/port_utils.py index 8df35ca1d8c..ecbba0f8ff5 100644 --- a/ansible/module_utils/port_utils.py +++ b/ansible/module_utils/port_utils.py @@ -112,7 +112,7 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): port_alias_to_name_map["Ethernet%d/1" % i] = "Ethernet%d" % ((i - 1) * 8) port_alias_to_name_map["Ethernet65"] = "Ethernet512" port_alias_to_name_map["Ethernet66"] = "Ethernet513" - elif hwsku == "Arista-7060X6-64PE-128x400G": + elif hwsku in ["Arista-7060X6-64DE-O128S2", "Arista-7060X6-64PE-O128S2"]: for i in range(1, 65): for j in [1, 5]: port_alias_to_name_map["Ethernet%d/%d" % (i, j)] = "Ethernet%d" % ((i - 1) * 8 + j - 1) @@ -130,6 +130,16 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): port_alias_to_name_map["Ethernet%d/%d" % (i, j)] = "Ethernet%d" % ((i - 1) * 8 + j - 1) port_alias_to_name_map["Ethernet65"] = "Ethernet512" port_alias_to_name_map["Ethernet66"] = "Ethernet513" + elif hwsku == "Arista-7060X6-64PE-C224O8": # This hwsku uses every second OSFP port. + for i in range(1, 65, 2): + if i in [13, 17, 45, 49]: + for j in [1, 5]: + port_alias_to_name_map["Ethernet%d/%d" % (i, j)] = "Ethernet%d" % ((i - 1) * 8 + j - 1) + else: + for j in range(1, 9): + port_alias_to_name_map["Ethernet%d/%d" % (i, j)] = "Ethernet%d" % ((i - 1) * 8 + j - 1) + port_alias_to_name_map["Ethernet65"] = "Ethernet512" + port_alias_to_name_map["Ethernet66"] = "Ethernet513" elif hwsku == "Arista-7050QX32S-Q32": for i in range(5, 29): port_alias_to_name_map["Ethernet%d/1" % i] = "Ethernet%d" % ((i - 5) * 4) @@ -355,9 +365,13 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): for i in range(0, 32): 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) - elif hwsku in ["Cisco-8122-O64"]: + 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"]: + 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) elif hwsku in ["Cisco-8800-LC-48H-C48"]: for i in range(0, 48, 1): port_alias_to_name_map["Ethernet%d" % i] = "Ethernet%d" % (i * 4) @@ -414,7 +428,7 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): idx += 4 port_alias_to_name_map["etp%db" % i] = "Ethernet%d" % idx idx += 4 - elif hwsku in ["Mellanox-SN4700-O28"]: + elif hwsku in ["Mellanox-SN4700-O28", 'Mellanox-SN4280-O28']: idx = 0 for i in range(1, 33): port_alias_to_name_map["etp%d" % i] = "Ethernet%d" % idx @@ -426,6 +440,30 @@ def get_port_alias_to_name_map(hwsku, asic_name=None): alias = "etp{}{}".format(i, split_alias) eth_name = "Ethernet{}".format((i - 1) * 8 + idx * 2) port_alias_to_name_map[alias] = eth_name + elif hwsku == "Mellanox-SN5600-C256S1": + split_alias_list = ["a", "b", "c", "d", "e", "f", "g", "h"] + for i in range(1, 65, 2): + for idx, split_alias in enumerate(split_alias_list): + alias = "etp{}{}".format(i, split_alias) + eth_name = "Ethernet{}".format((i - 1) * 8 + idx) + port_alias_to_name_map[alias] = eth_name + port_alias_to_name_map['etp65'] = "Ethernet512" + elif hwsku == "Mellanox-SN5600-C224O8": + split_alias_list = ["a", "b", "c", "d", "e", "f", "g", "h"] + split_alias_list_1 = ["a", "b"] + split_2_port_indexs = [13, 17, 45, 49] + for i in range(1, 65, 2): + if i in split_2_port_indexs: + for idx, split_alias in enumerate(split_alias_list_1): + alias = "etp{}{}".format(i, split_alias) + eth_name = "Ethernet{}".format((i - 1) * 8 + idx * 4) + port_alias_to_name_map[alias] = eth_name + else: + for idx, split_alias in enumerate(split_alias_list): + alias = "etp{}{}".format(i, split_alias) + eth_name = "Ethernet{}".format((i - 1) * 8 + idx) + port_alias_to_name_map[alias] = eth_name + port_alias_to_name_map['etp65'] = "Ethernet512" elif hwsku == "Arista-7060DX5-32": for i in range(1, 33): port_alias_to_name_map["Ethernet%d/1" % i] = "Ethernet%d" % ((i - 1) * 8) diff --git a/ansible/roles/eos/t1-64-lag-tor.j2 b/ansible/roles/eos/t1-64-lag-tor.j2 deleted file mode 120000 index e44ce67f957..00000000000 --- a/ansible/roles/eos/t1-64-lag-tor.j2 +++ /dev/null @@ -1 +0,0 @@ -t1-32-lag-tor.j2 \ No newline at end of file diff --git a/ansible/roles/eos/t1-lag-spine.j2 b/ansible/roles/eos/t1-lag-spine.j2 deleted file mode 120000 index 4772b4d1eaa..00000000000 --- a/ansible/roles/eos/t1-lag-spine.j2 +++ /dev/null @@ -1 +0,0 @@ -t1-32-lag-spine.j2 \ No newline at end of file diff --git a/ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 b/ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 new file mode 100644 index 00000000000..a60cf79c0e0 --- /dev/null +++ b/ansible/roles/eos/templates/t0-isolated-d128u128s1-leaf.j2 @@ -0,0 +1 @@ +t0-leaf.j2 diff --git a/ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 b/ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 new file mode 120000 index 00000000000..8430cb1debd --- /dev/null +++ b/ansible/roles/eos/templates/t0-isolated-d128u128s2-leaf.j2 @@ -0,0 +1 @@ +t0-leaf.j2 \ No newline at end of file diff --git a/ansible/roles/eos/templates/t1-32-lag-spine.j2 b/ansible/roles/eos/templates/t1-32-lag-spine.j2 new file mode 120000 index 00000000000..b43abfff43d --- /dev/null +++ b/ansible/roles/eos/templates/t1-32-lag-spine.j2 @@ -0,0 +1 @@ +t1-lag-spine.j2 \ No newline at end of file diff --git a/ansible/roles/eos/templates/t1-32-lag-tor.j2 b/ansible/roles/eos/templates/t1-32-lag-tor.j2 new file mode 120000 index 00000000000..48ba5038b47 --- /dev/null +++ b/ansible/roles/eos/templates/t1-32-lag-tor.j2 @@ -0,0 +1 @@ +t1-64-lag-tor.j2 \ No newline at end of file diff --git a/ansible/roles/eos/templates/t1-isolated-d128-tor.j2 b/ansible/roles/eos/templates/t1-isolated-d128-tor.j2 new file mode 120000 index 00000000000..86b7960d847 --- /dev/null +++ b/ansible/roles/eos/templates/t1-isolated-d128-tor.j2 @@ -0,0 +1 @@ +t1-tor.j2 \ No newline at end of file diff --git a/ansible/roles/eos/templates/t1-smartswitch-spine.j2 b/ansible/roles/eos/templates/t1-smartswitch-spine.j2 new file mode 120000 index 00000000000..e900e84e129 --- /dev/null +++ b/ansible/roles/eos/templates/t1-smartswitch-spine.j2 @@ -0,0 +1 @@ +./t1-lag-spine.j2 \ No newline at end of file diff --git a/ansible/roles/eos/templates/t1-smartswitch-tor.j2 b/ansible/roles/eos/templates/t1-smartswitch-tor.j2 new file mode 120000 index 00000000000..ca8ce747c9b --- /dev/null +++ b/ansible/roles/eos/templates/t1-smartswitch-tor.j2 @@ -0,0 +1 @@ +./t1-lag-tor.j2 \ No newline at end of file diff --git a/ansible/roles/fanout/tasks/fanout_sonic.yml b/ansible/roles/fanout/tasks/fanout_sonic.yml index cf0a1e161fd..74f07d4a780 100644 --- a/ansible/roles/fanout/tasks/fanout_sonic.yml +++ b/ansible/roles/fanout/tasks/fanout_sonic.yml @@ -64,3 +64,11 @@ sonic/fanout_sonic_202311.yml when: dry_run is not defined and incremental is not defined when: "'2023' in fanout_sonic_version['build_version']" + +- name: deploy SONiC fanout with image version 202405 + block: + - name: deploy SONiC fanout not incremental and not dry_run + include_tasks: + sonic/fanout_sonic_202405.yml + when: dry_run is not defined and incremental is not defined + when: "'2024' in fanout_sonic_version['build_version']" diff --git a/ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml b/ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml new file mode 120000 index 00000000000..2f92d838450 --- /dev/null +++ b/ansible/roles/fanout/tasks/sonic/fanout_sonic_202405.yml @@ -0,0 +1 @@ +fanout_sonic_202311.yml \ No newline at end of file diff --git a/ansible/roles/test/files/acstests/everflow_policer_test.py b/ansible/roles/test/files/acstests/everflow_policer_test.py index 09c5cc96b9f..00f611b7474 100644 --- a/ansible/roles/test/files/acstests/everflow_policer_test.py +++ b/ansible/roles/test/files/acstests/everflow_policer_test.py @@ -216,7 +216,8 @@ def checkMirroredFlow(self): if self.asic_type in ["mellanox"]: import binascii payload = binascii.unhexlify("0"*44) + str(payload) # Add the padding - elif self.asic_type in ["innovium"] or self.hwsku in ["rd98DX35xx_cn9131", "rd98DX35xx", "Nokia-7215-A1"]: + elif self.asic_type in ["marvell-teralynx"] or \ + self.hwsku in ["rd98DX35xx_cn9131", "rd98DX35xx", "Nokia-7215-A1"]: import binascii payload = binascii.unhexlify("0"*24) + str(payload) # Add the padding @@ -248,7 +249,7 @@ def checkMirroredFlow(self): masked_exp_pkt.set_do_not_care_scapy(scapy.IP, "flags") masked_exp_pkt.set_do_not_care_scapy(scapy.IP, "chksum") - if self.asic_type in ["innovium"]: + if self.asic_type in ["marvell-teralynx"]: masked_exp_pkt.set_do_not_care_scapy(scapy.GRE, "seqnum_present") if self.asic_type in ["marvell"]: masked_exp_pkt.set_do_not_care_scapy(scapy.IP, "id") @@ -270,7 +271,8 @@ def match_payload(pkt): pkt = scapy.Ether(pkt).load pkt = pkt[22:] # Mask the Mellanox specific inner header pkt = scapy.Ether(pkt) - elif self.asic_type in ["innovium"] or self.hwsku in ["rd98DX35xx_cn9131", "rd98DX35xx", "Nokia-7215-A1"]: + elif self.asic_type in ["marvell-teralynx"] or \ + self.hwsku in ["rd98DX35xx_cn9131", "rd98DX35xx", "Nokia-7215-A1"]: pkt = scapy.Ether(pkt)[scapy.GRE].payload pkt_str = str(pkt) pkt = scapy.Ether(pkt_str[8:]) diff --git a/ansible/roles/test/files/acstests/everflow_tb_test.py b/ansible/roles/test/files/acstests/everflow_tb_test.py index 6cfb48dfa72..5977332873a 100644 --- a/ansible/roles/test/files/acstests/everflow_tb_test.py +++ b/ansible/roles/test/files/acstests/everflow_tb_test.py @@ -146,7 +146,7 @@ def sendReceive(self, pkt2send, src_port, destination_ports): payload = str(scapy_pkt[scapy.GRE].payload)[22:] if self.asic_type in ["barefoot"]: payload = str(scapy_pkt[scapy.GRE].payload)[12:] - if self.asic_type in ["innovium"]: + if self.asic_type in ["marvell-teralynx"]: payload = str(scapy_pkt[scapy.GRE].payload)[8:] inner_pkt = scapy.Ether(payload) @@ -270,4 +270,4 @@ def runTest(self): (tests_passed, tests_total) = self.runEverflowTests() print("Passed %d test of %d" % (tests_passed, tests_total)) - assert(tests_passed == tests_total) + assert (tests_passed == tests_total) diff --git a/ansible/roles/test/files/helpers/bfd_responder.py b/ansible/roles/test/files/helpers/bfd_responder.py index fce30d0b0dc..c69e1396fdb 100644 --- a/ansible/roles/test/files/helpers/bfd_responder.py +++ b/ansible/roles/test/files/helpers/bfd_responder.py @@ -14,6 +14,8 @@ IPv4 = '4' IPv6 = '6' +BFD_FLAG_P_BIT = 5 +BFD_FLAG_F_BIT = 4 def get_if(iff, cmd): @@ -86,13 +88,17 @@ def __init__(self, sessions): def action(self, interface): data = interface.recv() - mac_src, mac_dst, ip_src, ip_dst, bfd_remote_disc, bfd_state = self.extract_bfd_info( + mac_src, mac_dst, ip_src, ip_dst, bfd_remote_disc, bfd_state, bfd_flags = self.extract_bfd_info( data) if ip_dst not in self.sessions: return session = self.sessions[ip_dst] if bfd_state == 3: + # Respond with F bit if P bit is set + if (bfd_flags & (1 << BFD_FLAG_P_BIT)): + session["pkt"].payload.payload.payload.load.flags = (1 << BFD_FLAG_F_BIT) interface.send(session["pkt"]) + session["pkt"].payload.payload.payload.load.flags = 0 return if bfd_state == 2: @@ -101,6 +107,7 @@ def action(self, interface): bfd_pkt_init = self.craft_bfd_packet( session, data, mac_src, mac_dst, ip_src, ip_dst, bfd_remote_disc, 2) bfd_pkt_init.payload.payload.chksum = None + bfd_pkt_init.payload.payload.payload.load.flags = 0 interface.send(bfd_pkt_init) bfd_pkt_init.payload.payload.payload.load.sta = 3 bfd_pkt_init.payload.payload.chksum = None @@ -117,17 +124,18 @@ def extract_bfd_info(self, data): ip_version = str(ether.payload.version) ip_priority_field = 'tos' if ip_version == IPv4 else 'tc' ip_priority = getattr(ether.payload, ip_priority_field) - bfdpkt = BFD(ether.payload.payload.payload.load) + bfdpkt = BFD(bytes(ether.payload.payload.payload.load)) bfd_remote_disc = bfdpkt.my_discriminator bfd_state = bfdpkt.sta + bfd_flags = bfdpkt.flags if ip_priority != self.bfd_default_ip_priority: raise RuntimeError("Received BFD packet with incorrect priority value: {}".format(ip_priority)) logging.debug('BFD packet info: sip {}, dip {}, priority {}'.format(ip_src, ip_dst, ip_priority)) - return mac_src, mac_dst, ip_src, ip_dst, bfd_remote_disc, bfd_state + return mac_src, mac_dst, ip_src, ip_dst, bfd_remote_disc, bfd_state, bfd_flags def craft_bfd_packet(self, session, data, mac_src, mac_dst, ip_src, ip_dst, bfd_remote_disc, bfd_state): ethpart = scapy2.Ether(data) - bfdpart = BFD(ethpart.payload.payload.payload.load) + bfdpart = BFD(bytes(ethpart.payload.payload.payload.load)) bfdpart.my_discriminator = session["my_disc"] bfdpart.your_discriminator = bfd_remote_disc bfdpart.sta = bfd_state diff --git a/ansible/roles/test/files/helpers/change_mac.sh b/ansible/roles/test/files/helpers/change_mac.sh index 05f8dd66778..0952f51f38c 100644 --- a/ansible/roles/test/files/helpers/change_mac.sh +++ b/ansible/roles/test/files/helpers/change_mac.sh @@ -6,8 +6,9 @@ INTF_LIST=$(ls /sys/class/net | grep -E "^eth[0-9]+$") for INTF in ${INTF_LIST}; do ADDR="$(cat /sys/class/net/${INTF}/address)" - PREFIX="$(cut -c1-15 <<< ${ADDR})" - SUFFIX="$(printf "%02x" ${INTF##eth})" + PREFIX="$(cut -c1-13 <<< ${ADDR})" + INTF_ID=${INTF##eth} + SUFFIX="$(printf "%x:%02x" $(expr ${INTF_ID} / 256) $(expr ${INTF_ID} % 256))" MAC="${PREFIX}${SUFFIX}" echo "Update ${INTF} MAC address: ${ADDR}->$MAC" diff --git a/ansible/roles/test/files/ptftests/macsec.py b/ansible/roles/test/files/ptftests/macsec.py index c752aa89399..383b02d7562 100644 --- a/ansible/roles/test/files/ptftests/macsec.py +++ b/ansible/roles/test/files/ptftests/macsec.py @@ -46,9 +46,16 @@ def __macsec_dp_poll(test, device_number=0, port_number=None, timeout=None, exp_ ret = __origin_dp_poll( test, device_number=device_number, port_number=port_number, timeout=timeout, exp_pkt=None) timeout -= time.time() - start_time + # Since we call __origin_dp_poll with exp_pkt=None, it should only ever fail if no packets are received at all. + # In this case, continue normally until we exceed the timeout value provided to macsec_dp_poll. + if isinstance(ret, test.dataplane.PollFailure): + if timeout <= 0: + break + else: + continue # The device number of PTF host is 0, if the target port isn't a injected port(belong to ptf host), # Don't need to do MACsec further. - if isinstance(ret, test.dataplane.PollFailure) or exp_pkt is None or ret.device != 0: + if ret.device != 0 or exp_pkt is None: return ret pkt = scapy.Ether(ret.packet) if pkt[scapy.Ether].type != 0x88e5: diff --git a/ansible/roles/test/files/ptftests/py3/IP_decap_test.py b/ansible/roles/test/files/ptftests/py3/IP_decap_test.py index 659f63fbe33..d180995cca9 100644 --- a/ansible/roles/test/files/ptftests/py3/IP_decap_test.py +++ b/ansible/roles/test/files/ptftests/py3/IP_decap_test.py @@ -49,6 +49,8 @@ import ipaddress import itertools import fib +import time +import macsec import ptf import ptf.packet as scapy @@ -440,8 +442,39 @@ def send_and_verify(self, dst_ip, exp_port_lists, src_port, dut_index, outer_pkt exp_ttl, str(expected_ports))) - matched, received = verify_packet_any_port( - self, masked_exp_pkt, expected_ports, timeout=1) + try: + matched, received = verify_packet_any_port( + self, masked_exp_pkt, expected_ports, timeout=1) + except AssertionError: + logging.error("Traffic wasn't sent successfully, trying again") + for _ in range(5): + send_packet(self, src_port, pkt, count=1) + time.sleep(0.1) + + expected_ports = list(itertools.chain(*exp_port_lists)) + logging.info('Sent Ether(src={}, dst={})/IP(src={}, dst={}, (tos|tc)={}, ttl={})/' + 'IP(src={}, dst={}, (tos|tc)={}, ttl={}) from interface {}' + .format(pkt.src, + pkt.dst, + outer_src_ip, + outer_dst_ip, + outer_tos, + outer_ttl_info, + inner_src_ip, + dst_ip, + inner_tos, + inner_ttl_info, + src_port)) + logging.info('Expect Ether(src={}, dst={})/IP(src={}, dst={}, (tos|tc)={}, ttl={}) on interfaces {}' + .format('any', + 'any', + inner_src_ip, + dst_ip, + exp_tos, + exp_ttl, + str(expected_ports))) + matched, received = verify_packet_any_port( + self, masked_exp_pkt, expected_ports, timeout=1) logging.info('Received expected packet on interface {}'.format( str(expected_ports[matched]))) return matched, received @@ -492,6 +525,11 @@ def get_src_and_exp_ports(self, dst_ip): if src_port in exp_port_list: break else: + # MACsec link only receive encrypted packets + # It's hard to simulate encrypted packets on the injected port + # Because the MACsec is session based channel but the injected ports are stateless ports + if src_port in macsec.MACSEC_INFOS.keys(): + continue if self.single_fib == "single-fib-single-hop" and exp_port_lists[0]: dest_port_dut_index = self.ptf_test_port_map[str(exp_port_lists[0][0])]['target_dut'][0] src_port_dut_index = self.ptf_test_port_map[str(src_port)]['target_dut'][0] diff --git a/ansible/roles/test/files/ptftests/py3/advanced-reboot.py b/ansible/roles/test/files/ptftests/py3/advanced-reboot.py index f2301794ba6..e0bf9ca89ba 100644 --- a/ansible/roles/test/files/ptftests/py3/advanced-reboot.py +++ b/ansible/roles/test/files/ptftests/py3/advanced-reboot.py @@ -232,6 +232,7 @@ def __init__(self): # Default settings self.ping_dut_pkts = 10 self.arp_ping_pkts = 1 + self.arp_vlan_gw_ping_pkts = 10 self.nr_pc_pkts = 100 self.nr_tests = 3 self.reboot_delay = 10 @@ -255,6 +256,7 @@ def __init__(self): self.cpu_state = StateMachine('init') self.asic_state = StateMachine('init') self.vlan_state = StateMachine('init') + self.vlan_gw_state = StateMachine('init') self.vlan_lock = threading.RLock() self.asic_state_time = {} # Recording last asic state entering time self.asic_vlan_reach = [] # Recording asic vlan reachability @@ -287,6 +289,7 @@ def __init__(self): password=self.test_params['vmhost_password'] ) + self.installed_sonic_version = self.get_installed_sonic_version() self.sender_thr = threading.Thread(target=self.send_in_background) self.sniff_thr = threading.Thread(target=self.sniff_in_background) self.start_sender_delay = 30 @@ -424,6 +427,7 @@ def timeout(self, func, seconds, message): # TimeoutError and Exception's from func # captured here signal.set() + self.log("{}: {}".format(message, traceback_msg)) raise type(err)("{}: {}".format(message, traceback_msg)) return res @@ -495,7 +499,9 @@ def get_portchannel_info(self): for vm_key in self.vm_dut_map.keys(): if member in self.vm_dut_map[vm_key]['dut_ports']: self.vm_dut_map[vm_key]['dut_portchannel'] = str(key) - self.vm_dut_map[vm_key]['neigh_portchannel'] = 'Port-Channel1' + neigh_portchannel = "PortChannel1" if self.test_params['neighbor_type'] == "sonic" \ + else "Port-Channel1" + self.vm_dut_map[vm_key]['neigh_portchannel'] = neigh_portchannel if self.is_dualtor: self.peer_vm_dut_map[vm_key]['dut_portchannel'] = str(key) break @@ -730,6 +736,7 @@ def setUp(self): self.generate_from_vlan() self.generate_ping_dut_lo() self.generate_arp_ping_packet() + self.generate_arp_vlan_gw_packets() if 'warm-reboot' in self.reboot_type: self.log(self.get_sad_info()) @@ -901,6 +908,20 @@ def generate_ping_dut_lo(self): self.ping_dut_exp_packet.set_do_not_care_scapy(scapy.IP, "id") self.ping_dut_exp_packet.set_do_not_care_scapy(scapy.IP, "chksum") + def calc_offset_and_size(self, packet, layer, field): + """ + Calculate the offset and size of a field, in a packet. Return the offset and size + as a tuple, both in bits. Return -1, 0 if the field cannot be found. + """ + offset = 0 + while packet: # for each payload + for fld in packet.fields_desc: # for each field + if fld.name == field and isinstance(packet, layer): + return int(offset) * 8, fld.i2len(packet, packet.getfieldval(fld.name)) * 8 + offset += fld.i2len(packet, packet.getfieldval(fld.name)) # add length + packet = packet.payload + return -1, 0 + def generate_arp_ping_packet(self): vlan = next(k for k, v in self.ports_per_vlan.items() if v) vlan_ip_range = self.vlan_ip_range[vlan] @@ -927,10 +948,45 @@ def generate_arp_ping_packet(self): self.arp_ping = bytes(packet) self.arp_resp = Mask(expect) self.arp_resp.set_do_not_care_scapy(scapy.Ether, 'src') - self.arp_resp.set_do_not_care_scapy(scapy.ARP, 'hwtype') - self.arp_resp.set_do_not_care_scapy(scapy.ARP, 'hwsrc') + self.arp_resp.set_do_not_care(*self.calc_offset_and_size(expect, scapy.ARP, "hwsrc")) self.arp_src_port = src_port + def generate_arp_vlan_gw_packets(self): + self.arp_vlan_gw_ping_packets = [] + + for src_port in self.active_port_indices if self.is_dualtor else self.vlan_host_ping_map: + src_addr = random.choice(list(self.vlan_host_ping_map[src_port].keys())) + src_mac = self.hex_to_mac( + self.vlan_host_ping_map[src_port][src_addr]) + packet = simple_arp_packet(eth_src=src_mac, + arp_op=1, + ip_snd=src_addr, + ip_tgt="192.168.0.1", # TODO: make this dynamic + hw_snd=src_mac) + + self.arp_vlan_gw_ping_packets.append((src_port, bytes(packet))) + + exp_packet = simple_arp_packet(pktlen=42, eth_src=self.vlan_mac, + arp_op=2, + ip_snd="192.168.0.1", + hw_snd=self.vlan_mac) + self.arp_vlan_gw_ping_exp_packet = Mask(exp_packet, ignore_extra_bytes=True) + self.arp_vlan_gw_ping_exp_packet.set_do_not_care_scapy(scapy.Ether, 'dst') + # PTF's field size calculation is broken for dynamic length fields, do it ourselves + self.arp_vlan_gw_ping_exp_packet.set_do_not_care(*self.calc_offset_and_size(exp_packet, scapy.ARP, "pdst")) + self.arp_vlan_gw_ping_exp_packet.set_do_not_care(*self.calc_offset_and_size(exp_packet, scapy.ARP, "hwdst")) + + exp_packet = simple_arp_packet(pktlen=42, eth_src=self.vlan_mac, + arp_op=2, + ip_snd="192.168.0.1", + hw_snd=self.vlan_mac) + exp_packet = exp_packet / ("fe11e1" * 6) + self.arp_vlan_gw_ferret_exp_packet = Mask(exp_packet) + self.arp_vlan_gw_ferret_exp_packet.set_do_not_care_scapy(scapy.Ether, 'dst') + # PTF's field size calculation is broken for dynamic length fields, do it ourselves + self.arp_vlan_gw_ferret_exp_packet.set_do_not_care(*self.calc_offset_and_size(exp_packet, scapy.ARP, "pdst")) + self.arp_vlan_gw_ferret_exp_packet.set_do_not_care(*self.calc_offset_and_size(exp_packet, scapy.ARP, "hwdst")) + def put_nowait(self, queue, data): try: queue.put_nowait(data) @@ -979,11 +1035,13 @@ def pre_reboot_test_setup(self): time.sleep(5) def get_warmboot_finalizer_state(self): + self.log("get the finalizer_state with: 'sudo systemctl is-active warmboot-finalizer.service'") stdout, stderr, _ = self.dut_connection.execCommand( 'sudo systemctl is-active warmboot-finalizer.service') if stderr: self.fails['dut'].add("Error collecting Finalizer state. stderr: {}, stdout:{}".format( str(stderr), str(stdout))) + self.log("Error collecting Finalizer state. stderr: {}, stdout:{}".format(str(stderr), str(stdout))) raise Exception("Error collecting Finalizer state. stderr: {}, stdout:{}".format( str(stderr), str(stdout))) if not stdout: @@ -991,6 +1049,7 @@ def get_warmboot_finalizer_state(self): return '' finalizer_state = stdout[0].strip() + self.log("The returned finalizer_state is {}".format(finalizer_state)) return finalizer_state def get_now_time(self): @@ -1022,6 +1081,7 @@ def check_warmboot_finalizer(self, finalizer_timeout): if time_passed > finalizer_timeout: self.fails['dut'].add( 'warmboot-finalizer never reached state "activating"') + self.log('TimeoutError: warmboot-finalizer never reached state "activating"') raise TimeoutError self.finalizer_state = self.get_warmboot_finalizer_state() @@ -1029,13 +1089,20 @@ def check_warmboot_finalizer(self, finalizer_timeout): self.finalizer_state = self.get_warmboot_finalizer_state() self.log('warmboot finalizer service state {}'.format(self.finalizer_state)) count = 0 - while self.finalizer_state == 'activating': - self.finalizer_state = self.get_warmboot_finalizer_state() + while self.finalizer_state != 'inactive': + try: + self.finalizer_state = self.get_warmboot_finalizer_state() + except Exception: + traceback_msg = traceback.format_exc() + self.log("Exception happened during get warmboot finalizer service state: {}".format(traceback_msg)) + raise + self.log('warmboot finalizer service state {}'.format(self.finalizer_state)) time.sleep(10) if count * 10 > int(self.test_params['warm_up_timeout_secs']): self.fails['dut'].add( 'warmboot-finalizer.service did not finish') + self.log('TimeoutError: warmboot-finalizer.service did not finish') raise TimeoutError count += 1 self.log('warmboot-finalizer service finished') @@ -1460,11 +1527,14 @@ def extract_no_cpu_replies(self, arr): return non_zero[-1] def get_teamd_state(self): + self.log("Start to Get the teamd state") stdout, stderr, _ = self.dut_connection.execCommand( 'sudo systemctl is-active teamd.service') if stderr: self.fails['dut'].add("Error collecting teamd state. stderr: {}, stdout:{}".format( str(stderr), str(stdout))) + self.log("Error collecting teamd state. stderr: {}, stdout:{}".format( + str(stderr), str(stdout))) raise Exception("Error collecting teamd state. stderr: {}, stdout:{}".format( str(stderr), str(stdout))) if not stdout: @@ -1472,8 +1542,14 @@ def get_teamd_state(self): return '' teamd_state = stdout[0].strip() + self.log("The teamd state is: {}".format(teamd_state)) return teamd_state + def get_installed_sonic_version(self): + stdout, _, _ = self.dut_connection.execCommand( + "sudo sonic_installer list | grep Current | awk '{print $2}'") + return stdout[0] + def wait_until_teamd_goes_down(self): self.log('Waiting for teamd service to go down') teamd_state = self.get_teamd_state() @@ -1483,14 +1559,25 @@ def wait_until_teamd_goes_down(self): while teamd_state == 'active': time.sleep(1) - dut_datetime_during_shutdown = self.get_now_time() + try: + dut_datetime_during_shutdown = self.get_now_time() + except Exception: + traceback_msg = traceback.format_exc() + self.log("Exception happened during get dut time: {}".format(traceback_msg)) + continue time_passed = float(dut_datetime_during_shutdown.strftime( "%s")) - float(dut_datetime.strftime("%s")) if time_passed > teamd_shutdown_timeout: self.fails['dut'].add( 'Teamd service did not go down') + self.log('TimeoutError: Teamd service did not go down') raise TimeoutError - teamd_state = self.get_teamd_state() + try: + teamd_state = self.get_teamd_state() + except Exception: + traceback_msg = traceback.format_exc() + self.log("Exception happened during get teamd state: {}".format(traceback_msg)) + raise self.log('teamd service state: {}'.format(teamd_state)) @@ -1502,7 +1589,8 @@ def reboot_dut(self): # Check to see if the warm-reboot script knows about the retry count feature stdout, stderr, return_code = self.dut_connection.execCommand( "sudo " + self.reboot_type + " -h", timeout=5) - if "retry count" in "\n".join(stdout): + # 202205 image doesn't support retry count feature despite the fact it is present in the cli output + if "retry count" in stdout and '202205' not in self.installed_sonic_version: if self.test_params['neighbor_type'] == "sonic": reboot_command = self.reboot_type + " -N" else: @@ -1714,7 +1802,8 @@ def send_in_background(self, packets_list=None): # 2. during warm neighbor restoration DUT will send a lot of ARP requests which we are not interested in # This is essential to get stable results self.apply_filter_all_ports( - 'not (arp and ether src {}) and not tcp'.format(self.test_params['dut_mac'])) + 'not (arp and ether src {} and ether dst ff:ff:ff:ff:ff:ff) and not tcp'.format( + self.test_params['dut_mac'])) sender_start = datetime.datetime.now() self.log("Sender started at %s" % str(sender_start)) @@ -1861,7 +1950,6 @@ def start_sniffer_on_ptf(self, pcap_path, tcpdump_filter, timeout): curr_time = time.time() if curr_time - time_start > timeout: break - time_start = curr_time self.log("Going to kill all tcpdump processes by SIGTERM") for process in processes_list: @@ -2025,6 +2113,7 @@ def examine_flow(self, filename=None): received_vlan_to_t1 = 0 missed_vlan_to_t1 = 0 missed_t1_to_vlan = 0 + flooded_pkts = [] self.disruption_start, self.disruption_stop = None, None for packet in packets: if packet[scapyall.Ether].dst == self.dut_mac or packet[scapyall.Ether].dst == self.vlan_mac: @@ -2033,6 +2122,8 @@ def examine_flow(self, filename=None): # t1->server sent pkt will have dst MAC as dut_mac, # and server->t1 sent pkt will have dst MAC as vlan_mac sent_payload = int(bytes(packet[scapyall.TCP].payload)) + if sent_payload in sent_packets: + flooded_pkts.append(sent_payload) sent_packets[sent_payload] = packet.time sent_counter += 1 continue @@ -2117,6 +2208,7 @@ def examine_flow(self, filename=None): self.log("*********** received packets captured - vlan-to-t1 - {}".format(received_vlan_to_t1)) self.log("*********** Missed received packets - t1-to-vlan - {}".format(missed_t1_to_vlan)) self.log("*********** Missed received packets - vlan-to-t1 - {}".format(missed_vlan_to_t1)) + self.log("*********** Flooded pkts - {}".format(flooded_pkts)) self.log("**************************************************************") self.fails['dut'].add("Sniffer failed to filter any traffic from DUT") self.assertTrue(received_counter, @@ -2161,11 +2253,12 @@ def examine_flow(self, filename=None): total_validation_packets = received_t1_to_vlan + \ received_vlan_to_t1 + missed_t1_to_vlan + missed_vlan_to_t1 # In some cases DUT may flood original packet to all members of VLAN, we do check that we do not flood too much - allowed_number_of_flooded_original_packets = 150 + allowed_number_of_flooded_original_packets = 250 if (sent_counter - total_validation_packets) > allowed_number_of_flooded_original_packets: self.dataplane_loss_checked_successfully = False self.fails["dut"].add("Unexpected count of sent packets available in pcap file. " - "Could be issue with DUT flooding for original packets which was sent to DUT") + "Could be issue with DUT flooding for original packets which was sent to DUT, " + "flooded count is: {}".format(sent_counter - total_validation_packets)) if prev_payload != (self.sent_packet_count - 1): # Specific case when packet loss started but final lost packet not detected @@ -2394,6 +2487,21 @@ def log_vlan_state_change(self, reachable): self.log("VLAN ARP state transition from %s to %s" % (old, state)) self.vlan_state.set(state) + def log_vlan_gw_state_change(self, reachable, partial=False, flooding=False): + old = self.vlan_gw_state.get() + + if reachable: + state = 'up' if not partial else 'partial' + else: + state = 'down' + + self.vlan_gw_state.set_flooding(flooding) + + if old != state: + self.log("VLAN GW state transition from %s to %s" % + (old, state)) + self.vlan_gw_state.set(state) + def reachability_watcher(self): # This function watches the reachability of the CPU port, and ASIC. It logs the state # changes for future analysis @@ -2416,6 +2524,7 @@ def reachability_watcher(self): self.dataplane_io_lock.release() else: self.log("Reachability watcher - Dataplane is busy. Skipping the check") + self.log('Reachability watcher - checking control plane') total_rcv_pkt_cnt = self.pingDut() reachable = total_rcv_pkt_cnt > 0 and total_rcv_pkt_cnt > self.ping_dut_pkts * 0.7 @@ -2425,6 +2534,14 @@ def reachability_watcher(self): total_rcv_pkt_cnt = self.arpPing() reachable = total_rcv_pkt_cnt >= self.arp_ping_pkts self.log_vlan_state_change(reachable) + + self.log('Reachability watcher - checking VLAN GW IP') + total_rcv_pkt_cnt = self.arpVlanGwPing() + reachable = total_rcv_pkt_cnt > 0 and total_rcv_pkt_cnt > self.arp_vlan_gw_ping_pkts * 0.7 + partial = total_rcv_pkt_cnt > 0 and total_rcv_pkt_cnt < self.arp_vlan_gw_ping_pkts + flooding = reachable and total_rcv_pkt_cnt > self.arp_vlan_gw_ping_pkts + self.log_vlan_gw_state_change(reachable, partial, flooding) + self.watcher_is_running.set() # Watcher is running. self.log('Reachability watcher stopped') self.watcher_is_stopped.set() # Watcher has stopped. @@ -2480,3 +2597,15 @@ def arpPing(self): self.log("Send %5d Received %5d arp ping" % (self.arp_ping_pkts, total_rcv_pkt_cnt), True) return total_rcv_pkt_cnt + + def arpVlanGwPing(self): + total_rcv_pkt_cnt = 0 + packets = random.sample(self.arp_vlan_gw_ping_packets, self.arp_vlan_gw_ping_pkts) + for packet in packets: + src_port, arp_packet = packet + testutils.send_packet(self, src_port, arp_packet) + total_rcv_pkt_cnt = testutils.count_matched_packets_all_ports( + self, self.arp_vlan_gw_ping_exp_packet, self.vlan_ports, timeout=self.PKT_TOUT) + self.log("Send %5d Received %5d arp vlan gw ping" % + (self.arp_vlan_gw_ping_pkts, total_rcv_pkt_cnt), True) + return total_rcv_pkt_cnt diff --git a/ansible/roles/test/files/ptftests/py3/copp_tests.py b/ansible/roles/test/files/ptftests/py3/copp_tests.py index 42fd1435845..92211065432 100644 --- a/ansible/roles/test/files/ptftests/py3/copp_tests.py +++ b/ansible/roles/test/files/ptftests/py3/copp_tests.py @@ -26,6 +26,8 @@ # SSHTest # IP2METest # DefaultTest +# VlanSubnetTest +# VlanSubnetIPinIPTest import datetime import os @@ -34,6 +36,7 @@ import threading import time +import ptf.packet as scapy import ptf.testutils as testutils from ptf.base_tests import BaseTest @@ -45,9 +48,6 @@ class ControlPlaneBaseTest(BaseTest): PPS_LIMIT = 600 PPS_LIMIT_MIN = PPS_LIMIT * 0.9 PPS_LIMIT_MAX = PPS_LIMIT * 1.3 - DEFAULT_PPS_LIMIT = 300 - DEFAULT_PPS_LIMIT_MIN = DEFAULT_PPS_LIMIT * 0.9 - DEFAULT_PPS_LIMIT_MAX = DEFAULT_PPS_LIMIT * 1.3 NO_POLICER_LIMIT = PPS_LIMIT * 1.4 TARGET_PORT = "3" # Historically we have port 3 as a target port TASK_TIMEOUT = 600 # Wait up to 10 minutes for tasks to complete @@ -69,6 +69,8 @@ def __init__(self): self.myip = test_params.get('myip', None) self.peerip = test_params.get('peerip', None) + self.vlanip = test_params.get('vlanip', None) + self.loopbackip = test_params.get('loopbackip', None) self.default_server_send_rate_limit_pps = test_params.get( 'send_rate_limit', 2000) @@ -83,6 +85,7 @@ def __init__(self): self.asic_type = test_params.get('asic_type', None) self.platform = test_params.get('platform', None) self.topo_type = test_params.get('topo_type', None) + self.ip_version = test_params.get('ip_version', None) def log(self, message, debug=False): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") @@ -219,14 +222,14 @@ def copp_test(self, packet, send_intf, recv_intf): return send_count, recv_count, time_delta, time_delta_ms, tx_pps, rx_pps - def contruct_packet(self, port_number): + def construct_packet(self, port_number): raise NotImplementedError def check_constraints(self, send_count, recv_count, time_delta_ms, rx_pps): raise NotImplementedError def one_port_test(self, port_number): - packet = self.contruct_packet(port_number) + packet = self.construct_packet(port_number) send_count, recv_count, time_delta, time_delta_ms, tx_pps, rx_pps = \ self.copp_test(bytes(packet), (0, port_number), (1, port_number)) @@ -289,7 +292,7 @@ def runTest(self): self.log("ARPTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] src_ip = self.myip dst_ip = self.peerip @@ -319,7 +322,7 @@ def runTest(self): self.log("DHCPTopoT1Test") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] packet = testutils.simple_udp_packet( @@ -368,7 +371,7 @@ def runTest(self): self.log("DHCPTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] packet = testutils.simple_udp_packet( @@ -417,7 +420,7 @@ def runTest(self): self.log("DHCP6Test") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] packet = testutils.simple_udpv6_packet( @@ -445,7 +448,7 @@ def runTest(self): self.log("DHCP6TopoT1Test") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] packet = testutils.simple_udpv6_packet( @@ -485,7 +488,7 @@ def runTest(self): self.log("LLDPTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] packet = testutils.simple_eth_packet( @@ -525,7 +528,7 @@ def runTest(self): # as its destination MAC address. eth_type is to indicate # the length of the data in Ethernet 802.3 frame. pktlen # = 117 = 103 (0x67) + 6 (dst MAC) + 6 (dst MAC) + 2 (len) - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] packet = testutils.simple_eth_packet( @@ -547,7 +550,7 @@ def runTest(self): self.log("BGPTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): dst_mac = self.peer_mac[port_number] dst_ip = self.peerip @@ -586,15 +589,15 @@ def check_constraints(self, send_count, recv_count, time_delta_ms, rx_pps): else: self.log("Checking constraints (DefaultPolicyApplied):") self.log( - "DEFAULT_PPS_LIMIT_MIN (%d) <= rx_pps (%d) <= DEFAULT_PPS_LIMIT_MAX (%d): %s" % - (int(self.DEFAULT_PPS_LIMIT_MIN), + "PPS_LIMIT_MIN (%d) <= rx_pps (%d) <= PPS_LIMIT_MAX (%d): %s" % + (int(self.PPS_LIMIT_MIN), int(rx_pps), - int(self.DEFAULT_PPS_LIMIT_MAX), - str(self.DEFAULT_PPS_LIMIT_MIN <= rx_pps <= self.DEFAULT_PPS_LIMIT_MAX)) + int(self.PPS_LIMIT_MAX), + str(self.PPS_LIMIT_MIN <= rx_pps <= self.PPS_LIMIT_MAX)) ) - assert self.DEFAULT_PPS_LIMIT_MIN <= rx_pps <= self.DEFAULT_PPS_LIMIT_MAX, "Copp policer constraint " \ + assert self.PPS_LIMIT_MIN <= rx_pps <= self.PPS_LIMIT_MAX, "Copp policer constraint " \ "check failed, Actual PPS: {} Expected PPS range: {} - {}".format( - rx_pps, self.DEFAULT_PPS_LIMIT_MIN, self.DEFAULT_PPS_LIMIT_MAX) + rx_pps, self.PPS_LIMIT_MIN, self.PPS_LIMIT_MAX) # SONIC config contains policer CIR=6000 for LACP @@ -606,7 +609,7 @@ def runTest(self): self.log("LACPTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): packet = testutils.simple_eth_packet( pktlen=14, eth_dst='01:80:c2:00:00:02', @@ -626,7 +629,7 @@ def runTest(self): self.log("SNMPTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] dst_mac = self.peer_mac[port_number] dst_ip = self.peerip @@ -650,7 +653,7 @@ def runTest(self): self.log("SSHTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): dst_mac = self.peer_mac[port_number] src_ip = self.myip dst_ip = self.peerip @@ -681,7 +684,7 @@ def one_port_test(self, port_number): if port[0] == 0: continue - packet = self.contruct_packet(port[1]) + packet = self.construct_packet(port[1]) send_count, recv_count, time_delta, time_delta_ms, tx_pps, rx_pps = \ self.copp_test(bytes(packet), (0, port_number), (1, port_number)) @@ -689,7 +692,7 @@ def one_port_test(self, port_number): self.check_constraints( send_count, recv_count, time_delta_ms, rx_pps) - def contruct_packet(self, port_number): + def construct_packet(self, port_number): src_mac = self.my_mac[port_number] dst_mac = self.peer_mac[port_number] dst_ip = self.peerip @@ -703,6 +706,7 @@ def contruct_packet(self, port_number): return packet +# Verify policer functionality for TTL 1 packets class DefaultTest(PolicyTest): def __init__(self): PolicyTest.__init__(self) @@ -711,7 +715,7 @@ def runTest(self): self.log("DefaultTest") self.run_suite() - def contruct_packet(self, port_number): + def construct_packet(self, port_number): dst_mac = self.peer_mac[port_number] src_ip = self.myip dst_ip = self.peerip @@ -726,3 +730,82 @@ def contruct_packet(self, port_number): ) return packet + + +# Verify policer functionality for Vlan subnet packets +class VlanSubnetTest(PolicyTest): + def __init__(self): + PolicyTest.__init__(self) + + def runTest(self): + self.log("VlanSubnetTest") + self.run_suite() + + def construct_packet(self, port_number): + dst_mac = self.peer_mac[port_number] + src_ip = self.myip + dst_ip = self.vlanip + + if self.ip_version == "4": + packet = testutils.simple_tcp_packet( + eth_dst=dst_mac, + ip_dst=dst_ip, + ip_src=src_ip, + ip_ttl=25, + tcp_sport=5000, + tcp_dport=8000 + ) + else: + packet = testutils.simple_tcpv6_packet( + eth_dst=dst_mac, + ipv6_dst=dst_ip, + ipv6_src=src_ip, + ipv6_hlim=25, + tcp_sport=5000, + tcp_dport=8000 + ) + + return packet + + +# Verify policer functionality for Vlan subnet IPinIP packets +class VlanSubnetIPinIPTest(PolicyTest): + def __init__(self): + PolicyTest.__init__(self) + + def runTest(self): + self.log("VlanSubnetIpinIPTest") + self.run_suite() + + def construct_packet(self, port_number): + dst_mac = self.peer_mac[port_number] + inner_src_ip = self.myip + inner_dst_ip = self.vlanip + outer_dst_ip = self.loopbackip + + if self.ip_version == "4": + inner_packet = testutils.simple_tcp_packet( + ip_dst=inner_dst_ip, + ip_src=inner_src_ip, + ip_ttl=25, + tcp_sport=5000, + tcp_dport=8000 + ).getlayer(scapy.IP) + else: + inner_packet = testutils.simple_tcpv6_packet( + ipv6_dst=inner_dst_ip, + ipv6_src=inner_src_ip, + ipv6_hlim=25, + tcp_sport=5000, + tcp_dport=8000 + ).getlayer(scapy.IPv6) + + packet = testutils.simple_ipv4ip_packet( + eth_dst=dst_mac, + ip_src='1.1.1.1', + ip_dst=outer_dst_ip, + ip_ttl=40, + inner_frame=inner_packet + ) + + return packet diff --git a/ansible/roles/test/files/ptftests/py3/hash_test.py b/ansible/roles/test/files/ptftests/py3/hash_test.py index 38f56e90b8d..a4d5946ded9 100644 --- a/ansible/roles/test/files/ptftests/py3/hash_test.py +++ b/ansible/roles/test/files/ptftests/py3/hash_test.py @@ -26,9 +26,13 @@ from ptf.testutils import send_packet from ptf.testutils import verify_packet_any_port from ptf.testutils import simple_ipv4ip_packet +from ptf.testutils import simple_vxlan_packet +from ptf.testutils import simple_vxlanv6_packet +from ptf.testutils import simple_nvgre_packet import fib import lpm +import macsec class HashTest(BaseTest): @@ -108,6 +112,7 @@ def setUp(self): # set the base mac here to make it persistent across calls of check_ip_route self.base_mac = self.dataplane.get_mac( *random.choice(list(self.dataplane.ports.keys()))) + self.vxlan_dest_port = int(self.test_params.get('vxlan_dest_port', 0)) def _get_nexthops(self, src_port, dst_ip): active_dut_indexes = [0] @@ -128,6 +133,11 @@ def get_src_and_exp_ports(self, dst_ip): if src_port in exp_port_list: break else: + # MACsec link only receive encrypted packets + # It's hard to simulate encrypted packets on the injected port + # Because the MACsec is session based channel but the injected ports are stateless ports + if src_port in macsec.MACSEC_INFOS.keys(): + continue if self.single_fib == "single-fib-single-hop" and exp_port_lists[0]: dest_port_dut_index = self.ptf_test_port_map[str(exp_port_lists[0][0])]['target_dut'][0] src_port_dut_index = self.ptf_test_port_map[str(src_port)]['target_dut'][0] @@ -247,6 +257,8 @@ def _get_ip_proto(self, ipv6=False): skip_protos.append(0) # Skip IPv6-ICMP for active-active dualtor as it is duplicated to both ToRs skip_protos.append(58) + # next-header 255 on BRCM causes 4 bytes to be stripped (CS00012366805) + skip_protos.append(255) while True: ip_proto = random.randint(0, 255) @@ -841,6 +853,611 @@ def runTest(self): @summary: Send IPinIP packet for each range of both IPv4 and IPv6 spaces and expect the packet to be received from one of the expected ports """ + logging.info("List of hash_keys: {}".format(self.hash_keys)) + for hash_key in self.hash_keys: + logging.info("hash test hash_key: {}".format(hash_key)) + self.check_hash(hash_key) + + +class VxlanHashTest(HashTest): + ''' + This test is to verify the hash key for VxLAN packet. + The src_ip, dst_ip, src_port and dst_port of inner frame are expected to be hash keys + for IPinIP packet. + ''' + + def check_ipv4_route(self, hash_key, src_port, dst_port_lists, outer_src_ip, outer_dst_ip): + ''' + @summary: Check IPv4 route works. + @param hash_key: hash key to build packet with. + @param src_port: index of port to use for sending packet to switch + @param dst_port_lists: list of ports on which to expect packet to come back from the switch + @param outer_src_ip: source ip at the outer layer + @param outer_dst_ip: destination ip at the outer layer + ''' + ip_src = self.src_ip_interval.get_random_ip( + ) if hash_key == 'src-ip' else self.src_ip_interval.get_first_ip() + ip_dst = self.dst_ip_interval.get_random_ip( + ) if hash_key == 'dst-ip' else self.dst_ip_interval.get_first_ip() + sport = random.randint(0, 65535) if hash_key == 'src-port' else 1234 + dport = random.randint(0, 65535) if hash_key == 'dst-port' else 80 + outer_sport = random.randint(0, 65536) if hash_key == 'outer-src-port' else 1234 + + src_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'src-mac' else self.base_mac + dst_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'dst-mac' else self.base_mac + + router_mac = self.ptf_test_port_map[str(src_port)]['target_dest_mac'] + + if self.ipver == "ipv4-ipv4": + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ip_dst": ip_dst, + "ip_src": ip_src, + "ip_ttl": 64, + "tcp_sport": sport, + "tcp_dport": dport} + + inner_pkt = simple_tcp_packet(**pkt_opts) + else: + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ipv6_dst": ip_dst, + "ipv6_src": ip_src, + "ipv6_hlim": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcpv6_packet(**pkt_opts) + pkt_opts = { + 'eth_dst': router_mac, + 'ip_src': outer_src_ip, + 'ip_dst': outer_dst_ip, + 'ip_ttl': 64, + 'udp_sport': outer_sport, + 'udp_dport': self.vxlan_dest_port, + 'with_udp_chksum': False, + 'vxlan_vni': 2000, + 'inner_frame': inner_pkt} + vxlan_pkt = simple_vxlan_packet(**pkt_opts) + + exp_pkt = vxlan_pkt.copy() + exp_pkt['IP'].ttl -= 1 + + masked_exp_pkt = Mask(exp_pkt) + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "src") + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "dst") + # mask the chksum also if masking the ttl + if self.ignore_ttl: + 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.TCP, "chksum") + + send_packet(self, src_port, vxlan_pkt) + logging.info('Sent Outer Ether(src={}, dst={})/IP(src={}, dst={})VxLAN(sport={}, ' + 'dport={})/Inner Ether(src={}, dst={}), IP(src={}, ' + 'dst={} )/TCP(sport={}, dport={} on port {})' + .format(vxlan_pkt.src, + vxlan_pkt.dst, + vxlan_pkt['IP'].src, + vxlan_pkt['IP'].dst, + outer_sport, + self.vxlan_dest_port, + inner_pkt.src, + inner_pkt.dst, + ip_src, + ip_dst, + sport, + dport, + src_port)) + logging.info(vxlan_pkt.show()) + + dst_ports = list(itertools.chain(*dst_port_lists)) + rcvd_port_index, rcvd_pkt = verify_packet_any_port( + self, masked_exp_pkt, dst_ports) + rcvd_port = dst_ports[rcvd_port_index] + exp_src_mac = None + if len(self.ptf_test_port_map[str(rcvd_port)]["target_src_mac"]) > 1: + # active-active dualtor, the packet could be received from either ToR, so use the received + # port to find the corresponding ToR + for dut_index, port_list in enumerate(dst_port_lists): + if rcvd_port in port_list: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][dut_index] + else: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][0] + actual_src_mac = scapy.Ether(rcvd_pkt).src + if exp_src_mac != actual_src_mac: + raise Exception("Pkt sent from {} to {} on port {} was rcvd pkt on {} which is one of the expected ports, " + "but the src mac doesn't match, expected {}, got {}". + format(ip_src, ip_dst, src_port, rcvd_port, exp_src_mac, actual_src_mac)) + return (rcvd_port, rcvd_pkt) + + def check_ipv6_route(self, hash_key, src_port, dst_port_lists, outer_src_ip, outer_dst_ip): + ''' + @summary: Check IPv6 route works. + @param hash_key: hash key to build packet with. + @param in_port: index of port to use for sending packet to switch + @param dst_port_lists: list of ports on which to expect packet to come back from the switch + @param outer_src_ip: source ip at the outer layer + @param outer_dst_ip: destination ip at the outer layer + ''' + ip_src = self.src_ip_interval.get_random_ip( + ) if hash_key == 'src-ip' else self.src_ip_interval.get_first_ip() + ip_dst = self.dst_ip_interval.get_random_ip( + ) if hash_key == 'dst-ip' else self.dst_ip_interval.get_first_ip() + + sport = random.randint(0, 65535) if hash_key == 'src-port' else 1234 + dport = random.randint(0, 65535) if hash_key == 'dst-port' else 80 + + src_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'src-mac' else self.base_mac + dst_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'dst-mac' else self.base_mac + router_mac = self.ptf_test_port_map[str(src_port)]['target_dest_mac'] + + outer_sport = random.randint(0, 65536) if hash_key == 'outer-src-port' else 1234 + + if self.ipver == 'ipv6-ipv6': + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ipv6_dst": ip_dst, + "ipv6_src": ip_src, + "ipv6_hlim": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcpv6_packet(**pkt_opts) + else: + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ip_dst": ip_dst, + "ip_src": ip_src, + "ip_ttl": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcp_packet(**pkt_opts) + + pkt_opts = { + 'eth_dst': router_mac, + 'ipv6_src': outer_src_ip, + 'ipv6_dst': outer_dst_ip, + 'ipv6_hlim': 64, + 'udp_sport': outer_sport, + 'udp_dport': self.vxlan_dest_port, + 'with_udp_chksum': False, + 'vxlan_vni': 2000, + 'inner_frame': inner_pkt} + vxlan_pkt = simple_vxlanv6_packet(**pkt_opts) + + exp_pkt = vxlan_pkt.copy() + exp_pkt['IPv6'].hlim -= 1 + + masked_exp_pkt = Mask(exp_pkt) + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "src") + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "dst") + + send_packet(self, src_port, vxlan_pkt) + logging.info('Sent Ether(src={}, dst={})/IP(src={}, dst={})VxLAN(sport={}, dport={})' + '/Inner Ether(src={}, dst={}), Inner IPv6(src={}, ' + 'dst={})/TCP(sport={}, dport={} on port {})' + .format(vxlan_pkt.src, + vxlan_pkt.dst, + vxlan_pkt['IPv6'].src, + vxlan_pkt['IPv6'].dst, + outer_sport, + self.vxlan_dest_port, + inner_pkt.src, + inner_pkt.dst, + ip_src, + ip_dst, + sport, + dport, + src_port)) + + dst_ports = list(itertools.chain(*dst_port_lists)) + rcvd_port_index, rcvd_pkt = verify_packet_any_port( + self, masked_exp_pkt, dst_ports) + rcvd_port = dst_ports[rcvd_port_index] + + exp_src_mac = None + if len(self.ptf_test_port_map[str(rcvd_port)]["target_src_mac"]) > 1: + # active-active dualtor, the packet could be received from either ToR, so use the received + # port to find the corresponding ToR + for dut_index, port_list in enumerate(dst_port_lists): + if rcvd_port in port_list: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][dut_index] + else: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][0] + + actual_src_mac = scapy.Ether(rcvd_pkt).src + if exp_src_mac != actual_src_mac: + raise Exception("Pkt sent from {} to {} on port {} was rcvd pkt on {} which is one of the expected ports, " + "but the src mac doesn't match, expected {}, got {}". + format(ip_src, ip_dst, src_port, rcvd_port, exp_src_mac, actual_src_mac)) + return (rcvd_port, rcvd_pkt) + + def check_ip_route(self, hash_key, src_port, dst_port_lists, outer_src_ip, + outer_dst_ip, outer_src_ipv6, outer_dst_ipv6): + if self.ipver == 'ipv4-ipv4' or self.ipver == 'ipv4-ipv6': + (matched_port, received) = self.check_ipv4_route( + hash_key, src_port, dst_port_lists, outer_src_ip, outer_dst_ip) + else: + (matched_port, received) = self.check_ipv6_route( + hash_key, src_port, dst_port_lists, outer_src_ipv6, outer_dst_ipv6) + + assert received + + logging.info("Received packet at " + str(matched_port)) + time.sleep(0.02) + + return (matched_port, received) + + def check_hash(self, hash_key): + # Use dummy IPv4 address for outer_src_ip and outer_dst_ip + # We don't care the actually value as long as the outer_dst_ip is routed by default routed + # The outer_src_ip and outer_dst_ip are fixed + outer_src_ip = '80.1.0.31' + outer_dst_ip = '80.1.0.32' + outer_src_ipv6 = '80::31' + outer_dst_ipv6 = '80::32' + src_port, exp_port_lists, next_hops = self.get_src_and_exp_ports( + outer_dst_ip) + if self.switch_type == "chassis-packet": + exp_port_lists = self.check_same_asic(src_port, exp_port_lists) + + logging.info("outer_src_ip={}, outer_dst_ip={}, src_port={}, exp_port_lists={}".format( + outer_src_ip, outer_dst_ip, src_port, exp_port_lists)) + for exp_port_list in exp_port_lists: + if len(exp_port_list) <= 1: + logging.warning("{} has only {} nexthop".format( + outer_dst_ip, exp_port_list)) + assert False + + hit_count_map = {} + for _ in range(0, self.balancing_test_times*len(list(itertools.chain(*exp_port_lists)))): + logging.info('Checking hash key {}, src_port={}, exp_ports={}, outer_src_ip={}, outer_dst_ip={}' + .format(hash_key, src_port, exp_port_lists, outer_src_ip, outer_dst_ip)) + (matched_index, _) = self.check_ip_route(hash_key, + src_port, exp_port_lists, outer_src_ip, outer_dst_ip, + outer_src_ipv6, outer_dst_ipv6) + hit_count_map[matched_index] = hit_count_map.get( + matched_index, 0) + 1 + logging.info("hash_key={}, hit count map: {}".format( + hash_key, hit_count_map)) + + for next_hop in next_hops: + self.check_balancing(next_hop.get_next_hop(), hit_count_map, src_port) + + def runTest(self): + """ + @summary: Send IPinIP packet for each range of both IPv4 and IPv6 spaces and + expect the packet to be received from one of the expected ports + """ + logging.info("List of hash_keys: {}".format(self.hash_keys)) + for hash_key in self.hash_keys: + logging.info("hash test hash_key: {}".format(hash_key)) + self.check_hash(hash_key) + + +class NvgreHashTest(HashTest): + ''' + This test is to verify the hash key for NvGRE packet. + The src_ip, dst_ip, src_port and dst_port of inner frame are expected to be hash keys + for NvGRE packet. + ''' + + def simple_nvgrev6_packet(self, pktlen=300, + eth_dst='00:01:02:03:04:05', + eth_src='00:06:07:08:09:0a', + dl_vlan_enable=False, + vlan_vid=0, + vlan_pcp=0, + dl_vlan_cfi=0, + ipv6_src='1::2', + ipv6_dst='3::4', + ipv6_fl=0, + ipv6_tc=0, + ipv6_ecn=None, + ipv6_dscp=None, + ipv6_hlim=64, + nvgre_version=0, + nvgre_tni=None, + nvgre_flowid=0, + inner_frame=None + ): + ''' + @summary: Helper function to construct an IPv6 NVGRE packet + ''' + if scapy.NVGRE is None: + logging.error( + "A NVGRE packet was requested but NVGRE is not supported by your Scapy. " + "See README for more information") + return None + + nvgre_hdr = scapy.NVGRE(vsid=nvgre_tni, flowid=nvgre_flowid) + + if (dl_vlan_enable): + pkt = scapy.Ether(dst=eth_dst, src=eth_src) / \ + scapy.Dot1Q(prio=vlan_pcp, id=dl_vlan_cfi, vlan=vlan_vid) / \ + scapy.IPv6(src=ipv6_src, dst=ipv6_dst, fl=ipv6_fl, tc=ipv6_tc, hlim=ipv6_hlim, nh=47) / \ + nvgre_hdr + else: + pkt = scapy.Ether(dst=eth_dst, src=eth_src) / \ + scapy.IPv6(src=ipv6_src, dst=ipv6_dst, fl=ipv6_fl, tc=ipv6_tc, hlim=ipv6_hlim, nh=47) / \ + nvgre_hdr + + if inner_frame: + pkt = pkt / inner_frame + else: + pkt = pkt / scapy.IP() + pkt = pkt/("D" * (pktlen - len(pkt))) + + return pkt + + def check_ipv4_route(self, hash_key, src_port, dst_port_lists, outer_src_ip, outer_dst_ip, ipver): + ''' + @summary: Check IPv4 route works. + @param hash_key: hash key to build packet with. + @param src_port: index of port to use for sending packet to switch + @param dst_port_lists: list of ports on which to expect packet to come back from the switch + @param outer_src_ip: source ip at the outer layer + @param outer_dst_ip: destination ip at the outer layer + ''' + ip_src = self.src_ip_interval.get_random_ip( + ) if hash_key == 'src-ip' else self.src_ip_interval.get_first_ip() + ip_dst = self.dst_ip_interval.get_random_ip( + ) if hash_key == 'dst-ip' else self.dst_ip_interval.get_first_ip() + sport = random.randint(0, 65535) if hash_key == 'src-port' else 1234 + dport = random.randint(0, 65535) if hash_key == 'dst-port' else 80 + + src_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'src-mac' else self.base_mac + dst_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'dst-mac' else self.base_mac + + router_mac = self.ptf_test_port_map[str(src_port)]['target_dest_mac'] + + if self.ipver == 'ipv4-ipv4': + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ip_dst": ip_dst, + "ip_src": ip_src, + "ip_ttl": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcp_packet(**pkt_opts) + else: + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ipv6_dst": ip_dst, + "ipv6_src": ip_src, + "ipv6_hlim": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcpv6_packet(**pkt_opts) + + tni = random.randint(1, 254) + 20000 + pkt_opts = { + 'eth_dst': router_mac, + 'ip_src': outer_src_ip, + 'ip_dst': outer_dst_ip, + 'ip_ttl': 64, + 'nvgre_tni': tni, + 'inner_frame': inner_pkt} + nvgre_pkt = simple_nvgre_packet(**pkt_opts) + + exp_pkt = nvgre_pkt.copy() + exp_pkt['IP'].ttl -= 1 + + masked_exp_pkt = Mask(exp_pkt) + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "src") + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "dst") + + send_packet(self, src_port, nvgre_pkt) + logging.info('Sent Outer Ether(src={}, dst={})/IP(src={}, dst={}, nvgre_tni={})' + '/Inner Ether(src={}, dst={}), IP(src={}, ' + 'dst={} )/TCP(sport={}, dport={} on port {})' + .format(nvgre_pkt.src, + nvgre_pkt.dst, + nvgre_pkt['IP'].src, + nvgre_pkt['IP'].dst, + tni, + inner_pkt.src, + inner_pkt.dst, + ip_src, + ip_dst, + sport, + dport, + src_port)) + + dst_ports = list(itertools.chain(*dst_port_lists)) + rcvd_port_index, rcvd_pkt = verify_packet_any_port( + self, masked_exp_pkt, dst_ports) + rcvd_port = dst_ports[rcvd_port_index] + exp_src_mac = None + if len(self.ptf_test_port_map[str(rcvd_port)]["target_src_mac"]) > 1: + # active-active dualtor, the packet could be received from either ToR, so use the received + # port to find the corresponding ToR + for dut_index, port_list in enumerate(dst_port_lists): + if rcvd_port in port_list: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][dut_index] + else: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][0] + actual_src_mac = scapy.Ether(rcvd_pkt).src + if exp_src_mac != actual_src_mac: + raise Exception("Pkt sent from {} to {} on port {} was rcvd pkt on {} which is one of the expected ports, " + "but the src mac doesn't match, expected {}, got {}". + format(ip_src, ip_dst, src_port, rcvd_port, exp_src_mac, actual_src_mac)) + return (rcvd_port, rcvd_pkt) + + def check_ipv6_route(self, hash_key, src_port, dst_port_lists, outer_src_ipv6, outer_dst_ipv6, ipver): + ''' + @summary: Check IPv6 route works. + @param hash_key: hash key to build packet with. + @param in_port: index of port to use for sending packet to switch + @param dst_port_lists: list of ports on which to expect packet to come back from the switch + @param outer_src_ip: source ip at the outer layer + @param outer_dst_ip: destination ip at the outer layer + ''' + ip_src = self.src_ip_interval.get_random_ip( + ) if hash_key == 'src-ip' else self.src_ip_interval.get_first_ip() + ip_dst = self.dst_ip_interval.get_random_ip( + ) if hash_key == 'dst-ip' else self.dst_ip_interval.get_first_ip() + + sport = random.randint(0, 65535) if hash_key == 'src-port' else 1234 + dport = random.randint(0, 65535) if hash_key == 'dst-port' else 80 + + src_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'src-mac' else self.base_mac + dst_mac = (self.base_mac[:-5] + "%02x" % random.randint(0, 255) + ":" + "%02x" % random.randint(0, 255)) \ + if hash_key == 'dst-mac' else self.base_mac + router_mac = self.ptf_test_port_map[str(src_port)]['target_dest_mac'] + + if self.ipver == 'ipv6-ipv6': + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ipv6_dst": ip_dst, + "ipv6_src": ip_src, + "ipv6_hlim": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcpv6_packet(**pkt_opts) + else: + pkt_opts = { + "eth_src": src_mac, + "eth_dst": dst_mac, + "ip_dst": ip_dst, + "ip_src": ip_src, + "ip_ttl": 64, + "tcp_sport": sport, + "tcp_dport": dport} + inner_pkt = simple_tcp_packet(**pkt_opts) + + tni = random.randint(1, 254) + 20000 + pkt_opts = { + 'eth_dst': router_mac, + 'ipv6_src': outer_src_ipv6, + 'ipv6_dst': outer_dst_ipv6, + 'ipv6_hlim': 64, + 'nvgre_tni': tni, + 'inner_frame': inner_pkt} + nvgre_pkt = self.simple_nvgrev6_packet(**pkt_opts) + + exp_pkt = nvgre_pkt.copy() + + masked_exp_pkt = Mask(exp_pkt) + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "src") + masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, "dst") + masked_exp_pkt.set_do_not_care_scapy(scapy.IPv6, "hlim") + + send_packet(self, src_port, nvgre_pkt) + logging.info('Sent Ether(src={}, dst={})/IP(src={}, dst={}, proto={})/IPv6(src={}, ' + 'dst={})/TCP(sport={}, dport={} on port {})' + .format(nvgre_pkt.src, + nvgre_pkt.dst, + nvgre_pkt['IPv6'].src, + nvgre_pkt['IPv6'].dst, + nvgre_pkt['IPv6'].proto, + ip_src, + ip_dst, + sport, + dport, + src_port)) + + dst_ports = list(itertools.chain(*dst_port_lists)) + rcvd_port_index, rcvd_pkt = verify_packet_any_port( + self, masked_exp_pkt, dst_ports) + rcvd_port = dst_ports[rcvd_port_index] + + exp_src_mac = None + if len(self.ptf_test_port_map[str(rcvd_port)]["target_src_mac"]) > 1: + # active-active dualtor, the packet could be received from either ToR, so use the received + # port to find the corresponding ToR + for dut_index, port_list in enumerate(dst_port_lists): + if rcvd_port in port_list: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][dut_index] + else: + exp_src_mac = self.ptf_test_port_map[str( + rcvd_port)]["target_src_mac"][0] + + actual_src_mac = scapy.Ether(rcvd_pkt).src + if exp_src_mac != actual_src_mac: + raise Exception("Pkt sent from {} to {} on port {} was rcvd pkt on {} which is one of the expected ports, " + "but the src mac doesn't match, expected {}, got {}". + format(ip_src, ip_dst, src_port, rcvd_port, exp_src_mac, actual_src_mac)) + return (rcvd_port, rcvd_pkt) + + def check_ip_route(self, hash_key, src_port, dst_port_lists, outer_src_ip, + outer_dst_ip, outer_src_ipv6, outer_dst_ipv6): + if self.ipver == 'ipv4-ipv4' or self.ipver == 'ipv4-ipv6': + (matched_port, received) = self.check_ipv4_route( + hash_key, src_port, dst_port_lists, outer_src_ip, outer_dst_ip, self.ipver) + else: + (matched_port, received) = self.check_ipv6_route( + hash_key, src_port, dst_port_lists, outer_src_ipv6, outer_dst_ipv6, self.ipver) + + assert received + + logging.info("Received packet at " + str(matched_port)) + time.sleep(0.02) + + return (matched_port, received) + + def check_hash(self, hash_key): + # Use dummy IPv4 address for outer_src_ip and outer_dst_ip + # We don't care the actually value as long as the outer_dst_ip is routed by default routed + # The outer_src_ip and outer_dst_ip are fixed + outer_src_ip = '80.1.0.31' + outer_dst_ip = '80.1.0.32' + outer_src_ipv6 = '80::31' + outer_dst_ipv6 = '80::32' + src_port, exp_port_lists, next_hops = self.get_src_and_exp_ports( + outer_dst_ip) + if self.switch_type == "chassis-packet": + exp_port_lists = self.check_same_asic(src_port, exp_port_lists) + + logging.info("outer_src_ip={}, outer_dst_ip={}, src_port={}, exp_port_lists={}".format( + outer_src_ip, outer_dst_ip, src_port, exp_port_lists)) + for exp_port_list in exp_port_lists: + if len(exp_port_list) <= 1: + logging.warning("{} has only {} nexthop".format( + outer_dst_ip, exp_port_list)) + assert False + + hit_count_map = {} + for _ in range(0, self.balancing_test_times*len(list(itertools.chain(*exp_port_lists)))): + logging.info('Checking hash key {}, src_port={}, exp_ports={}, outer_src_ip={}, outer_dst_ip={}' + .format(hash_key, src_port, exp_port_lists, outer_src_ip, outer_dst_ip)) + (matched_index, _) = self.check_ip_route(hash_key, + src_port, exp_port_lists, outer_src_ip, outer_dst_ip, + outer_src_ipv6, outer_dst_ipv6) + hit_count_map[matched_index] = hit_count_map.get( + matched_index, 0) + 1 + logging.info("hash_key={}, hit count map: {}".format( + hash_key, hit_count_map)) + + for next_hop in next_hops: + self.check_balancing(next_hop.get_next_hop(), hit_count_map, src_port) + + def runTest(self): + """ + @summary: Send NvGRE packet for each range of both IPv4 and IPv6 spaces and + expect the packet to be received from one of the expected ports + """ + logging.info("List of hash_keys: {}".format(self.hash_keys)) for hash_key in self.hash_keys: logging.info("hash test hash_key: {}".format(hash_key)) self.check_hash(hash_key) diff --git a/ansible/roles/test/files/ptftests/py3/sflow_test.py b/ansible/roles/test/files/ptftests/py3/sflow_test.py index 92eda63f6a3..47572e9a03e 100644 --- a/ansible/roles/test/files/ptftests/py3/sflow_test.py +++ b/ansible/roles/test/files/ptftests/py3/sflow_test.py @@ -119,6 +119,7 @@ def read_data(self, collector, event, sflow_port=['6343']): threading.current_thread().getName(), event_is_set)) process.terminate() + process.wait() f.close() with open(outfile, 'r') as sflow_data: for line in sflow_data: diff --git a/ansible/roles/test/files/ptftests/remote.py b/ansible/roles/test/files/ptftests/remote.py index e0941e145d7..abae548dec9 100644 --- a/ansible/roles/test/files/ptftests/remote.py +++ b/ansible/roles/test/files/ptftests/remote.py @@ -8,6 +8,7 @@ ETH_PFX = 'eth' +BACKPLANE = 'backplane' SUB_INTF_SEP = '.' @@ -24,7 +25,7 @@ def get_ifaces(): iface = line.split(':')[0].strip() # Skip not FP interfaces and vlan interface, like eth1.20 - if ETH_PFX not in iface: + if ETH_PFX not in iface and BACKPLANE != iface: continue ifaces.append(iface) @@ -45,14 +46,25 @@ def build_ifaces_map(ifaces): sub_ifaces = [] iface_map = {} + used_index = set() + backplane_exist = False for iface in ifaces: iface_suffix = iface.lstrip(ETH_PFX) if SUB_INTF_SEP in iface_suffix: iface_index = int(iface_suffix.split(SUB_INTF_SEP)[0]) sub_ifaces.append((iface_index, iface)) + elif iface == BACKPLANE: + backplane_exist = True else: iface_index = int(iface_suffix) iface_map[(0, iface_index)] = iface + used_index.add(iface_index) + + count = 1 + while count in used_index: + count = count + 1 + if backplane_exist: + iface_map[(0, count)] = "backplane" if ptf_port_mapping_mode == "use_sub_interface": # override those interfaces that has sub interfaces diff --git a/ansible/roles/test/files/ptftests/sonic.py b/ansible/roles/test/files/ptftests/sonic.py index f7c560e3214..5a17b627ced 100644 --- a/ansible/roles/test/files/ptftests/sonic.py +++ b/ansible/roles/test/files/ptftests/sonic.py @@ -469,9 +469,12 @@ def verify_bgp_neigh_state(self, dut=None, state="Active"): def change_neigh_lag_state(self, intf, is_up=True): state = ['shutdown', 'startup'] - is_match = re.match(r'(Port-Channel|Ethernet)\d+', intf) + pattern = r'(PortChannel|Ethernet)\d+' + is_match = re.match(pattern, intf) if is_match: - self.do_cmd('sudo config interface %s intf' % state[is_up]) + self.do_cmd('sudo config interface %s %s' % (state[is_up], intf)) + else: + self.log("Failed to match interface '%s' with pattern '%s'" % (intf, pattern)) def change_neigh_intfs_state(self, intfs, is_up=True): for intf in intfs: diff --git a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt b/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt index 1dfafae8765..c372225c6a1 100644 --- a/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt +++ b/ansible/roles/test/files/tools/loganalyzer/loganalyzer_common_ignore.txt @@ -241,6 +241,7 @@ r, ".* ERR dualtor_neighbor_check.py: .*" r, ".*ERR kernel: \[.*\] ccp.*firmware: failed to load amd\/amd_sev_.*.sbin .*" r, ".*ERR kernel: \[.*\] firmware_class: See https:\/\/wiki.debian.org\/Firmware for information about missing firmware.*" r, ".*ERR kernel: \[.*\] snd_hda_intel.*no codecs found!.*" +r, ".*ERR kernel: \[.*\] ccp.*firmware: failed to load amd\/sev\.fw.*" # https://msazure.visualstudio.com/One/_workitems/edit/26734952 # https://msazure.visualstudio.com/One/_workitems/edit/27214953 @@ -251,9 +252,8 @@ r, ".* ERR syncd#syncd.* SAI_API_SWITCH:sai_bulk_object_get_stats.* get bulk que r, ".* ERR .*-E-PVT-0- get_temperature: sensor=GIBRALTAR_HBM_SENSOR_0 is not ready.*" r, ".* ERR .*-E-PVT-0- get_temperature: sensor=GIBRALTAR_HBM_SENSOR_1 is not ready.*" r, ".* ERR CCmisApi: system_service_Map_base::at.*" -r, ".* ERR gbsyncd\d*#GBSAI.*pointer for SAI_SWITCH_ATTR_REGISTER_READ is not handled, FIXME.*" -r, ".* ERR gbsyncd\d*#GBSAI.*pointer for SAI_SWITCH_ATTR_REGISTER_WRITE is not handled, FIXME.*" -r, ".* ERR gbsyncd\d*#GBSAI[\d*] updateNotifications: pointer for SAI_SWITCH_ATTR_REGISTER_WRITE is not handled, FIXME!" +r, ".* ERR gbsyncd\d*.*pointer for SAI_SWITCH_ATTR_REGISTER_READ is not handled, FIXME.*" +r, ".* ERR gbsyncd\d*.*pointer for SAI_SWITCH_ATTR_REGISTER_WRITE is not handled, FIXME.*" r, ".* ERR kernel:.*No associated hostinterface to 6 port.*" r, ".* ERR lldp#lldpmgrd\[\d*\]: Port init timeout reached.*" r, ".* ERR swss\d*#orchagent.*pointer for SAI_SWITCH_ATTR_REGISTER_READ is not handled, FIXME.*" @@ -288,7 +288,10 @@ r, ".* INFO healthd.*Key 'TEMPERATURE_INFO|ASIC' field 'temperature' unavailable r, ".* ERR kernel:.*cisco-fpga-p2pm-m-slot p2pm-m-slot\.\d+: cisco_fpga_select_new_acpi_companion: searching for child status\d+ 0x[0-9a-f]+; fpga_id 0x[0-9a-f]+.*" r, ".* ERR kernel:.*cisco-fpga-pci \d+:\d+:\d+\.\d+: cisco_fpga_select_new_acpi_companion: searching for child status\d+ 0x[0-9a-f]+; fpga_id 0x[0-9a-f]+.*" r, ".* WARNING kernel:.*pcieport.*device.*error.*status/mask=.*" +r, ".* ERR syncd\d*#syncd:.* -E-HLD-0- Trap.* is not supported.*" +# Ignore ACL EGRESS feature unavailable error on fabric cards +r, ".* ERR syncd\d*#syncd:.* SAI_API_SWITCH:brcm_sai_get_switch_attribute.* Get switch attrib 37 failed with error Feature unavailable.*" # Ignore rsyslog librelp error if rsyslogd on host or container is down or going down r, ".* ERR .*#rsyslogd: librelp error 10008 forwarding to server .* - suspending.*" @@ -298,3 +301,14 @@ r, ".* ERR rsyslogd: imrelp.*error 'error when receiving data, session broken', # SAI implement missing for the https://github.com/sonic-net/sonic-buildimage/pull/18912 caused the err msg pop up, need to ignore the err msgs before it SAI implement is done. r, ".* ERR swss#orchagent:.*doAppSwitchTableTask.*Unsupported Attribute ecmp_hash_offset.*" r, ".* ERR swss#orchagent:.*doAppSwitchTableTask.*Unsupported Attribute lag_hash_offset.*" + +# ignore SAI_API_BUFFER for DNX platforms +r, ".* ERR syncd\d*#syncd.*SAI_API_BUFFER.*Unsupported buffer pool.*" + +# ignore TACACS login failure, which will happen when other user trying login device when running test +r, ".* ERR sshd\[\d*\]: auth fail.*" + +# Ignore auditd error +r, ".* ERR auditd\[\d*\]: Error receiving audit netlink packet \(No buffer space available\)" +r, ".* ERR audisp-tacplus: tac_connect_single: connection failed with.*Interrupted system call" +r, ".* ERR audisp-tacplus: tac_connect_single: connection failed with.*Transport endpoint is not connected" diff --git a/ansible/roles/vm_set/library/vm_topology.py b/ansible/roles/vm_set/library/vm_topology.py index 7c35917144b..f5ff999ecb5 100644 --- a/ansible/roles/vm_set/library/vm_topology.py +++ b/ansible/roles/vm_set/library/vm_topology.py @@ -213,7 +213,7 @@ def adaptive_temporary_interface(vm_set_name, interface_name, reserved_space=0): class VMTopology(object): - def __init__(self, vm_names, vm_properties, fp_mtu, max_fp_num, topo): + def __init__(self, vm_names, vm_properties, fp_mtu, max_fp_num, topo, is_dpu=False): self.vm_names = vm_names self.vm_properties = vm_properties self.fp_mtu = fp_mtu @@ -222,6 +222,7 @@ def __init__(self, vm_names, vm_properties, fp_mtu, max_fp_num, topo): self._host_interfaces = None self._disabled_host_interfaces = None self._host_interfaces_active_active = None + self._is_dpu = is_dpu return def init(self, vm_set_name, vm_base, duts_fp_ports, duts_name, ptf_exists=True, check_bridge=True): @@ -234,24 +235,37 @@ def init(self, vm_set_name, vm_base, duts_fp_ports, duts_name, ptf_exists=True, self.pid = None self.VMs = {} - if 'VMs' in self.topo and len(self.topo['VMs']) > 0: - self.vm_base = vm_base - if vm_base in self.vm_names: - self.vm_base_index = self.vm_names.index(vm_base) - else: - raise Exception('VM_base "%s" should be presented in current vm_names: %s' % ( - vm_base, str(self.vm_names))) - for k, v in self.topo['VMs'].items(): - if self.vm_base_index + v['vm_offset'] < len(self.vm_names): - self.VMs[k] = v - if check_bridge: - for hostname, attrs in self.VMs.items(): - vmname = self.vm_names[self.vm_base_index + - attrs['vm_offset']] - vm_bridges = self.get_vm_bridges(vmname) - if len(attrs['vlans']) > len(vm_bridges): - raise Exception("Wrong vlans parameter for hostname %s, vm %s. Too many vlans. Maximum is %d" - % (hostname, vmname, len(vm_bridges))) + if not self._is_dpu: + if 'VMs' in self.topo and len(self.topo['VMs']) > 0: + self.vm_base = vm_base + if vm_base in self.vm_names: + self.vm_base_index = self.vm_names.index(vm_base) + else: + raise Exception('VM_base "%s" should be presented in current vm_names: %s' % ( + vm_base, str(self.vm_names))) + for k, v in self.topo['VMs'].items(): + if self.vm_base_index + v['vm_offset'] < len(self.vm_names): + self.VMs[k] = v + else: + if 'DPUs' in self.topo and len(self.topo['DPUs']) > 0: + self.vm_base = vm_base + if vm_base in self.vm_names: + self.vm_base_index = self.vm_names.index(vm_base) + else: + raise Exception('VM_base "%s" should be presented in current vm_names: %s' % ( + vm_base, str(self.vm_names))) + for k, v in self.topo['DPUs'].items(): + if self.vm_base_index + v['vm_offset'] < len(self.vm_names): + self.VMs[k] = v + + if check_bridge: + for hostname, attrs in self.VMs.items(): + vmname = self.vm_names[self.vm_base_index + + attrs['vm_offset']] + vm_bridges = self.get_vm_bridges(vmname) + if len(attrs['vlans']) > len(vm_bridges): + raise Exception("Wrong vlans parameter for hostname %s, vm %s. Too many vlans. Maximum is %d" + % (hostname, vmname, len(vm_bridges))) self.VM_LINKs = {} if 'VM_LINKs' in self.topo: @@ -286,6 +300,7 @@ def init(self, vm_set_name, vm_base, duts_fp_ports, duts_name, ptf_exists=True, self.duts_fp_ports = duts_fp_ports self.injected_fp_ports = self.extract_vm_vlans() + self.injected_VM_ports = self.extract_vm_ovs() self.bp_bridge = ROOT_BACK_BR_TEMPLATE % self.vm_set_name @@ -386,6 +401,13 @@ def extract_vm_vlans(self): return vlans + def extract_vm_ovs(self): + vlans = {} + for _, attr in self.OVS_LINKs.items(): + VM = self.vm_names[self.vm_base_index + attr['start_vm_offset']] + vlans[VM] = attr['vlans'][:] + return vlans + def add_network_namespace(self): """Create a network namespace.""" self.delete_network_namespace() @@ -1153,8 +1175,8 @@ def bind_ovs_ports(self, br_name, dut_iface, injected_iface, vm_iface, disconnec (br_name, dut_iface_id, vm_iface_id, injected_iface_id)) VMTopology.cmd("ovs-ofctl add-flow %s table=0,priority=5,ip,in_port=%s,action=output:%s" % (br_name, dut_iface_id, injected_iface_id)) - VMTopology.cmd("ovs-ofctl add-flow %s table=0,priority=5,ipv6,in_port=%s,action=output:%s" % - (br_name, dut_iface_id, injected_iface_id)) + VMTopology.cmd("ovs-ofctl add-flow %s table=0,priority=5,ipv6,in_port=%s,action=output:%s,%s" % + (br_name, dut_iface_id, vm_iface_id, injected_iface_id)) VMTopology.cmd("ovs-ofctl add-flow %s table=0,priority=3,in_port=%s,action=output:%s,%s" % (br_name, dut_iface_id, vm_iface_id, injected_iface_id)) VMTopology.cmd("ovs-ofctl add-flow %s table=0,priority=10,ip,in_port=%s,nw_proto=89,action=output:%s,%s" % @@ -1904,7 +1926,8 @@ def main(): fp_mtu=dict(required=False, type='int', default=DEFAULT_MTU), max_fp_num=dict(required=False, type='int', default=NUM_FP_VLANS_PER_FP), - netns_mgmt_ip_addr=dict(required=False, type='str', default=None) + netns_mgmt_ip_addr=dict(required=False, type='str', default=None), + is_dpu=(dict(required=False, type='bool', default=False)) ), supports_check_mode=False) @@ -1914,6 +1937,7 @@ def main(): fp_mtu = module.params['fp_mtu'] max_fp_num = module.params['max_fp_num'] vm_properties = module.params['vm_properties'] + is_dpu = module.params['is_dpu'] if 'is_dpu' in module.params else False config_module_logging(construct_log_filename(cmd, vm_set_name)) @@ -1923,7 +1947,7 @@ def main(): try: topo = module.params['topo'] - net = VMTopology(vm_names, vm_properties, fp_mtu, max_fp_num, topo) + net = VMTopology(vm_names, vm_properties, fp_mtu, max_fp_num, topo, is_dpu) if cmd == 'create': net.create_bridges() diff --git a/ansible/roles/vm_set/tasks/add_topo.yml b/ansible/roles/vm_set/tasks/add_topo.yml index 81563910f14..fc886241fea 100644 --- a/ansible/roles/vm_set/tasks/add_topo.yml +++ b/ansible/roles/vm_set/tasks/add_topo.yml @@ -229,6 +229,33 @@ netns_mgmt_ip_addr: "{{ netns_mgmt_ip if netns_mgmt_ip is defined else omit }}" become: yes + - name: Bind topology {{ topo }} to DPUs. + vm_topology: + cmd: "bind" + vm_set_name: "{{ vm_set_name }}" + topo: "{{ topology }}" + vm_names: "{{ VM_hosts }}" + vm_base: "{{ VM_base }}" + vm_type: "vsonic" + vm_properties: "{{ vm_properties if vm_properties is defined else omit }}" + ptf_mgmt_ip_addr: "{{ ptf_ip }}" + ptf_mgmt_ipv6_addr: "{{ ptf_ipv6 }}" + ptf_mgmt_ip_gw: "{{ mgmt_gw }}" + ptf_mgmt_ipv6_gw: "{{ mgmt_gw_v6 | default(None) }}" + ptf_extra_mgmt_ip_addr: "{{ ptf_extra_mgmt_ip.split(',') | default([]) }}" + ptf_bp_ip_addr: "{{ ptf_bp_ip }}" + ptf_bp_ipv6_addr: "{{ ptf_bp_ipv6 }}" + mgmt_bridge: "{{ mgmt_bridge }}" + duts_fp_ports: "{{ duts_fp_ports }}" + duts_mgmt_port: "{{ duts_mgmt_port }}" + duts_name: "{{ duts_name.split(',') }}" + fp_mtu: "{{ fp_mtu_size }}" + max_fp_num: "{{ max_fp_num }}" + netns_mgmt_ip_addr: "{{ netns_mgmt_ip if netns_mgmt_ip is defined else omit }}" + is_dpu: true + become: yes + when: dpu_targets is defined and dpu_targets | length > 0 + - name: Change MAC address for PTF interfaces include_tasks: ptf_change_mac.yml when: topo != 'fullmesh' diff --git a/ansible/roles/vm_set/tasks/main.yml b/ansible/roles/vm_set/tasks/main.yml index b21e94d2fa9..529ef22fcf4 100644 --- a/ansible/roles/vm_set/tasks/main.yml +++ b/ansible/roles/vm_set/tasks/main.yml @@ -71,6 +71,10 @@ - name: Install necessary packages apt: pkg={{ item }} update_cache=yes cache_valid_time=86400 become: yes + register: apt_res + retries: 2 + delay: 30 + until: apt_res is success with_items: - ifupdown - qemu @@ -82,6 +86,10 @@ - name: Install necessary packages apt: pkg={{ item }} update_cache=yes cache_valid_time=86400 become: yes + register: apt_res + retries: 2 + delay: 30 + until: apt_res is success with_items: - iproute2 - vlan @@ -92,6 +100,10 @@ - libvirt-clients - name: Install necessary packages + register: apt_res + retries: 2 + delay: 30 + until: apt_res is success apt: pkg: - python @@ -102,6 +114,10 @@ when: host_distribution_version.stdout == "18.04" - name: Install necessary packages + register: apt_res + retries: 2 + delay: 30 + until: apt_res is success apt: pkg: - python3-libvirt @@ -345,6 +361,14 @@ when: vm_required is defined and vm_required == True +- name: Generate DPU list of target DPUs + set_fact: dpu_targets={{ VM_hosts | filter_vm_targets(topology['DPUs'], VM_base) | sort }} + when: topology['DPUs'] is defined and hostvars[duts_name]['type'] == 'kvm' + +- name: Set fallback default value for dpu_targets + set_fact: dpu_targets={{ [] }} + when: dpu_targets is not defined + - name: Add topology include_tasks: add_topo.yml when: action == 'add_topo' diff --git a/ansible/roles/vm_set/tasks/manage_duts.yml b/ansible/roles/vm_set/tasks/manage_duts.yml index ba5398f49ba..a85b8075ff9 100644 --- a/ansible/roles/vm_set/tasks/manage_duts.yml +++ b/ansible/roles/vm_set/tasks/manage_duts.yml @@ -26,3 +26,17 @@ when: - hostvars[dut_name] is defined - hostvars[dut_name].type is defined + +- block: + - name: Start SONiC DPU VM + include_tasks: start_dpu_vm.yml + when: action == 'start_sonic_vm' + + - name: Stop SONiC VM + include_tasks: stop_vsonic_dpu_vm.yml + vars: + dpu_name: "{{ item }}" + with_items: "{{ dpu_targets }}" + when: action == 'stop_sonic_vm' + + when: dpu_targets is defined and dpu_targets | length > 0 diff --git a/ansible/roles/vm_set/tasks/remove_topo.yml b/ansible/roles/vm_set/tasks/remove_topo.yml index 8d0768bf848..46f38831e23 100644 --- a/ansible/roles/vm_set/tasks/remove_topo.yml +++ b/ansible/roles/vm_set/tasks/remove_topo.yml @@ -59,6 +59,22 @@ max_fp_num: "{{ max_fp_num }}" become: yes + - name: Unbind topology {{ topo }} to DPU VMs. base vm = {{ VM_base }} + vm_topology: + cmd: "unbind" + vm_set_name: "{{ vm_set_name }}" + topo: "{{ topology }}" + vm_names: "{{ VM_hosts }}" + vm_base: "{{ VM_base }}" + vm_type: "vsonic" + duts_fp_ports: "{{ duts_fp_ports }}" + duts_mgmt_port: "{{ duts_mgmt_port }}" + duts_name: "{{ duts_name.split(',') }}" + max_fp_num: "{{ max_fp_num }}" + is_dpu: true + become: yes + when: dpu_targets is defined and dpu_targets | length > 0 + - include_tasks: remove_ceos_list.yml when: vm_type is defined and vm_type == "ceos" @@ -147,3 +163,10 @@ vm_names: "{{ VM_targets }}" become: yes when: vm_type is defined and vm_type=="ceos" + +- name: Destroy DPUs network + vm_topology: + cmd: 'destroy' + vm_names: "{{ dpu_targets }}" + become: yes + when: dpu_targets is defined and dpu_targets | length > 0 diff --git a/ansible/roles/vm_set/tasks/start_dpu_vm.yml b/ansible/roles/vm_set/tasks/start_dpu_vm.yml new file mode 100644 index 00000000000..e18b189108a --- /dev/null +++ b/ansible/roles/vm_set/tasks/start_dpu_vm.yml @@ -0,0 +1,145 @@ +- name: Load topo variables + include_vars: "vars/topo_{{ topo }}.yml" + when: topo is defined + +- name: Filter VMs for specified topology + set_fact: DPU_hosts={{ VM_hosts | filter_vm_targets(topology['DPUs'], VM_base) | sort }} + when: topology['DPUs'] is defined and VM_base is defined + +- name: Create directory for vm images and vm disks + file: path={{ item }} state=directory mode=0755 + with_items: + - "{{ root_path }}/images" + - "{{ root_path }}/disks" + +- name: Check SONiC image + stat: path={{ root_path }}/images/{{ vsonic_image_filename }} + register: sonic_img_stat + +- name: Download SONiC image if no local file exists + block: + + - name: Fail if skip_vsonic_image_downloading is true + fail: + msg: "Failed, no local SONiC image and skip_vsonic_image_downloading is true" + when: skip_vsonic_image_downloading + + - name: Init vsonic_image_urls when vsonic_image_url value type is string + set_fact: + vsonic_image_urls: + - "{{ vsonic_image_url }}" + when: vsonic_image_url | type_debug == 'string' + + - name: Init vsonic_image_urls when vsonic_image_url value type is list + set_fact: + vsonic_image_urls: "{{ vsonic_image_url }}" + when: vsonic_image_url | type_debug == 'list' + + - name: Init working_image_urls list + set_fact: + working_image_urls: [] + + - name: Loop vsonic_image_urls to find out working URLs + include_tasks: probe_image_url.yml + loop: "{{ vsonic_image_urls }}" + + - name: Fail if no working SONiC image download url is found + fail: + msg: [ + "Failed, no working SONiC image download URL is found. There are 2 options to fix it:", + " 1. Fix vsonic_image_url defined in ansible/group_vars/vm_host/sonic.yml", + " 2. Manually put SONiC image to {{ root_path }}/images/{{ vsonic_image_filename }}", + ] + when: working_image_urls | length == 0 + + - name: Download SONiC image from the first URL in working_image_urls + get_url: + url: "{{ working_image_urls[0] }}" + dest: "{{ root_path }}/images/{{ vsonic_image_filename }}" + environment: "{{ proxy_env | default({}) }}" + + - name: Get downloaded SONiC image info + stat: path={{ root_path }}/images/{{ vsonic_image_filename }} + register: img_stat + + when: not sonic_img_stat.stat.exists + +- name: Get downloaded SONiC image info + stat: path={{ root_path }}/images/{{ vsonic_image_filename }} + register: downloaded_sonic_img_stat + +- block: + + - name: Rename file to have a .gz suffix + command: mv {{ root_path }}/images/{{ vsonic_image_filename }} {{ root_path }}/images/{{ vsonic_image_filename }}.gz + + - name: Decompress file + command: gunzip {{ root_path }}/images/{{ vsonic_image_filename }}.gz + + when: '"application/gzip" in downloaded_sonic_img_stat.stat.mimetype' + +- set_fact: + src_image_name: "{{ vsonic_image_filename }}" + +- name: Create VMs network + become: yes + vm_topology: + cmd: 'create' + vm_names: "{{ DPU_hosts }}" + fp_mtu: "{{ fp_mtu_size }}" + max_fp_num: "{{ max_fp_num }}" + topo: "{{ topology }}" + +- name: Default autostart to yes when it is not defined + set_fact: + autostart: yes + when: autostart is not defined + +- name: Default batch_size to 1 when it is not defined + set_fact: + batch_size: "{{ DPU_hosts|length }}" + when: batch_size is not defined + +- name: Default wait interval to 0 if it is not defined + set_fact: + interval: 0 + when: interval is not defined + +- name: Start DPU VMs + include_tasks: start_vsonic_dpu_vm.yml + vars: + vm_name: "{{ item }}" + hostname: "{{ vm_name }}" + mgmt_ip_address: "{{ hostvars[vm_name]['ansible_host'] }}" + serial_port: "{{ vm_console_base|int + vm_name[4:]|int }}" + src_disk_image: "{{ root_path }}/images/{{ src_image_name }}" + disk_image_dir: "{{ root_path }}/disks" + cdrom_image: "{{ root_path }}/images/{{ veos_cd_image_filename }}" + mgmt_tap: "{{ vm_name }}-m" + backplane_tap: "{{ vm_name }}-back" + with_items: "{{ DPU_hosts }}" + +- set_fact: + kickstart_failed_vms: [] + +- name: Kickstart DPU VMs + include_tasks: kickstart_vm.yml + vars: + vm_name: "{{ item }}" + hostname: "{{ vm_name }}" + mgmt_ip_address: "{{ hostvars[vm_name]['ansible_host'] }}" + serial_port: "{{ vm_console_base|int + vm_name[4:]|int }}" + src_disk_image: "{{ root_path }}/images/{{ src_image_name }}" + disk_image_dir: "{{ root_path }}/disks" + cdrom_image: "{{ root_path }}/images/{{ veos_cd_image_filename }}" + mgmt_tap: "{{ vm_name }}-m" + backplane_tap: "{{ vm_name }}-back" + with_items: "{{ DPU_hosts }}" + +- block: + - name: Log all kickstart failed VMs + debug: msg="{{ kickstart_failed_vms }}" + + - name: Fail if kickstart any VM failed + fail: msg="Please run start-vms again with -e 'respin_vms=["VMXXX"]' to retry the failed VMs" + when: kickstart_failed_vms | length > 0 diff --git a/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml b/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml index 1687c3590f7..e48ce0113f8 100644 --- a/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml +++ b/ansible/roles/vm_set/tasks/start_tacacs_daily_daemon.yml @@ -79,9 +79,14 @@ - name: Encrypt TACACS password from secret_group_vars shell: python3 -c "import crypt; print(crypt.crypt('{{secret_group_vars['str']['altpasswords'][0]}}', 'abc'))" - register: encrypted_sonic_password + register: encrypted_sonic_password_secret_group_vars + no_log: True delegate_to: "{{ ptf_host }}" + - name: Set TACACS password from encrypted password from secret_group_vars + set_fact: + tacacs_user_passwd: '{{ encrypted_sonic_password_secret_group_vars.stdout }}' + when: - secret_group_vars is defined - secret_group_vars['str'] is defined @@ -94,17 +99,18 @@ - name: Encrypt TACACS password from sonicadmin_password shell: python3 -c "import crypt; print(crypt.crypt('{{sonicadmin_password}}', 'abc'))" - register: encrypted_sonic_password + register: encrypted_sonic_password_sonicadmin_password + no_log: True delegate_to: "{{ ptf_host }}" + - name: Set TACACS password from encrypted sonicadmin_password + set_fact: + tacacs_user_passwd: '{{ encrypted_sonic_password_sonicadmin_password.stdout }}' + when: - tacacs_user_passwd is not defined - - name: Set TACACS password from encrypted_sonic_password - set_fact: - tacacs_user_passwd: '{{ encrypted_sonic_password.stdout }}' - -- debug: msg="tacacs_user_passwd {{ tacacs_user_passwd }}" +- debug: msg="encrypted tacacs_user_passwd {{ tacacs_user_passwd }}" - block: - name: Generate tacacs daily daemon config file diff --git a/ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml b/ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml new file mode 100644 index 00000000000..05171c42b86 --- /dev/null +++ b/ansible/roles/vm_set/tasks/start_vsonic_dpu_vm.yml @@ -0,0 +1,54 @@ +- name: Device debug output + debug: msg="hostname = {{ hostname }} serial port = {{ serial_port }} ip = {{ mgmt_ip_address }}" + +- set_fact: + disk_image_name: "vsonic_{{ vm_name }}.img" + vm_xml_template: "sonic_vm.xml.j2" + +- set_fact: + disk_image: "{{ disk_image_dir }}/{{ disk_image_name }}" + +- set_fact: + respin_vms: [] + when: respin_vms is not defined + +- name: Check destination file existance + stat: path={{ disk_image }} + register: file_stat + +- name: Copy vsonic disk image for {{ hostname }} + copy: src={{ src_disk_image }} dest={{ disk_image }} remote_src=True + when: not file_stat.stat.exists + +- name: Define vm {{ vm_name }} + virt: name={{ vm_name }} + command=define + xml="{{ lookup('template', 'templates/{{ vm_xml_template }}') }}" + uri=qemu:///system + when: vm_name not in vm_list_defined.list_vms + become: yes + +- name: Destroy vm {{ vm_name }} if it requires fix + virt: name={{ vm_name }} + command=destroy + uri=qemu:///system + when: vm_name in respin_vms + become: yes + ignore_errors: true + +- name: Start vm {{ vm_name }} + virt: name={{ vm_name }} + state=running + uri=qemu:///system + when: vm_name not in vm_list_running.list_vms or vm_name in respin_vms + become: yes + +- name: Find out VM index + set_fact: + vm_index: "{{ VM_hosts.index(vm_name)|int + 1 }}" + +- name: "Pause after started every {{ batch_size }} VMs" + pause: seconds="{{ interval }}" + when: + - (vm_index|int % batch_size|int) == 0 + - interval|int > 0 diff --git a/ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml b/ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml new file mode 100644 index 00000000000..23b7c51f07e --- /dev/null +++ b/ansible/roles/vm_set/tasks/stop_vsonic_dpu_vm.yml @@ -0,0 +1,23 @@ +- set_fact: + dpu_vm_storage_location: "{{ home_path }}/veos-vm" + when: dpu_vm_storage_location is not defined + +- set_fact: + disk_image: "{{ dpu_vm_storage_location }}/disks/vsonic_{{ dpu_name }}.img" + +- name: Destroy vm {{ dpu_name }} + virt: name={{ dpu_name }} + state=destroyed + uri=qemu:///system + when: dpu_name in vm_list_running.list_vms or dpu_name in vm_list_paused.list_vms + become: yes + +- name: Undefine vm {{ dpu_name }} + virt: name={{ dpu_name }} + command=undefine + uri=qemu:///system + when: dpu_name in vm_list_defined.list_vms + become: yes + +- name: Remove sonic disk image for {{ dpu_name }} + file: path={{ disk_image }} state=absent diff --git a/ansible/ssh_session_gen.py b/ansible/ssh_session_gen.py old mode 100644 new mode 100755 index 88e0a846d9d..8768c57d3de --- a/ansible/ssh_session_gen.py +++ b/ansible/ssh_session_gen.py @@ -1,17 +1,21 @@ +#!/usr/bin/env python3 + """ Script used to generate SSH session files for console access to devices. """ import argparse -import os +import itertools import re -from typing import Dict, List, Optional, Tuple +from typing import Dict, List, Optional from devutil.device_inventory import DeviceInfo, DeviceInventory from devutil.testbed import TestBed from devutil.inv_helpers import HostManager from devutil.ssh_session_repo import ( + DeviceSSHInfo, SecureCRTSshSessionRepoGenerator, SshConfigSshSessionRepoGenerator, + SshConfigTmuxinatorSessionRepoGenerator, SshSessionRepoGenerator, ) @@ -57,12 +61,13 @@ def __init__( "FanoutLeaf": {"user": leaf_fanout_user, "pass": leaf_fanout_pass}, "FanoutLeafSonic": {"user": leaf_fanout_user, "pass": leaf_fanout_pass}, "FanoutRoot": {"user": root_fanout_user, "pass": root_fanout_pass}, + "Console": {"user": console_server_user, "pass": console_server_pass}, "ConsoleServer": {"user": console_server_user, "pass": console_server_pass}, "MgmtTsToRRouter": {"user": console_server_user, "pass": console_server_pass}, "PTF": {"user": ptf_user, "pass": ptf_pass}, } - def get_ssh_cred(self, device: DeviceInfo) -> Tuple[str, str, str, str]: + def get_ssh_cred(self, device: DeviceInfo) -> DeviceSSHInfo: """ Get SSH info for a testbed node. @@ -85,9 +90,10 @@ def get_ssh_cred(self, device: DeviceInfo) -> Tuple[str, str, str, str]: else "" ) - if not ssh_ip or not ssh_user or not ssh_pass or not ssh_ipv6: + if not ssh_ip or not ssh_user or not ssh_pass or ("Console" not in device.device_type and not ssh_ipv6): try: - host_vars = self.ansible_hosts.get_host_vars(device.hostname) + device_hostname = device.hostname if device.physical_hostname is None else device.physical_hostname + host_vars = self.ansible_hosts.get_host_vars(device_hostname) ssh_ip = host_vars["ansible_host"] if not ssh_ip else ssh_ip ssh_ipv6 = host_vars["ansible_hostv6"] if not ssh_ipv6 and "ansible_hostv6" in host_vars else ssh_ipv6 @@ -97,15 +103,20 @@ def get_ssh_cred(self, device: DeviceInfo) -> Tuple[str, str, str, str]: ) except Exception as e: print( - f"Error: Failed to get SSH credential for device {device.hostname} ({device.device_type}): {str(e)}" + f"Error: Failed to get SSH credential for device {device_hostname} ({device.device_type}): {str(e)}" ) - ssh_ip = "" if ssh_ip is None else ssh_ip - ssh_ipv6 = "" if ssh_ipv6 is None else ssh_ipv6 - ssh_user = "" if ssh_user is None else ssh_user - ssh_pass = "" if ssh_pass is None else ssh_pass + ssh_info = DeviceSSHInfo( + ip="" if ssh_ip is None else ssh_ip, + ipv6="" if ssh_ipv6 is None else ssh_ipv6, + user="" if ssh_user is None else ssh_user, + password="" if ssh_pass is None else ssh_pass + ) + + if device.console_port > 0: + ssh_info.user = f"{ssh_info.user}:{device.console_port}" - return ssh_ip, ssh_ipv6, ssh_user, ssh_pass + return ssh_info class DeviceSshSessionRepoGenerator(object): @@ -115,47 +126,40 @@ def __init__( self.repo_generator = repo_generator self.ssh_info_solver = ssh_info_solver - def generate_ssh_session_for_device(self, device: DeviceInfo, session_path: str): + def generate_ssh_session_for_device(self, + device: DeviceInfo, + repo_type: str, + inv_name: str, + testbed_name: str): + """Generate SSH session for a device. Args: device (DeviceInfo): Represents a device. - session_path (str): Path to store the SSH session file. + repo_type (str): Repository type. + inv_name (str): Inventory name. + testbed_name (str): Testbed name. """ if not device.is_ssh_supported(): return - ssh_ip, ssh_ipv6, ssh_user, ssh_pass = self.ssh_info_solver.get_ssh_cred(device) - if not ssh_ip and not ssh_ipv6: + ssh_info = self.ssh_info_solver.get_ssh_cred(device) + if not ssh_info.ip and not ssh_info.ipv6: print( f"WARNING: Management IP is not specified for testbed node, skipped: {device.hostname}" ) return - if device.console_device: - console_ssh_ip, _, console_ssh_user, console_ssh_pass = self.ssh_info_solver.get_ssh_cred( - device.console_device) - console_ssh_port = device.console_port - else: - console_ssh_ip, console_ssh_user, console_ssh_pass, console_ssh_port = None, None, None, 0 - - if not ssh_user: - print( - "WARNING: SSH credential is missing for device: {}".format( - device.hostname - ) - ) + if not ssh_info.user: + print(f"WARNING: SSH credential is missing for device: {device.hostname}") + # print(f"Generating SSH session for device: {device.hostname}") self.repo_generator.generate( - session_path, - ssh_ip, - ssh_ipv6, - ssh_user, - ssh_pass, - console_ssh_ip, - console_ssh_port, - console_ssh_user, - console_ssh_pass + repo_type, + inv_name, + testbed_name, + device, + ssh_info, ) @@ -195,7 +199,15 @@ def _generate_ssh_sessions_for_testbed(self, testbed: TestBed): Args: testbed (object): Represents a testbed setup. """ - devices = [testbed.ptf_node] + list(testbed.dut_nodes.values()) + devices = itertools.chain( + testbed.dut_nodes.values(), + [testbed.ptf_node], + testbed.fanout_nodes.values(), + testbed.root_fanout_nodes.values(), + testbed.console_nodes.values(), + testbed.server_nodes.values() + ) + for device in devices: self._generate_ssh_session_for_testbed_node(testbed, device) @@ -213,16 +225,7 @@ def _generate_ssh_session_for_testbed_node( testbed_node_type (str): Type of the testbed node. It can be "ptf" or "dut". testbed_node (object): Represents a connectable node in the testbed. """ - device_type = "dut" if device.device_type != "PTF" else "ptf" - - session_path = os.path.join( - "testbeds", - testbed.inv_name, - testbed.conf_name, - device_type + "-" + device.hostname, - ) - - self.generate_ssh_session_for_device(device, session_path) + self.generate_ssh_session_for_device(device, "testbeds", testbed.inv_name, testbed.conf_name) device_type_pattern = re.compile(r"(? false {{ inventory_hostname }} - {{ vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int][intf_index] }} {{ vm }} - {{ vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int][intf_index] }} 1 10 3 +{% endfor %} {% if vm_asic_ifnames is defined %} +{% for intf_index in range(vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int]|length) %} false {{ vm_asic_ids[vm][0] }} - {{ vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['bgp_ipv4'][dut_index|int][intf_index] }} {{ vm }} - {{ vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['peer_ipv4'][dut_index|int][intf_index] }} 1 10 3 +{% endfor %} {% endif %} {% endif %} {% if (vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int] and vm_topo_config['topo_type'] != 'wan') %} +{% for intf_index in range(vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int]|length) %} {{ inventory_hostname }} - {{ vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int][intf_index] }} {{ vm }} - {{ vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int][intf_index] }} 1 10 3 +{% endfor %} {% if vm_asic_ifnames is defined %} +{% for intf_index in range(vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int]|length) %} {{ vm_asic_ids[vm][0] }} - {{ vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['bgp_ipv6'][dut_index|int][intf_index] }} {{ vm }} - {{ vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int] }} + {{ vm_topo_config['vm'][vm]['peer_ipv6'][dut_index|int][intf_index] }} 1 10 3 +{% endfor %} {% endif %} {% endif %} {% endfor %} @@ -55,27 +63,31 @@ {% 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] %} +{% for intf_index in range(asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0]|length) %} false {{ asic }} - {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0][intf_index] }} {{ neigh_asic }} - {{ asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0][intf_index] }} 1 0 0 +{% endfor %} {% endif %} {% if asic_config['neigh_asic'][neigh_asic]['peer_ipv6'][0] %} +{% for intf_index in range(asic_config['neigh_asic'][neigh_asic]['peer_ipv6'][0]|length) %} {{ asic }} - {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0][intf_index] }} {{ neigh_asic }} - {{ asic_config['neigh_asic'][neigh_asic]['peer_ipv6'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['peer_ipv6'][0][intf_index] }} 1 0 0 +{% endfor %} {% endif %} {% endfor %} {% endfor %} @@ -149,12 +161,14 @@ {% for index in range(vms_number) %} {% if vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int] %} +{% for intf_index in range(vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int]|length) %} -
{{ vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int] }}
+
{{ vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int][intf_index] }}
+{% endfor %} {% endif %} {% endfor %} {% if num_asics == 1 and switch_type is defined and (switch_type == 'voq' or switch_type == 'chassis-packet') %} @@ -209,7 +223,7 @@ {% 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] }}
+
{{ vm_topo_config['vm'][vms[index]]['peer_ipv4'][dut_index|int][0] }}
@@ -233,12 +247,14 @@ {% 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] %} +{% for intf_index in range(asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0]|length) %} -
{{ asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0] }}
+
{{ asic_config['neigh_asic'][neigh_asic]['peer_ipv4'][0][intf_index] }}
+{% endfor %} {% endif %} {% endfor %} {% endif %} diff --git a/ansible/templates/minigraph_dpg.j2 b/ansible/templates/minigraph_dpg.j2 index 6fd4d00fb71..b76fa00ca76 100644 --- a/ansible/templates/minigraph_dpg.j2 +++ b/ansible/templates/minigraph_dpg.j2 @@ -184,24 +184,26 @@ {% if (card_type is not defined or card_type != 'supervisor') and (vm_topo_config['topo_type'] != 'wan') %} {% for index in range(vms_number) %} {% if vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int] is not none %} +{% for intf_index in range(vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int]|length) %} -{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int]|lower %} +{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int][intf_index]|lower %} PortChannel{{ '10' + ((index+1) |string) }} {% else %} {{ port_alias[vm_topo_config['vm'][vms[index]]['interface_indexes'][dut_index|int][0]] }} {% endif %} - {{ vm_topo_config['vm'][vms[index]]['bgp_ipv4'][dut_index|int] }}/{{ vm_topo_config['vm'][vms[index]]['ipv4mask'][dut_index|int] }} + {{ vm_topo_config['vm'][vms[index]]['bgp_ipv4'][dut_index|int][intf_index] }}/{{ vm_topo_config['vm'][vms[index]]['ipv4mask'][dut_index|int][intf_index] }} -{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int]|lower %} +{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int][intf_index]|lower %} PortChannel{{ '10' + ((index+1) |string) }} {% else %} {{ port_alias[vm_topo_config['vm'][vms[index]]['interface_indexes'][dut_index|int][0]] }} {% endif %} - {{ vm_topo_config['vm'][vms[index]]['bgp_ipv6'][dut_index|int] }}/{{ vm_topo_config['vm'][vms[index]]['ipv6mask'][dut_index|int] }} + {{ vm_topo_config['vm'][vms[index]]['bgp_ipv6'][dut_index|int][intf_index] }}/{{ vm_topo_config['vm'][vms[index]]['ipv6mask'][dut_index|int][intf_index] }} +{% endfor %} {% endif %} {% endfor %} {% if 'tor' in vm_topo_config['dut_type'] | lower %} diff --git a/ansible/templates/minigraph_dpg_asic.j2 b/ansible/templates/minigraph_dpg_asic.j2 index f2b8b5e1e10..94b2dd08b5d 100644 --- a/ansible/templates/minigraph_dpg_asic.j2 +++ b/ansible/templates/minigraph_dpg_asic.j2 @@ -140,40 +140,44 @@ {% for index in range(vms_number) %} {% if vms[index] in vm_asic_ifnames and vm_asic_ids[vms[index]][0] == asic_name %} {% if vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int] is not none %} +{% for intf_index in range(vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int]|length) %} -{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int]|lower %} +{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int][intf_index]|lower %} PortChannel{{ '10' + ((index+1)|string) }} {% else %} {{ front_panel_asic_ifnames[vm_topo_config['vm'][vms[index]]['interface_indexes'][dut_index|int][0]] }} {% endif %} - {{ vm_topo_config['vm'][vms[index]]['bgp_ipv4'][dut_index|int] }}/{{ vm_topo_config['vm'][vms[index]]['ipv4mask'][dut_index|int] }} + {{ vm_topo_config['vm'][vms[index]]['bgp_ipv4'][dut_index|int][intf_index] }}/{{ vm_topo_config['vm'][vms[index]]['ipv4mask'][dut_index|int][intf_index] }} -{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int]|lower %} +{% if 'port-channel' in vm_topo_config['vm'][vms[index]]['ip_intf'][dut_index|int][intf_index]|lower %} PortChannel{{ '10' + ((index+1)|string) }} {% else %} {{ front_panel_asic_ifnames[vm_topo_config['vm'][vms[index]]['interface_indexes'][dut_index|int][0]] }} {% endif %} - {{ vm_topo_config['vm'][vms[index]]['bgp_ipv6'][dut_index|int] }}/{{ vm_topo_config['vm'][vms[index]]['ipv6mask'][dut_index|int] }} + {{ vm_topo_config['vm'][vms[index]]['bgp_ipv6'][dut_index|int][intf_index] }}/{{ vm_topo_config['vm'][vms[index]]['ipv6mask'][dut_index|int][intf_index] }} +{% endfor %} {% endif %} {% endif %} {% endfor %} {% if switch_type is defined and switch_type == 'chassis-packet' %} {% for neigh_asic in asic_config['neigh_asic'] %} {%- set neigh_asic_index = neigh_asic.split('ASIC')[1]|int %} +{% for intf_index in range(asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0]|length) %} PortChannel{{ port_channel_id(asic_index, neigh_asic_index).zfill(2) }} - {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv4mask'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0][intf_index] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv4mask'][0][intf_index] }} PortChannel{{ port_channel_id(asic_index, neigh_asic_index).zfill(2) }} - {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv6mask'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0][intf_index] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv6mask'][0][intf_index] }} +{% endfor %} {% endfor %} @@ -217,16 +221,18 @@ {% else %} {% for neigh_asic in asic_config['neigh_asic'] %} {%- set neigh_asic_index = neigh_asic.split('ASIC')[1]|int %} +{% for intf_index in range(asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0]|length) %} PortChannel{{ port_channel_id(asic_index, neigh_asic_index).zfill(2) }} - {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv4mask'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv4'][0][intf_index] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv4mask'][0][intf_index] }} PortChannel{{ port_channel_id(asic_index, neigh_asic_index).zfill(2) }} - {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv6mask'][0] }} + {{ asic_config['neigh_asic'][neigh_asic]['bgp_ipv6'][0][intf_index] }}/{{ asic_config['neigh_asic'][neigh_asic]['ipv6mask'][0][intf_index] }} +{% endfor %} {% endfor %} {% endif %} diff --git a/ansible/templates/minigraph_meta.j2 b/ansible/templates/minigraph_meta.j2 index e57765273c4..4e8b1e4e1da 100644 --- a/ansible/templates/minigraph_meta.j2 +++ b/ansible/templates/minigraph_meta.j2 @@ -26,6 +26,19 @@ Profile0 +{% if 't2' in topo %} +{% if card_type is not defined or card_type != 'supervisor' %} + + MacSecEnabled + +{% if dut_index|int == 0 %} + True +{% else %} + False +{% endif %} + +{% endif %} +{% endif %} {% if 'dualtor' in topo %} GeminiEnabled diff --git a/ansible/templates/topo_t0-isolated.j2 b/ansible/templates/topo_t0-isolated.j2 new file mode 100644 index 00000000000..4794c9a1a64 --- /dev/null +++ b/ansible/templates/topo_t0-isolated.j2 @@ -0,0 +1,70 @@ +topology: + host_interfaces: +{%- for hostif in hostif_list %} + - {{ hostif.port_id }} +{%- endfor %} +{%- if vm_list | length == 0 %} + VMs: {} +{%- else %} + VMs: + {%- for vm in vm_list %} + {{ vm.name }}: + vlans: + - {{ vm.vlans[0] }} + vm_offset: {{ vm.vm_offset }} + {%- endfor %} +{%- endif %} + DUT: + vlan_configs: + default_vlan_config: {{ vlan_group_list[0].name }} +{%- for vlan_group in vlan_group_list %} + {{ vlan_group.name }}: + {%- for vlan in vlan_group.vlans %} + Vlan{{ vlan.id }}: + id: {{ vlan.id }} + intfs: {{ vlan.port_ids }} + prefix: {{ vlan.v4_prefix }} + prefix_v6: {{ vlan.v6_prefix }} + tag: {{ vlan.id }} + {%- endfor %} +{%- endfor %} + +configuration_properties: + common: + dut_asn: {{ dut.asn }} + dut_type: ToRRouter + swrole: leaf + 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_asn: 65534 + leaf_asn_start: 64600 + tor_asn_start: 65500 + failure_rate: 0 + +configuration: +{%- for vm in vm_list %} + {{vm.name}}: + properties: + - common + bgp: + asn: {{vm.asn}} + peers: + {{vm.peer_asn}}: + - {{vm.dut_intf_ipv4}} + - {{vm.dut_intf_ipv6}} + interfaces: + Loopback0: + ipv4: {{vm.loopback_ipv4}}/32 + ipv6: {{vm.loopback_ipv6}}/128 + Ethernet1: + ipv4: {{vm.pc_intf_ipv4}}/31 + ipv6: {{vm.pc_intf_ipv6}}/126 + bp_interface: + ipv4: {{vm.bp_ipv4}}/24 + ipv6: {{vm.bp_ipv6}}/64 +{%- endfor %} diff --git a/ansible/templates/topo_t1-isolated.j2 b/ansible/templates/topo_t1-isolated.j2 index 0c58680063d..4f03b9eeba1 100644 --- a/ansible/templates/topo_t1-isolated.j2 +++ b/ansible/templates/topo_t1-isolated.j2 @@ -28,6 +28,11 @@ configuration: {{vm.name}}: properties: - common + {%- if vm.role == 't0' %} + - tor + {%- elif vm.role == 't2' %} + - spine + {%- endif %} bgp: asn: {{vm.asn}} peers: @@ -41,7 +46,7 @@ configuration: Ethernet1: ipv4: {{vm.pc_intf_ipv4}}/31 ipv6: {{vm.pc_intf_ipv6}}/126 - bp_interfaces: + bp_interface: ipv4: {{vm.bp_ipv4}}/24 ipv6: {{vm.bp_ipv6}}/64 {%- endfor %} diff --git a/ansible/testbed-cli.sh b/ansible/testbed-cli.sh index 73863536de2..448d2721ca2 100755 --- a/ansible/testbed-cli.sh +++ b/ansible/testbed-cli.sh @@ -165,6 +165,8 @@ function read_yaml dut=${line_arr[11]} duts=$(python -c "from __future__ import print_function; print(','.join(eval(\"$dut\")))") inv_name=${line_arr[12]} + # Remove the dpu duts by the keyword 'dpu' in the dut name + duts=$(echo $duts | sed "s/,[^,]*dpu[^,]*//g") } function read_file @@ -283,7 +285,7 @@ function add_topo cache_files_path_value=$(is_cache_exist) if [[ -n $cache_files_path_value ]]; then - echo "$testbed_name" > $cache_files_path_value/$dut + echo "$testbed_name" > $cache_files_path_value/$duts fi echo Done @@ -694,7 +696,7 @@ function deploy_topo_with_cache fi read_file ${testbed_name} - setup_name=$dut + setup_name=$duts if [[ "$setup_name" == "" ]]; then echo "No such testbed: $testbed_name, exiting..." exit diff --git a/ansible/testbed-new.yaml b/ansible/testbed-new.yaml index d02fd2b1227..06f1f380877 100644 --- a/ansible/testbed-new.yaml +++ b/ansible/testbed-new.yaml @@ -242,9 +242,9 @@ veos_groups: eos: children: [vms_1, vms_2] # source: sonic-mgmt/veos vms_2: - host: [VM0200, VM0201, VM0202, VM0203] # source: sonic-mgmt/veos + host: [VM0300, VM0301, VM0302, VM0203] # 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, 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, VM0164, VM0165, VM0166, VM0167] # source: sonic-mgmt/veos + 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, VM0164, VM0165, VM0166, VM0167, VM0168, VM0169, VM0170, VM0171, VM0172, VM0173, VM0174, VM0175, VM0176, VM0177, VM0178, VM0179, VM0180, VM0181, VM0182, VM0183, VM0184, VM0185, VM0186, VM0187, VM0188, VM0189, VM0190, VM0191, VM0192, VM0193, VM0194, VM0195, VM0196, VM0197, VM0198, VM0199, VM0200, VM0201, VM0202, VM0203, VM0204, VM0205, VM0206, VM0207, VM0208, VM0209, VM0210, VM0211, VM0212, VM0213, VM0214, VM0215, VM0216, VM0217, VM0218, VM0219, VM0220, VM0221, VM0222, VM0223, VM0224, VM0225, VM0226, VM0227, VM0228, VM0229] # source: sonic-mgmt/veos vm_host: children: [vm_host_1, vm_host_2] # source: sonic-mgmt/veos vm_host_2: @@ -414,15 +414,139 @@ veos: ansible_host: 10.250.0.68 VM0167: ansible_host: 10.250.0.69 - vms_2: + VM0168: + ansible_host: 10.250.0.70 + VM0169: + ansible_host: 10.250.0.71 + VM0170: + ansible_host: 10.250.0.72 + VM0171: + ansible_host: 10.250.0.73 + VM0172: + ansible_host: 10.250.0.74 + VM0173: + ansible_host: 10.250.0.75 + VM0174: + ansible_host: 10.250.0.76 + VM0175: + ansible_host: 10.250.0.77 + VM0176: + ansible_host: 10.250.0.78 + VM0177: + ansible_host: 10.250.0.79 + VM0178: + ansible_host: 10.250.0.80 + VM0179: + ansible_host: 10.250.0.81 + VM0180: + ansible_host: 10.250.0.82 + VM0181: + ansible_host: 10.250.0.83 + VM0182: + ansible_host: 10.250.0.84 + VM0183: + ansible_host: 10.250.0.85 + VM0184: + ansible_host: 10.250.0.86 + VM0185: + ansible_host: 10.250.0.87 + VM0186: + ansible_host: 10.250.0.88 + VM0187: + ansible_host: 10.250.0.89 + VM0188: + ansible_host: 10.250.0.90 + VM0189: + ansible_host: 10.250.0.91 + VM0190: + ansible_host: 10.250.0.92 + VM0191: + ansible_host: 10.250.0.93 + VM0192: + ansible_host: 10.250.0.94 + VM0193: + ansible_host: 10.250.0.95 + VM0194: + ansible_host: 10.250.0.96 + VM0195: + ansible_host: 10.250.0.97 + VM0196: + ansible_host: 10.250.0.98 + VM0197: + ansible_host: 10.250.0.99 + VM0198: + ansible_host: 10.250.0.100 + VM0199: + ansible_host: 10.250.0.101 VM0200: - ansible_host: 10.250.0.51 + ansible_host: 10.250.0.102 VM0201: - ansible_host: 10.250.0.52 + ansible_host: 10.250.0.103 VM0202: - ansible_host: 10.250.0.53 + ansible_host: 10.250.0.104 VM0203: - ansible_host: 10.250.0.54 + ansible_host: 10.250.0.105 + VM0204: + ansible_host: 10.250.0.106 + VM0205: + ansible_host: 10.250.0.107 + VM0206: + ansible_host: 10.250.0.108 + VM0207: + ansible_host: 10.250.0.109 + VM0208: + ansible_host: 10.250.0.110 + VM0209: + ansible_host: 10.250.0.111 + VM0210: + ansible_host: 10.250.0.112 + VM0211: + ansible_host: 10.250.0.113 + VM0212: + ansible_host: 10.250.0.114 + VM0213: + ansible_host: 10.250.0.115 + VM0214: + ansible_host: 10.250.0.116 + VM0215: + ansible_host: 10.250.0.117 + VM0216: + ansible_host: 10.250.0.118 + VM0217: + ansible_host: 10.250.0.119 + VM0218: + ansible_host: 10.250.0.120 + VM0219: + ansible_host: 10.250.0.121 + VM0220: + ansible_host: 10.250.0.122 + VM0221: + ansible_host: 10.250.0.123 + VM0222: + ansible_host: 10.250.0.124 + VM0223: + ansible_host: 10.250.0.125 + VM0224: + ansible_host: 10.250.0.126 + VM0225: + ansible_host: 10.250.0.127 + VM0226: + ansible_host: 10.250.0.128 + VM0227: + ansible_host: 10.250.0.129 + VM0228: + ansible_host: 10.250.0.130 + VM0229: + ansible_host: 10.250.0.131 + vms_2: + VM0300: + ansible_host: 10.250.0.252 + VM0301: + ansible_host: 10.250.0.253 + VM0302: + ansible_host: 10.250.0.254 + VM0303: + ansible_host: 10.250.0.255 # testbed dictionary contains information about the testbed # testbed is used to generate testbed.csv diff --git a/ansible/testbed.csv b/ansible/testbed.csv deleted file mode 100644 index a91a8284a30..00000000000 --- a/ansible/testbed.csv +++ /dev/null @@ -1,16 +0,0 @@ -# conf-name,group-name,topo,ptf_image_name,ptf,ptf_ip,ptf_ipv6,server,vm_base,dut,inv_name,auto_recover,is_smartswitch,comment -ptf1-m,ptf1,ptf32,docker-ptf,ptf_ptf1,10.255.0.188/24,,server_1,,str-msn2700-01,lab,False,,Test ptf Mellanox -ptf2-b,ptf2,ptf64,docker-ptf,ptf_ptf2,10.255.0.189/24,,server_1,,lab-s6100-01,lab,False,,Test ptf Broadcom -vms-sn2700-t1,vms1-1,t1,docker-ptf,ptf_vms1-1,10.255.0.178/24,,server_1,VM0100,str-msn2700-01,lab,True,,Tests Mellanox SN2700 vms -vms-sn2700-t1-lag,vms1-2,t1-lag,docker-ptf,ptf_vms1-2,10.255.0.178/24,,server_1,VM0100,str-msn2700-01,lab,True,,Tests Mellanox SN2700 vms -vms-sn2700-t0,vms1-3,t0,docker-ptf,ptf_vms1-3,10.255.0.178/24,,server_1,VM0100,str-msn2700-01,lab,True,,Tests Mellanox SN2700 vms -vms-s6000-t0,vms2-1,t0,docker-ptf,ptf_vms2-1,10.255.0.179/24,,server_1,VM0100,lab-s6000-01,lab,True,,Tests Dell S6000 vms -vms-a7260-t0,vms3-1,t0-116,docker-ptf,ptf_vms3-1,10.255.0.180/24,,server_1,VM0100,lab-a7260-01,lab,True,,Tests Arista A7260 vms -vms-s6100-t0,vms4-1,t0-64,docker-ptf,ptf_vms4-1,10.255.0.181/24,,server_1,VM0100,lab-s6100-01,lab,True,,Tests Dell S6100 vms -vms-s6100-t1,vms4-2,t1-64,docker-ptf,ptf_vms4-2,10.255.0.182/24,,server_1,VM0100,lab-s6100-01,lab,True,,Tests Dell S6100 vms -vms-s6100-t1-lag,vms5-1,t1-64-lag,docker-ptf,ptf_vms5-1,10.255.0.183/24,,server_1,VM0100,lab-s6100-01,lab,True,,ests Dell S6100 vms -vms-multi-dut,vms1-duts,ptf64,docker-ptf,ptf_vms1-duts,10.255.0.184/24,,server_1,VM0100,[dut-host1;dut-host2],lab,True,,Example Multi DUTs testbed -vms-example-ixia-1,vms6-1,t0-64,docker-ptf-ixia,example-ixia-ptf-1,10.0.0.30/32,,server_6,VM0600,example-s6100-dut-1,lab,True,,superman -ixanvl-vs-conf,anvl,ptf32,docker-ptf-anvl,ptf_anvl,10.250.0.100/24,,server_1,,vlab-01,lab,True,,Test ptf ANVL SONIC VM -vms-snappi-sonic,vms6-1,ptf64,docker-ptf-snappi,snappi-sonic-ptf,10.251.0.232,,Server_6,,sonic-s6100-dut1,snappi-sonic,True,,Batman -vms-snappi-sonic-multidut,vms6-1,ptf64,docker-ptf-snappi,snappi-sonic-ptf,10.251.0.232,,Server_6,,[sonic-s6100-dut1;sonic-s6100-dut2],snappi-sonic,True,,Batman diff --git a/ansible/upgrade_sonic.yml b/ansible/upgrade_sonic.yml index e93ebeda41d..afb01b4e571 100644 --- a/ansible/upgrade_sonic.yml +++ b/ansible/upgrade_sonic.yml @@ -111,6 +111,7 @@ args: disk_used_pcent: '{{disk_used_pcent}}' new_image_url: '{{ image_url }}' + required_space: '{{ 1500 if "slim" in image_url or "2018" in image_url or "2019" in image_url else 1600 }}' # Reboot may need some time to update firmware firstly. # Increasing the async time to 300 seconds to avoid reboot being interrupted. diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json b/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json index ae1ef48471d..1537075cb52 100644 --- a/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json +++ b/ansible/vars/configdb_jsons/7nodes_cisco/PE1.json @@ -447,9 +447,9 @@ "end-dt46", "end-dt46" ], - "opcode_vrf": [ - "Vrf1", - "Vrf2" + "opcode_data": [ + "vrf Vrf1", + "vrf Vrf2" ], "prefix": "fd00:201:201::/48" } diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json b/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json index 26bb2768b48..e294d7b4f0a 100644 --- a/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json +++ b/ansible/vars/configdb_jsons/7nodes_cisco/PE2.json @@ -447,9 +447,9 @@ "end-dt46", "end-dt46" ], - "opcode_vrf": [ - "Vrf1", - "Vrf2" + "opcode_data": [ + "vrf Vrf1", + "vrf Vrf2" ], "prefix": "fd00:202:202::/48" } diff --git a/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json b/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json index 5c871cae29f..9e32f199631 100644 --- a/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json +++ b/ansible/vars/configdb_jsons/7nodes_cisco/PE3.json @@ -446,9 +446,9 @@ "end-dt46", "end-dt46" ], - "opcode_vrf": [ - "Vrf1", - "Vrf2" + "opcode_data": [ + "vrf Vrf1", + "vrf Vrf2" ], "prefix": "fd00:203:203::/48" } diff --git a/ansible/vars/topo_t0-isolated-d128u128s1.yml b/ansible/vars/topo_t0-isolated-d128u128s1.yml index b187d8d09c3..75ae5f25da8 100644 --- a/ansible/vars/topo_t0-isolated-d128u128s1.yml +++ b/ansible/vars/topo_t0-isolated-d128u128s1.yml @@ -825,7 +825,7 @@ configuration: Ethernet1: ipv4: 10.0.0.65/31 ipv6: fc00::82/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.2/24 ipv6: fc0a::2/64 ARISTA02T1: @@ -844,7 +844,7 @@ configuration: Ethernet1: ipv4: 10.0.0.67/31 ipv6: fc00::86/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.3/24 ipv6: fc0a::3/64 ARISTA03T1: @@ -863,7 +863,7 @@ configuration: Ethernet1: ipv4: 10.0.0.69/31 ipv6: fc00::8a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.4/24 ipv6: fc0a::4/64 ARISTA04T1: @@ -882,7 +882,7 @@ configuration: Ethernet1: ipv4: 10.0.0.71/31 ipv6: fc00::8e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.5/24 ipv6: fc0a::5/64 ARISTA05T1: @@ -901,7 +901,7 @@ configuration: Ethernet1: ipv4: 10.0.0.73/31 ipv6: fc00::92/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.6/24 ipv6: fc0a::6/64 ARISTA06T1: @@ -920,7 +920,7 @@ configuration: Ethernet1: ipv4: 10.0.0.75/31 ipv6: fc00::96/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.7/24 ipv6: fc0a::7/64 ARISTA07T1: @@ -939,7 +939,7 @@ configuration: Ethernet1: ipv4: 10.0.0.77/31 ipv6: fc00::9a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.8/24 ipv6: fc0a::8/64 ARISTA08T1: @@ -958,7 +958,7 @@ configuration: Ethernet1: ipv4: 10.0.0.79/31 ipv6: fc00::9e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.9/24 ipv6: fc0a::9/64 ARISTA09T1: @@ -977,7 +977,7 @@ configuration: Ethernet1: ipv4: 10.0.0.81/31 ipv6: fc00::a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.10/24 ipv6: fc0a::a/64 ARISTA10T1: @@ -996,7 +996,7 @@ configuration: Ethernet1: ipv4: 10.0.0.83/31 ipv6: fc00::a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.11/24 ipv6: fc0a::b/64 ARISTA11T1: @@ -1015,7 +1015,7 @@ configuration: Ethernet1: ipv4: 10.0.0.85/31 ipv6: fc00::aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.12/24 ipv6: fc0a::c/64 ARISTA12T1: @@ -1034,7 +1034,7 @@ configuration: Ethernet1: ipv4: 10.0.0.87/31 ipv6: fc00::ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.13/24 ipv6: fc0a::d/64 ARISTA13T1: @@ -1053,7 +1053,7 @@ configuration: Ethernet1: ipv4: 10.0.0.89/31 ipv6: fc00::b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.14/24 ipv6: fc0a::e/64 ARISTA14T1: @@ -1072,7 +1072,7 @@ configuration: Ethernet1: ipv4: 10.0.0.91/31 ipv6: fc00::b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.15/24 ipv6: fc0a::f/64 ARISTA15T1: @@ -1091,7 +1091,7 @@ configuration: Ethernet1: ipv4: 10.0.0.93/31 ipv6: fc00::ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.16/24 ipv6: fc0a::10/64 ARISTA16T1: @@ -1110,7 +1110,7 @@ configuration: Ethernet1: ipv4: 10.0.0.95/31 ipv6: fc00::be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.17/24 ipv6: fc0a::11/64 ARISTA17T1: @@ -1129,7 +1129,7 @@ configuration: Ethernet1: ipv4: 10.0.0.97/31 ipv6: fc00::c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.18/24 ipv6: fc0a::12/64 ARISTA18T1: @@ -1148,7 +1148,7 @@ configuration: Ethernet1: ipv4: 10.0.0.99/31 ipv6: fc00::c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.19/24 ipv6: fc0a::13/64 ARISTA19T1: @@ -1167,7 +1167,7 @@ configuration: Ethernet1: ipv4: 10.0.0.101/31 ipv6: fc00::ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.20/24 ipv6: fc0a::14/64 ARISTA20T1: @@ -1186,7 +1186,7 @@ configuration: Ethernet1: ipv4: 10.0.0.103/31 ipv6: fc00::ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.21/24 ipv6: fc0a::15/64 ARISTA21T1: @@ -1205,7 +1205,7 @@ configuration: Ethernet1: ipv4: 10.0.0.105/31 ipv6: fc00::d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.22/24 ipv6: fc0a::16/64 ARISTA22T1: @@ -1224,7 +1224,7 @@ configuration: Ethernet1: ipv4: 10.0.0.107/31 ipv6: fc00::d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.23/24 ipv6: fc0a::17/64 ARISTA23T1: @@ -1243,7 +1243,7 @@ configuration: Ethernet1: ipv4: 10.0.0.109/31 ipv6: fc00::da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.24/24 ipv6: fc0a::18/64 ARISTA24T1: @@ -1262,7 +1262,7 @@ configuration: Ethernet1: ipv4: 10.0.0.111/31 ipv6: fc00::de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.25/24 ipv6: fc0a::19/64 ARISTA25T1: @@ -1281,7 +1281,7 @@ configuration: Ethernet1: ipv4: 10.0.0.113/31 ipv6: fc00::e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.26/24 ipv6: fc0a::1a/64 ARISTA26T1: @@ -1300,7 +1300,7 @@ configuration: Ethernet1: ipv4: 10.0.0.115/31 ipv6: fc00::e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.27/24 ipv6: fc0a::1b/64 ARISTA27T1: @@ -1319,7 +1319,7 @@ configuration: Ethernet1: ipv4: 10.0.0.117/31 ipv6: fc00::ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.28/24 ipv6: fc0a::1c/64 ARISTA28T1: @@ -1338,7 +1338,7 @@ configuration: Ethernet1: ipv4: 10.0.0.119/31 ipv6: fc00::ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.29/24 ipv6: fc0a::1d/64 ARISTA29T1: @@ -1357,7 +1357,7 @@ configuration: Ethernet1: ipv4: 10.0.0.121/31 ipv6: fc00::f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.30/24 ipv6: fc0a::1e/64 ARISTA30T1: @@ -1376,7 +1376,7 @@ configuration: Ethernet1: ipv4: 10.0.0.123/31 ipv6: fc00::f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.31/24 ipv6: fc0a::1f/64 ARISTA31T1: @@ -1395,7 +1395,7 @@ configuration: Ethernet1: ipv4: 10.0.0.125/31 ipv6: fc00::fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.32/24 ipv6: fc0a::20/64 ARISTA32T1: @@ -1414,7 +1414,7 @@ configuration: Ethernet1: ipv4: 10.0.0.127/31 ipv6: fc00::fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.33/24 ipv6: fc0a::21/64 ARISTA33T1: @@ -1433,7 +1433,7 @@ configuration: Ethernet1: ipv4: 10.0.0.129/31 ipv6: fc00::102/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.34/24 ipv6: fc0a::22/64 ARISTA34T1: @@ -1452,7 +1452,7 @@ configuration: Ethernet1: ipv4: 10.0.0.131/31 ipv6: fc00::106/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.35/24 ipv6: fc0a::23/64 ARISTA35T1: @@ -1471,7 +1471,7 @@ configuration: Ethernet1: ipv4: 10.0.0.133/31 ipv6: fc00::10a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.36/24 ipv6: fc0a::24/64 ARISTA36T1: @@ -1490,7 +1490,7 @@ configuration: Ethernet1: ipv4: 10.0.0.135/31 ipv6: fc00::10e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.37/24 ipv6: fc0a::25/64 ARISTA37T1: @@ -1509,7 +1509,7 @@ configuration: Ethernet1: ipv4: 10.0.0.137/31 ipv6: fc00::112/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.38/24 ipv6: fc0a::26/64 ARISTA38T1: @@ -1528,7 +1528,7 @@ configuration: Ethernet1: ipv4: 10.0.0.139/31 ipv6: fc00::116/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.39/24 ipv6: fc0a::27/64 ARISTA39T1: @@ -1547,7 +1547,7 @@ configuration: Ethernet1: ipv4: 10.0.0.141/31 ipv6: fc00::11a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.40/24 ipv6: fc0a::28/64 ARISTA40T1: @@ -1566,7 +1566,7 @@ configuration: Ethernet1: ipv4: 10.0.0.143/31 ipv6: fc00::11e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.41/24 ipv6: fc0a::29/64 ARISTA41T1: @@ -1585,7 +1585,7 @@ configuration: Ethernet1: ipv4: 10.0.0.145/31 ipv6: fc00::122/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.42/24 ipv6: fc0a::2a/64 ARISTA42T1: @@ -1604,7 +1604,7 @@ configuration: Ethernet1: ipv4: 10.0.0.147/31 ipv6: fc00::126/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.43/24 ipv6: fc0a::2b/64 ARISTA43T1: @@ -1623,7 +1623,7 @@ configuration: Ethernet1: ipv4: 10.0.0.149/31 ipv6: fc00::12a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.44/24 ipv6: fc0a::2c/64 ARISTA44T1: @@ -1642,7 +1642,7 @@ configuration: Ethernet1: ipv4: 10.0.0.151/31 ipv6: fc00::12e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.45/24 ipv6: fc0a::2d/64 ARISTA45T1: @@ -1661,7 +1661,7 @@ configuration: Ethernet1: ipv4: 10.0.0.153/31 ipv6: fc00::132/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.46/24 ipv6: fc0a::2e/64 ARISTA46T1: @@ -1680,7 +1680,7 @@ configuration: Ethernet1: ipv4: 10.0.0.155/31 ipv6: fc00::136/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.47/24 ipv6: fc0a::2f/64 ARISTA47T1: @@ -1699,7 +1699,7 @@ configuration: Ethernet1: ipv4: 10.0.0.157/31 ipv6: fc00::13a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.48/24 ipv6: fc0a::30/64 ARISTA48T1: @@ -1718,7 +1718,7 @@ configuration: Ethernet1: ipv4: 10.0.0.159/31 ipv6: fc00::13e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.49/24 ipv6: fc0a::31/64 ARISTA49T1: @@ -1737,7 +1737,7 @@ configuration: Ethernet1: ipv4: 10.0.0.161/31 ipv6: fc00::142/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.50/24 ipv6: fc0a::32/64 ARISTA50T1: @@ -1756,7 +1756,7 @@ configuration: Ethernet1: ipv4: 10.0.0.163/31 ipv6: fc00::146/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.51/24 ipv6: fc0a::33/64 ARISTA51T1: @@ -1775,7 +1775,7 @@ configuration: Ethernet1: ipv4: 10.0.0.165/31 ipv6: fc00::14a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.52/24 ipv6: fc0a::34/64 ARISTA52T1: @@ -1794,7 +1794,7 @@ configuration: Ethernet1: ipv4: 10.0.0.167/31 ipv6: fc00::14e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.53/24 ipv6: fc0a::35/64 ARISTA53T1: @@ -1813,7 +1813,7 @@ configuration: Ethernet1: ipv4: 10.0.0.169/31 ipv6: fc00::152/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.54/24 ipv6: fc0a::36/64 ARISTA54T1: @@ -1832,7 +1832,7 @@ configuration: Ethernet1: ipv4: 10.0.0.171/31 ipv6: fc00::156/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.55/24 ipv6: fc0a::37/64 ARISTA55T1: @@ -1851,7 +1851,7 @@ configuration: Ethernet1: ipv4: 10.0.0.173/31 ipv6: fc00::15a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.56/24 ipv6: fc0a::38/64 ARISTA56T1: @@ -1870,7 +1870,7 @@ configuration: Ethernet1: ipv4: 10.0.0.175/31 ipv6: fc00::15e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.57/24 ipv6: fc0a::39/64 ARISTA57T1: @@ -1889,7 +1889,7 @@ configuration: Ethernet1: ipv4: 10.0.0.177/31 ipv6: fc00::162/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.58/24 ipv6: fc0a::3a/64 ARISTA58T1: @@ -1908,7 +1908,7 @@ configuration: Ethernet1: ipv4: 10.0.0.179/31 ipv6: fc00::166/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.59/24 ipv6: fc0a::3b/64 ARISTA59T1: @@ -1927,7 +1927,7 @@ configuration: Ethernet1: ipv4: 10.0.0.181/31 ipv6: fc00::16a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.60/24 ipv6: fc0a::3c/64 ARISTA60T1: @@ -1946,7 +1946,7 @@ configuration: Ethernet1: ipv4: 10.0.0.183/31 ipv6: fc00::16e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.61/24 ipv6: fc0a::3d/64 ARISTA61T1: @@ -1965,7 +1965,7 @@ configuration: Ethernet1: ipv4: 10.0.0.185/31 ipv6: fc00::172/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.62/24 ipv6: fc0a::3e/64 ARISTA62T1: @@ -1984,7 +1984,7 @@ configuration: Ethernet1: ipv4: 10.0.0.187/31 ipv6: fc00::176/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.63/24 ipv6: fc0a::3f/64 ARISTA63T1: @@ -2003,7 +2003,7 @@ configuration: Ethernet1: ipv4: 10.0.0.189/31 ipv6: fc00::17a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.64/24 ipv6: fc0a::40/64 ARISTA64T1: @@ -2022,7 +2022,7 @@ configuration: Ethernet1: ipv4: 10.0.0.191/31 ipv6: fc00::17e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.65/24 ipv6: fc0a::41/64 ARISTA65T1: @@ -2041,7 +2041,7 @@ configuration: Ethernet1: ipv4: 10.0.1.65/31 ipv6: fc00::282/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.66/24 ipv6: fc0a::42/64 ARISTA66T1: @@ -2060,7 +2060,7 @@ configuration: Ethernet1: ipv4: 10.0.1.67/31 ipv6: fc00::286/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.67/24 ipv6: fc0a::43/64 ARISTA67T1: @@ -2079,7 +2079,7 @@ configuration: Ethernet1: ipv4: 10.0.1.69/31 ipv6: fc00::28a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.68/24 ipv6: fc0a::44/64 ARISTA68T1: @@ -2098,7 +2098,7 @@ configuration: Ethernet1: ipv4: 10.0.1.71/31 ipv6: fc00::28e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.69/24 ipv6: fc0a::45/64 ARISTA69T1: @@ -2117,7 +2117,7 @@ configuration: Ethernet1: ipv4: 10.0.1.73/31 ipv6: fc00::292/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.70/24 ipv6: fc0a::46/64 ARISTA70T1: @@ -2136,7 +2136,7 @@ configuration: Ethernet1: ipv4: 10.0.1.75/31 ipv6: fc00::296/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.71/24 ipv6: fc0a::47/64 ARISTA71T1: @@ -2155,7 +2155,7 @@ configuration: Ethernet1: ipv4: 10.0.1.77/31 ipv6: fc00::29a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.72/24 ipv6: fc0a::48/64 ARISTA72T1: @@ -2174,7 +2174,7 @@ configuration: Ethernet1: ipv4: 10.0.1.79/31 ipv6: fc00::29e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.73/24 ipv6: fc0a::49/64 ARISTA73T1: @@ -2193,7 +2193,7 @@ configuration: Ethernet1: ipv4: 10.0.1.81/31 ipv6: fc00::2a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.74/24 ipv6: fc0a::4a/64 ARISTA74T1: @@ -2212,7 +2212,7 @@ configuration: Ethernet1: ipv4: 10.0.1.83/31 ipv6: fc00::2a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.75/24 ipv6: fc0a::4b/64 ARISTA75T1: @@ -2231,7 +2231,7 @@ configuration: Ethernet1: ipv4: 10.0.1.85/31 ipv6: fc00::2aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.76/24 ipv6: fc0a::4c/64 ARISTA76T1: @@ -2250,7 +2250,7 @@ configuration: Ethernet1: ipv4: 10.0.1.87/31 ipv6: fc00::2ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.77/24 ipv6: fc0a::4d/64 ARISTA77T1: @@ -2269,7 +2269,7 @@ configuration: Ethernet1: ipv4: 10.0.1.89/31 ipv6: fc00::2b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.78/24 ipv6: fc0a::4e/64 ARISTA78T1: @@ -2288,7 +2288,7 @@ configuration: Ethernet1: ipv4: 10.0.1.91/31 ipv6: fc00::2b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.79/24 ipv6: fc0a::4f/64 ARISTA79T1: @@ -2307,7 +2307,7 @@ configuration: Ethernet1: ipv4: 10.0.1.93/31 ipv6: fc00::2ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.80/24 ipv6: fc0a::50/64 ARISTA80T1: @@ -2326,7 +2326,7 @@ configuration: Ethernet1: ipv4: 10.0.1.95/31 ipv6: fc00::2be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.81/24 ipv6: fc0a::51/64 ARISTA81T1: @@ -2345,7 +2345,7 @@ configuration: Ethernet1: ipv4: 10.0.1.97/31 ipv6: fc00::2c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.82/24 ipv6: fc0a::52/64 ARISTA82T1: @@ -2364,7 +2364,7 @@ configuration: Ethernet1: ipv4: 10.0.1.99/31 ipv6: fc00::2c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.83/24 ipv6: fc0a::53/64 ARISTA83T1: @@ -2383,7 +2383,7 @@ configuration: Ethernet1: ipv4: 10.0.1.101/31 ipv6: fc00::2ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.84/24 ipv6: fc0a::54/64 ARISTA84T1: @@ -2402,7 +2402,7 @@ configuration: Ethernet1: ipv4: 10.0.1.103/31 ipv6: fc00::2ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.85/24 ipv6: fc0a::55/64 ARISTA85T1: @@ -2421,7 +2421,7 @@ configuration: Ethernet1: ipv4: 10.0.1.105/31 ipv6: fc00::2d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.86/24 ipv6: fc0a::56/64 ARISTA86T1: @@ -2440,7 +2440,7 @@ configuration: Ethernet1: ipv4: 10.0.1.107/31 ipv6: fc00::2d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.87/24 ipv6: fc0a::57/64 ARISTA87T1: @@ -2459,7 +2459,7 @@ configuration: Ethernet1: ipv4: 10.0.1.109/31 ipv6: fc00::2da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.88/24 ipv6: fc0a::58/64 ARISTA88T1: @@ -2478,7 +2478,7 @@ configuration: Ethernet1: ipv4: 10.0.1.111/31 ipv6: fc00::2de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.89/24 ipv6: fc0a::59/64 ARISTA89T1: @@ -2497,7 +2497,7 @@ configuration: Ethernet1: ipv4: 10.0.1.113/31 ipv6: fc00::2e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.90/24 ipv6: fc0a::5a/64 ARISTA90T1: @@ -2516,7 +2516,7 @@ configuration: Ethernet1: ipv4: 10.0.1.115/31 ipv6: fc00::2e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.91/24 ipv6: fc0a::5b/64 ARISTA91T1: @@ -2535,7 +2535,7 @@ configuration: Ethernet1: ipv4: 10.0.1.117/31 ipv6: fc00::2ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.92/24 ipv6: fc0a::5c/64 ARISTA92T1: @@ -2554,7 +2554,7 @@ configuration: Ethernet1: ipv4: 10.0.1.119/31 ipv6: fc00::2ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.93/24 ipv6: fc0a::5d/64 ARISTA93T1: @@ -2573,7 +2573,7 @@ configuration: Ethernet1: ipv4: 10.0.1.121/31 ipv6: fc00::2f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.94/24 ipv6: fc0a::5e/64 ARISTA94T1: @@ -2592,7 +2592,7 @@ configuration: Ethernet1: ipv4: 10.0.1.123/31 ipv6: fc00::2f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.95/24 ipv6: fc0a::5f/64 ARISTA95T1: @@ -2611,7 +2611,7 @@ configuration: Ethernet1: ipv4: 10.0.1.125/31 ipv6: fc00::2fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.96/24 ipv6: fc0a::60/64 ARISTA96T1: @@ -2630,7 +2630,7 @@ configuration: Ethernet1: ipv4: 10.0.1.127/31 ipv6: fc00::2fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.97/24 ipv6: fc0a::61/64 ARISTA97T1: @@ -2649,7 +2649,7 @@ configuration: Ethernet1: ipv4: 10.0.1.129/31 ipv6: fc00::302/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.98/24 ipv6: fc0a::62/64 ARISTA98T1: @@ -2668,7 +2668,7 @@ configuration: Ethernet1: ipv4: 10.0.1.131/31 ipv6: fc00::306/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.99/24 ipv6: fc0a::63/64 ARISTA99T1: @@ -2687,7 +2687,7 @@ configuration: Ethernet1: ipv4: 10.0.1.133/31 ipv6: fc00::30a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.100/24 ipv6: fc0a::64/64 ARISTA100T1: @@ -2706,7 +2706,7 @@ configuration: Ethernet1: ipv4: 10.0.1.135/31 ipv6: fc00::30e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.101/24 ipv6: fc0a::65/64 ARISTA101T1: @@ -2725,7 +2725,7 @@ configuration: Ethernet1: ipv4: 10.0.1.137/31 ipv6: fc00::312/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.102/24 ipv6: fc0a::66/64 ARISTA102T1: @@ -2744,7 +2744,7 @@ configuration: Ethernet1: ipv4: 10.0.1.139/31 ipv6: fc00::316/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.103/24 ipv6: fc0a::67/64 ARISTA103T1: @@ -2763,7 +2763,7 @@ configuration: Ethernet1: ipv4: 10.0.1.141/31 ipv6: fc00::31a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.104/24 ipv6: fc0a::68/64 ARISTA104T1: @@ -2782,7 +2782,7 @@ configuration: Ethernet1: ipv4: 10.0.1.143/31 ipv6: fc00::31e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.105/24 ipv6: fc0a::69/64 ARISTA105T1: @@ -2801,7 +2801,7 @@ configuration: Ethernet1: ipv4: 10.0.1.145/31 ipv6: fc00::322/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.106/24 ipv6: fc0a::6a/64 ARISTA106T1: @@ -2820,7 +2820,7 @@ configuration: Ethernet1: ipv4: 10.0.1.147/31 ipv6: fc00::326/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.107/24 ipv6: fc0a::6b/64 ARISTA107T1: @@ -2839,7 +2839,7 @@ configuration: Ethernet1: ipv4: 10.0.1.149/31 ipv6: fc00::32a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.108/24 ipv6: fc0a::6c/64 ARISTA108T1: @@ -2858,7 +2858,7 @@ configuration: Ethernet1: ipv4: 10.0.1.151/31 ipv6: fc00::32e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.109/24 ipv6: fc0a::6d/64 ARISTA109T1: @@ -2877,7 +2877,7 @@ configuration: Ethernet1: ipv4: 10.0.1.153/31 ipv6: fc00::332/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.110/24 ipv6: fc0a::6e/64 ARISTA110T1: @@ -2896,7 +2896,7 @@ configuration: Ethernet1: ipv4: 10.0.1.155/31 ipv6: fc00::336/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.111/24 ipv6: fc0a::6f/64 ARISTA111T1: @@ -2915,7 +2915,7 @@ configuration: Ethernet1: ipv4: 10.0.1.157/31 ipv6: fc00::33a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.112/24 ipv6: fc0a::70/64 ARISTA112T1: @@ -2934,7 +2934,7 @@ configuration: Ethernet1: ipv4: 10.0.1.159/31 ipv6: fc00::33e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.113/24 ipv6: fc0a::71/64 ARISTA113T1: @@ -2953,7 +2953,7 @@ configuration: Ethernet1: ipv4: 10.0.1.161/31 ipv6: fc00::342/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.114/24 ipv6: fc0a::72/64 ARISTA114T1: @@ -2972,7 +2972,7 @@ configuration: Ethernet1: ipv4: 10.0.1.163/31 ipv6: fc00::346/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.115/24 ipv6: fc0a::73/64 ARISTA115T1: @@ -2991,7 +2991,7 @@ configuration: Ethernet1: ipv4: 10.0.1.165/31 ipv6: fc00::34a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.116/24 ipv6: fc0a::74/64 ARISTA116T1: @@ -3010,7 +3010,7 @@ configuration: Ethernet1: ipv4: 10.0.1.167/31 ipv6: fc00::34e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.117/24 ipv6: fc0a::75/64 ARISTA117T1: @@ -3029,7 +3029,7 @@ configuration: Ethernet1: ipv4: 10.0.1.169/31 ipv6: fc00::352/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.118/24 ipv6: fc0a::76/64 ARISTA118T1: @@ -3048,7 +3048,7 @@ configuration: Ethernet1: ipv4: 10.0.1.171/31 ipv6: fc00::356/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.119/24 ipv6: fc0a::77/64 ARISTA119T1: @@ -3067,7 +3067,7 @@ configuration: Ethernet1: ipv4: 10.0.1.173/31 ipv6: fc00::35a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.120/24 ipv6: fc0a::78/64 ARISTA120T1: @@ -3086,7 +3086,7 @@ configuration: Ethernet1: ipv4: 10.0.1.175/31 ipv6: fc00::35e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.121/24 ipv6: fc0a::79/64 ARISTA121T1: @@ -3105,7 +3105,7 @@ configuration: Ethernet1: ipv4: 10.0.1.177/31 ipv6: fc00::362/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.122/24 ipv6: fc0a::7a/64 ARISTA122T1: @@ -3124,7 +3124,7 @@ configuration: Ethernet1: ipv4: 10.0.1.179/31 ipv6: fc00::366/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.123/24 ipv6: fc0a::7b/64 ARISTA123T1: @@ -3143,7 +3143,7 @@ configuration: Ethernet1: ipv4: 10.0.1.181/31 ipv6: fc00::36a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.124/24 ipv6: fc0a::7c/64 ARISTA124T1: @@ -3162,7 +3162,7 @@ configuration: Ethernet1: ipv4: 10.0.1.183/31 ipv6: fc00::36e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.125/24 ipv6: fc0a::7d/64 ARISTA125T1: @@ -3181,7 +3181,7 @@ configuration: Ethernet1: ipv4: 10.0.1.185/31 ipv6: fc00::372/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.126/24 ipv6: fc0a::7e/64 ARISTA126T1: @@ -3200,7 +3200,7 @@ configuration: Ethernet1: ipv4: 10.0.1.187/31 ipv6: fc00::376/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.127/24 ipv6: fc0a::7f/64 ARISTA127T1: @@ -3219,7 +3219,7 @@ configuration: Ethernet1: ipv4: 10.0.1.189/31 ipv6: fc00::37a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.128/24 ipv6: fc0a::80/64 ARISTA128T1: @@ -3238,7 +3238,7 @@ configuration: Ethernet1: ipv4: 10.0.1.191/31 ipv6: fc00::37e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.129/24 ipv6: fc0a::81/64 ARISTA01PT0: @@ -3257,6 +3257,6 @@ configuration: Ethernet1: ipv4: 10.0.2.1/31 ipv6: fc00::402/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.130/24 ipv6: fc0a::82/64 diff --git a/ansible/vars/topo_t0-isolated-d128u128s2.yml b/ansible/vars/topo_t0-isolated-d128u128s2.yml index 5830728fee7..201b68672e5 100644 --- a/ansible/vars/topo_t0-isolated-d128u128s2.yml +++ b/ansible/vars/topo_t0-isolated-d128u128s2.yml @@ -829,7 +829,7 @@ configuration: Ethernet1: ipv4: 10.0.0.65/31 ipv6: fc00::82/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.2/24 ipv6: fc0a::2/64 ARISTA02T1: @@ -848,7 +848,7 @@ configuration: Ethernet1: ipv4: 10.0.0.67/31 ipv6: fc00::86/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.3/24 ipv6: fc0a::3/64 ARISTA03T1: @@ -867,7 +867,7 @@ configuration: Ethernet1: ipv4: 10.0.0.69/31 ipv6: fc00::8a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.4/24 ipv6: fc0a::4/64 ARISTA04T1: @@ -886,7 +886,7 @@ configuration: Ethernet1: ipv4: 10.0.0.71/31 ipv6: fc00::8e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.5/24 ipv6: fc0a::5/64 ARISTA05T1: @@ -905,7 +905,7 @@ configuration: Ethernet1: ipv4: 10.0.0.73/31 ipv6: fc00::92/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.6/24 ipv6: fc0a::6/64 ARISTA06T1: @@ -924,7 +924,7 @@ configuration: Ethernet1: ipv4: 10.0.0.75/31 ipv6: fc00::96/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.7/24 ipv6: fc0a::7/64 ARISTA07T1: @@ -943,7 +943,7 @@ configuration: Ethernet1: ipv4: 10.0.0.77/31 ipv6: fc00::9a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.8/24 ipv6: fc0a::8/64 ARISTA08T1: @@ -962,7 +962,7 @@ configuration: Ethernet1: ipv4: 10.0.0.79/31 ipv6: fc00::9e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.9/24 ipv6: fc0a::9/64 ARISTA09T1: @@ -981,7 +981,7 @@ configuration: Ethernet1: ipv4: 10.0.0.81/31 ipv6: fc00::a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.10/24 ipv6: fc0a::a/64 ARISTA10T1: @@ -1000,7 +1000,7 @@ configuration: Ethernet1: ipv4: 10.0.0.83/31 ipv6: fc00::a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.11/24 ipv6: fc0a::b/64 ARISTA11T1: @@ -1019,7 +1019,7 @@ configuration: Ethernet1: ipv4: 10.0.0.85/31 ipv6: fc00::aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.12/24 ipv6: fc0a::c/64 ARISTA12T1: @@ -1038,7 +1038,7 @@ configuration: Ethernet1: ipv4: 10.0.0.87/31 ipv6: fc00::ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.13/24 ipv6: fc0a::d/64 ARISTA13T1: @@ -1057,7 +1057,7 @@ configuration: Ethernet1: ipv4: 10.0.0.89/31 ipv6: fc00::b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.14/24 ipv6: fc0a::e/64 ARISTA14T1: @@ -1076,7 +1076,7 @@ configuration: Ethernet1: ipv4: 10.0.0.91/31 ipv6: fc00::b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.15/24 ipv6: fc0a::f/64 ARISTA15T1: @@ -1095,7 +1095,7 @@ configuration: Ethernet1: ipv4: 10.0.0.93/31 ipv6: fc00::ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.16/24 ipv6: fc0a::10/64 ARISTA16T1: @@ -1114,7 +1114,7 @@ configuration: Ethernet1: ipv4: 10.0.0.95/31 ipv6: fc00::be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.17/24 ipv6: fc0a::11/64 ARISTA17T1: @@ -1133,7 +1133,7 @@ configuration: Ethernet1: ipv4: 10.0.0.97/31 ipv6: fc00::c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.18/24 ipv6: fc0a::12/64 ARISTA18T1: @@ -1152,7 +1152,7 @@ configuration: Ethernet1: ipv4: 10.0.0.99/31 ipv6: fc00::c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.19/24 ipv6: fc0a::13/64 ARISTA19T1: @@ -1171,7 +1171,7 @@ configuration: Ethernet1: ipv4: 10.0.0.101/31 ipv6: fc00::ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.20/24 ipv6: fc0a::14/64 ARISTA20T1: @@ -1190,7 +1190,7 @@ configuration: Ethernet1: ipv4: 10.0.0.103/31 ipv6: fc00::ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.21/24 ipv6: fc0a::15/64 ARISTA21T1: @@ -1209,7 +1209,7 @@ configuration: Ethernet1: ipv4: 10.0.0.105/31 ipv6: fc00::d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.22/24 ipv6: fc0a::16/64 ARISTA22T1: @@ -1228,7 +1228,7 @@ configuration: Ethernet1: ipv4: 10.0.0.107/31 ipv6: fc00::d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.23/24 ipv6: fc0a::17/64 ARISTA23T1: @@ -1247,7 +1247,7 @@ configuration: Ethernet1: ipv4: 10.0.0.109/31 ipv6: fc00::da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.24/24 ipv6: fc0a::18/64 ARISTA24T1: @@ -1266,7 +1266,7 @@ configuration: Ethernet1: ipv4: 10.0.0.111/31 ipv6: fc00::de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.25/24 ipv6: fc0a::19/64 ARISTA25T1: @@ -1285,7 +1285,7 @@ configuration: Ethernet1: ipv4: 10.0.0.113/31 ipv6: fc00::e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.26/24 ipv6: fc0a::1a/64 ARISTA26T1: @@ -1304,7 +1304,7 @@ configuration: Ethernet1: ipv4: 10.0.0.115/31 ipv6: fc00::e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.27/24 ipv6: fc0a::1b/64 ARISTA27T1: @@ -1323,7 +1323,7 @@ configuration: Ethernet1: ipv4: 10.0.0.117/31 ipv6: fc00::ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.28/24 ipv6: fc0a::1c/64 ARISTA28T1: @@ -1342,7 +1342,7 @@ configuration: Ethernet1: ipv4: 10.0.0.119/31 ipv6: fc00::ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.29/24 ipv6: fc0a::1d/64 ARISTA29T1: @@ -1361,7 +1361,7 @@ configuration: Ethernet1: ipv4: 10.0.0.121/31 ipv6: fc00::f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.30/24 ipv6: fc0a::1e/64 ARISTA30T1: @@ -1380,7 +1380,7 @@ configuration: Ethernet1: ipv4: 10.0.0.123/31 ipv6: fc00::f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.31/24 ipv6: fc0a::1f/64 ARISTA31T1: @@ -1399,7 +1399,7 @@ configuration: Ethernet1: ipv4: 10.0.0.125/31 ipv6: fc00::fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.32/24 ipv6: fc0a::20/64 ARISTA32T1: @@ -1418,7 +1418,7 @@ configuration: Ethernet1: ipv4: 10.0.0.127/31 ipv6: fc00::fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.33/24 ipv6: fc0a::21/64 ARISTA33T1: @@ -1437,7 +1437,7 @@ configuration: Ethernet1: ipv4: 10.0.0.129/31 ipv6: fc00::102/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.34/24 ipv6: fc0a::22/64 ARISTA34T1: @@ -1456,7 +1456,7 @@ configuration: Ethernet1: ipv4: 10.0.0.131/31 ipv6: fc00::106/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.35/24 ipv6: fc0a::23/64 ARISTA35T1: @@ -1475,7 +1475,7 @@ configuration: Ethernet1: ipv4: 10.0.0.133/31 ipv6: fc00::10a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.36/24 ipv6: fc0a::24/64 ARISTA36T1: @@ -1494,7 +1494,7 @@ configuration: Ethernet1: ipv4: 10.0.0.135/31 ipv6: fc00::10e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.37/24 ipv6: fc0a::25/64 ARISTA37T1: @@ -1513,7 +1513,7 @@ configuration: Ethernet1: ipv4: 10.0.0.137/31 ipv6: fc00::112/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.38/24 ipv6: fc0a::26/64 ARISTA38T1: @@ -1532,7 +1532,7 @@ configuration: Ethernet1: ipv4: 10.0.0.139/31 ipv6: fc00::116/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.39/24 ipv6: fc0a::27/64 ARISTA39T1: @@ -1551,7 +1551,7 @@ configuration: Ethernet1: ipv4: 10.0.0.141/31 ipv6: fc00::11a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.40/24 ipv6: fc0a::28/64 ARISTA40T1: @@ -1570,7 +1570,7 @@ configuration: Ethernet1: ipv4: 10.0.0.143/31 ipv6: fc00::11e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.41/24 ipv6: fc0a::29/64 ARISTA41T1: @@ -1589,7 +1589,7 @@ configuration: Ethernet1: ipv4: 10.0.0.145/31 ipv6: fc00::122/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.42/24 ipv6: fc0a::2a/64 ARISTA42T1: @@ -1608,7 +1608,7 @@ configuration: Ethernet1: ipv4: 10.0.0.147/31 ipv6: fc00::126/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.43/24 ipv6: fc0a::2b/64 ARISTA43T1: @@ -1627,7 +1627,7 @@ configuration: Ethernet1: ipv4: 10.0.0.149/31 ipv6: fc00::12a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.44/24 ipv6: fc0a::2c/64 ARISTA44T1: @@ -1646,7 +1646,7 @@ configuration: Ethernet1: ipv4: 10.0.0.151/31 ipv6: fc00::12e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.45/24 ipv6: fc0a::2d/64 ARISTA45T1: @@ -1665,7 +1665,7 @@ configuration: Ethernet1: ipv4: 10.0.0.153/31 ipv6: fc00::132/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.46/24 ipv6: fc0a::2e/64 ARISTA46T1: @@ -1684,7 +1684,7 @@ configuration: Ethernet1: ipv4: 10.0.0.155/31 ipv6: fc00::136/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.47/24 ipv6: fc0a::2f/64 ARISTA47T1: @@ -1703,7 +1703,7 @@ configuration: Ethernet1: ipv4: 10.0.0.157/31 ipv6: fc00::13a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.48/24 ipv6: fc0a::30/64 ARISTA48T1: @@ -1722,7 +1722,7 @@ configuration: Ethernet1: ipv4: 10.0.0.159/31 ipv6: fc00::13e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.49/24 ipv6: fc0a::31/64 ARISTA49T1: @@ -1741,7 +1741,7 @@ configuration: Ethernet1: ipv4: 10.0.0.161/31 ipv6: fc00::142/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.50/24 ipv6: fc0a::32/64 ARISTA50T1: @@ -1760,7 +1760,7 @@ configuration: Ethernet1: ipv4: 10.0.0.163/31 ipv6: fc00::146/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.51/24 ipv6: fc0a::33/64 ARISTA51T1: @@ -1779,7 +1779,7 @@ configuration: Ethernet1: ipv4: 10.0.0.165/31 ipv6: fc00::14a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.52/24 ipv6: fc0a::34/64 ARISTA52T1: @@ -1798,7 +1798,7 @@ configuration: Ethernet1: ipv4: 10.0.0.167/31 ipv6: fc00::14e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.53/24 ipv6: fc0a::35/64 ARISTA53T1: @@ -1817,7 +1817,7 @@ configuration: Ethernet1: ipv4: 10.0.0.169/31 ipv6: fc00::152/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.54/24 ipv6: fc0a::36/64 ARISTA54T1: @@ -1836,7 +1836,7 @@ configuration: Ethernet1: ipv4: 10.0.0.171/31 ipv6: fc00::156/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.55/24 ipv6: fc0a::37/64 ARISTA55T1: @@ -1855,7 +1855,7 @@ configuration: Ethernet1: ipv4: 10.0.0.173/31 ipv6: fc00::15a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.56/24 ipv6: fc0a::38/64 ARISTA56T1: @@ -1874,7 +1874,7 @@ configuration: Ethernet1: ipv4: 10.0.0.175/31 ipv6: fc00::15e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.57/24 ipv6: fc0a::39/64 ARISTA57T1: @@ -1893,7 +1893,7 @@ configuration: Ethernet1: ipv4: 10.0.0.177/31 ipv6: fc00::162/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.58/24 ipv6: fc0a::3a/64 ARISTA58T1: @@ -1912,7 +1912,7 @@ configuration: Ethernet1: ipv4: 10.0.0.179/31 ipv6: fc00::166/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.59/24 ipv6: fc0a::3b/64 ARISTA59T1: @@ -1931,7 +1931,7 @@ configuration: Ethernet1: ipv4: 10.0.0.181/31 ipv6: fc00::16a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.60/24 ipv6: fc0a::3c/64 ARISTA60T1: @@ -1950,7 +1950,7 @@ configuration: Ethernet1: ipv4: 10.0.0.183/31 ipv6: fc00::16e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.61/24 ipv6: fc0a::3d/64 ARISTA61T1: @@ -1969,7 +1969,7 @@ configuration: Ethernet1: ipv4: 10.0.0.185/31 ipv6: fc00::172/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.62/24 ipv6: fc0a::3e/64 ARISTA62T1: @@ -1988,7 +1988,7 @@ configuration: Ethernet1: ipv4: 10.0.0.187/31 ipv6: fc00::176/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.63/24 ipv6: fc0a::3f/64 ARISTA63T1: @@ -2007,7 +2007,7 @@ configuration: Ethernet1: ipv4: 10.0.0.189/31 ipv6: fc00::17a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.64/24 ipv6: fc0a::40/64 ARISTA64T1: @@ -2026,7 +2026,7 @@ configuration: Ethernet1: ipv4: 10.0.0.191/31 ipv6: fc00::17e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.65/24 ipv6: fc0a::41/64 ARISTA65T1: @@ -2045,7 +2045,7 @@ configuration: Ethernet1: ipv4: 10.0.1.65/31 ipv6: fc00::282/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.66/24 ipv6: fc0a::42/64 ARISTA66T1: @@ -2064,7 +2064,7 @@ configuration: Ethernet1: ipv4: 10.0.1.67/31 ipv6: fc00::286/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.67/24 ipv6: fc0a::43/64 ARISTA67T1: @@ -2083,7 +2083,7 @@ configuration: Ethernet1: ipv4: 10.0.1.69/31 ipv6: fc00::28a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.68/24 ipv6: fc0a::44/64 ARISTA68T1: @@ -2102,7 +2102,7 @@ configuration: Ethernet1: ipv4: 10.0.1.71/31 ipv6: fc00::28e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.69/24 ipv6: fc0a::45/64 ARISTA69T1: @@ -2121,7 +2121,7 @@ configuration: Ethernet1: ipv4: 10.0.1.73/31 ipv6: fc00::292/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.70/24 ipv6: fc0a::46/64 ARISTA70T1: @@ -2140,7 +2140,7 @@ configuration: Ethernet1: ipv4: 10.0.1.75/31 ipv6: fc00::296/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.71/24 ipv6: fc0a::47/64 ARISTA71T1: @@ -2159,7 +2159,7 @@ configuration: Ethernet1: ipv4: 10.0.1.77/31 ipv6: fc00::29a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.72/24 ipv6: fc0a::48/64 ARISTA72T1: @@ -2178,7 +2178,7 @@ configuration: Ethernet1: ipv4: 10.0.1.79/31 ipv6: fc00::29e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.73/24 ipv6: fc0a::49/64 ARISTA73T1: @@ -2197,7 +2197,7 @@ configuration: Ethernet1: ipv4: 10.0.1.81/31 ipv6: fc00::2a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.74/24 ipv6: fc0a::4a/64 ARISTA74T1: @@ -2216,7 +2216,7 @@ configuration: Ethernet1: ipv4: 10.0.1.83/31 ipv6: fc00::2a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.75/24 ipv6: fc0a::4b/64 ARISTA75T1: @@ -2235,7 +2235,7 @@ configuration: Ethernet1: ipv4: 10.0.1.85/31 ipv6: fc00::2aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.76/24 ipv6: fc0a::4c/64 ARISTA76T1: @@ -2254,7 +2254,7 @@ configuration: Ethernet1: ipv4: 10.0.1.87/31 ipv6: fc00::2ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.77/24 ipv6: fc0a::4d/64 ARISTA77T1: @@ -2273,7 +2273,7 @@ configuration: Ethernet1: ipv4: 10.0.1.89/31 ipv6: fc00::2b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.78/24 ipv6: fc0a::4e/64 ARISTA78T1: @@ -2292,7 +2292,7 @@ configuration: Ethernet1: ipv4: 10.0.1.91/31 ipv6: fc00::2b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.79/24 ipv6: fc0a::4f/64 ARISTA79T1: @@ -2311,7 +2311,7 @@ configuration: Ethernet1: ipv4: 10.0.1.93/31 ipv6: fc00::2ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.80/24 ipv6: fc0a::50/64 ARISTA80T1: @@ -2330,7 +2330,7 @@ configuration: Ethernet1: ipv4: 10.0.1.95/31 ipv6: fc00::2be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.81/24 ipv6: fc0a::51/64 ARISTA81T1: @@ -2349,7 +2349,7 @@ configuration: Ethernet1: ipv4: 10.0.1.97/31 ipv6: fc00::2c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.82/24 ipv6: fc0a::52/64 ARISTA82T1: @@ -2368,7 +2368,7 @@ configuration: Ethernet1: ipv4: 10.0.1.99/31 ipv6: fc00::2c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.83/24 ipv6: fc0a::53/64 ARISTA83T1: @@ -2387,7 +2387,7 @@ configuration: Ethernet1: ipv4: 10.0.1.101/31 ipv6: fc00::2ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.84/24 ipv6: fc0a::54/64 ARISTA84T1: @@ -2406,7 +2406,7 @@ configuration: Ethernet1: ipv4: 10.0.1.103/31 ipv6: fc00::2ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.85/24 ipv6: fc0a::55/64 ARISTA85T1: @@ -2425,7 +2425,7 @@ configuration: Ethernet1: ipv4: 10.0.1.105/31 ipv6: fc00::2d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.86/24 ipv6: fc0a::56/64 ARISTA86T1: @@ -2444,7 +2444,7 @@ configuration: Ethernet1: ipv4: 10.0.1.107/31 ipv6: fc00::2d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.87/24 ipv6: fc0a::57/64 ARISTA87T1: @@ -2463,7 +2463,7 @@ configuration: Ethernet1: ipv4: 10.0.1.109/31 ipv6: fc00::2da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.88/24 ipv6: fc0a::58/64 ARISTA88T1: @@ -2482,7 +2482,7 @@ configuration: Ethernet1: ipv4: 10.0.1.111/31 ipv6: fc00::2de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.89/24 ipv6: fc0a::59/64 ARISTA89T1: @@ -2501,7 +2501,7 @@ configuration: Ethernet1: ipv4: 10.0.1.113/31 ipv6: fc00::2e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.90/24 ipv6: fc0a::5a/64 ARISTA90T1: @@ -2520,7 +2520,7 @@ configuration: Ethernet1: ipv4: 10.0.1.115/31 ipv6: fc00::2e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.91/24 ipv6: fc0a::5b/64 ARISTA91T1: @@ -2539,7 +2539,7 @@ configuration: Ethernet1: ipv4: 10.0.1.117/31 ipv6: fc00::2ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.92/24 ipv6: fc0a::5c/64 ARISTA92T1: @@ -2558,7 +2558,7 @@ configuration: Ethernet1: ipv4: 10.0.1.119/31 ipv6: fc00::2ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.93/24 ipv6: fc0a::5d/64 ARISTA93T1: @@ -2577,7 +2577,7 @@ configuration: Ethernet1: ipv4: 10.0.1.121/31 ipv6: fc00::2f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.94/24 ipv6: fc0a::5e/64 ARISTA94T1: @@ -2596,7 +2596,7 @@ configuration: Ethernet1: ipv4: 10.0.1.123/31 ipv6: fc00::2f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.95/24 ipv6: fc0a::5f/64 ARISTA95T1: @@ -2615,7 +2615,7 @@ configuration: Ethernet1: ipv4: 10.0.1.125/31 ipv6: fc00::2fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.96/24 ipv6: fc0a::60/64 ARISTA96T1: @@ -2634,7 +2634,7 @@ configuration: Ethernet1: ipv4: 10.0.1.127/31 ipv6: fc00::2fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.97/24 ipv6: fc0a::61/64 ARISTA97T1: @@ -2653,7 +2653,7 @@ configuration: Ethernet1: ipv4: 10.0.1.129/31 ipv6: fc00::302/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.98/24 ipv6: fc0a::62/64 ARISTA98T1: @@ -2672,7 +2672,7 @@ configuration: Ethernet1: ipv4: 10.0.1.131/31 ipv6: fc00::306/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.99/24 ipv6: fc0a::63/64 ARISTA99T1: @@ -2691,7 +2691,7 @@ configuration: Ethernet1: ipv4: 10.0.1.133/31 ipv6: fc00::30a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.100/24 ipv6: fc0a::64/64 ARISTA100T1: @@ -2710,7 +2710,7 @@ configuration: Ethernet1: ipv4: 10.0.1.135/31 ipv6: fc00::30e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.101/24 ipv6: fc0a::65/64 ARISTA101T1: @@ -2729,7 +2729,7 @@ configuration: Ethernet1: ipv4: 10.0.1.137/31 ipv6: fc00::312/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.102/24 ipv6: fc0a::66/64 ARISTA102T1: @@ -2748,7 +2748,7 @@ configuration: Ethernet1: ipv4: 10.0.1.139/31 ipv6: fc00::316/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.103/24 ipv6: fc0a::67/64 ARISTA103T1: @@ -2767,7 +2767,7 @@ configuration: Ethernet1: ipv4: 10.0.1.141/31 ipv6: fc00::31a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.104/24 ipv6: fc0a::68/64 ARISTA104T1: @@ -2786,7 +2786,7 @@ configuration: Ethernet1: ipv4: 10.0.1.143/31 ipv6: fc00::31e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.105/24 ipv6: fc0a::69/64 ARISTA105T1: @@ -2805,7 +2805,7 @@ configuration: Ethernet1: ipv4: 10.0.1.145/31 ipv6: fc00::322/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.106/24 ipv6: fc0a::6a/64 ARISTA106T1: @@ -2824,7 +2824,7 @@ configuration: Ethernet1: ipv4: 10.0.1.147/31 ipv6: fc00::326/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.107/24 ipv6: fc0a::6b/64 ARISTA107T1: @@ -2843,7 +2843,7 @@ configuration: Ethernet1: ipv4: 10.0.1.149/31 ipv6: fc00::32a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.108/24 ipv6: fc0a::6c/64 ARISTA108T1: @@ -2862,7 +2862,7 @@ configuration: Ethernet1: ipv4: 10.0.1.151/31 ipv6: fc00::32e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.109/24 ipv6: fc0a::6d/64 ARISTA109T1: @@ -2881,7 +2881,7 @@ configuration: Ethernet1: ipv4: 10.0.1.153/31 ipv6: fc00::332/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.110/24 ipv6: fc0a::6e/64 ARISTA110T1: @@ -2900,7 +2900,7 @@ configuration: Ethernet1: ipv4: 10.0.1.155/31 ipv6: fc00::336/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.111/24 ipv6: fc0a::6f/64 ARISTA111T1: @@ -2919,7 +2919,7 @@ configuration: Ethernet1: ipv4: 10.0.1.157/31 ipv6: fc00::33a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.112/24 ipv6: fc0a::70/64 ARISTA112T1: @@ -2938,7 +2938,7 @@ configuration: Ethernet1: ipv4: 10.0.1.159/31 ipv6: fc00::33e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.113/24 ipv6: fc0a::71/64 ARISTA113T1: @@ -2957,7 +2957,7 @@ configuration: Ethernet1: ipv4: 10.0.1.161/31 ipv6: fc00::342/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.114/24 ipv6: fc0a::72/64 ARISTA114T1: @@ -2976,7 +2976,7 @@ configuration: Ethernet1: ipv4: 10.0.1.163/31 ipv6: fc00::346/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.115/24 ipv6: fc0a::73/64 ARISTA115T1: @@ -2995,7 +2995,7 @@ configuration: Ethernet1: ipv4: 10.0.1.165/31 ipv6: fc00::34a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.116/24 ipv6: fc0a::74/64 ARISTA116T1: @@ -3014,7 +3014,7 @@ configuration: Ethernet1: ipv4: 10.0.1.167/31 ipv6: fc00::34e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.117/24 ipv6: fc0a::75/64 ARISTA117T1: @@ -3033,7 +3033,7 @@ configuration: Ethernet1: ipv4: 10.0.1.169/31 ipv6: fc00::352/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.118/24 ipv6: fc0a::76/64 ARISTA118T1: @@ -3052,7 +3052,7 @@ configuration: Ethernet1: ipv4: 10.0.1.171/31 ipv6: fc00::356/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.119/24 ipv6: fc0a::77/64 ARISTA119T1: @@ -3071,7 +3071,7 @@ configuration: Ethernet1: ipv4: 10.0.1.173/31 ipv6: fc00::35a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.120/24 ipv6: fc0a::78/64 ARISTA120T1: @@ -3090,7 +3090,7 @@ configuration: Ethernet1: ipv4: 10.0.1.175/31 ipv6: fc00::35e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.121/24 ipv6: fc0a::79/64 ARISTA121T1: @@ -3109,7 +3109,7 @@ configuration: Ethernet1: ipv4: 10.0.1.177/31 ipv6: fc00::362/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.122/24 ipv6: fc0a::7a/64 ARISTA122T1: @@ -3128,7 +3128,7 @@ configuration: Ethernet1: ipv4: 10.0.1.179/31 ipv6: fc00::366/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.123/24 ipv6: fc0a::7b/64 ARISTA123T1: @@ -3147,7 +3147,7 @@ configuration: Ethernet1: ipv4: 10.0.1.181/31 ipv6: fc00::36a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.124/24 ipv6: fc0a::7c/64 ARISTA124T1: @@ -3166,7 +3166,7 @@ configuration: Ethernet1: ipv4: 10.0.1.183/31 ipv6: fc00::36e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.125/24 ipv6: fc0a::7d/64 ARISTA125T1: @@ -3185,7 +3185,7 @@ configuration: Ethernet1: ipv4: 10.0.1.185/31 ipv6: fc00::372/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.126/24 ipv6: fc0a::7e/64 ARISTA126T1: @@ -3204,7 +3204,7 @@ configuration: Ethernet1: ipv4: 10.0.1.187/31 ipv6: fc00::376/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.127/24 ipv6: fc0a::7f/64 ARISTA127T1: @@ -3223,7 +3223,7 @@ configuration: Ethernet1: ipv4: 10.0.1.189/31 ipv6: fc00::37a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.128/24 ipv6: fc0a::80/64 ARISTA128T1: @@ -3242,7 +3242,7 @@ configuration: Ethernet1: ipv4: 10.0.1.191/31 ipv6: fc00::37e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.129/24 ipv6: fc0a::81/64 ARISTA01PT0: @@ -3261,7 +3261,7 @@ configuration: Ethernet1: ipv4: 10.0.2.1/31 ipv6: fc00::402/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.130/24 ipv6: fc0a::82/64 ARISTA02PT0: @@ -3280,6 +3280,6 @@ configuration: Ethernet1: ipv4: 10.0.2.3/31 ipv6: fc00::406/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.131/24 ipv6: fc0a::83/64 diff --git a/ansible/vars/topo_t0-isolated-d2u254s1.yml b/ansible/vars/topo_t0-isolated-d2u254s1.yml new file mode 100644 index 00000000000..3da539c8d5b --- /dev/null +++ b/ansible/vars/topo_t0-isolated-d2u254s1.yml @@ -0,0 +1,5386 @@ +topology: + host_interfaces: + - 0 + - 1 + VMs: + ARISTA01T1: + vlans: + - 2 + vm_offset: 0 + ARISTA02T1: + vlans: + - 3 + vm_offset: 1 + ARISTA03T1: + vlans: + - 4 + vm_offset: 2 + ARISTA04T1: + vlans: + - 5 + vm_offset: 3 + ARISTA05T1: + vlans: + - 6 + vm_offset: 4 + ARISTA06T1: + vlans: + - 7 + vm_offset: 5 + ARISTA07T1: + vlans: + - 8 + vm_offset: 6 + ARISTA08T1: + vlans: + - 9 + vm_offset: 7 + ARISTA09T1: + vlans: + - 10 + vm_offset: 8 + ARISTA10T1: + vlans: + - 11 + vm_offset: 9 + ARISTA11T1: + vlans: + - 12 + vm_offset: 10 + ARISTA12T1: + vlans: + - 13 + vm_offset: 11 + ARISTA13T1: + vlans: + - 14 + vm_offset: 12 + ARISTA14T1: + vlans: + - 15 + vm_offset: 13 + ARISTA15T1: + vlans: + - 16 + vm_offset: 14 + ARISTA16T1: + vlans: + - 17 + vm_offset: 15 + ARISTA17T1: + vlans: + - 18 + vm_offset: 16 + ARISTA18T1: + vlans: + - 19 + vm_offset: 17 + ARISTA19T1: + vlans: + - 20 + vm_offset: 18 + ARISTA20T1: + vlans: + - 21 + vm_offset: 19 + ARISTA21T1: + vlans: + - 22 + vm_offset: 20 + ARISTA22T1: + vlans: + - 23 + vm_offset: 21 + ARISTA23T1: + vlans: + - 24 + vm_offset: 22 + ARISTA24T1: + vlans: + - 25 + vm_offset: 23 + ARISTA25T1: + vlans: + - 26 + vm_offset: 24 + ARISTA26T1: + vlans: + - 27 + vm_offset: 25 + ARISTA27T1: + vlans: + - 28 + vm_offset: 26 + ARISTA28T1: + vlans: + - 29 + vm_offset: 27 + ARISTA29T1: + vlans: + - 30 + vm_offset: 28 + ARISTA30T1: + vlans: + - 31 + vm_offset: 29 + ARISTA31T1: + vlans: + - 32 + vm_offset: 30 + ARISTA32T1: + vlans: + - 33 + vm_offset: 31 + ARISTA33T1: + vlans: + - 34 + vm_offset: 32 + ARISTA34T1: + vlans: + - 35 + vm_offset: 33 + ARISTA35T1: + vlans: + - 36 + vm_offset: 34 + ARISTA36T1: + vlans: + - 37 + vm_offset: 35 + ARISTA37T1: + vlans: + - 38 + vm_offset: 36 + ARISTA38T1: + vlans: + - 39 + vm_offset: 37 + ARISTA39T1: + vlans: + - 40 + vm_offset: 38 + ARISTA40T1: + vlans: + - 41 + vm_offset: 39 + ARISTA41T1: + vlans: + - 42 + vm_offset: 40 + ARISTA42T1: + vlans: + - 43 + vm_offset: 41 + ARISTA43T1: + vlans: + - 44 + vm_offset: 42 + ARISTA44T1: + vlans: + - 45 + vm_offset: 43 + ARISTA45T1: + vlans: + - 46 + vm_offset: 44 + ARISTA46T1: + vlans: + - 47 + vm_offset: 45 + ARISTA47T1: + vlans: + - 48 + vm_offset: 46 + ARISTA48T1: + vlans: + - 49 + vm_offset: 47 + ARISTA49T1: + vlans: + - 50 + vm_offset: 48 + ARISTA50T1: + vlans: + - 51 + vm_offset: 49 + ARISTA51T1: + vlans: + - 52 + vm_offset: 50 + ARISTA52T1: + vlans: + - 53 + vm_offset: 51 + ARISTA53T1: + vlans: + - 54 + vm_offset: 52 + ARISTA54T1: + vlans: + - 55 + vm_offset: 53 + ARISTA55T1: + vlans: + - 56 + vm_offset: 54 + ARISTA56T1: + vlans: + - 57 + vm_offset: 55 + ARISTA57T1: + vlans: + - 58 + vm_offset: 56 + ARISTA58T1: + vlans: + - 59 + vm_offset: 57 + ARISTA59T1: + vlans: + - 60 + vm_offset: 58 + ARISTA60T1: + vlans: + - 61 + vm_offset: 59 + ARISTA61T1: + vlans: + - 62 + vm_offset: 60 + ARISTA62T1: + vlans: + - 63 + vm_offset: 61 + ARISTA63T1: + vlans: + - 64 + vm_offset: 62 + ARISTA64T1: + vlans: + - 65 + vm_offset: 63 + ARISTA65T1: + vlans: + - 66 + vm_offset: 64 + ARISTA66T1: + vlans: + - 67 + vm_offset: 65 + ARISTA67T1: + vlans: + - 68 + vm_offset: 66 + ARISTA68T1: + vlans: + - 69 + vm_offset: 67 + ARISTA69T1: + vlans: + - 70 + vm_offset: 68 + ARISTA70T1: + vlans: + - 71 + vm_offset: 69 + ARISTA71T1: + vlans: + - 72 + vm_offset: 70 + ARISTA72T1: + vlans: + - 73 + vm_offset: 71 + ARISTA73T1: + vlans: + - 74 + vm_offset: 72 + ARISTA74T1: + vlans: + - 75 + vm_offset: 73 + ARISTA75T1: + vlans: + - 76 + vm_offset: 74 + ARISTA76T1: + vlans: + - 77 + vm_offset: 75 + ARISTA77T1: + vlans: + - 78 + vm_offset: 76 + ARISTA78T1: + vlans: + - 79 + vm_offset: 77 + ARISTA79T1: + vlans: + - 80 + vm_offset: 78 + ARISTA80T1: + vlans: + - 81 + vm_offset: 79 + ARISTA81T1: + vlans: + - 82 + vm_offset: 80 + ARISTA82T1: + vlans: + - 83 + vm_offset: 81 + ARISTA83T1: + vlans: + - 84 + vm_offset: 82 + ARISTA84T1: + vlans: + - 85 + vm_offset: 83 + ARISTA85T1: + vlans: + - 86 + vm_offset: 84 + ARISTA86T1: + vlans: + - 87 + vm_offset: 85 + ARISTA87T1: + vlans: + - 88 + vm_offset: 86 + ARISTA88T1: + vlans: + - 89 + vm_offset: 87 + ARISTA89T1: + vlans: + - 90 + vm_offset: 88 + ARISTA90T1: + vlans: + - 91 + vm_offset: 89 + ARISTA91T1: + vlans: + - 92 + vm_offset: 90 + ARISTA92T1: + vlans: + - 93 + vm_offset: 91 + ARISTA93T1: + vlans: + - 94 + vm_offset: 92 + ARISTA94T1: + vlans: + - 95 + vm_offset: 93 + ARISTA95T1: + vlans: + - 96 + vm_offset: 94 + ARISTA96T1: + vlans: + - 97 + vm_offset: 95 + ARISTA97T1: + vlans: + - 98 + vm_offset: 96 + ARISTA98T1: + vlans: + - 99 + vm_offset: 97 + ARISTA99T1: + vlans: + - 100 + vm_offset: 98 + ARISTA100T1: + vlans: + - 101 + vm_offset: 99 + ARISTA101T1: + vlans: + - 102 + vm_offset: 100 + ARISTA102T1: + vlans: + - 103 + vm_offset: 101 + ARISTA103T1: + vlans: + - 104 + vm_offset: 102 + ARISTA104T1: + vlans: + - 105 + vm_offset: 103 + ARISTA105T1: + vlans: + - 106 + vm_offset: 104 + ARISTA106T1: + vlans: + - 107 + vm_offset: 105 + ARISTA107T1: + vlans: + - 108 + vm_offset: 106 + ARISTA108T1: + vlans: + - 109 + vm_offset: 107 + ARISTA109T1: + vlans: + - 110 + vm_offset: 108 + ARISTA110T1: + vlans: + - 111 + vm_offset: 109 + ARISTA111T1: + vlans: + - 112 + vm_offset: 110 + ARISTA112T1: + vlans: + - 113 + vm_offset: 111 + ARISTA113T1: + vlans: + - 114 + vm_offset: 112 + ARISTA114T1: + vlans: + - 115 + vm_offset: 113 + ARISTA115T1: + vlans: + - 116 + vm_offset: 114 + ARISTA116T1: + vlans: + - 117 + vm_offset: 115 + ARISTA117T1: + vlans: + - 118 + vm_offset: 116 + ARISTA118T1: + vlans: + - 119 + vm_offset: 117 + ARISTA119T1: + vlans: + - 120 + vm_offset: 118 + ARISTA120T1: + vlans: + - 121 + vm_offset: 119 + ARISTA121T1: + vlans: + - 122 + vm_offset: 120 + ARISTA122T1: + vlans: + - 123 + vm_offset: 121 + ARISTA123T1: + vlans: + - 124 + vm_offset: 122 + ARISTA124T1: + vlans: + - 125 + vm_offset: 123 + ARISTA125T1: + vlans: + - 126 + vm_offset: 124 + ARISTA126T1: + vlans: + - 127 + vm_offset: 125 + ARISTA127T1: + vlans: + - 128 + vm_offset: 126 + ARISTA128T1: + vlans: + - 129 + vm_offset: 127 + ARISTA129T1: + vlans: + - 130 + vm_offset: 128 + ARISTA130T1: + vlans: + - 131 + vm_offset: 129 + ARISTA131T1: + vlans: + - 132 + vm_offset: 130 + ARISTA132T1: + vlans: + - 133 + vm_offset: 131 + ARISTA133T1: + vlans: + - 134 + vm_offset: 132 + ARISTA134T1: + vlans: + - 135 + vm_offset: 133 + ARISTA135T1: + vlans: + - 136 + vm_offset: 134 + ARISTA136T1: + vlans: + - 137 + vm_offset: 135 + ARISTA137T1: + vlans: + - 138 + vm_offset: 136 + ARISTA138T1: + vlans: + - 139 + vm_offset: 137 + ARISTA139T1: + vlans: + - 140 + vm_offset: 138 + ARISTA140T1: + vlans: + - 141 + vm_offset: 139 + ARISTA141T1: + vlans: + - 142 + vm_offset: 140 + ARISTA142T1: + vlans: + - 143 + vm_offset: 141 + ARISTA143T1: + vlans: + - 144 + vm_offset: 142 + ARISTA144T1: + vlans: + - 145 + vm_offset: 143 + ARISTA145T1: + vlans: + - 146 + vm_offset: 144 + ARISTA146T1: + vlans: + - 147 + vm_offset: 145 + ARISTA147T1: + vlans: + - 148 + vm_offset: 146 + ARISTA148T1: + vlans: + - 149 + vm_offset: 147 + ARISTA149T1: + vlans: + - 150 + vm_offset: 148 + ARISTA150T1: + vlans: + - 151 + vm_offset: 149 + ARISTA151T1: + vlans: + - 152 + vm_offset: 150 + ARISTA152T1: + vlans: + - 153 + vm_offset: 151 + ARISTA153T1: + vlans: + - 154 + vm_offset: 152 + ARISTA154T1: + vlans: + - 155 + vm_offset: 153 + ARISTA155T1: + vlans: + - 156 + vm_offset: 154 + ARISTA156T1: + vlans: + - 157 + vm_offset: 155 + ARISTA157T1: + vlans: + - 158 + vm_offset: 156 + ARISTA158T1: + vlans: + - 159 + vm_offset: 157 + ARISTA159T1: + vlans: + - 160 + vm_offset: 158 + ARISTA160T1: + vlans: + - 161 + vm_offset: 159 + ARISTA161T1: + vlans: + - 162 + vm_offset: 160 + ARISTA162T1: + vlans: + - 163 + vm_offset: 161 + ARISTA163T1: + vlans: + - 164 + vm_offset: 162 + ARISTA164T1: + vlans: + - 165 + vm_offset: 163 + ARISTA165T1: + vlans: + - 166 + vm_offset: 164 + ARISTA166T1: + vlans: + - 167 + vm_offset: 165 + ARISTA167T1: + vlans: + - 168 + vm_offset: 166 + ARISTA168T1: + vlans: + - 169 + vm_offset: 167 + ARISTA169T1: + vlans: + - 170 + vm_offset: 168 + ARISTA170T1: + vlans: + - 171 + vm_offset: 169 + ARISTA171T1: + vlans: + - 172 + vm_offset: 170 + ARISTA172T1: + vlans: + - 173 + vm_offset: 171 + ARISTA173T1: + vlans: + - 174 + vm_offset: 172 + ARISTA174T1: + vlans: + - 175 + vm_offset: 173 + ARISTA175T1: + vlans: + - 176 + vm_offset: 174 + ARISTA176T1: + vlans: + - 177 + vm_offset: 175 + ARISTA177T1: + vlans: + - 178 + vm_offset: 176 + ARISTA178T1: + vlans: + - 179 + vm_offset: 177 + ARISTA179T1: + vlans: + - 180 + vm_offset: 178 + ARISTA180T1: + vlans: + - 181 + vm_offset: 179 + ARISTA181T1: + vlans: + - 182 + vm_offset: 180 + ARISTA182T1: + vlans: + - 183 + vm_offset: 181 + ARISTA183T1: + vlans: + - 184 + vm_offset: 182 + ARISTA184T1: + vlans: + - 185 + vm_offset: 183 + ARISTA185T1: + vlans: + - 186 + vm_offset: 184 + ARISTA186T1: + vlans: + - 187 + vm_offset: 185 + ARISTA187T1: + vlans: + - 188 + vm_offset: 186 + ARISTA188T1: + vlans: + - 189 + vm_offset: 187 + ARISTA189T1: + vlans: + - 190 + vm_offset: 188 + ARISTA190T1: + vlans: + - 191 + vm_offset: 189 + ARISTA191T1: + vlans: + - 192 + vm_offset: 190 + ARISTA192T1: + vlans: + - 193 + vm_offset: 191 + ARISTA193T1: + vlans: + - 194 + vm_offset: 192 + ARISTA194T1: + vlans: + - 195 + vm_offset: 193 + ARISTA195T1: + vlans: + - 196 + vm_offset: 194 + ARISTA196T1: + vlans: + - 197 + vm_offset: 195 + ARISTA197T1: + vlans: + - 198 + vm_offset: 196 + ARISTA198T1: + vlans: + - 199 + vm_offset: 197 + ARISTA199T1: + vlans: + - 200 + vm_offset: 198 + ARISTA200T1: + vlans: + - 201 + vm_offset: 199 + ARISTA201T1: + vlans: + - 202 + vm_offset: 200 + ARISTA202T1: + vlans: + - 203 + vm_offset: 201 + ARISTA203T1: + vlans: + - 204 + vm_offset: 202 + ARISTA204T1: + vlans: + - 205 + vm_offset: 203 + ARISTA205T1: + vlans: + - 206 + vm_offset: 204 + ARISTA206T1: + vlans: + - 207 + vm_offset: 205 + ARISTA207T1: + vlans: + - 208 + vm_offset: 206 + ARISTA208T1: + vlans: + - 209 + vm_offset: 207 + ARISTA209T1: + vlans: + - 210 + vm_offset: 208 + ARISTA210T1: + vlans: + - 211 + vm_offset: 209 + ARISTA211T1: + vlans: + - 212 + vm_offset: 210 + ARISTA212T1: + vlans: + - 213 + vm_offset: 211 + ARISTA213T1: + vlans: + - 214 + vm_offset: 212 + ARISTA214T1: + vlans: + - 215 + vm_offset: 213 + ARISTA215T1: + vlans: + - 216 + vm_offset: 214 + ARISTA216T1: + vlans: + - 217 + vm_offset: 215 + ARISTA217T1: + vlans: + - 218 + vm_offset: 216 + ARISTA218T1: + vlans: + - 219 + vm_offset: 217 + ARISTA219T1: + vlans: + - 220 + vm_offset: 218 + ARISTA220T1: + vlans: + - 221 + vm_offset: 219 + ARISTA221T1: + vlans: + - 222 + vm_offset: 220 + ARISTA222T1: + vlans: + - 223 + vm_offset: 221 + ARISTA223T1: + vlans: + - 224 + vm_offset: 222 + ARISTA224T1: + vlans: + - 225 + vm_offset: 223 + ARISTA225T1: + vlans: + - 226 + vm_offset: 224 + ARISTA226T1: + vlans: + - 227 + vm_offset: 225 + ARISTA227T1: + vlans: + - 228 + vm_offset: 226 + ARISTA228T1: + vlans: + - 229 + vm_offset: 227 + ARISTA229T1: + vlans: + - 230 + vm_offset: 228 + ARISTA230T1: + vlans: + - 231 + vm_offset: 229 + ARISTA231T1: + vlans: + - 232 + vm_offset: 230 + ARISTA232T1: + vlans: + - 233 + vm_offset: 231 + ARISTA233T1: + vlans: + - 234 + vm_offset: 232 + ARISTA234T1: + vlans: + - 235 + vm_offset: 233 + ARISTA235T1: + vlans: + - 236 + vm_offset: 234 + ARISTA236T1: + vlans: + - 237 + vm_offset: 235 + ARISTA237T1: + vlans: + - 238 + vm_offset: 236 + ARISTA238T1: + vlans: + - 239 + vm_offset: 237 + ARISTA239T1: + vlans: + - 240 + vm_offset: 238 + ARISTA240T1: + vlans: + - 241 + vm_offset: 239 + ARISTA241T1: + vlans: + - 242 + vm_offset: 240 + ARISTA242T1: + vlans: + - 243 + vm_offset: 241 + ARISTA243T1: + vlans: + - 244 + vm_offset: 242 + ARISTA244T1: + vlans: + - 245 + vm_offset: 243 + ARISTA245T1: + vlans: + - 246 + vm_offset: 244 + ARISTA246T1: + vlans: + - 247 + vm_offset: 245 + ARISTA247T1: + vlans: + - 248 + vm_offset: 246 + ARISTA248T1: + vlans: + - 249 + vm_offset: 247 + ARISTA249T1: + vlans: + - 250 + vm_offset: 248 + ARISTA250T1: + vlans: + - 251 + vm_offset: 249 + ARISTA251T1: + vlans: + - 252 + vm_offset: 250 + ARISTA252T1: + vlans: + - 253 + vm_offset: 251 + ARISTA253T1: + vlans: + - 254 + vm_offset: 252 + ARISTA254T1: + vlans: + - 255 + vm_offset: 253 + DUT: + vlan_configs: + default_vlan_config: one_vlan_per_intf + one_vlan_per_intf: + Vlan1000: + id: 1000 + intfs: [0] + prefix_v6: fc00:c:c:0001::/64 + tag: 1000 + Vlan1001: + id: 1001 + intfs: [1] + prefix_v6: fc00:c:c:0002::/64 + tag: 1001 + +configuration_properties: + common: + dut_asn: 4200000000 + dut_type: ToRRouter + swrole: leaf + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine_asn: 4200200000 + leaf_asn_start: 4200100000 + tor_asn_start: 4200000000 + failure_rate: 0 + nhipv6: FC0A::FF + +configuration: + ARISTA01T1: + properties: + - common + bgp: + router-id: 0.12.0.3 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3::1/128 + Ethernet1: + ipv6: fc00:a::a/126 + bp_interface: + ipv6: fc00:b::3/64 + + ARISTA02T1: + properties: + - common + bgp: + router-id: 0.12.0.4 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d + interfaces: + Loopback0: + ipv6: fc00:c:c:4::1/128 + Ethernet1: + ipv6: fc00:a::e/126 + bp_interface: + ipv6: fc00:b::4/64 + + ARISTA03T1: + properties: + - common + bgp: + router-id: 0.12.0.5 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::11 + interfaces: + Loopback0: + ipv6: fc00:c:c:5::1/128 + Ethernet1: + ipv6: fc00:a::12/126 + bp_interface: + ipv6: fc00:b::5/64 + + ARISTA04T1: + properties: + - common + bgp: + router-id: 0.12.0.6 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::15 + interfaces: + Loopback0: + ipv6: fc00:c:c:6::1/128 + Ethernet1: + ipv6: fc00:a::16/126 + bp_interface: + ipv6: fc00:b::6/64 + + ARISTA05T1: + properties: + - common + bgp: + router-id: 0.12.0.7 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::19 + interfaces: + Loopback0: + ipv6: fc00:c:c:7::1/128 + Ethernet1: + ipv6: fc00:a::1a/126 + bp_interface: + ipv6: fc00:b::7/64 + + ARISTA06T1: + properties: + - common + bgp: + router-id: 0.12.0.8 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d + interfaces: + Loopback0: + ipv6: fc00:c:c:8::1/128 + Ethernet1: + ipv6: fc00:a::1e/126 + bp_interface: + ipv6: fc00:b::8/64 + + ARISTA07T1: + properties: + - common + bgp: + router-id: 0.12.0.9 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::21 + interfaces: + Loopback0: + ipv6: fc00:c:c:9::1/128 + Ethernet1: + ipv6: fc00:a::22/126 + bp_interface: + ipv6: fc00:b::9/64 + + ARISTA08T1: + properties: + - common + bgp: + router-id: 0.12.0.10 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::25 + interfaces: + Loopback0: + ipv6: fc00:c:c:a::1/128 + Ethernet1: + ipv6: fc00:a::26/126 + bp_interface: + ipv6: fc00:b::a/64 + + ARISTA09T1: + properties: + - common + bgp: + router-id: 0.12.0.11 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::29 + interfaces: + Loopback0: + ipv6: fc00:c:c:b::1/128 + Ethernet1: + ipv6: fc00:a::2a/126 + bp_interface: + ipv6: fc00:b::b/64 + + ARISTA10T1: + properties: + - common + bgp: + router-id: 0.12.0.12 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d + interfaces: + Loopback0: + ipv6: fc00:c:c:c::1/128 + Ethernet1: + ipv6: fc00:a::2e/126 + bp_interface: + ipv6: fc00:b::c/64 + + ARISTA11T1: + properties: + - common + bgp: + router-id: 0.12.0.13 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::31 + interfaces: + Loopback0: + ipv6: fc00:c:c:d::1/128 + Ethernet1: + ipv6: fc00:a::32/126 + bp_interface: + ipv6: fc00:b::d/64 + + ARISTA12T1: + properties: + - common + bgp: + router-id: 0.12.0.14 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::35 + interfaces: + Loopback0: + ipv6: fc00:c:c:e::1/128 + Ethernet1: + ipv6: fc00:a::36/126 + bp_interface: + ipv6: fc00:b::e/64 + + ARISTA13T1: + properties: + - common + bgp: + router-id: 0.12.0.15 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::39 + interfaces: + Loopback0: + ipv6: fc00:c:c:f::1/128 + Ethernet1: + ipv6: fc00:a::3a/126 + bp_interface: + ipv6: fc00:b::f/64 + + ARISTA14T1: + properties: + - common + bgp: + router-id: 0.12.0.16 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d + interfaces: + Loopback0: + ipv6: fc00:c:c:10::1/128 + Ethernet1: + ipv6: fc00:a::3e/126 + bp_interface: + ipv6: fc00:b::10/64 + + ARISTA15T1: + properties: + - common + bgp: + router-id: 0.12.0.17 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::41 + interfaces: + Loopback0: + ipv6: fc00:c:c:11::1/128 + Ethernet1: + ipv6: fc00:a::42/126 + bp_interface: + ipv6: fc00:b::11/64 + + ARISTA16T1: + properties: + - common + bgp: + router-id: 0.12.0.18 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::45 + interfaces: + Loopback0: + ipv6: fc00:c:c:12::1/128 + Ethernet1: + ipv6: fc00:a::46/126 + bp_interface: + ipv6: fc00:b::12/64 + + ARISTA17T1: + properties: + - common + bgp: + router-id: 0.12.0.19 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::49 + interfaces: + Loopback0: + ipv6: fc00:c:c:13::1/128 + Ethernet1: + ipv6: fc00:a::4a/126 + bp_interface: + ipv6: fc00:b::13/64 + + ARISTA18T1: + properties: + - common + bgp: + router-id: 0.12.0.20 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4d + interfaces: + Loopback0: + ipv6: fc00:c:c:14::1/128 + Ethernet1: + ipv6: fc00:a::4e/126 + bp_interface: + ipv6: fc00:b::14/64 + + ARISTA19T1: + properties: + - common + bgp: + router-id: 0.12.0.21 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::51 + interfaces: + Loopback0: + ipv6: fc00:c:c:15::1/128 + Ethernet1: + ipv6: fc00:a::52/126 + bp_interface: + ipv6: fc00:b::15/64 + + ARISTA20T1: + properties: + - common + bgp: + router-id: 0.12.0.22 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::55 + interfaces: + Loopback0: + ipv6: fc00:c:c:16::1/128 + Ethernet1: + ipv6: fc00:a::56/126 + bp_interface: + ipv6: fc00:b::16/64 + + ARISTA21T1: + properties: + - common + bgp: + router-id: 0.12.0.23 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::59 + interfaces: + Loopback0: + ipv6: fc00:c:c:17::1/128 + Ethernet1: + ipv6: fc00:a::5a/126 + bp_interface: + ipv6: fc00:b::17/64 + + ARISTA22T1: + properties: + - common + bgp: + router-id: 0.12.0.24 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5d + interfaces: + Loopback0: + ipv6: fc00:c:c:18::1/128 + Ethernet1: + ipv6: fc00:a::5e/126 + bp_interface: + ipv6: fc00:b::18/64 + + ARISTA23T1: + properties: + - common + bgp: + router-id: 0.12.0.25 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::61 + interfaces: + Loopback0: + ipv6: fc00:c:c:19::1/128 + Ethernet1: + ipv6: fc00:a::62/126 + bp_interface: + ipv6: fc00:b::19/64 + + ARISTA24T1: + properties: + - common + bgp: + router-id: 0.12.0.26 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::65 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a::1/128 + Ethernet1: + ipv6: fc00:a::66/126 + bp_interface: + ipv6: fc00:b::1a/64 + + ARISTA25T1: + properties: + - common + bgp: + router-id: 0.12.0.27 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::69 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b::1/128 + Ethernet1: + ipv6: fc00:a::6a/126 + bp_interface: + ipv6: fc00:b::1b/64 + + ARISTA26T1: + properties: + - common + bgp: + router-id: 0.12.0.28 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c::1/128 + Ethernet1: + ipv6: fc00:a::6e/126 + bp_interface: + ipv6: fc00:b::1c/64 + + ARISTA27T1: + properties: + - common + bgp: + router-id: 0.12.0.29 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::71 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d::1/128 + Ethernet1: + ipv6: fc00:a::72/126 + bp_interface: + ipv6: fc00:b::1d/64 + + ARISTA28T1: + properties: + - common + bgp: + router-id: 0.12.0.30 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::75 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e::1/128 + Ethernet1: + ipv6: fc00:a::76/126 + bp_interface: + ipv6: fc00:b::1e/64 + + ARISTA29T1: + properties: + - common + bgp: + router-id: 0.12.0.31 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::79 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f::1/128 + Ethernet1: + ipv6: fc00:a::7a/126 + bp_interface: + ipv6: fc00:b::1f/64 + + ARISTA30T1: + properties: + - common + bgp: + router-id: 0.12.0.32 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7d + interfaces: + Loopback0: + ipv6: fc00:c:c:20::1/128 + Ethernet1: + ipv6: fc00:a::7e/126 + bp_interface: + ipv6: fc00:b::20/64 + + ARISTA31T1: + properties: + - common + bgp: + router-id: 0.12.0.33 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::81 + interfaces: + Loopback0: + ipv6: fc00:c:c:21::1/128 + Ethernet1: + ipv6: fc00:a::82/126 + bp_interface: + ipv6: fc00:b::21/64 + + ARISTA32T1: + properties: + - common + bgp: + router-id: 0.12.0.34 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::85 + interfaces: + Loopback0: + ipv6: fc00:c:c:22::1/128 + Ethernet1: + ipv6: fc00:a::86/126 + bp_interface: + ipv6: fc00:b::22/64 + + ARISTA33T1: + properties: + - common + bgp: + router-id: 0.12.0.35 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::89 + interfaces: + Loopback0: + ipv6: fc00:c:c:23::1/128 + Ethernet1: + ipv6: fc00:a::8a/126 + bp_interface: + ipv6: fc00:b::23/64 + + ARISTA34T1: + properties: + - common + bgp: + router-id: 0.12.0.36 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::8d + interfaces: + Loopback0: + ipv6: fc00:c:c:24::1/128 + Ethernet1: + ipv6: fc00:a::8e/126 + bp_interface: + ipv6: fc00:b::24/64 + + ARISTA35T1: + properties: + - common + bgp: + router-id: 0.12.0.37 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::91 + interfaces: + Loopback0: + ipv6: fc00:c:c:25::1/128 + Ethernet1: + ipv6: fc00:a::92/126 + bp_interface: + ipv6: fc00:b::25/64 + + ARISTA36T1: + properties: + - common + bgp: + router-id: 0.12.0.38 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::95 + interfaces: + Loopback0: + ipv6: fc00:c:c:26::1/128 + Ethernet1: + ipv6: fc00:a::96/126 + bp_interface: + ipv6: fc00:b::26/64 + + ARISTA37T1: + properties: + - common + bgp: + router-id: 0.12.0.39 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::99 + interfaces: + Loopback0: + ipv6: fc00:c:c:27::1/128 + Ethernet1: + ipv6: fc00:a::9a/126 + bp_interface: + ipv6: fc00:b::27/64 + + ARISTA38T1: + properties: + - common + bgp: + router-id: 0.12.0.40 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::9d + interfaces: + Loopback0: + ipv6: fc00:c:c:28::1/128 + Ethernet1: + ipv6: fc00:a::9e/126 + bp_interface: + ipv6: fc00:b::28/64 + + ARISTA39T1: + properties: + - common + bgp: + router-id: 0.12.0.41 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:29::1/128 + Ethernet1: + ipv6: fc00:a::a2/126 + bp_interface: + ipv6: fc00:b::29/64 + + ARISTA40T1: + properties: + - common + bgp: + router-id: 0.12.0.42 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2a::1/128 + Ethernet1: + ipv6: fc00:a::a6/126 + bp_interface: + ipv6: fc00:b::2a/64 + + ARISTA41T1: + properties: + - common + bgp: + router-id: 0.12.0.43 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2b::1/128 + Ethernet1: + ipv6: fc00:a::aa/126 + bp_interface: + ipv6: fc00:b::2b/64 + + ARISTA42T1: + properties: + - common + bgp: + router-id: 0.12.0.44 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::ad + interfaces: + Loopback0: + ipv6: fc00:c:c:2c::1/128 + Ethernet1: + ipv6: fc00:a::ae/126 + bp_interface: + ipv6: fc00:b::2c/64 + + ARISTA43T1: + properties: + - common + bgp: + router-id: 0.12.0.45 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:2d::1/128 + Ethernet1: + ipv6: fc00:a::b2/126 + bp_interface: + ipv6: fc00:b::2d/64 + + ARISTA44T1: + properties: + - common + bgp: + router-id: 0.12.0.46 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2e::1/128 + Ethernet1: + ipv6: fc00:a::b6/126 + bp_interface: + ipv6: fc00:b::2e/64 + + ARISTA45T1: + properties: + - common + bgp: + router-id: 0.12.0.47 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2f::1/128 + Ethernet1: + ipv6: fc00:a::ba/126 + bp_interface: + ipv6: fc00:b::2f/64 + + ARISTA46T1: + properties: + - common + bgp: + router-id: 0.12.0.48 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::bd + interfaces: + Loopback0: + ipv6: fc00:c:c:30::1/128 + Ethernet1: + ipv6: fc00:a::be/126 + bp_interface: + ipv6: fc00:b::30/64 + + ARISTA47T1: + properties: + - common + bgp: + router-id: 0.12.0.49 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:31::1/128 + Ethernet1: + ipv6: fc00:a::c2/126 + bp_interface: + ipv6: fc00:b::31/64 + + ARISTA48T1: + properties: + - common + bgp: + router-id: 0.12.0.50 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:32::1/128 + Ethernet1: + ipv6: fc00:a::c6/126 + bp_interface: + ipv6: fc00:b::32/64 + + ARISTA49T1: + properties: + - common + bgp: + router-id: 0.12.0.51 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:33::1/128 + Ethernet1: + ipv6: fc00:a::ca/126 + bp_interface: + ipv6: fc00:b::33/64 + + ARISTA50T1: + properties: + - common + bgp: + router-id: 0.12.0.52 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::cd + interfaces: + Loopback0: + ipv6: fc00:c:c:34::1/128 + Ethernet1: + ipv6: fc00:a::ce/126 + bp_interface: + ipv6: fc00:b::34/64 + + ARISTA51T1: + properties: + - common + bgp: + router-id: 0.12.0.53 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:35::1/128 + Ethernet1: + ipv6: fc00:a::d2/126 + bp_interface: + ipv6: fc00:b::35/64 + + ARISTA52T1: + properties: + - common + bgp: + router-id: 0.12.0.54 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:36::1/128 + Ethernet1: + ipv6: fc00:a::d6/126 + bp_interface: + ipv6: fc00:b::36/64 + + ARISTA53T1: + properties: + - common + bgp: + router-id: 0.12.0.55 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:37::1/128 + Ethernet1: + ipv6: fc00:a::da/126 + bp_interface: + ipv6: fc00:b::37/64 + + ARISTA54T1: + properties: + - common + bgp: + router-id: 0.12.0.56 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::dd + interfaces: + Loopback0: + ipv6: fc00:c:c:38::1/128 + Ethernet1: + ipv6: fc00:a::de/126 + bp_interface: + ipv6: fc00:b::38/64 + + ARISTA55T1: + properties: + - common + bgp: + router-id: 0.12.0.57 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:39::1/128 + Ethernet1: + ipv6: fc00:a::e2/126 + bp_interface: + ipv6: fc00:b::39/64 + + ARISTA56T1: + properties: + - common + bgp: + router-id: 0.12.0.58 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3a::1/128 + Ethernet1: + ipv6: fc00:a::e6/126 + bp_interface: + ipv6: fc00:b::3a/64 + + ARISTA57T1: + properties: + - common + bgp: + router-id: 0.12.0.59 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3b::1/128 + Ethernet1: + ipv6: fc00:a::ea/126 + bp_interface: + ipv6: fc00:b::3b/64 + + ARISTA58T1: + properties: + - common + bgp: + router-id: 0.12.0.60 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::ed + interfaces: + Loopback0: + ipv6: fc00:c:c:3c::1/128 + Ethernet1: + ipv6: fc00:a::ee/126 + bp_interface: + ipv6: fc00:b::3c/64 + + ARISTA59T1: + properties: + - common + bgp: + router-id: 0.12.0.61 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:3d::1/128 + Ethernet1: + ipv6: fc00:a::f2/126 + bp_interface: + ipv6: fc00:b::3d/64 + + ARISTA60T1: + properties: + - common + bgp: + router-id: 0.12.0.62 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3e::1/128 + Ethernet1: + ipv6: fc00:a::f6/126 + bp_interface: + ipv6: fc00:b::3e/64 + + ARISTA61T1: + properties: + - common + bgp: + router-id: 0.12.0.63 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3f::1/128 + Ethernet1: + ipv6: fc00:a::fa/126 + bp_interface: + ipv6: fc00:b::3f/64 + + ARISTA62T1: + properties: + - common + bgp: + router-id: 0.12.0.64 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::fd + interfaces: + Loopback0: + ipv6: fc00:c:c:40::1/128 + Ethernet1: + ipv6: fc00:a::fe/126 + bp_interface: + ipv6: fc00:b::40/64 + + ARISTA63T1: + properties: + - common + bgp: + router-id: 0.12.0.65 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::101 + interfaces: + Loopback0: + ipv6: fc00:c:c:41::1/128 + Ethernet1: + ipv6: fc00:a::102/126 + bp_interface: + ipv6: fc00:b::41/64 + + ARISTA64T1: + properties: + - common + bgp: + router-id: 0.12.0.66 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::105 + interfaces: + Loopback0: + ipv6: fc00:c:c:42::1/128 + Ethernet1: + ipv6: fc00:a::106/126 + bp_interface: + ipv6: fc00:b::42/64 + + ARISTA65T1: + properties: + - common + bgp: + router-id: 0.12.0.67 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::109 + interfaces: + Loopback0: + ipv6: fc00:c:c:43::1/128 + Ethernet1: + ipv6: fc00:a::10a/126 + bp_interface: + ipv6: fc00:b::43/64 + + ARISTA66T1: + properties: + - common + bgp: + router-id: 0.12.0.68 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::10d + interfaces: + Loopback0: + ipv6: fc00:c:c:44::1/128 + Ethernet1: + ipv6: fc00:a::10e/126 + bp_interface: + ipv6: fc00:b::44/64 + + ARISTA67T1: + properties: + - common + bgp: + router-id: 0.12.0.69 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::111 + interfaces: + Loopback0: + ipv6: fc00:c:c:45::1/128 + Ethernet1: + ipv6: fc00:a::112/126 + bp_interface: + ipv6: fc00:b::45/64 + + ARISTA68T1: + properties: + - common + bgp: + router-id: 0.12.0.70 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::115 + interfaces: + Loopback0: + ipv6: fc00:c:c:46::1/128 + Ethernet1: + ipv6: fc00:a::116/126 + bp_interface: + ipv6: fc00:b::46/64 + + ARISTA69T1: + properties: + - common + bgp: + router-id: 0.12.0.71 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::119 + interfaces: + Loopback0: + ipv6: fc00:c:c:47::1/128 + Ethernet1: + ipv6: fc00:a::11a/126 + bp_interface: + ipv6: fc00:b::47/64 + + ARISTA70T1: + properties: + - common + bgp: + router-id: 0.12.0.72 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::11d + interfaces: + Loopback0: + ipv6: fc00:c:c:48::1/128 + Ethernet1: + ipv6: fc00:a::11e/126 + bp_interface: + ipv6: fc00:b::48/64 + + ARISTA71T1: + properties: + - common + bgp: + router-id: 0.12.0.73 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::121 + interfaces: + Loopback0: + ipv6: fc00:c:c:49::1/128 + Ethernet1: + ipv6: fc00:a::122/126 + bp_interface: + ipv6: fc00:b::49/64 + + ARISTA72T1: + properties: + - common + bgp: + router-id: 0.12.0.74 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::125 + interfaces: + Loopback0: + ipv6: fc00:c:c:4a::1/128 + Ethernet1: + ipv6: fc00:a::126/126 + bp_interface: + ipv6: fc00:b::4a/64 + + ARISTA73T1: + properties: + - common + bgp: + router-id: 0.12.0.75 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::129 + interfaces: + Loopback0: + ipv6: fc00:c:c:4b::1/128 + Ethernet1: + ipv6: fc00:a::12a/126 + bp_interface: + ipv6: fc00:b::4b/64 + + ARISTA74T1: + properties: + - common + bgp: + router-id: 0.12.0.76 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::12d + interfaces: + Loopback0: + ipv6: fc00:c:c:4c::1/128 + Ethernet1: + ipv6: fc00:a::12e/126 + bp_interface: + ipv6: fc00:b::4c/64 + + ARISTA75T1: + properties: + - common + bgp: + router-id: 0.12.0.77 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::131 + interfaces: + Loopback0: + ipv6: fc00:c:c:4d::1/128 + Ethernet1: + ipv6: fc00:a::132/126 + bp_interface: + ipv6: fc00:b::4d/64 + + ARISTA76T1: + properties: + - common + bgp: + router-id: 0.12.0.78 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::135 + interfaces: + Loopback0: + ipv6: fc00:c:c:4e::1/128 + Ethernet1: + ipv6: fc00:a::136/126 + bp_interface: + ipv6: fc00:b::4e/64 + + ARISTA77T1: + properties: + - common + bgp: + router-id: 0.12.0.79 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::139 + interfaces: + Loopback0: + ipv6: fc00:c:c:4f::1/128 + Ethernet1: + ipv6: fc00:a::13a/126 + bp_interface: + ipv6: fc00:b::4f/64 + + ARISTA78T1: + properties: + - common + bgp: + router-id: 0.12.0.80 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::13d + interfaces: + Loopback0: + ipv6: fc00:c:c:50::1/128 + Ethernet1: + ipv6: fc00:a::13e/126 + bp_interface: + ipv6: fc00:b::50/64 + + ARISTA79T1: + properties: + - common + bgp: + router-id: 0.12.0.81 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::141 + interfaces: + Loopback0: + ipv6: fc00:c:c:51::1/128 + Ethernet1: + ipv6: fc00:a::142/126 + bp_interface: + ipv6: fc00:b::51/64 + + ARISTA80T1: + properties: + - common + bgp: + router-id: 0.12.0.82 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::145 + interfaces: + Loopback0: + ipv6: fc00:c:c:52::1/128 + Ethernet1: + ipv6: fc00:a::146/126 + bp_interface: + ipv6: fc00:b::52/64 + + ARISTA81T1: + properties: + - common + bgp: + router-id: 0.12.0.83 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::149 + interfaces: + Loopback0: + ipv6: fc00:c:c:53::1/128 + Ethernet1: + ipv6: fc00:a::14a/126 + bp_interface: + ipv6: fc00:b::53/64 + + ARISTA82T1: + properties: + - common + bgp: + router-id: 0.12.0.84 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::14d + interfaces: + Loopback0: + ipv6: fc00:c:c:54::1/128 + Ethernet1: + ipv6: fc00:a::14e/126 + bp_interface: + ipv6: fc00:b::54/64 + + ARISTA83T1: + properties: + - common + bgp: + router-id: 0.12.0.85 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::151 + interfaces: + Loopback0: + ipv6: fc00:c:c:55::1/128 + Ethernet1: + ipv6: fc00:a::152/126 + bp_interface: + ipv6: fc00:b::55/64 + + ARISTA84T1: + properties: + - common + bgp: + router-id: 0.12.0.86 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::155 + interfaces: + Loopback0: + ipv6: fc00:c:c:56::1/128 + Ethernet1: + ipv6: fc00:a::156/126 + bp_interface: + ipv6: fc00:b::56/64 + + ARISTA85T1: + properties: + - common + bgp: + router-id: 0.12.0.87 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::159 + interfaces: + Loopback0: + ipv6: fc00:c:c:57::1/128 + Ethernet1: + ipv6: fc00:a::15a/126 + bp_interface: + ipv6: fc00:b::57/64 + + ARISTA86T1: + properties: + - common + bgp: + router-id: 0.12.0.88 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::15d + interfaces: + Loopback0: + ipv6: fc00:c:c:58::1/128 + Ethernet1: + ipv6: fc00:a::15e/126 + bp_interface: + ipv6: fc00:b::58/64 + + ARISTA87T1: + properties: + - common + bgp: + router-id: 0.12.0.89 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::161 + interfaces: + Loopback0: + ipv6: fc00:c:c:59::1/128 + Ethernet1: + ipv6: fc00:a::162/126 + bp_interface: + ipv6: fc00:b::59/64 + + ARISTA88T1: + properties: + - common + bgp: + router-id: 0.12.0.90 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::165 + interfaces: + Loopback0: + ipv6: fc00:c:c:5a::1/128 + Ethernet1: + ipv6: fc00:a::166/126 + bp_interface: + ipv6: fc00:b::5a/64 + + ARISTA89T1: + properties: + - common + bgp: + router-id: 0.12.0.91 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::169 + interfaces: + Loopback0: + ipv6: fc00:c:c:5b::1/128 + Ethernet1: + ipv6: fc00:a::16a/126 + bp_interface: + ipv6: fc00:b::5b/64 + + ARISTA90T1: + properties: + - common + bgp: + router-id: 0.12.0.92 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::16d + interfaces: + Loopback0: + ipv6: fc00:c:c:5c::1/128 + Ethernet1: + ipv6: fc00:a::16e/126 + bp_interface: + ipv6: fc00:b::5c/64 + + ARISTA91T1: + properties: + - common + bgp: + router-id: 0.12.0.93 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::171 + interfaces: + Loopback0: + ipv6: fc00:c:c:5d::1/128 + Ethernet1: + ipv6: fc00:a::172/126 + bp_interface: + ipv6: fc00:b::5d/64 + + ARISTA92T1: + properties: + - common + bgp: + router-id: 0.12.0.94 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::175 + interfaces: + Loopback0: + ipv6: fc00:c:c:5e::1/128 + Ethernet1: + ipv6: fc00:a::176/126 + bp_interface: + ipv6: fc00:b::5e/64 + + ARISTA93T1: + properties: + - common + bgp: + router-id: 0.12.0.95 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::179 + interfaces: + Loopback0: + ipv6: fc00:c:c:5f::1/128 + Ethernet1: + ipv6: fc00:a::17a/126 + bp_interface: + ipv6: fc00:b::5f/64 + + ARISTA94T1: + properties: + - common + bgp: + router-id: 0.12.0.96 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::17d + interfaces: + Loopback0: + ipv6: fc00:c:c:60::1/128 + Ethernet1: + ipv6: fc00:a::17e/126 + bp_interface: + ipv6: fc00:b::60/64 + + ARISTA95T1: + properties: + - common + bgp: + router-id: 0.12.0.97 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::181 + interfaces: + Loopback0: + ipv6: fc00:c:c:61::1/128 + Ethernet1: + ipv6: fc00:a::182/126 + bp_interface: + ipv6: fc00:b::61/64 + + ARISTA96T1: + properties: + - common + bgp: + router-id: 0.12.0.98 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::185 + interfaces: + Loopback0: + ipv6: fc00:c:c:62::1/128 + Ethernet1: + ipv6: fc00:a::186/126 + bp_interface: + ipv6: fc00:b::62/64 + + ARISTA97T1: + properties: + - common + bgp: + router-id: 0.12.0.99 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::189 + interfaces: + Loopback0: + ipv6: fc00:c:c:63::1/128 + Ethernet1: + ipv6: fc00:a::18a/126 + bp_interface: + ipv6: fc00:b::63/64 + + ARISTA98T1: + properties: + - common + bgp: + router-id: 0.12.0.100 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::18d + interfaces: + Loopback0: + ipv6: fc00:c:c:64::1/128 + Ethernet1: + ipv6: fc00:a::18e/126 + bp_interface: + ipv6: fc00:b::64/64 + + ARISTA99T1: + properties: + - common + bgp: + router-id: 0.12.0.101 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::191 + interfaces: + Loopback0: + ipv6: fc00:c:c:65::1/128 + Ethernet1: + ipv6: fc00:a::192/126 + bp_interface: + ipv6: fc00:b::65/64 + + ARISTA100T1: + properties: + - common + bgp: + router-id: 0.12.0.102 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::195 + interfaces: + Loopback0: + ipv6: fc00:c:c:66::1/128 + Ethernet1: + ipv6: fc00:a::196/126 + bp_interface: + ipv6: fc00:b::66/64 + + ARISTA101T1: + properties: + - common + bgp: + router-id: 0.12.0.103 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::199 + interfaces: + Loopback0: + ipv6: fc00:c:c:67::1/128 + Ethernet1: + ipv6: fc00:a::19a/126 + bp_interface: + ipv6: fc00:b::67/64 + + ARISTA102T1: + properties: + - common + bgp: + router-id: 0.12.0.104 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::19d + interfaces: + Loopback0: + ipv6: fc00:c:c:68::1/128 + Ethernet1: + ipv6: fc00:a::19e/126 + bp_interface: + ipv6: fc00:b::68/64 + + ARISTA103T1: + properties: + - common + bgp: + router-id: 0.12.0.105 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:69::1/128 + Ethernet1: + ipv6: fc00:a::1a2/126 + bp_interface: + ipv6: fc00:b::69/64 + + ARISTA104T1: + properties: + - common + bgp: + router-id: 0.12.0.106 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6a::1/128 + Ethernet1: + ipv6: fc00:a::1a6/126 + bp_interface: + ipv6: fc00:b::6a/64 + + ARISTA105T1: + properties: + - common + bgp: + router-id: 0.12.0.107 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6b::1/128 + Ethernet1: + ipv6: fc00:a::1aa/126 + bp_interface: + ipv6: fc00:b::6b/64 + + ARISTA106T1: + properties: + - common + bgp: + router-id: 0.12.0.108 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1ad + interfaces: + Loopback0: + ipv6: fc00:c:c:6c::1/128 + Ethernet1: + ipv6: fc00:a::1ae/126 + bp_interface: + ipv6: fc00:b::6c/64 + + ARISTA107T1: + properties: + - common + bgp: + router-id: 0.12.0.109 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:6d::1/128 + Ethernet1: + ipv6: fc00:a::1b2/126 + bp_interface: + ipv6: fc00:b::6d/64 + + ARISTA108T1: + properties: + - common + bgp: + router-id: 0.12.0.110 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6e::1/128 + Ethernet1: + ipv6: fc00:a::1b6/126 + bp_interface: + ipv6: fc00:b::6e/64 + + ARISTA109T1: + properties: + - common + bgp: + router-id: 0.12.0.111 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6f::1/128 + Ethernet1: + ipv6: fc00:a::1ba/126 + bp_interface: + ipv6: fc00:b::6f/64 + + ARISTA110T1: + properties: + - common + bgp: + router-id: 0.12.0.112 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1bd + interfaces: + Loopback0: + ipv6: fc00:c:c:70::1/128 + Ethernet1: + ipv6: fc00:a::1be/126 + bp_interface: + ipv6: fc00:b::70/64 + + ARISTA111T1: + properties: + - common + bgp: + router-id: 0.12.0.113 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:71::1/128 + Ethernet1: + ipv6: fc00:a::1c2/126 + bp_interface: + ipv6: fc00:b::71/64 + + ARISTA112T1: + properties: + - common + bgp: + router-id: 0.12.0.114 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:72::1/128 + Ethernet1: + ipv6: fc00:a::1c6/126 + bp_interface: + ipv6: fc00:b::72/64 + + ARISTA113T1: + properties: + - common + bgp: + router-id: 0.12.0.115 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:73::1/128 + Ethernet1: + ipv6: fc00:a::1ca/126 + bp_interface: + ipv6: fc00:b::73/64 + + ARISTA114T1: + properties: + - common + bgp: + router-id: 0.12.0.116 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1cd + interfaces: + Loopback0: + ipv6: fc00:c:c:74::1/128 + Ethernet1: + ipv6: fc00:a::1ce/126 + bp_interface: + ipv6: fc00:b::74/64 + + ARISTA115T1: + properties: + - common + bgp: + router-id: 0.12.0.117 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:75::1/128 + Ethernet1: + ipv6: fc00:a::1d2/126 + bp_interface: + ipv6: fc00:b::75/64 + + ARISTA116T1: + properties: + - common + bgp: + router-id: 0.12.0.118 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:76::1/128 + Ethernet1: + ipv6: fc00:a::1d6/126 + bp_interface: + ipv6: fc00:b::76/64 + + ARISTA117T1: + properties: + - common + bgp: + router-id: 0.12.0.119 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:77::1/128 + Ethernet1: + ipv6: fc00:a::1da/126 + bp_interface: + ipv6: fc00:b::77/64 + + ARISTA118T1: + properties: + - common + bgp: + router-id: 0.12.0.120 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1dd + interfaces: + Loopback0: + ipv6: fc00:c:c:78::1/128 + Ethernet1: + ipv6: fc00:a::1de/126 + bp_interface: + ipv6: fc00:b::78/64 + + ARISTA119T1: + properties: + - common + bgp: + router-id: 0.12.0.121 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:79::1/128 + Ethernet1: + ipv6: fc00:a::1e2/126 + bp_interface: + ipv6: fc00:b::79/64 + + ARISTA120T1: + properties: + - common + bgp: + router-id: 0.12.0.122 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7a::1/128 + Ethernet1: + ipv6: fc00:a::1e6/126 + bp_interface: + ipv6: fc00:b::7a/64 + + ARISTA121T1: + properties: + - common + bgp: + router-id: 0.12.0.123 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7b::1/128 + Ethernet1: + ipv6: fc00:a::1ea/126 + bp_interface: + ipv6: fc00:b::7b/64 + + ARISTA122T1: + properties: + - common + bgp: + router-id: 0.12.0.124 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1ed + interfaces: + Loopback0: + ipv6: fc00:c:c:7c::1/128 + Ethernet1: + ipv6: fc00:a::1ee/126 + bp_interface: + ipv6: fc00:b::7c/64 + + ARISTA123T1: + properties: + - common + bgp: + router-id: 0.12.0.125 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:7d::1/128 + Ethernet1: + ipv6: fc00:a::1f2/126 + bp_interface: + ipv6: fc00:b::7d/64 + + ARISTA124T1: + properties: + - common + bgp: + router-id: 0.12.0.126 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7e::1/128 + Ethernet1: + ipv6: fc00:a::1f6/126 + bp_interface: + ipv6: fc00:b::7e/64 + + ARISTA125T1: + properties: + - common + bgp: + router-id: 0.12.0.127 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7f::1/128 + Ethernet1: + ipv6: fc00:a::1fa/126 + bp_interface: + ipv6: fc00:b::7f/64 + + ARISTA126T1: + properties: + - common + bgp: + router-id: 0.12.0.128 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1fd + interfaces: + Loopback0: + ipv6: fc00:c:c:80::1/128 + Ethernet1: + ipv6: fc00:a::1fe/126 + bp_interface: + ipv6: fc00:b::80/64 + + ARISTA127T1: + properties: + - common + bgp: + router-id: 0.12.0.129 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::201 + interfaces: + Loopback0: + ipv6: fc00:c:c:81::1/128 + Ethernet1: + ipv6: fc00:a::202/126 + bp_interface: + ipv6: fc00:b::81/64 + + ARISTA128T1: + properties: + - common + bgp: + router-id: 0.12.0.130 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::205 + interfaces: + Loopback0: + ipv6: fc00:c:c:82::1/128 + Ethernet1: + ipv6: fc00:a::206/126 + bp_interface: + ipv6: fc00:b::82/64 + + ARISTA129T1: + properties: + - common + bgp: + router-id: 0.12.0.131 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::209 + interfaces: + Loopback0: + ipv6: fc00:c:c:83::1/128 + Ethernet1: + ipv6: fc00:a::20a/126 + bp_interface: + ipv6: fc00:b::83/64 + + ARISTA130T1: + properties: + - common + bgp: + router-id: 0.12.0.132 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::20d + interfaces: + Loopback0: + ipv6: fc00:c:c:84::1/128 + Ethernet1: + ipv6: fc00:a::20e/126 + bp_interface: + ipv6: fc00:b::84/64 + + ARISTA131T1: + properties: + - common + bgp: + router-id: 0.12.0.133 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::211 + interfaces: + Loopback0: + ipv6: fc00:c:c:85::1/128 + Ethernet1: + ipv6: fc00:a::212/126 + bp_interface: + ipv6: fc00:b::85/64 + + ARISTA132T1: + properties: + - common + bgp: + router-id: 0.12.0.134 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::215 + interfaces: + Loopback0: + ipv6: fc00:c:c:86::1/128 + Ethernet1: + ipv6: fc00:a::216/126 + bp_interface: + ipv6: fc00:b::86/64 + + ARISTA133T1: + properties: + - common + bgp: + router-id: 0.12.0.135 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::219 + interfaces: + Loopback0: + ipv6: fc00:c:c:87::1/128 + Ethernet1: + ipv6: fc00:a::21a/126 + bp_interface: + ipv6: fc00:b::87/64 + + ARISTA134T1: + properties: + - common + bgp: + router-id: 0.12.0.136 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::21d + interfaces: + Loopback0: + ipv6: fc00:c:c:88::1/128 + Ethernet1: + ipv6: fc00:a::21e/126 + bp_interface: + ipv6: fc00:b::88/64 + + ARISTA135T1: + properties: + - common + bgp: + router-id: 0.12.0.137 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::221 + interfaces: + Loopback0: + ipv6: fc00:c:c:89::1/128 + Ethernet1: + ipv6: fc00:a::222/126 + bp_interface: + ipv6: fc00:b::89/64 + + ARISTA136T1: + properties: + - common + bgp: + router-id: 0.12.0.138 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::225 + interfaces: + Loopback0: + ipv6: fc00:c:c:8a::1/128 + Ethernet1: + ipv6: fc00:a::226/126 + bp_interface: + ipv6: fc00:b::8a/64 + + ARISTA137T1: + properties: + - common + bgp: + router-id: 0.12.0.139 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::229 + interfaces: + Loopback0: + ipv6: fc00:c:c:8b::1/128 + Ethernet1: + ipv6: fc00:a::22a/126 + bp_interface: + ipv6: fc00:b::8b/64 + + ARISTA138T1: + properties: + - common + bgp: + router-id: 0.12.0.140 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::22d + interfaces: + Loopback0: + ipv6: fc00:c:c:8c::1/128 + Ethernet1: + ipv6: fc00:a::22e/126 + bp_interface: + ipv6: fc00:b::8c/64 + + ARISTA139T1: + properties: + - common + bgp: + router-id: 0.12.0.141 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::231 + interfaces: + Loopback0: + ipv6: fc00:c:c:8d::1/128 + Ethernet1: + ipv6: fc00:a::232/126 + bp_interface: + ipv6: fc00:b::8d/64 + + ARISTA140T1: + properties: + - common + bgp: + router-id: 0.12.0.142 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::235 + interfaces: + Loopback0: + ipv6: fc00:c:c:8e::1/128 + Ethernet1: + ipv6: fc00:a::236/126 + bp_interface: + ipv6: fc00:b::8e/64 + + ARISTA141T1: + properties: + - common + bgp: + router-id: 0.12.0.143 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::239 + interfaces: + Loopback0: + ipv6: fc00:c:c:8f::1/128 + Ethernet1: + ipv6: fc00:a::23a/126 + bp_interface: + ipv6: fc00:b::8f/64 + + ARISTA142T1: + properties: + - common + bgp: + router-id: 0.12.0.144 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::23d + interfaces: + Loopback0: + ipv6: fc00:c:c:90::1/128 + Ethernet1: + ipv6: fc00:a::23e/126 + bp_interface: + ipv6: fc00:b::90/64 + + ARISTA143T1: + properties: + - common + bgp: + router-id: 0.12.0.145 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::241 + interfaces: + Loopback0: + ipv6: fc00:c:c:91::1/128 + Ethernet1: + ipv6: fc00:a::242/126 + bp_interface: + ipv6: fc00:b::91/64 + + ARISTA144T1: + properties: + - common + bgp: + router-id: 0.12.0.146 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::245 + interfaces: + Loopback0: + ipv6: fc00:c:c:92::1/128 + Ethernet1: + ipv6: fc00:a::246/126 + bp_interface: + ipv6: fc00:b::92/64 + + ARISTA145T1: + properties: + - common + bgp: + router-id: 0.12.0.147 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::249 + interfaces: + Loopback0: + ipv6: fc00:c:c:93::1/128 + Ethernet1: + ipv6: fc00:a::24a/126 + bp_interface: + ipv6: fc00:b::93/64 + + ARISTA146T1: + properties: + - common + bgp: + router-id: 0.12.0.148 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::24d + interfaces: + Loopback0: + ipv6: fc00:c:c:94::1/128 + Ethernet1: + ipv6: fc00:a::24e/126 + bp_interface: + ipv6: fc00:b::94/64 + + ARISTA147T1: + properties: + - common + bgp: + router-id: 0.12.0.149 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::251 + interfaces: + Loopback0: + ipv6: fc00:c:c:95::1/128 + Ethernet1: + ipv6: fc00:a::252/126 + bp_interface: + ipv6: fc00:b::95/64 + + ARISTA148T1: + properties: + - common + bgp: + router-id: 0.12.0.150 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::255 + interfaces: + Loopback0: + ipv6: fc00:c:c:96::1/128 + Ethernet1: + ipv6: fc00:a::256/126 + bp_interface: + ipv6: fc00:b::96/64 + + ARISTA149T1: + properties: + - common + bgp: + router-id: 0.12.0.151 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::259 + interfaces: + Loopback0: + ipv6: fc00:c:c:97::1/128 + Ethernet1: + ipv6: fc00:a::25a/126 + bp_interface: + ipv6: fc00:b::97/64 + + ARISTA150T1: + properties: + - common + bgp: + router-id: 0.12.0.152 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::25d + interfaces: + Loopback0: + ipv6: fc00:c:c:98::1/128 + Ethernet1: + ipv6: fc00:a::25e/126 + bp_interface: + ipv6: fc00:b::98/64 + + ARISTA151T1: + properties: + - common + bgp: + router-id: 0.12.0.153 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::261 + interfaces: + Loopback0: + ipv6: fc00:c:c:99::1/128 + Ethernet1: + ipv6: fc00:a::262/126 + bp_interface: + ipv6: fc00:b::99/64 + + ARISTA152T1: + properties: + - common + bgp: + router-id: 0.12.0.154 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::265 + interfaces: + Loopback0: + ipv6: fc00:c:c:9a::1/128 + Ethernet1: + ipv6: fc00:a::266/126 + bp_interface: + ipv6: fc00:b::9a/64 + + ARISTA153T1: + properties: + - common + bgp: + router-id: 0.12.0.155 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::269 + interfaces: + Loopback0: + ipv6: fc00:c:c:9b::1/128 + Ethernet1: + ipv6: fc00:a::26a/126 + bp_interface: + ipv6: fc00:b::9b/64 + + ARISTA154T1: + properties: + - common + bgp: + router-id: 0.12.0.156 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::26d + interfaces: + Loopback0: + ipv6: fc00:c:c:9c::1/128 + Ethernet1: + ipv6: fc00:a::26e/126 + bp_interface: + ipv6: fc00:b::9c/64 + + ARISTA155T1: + properties: + - common + bgp: + router-id: 0.12.0.157 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::271 + interfaces: + Loopback0: + ipv6: fc00:c:c:9d::1/128 + Ethernet1: + ipv6: fc00:a::272/126 + bp_interface: + ipv6: fc00:b::9d/64 + + ARISTA156T1: + properties: + - common + bgp: + router-id: 0.12.0.158 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::275 + interfaces: + Loopback0: + ipv6: fc00:c:c:9e::1/128 + Ethernet1: + ipv6: fc00:a::276/126 + bp_interface: + ipv6: fc00:b::9e/64 + + ARISTA157T1: + properties: + - common + bgp: + router-id: 0.12.0.159 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::279 + interfaces: + Loopback0: + ipv6: fc00:c:c:9f::1/128 + Ethernet1: + ipv6: fc00:a::27a/126 + bp_interface: + ipv6: fc00:b::9f/64 + + ARISTA158T1: + properties: + - common + bgp: + router-id: 0.12.0.160 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::27d + interfaces: + Loopback0: + ipv6: fc00:c:c:a0::1/128 + Ethernet1: + ipv6: fc00:a::27e/126 + bp_interface: + ipv6: fc00:b::a0/64 + + ARISTA159T1: + properties: + - common + bgp: + router-id: 0.12.0.161 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::281 + interfaces: + Loopback0: + ipv6: fc00:c:c:a1::1/128 + Ethernet1: + ipv6: fc00:a::282/126 + bp_interface: + ipv6: fc00:b::a1/64 + + ARISTA160T1: + properties: + - common + bgp: + router-id: 0.12.0.162 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::285 + interfaces: + Loopback0: + ipv6: fc00:c:c:a2::1/128 + Ethernet1: + ipv6: fc00:a::286/126 + bp_interface: + ipv6: fc00:b::a2/64 + + ARISTA161T1: + properties: + - common + bgp: + router-id: 0.12.0.163 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::289 + interfaces: + Loopback0: + ipv6: fc00:c:c:a3::1/128 + Ethernet1: + ipv6: fc00:a::28a/126 + bp_interface: + ipv6: fc00:b::a3/64 + + ARISTA162T1: + properties: + - common + bgp: + router-id: 0.12.0.164 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::28d + interfaces: + Loopback0: + ipv6: fc00:c:c:a4::1/128 + Ethernet1: + ipv6: fc00:a::28e/126 + bp_interface: + ipv6: fc00:b::a4/64 + + ARISTA163T1: + properties: + - common + bgp: + router-id: 0.12.0.165 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::291 + interfaces: + Loopback0: + ipv6: fc00:c:c:a5::1/128 + Ethernet1: + ipv6: fc00:a::292/126 + bp_interface: + ipv6: fc00:b::a5/64 + + ARISTA164T1: + properties: + - common + bgp: + router-id: 0.12.0.166 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::295 + interfaces: + Loopback0: + ipv6: fc00:c:c:a6::1/128 + Ethernet1: + ipv6: fc00:a::296/126 + bp_interface: + ipv6: fc00:b::a6/64 + + ARISTA165T1: + properties: + - common + bgp: + router-id: 0.12.0.167 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::299 + interfaces: + Loopback0: + ipv6: fc00:c:c:a7::1/128 + Ethernet1: + ipv6: fc00:a::29a/126 + bp_interface: + ipv6: fc00:b::a7/64 + + ARISTA166T1: + properties: + - common + bgp: + router-id: 0.12.0.168 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::29d + interfaces: + Loopback0: + ipv6: fc00:c:c:a8::1/128 + Ethernet1: + ipv6: fc00:a::29e/126 + bp_interface: + ipv6: fc00:b::a8/64 + + ARISTA167T1: + properties: + - common + bgp: + router-id: 0.12.0.169 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:a9::1/128 + Ethernet1: + ipv6: fc00:a::2a2/126 + bp_interface: + ipv6: fc00:b::a9/64 + + ARISTA168T1: + properties: + - common + bgp: + router-id: 0.12.0.170 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:aa::1/128 + Ethernet1: + ipv6: fc00:a::2a6/126 + bp_interface: + ipv6: fc00:b::aa/64 + + ARISTA169T1: + properties: + - common + bgp: + router-id: 0.12.0.171 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ab::1/128 + Ethernet1: + ipv6: fc00:a::2aa/126 + bp_interface: + ipv6: fc00:b::ab/64 + + ARISTA170T1: + properties: + - common + bgp: + router-id: 0.12.0.172 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ac::1/128 + Ethernet1: + ipv6: fc00:a::2ae/126 + bp_interface: + ipv6: fc00:b::ac/64 + + ARISTA171T1: + properties: + - common + bgp: + router-id: 0.12.0.173 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ad::1/128 + Ethernet1: + ipv6: fc00:a::2b2/126 + bp_interface: + ipv6: fc00:b::ad/64 + + ARISTA172T1: + properties: + - common + bgp: + router-id: 0.12.0.174 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ae::1/128 + Ethernet1: + ipv6: fc00:a::2b6/126 + bp_interface: + ipv6: fc00:b::ae/64 + + ARISTA173T1: + properties: + - common + bgp: + router-id: 0.12.0.175 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:af::1/128 + Ethernet1: + ipv6: fc00:a::2ba/126 + bp_interface: + ipv6: fc00:b::af/64 + + ARISTA174T1: + properties: + - common + bgp: + router-id: 0.12.0.176 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2bd + interfaces: + Loopback0: + ipv6: fc00:c:c:b0::1/128 + Ethernet1: + ipv6: fc00:a::2be/126 + bp_interface: + ipv6: fc00:b::b0/64 + + ARISTA175T1: + properties: + - common + bgp: + router-id: 0.12.0.177 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b1::1/128 + Ethernet1: + ipv6: fc00:a::2c2/126 + bp_interface: + ipv6: fc00:b::b1/64 + + ARISTA176T1: + properties: + - common + bgp: + router-id: 0.12.0.178 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b2::1/128 + Ethernet1: + ipv6: fc00:a::2c6/126 + bp_interface: + ipv6: fc00:b::b2/64 + + ARISTA177T1: + properties: + - common + bgp: + router-id: 0.12.0.179 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b3::1/128 + Ethernet1: + ipv6: fc00:a::2ca/126 + bp_interface: + ipv6: fc00:b::b3/64 + + ARISTA178T1: + properties: + - common + bgp: + router-id: 0.12.0.180 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2cd + interfaces: + Loopback0: + ipv6: fc00:c:c:b4::1/128 + Ethernet1: + ipv6: fc00:a::2ce/126 + bp_interface: + ipv6: fc00:b::b4/64 + + ARISTA179T1: + properties: + - common + bgp: + router-id: 0.12.0.181 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b5::1/128 + Ethernet1: + ipv6: fc00:a::2d2/126 + bp_interface: + ipv6: fc00:b::b5/64 + + ARISTA180T1: + properties: + - common + bgp: + router-id: 0.12.0.182 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b6::1/128 + Ethernet1: + ipv6: fc00:a::2d6/126 + bp_interface: + ipv6: fc00:b::b6/64 + + ARISTA181T1: + properties: + - common + bgp: + router-id: 0.12.0.183 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b7::1/128 + Ethernet1: + ipv6: fc00:a::2da/126 + bp_interface: + ipv6: fc00:b::b7/64 + + ARISTA182T1: + properties: + - common + bgp: + router-id: 0.12.0.184 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2dd + interfaces: + Loopback0: + ipv6: fc00:c:c:b8::1/128 + Ethernet1: + ipv6: fc00:a::2de/126 + bp_interface: + ipv6: fc00:b::b8/64 + + ARISTA183T1: + properties: + - common + bgp: + router-id: 0.12.0.185 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b9::1/128 + Ethernet1: + ipv6: fc00:a::2e2/126 + bp_interface: + ipv6: fc00:b::b9/64 + + ARISTA184T1: + properties: + - common + bgp: + router-id: 0.12.0.186 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ba::1/128 + Ethernet1: + ipv6: fc00:a::2e6/126 + bp_interface: + ipv6: fc00:b::ba/64 + + ARISTA185T1: + properties: + - common + bgp: + router-id: 0.12.0.187 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bb::1/128 + Ethernet1: + ipv6: fc00:a::2ea/126 + bp_interface: + ipv6: fc00:b::bb/64 + + ARISTA186T1: + properties: + - common + bgp: + router-id: 0.12.0.188 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2ed + interfaces: + Loopback0: + ipv6: fc00:c:c:bc::1/128 + Ethernet1: + ipv6: fc00:a::2ee/126 + bp_interface: + ipv6: fc00:b::bc/64 + + ARISTA187T1: + properties: + - common + bgp: + router-id: 0.12.0.189 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:bd::1/128 + Ethernet1: + ipv6: fc00:a::2f2/126 + bp_interface: + ipv6: fc00:b::bd/64 + + ARISTA188T1: + properties: + - common + bgp: + router-id: 0.12.0.190 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:be::1/128 + Ethernet1: + ipv6: fc00:a::2f6/126 + bp_interface: + ipv6: fc00:b::be/64 + + ARISTA189T1: + properties: + - common + bgp: + router-id: 0.12.0.191 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bf::1/128 + Ethernet1: + ipv6: fc00:a::2fa/126 + bp_interface: + ipv6: fc00:b::bf/64 + + ARISTA190T1: + properties: + - common + bgp: + router-id: 0.12.0.192 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2fd + interfaces: + Loopback0: + ipv6: fc00:c:c:c0::1/128 + Ethernet1: + ipv6: fc00:a::2fe/126 + bp_interface: + ipv6: fc00:b::c0/64 + + ARISTA191T1: + properties: + - common + bgp: + router-id: 0.12.0.193 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::301 + interfaces: + Loopback0: + ipv6: fc00:c:c:c1::1/128 + Ethernet1: + ipv6: fc00:a::302/126 + bp_interface: + ipv6: fc00:b::c1/64 + + ARISTA192T1: + properties: + - common + bgp: + router-id: 0.12.0.194 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::305 + interfaces: + Loopback0: + ipv6: fc00:c:c:c2::1/128 + Ethernet1: + ipv6: fc00:a::306/126 + bp_interface: + ipv6: fc00:b::c2/64 + + ARISTA193T1: + properties: + - common + bgp: + router-id: 0.12.0.195 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::309 + interfaces: + Loopback0: + ipv6: fc00:c:c:c3::1/128 + Ethernet1: + ipv6: fc00:a::30a/126 + bp_interface: + ipv6: fc00:b::c3/64 + + ARISTA194T1: + properties: + - common + bgp: + router-id: 0.12.0.196 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::30d + interfaces: + Loopback0: + ipv6: fc00:c:c:c4::1/128 + Ethernet1: + ipv6: fc00:a::30e/126 + bp_interface: + ipv6: fc00:b::c4/64 + + ARISTA195T1: + properties: + - common + bgp: + router-id: 0.12.0.197 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::311 + interfaces: + Loopback0: + ipv6: fc00:c:c:c5::1/128 + Ethernet1: + ipv6: fc00:a::312/126 + bp_interface: + ipv6: fc00:b::c5/64 + + ARISTA196T1: + properties: + - common + bgp: + router-id: 0.12.0.198 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::315 + interfaces: + Loopback0: + ipv6: fc00:c:c:c6::1/128 + Ethernet1: + ipv6: fc00:a::316/126 + bp_interface: + ipv6: fc00:b::c6/64 + + ARISTA197T1: + properties: + - common + bgp: + router-id: 0.12.0.199 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::319 + interfaces: + Loopback0: + ipv6: fc00:c:c:c7::1/128 + Ethernet1: + ipv6: fc00:a::31a/126 + bp_interface: + ipv6: fc00:b::c7/64 + + ARISTA198T1: + properties: + - common + bgp: + router-id: 0.12.0.200 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::31d + interfaces: + Loopback0: + ipv6: fc00:c:c:c8::1/128 + Ethernet1: + ipv6: fc00:a::31e/126 + bp_interface: + ipv6: fc00:b::c8/64 + + ARISTA199T1: + properties: + - common + bgp: + router-id: 0.12.0.201 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::321 + interfaces: + Loopback0: + ipv6: fc00:c:c:c9::1/128 + Ethernet1: + ipv6: fc00:a::322/126 + bp_interface: + ipv6: fc00:b::c9/64 + + ARISTA200T1: + properties: + - common + bgp: + router-id: 0.12.0.202 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::325 + interfaces: + Loopback0: + ipv6: fc00:c:c:ca::1/128 + Ethernet1: + ipv6: fc00:a::326/126 + bp_interface: + ipv6: fc00:b::ca/64 + + ARISTA201T1: + properties: + - common + bgp: + router-id: 0.12.0.203 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::329 + interfaces: + Loopback0: + ipv6: fc00:c:c:cb::1/128 + Ethernet1: + ipv6: fc00:a::32a/126 + bp_interface: + ipv6: fc00:b::cb/64 + + ARISTA202T1: + properties: + - common + bgp: + router-id: 0.12.0.204 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::32d + interfaces: + Loopback0: + ipv6: fc00:c:c:cc::1/128 + Ethernet1: + ipv6: fc00:a::32e/126 + bp_interface: + ipv6: fc00:b::cc/64 + + ARISTA203T1: + properties: + - common + bgp: + router-id: 0.12.0.205 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::331 + interfaces: + Loopback0: + ipv6: fc00:c:c:cd::1/128 + Ethernet1: + ipv6: fc00:a::332/126 + bp_interface: + ipv6: fc00:b::cd/64 + + ARISTA204T1: + properties: + - common + bgp: + router-id: 0.12.0.206 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::335 + interfaces: + Loopback0: + ipv6: fc00:c:c:ce::1/128 + Ethernet1: + ipv6: fc00:a::336/126 + bp_interface: + ipv6: fc00:b::ce/64 + + ARISTA205T1: + properties: + - common + bgp: + router-id: 0.12.0.207 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::339 + interfaces: + Loopback0: + ipv6: fc00:c:c:cf::1/128 + Ethernet1: + ipv6: fc00:a::33a/126 + bp_interface: + ipv6: fc00:b::cf/64 + + ARISTA206T1: + properties: + - common + bgp: + router-id: 0.12.0.208 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::33d + interfaces: + Loopback0: + ipv6: fc00:c:c:d0::1/128 + Ethernet1: + ipv6: fc00:a::33e/126 + bp_interface: + ipv6: fc00:b::d0/64 + + ARISTA207T1: + properties: + - common + bgp: + router-id: 0.12.0.209 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::341 + interfaces: + Loopback0: + ipv6: fc00:c:c:d1::1/128 + Ethernet1: + ipv6: fc00:a::342/126 + bp_interface: + ipv6: fc00:b::d1/64 + + ARISTA208T1: + properties: + - common + bgp: + router-id: 0.12.0.210 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::345 + interfaces: + Loopback0: + ipv6: fc00:c:c:d2::1/128 + Ethernet1: + ipv6: fc00:a::346/126 + bp_interface: + ipv6: fc00:b::d2/64 + + ARISTA209T1: + properties: + - common + bgp: + router-id: 0.12.0.211 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::349 + interfaces: + Loopback0: + ipv6: fc00:c:c:d3::1/128 + Ethernet1: + ipv6: fc00:a::34a/126 + bp_interface: + ipv6: fc00:b::d3/64 + + ARISTA210T1: + properties: + - common + bgp: + router-id: 0.12.0.212 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::34d + interfaces: + Loopback0: + ipv6: fc00:c:c:d4::1/128 + Ethernet1: + ipv6: fc00:a::34e/126 + bp_interface: + ipv6: fc00:b::d4/64 + + ARISTA211T1: + properties: + - common + bgp: + router-id: 0.12.0.213 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::351 + interfaces: + Loopback0: + ipv6: fc00:c:c:d5::1/128 + Ethernet1: + ipv6: fc00:a::352/126 + bp_interface: + ipv6: fc00:b::d5/64 + + ARISTA212T1: + properties: + - common + bgp: + router-id: 0.12.0.214 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::355 + interfaces: + Loopback0: + ipv6: fc00:c:c:d6::1/128 + Ethernet1: + ipv6: fc00:a::356/126 + bp_interface: + ipv6: fc00:b::d6/64 + + ARISTA213T1: + properties: + - common + bgp: + router-id: 0.12.0.215 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::359 + interfaces: + Loopback0: + ipv6: fc00:c:c:d7::1/128 + Ethernet1: + ipv6: fc00:a::35a/126 + bp_interface: + ipv6: fc00:b::d7/64 + + ARISTA214T1: + properties: + - common + bgp: + router-id: 0.12.0.216 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::35d + interfaces: + Loopback0: + ipv6: fc00:c:c:d8::1/128 + Ethernet1: + ipv6: fc00:a::35e/126 + bp_interface: + ipv6: fc00:b::d8/64 + + ARISTA215T1: + properties: + - common + bgp: + router-id: 0.12.0.217 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::361 + interfaces: + Loopback0: + ipv6: fc00:c:c:d9::1/128 + Ethernet1: + ipv6: fc00:a::362/126 + bp_interface: + ipv6: fc00:b::d9/64 + + ARISTA216T1: + properties: + - common + bgp: + router-id: 0.12.0.218 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::365 + interfaces: + Loopback0: + ipv6: fc00:c:c:da::1/128 + Ethernet1: + ipv6: fc00:a::366/126 + bp_interface: + ipv6: fc00:b::da/64 + + ARISTA217T1: + properties: + - common + bgp: + router-id: 0.12.0.219 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::369 + interfaces: + Loopback0: + ipv6: fc00:c:c:db::1/128 + Ethernet1: + ipv6: fc00:a::36a/126 + bp_interface: + ipv6: fc00:b::db/64 + + ARISTA218T1: + properties: + - common + bgp: + router-id: 0.12.0.220 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::36d + interfaces: + Loopback0: + ipv6: fc00:c:c:dc::1/128 + Ethernet1: + ipv6: fc00:a::36e/126 + bp_interface: + ipv6: fc00:b::dc/64 + + ARISTA219T1: + properties: + - common + bgp: + router-id: 0.12.0.221 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::371 + interfaces: + Loopback0: + ipv6: fc00:c:c:dd::1/128 + Ethernet1: + ipv6: fc00:a::372/126 + bp_interface: + ipv6: fc00:b::dd/64 + + ARISTA220T1: + properties: + - common + bgp: + router-id: 0.12.0.222 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::375 + interfaces: + Loopback0: + ipv6: fc00:c:c:de::1/128 + Ethernet1: + ipv6: fc00:a::376/126 + bp_interface: + ipv6: fc00:b::de/64 + + ARISTA221T1: + properties: + - common + bgp: + router-id: 0.12.0.223 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::379 + interfaces: + Loopback0: + ipv6: fc00:c:c:df::1/128 + Ethernet1: + ipv6: fc00:a::37a/126 + bp_interface: + ipv6: fc00:b::df/64 + + ARISTA222T1: + properties: + - common + bgp: + router-id: 0.12.0.224 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::37d + interfaces: + Loopback0: + ipv6: fc00:c:c:e0::1/128 + Ethernet1: + ipv6: fc00:a::37e/126 + bp_interface: + ipv6: fc00:b::e0/64 + + ARISTA223T1: + properties: + - common + bgp: + router-id: 0.12.0.225 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::381 + interfaces: + Loopback0: + ipv6: fc00:c:c:e1::1/128 + Ethernet1: + ipv6: fc00:a::382/126 + bp_interface: + ipv6: fc00:b::e1/64 + + ARISTA224T1: + properties: + - common + bgp: + router-id: 0.12.0.226 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::385 + interfaces: + Loopback0: + ipv6: fc00:c:c:e2::1/128 + Ethernet1: + ipv6: fc00:a::386/126 + bp_interface: + ipv6: fc00:b::e2/64 + + ARISTA225T1: + properties: + - common + bgp: + router-id: 0.12.0.227 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::389 + interfaces: + Loopback0: + ipv6: fc00:c:c:e3::1/128 + Ethernet1: + ipv6: fc00:a::38a/126 + bp_interface: + ipv6: fc00:b::e3/64 + + ARISTA226T1: + properties: + - common + bgp: + router-id: 0.12.0.228 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::38d + interfaces: + Loopback0: + ipv6: fc00:c:c:e4::1/128 + Ethernet1: + ipv6: fc00:a::38e/126 + bp_interface: + ipv6: fc00:b::e4/64 + + ARISTA227T1: + properties: + - common + bgp: + router-id: 0.12.0.229 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::391 + interfaces: + Loopback0: + ipv6: fc00:c:c:e5::1/128 + Ethernet1: + ipv6: fc00:a::392/126 + bp_interface: + ipv6: fc00:b::e5/64 + + ARISTA228T1: + properties: + - common + bgp: + router-id: 0.12.0.230 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::395 + interfaces: + Loopback0: + ipv6: fc00:c:c:e6::1/128 + Ethernet1: + ipv6: fc00:a::396/126 + bp_interface: + ipv6: fc00:b::e6/64 + + ARISTA229T1: + properties: + - common + bgp: + router-id: 0.12.0.231 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::399 + interfaces: + Loopback0: + ipv6: fc00:c:c:e7::1/128 + Ethernet1: + ipv6: fc00:a::39a/126 + bp_interface: + ipv6: fc00:b::e7/64 + + ARISTA230T1: + properties: + - common + bgp: + router-id: 0.12.0.232 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::39d + interfaces: + Loopback0: + ipv6: fc00:c:c:e8::1/128 + Ethernet1: + ipv6: fc00:a::39e/126 + bp_interface: + ipv6: fc00:b::e8/64 + + ARISTA231T1: + properties: + - common + bgp: + router-id: 0.12.0.233 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:e9::1/128 + Ethernet1: + ipv6: fc00:a::3a2/126 + bp_interface: + ipv6: fc00:b::e9/64 + + ARISTA232T1: + properties: + - common + bgp: + router-id: 0.12.0.234 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ea::1/128 + Ethernet1: + ipv6: fc00:a::3a6/126 + bp_interface: + ipv6: fc00:b::ea/64 + + ARISTA233T1: + properties: + - common + bgp: + router-id: 0.12.0.235 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:eb::1/128 + Ethernet1: + ipv6: fc00:a::3aa/126 + bp_interface: + ipv6: fc00:b::eb/64 + + ARISTA234T1: + properties: + - common + bgp: + router-id: 0.12.0.236 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ec::1/128 + Ethernet1: + ipv6: fc00:a::3ae/126 + bp_interface: + ipv6: fc00:b::ec/64 + + ARISTA235T1: + properties: + - common + bgp: + router-id: 0.12.0.237 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ed::1/128 + Ethernet1: + ipv6: fc00:a::3b2/126 + bp_interface: + ipv6: fc00:b::ed/64 + + ARISTA236T1: + properties: + - common + bgp: + router-id: 0.12.0.238 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ee::1/128 + Ethernet1: + ipv6: fc00:a::3b6/126 + bp_interface: + ipv6: fc00:b::ee/64 + + ARISTA237T1: + properties: + - common + bgp: + router-id: 0.12.0.239 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ef::1/128 + Ethernet1: + ipv6: fc00:a::3ba/126 + bp_interface: + ipv6: fc00:b::ef/64 + + ARISTA238T1: + properties: + - common + bgp: + router-id: 0.12.0.240 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3bd + interfaces: + Loopback0: + ipv6: fc00:c:c:f0::1/128 + Ethernet1: + ipv6: fc00:a::3be/126 + bp_interface: + ipv6: fc00:b::f0/64 + + ARISTA239T1: + properties: + - common + bgp: + router-id: 0.12.0.241 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f1::1/128 + Ethernet1: + ipv6: fc00:a::3c2/126 + bp_interface: + ipv6: fc00:b::f1/64 + + ARISTA240T1: + properties: + - common + bgp: + router-id: 0.12.0.242 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f2::1/128 + Ethernet1: + ipv6: fc00:a::3c6/126 + bp_interface: + ipv6: fc00:b::f2/64 + + ARISTA241T1: + properties: + - common + bgp: + router-id: 0.12.0.243 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f3::1/128 + Ethernet1: + ipv6: fc00:a::3ca/126 + bp_interface: + ipv6: fc00:b::f3/64 + + ARISTA242T1: + properties: + - common + bgp: + router-id: 0.12.0.244 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3cd + interfaces: + Loopback0: + ipv6: fc00:c:c:f4::1/128 + Ethernet1: + ipv6: fc00:a::3ce/126 + bp_interface: + ipv6: fc00:b::f4/64 + + ARISTA243T1: + properties: + - common + bgp: + router-id: 0.12.0.245 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f5::1/128 + Ethernet1: + ipv6: fc00:a::3d2/126 + bp_interface: + ipv6: fc00:b::f5/64 + + ARISTA244T1: + properties: + - common + bgp: + router-id: 0.12.0.246 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f6::1/128 + Ethernet1: + ipv6: fc00:a::3d6/126 + bp_interface: + ipv6: fc00:b::f6/64 + + ARISTA245T1: + properties: + - common + bgp: + router-id: 0.12.0.247 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f7::1/128 + Ethernet1: + ipv6: fc00:a::3da/126 + bp_interface: + ipv6: fc00:b::f7/64 + + ARISTA246T1: + properties: + - common + bgp: + router-id: 0.12.0.248 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3dd + interfaces: + Loopback0: + ipv6: fc00:c:c:f8::1/128 + Ethernet1: + ipv6: fc00:a::3de/126 + bp_interface: + ipv6: fc00:b::f8/64 + + ARISTA247T1: + properties: + - common + bgp: + router-id: 0.12.0.249 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f9::1/128 + Ethernet1: + ipv6: fc00:a::3e2/126 + bp_interface: + ipv6: fc00:b::f9/64 + + ARISTA248T1: + properties: + - common + bgp: + router-id: 0.12.0.250 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fa::1/128 + Ethernet1: + ipv6: fc00:a::3e6/126 + bp_interface: + ipv6: fc00:b::fa/64 + + ARISTA249T1: + properties: + - common + bgp: + router-id: 0.12.0.251 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:fb::1/128 + Ethernet1: + ipv6: fc00:a::3ea/126 + bp_interface: + ipv6: fc00:b::fb/64 + + ARISTA250T1: + properties: + - common + bgp: + router-id: 0.12.0.252 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3ed + interfaces: + Loopback0: + ipv6: fc00:c:c:fc::1/128 + Ethernet1: + ipv6: fc00:a::3ee/126 + bp_interface: + ipv6: fc00:b::fc/64 + + ARISTA251T1: + properties: + - common + bgp: + router-id: 0.12.0.253 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:fd::1/128 + Ethernet1: + ipv6: fc00:a::3f2/126 + bp_interface: + ipv6: fc00:b::fd/64 + + ARISTA252T1: + properties: + - common + bgp: + router-id: 0.12.0.254 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fe::1/128 + Ethernet1: + ipv6: fc00:a::3f6/126 + bp_interface: + ipv6: fc00:b::fe/64 + + ARISTA253T1: + properties: + - common + bgp: + router-id: 0.12.0.255 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ff::1/128 + Ethernet1: + ipv6: fc00:a::3fa/126 + bp_interface: + ipv6: fc00:b::ff/64 + + ARISTA254T1: + properties: + - common + bgp: + router-id: 0.12.1.0 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3fd + interfaces: + Loopback0: + ipv6: fc00:c:c:100::1/128 + Ethernet1: + ipv6: fc00:a::3fe/126 + bp_interface: + ipv6: fc00:b::100/64 + + ARISTA01PT0: + properties: + - common + bgp: + asn: 4200000000 + peers: + 4200000000: + - fc00:a::401 + interfaces: + Loopback0: + ipv6: fc00:c:c:101::1/128 + Ethernet1: + ipv6: fc00:a::402/126 + bp_interface: + ipv6: fc00:b::101/64 diff --git a/ansible/vars/topo_t0-isolated-d2u254s2.yml b/ansible/vars/topo_t0-isolated-d2u254s2.yml new file mode 100644 index 00000000000..56858939596 --- /dev/null +++ b/ansible/vars/topo_t0-isolated-d2u254s2.yml @@ -0,0 +1,5402 @@ +topology: + host_interfaces: + - 0 + - 1 + VMs: + ARISTA01T1: + vlans: + - 2 + vm_offset: 0 + ARISTA02T1: + vlans: + - 3 + vm_offset: 1 + ARISTA03T1: + vlans: + - 4 + vm_offset: 2 + ARISTA04T1: + vlans: + - 5 + vm_offset: 3 + ARISTA05T1: + vlans: + - 6 + vm_offset: 4 + ARISTA06T1: + vlans: + - 7 + vm_offset: 5 + ARISTA07T1: + vlans: + - 8 + vm_offset: 6 + ARISTA08T1: + vlans: + - 9 + vm_offset: 7 + ARISTA09T1: + vlans: + - 10 + vm_offset: 8 + ARISTA10T1: + vlans: + - 11 + vm_offset: 9 + ARISTA11T1: + vlans: + - 12 + vm_offset: 10 + ARISTA12T1: + vlans: + - 13 + vm_offset: 11 + ARISTA13T1: + vlans: + - 14 + vm_offset: 12 + ARISTA14T1: + vlans: + - 15 + vm_offset: 13 + ARISTA15T1: + vlans: + - 16 + vm_offset: 14 + ARISTA16T1: + vlans: + - 17 + vm_offset: 15 + ARISTA17T1: + vlans: + - 18 + vm_offset: 16 + ARISTA18T1: + vlans: + - 19 + vm_offset: 17 + ARISTA19T1: + vlans: + - 20 + vm_offset: 18 + ARISTA20T1: + vlans: + - 21 + vm_offset: 19 + ARISTA21T1: + vlans: + - 22 + vm_offset: 20 + ARISTA22T1: + vlans: + - 23 + vm_offset: 21 + ARISTA23T1: + vlans: + - 24 + vm_offset: 22 + ARISTA24T1: + vlans: + - 25 + vm_offset: 23 + ARISTA25T1: + vlans: + - 26 + vm_offset: 24 + ARISTA26T1: + vlans: + - 27 + vm_offset: 25 + ARISTA27T1: + vlans: + - 28 + vm_offset: 26 + ARISTA28T1: + vlans: + - 29 + vm_offset: 27 + ARISTA29T1: + vlans: + - 30 + vm_offset: 28 + ARISTA30T1: + vlans: + - 31 + vm_offset: 29 + ARISTA31T1: + vlans: + - 32 + vm_offset: 30 + ARISTA32T1: + vlans: + - 33 + vm_offset: 31 + ARISTA33T1: + vlans: + - 34 + vm_offset: 32 + ARISTA34T1: + vlans: + - 35 + vm_offset: 33 + ARISTA35T1: + vlans: + - 36 + vm_offset: 34 + ARISTA36T1: + vlans: + - 37 + vm_offset: 35 + ARISTA37T1: + vlans: + - 38 + vm_offset: 36 + ARISTA38T1: + vlans: + - 39 + vm_offset: 37 + ARISTA39T1: + vlans: + - 40 + vm_offset: 38 + ARISTA40T1: + vlans: + - 41 + vm_offset: 39 + ARISTA41T1: + vlans: + - 42 + vm_offset: 40 + ARISTA42T1: + vlans: + - 43 + vm_offset: 41 + ARISTA43T1: + vlans: + - 44 + vm_offset: 42 + ARISTA44T1: + vlans: + - 45 + vm_offset: 43 + ARISTA45T1: + vlans: + - 46 + vm_offset: 44 + ARISTA46T1: + vlans: + - 47 + vm_offset: 45 + ARISTA47T1: + vlans: + - 48 + vm_offset: 46 + ARISTA48T1: + vlans: + - 49 + vm_offset: 47 + ARISTA49T1: + vlans: + - 50 + vm_offset: 48 + ARISTA50T1: + vlans: + - 51 + vm_offset: 49 + ARISTA51T1: + vlans: + - 52 + vm_offset: 50 + ARISTA52T1: + vlans: + - 53 + vm_offset: 51 + ARISTA53T1: + vlans: + - 54 + vm_offset: 52 + ARISTA54T1: + vlans: + - 55 + vm_offset: 53 + ARISTA55T1: + vlans: + - 56 + vm_offset: 54 + ARISTA56T1: + vlans: + - 57 + vm_offset: 55 + ARISTA57T1: + vlans: + - 58 + vm_offset: 56 + ARISTA58T1: + vlans: + - 59 + vm_offset: 57 + ARISTA59T1: + vlans: + - 60 + vm_offset: 58 + ARISTA60T1: + vlans: + - 61 + vm_offset: 59 + ARISTA61T1: + vlans: + - 62 + vm_offset: 60 + ARISTA62T1: + vlans: + - 63 + vm_offset: 61 + ARISTA63T1: + vlans: + - 64 + vm_offset: 62 + ARISTA64T1: + vlans: + - 65 + vm_offset: 63 + ARISTA65T1: + vlans: + - 66 + vm_offset: 64 + ARISTA66T1: + vlans: + - 67 + vm_offset: 65 + ARISTA67T1: + vlans: + - 68 + vm_offset: 66 + ARISTA68T1: + vlans: + - 69 + vm_offset: 67 + ARISTA69T1: + vlans: + - 70 + vm_offset: 68 + ARISTA70T1: + vlans: + - 71 + vm_offset: 69 + ARISTA71T1: + vlans: + - 72 + vm_offset: 70 + ARISTA72T1: + vlans: + - 73 + vm_offset: 71 + ARISTA73T1: + vlans: + - 74 + vm_offset: 72 + ARISTA74T1: + vlans: + - 75 + vm_offset: 73 + ARISTA75T1: + vlans: + - 76 + vm_offset: 74 + ARISTA76T1: + vlans: + - 77 + vm_offset: 75 + ARISTA77T1: + vlans: + - 78 + vm_offset: 76 + ARISTA78T1: + vlans: + - 79 + vm_offset: 77 + ARISTA79T1: + vlans: + - 80 + vm_offset: 78 + ARISTA80T1: + vlans: + - 81 + vm_offset: 79 + ARISTA81T1: + vlans: + - 82 + vm_offset: 80 + ARISTA82T1: + vlans: + - 83 + vm_offset: 81 + ARISTA83T1: + vlans: + - 84 + vm_offset: 82 + ARISTA84T1: + vlans: + - 85 + vm_offset: 83 + ARISTA85T1: + vlans: + - 86 + vm_offset: 84 + ARISTA86T1: + vlans: + - 87 + vm_offset: 85 + ARISTA87T1: + vlans: + - 88 + vm_offset: 86 + ARISTA88T1: + vlans: + - 89 + vm_offset: 87 + ARISTA89T1: + vlans: + - 90 + vm_offset: 88 + ARISTA90T1: + vlans: + - 91 + vm_offset: 89 + ARISTA91T1: + vlans: + - 92 + vm_offset: 90 + ARISTA92T1: + vlans: + - 93 + vm_offset: 91 + ARISTA93T1: + vlans: + - 94 + vm_offset: 92 + ARISTA94T1: + vlans: + - 95 + vm_offset: 93 + ARISTA95T1: + vlans: + - 96 + vm_offset: 94 + ARISTA96T1: + vlans: + - 97 + vm_offset: 95 + ARISTA97T1: + vlans: + - 98 + vm_offset: 96 + ARISTA98T1: + vlans: + - 99 + vm_offset: 97 + ARISTA99T1: + vlans: + - 100 + vm_offset: 98 + ARISTA100T1: + vlans: + - 101 + vm_offset: 99 + ARISTA101T1: + vlans: + - 102 + vm_offset: 100 + ARISTA102T1: + vlans: + - 103 + vm_offset: 101 + ARISTA103T1: + vlans: + - 104 + vm_offset: 102 + ARISTA104T1: + vlans: + - 105 + vm_offset: 103 + ARISTA105T1: + vlans: + - 106 + vm_offset: 104 + ARISTA106T1: + vlans: + - 107 + vm_offset: 105 + ARISTA107T1: + vlans: + - 108 + vm_offset: 106 + ARISTA108T1: + vlans: + - 109 + vm_offset: 107 + ARISTA109T1: + vlans: + - 110 + vm_offset: 108 + ARISTA110T1: + vlans: + - 111 + vm_offset: 109 + ARISTA111T1: + vlans: + - 112 + vm_offset: 110 + ARISTA112T1: + vlans: + - 113 + vm_offset: 111 + ARISTA113T1: + vlans: + - 114 + vm_offset: 112 + ARISTA114T1: + vlans: + - 115 + vm_offset: 113 + ARISTA115T1: + vlans: + - 116 + vm_offset: 114 + ARISTA116T1: + vlans: + - 117 + vm_offset: 115 + ARISTA117T1: + vlans: + - 118 + vm_offset: 116 + ARISTA118T1: + vlans: + - 119 + vm_offset: 117 + ARISTA119T1: + vlans: + - 120 + vm_offset: 118 + ARISTA120T1: + vlans: + - 121 + vm_offset: 119 + ARISTA121T1: + vlans: + - 122 + vm_offset: 120 + ARISTA122T1: + vlans: + - 123 + vm_offset: 121 + ARISTA123T1: + vlans: + - 124 + vm_offset: 122 + ARISTA124T1: + vlans: + - 125 + vm_offset: 123 + ARISTA125T1: + vlans: + - 126 + vm_offset: 124 + ARISTA126T1: + vlans: + - 127 + vm_offset: 125 + ARISTA127T1: + vlans: + - 128 + vm_offset: 126 + ARISTA128T1: + vlans: + - 129 + vm_offset: 127 + ARISTA129T1: + vlans: + - 130 + vm_offset: 128 + ARISTA130T1: + vlans: + - 131 + vm_offset: 129 + ARISTA131T1: + vlans: + - 132 + vm_offset: 130 + ARISTA132T1: + vlans: + - 133 + vm_offset: 131 + ARISTA133T1: + vlans: + - 134 + vm_offset: 132 + ARISTA134T1: + vlans: + - 135 + vm_offset: 133 + ARISTA135T1: + vlans: + - 136 + vm_offset: 134 + ARISTA136T1: + vlans: + - 137 + vm_offset: 135 + ARISTA137T1: + vlans: + - 138 + vm_offset: 136 + ARISTA138T1: + vlans: + - 139 + vm_offset: 137 + ARISTA139T1: + vlans: + - 140 + vm_offset: 138 + ARISTA140T1: + vlans: + - 141 + vm_offset: 139 + ARISTA141T1: + vlans: + - 142 + vm_offset: 140 + ARISTA142T1: + vlans: + - 143 + vm_offset: 141 + ARISTA143T1: + vlans: + - 144 + vm_offset: 142 + ARISTA144T1: + vlans: + - 145 + vm_offset: 143 + ARISTA145T1: + vlans: + - 146 + vm_offset: 144 + ARISTA146T1: + vlans: + - 147 + vm_offset: 145 + ARISTA147T1: + vlans: + - 148 + vm_offset: 146 + ARISTA148T1: + vlans: + - 149 + vm_offset: 147 + ARISTA149T1: + vlans: + - 150 + vm_offset: 148 + ARISTA150T1: + vlans: + - 151 + vm_offset: 149 + ARISTA151T1: + vlans: + - 152 + vm_offset: 150 + ARISTA152T1: + vlans: + - 153 + vm_offset: 151 + ARISTA153T1: + vlans: + - 154 + vm_offset: 152 + ARISTA154T1: + vlans: + - 155 + vm_offset: 153 + ARISTA155T1: + vlans: + - 156 + vm_offset: 154 + ARISTA156T1: + vlans: + - 157 + vm_offset: 155 + ARISTA157T1: + vlans: + - 158 + vm_offset: 156 + ARISTA158T1: + vlans: + - 159 + vm_offset: 157 + ARISTA159T1: + vlans: + - 160 + vm_offset: 158 + ARISTA160T1: + vlans: + - 161 + vm_offset: 159 + ARISTA161T1: + vlans: + - 162 + vm_offset: 160 + ARISTA162T1: + vlans: + - 163 + vm_offset: 161 + ARISTA163T1: + vlans: + - 164 + vm_offset: 162 + ARISTA164T1: + vlans: + - 165 + vm_offset: 163 + ARISTA165T1: + vlans: + - 166 + vm_offset: 164 + ARISTA166T1: + vlans: + - 167 + vm_offset: 165 + ARISTA167T1: + vlans: + - 168 + vm_offset: 166 + ARISTA168T1: + vlans: + - 169 + vm_offset: 167 + ARISTA169T1: + vlans: + - 170 + vm_offset: 168 + ARISTA170T1: + vlans: + - 171 + vm_offset: 169 + ARISTA171T1: + vlans: + - 172 + vm_offset: 170 + ARISTA172T1: + vlans: + - 173 + vm_offset: 171 + ARISTA173T1: + vlans: + - 174 + vm_offset: 172 + ARISTA174T1: + vlans: + - 175 + vm_offset: 173 + ARISTA175T1: + vlans: + - 176 + vm_offset: 174 + ARISTA176T1: + vlans: + - 177 + vm_offset: 175 + ARISTA177T1: + vlans: + - 178 + vm_offset: 176 + ARISTA178T1: + vlans: + - 179 + vm_offset: 177 + ARISTA179T1: + vlans: + - 180 + vm_offset: 178 + ARISTA180T1: + vlans: + - 181 + vm_offset: 179 + ARISTA181T1: + vlans: + - 182 + vm_offset: 180 + ARISTA182T1: + vlans: + - 183 + vm_offset: 181 + ARISTA183T1: + vlans: + - 184 + vm_offset: 182 + ARISTA184T1: + vlans: + - 185 + vm_offset: 183 + ARISTA185T1: + vlans: + - 186 + vm_offset: 184 + ARISTA186T1: + vlans: + - 187 + vm_offset: 185 + ARISTA187T1: + vlans: + - 188 + vm_offset: 186 + ARISTA188T1: + vlans: + - 189 + vm_offset: 187 + ARISTA189T1: + vlans: + - 190 + vm_offset: 188 + ARISTA190T1: + vlans: + - 191 + vm_offset: 189 + ARISTA191T1: + vlans: + - 192 + vm_offset: 190 + ARISTA192T1: + vlans: + - 193 + vm_offset: 191 + ARISTA193T1: + vlans: + - 194 + vm_offset: 192 + ARISTA194T1: + vlans: + - 195 + vm_offset: 193 + ARISTA195T1: + vlans: + - 196 + vm_offset: 194 + ARISTA196T1: + vlans: + - 197 + vm_offset: 195 + ARISTA197T1: + vlans: + - 198 + vm_offset: 196 + ARISTA198T1: + vlans: + - 199 + vm_offset: 197 + ARISTA199T1: + vlans: + - 200 + vm_offset: 198 + ARISTA200T1: + vlans: + - 201 + vm_offset: 199 + ARISTA201T1: + vlans: + - 202 + vm_offset: 200 + ARISTA202T1: + vlans: + - 203 + vm_offset: 201 + ARISTA203T1: + vlans: + - 204 + vm_offset: 202 + ARISTA204T1: + vlans: + - 205 + vm_offset: 203 + ARISTA205T1: + vlans: + - 206 + vm_offset: 204 + ARISTA206T1: + vlans: + - 207 + vm_offset: 205 + ARISTA207T1: + vlans: + - 208 + vm_offset: 206 + ARISTA208T1: + vlans: + - 209 + vm_offset: 207 + ARISTA209T1: + vlans: + - 210 + vm_offset: 208 + ARISTA210T1: + vlans: + - 211 + vm_offset: 209 + ARISTA211T1: + vlans: + - 212 + vm_offset: 210 + ARISTA212T1: + vlans: + - 213 + vm_offset: 211 + ARISTA213T1: + vlans: + - 214 + vm_offset: 212 + ARISTA214T1: + vlans: + - 215 + vm_offset: 213 + ARISTA215T1: + vlans: + - 216 + vm_offset: 214 + ARISTA216T1: + vlans: + - 217 + vm_offset: 215 + ARISTA217T1: + vlans: + - 218 + vm_offset: 216 + ARISTA218T1: + vlans: + - 219 + vm_offset: 217 + ARISTA219T1: + vlans: + - 220 + vm_offset: 218 + ARISTA220T1: + vlans: + - 221 + vm_offset: 219 + ARISTA221T1: + vlans: + - 222 + vm_offset: 220 + ARISTA222T1: + vlans: + - 223 + vm_offset: 221 + ARISTA223T1: + vlans: + - 224 + vm_offset: 222 + ARISTA224T1: + vlans: + - 225 + vm_offset: 223 + ARISTA225T1: + vlans: + - 226 + vm_offset: 224 + ARISTA226T1: + vlans: + - 227 + vm_offset: 225 + ARISTA227T1: + vlans: + - 228 + vm_offset: 226 + ARISTA228T1: + vlans: + - 229 + vm_offset: 227 + ARISTA229T1: + vlans: + - 230 + vm_offset: 228 + ARISTA230T1: + vlans: + - 231 + vm_offset: 229 + ARISTA231T1: + vlans: + - 232 + vm_offset: 230 + ARISTA232T1: + vlans: + - 233 + vm_offset: 231 + ARISTA233T1: + vlans: + - 234 + vm_offset: 232 + ARISTA234T1: + vlans: + - 235 + vm_offset: 233 + ARISTA235T1: + vlans: + - 236 + vm_offset: 234 + ARISTA236T1: + vlans: + - 237 + vm_offset: 235 + ARISTA237T1: + vlans: + - 238 + vm_offset: 236 + ARISTA238T1: + vlans: + - 239 + vm_offset: 237 + ARISTA239T1: + vlans: + - 240 + vm_offset: 238 + ARISTA240T1: + vlans: + - 241 + vm_offset: 239 + ARISTA241T1: + vlans: + - 242 + vm_offset: 240 + ARISTA242T1: + vlans: + - 243 + vm_offset: 241 + ARISTA243T1: + vlans: + - 244 + vm_offset: 242 + ARISTA244T1: + vlans: + - 245 + vm_offset: 243 + ARISTA245T1: + vlans: + - 246 + vm_offset: 244 + ARISTA246T1: + vlans: + - 247 + vm_offset: 245 + ARISTA247T1: + vlans: + - 248 + vm_offset: 246 + ARISTA248T1: + vlans: + - 249 + vm_offset: 247 + ARISTA249T1: + vlans: + - 250 + vm_offset: 248 + ARISTA250T1: + vlans: + - 251 + vm_offset: 249 + ARISTA251T1: + vlans: + - 252 + vm_offset: 250 + ARISTA252T1: + vlans: + - 253 + vm_offset: 251 + ARISTA253T1: + vlans: + - 254 + vm_offset: 252 + ARISTA254T1: + vlans: + - 255 + vm_offset: 253 + DUT: + vlan_configs: + default_vlan_config: one_vlan_per_intf + one_vlan_per_intf: + Vlan1000: + id: 1000 + intfs: [0] + prefix_v6: fc00:c:c:0001::/64 + tag: 1000 + Vlan1001: + id: 1001 + intfs: [1] + prefix_v6: fc00:c:c:0002::/64 + tag: 1001 + +configuration_properties: + common: + dut_asn: 4200000000 + dut_type: ToRRouter + swrole: leaf + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine_asn: 4200200000 + leaf_asn_start: 4200100000 + tor_asn_start: 4200000000 + failure_rate: 0 + nhipv6: FC0A::FF + +configuration: + ARISTA01T1: + properties: + - common + bgp: + router-id: 0.12.0.3 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3::1/128 + Ethernet1: + ipv6: fc00:a::a/126 + bp_interface: + ipv6: fc00:b::3/64 + + ARISTA02T1: + properties: + - common + bgp: + router-id: 0.12.0.4 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d + interfaces: + Loopback0: + ipv6: fc00:c:c:4::1/128 + Ethernet1: + ipv6: fc00:a::e/126 + bp_interface: + ipv6: fc00:b::4/64 + + ARISTA03T1: + properties: + - common + bgp: + router-id: 0.12.0.5 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::11 + interfaces: + Loopback0: + ipv6: fc00:c:c:5::1/128 + Ethernet1: + ipv6: fc00:a::12/126 + bp_interface: + ipv6: fc00:b::5/64 + + ARISTA04T1: + properties: + - common + bgp: + router-id: 0.12.0.6 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::15 + interfaces: + Loopback0: + ipv6: fc00:c:c:6::1/128 + Ethernet1: + ipv6: fc00:a::16/126 + bp_interface: + ipv6: fc00:b::6/64 + + ARISTA05T1: + properties: + - common + bgp: + router-id: 0.12.0.7 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::19 + interfaces: + Loopback0: + ipv6: fc00:c:c:7::1/128 + Ethernet1: + ipv6: fc00:a::1a/126 + bp_interface: + ipv6: fc00:b::7/64 + + ARISTA06T1: + properties: + - common + bgp: + router-id: 0.12.0.8 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d + interfaces: + Loopback0: + ipv6: fc00:c:c:8::1/128 + Ethernet1: + ipv6: fc00:a::1e/126 + bp_interface: + ipv6: fc00:b::8/64 + + ARISTA07T1: + properties: + - common + bgp: + router-id: 0.12.0.9 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::21 + interfaces: + Loopback0: + ipv6: fc00:c:c:9::1/128 + Ethernet1: + ipv6: fc00:a::22/126 + bp_interface: + ipv6: fc00:b::9/64 + + ARISTA08T1: + properties: + - common + bgp: + router-id: 0.12.0.10 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::25 + interfaces: + Loopback0: + ipv6: fc00:c:c:a::1/128 + Ethernet1: + ipv6: fc00:a::26/126 + bp_interface: + ipv6: fc00:b::a/64 + + ARISTA09T1: + properties: + - common + bgp: + router-id: 0.12.0.11 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::29 + interfaces: + Loopback0: + ipv6: fc00:c:c:b::1/128 + Ethernet1: + ipv6: fc00:a::2a/126 + bp_interface: + ipv6: fc00:b::b/64 + + ARISTA10T1: + properties: + - common + bgp: + router-id: 0.12.0.12 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d + interfaces: + Loopback0: + ipv6: fc00:c:c:c::1/128 + Ethernet1: + ipv6: fc00:a::2e/126 + bp_interface: + ipv6: fc00:b::c/64 + + ARISTA11T1: + properties: + - common + bgp: + router-id: 0.12.0.13 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::31 + interfaces: + Loopback0: + ipv6: fc00:c:c:d::1/128 + Ethernet1: + ipv6: fc00:a::32/126 + bp_interface: + ipv6: fc00:b::d/64 + + ARISTA12T1: + properties: + - common + bgp: + router-id: 0.12.0.14 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::35 + interfaces: + Loopback0: + ipv6: fc00:c:c:e::1/128 + Ethernet1: + ipv6: fc00:a::36/126 + bp_interface: + ipv6: fc00:b::e/64 + + ARISTA13T1: + properties: + - common + bgp: + router-id: 0.12.0.15 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::39 + interfaces: + Loopback0: + ipv6: fc00:c:c:f::1/128 + Ethernet1: + ipv6: fc00:a::3a/126 + bp_interface: + ipv6: fc00:b::f/64 + + ARISTA14T1: + properties: + - common + bgp: + router-id: 0.12.0.16 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d + interfaces: + Loopback0: + ipv6: fc00:c:c:10::1/128 + Ethernet1: + ipv6: fc00:a::3e/126 + bp_interface: + ipv6: fc00:b::10/64 + + ARISTA15T1: + properties: + - common + bgp: + router-id: 0.12.0.17 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::41 + interfaces: + Loopback0: + ipv6: fc00:c:c:11::1/128 + Ethernet1: + ipv6: fc00:a::42/126 + bp_interface: + ipv6: fc00:b::11/64 + + ARISTA16T1: + properties: + - common + bgp: + router-id: 0.12.0.18 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::45 + interfaces: + Loopback0: + ipv6: fc00:c:c:12::1/128 + Ethernet1: + ipv6: fc00:a::46/126 + bp_interface: + ipv6: fc00:b::12/64 + + ARISTA17T1: + properties: + - common + bgp: + router-id: 0.12.0.19 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::49 + interfaces: + Loopback0: + ipv6: fc00:c:c:13::1/128 + Ethernet1: + ipv6: fc00:a::4a/126 + bp_interface: + ipv6: fc00:b::13/64 + + ARISTA18T1: + properties: + - common + bgp: + router-id: 0.12.0.20 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4d + interfaces: + Loopback0: + ipv6: fc00:c:c:14::1/128 + Ethernet1: + ipv6: fc00:a::4e/126 + bp_interface: + ipv6: fc00:b::14/64 + + ARISTA19T1: + properties: + - common + bgp: + router-id: 0.12.0.21 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::51 + interfaces: + Loopback0: + ipv6: fc00:c:c:15::1/128 + Ethernet1: + ipv6: fc00:a::52/126 + bp_interface: + ipv6: fc00:b::15/64 + + ARISTA20T1: + properties: + - common + bgp: + router-id: 0.12.0.22 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::55 + interfaces: + Loopback0: + ipv6: fc00:c:c:16::1/128 + Ethernet1: + ipv6: fc00:a::56/126 + bp_interface: + ipv6: fc00:b::16/64 + + ARISTA21T1: + properties: + - common + bgp: + router-id: 0.12.0.23 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::59 + interfaces: + Loopback0: + ipv6: fc00:c:c:17::1/128 + Ethernet1: + ipv6: fc00:a::5a/126 + bp_interface: + ipv6: fc00:b::17/64 + + ARISTA22T1: + properties: + - common + bgp: + router-id: 0.12.0.24 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5d + interfaces: + Loopback0: + ipv6: fc00:c:c:18::1/128 + Ethernet1: + ipv6: fc00:a::5e/126 + bp_interface: + ipv6: fc00:b::18/64 + + ARISTA23T1: + properties: + - common + bgp: + router-id: 0.12.0.25 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::61 + interfaces: + Loopback0: + ipv6: fc00:c:c:19::1/128 + Ethernet1: + ipv6: fc00:a::62/126 + bp_interface: + ipv6: fc00:b::19/64 + + ARISTA24T1: + properties: + - common + bgp: + router-id: 0.12.0.26 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::65 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a::1/128 + Ethernet1: + ipv6: fc00:a::66/126 + bp_interface: + ipv6: fc00:b::1a/64 + + ARISTA25T1: + properties: + - common + bgp: + router-id: 0.12.0.27 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::69 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b::1/128 + Ethernet1: + ipv6: fc00:a::6a/126 + bp_interface: + ipv6: fc00:b::1b/64 + + ARISTA26T1: + properties: + - common + bgp: + router-id: 0.12.0.28 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c::1/128 + Ethernet1: + ipv6: fc00:a::6e/126 + bp_interface: + ipv6: fc00:b::1c/64 + + ARISTA27T1: + properties: + - common + bgp: + router-id: 0.12.0.29 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::71 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d::1/128 + Ethernet1: + ipv6: fc00:a::72/126 + bp_interface: + ipv6: fc00:b::1d/64 + + ARISTA28T1: + properties: + - common + bgp: + router-id: 0.12.0.30 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::75 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e::1/128 + Ethernet1: + ipv6: fc00:a::76/126 + bp_interface: + ipv6: fc00:b::1e/64 + + ARISTA29T1: + properties: + - common + bgp: + router-id: 0.12.0.31 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::79 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f::1/128 + Ethernet1: + ipv6: fc00:a::7a/126 + bp_interface: + ipv6: fc00:b::1f/64 + + ARISTA30T1: + properties: + - common + bgp: + router-id: 0.12.0.32 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7d + interfaces: + Loopback0: + ipv6: fc00:c:c:20::1/128 + Ethernet1: + ipv6: fc00:a::7e/126 + bp_interface: + ipv6: fc00:b::20/64 + + ARISTA31T1: + properties: + - common + bgp: + router-id: 0.12.0.33 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::81 + interfaces: + Loopback0: + ipv6: fc00:c:c:21::1/128 + Ethernet1: + ipv6: fc00:a::82/126 + bp_interface: + ipv6: fc00:b::21/64 + + ARISTA32T1: + properties: + - common + bgp: + router-id: 0.12.0.34 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::85 + interfaces: + Loopback0: + ipv6: fc00:c:c:22::1/128 + Ethernet1: + ipv6: fc00:a::86/126 + bp_interface: + ipv6: fc00:b::22/64 + + ARISTA33T1: + properties: + - common + bgp: + router-id: 0.12.0.35 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::89 + interfaces: + Loopback0: + ipv6: fc00:c:c:23::1/128 + Ethernet1: + ipv6: fc00:a::8a/126 + bp_interface: + ipv6: fc00:b::23/64 + + ARISTA34T1: + properties: + - common + bgp: + router-id: 0.12.0.36 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::8d + interfaces: + Loopback0: + ipv6: fc00:c:c:24::1/128 + Ethernet1: + ipv6: fc00:a::8e/126 + bp_interface: + ipv6: fc00:b::24/64 + + ARISTA35T1: + properties: + - common + bgp: + router-id: 0.12.0.37 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::91 + interfaces: + Loopback0: + ipv6: fc00:c:c:25::1/128 + Ethernet1: + ipv6: fc00:a::92/126 + bp_interface: + ipv6: fc00:b::25/64 + + ARISTA36T1: + properties: + - common + bgp: + router-id: 0.12.0.38 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::95 + interfaces: + Loopback0: + ipv6: fc00:c:c:26::1/128 + Ethernet1: + ipv6: fc00:a::96/126 + bp_interface: + ipv6: fc00:b::26/64 + + ARISTA37T1: + properties: + - common + bgp: + router-id: 0.12.0.39 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::99 + interfaces: + Loopback0: + ipv6: fc00:c:c:27::1/128 + Ethernet1: + ipv6: fc00:a::9a/126 + bp_interface: + ipv6: fc00:b::27/64 + + ARISTA38T1: + properties: + - common + bgp: + router-id: 0.12.0.40 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::9d + interfaces: + Loopback0: + ipv6: fc00:c:c:28::1/128 + Ethernet1: + ipv6: fc00:a::9e/126 + bp_interface: + ipv6: fc00:b::28/64 + + ARISTA39T1: + properties: + - common + bgp: + router-id: 0.12.0.41 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:29::1/128 + Ethernet1: + ipv6: fc00:a::a2/126 + bp_interface: + ipv6: fc00:b::29/64 + + ARISTA40T1: + properties: + - common + bgp: + router-id: 0.12.0.42 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2a::1/128 + Ethernet1: + ipv6: fc00:a::a6/126 + bp_interface: + ipv6: fc00:b::2a/64 + + ARISTA41T1: + properties: + - common + bgp: + router-id: 0.12.0.43 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2b::1/128 + Ethernet1: + ipv6: fc00:a::aa/126 + bp_interface: + ipv6: fc00:b::2b/64 + + ARISTA42T1: + properties: + - common + bgp: + router-id: 0.12.0.44 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::ad + interfaces: + Loopback0: + ipv6: fc00:c:c:2c::1/128 + Ethernet1: + ipv6: fc00:a::ae/126 + bp_interface: + ipv6: fc00:b::2c/64 + + ARISTA43T1: + properties: + - common + bgp: + router-id: 0.12.0.45 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:2d::1/128 + Ethernet1: + ipv6: fc00:a::b2/126 + bp_interface: + ipv6: fc00:b::2d/64 + + ARISTA44T1: + properties: + - common + bgp: + router-id: 0.12.0.46 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2e::1/128 + Ethernet1: + ipv6: fc00:a::b6/126 + bp_interface: + ipv6: fc00:b::2e/64 + + ARISTA45T1: + properties: + - common + bgp: + router-id: 0.12.0.47 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2f::1/128 + Ethernet1: + ipv6: fc00:a::ba/126 + bp_interface: + ipv6: fc00:b::2f/64 + + ARISTA46T1: + properties: + - common + bgp: + router-id: 0.12.0.48 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::bd + interfaces: + Loopback0: + ipv6: fc00:c:c:30::1/128 + Ethernet1: + ipv6: fc00:a::be/126 + bp_interface: + ipv6: fc00:b::30/64 + + ARISTA47T1: + properties: + - common + bgp: + router-id: 0.12.0.49 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:31::1/128 + Ethernet1: + ipv6: fc00:a::c2/126 + bp_interface: + ipv6: fc00:b::31/64 + + ARISTA48T1: + properties: + - common + bgp: + router-id: 0.12.0.50 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:32::1/128 + Ethernet1: + ipv6: fc00:a::c6/126 + bp_interface: + ipv6: fc00:b::32/64 + + ARISTA49T1: + properties: + - common + bgp: + router-id: 0.12.0.51 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:33::1/128 + Ethernet1: + ipv6: fc00:a::ca/126 + bp_interface: + ipv6: fc00:b::33/64 + + ARISTA50T1: + properties: + - common + bgp: + router-id: 0.12.0.52 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::cd + interfaces: + Loopback0: + ipv6: fc00:c:c:34::1/128 + Ethernet1: + ipv6: fc00:a::ce/126 + bp_interface: + ipv6: fc00:b::34/64 + + ARISTA51T1: + properties: + - common + bgp: + router-id: 0.12.0.53 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:35::1/128 + Ethernet1: + ipv6: fc00:a::d2/126 + bp_interface: + ipv6: fc00:b::35/64 + + ARISTA52T1: + properties: + - common + bgp: + router-id: 0.12.0.54 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:36::1/128 + Ethernet1: + ipv6: fc00:a::d6/126 + bp_interface: + ipv6: fc00:b::36/64 + + ARISTA53T1: + properties: + - common + bgp: + router-id: 0.12.0.55 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:37::1/128 + Ethernet1: + ipv6: fc00:a::da/126 + bp_interface: + ipv6: fc00:b::37/64 + + ARISTA54T1: + properties: + - common + bgp: + router-id: 0.12.0.56 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::dd + interfaces: + Loopback0: + ipv6: fc00:c:c:38::1/128 + Ethernet1: + ipv6: fc00:a::de/126 + bp_interface: + ipv6: fc00:b::38/64 + + ARISTA55T1: + properties: + - common + bgp: + router-id: 0.12.0.57 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:39::1/128 + Ethernet1: + ipv6: fc00:a::e2/126 + bp_interface: + ipv6: fc00:b::39/64 + + ARISTA56T1: + properties: + - common + bgp: + router-id: 0.12.0.58 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3a::1/128 + Ethernet1: + ipv6: fc00:a::e6/126 + bp_interface: + ipv6: fc00:b::3a/64 + + ARISTA57T1: + properties: + - common + bgp: + router-id: 0.12.0.59 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3b::1/128 + Ethernet1: + ipv6: fc00:a::ea/126 + bp_interface: + ipv6: fc00:b::3b/64 + + ARISTA58T1: + properties: + - common + bgp: + router-id: 0.12.0.60 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::ed + interfaces: + Loopback0: + ipv6: fc00:c:c:3c::1/128 + Ethernet1: + ipv6: fc00:a::ee/126 + bp_interface: + ipv6: fc00:b::3c/64 + + ARISTA59T1: + properties: + - common + bgp: + router-id: 0.12.0.61 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:3d::1/128 + Ethernet1: + ipv6: fc00:a::f2/126 + bp_interface: + ipv6: fc00:b::3d/64 + + ARISTA60T1: + properties: + - common + bgp: + router-id: 0.12.0.62 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3e::1/128 + Ethernet1: + ipv6: fc00:a::f6/126 + bp_interface: + ipv6: fc00:b::3e/64 + + ARISTA61T1: + properties: + - common + bgp: + router-id: 0.12.0.63 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3f::1/128 + Ethernet1: + ipv6: fc00:a::fa/126 + bp_interface: + ipv6: fc00:b::3f/64 + + ARISTA62T1: + properties: + - common + bgp: + router-id: 0.12.0.64 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::fd + interfaces: + Loopback0: + ipv6: fc00:c:c:40::1/128 + Ethernet1: + ipv6: fc00:a::fe/126 + bp_interface: + ipv6: fc00:b::40/64 + + ARISTA63T1: + properties: + - common + bgp: + router-id: 0.12.0.65 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::101 + interfaces: + Loopback0: + ipv6: fc00:c:c:41::1/128 + Ethernet1: + ipv6: fc00:a::102/126 + bp_interface: + ipv6: fc00:b::41/64 + + ARISTA64T1: + properties: + - common + bgp: + router-id: 0.12.0.66 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::105 + interfaces: + Loopback0: + ipv6: fc00:c:c:42::1/128 + Ethernet1: + ipv6: fc00:a::106/126 + bp_interface: + ipv6: fc00:b::42/64 + + ARISTA65T1: + properties: + - common + bgp: + router-id: 0.12.0.67 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::109 + interfaces: + Loopback0: + ipv6: fc00:c:c:43::1/128 + Ethernet1: + ipv6: fc00:a::10a/126 + bp_interface: + ipv6: fc00:b::43/64 + + ARISTA66T1: + properties: + - common + bgp: + router-id: 0.12.0.68 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::10d + interfaces: + Loopback0: + ipv6: fc00:c:c:44::1/128 + Ethernet1: + ipv6: fc00:a::10e/126 + bp_interface: + ipv6: fc00:b::44/64 + + ARISTA67T1: + properties: + - common + bgp: + router-id: 0.12.0.69 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::111 + interfaces: + Loopback0: + ipv6: fc00:c:c:45::1/128 + Ethernet1: + ipv6: fc00:a::112/126 + bp_interface: + ipv6: fc00:b::45/64 + + ARISTA68T1: + properties: + - common + bgp: + router-id: 0.12.0.70 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::115 + interfaces: + Loopback0: + ipv6: fc00:c:c:46::1/128 + Ethernet1: + ipv6: fc00:a::116/126 + bp_interface: + ipv6: fc00:b::46/64 + + ARISTA69T1: + properties: + - common + bgp: + router-id: 0.12.0.71 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::119 + interfaces: + Loopback0: + ipv6: fc00:c:c:47::1/128 + Ethernet1: + ipv6: fc00:a::11a/126 + bp_interface: + ipv6: fc00:b::47/64 + + ARISTA70T1: + properties: + - common + bgp: + router-id: 0.12.0.72 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::11d + interfaces: + Loopback0: + ipv6: fc00:c:c:48::1/128 + Ethernet1: + ipv6: fc00:a::11e/126 + bp_interface: + ipv6: fc00:b::48/64 + + ARISTA71T1: + properties: + - common + bgp: + router-id: 0.12.0.73 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::121 + interfaces: + Loopback0: + ipv6: fc00:c:c:49::1/128 + Ethernet1: + ipv6: fc00:a::122/126 + bp_interface: + ipv6: fc00:b::49/64 + + ARISTA72T1: + properties: + - common + bgp: + router-id: 0.12.0.74 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::125 + interfaces: + Loopback0: + ipv6: fc00:c:c:4a::1/128 + Ethernet1: + ipv6: fc00:a::126/126 + bp_interface: + ipv6: fc00:b::4a/64 + + ARISTA73T1: + properties: + - common + bgp: + router-id: 0.12.0.75 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::129 + interfaces: + Loopback0: + ipv6: fc00:c:c:4b::1/128 + Ethernet1: + ipv6: fc00:a::12a/126 + bp_interface: + ipv6: fc00:b::4b/64 + + ARISTA74T1: + properties: + - common + bgp: + router-id: 0.12.0.76 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::12d + interfaces: + Loopback0: + ipv6: fc00:c:c:4c::1/128 + Ethernet1: + ipv6: fc00:a::12e/126 + bp_interface: + ipv6: fc00:b::4c/64 + + ARISTA75T1: + properties: + - common + bgp: + router-id: 0.12.0.77 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::131 + interfaces: + Loopback0: + ipv6: fc00:c:c:4d::1/128 + Ethernet1: + ipv6: fc00:a::132/126 + bp_interface: + ipv6: fc00:b::4d/64 + + ARISTA76T1: + properties: + - common + bgp: + router-id: 0.12.0.78 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::135 + interfaces: + Loopback0: + ipv6: fc00:c:c:4e::1/128 + Ethernet1: + ipv6: fc00:a::136/126 + bp_interface: + ipv6: fc00:b::4e/64 + + ARISTA77T1: + properties: + - common + bgp: + router-id: 0.12.0.79 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::139 + interfaces: + Loopback0: + ipv6: fc00:c:c:4f::1/128 + Ethernet1: + ipv6: fc00:a::13a/126 + bp_interface: + ipv6: fc00:b::4f/64 + + ARISTA78T1: + properties: + - common + bgp: + router-id: 0.12.0.80 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::13d + interfaces: + Loopback0: + ipv6: fc00:c:c:50::1/128 + Ethernet1: + ipv6: fc00:a::13e/126 + bp_interface: + ipv6: fc00:b::50/64 + + ARISTA79T1: + properties: + - common + bgp: + router-id: 0.12.0.81 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::141 + interfaces: + Loopback0: + ipv6: fc00:c:c:51::1/128 + Ethernet1: + ipv6: fc00:a::142/126 + bp_interface: + ipv6: fc00:b::51/64 + + ARISTA80T1: + properties: + - common + bgp: + router-id: 0.12.0.82 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::145 + interfaces: + Loopback0: + ipv6: fc00:c:c:52::1/128 + Ethernet1: + ipv6: fc00:a::146/126 + bp_interface: + ipv6: fc00:b::52/64 + + ARISTA81T1: + properties: + - common + bgp: + router-id: 0.12.0.83 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::149 + interfaces: + Loopback0: + ipv6: fc00:c:c:53::1/128 + Ethernet1: + ipv6: fc00:a::14a/126 + bp_interface: + ipv6: fc00:b::53/64 + + ARISTA82T1: + properties: + - common + bgp: + router-id: 0.12.0.84 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::14d + interfaces: + Loopback0: + ipv6: fc00:c:c:54::1/128 + Ethernet1: + ipv6: fc00:a::14e/126 + bp_interface: + ipv6: fc00:b::54/64 + + ARISTA83T1: + properties: + - common + bgp: + router-id: 0.12.0.85 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::151 + interfaces: + Loopback0: + ipv6: fc00:c:c:55::1/128 + Ethernet1: + ipv6: fc00:a::152/126 + bp_interface: + ipv6: fc00:b::55/64 + + ARISTA84T1: + properties: + - common + bgp: + router-id: 0.12.0.86 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::155 + interfaces: + Loopback0: + ipv6: fc00:c:c:56::1/128 + Ethernet1: + ipv6: fc00:a::156/126 + bp_interface: + ipv6: fc00:b::56/64 + + ARISTA85T1: + properties: + - common + bgp: + router-id: 0.12.0.87 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::159 + interfaces: + Loopback0: + ipv6: fc00:c:c:57::1/128 + Ethernet1: + ipv6: fc00:a::15a/126 + bp_interface: + ipv6: fc00:b::57/64 + + ARISTA86T1: + properties: + - common + bgp: + router-id: 0.12.0.88 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::15d + interfaces: + Loopback0: + ipv6: fc00:c:c:58::1/128 + Ethernet1: + ipv6: fc00:a::15e/126 + bp_interface: + ipv6: fc00:b::58/64 + + ARISTA87T1: + properties: + - common + bgp: + router-id: 0.12.0.89 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::161 + interfaces: + Loopback0: + ipv6: fc00:c:c:59::1/128 + Ethernet1: + ipv6: fc00:a::162/126 + bp_interface: + ipv6: fc00:b::59/64 + + ARISTA88T1: + properties: + - common + bgp: + router-id: 0.12.0.90 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::165 + interfaces: + Loopback0: + ipv6: fc00:c:c:5a::1/128 + Ethernet1: + ipv6: fc00:a::166/126 + bp_interface: + ipv6: fc00:b::5a/64 + + ARISTA89T1: + properties: + - common + bgp: + router-id: 0.12.0.91 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::169 + interfaces: + Loopback0: + ipv6: fc00:c:c:5b::1/128 + Ethernet1: + ipv6: fc00:a::16a/126 + bp_interface: + ipv6: fc00:b::5b/64 + + ARISTA90T1: + properties: + - common + bgp: + router-id: 0.12.0.92 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::16d + interfaces: + Loopback0: + ipv6: fc00:c:c:5c::1/128 + Ethernet1: + ipv6: fc00:a::16e/126 + bp_interface: + ipv6: fc00:b::5c/64 + + ARISTA91T1: + properties: + - common + bgp: + router-id: 0.12.0.93 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::171 + interfaces: + Loopback0: + ipv6: fc00:c:c:5d::1/128 + Ethernet1: + ipv6: fc00:a::172/126 + bp_interface: + ipv6: fc00:b::5d/64 + + ARISTA92T1: + properties: + - common + bgp: + router-id: 0.12.0.94 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::175 + interfaces: + Loopback0: + ipv6: fc00:c:c:5e::1/128 + Ethernet1: + ipv6: fc00:a::176/126 + bp_interface: + ipv6: fc00:b::5e/64 + + ARISTA93T1: + properties: + - common + bgp: + router-id: 0.12.0.95 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::179 + interfaces: + Loopback0: + ipv6: fc00:c:c:5f::1/128 + Ethernet1: + ipv6: fc00:a::17a/126 + bp_interface: + ipv6: fc00:b::5f/64 + + ARISTA94T1: + properties: + - common + bgp: + router-id: 0.12.0.96 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::17d + interfaces: + Loopback0: + ipv6: fc00:c:c:60::1/128 + Ethernet1: + ipv6: fc00:a::17e/126 + bp_interface: + ipv6: fc00:b::60/64 + + ARISTA95T1: + properties: + - common + bgp: + router-id: 0.12.0.97 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::181 + interfaces: + Loopback0: + ipv6: fc00:c:c:61::1/128 + Ethernet1: + ipv6: fc00:a::182/126 + bp_interface: + ipv6: fc00:b::61/64 + + ARISTA96T1: + properties: + - common + bgp: + router-id: 0.12.0.98 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::185 + interfaces: + Loopback0: + ipv6: fc00:c:c:62::1/128 + Ethernet1: + ipv6: fc00:a::186/126 + bp_interface: + ipv6: fc00:b::62/64 + + ARISTA97T1: + properties: + - common + bgp: + router-id: 0.12.0.99 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::189 + interfaces: + Loopback0: + ipv6: fc00:c:c:63::1/128 + Ethernet1: + ipv6: fc00:a::18a/126 + bp_interface: + ipv6: fc00:b::63/64 + + ARISTA98T1: + properties: + - common + bgp: + router-id: 0.12.0.100 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::18d + interfaces: + Loopback0: + ipv6: fc00:c:c:64::1/128 + Ethernet1: + ipv6: fc00:a::18e/126 + bp_interface: + ipv6: fc00:b::64/64 + + ARISTA99T1: + properties: + - common + bgp: + router-id: 0.12.0.101 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::191 + interfaces: + Loopback0: + ipv6: fc00:c:c:65::1/128 + Ethernet1: + ipv6: fc00:a::192/126 + bp_interface: + ipv6: fc00:b::65/64 + + ARISTA100T1: + properties: + - common + bgp: + router-id: 0.12.0.102 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::195 + interfaces: + Loopback0: + ipv6: fc00:c:c:66::1/128 + Ethernet1: + ipv6: fc00:a::196/126 + bp_interface: + ipv6: fc00:b::66/64 + + ARISTA101T1: + properties: + - common + bgp: + router-id: 0.12.0.103 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::199 + interfaces: + Loopback0: + ipv6: fc00:c:c:67::1/128 + Ethernet1: + ipv6: fc00:a::19a/126 + bp_interface: + ipv6: fc00:b::67/64 + + ARISTA102T1: + properties: + - common + bgp: + router-id: 0.12.0.104 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::19d + interfaces: + Loopback0: + ipv6: fc00:c:c:68::1/128 + Ethernet1: + ipv6: fc00:a::19e/126 + bp_interface: + ipv6: fc00:b::68/64 + + ARISTA103T1: + properties: + - common + bgp: + router-id: 0.12.0.105 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:69::1/128 + Ethernet1: + ipv6: fc00:a::1a2/126 + bp_interface: + ipv6: fc00:b::69/64 + + ARISTA104T1: + properties: + - common + bgp: + router-id: 0.12.0.106 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6a::1/128 + Ethernet1: + ipv6: fc00:a::1a6/126 + bp_interface: + ipv6: fc00:b::6a/64 + + ARISTA105T1: + properties: + - common + bgp: + router-id: 0.12.0.107 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6b::1/128 + Ethernet1: + ipv6: fc00:a::1aa/126 + bp_interface: + ipv6: fc00:b::6b/64 + + ARISTA106T1: + properties: + - common + bgp: + router-id: 0.12.0.108 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1ad + interfaces: + Loopback0: + ipv6: fc00:c:c:6c::1/128 + Ethernet1: + ipv6: fc00:a::1ae/126 + bp_interface: + ipv6: fc00:b::6c/64 + + ARISTA107T1: + properties: + - common + bgp: + router-id: 0.12.0.109 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:6d::1/128 + Ethernet1: + ipv6: fc00:a::1b2/126 + bp_interface: + ipv6: fc00:b::6d/64 + + ARISTA108T1: + properties: + - common + bgp: + router-id: 0.12.0.110 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6e::1/128 + Ethernet1: + ipv6: fc00:a::1b6/126 + bp_interface: + ipv6: fc00:b::6e/64 + + ARISTA109T1: + properties: + - common + bgp: + router-id: 0.12.0.111 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6f::1/128 + Ethernet1: + ipv6: fc00:a::1ba/126 + bp_interface: + ipv6: fc00:b::6f/64 + + ARISTA110T1: + properties: + - common + bgp: + router-id: 0.12.0.112 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1bd + interfaces: + Loopback0: + ipv6: fc00:c:c:70::1/128 + Ethernet1: + ipv6: fc00:a::1be/126 + bp_interface: + ipv6: fc00:b::70/64 + + ARISTA111T1: + properties: + - common + bgp: + router-id: 0.12.0.113 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:71::1/128 + Ethernet1: + ipv6: fc00:a::1c2/126 + bp_interface: + ipv6: fc00:b::71/64 + + ARISTA112T1: + properties: + - common + bgp: + router-id: 0.12.0.114 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:72::1/128 + Ethernet1: + ipv6: fc00:a::1c6/126 + bp_interface: + ipv6: fc00:b::72/64 + + ARISTA113T1: + properties: + - common + bgp: + router-id: 0.12.0.115 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:73::1/128 + Ethernet1: + ipv6: fc00:a::1ca/126 + bp_interface: + ipv6: fc00:b::73/64 + + ARISTA114T1: + properties: + - common + bgp: + router-id: 0.12.0.116 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1cd + interfaces: + Loopback0: + ipv6: fc00:c:c:74::1/128 + Ethernet1: + ipv6: fc00:a::1ce/126 + bp_interface: + ipv6: fc00:b::74/64 + + ARISTA115T1: + properties: + - common + bgp: + router-id: 0.12.0.117 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:75::1/128 + Ethernet1: + ipv6: fc00:a::1d2/126 + bp_interface: + ipv6: fc00:b::75/64 + + ARISTA116T1: + properties: + - common + bgp: + router-id: 0.12.0.118 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:76::1/128 + Ethernet1: + ipv6: fc00:a::1d6/126 + bp_interface: + ipv6: fc00:b::76/64 + + ARISTA117T1: + properties: + - common + bgp: + router-id: 0.12.0.119 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:77::1/128 + Ethernet1: + ipv6: fc00:a::1da/126 + bp_interface: + ipv6: fc00:b::77/64 + + ARISTA118T1: + properties: + - common + bgp: + router-id: 0.12.0.120 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1dd + interfaces: + Loopback0: + ipv6: fc00:c:c:78::1/128 + Ethernet1: + ipv6: fc00:a::1de/126 + bp_interface: + ipv6: fc00:b::78/64 + + ARISTA119T1: + properties: + - common + bgp: + router-id: 0.12.0.121 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:79::1/128 + Ethernet1: + ipv6: fc00:a::1e2/126 + bp_interface: + ipv6: fc00:b::79/64 + + ARISTA120T1: + properties: + - common + bgp: + router-id: 0.12.0.122 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7a::1/128 + Ethernet1: + ipv6: fc00:a::1e6/126 + bp_interface: + ipv6: fc00:b::7a/64 + + ARISTA121T1: + properties: + - common + bgp: + router-id: 0.12.0.123 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7b::1/128 + Ethernet1: + ipv6: fc00:a::1ea/126 + bp_interface: + ipv6: fc00:b::7b/64 + + ARISTA122T1: + properties: + - common + bgp: + router-id: 0.12.0.124 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1ed + interfaces: + Loopback0: + ipv6: fc00:c:c:7c::1/128 + Ethernet1: + ipv6: fc00:a::1ee/126 + bp_interface: + ipv6: fc00:b::7c/64 + + ARISTA123T1: + properties: + - common + bgp: + router-id: 0.12.0.125 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:7d::1/128 + Ethernet1: + ipv6: fc00:a::1f2/126 + bp_interface: + ipv6: fc00:b::7d/64 + + ARISTA124T1: + properties: + - common + bgp: + router-id: 0.12.0.126 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7e::1/128 + Ethernet1: + ipv6: fc00:a::1f6/126 + bp_interface: + ipv6: fc00:b::7e/64 + + ARISTA125T1: + properties: + - common + bgp: + router-id: 0.12.0.127 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7f::1/128 + Ethernet1: + ipv6: fc00:a::1fa/126 + bp_interface: + ipv6: fc00:b::7f/64 + + ARISTA126T1: + properties: + - common + bgp: + router-id: 0.12.0.128 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1fd + interfaces: + Loopback0: + ipv6: fc00:c:c:80::1/128 + Ethernet1: + ipv6: fc00:a::1fe/126 + bp_interface: + ipv6: fc00:b::80/64 + + ARISTA127T1: + properties: + - common + bgp: + router-id: 0.12.0.129 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::201 + interfaces: + Loopback0: + ipv6: fc00:c:c:81::1/128 + Ethernet1: + ipv6: fc00:a::202/126 + bp_interface: + ipv6: fc00:b::81/64 + + ARISTA128T1: + properties: + - common + bgp: + router-id: 0.12.0.130 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::205 + interfaces: + Loopback0: + ipv6: fc00:c:c:82::1/128 + Ethernet1: + ipv6: fc00:a::206/126 + bp_interface: + ipv6: fc00:b::82/64 + + ARISTA129T1: + properties: + - common + bgp: + router-id: 0.12.0.131 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::209 + interfaces: + Loopback0: + ipv6: fc00:c:c:83::1/128 + Ethernet1: + ipv6: fc00:a::20a/126 + bp_interface: + ipv6: fc00:b::83/64 + + ARISTA130T1: + properties: + - common + bgp: + router-id: 0.12.0.132 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::20d + interfaces: + Loopback0: + ipv6: fc00:c:c:84::1/128 + Ethernet1: + ipv6: fc00:a::20e/126 + bp_interface: + ipv6: fc00:b::84/64 + + ARISTA131T1: + properties: + - common + bgp: + router-id: 0.12.0.133 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::211 + interfaces: + Loopback0: + ipv6: fc00:c:c:85::1/128 + Ethernet1: + ipv6: fc00:a::212/126 + bp_interface: + ipv6: fc00:b::85/64 + + ARISTA132T1: + properties: + - common + bgp: + router-id: 0.12.0.134 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::215 + interfaces: + Loopback0: + ipv6: fc00:c:c:86::1/128 + Ethernet1: + ipv6: fc00:a::216/126 + bp_interface: + ipv6: fc00:b::86/64 + + ARISTA133T1: + properties: + - common + bgp: + router-id: 0.12.0.135 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::219 + interfaces: + Loopback0: + ipv6: fc00:c:c:87::1/128 + Ethernet1: + ipv6: fc00:a::21a/126 + bp_interface: + ipv6: fc00:b::87/64 + + ARISTA134T1: + properties: + - common + bgp: + router-id: 0.12.0.136 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::21d + interfaces: + Loopback0: + ipv6: fc00:c:c:88::1/128 + Ethernet1: + ipv6: fc00:a::21e/126 + bp_interface: + ipv6: fc00:b::88/64 + + ARISTA135T1: + properties: + - common + bgp: + router-id: 0.12.0.137 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::221 + interfaces: + Loopback0: + ipv6: fc00:c:c:89::1/128 + Ethernet1: + ipv6: fc00:a::222/126 + bp_interface: + ipv6: fc00:b::89/64 + + ARISTA136T1: + properties: + - common + bgp: + router-id: 0.12.0.138 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::225 + interfaces: + Loopback0: + ipv6: fc00:c:c:8a::1/128 + Ethernet1: + ipv6: fc00:a::226/126 + bp_interface: + ipv6: fc00:b::8a/64 + + ARISTA137T1: + properties: + - common + bgp: + router-id: 0.12.0.139 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::229 + interfaces: + Loopback0: + ipv6: fc00:c:c:8b::1/128 + Ethernet1: + ipv6: fc00:a::22a/126 + bp_interface: + ipv6: fc00:b::8b/64 + + ARISTA138T1: + properties: + - common + bgp: + router-id: 0.12.0.140 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::22d + interfaces: + Loopback0: + ipv6: fc00:c:c:8c::1/128 + Ethernet1: + ipv6: fc00:a::22e/126 + bp_interface: + ipv6: fc00:b::8c/64 + + ARISTA139T1: + properties: + - common + bgp: + router-id: 0.12.0.141 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::231 + interfaces: + Loopback0: + ipv6: fc00:c:c:8d::1/128 + Ethernet1: + ipv6: fc00:a::232/126 + bp_interface: + ipv6: fc00:b::8d/64 + + ARISTA140T1: + properties: + - common + bgp: + router-id: 0.12.0.142 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::235 + interfaces: + Loopback0: + ipv6: fc00:c:c:8e::1/128 + Ethernet1: + ipv6: fc00:a::236/126 + bp_interface: + ipv6: fc00:b::8e/64 + + ARISTA141T1: + properties: + - common + bgp: + router-id: 0.12.0.143 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::239 + interfaces: + Loopback0: + ipv6: fc00:c:c:8f::1/128 + Ethernet1: + ipv6: fc00:a::23a/126 + bp_interface: + ipv6: fc00:b::8f/64 + + ARISTA142T1: + properties: + - common + bgp: + router-id: 0.12.0.144 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::23d + interfaces: + Loopback0: + ipv6: fc00:c:c:90::1/128 + Ethernet1: + ipv6: fc00:a::23e/126 + bp_interface: + ipv6: fc00:b::90/64 + + ARISTA143T1: + properties: + - common + bgp: + router-id: 0.12.0.145 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::241 + interfaces: + Loopback0: + ipv6: fc00:c:c:91::1/128 + Ethernet1: + ipv6: fc00:a::242/126 + bp_interface: + ipv6: fc00:b::91/64 + + ARISTA144T1: + properties: + - common + bgp: + router-id: 0.12.0.146 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::245 + interfaces: + Loopback0: + ipv6: fc00:c:c:92::1/128 + Ethernet1: + ipv6: fc00:a::246/126 + bp_interface: + ipv6: fc00:b::92/64 + + ARISTA145T1: + properties: + - common + bgp: + router-id: 0.12.0.147 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::249 + interfaces: + Loopback0: + ipv6: fc00:c:c:93::1/128 + Ethernet1: + ipv6: fc00:a::24a/126 + bp_interface: + ipv6: fc00:b::93/64 + + ARISTA146T1: + properties: + - common + bgp: + router-id: 0.12.0.148 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::24d + interfaces: + Loopback0: + ipv6: fc00:c:c:94::1/128 + Ethernet1: + ipv6: fc00:a::24e/126 + bp_interface: + ipv6: fc00:b::94/64 + + ARISTA147T1: + properties: + - common + bgp: + router-id: 0.12.0.149 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::251 + interfaces: + Loopback0: + ipv6: fc00:c:c:95::1/128 + Ethernet1: + ipv6: fc00:a::252/126 + bp_interface: + ipv6: fc00:b::95/64 + + ARISTA148T1: + properties: + - common + bgp: + router-id: 0.12.0.150 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::255 + interfaces: + Loopback0: + ipv6: fc00:c:c:96::1/128 + Ethernet1: + ipv6: fc00:a::256/126 + bp_interface: + ipv6: fc00:b::96/64 + + ARISTA149T1: + properties: + - common + bgp: + router-id: 0.12.0.151 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::259 + interfaces: + Loopback0: + ipv6: fc00:c:c:97::1/128 + Ethernet1: + ipv6: fc00:a::25a/126 + bp_interface: + ipv6: fc00:b::97/64 + + ARISTA150T1: + properties: + - common + bgp: + router-id: 0.12.0.152 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::25d + interfaces: + Loopback0: + ipv6: fc00:c:c:98::1/128 + Ethernet1: + ipv6: fc00:a::25e/126 + bp_interface: + ipv6: fc00:b::98/64 + + ARISTA151T1: + properties: + - common + bgp: + router-id: 0.12.0.153 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::261 + interfaces: + Loopback0: + ipv6: fc00:c:c:99::1/128 + Ethernet1: + ipv6: fc00:a::262/126 + bp_interface: + ipv6: fc00:b::99/64 + + ARISTA152T1: + properties: + - common + bgp: + router-id: 0.12.0.154 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::265 + interfaces: + Loopback0: + ipv6: fc00:c:c:9a::1/128 + Ethernet1: + ipv6: fc00:a::266/126 + bp_interface: + ipv6: fc00:b::9a/64 + + ARISTA153T1: + properties: + - common + bgp: + router-id: 0.12.0.155 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::269 + interfaces: + Loopback0: + ipv6: fc00:c:c:9b::1/128 + Ethernet1: + ipv6: fc00:a::26a/126 + bp_interface: + ipv6: fc00:b::9b/64 + + ARISTA154T1: + properties: + - common + bgp: + router-id: 0.12.0.156 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::26d + interfaces: + Loopback0: + ipv6: fc00:c:c:9c::1/128 + Ethernet1: + ipv6: fc00:a::26e/126 + bp_interface: + ipv6: fc00:b::9c/64 + + ARISTA155T1: + properties: + - common + bgp: + router-id: 0.12.0.157 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::271 + interfaces: + Loopback0: + ipv6: fc00:c:c:9d::1/128 + Ethernet1: + ipv6: fc00:a::272/126 + bp_interface: + ipv6: fc00:b::9d/64 + + ARISTA156T1: + properties: + - common + bgp: + router-id: 0.12.0.158 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::275 + interfaces: + Loopback0: + ipv6: fc00:c:c:9e::1/128 + Ethernet1: + ipv6: fc00:a::276/126 + bp_interface: + ipv6: fc00:b::9e/64 + + ARISTA157T1: + properties: + - common + bgp: + router-id: 0.12.0.159 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::279 + interfaces: + Loopback0: + ipv6: fc00:c:c:9f::1/128 + Ethernet1: + ipv6: fc00:a::27a/126 + bp_interface: + ipv6: fc00:b::9f/64 + + ARISTA158T1: + properties: + - common + bgp: + router-id: 0.12.0.160 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::27d + interfaces: + Loopback0: + ipv6: fc00:c:c:a0::1/128 + Ethernet1: + ipv6: fc00:a::27e/126 + bp_interface: + ipv6: fc00:b::a0/64 + + ARISTA159T1: + properties: + - common + bgp: + router-id: 0.12.0.161 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::281 + interfaces: + Loopback0: + ipv6: fc00:c:c:a1::1/128 + Ethernet1: + ipv6: fc00:a::282/126 + bp_interface: + ipv6: fc00:b::a1/64 + + ARISTA160T1: + properties: + - common + bgp: + router-id: 0.12.0.162 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::285 + interfaces: + Loopback0: + ipv6: fc00:c:c:a2::1/128 + Ethernet1: + ipv6: fc00:a::286/126 + bp_interface: + ipv6: fc00:b::a2/64 + + ARISTA161T1: + properties: + - common + bgp: + router-id: 0.12.0.163 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::289 + interfaces: + Loopback0: + ipv6: fc00:c:c:a3::1/128 + Ethernet1: + ipv6: fc00:a::28a/126 + bp_interface: + ipv6: fc00:b::a3/64 + + ARISTA162T1: + properties: + - common + bgp: + router-id: 0.12.0.164 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::28d + interfaces: + Loopback0: + ipv6: fc00:c:c:a4::1/128 + Ethernet1: + ipv6: fc00:a::28e/126 + bp_interface: + ipv6: fc00:b::a4/64 + + ARISTA163T1: + properties: + - common + bgp: + router-id: 0.12.0.165 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::291 + interfaces: + Loopback0: + ipv6: fc00:c:c:a5::1/128 + Ethernet1: + ipv6: fc00:a::292/126 + bp_interface: + ipv6: fc00:b::a5/64 + + ARISTA164T1: + properties: + - common + bgp: + router-id: 0.12.0.166 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::295 + interfaces: + Loopback0: + ipv6: fc00:c:c:a6::1/128 + Ethernet1: + ipv6: fc00:a::296/126 + bp_interface: + ipv6: fc00:b::a6/64 + + ARISTA165T1: + properties: + - common + bgp: + router-id: 0.12.0.167 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::299 + interfaces: + Loopback0: + ipv6: fc00:c:c:a7::1/128 + Ethernet1: + ipv6: fc00:a::29a/126 + bp_interface: + ipv6: fc00:b::a7/64 + + ARISTA166T1: + properties: + - common + bgp: + router-id: 0.12.0.168 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::29d + interfaces: + Loopback0: + ipv6: fc00:c:c:a8::1/128 + Ethernet1: + ipv6: fc00:a::29e/126 + bp_interface: + ipv6: fc00:b::a8/64 + + ARISTA167T1: + properties: + - common + bgp: + router-id: 0.12.0.169 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:a9::1/128 + Ethernet1: + ipv6: fc00:a::2a2/126 + bp_interface: + ipv6: fc00:b::a9/64 + + ARISTA168T1: + properties: + - common + bgp: + router-id: 0.12.0.170 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:aa::1/128 + Ethernet1: + ipv6: fc00:a::2a6/126 + bp_interface: + ipv6: fc00:b::aa/64 + + ARISTA169T1: + properties: + - common + bgp: + router-id: 0.12.0.171 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ab::1/128 + Ethernet1: + ipv6: fc00:a::2aa/126 + bp_interface: + ipv6: fc00:b::ab/64 + + ARISTA170T1: + properties: + - common + bgp: + router-id: 0.12.0.172 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ac::1/128 + Ethernet1: + ipv6: fc00:a::2ae/126 + bp_interface: + ipv6: fc00:b::ac/64 + + ARISTA171T1: + properties: + - common + bgp: + router-id: 0.12.0.173 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ad::1/128 + Ethernet1: + ipv6: fc00:a::2b2/126 + bp_interface: + ipv6: fc00:b::ad/64 + + ARISTA172T1: + properties: + - common + bgp: + router-id: 0.12.0.174 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ae::1/128 + Ethernet1: + ipv6: fc00:a::2b6/126 + bp_interface: + ipv6: fc00:b::ae/64 + + ARISTA173T1: + properties: + - common + bgp: + router-id: 0.12.0.175 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:af::1/128 + Ethernet1: + ipv6: fc00:a::2ba/126 + bp_interface: + ipv6: fc00:b::af/64 + + ARISTA174T1: + properties: + - common + bgp: + router-id: 0.12.0.176 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2bd + interfaces: + Loopback0: + ipv6: fc00:c:c:b0::1/128 + Ethernet1: + ipv6: fc00:a::2be/126 + bp_interface: + ipv6: fc00:b::b0/64 + + ARISTA175T1: + properties: + - common + bgp: + router-id: 0.12.0.177 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b1::1/128 + Ethernet1: + ipv6: fc00:a::2c2/126 + bp_interface: + ipv6: fc00:b::b1/64 + + ARISTA176T1: + properties: + - common + bgp: + router-id: 0.12.0.178 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b2::1/128 + Ethernet1: + ipv6: fc00:a::2c6/126 + bp_interface: + ipv6: fc00:b::b2/64 + + ARISTA177T1: + properties: + - common + bgp: + router-id: 0.12.0.179 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b3::1/128 + Ethernet1: + ipv6: fc00:a::2ca/126 + bp_interface: + ipv6: fc00:b::b3/64 + + ARISTA178T1: + properties: + - common + bgp: + router-id: 0.12.0.180 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2cd + interfaces: + Loopback0: + ipv6: fc00:c:c:b4::1/128 + Ethernet1: + ipv6: fc00:a::2ce/126 + bp_interface: + ipv6: fc00:b::b4/64 + + ARISTA179T1: + properties: + - common + bgp: + router-id: 0.12.0.181 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b5::1/128 + Ethernet1: + ipv6: fc00:a::2d2/126 + bp_interface: + ipv6: fc00:b::b5/64 + + ARISTA180T1: + properties: + - common + bgp: + router-id: 0.12.0.182 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b6::1/128 + Ethernet1: + ipv6: fc00:a::2d6/126 + bp_interface: + ipv6: fc00:b::b6/64 + + ARISTA181T1: + properties: + - common + bgp: + router-id: 0.12.0.183 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b7::1/128 + Ethernet1: + ipv6: fc00:a::2da/126 + bp_interface: + ipv6: fc00:b::b7/64 + + ARISTA182T1: + properties: + - common + bgp: + router-id: 0.12.0.184 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2dd + interfaces: + Loopback0: + ipv6: fc00:c:c:b8::1/128 + Ethernet1: + ipv6: fc00:a::2de/126 + bp_interface: + ipv6: fc00:b::b8/64 + + ARISTA183T1: + properties: + - common + bgp: + router-id: 0.12.0.185 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b9::1/128 + Ethernet1: + ipv6: fc00:a::2e2/126 + bp_interface: + ipv6: fc00:b::b9/64 + + ARISTA184T1: + properties: + - common + bgp: + router-id: 0.12.0.186 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ba::1/128 + Ethernet1: + ipv6: fc00:a::2e6/126 + bp_interface: + ipv6: fc00:b::ba/64 + + ARISTA185T1: + properties: + - common + bgp: + router-id: 0.12.0.187 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bb::1/128 + Ethernet1: + ipv6: fc00:a::2ea/126 + bp_interface: + ipv6: fc00:b::bb/64 + + ARISTA186T1: + properties: + - common + bgp: + router-id: 0.12.0.188 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2ed + interfaces: + Loopback0: + ipv6: fc00:c:c:bc::1/128 + Ethernet1: + ipv6: fc00:a::2ee/126 + bp_interface: + ipv6: fc00:b::bc/64 + + ARISTA187T1: + properties: + - common + bgp: + router-id: 0.12.0.189 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:bd::1/128 + Ethernet1: + ipv6: fc00:a::2f2/126 + bp_interface: + ipv6: fc00:b::bd/64 + + ARISTA188T1: + properties: + - common + bgp: + router-id: 0.12.0.190 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:be::1/128 + Ethernet1: + ipv6: fc00:a::2f6/126 + bp_interface: + ipv6: fc00:b::be/64 + + ARISTA189T1: + properties: + - common + bgp: + router-id: 0.12.0.191 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bf::1/128 + Ethernet1: + ipv6: fc00:a::2fa/126 + bp_interface: + ipv6: fc00:b::bf/64 + + ARISTA190T1: + properties: + - common + bgp: + router-id: 0.12.0.192 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2fd + interfaces: + Loopback0: + ipv6: fc00:c:c:c0::1/128 + Ethernet1: + ipv6: fc00:a::2fe/126 + bp_interface: + ipv6: fc00:b::c0/64 + + ARISTA191T1: + properties: + - common + bgp: + router-id: 0.12.0.193 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::301 + interfaces: + Loopback0: + ipv6: fc00:c:c:c1::1/128 + Ethernet1: + ipv6: fc00:a::302/126 + bp_interface: + ipv6: fc00:b::c1/64 + + ARISTA192T1: + properties: + - common + bgp: + router-id: 0.12.0.194 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::305 + interfaces: + Loopback0: + ipv6: fc00:c:c:c2::1/128 + Ethernet1: + ipv6: fc00:a::306/126 + bp_interface: + ipv6: fc00:b::c2/64 + + ARISTA193T1: + properties: + - common + bgp: + router-id: 0.12.0.195 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::309 + interfaces: + Loopback0: + ipv6: fc00:c:c:c3::1/128 + Ethernet1: + ipv6: fc00:a::30a/126 + bp_interface: + ipv6: fc00:b::c3/64 + + ARISTA194T1: + properties: + - common + bgp: + router-id: 0.12.0.196 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::30d + interfaces: + Loopback0: + ipv6: fc00:c:c:c4::1/128 + Ethernet1: + ipv6: fc00:a::30e/126 + bp_interface: + ipv6: fc00:b::c4/64 + + ARISTA195T1: + properties: + - common + bgp: + router-id: 0.12.0.197 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::311 + interfaces: + Loopback0: + ipv6: fc00:c:c:c5::1/128 + Ethernet1: + ipv6: fc00:a::312/126 + bp_interface: + ipv6: fc00:b::c5/64 + + ARISTA196T1: + properties: + - common + bgp: + router-id: 0.12.0.198 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::315 + interfaces: + Loopback0: + ipv6: fc00:c:c:c6::1/128 + Ethernet1: + ipv6: fc00:a::316/126 + bp_interface: + ipv6: fc00:b::c6/64 + + ARISTA197T1: + properties: + - common + bgp: + router-id: 0.12.0.199 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::319 + interfaces: + Loopback0: + ipv6: fc00:c:c:c7::1/128 + Ethernet1: + ipv6: fc00:a::31a/126 + bp_interface: + ipv6: fc00:b::c7/64 + + ARISTA198T1: + properties: + - common + bgp: + router-id: 0.12.0.200 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::31d + interfaces: + Loopback0: + ipv6: fc00:c:c:c8::1/128 + Ethernet1: + ipv6: fc00:a::31e/126 + bp_interface: + ipv6: fc00:b::c8/64 + + ARISTA199T1: + properties: + - common + bgp: + router-id: 0.12.0.201 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::321 + interfaces: + Loopback0: + ipv6: fc00:c:c:c9::1/128 + Ethernet1: + ipv6: fc00:a::322/126 + bp_interface: + ipv6: fc00:b::c9/64 + + ARISTA200T1: + properties: + - common + bgp: + router-id: 0.12.0.202 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::325 + interfaces: + Loopback0: + ipv6: fc00:c:c:ca::1/128 + Ethernet1: + ipv6: fc00:a::326/126 + bp_interface: + ipv6: fc00:b::ca/64 + + ARISTA201T1: + properties: + - common + bgp: + router-id: 0.12.0.203 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::329 + interfaces: + Loopback0: + ipv6: fc00:c:c:cb::1/128 + Ethernet1: + ipv6: fc00:a::32a/126 + bp_interface: + ipv6: fc00:b::cb/64 + + ARISTA202T1: + properties: + - common + bgp: + router-id: 0.12.0.204 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::32d + interfaces: + Loopback0: + ipv6: fc00:c:c:cc::1/128 + Ethernet1: + ipv6: fc00:a::32e/126 + bp_interface: + ipv6: fc00:b::cc/64 + + ARISTA203T1: + properties: + - common + bgp: + router-id: 0.12.0.205 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::331 + interfaces: + Loopback0: + ipv6: fc00:c:c:cd::1/128 + Ethernet1: + ipv6: fc00:a::332/126 + bp_interface: + ipv6: fc00:b::cd/64 + + ARISTA204T1: + properties: + - common + bgp: + router-id: 0.12.0.206 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::335 + interfaces: + Loopback0: + ipv6: fc00:c:c:ce::1/128 + Ethernet1: + ipv6: fc00:a::336/126 + bp_interface: + ipv6: fc00:b::ce/64 + + ARISTA205T1: + properties: + - common + bgp: + router-id: 0.12.0.207 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::339 + interfaces: + Loopback0: + ipv6: fc00:c:c:cf::1/128 + Ethernet1: + ipv6: fc00:a::33a/126 + bp_interface: + ipv6: fc00:b::cf/64 + + ARISTA206T1: + properties: + - common + bgp: + router-id: 0.12.0.208 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::33d + interfaces: + Loopback0: + ipv6: fc00:c:c:d0::1/128 + Ethernet1: + ipv6: fc00:a::33e/126 + bp_interface: + ipv6: fc00:b::d0/64 + + ARISTA207T1: + properties: + - common + bgp: + router-id: 0.12.0.209 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::341 + interfaces: + Loopback0: + ipv6: fc00:c:c:d1::1/128 + Ethernet1: + ipv6: fc00:a::342/126 + bp_interface: + ipv6: fc00:b::d1/64 + + ARISTA208T1: + properties: + - common + bgp: + router-id: 0.12.0.210 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::345 + interfaces: + Loopback0: + ipv6: fc00:c:c:d2::1/128 + Ethernet1: + ipv6: fc00:a::346/126 + bp_interface: + ipv6: fc00:b::d2/64 + + ARISTA209T1: + properties: + - common + bgp: + router-id: 0.12.0.211 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::349 + interfaces: + Loopback0: + ipv6: fc00:c:c:d3::1/128 + Ethernet1: + ipv6: fc00:a::34a/126 + bp_interface: + ipv6: fc00:b::d3/64 + + ARISTA210T1: + properties: + - common + bgp: + router-id: 0.12.0.212 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::34d + interfaces: + Loopback0: + ipv6: fc00:c:c:d4::1/128 + Ethernet1: + ipv6: fc00:a::34e/126 + bp_interface: + ipv6: fc00:b::d4/64 + + ARISTA211T1: + properties: + - common + bgp: + router-id: 0.12.0.213 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::351 + interfaces: + Loopback0: + ipv6: fc00:c:c:d5::1/128 + Ethernet1: + ipv6: fc00:a::352/126 + bp_interface: + ipv6: fc00:b::d5/64 + + ARISTA212T1: + properties: + - common + bgp: + router-id: 0.12.0.214 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::355 + interfaces: + Loopback0: + ipv6: fc00:c:c:d6::1/128 + Ethernet1: + ipv6: fc00:a::356/126 + bp_interface: + ipv6: fc00:b::d6/64 + + ARISTA213T1: + properties: + - common + bgp: + router-id: 0.12.0.215 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::359 + interfaces: + Loopback0: + ipv6: fc00:c:c:d7::1/128 + Ethernet1: + ipv6: fc00:a::35a/126 + bp_interface: + ipv6: fc00:b::d7/64 + + ARISTA214T1: + properties: + - common + bgp: + router-id: 0.12.0.216 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::35d + interfaces: + Loopback0: + ipv6: fc00:c:c:d8::1/128 + Ethernet1: + ipv6: fc00:a::35e/126 + bp_interface: + ipv6: fc00:b::d8/64 + + ARISTA215T1: + properties: + - common + bgp: + router-id: 0.12.0.217 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::361 + interfaces: + Loopback0: + ipv6: fc00:c:c:d9::1/128 + Ethernet1: + ipv6: fc00:a::362/126 + bp_interface: + ipv6: fc00:b::d9/64 + + ARISTA216T1: + properties: + - common + bgp: + router-id: 0.12.0.218 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::365 + interfaces: + Loopback0: + ipv6: fc00:c:c:da::1/128 + Ethernet1: + ipv6: fc00:a::366/126 + bp_interface: + ipv6: fc00:b::da/64 + + ARISTA217T1: + properties: + - common + bgp: + router-id: 0.12.0.219 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::369 + interfaces: + Loopback0: + ipv6: fc00:c:c:db::1/128 + Ethernet1: + ipv6: fc00:a::36a/126 + bp_interface: + ipv6: fc00:b::db/64 + + ARISTA218T1: + properties: + - common + bgp: + router-id: 0.12.0.220 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::36d + interfaces: + Loopback0: + ipv6: fc00:c:c:dc::1/128 + Ethernet1: + ipv6: fc00:a::36e/126 + bp_interface: + ipv6: fc00:b::dc/64 + + ARISTA219T1: + properties: + - common + bgp: + router-id: 0.12.0.221 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::371 + interfaces: + Loopback0: + ipv6: fc00:c:c:dd::1/128 + Ethernet1: + ipv6: fc00:a::372/126 + bp_interface: + ipv6: fc00:b::dd/64 + + ARISTA220T1: + properties: + - common + bgp: + router-id: 0.12.0.222 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::375 + interfaces: + Loopback0: + ipv6: fc00:c:c:de::1/128 + Ethernet1: + ipv6: fc00:a::376/126 + bp_interface: + ipv6: fc00:b::de/64 + + ARISTA221T1: + properties: + - common + bgp: + router-id: 0.12.0.223 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::379 + interfaces: + Loopback0: + ipv6: fc00:c:c:df::1/128 + Ethernet1: + ipv6: fc00:a::37a/126 + bp_interface: + ipv6: fc00:b::df/64 + + ARISTA222T1: + properties: + - common + bgp: + router-id: 0.12.0.224 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::37d + interfaces: + Loopback0: + ipv6: fc00:c:c:e0::1/128 + Ethernet1: + ipv6: fc00:a::37e/126 + bp_interface: + ipv6: fc00:b::e0/64 + + ARISTA223T1: + properties: + - common + bgp: + router-id: 0.12.0.225 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::381 + interfaces: + Loopback0: + ipv6: fc00:c:c:e1::1/128 + Ethernet1: + ipv6: fc00:a::382/126 + bp_interface: + ipv6: fc00:b::e1/64 + + ARISTA224T1: + properties: + - common + bgp: + router-id: 0.12.0.226 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::385 + interfaces: + Loopback0: + ipv6: fc00:c:c:e2::1/128 + Ethernet1: + ipv6: fc00:a::386/126 + bp_interface: + ipv6: fc00:b::e2/64 + + ARISTA225T1: + properties: + - common + bgp: + router-id: 0.12.0.227 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::389 + interfaces: + Loopback0: + ipv6: fc00:c:c:e3::1/128 + Ethernet1: + ipv6: fc00:a::38a/126 + bp_interface: + ipv6: fc00:b::e3/64 + + ARISTA226T1: + properties: + - common + bgp: + router-id: 0.12.0.228 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::38d + interfaces: + Loopback0: + ipv6: fc00:c:c:e4::1/128 + Ethernet1: + ipv6: fc00:a::38e/126 + bp_interface: + ipv6: fc00:b::e4/64 + + ARISTA227T1: + properties: + - common + bgp: + router-id: 0.12.0.229 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::391 + interfaces: + Loopback0: + ipv6: fc00:c:c:e5::1/128 + Ethernet1: + ipv6: fc00:a::392/126 + bp_interface: + ipv6: fc00:b::e5/64 + + ARISTA228T1: + properties: + - common + bgp: + router-id: 0.12.0.230 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::395 + interfaces: + Loopback0: + ipv6: fc00:c:c:e6::1/128 + Ethernet1: + ipv6: fc00:a::396/126 + bp_interface: + ipv6: fc00:b::e6/64 + + ARISTA229T1: + properties: + - common + bgp: + router-id: 0.12.0.231 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::399 + interfaces: + Loopback0: + ipv6: fc00:c:c:e7::1/128 + Ethernet1: + ipv6: fc00:a::39a/126 + bp_interface: + ipv6: fc00:b::e7/64 + + ARISTA230T1: + properties: + - common + bgp: + router-id: 0.12.0.232 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::39d + interfaces: + Loopback0: + ipv6: fc00:c:c:e8::1/128 + Ethernet1: + ipv6: fc00:a::39e/126 + bp_interface: + ipv6: fc00:b::e8/64 + + ARISTA231T1: + properties: + - common + bgp: + router-id: 0.12.0.233 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:e9::1/128 + Ethernet1: + ipv6: fc00:a::3a2/126 + bp_interface: + ipv6: fc00:b::e9/64 + + ARISTA232T1: + properties: + - common + bgp: + router-id: 0.12.0.234 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ea::1/128 + Ethernet1: + ipv6: fc00:a::3a6/126 + bp_interface: + ipv6: fc00:b::ea/64 + + ARISTA233T1: + properties: + - common + bgp: + router-id: 0.12.0.235 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:eb::1/128 + Ethernet1: + ipv6: fc00:a::3aa/126 + bp_interface: + ipv6: fc00:b::eb/64 + + ARISTA234T1: + properties: + - common + bgp: + router-id: 0.12.0.236 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ec::1/128 + Ethernet1: + ipv6: fc00:a::3ae/126 + bp_interface: + ipv6: fc00:b::ec/64 + + ARISTA235T1: + properties: + - common + bgp: + router-id: 0.12.0.237 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ed::1/128 + Ethernet1: + ipv6: fc00:a::3b2/126 + bp_interface: + ipv6: fc00:b::ed/64 + + ARISTA236T1: + properties: + - common + bgp: + router-id: 0.12.0.238 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ee::1/128 + Ethernet1: + ipv6: fc00:a::3b6/126 + bp_interface: + ipv6: fc00:b::ee/64 + + ARISTA237T1: + properties: + - common + bgp: + router-id: 0.12.0.239 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ef::1/128 + Ethernet1: + ipv6: fc00:a::3ba/126 + bp_interface: + ipv6: fc00:b::ef/64 + + ARISTA238T1: + properties: + - common + bgp: + router-id: 0.12.0.240 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3bd + interfaces: + Loopback0: + ipv6: fc00:c:c:f0::1/128 + Ethernet1: + ipv6: fc00:a::3be/126 + bp_interface: + ipv6: fc00:b::f0/64 + + ARISTA239T1: + properties: + - common + bgp: + router-id: 0.12.0.241 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f1::1/128 + Ethernet1: + ipv6: fc00:a::3c2/126 + bp_interface: + ipv6: fc00:b::f1/64 + + ARISTA240T1: + properties: + - common + bgp: + router-id: 0.12.0.242 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f2::1/128 + Ethernet1: + ipv6: fc00:a::3c6/126 + bp_interface: + ipv6: fc00:b::f2/64 + + ARISTA241T1: + properties: + - common + bgp: + router-id: 0.12.0.243 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f3::1/128 + Ethernet1: + ipv6: fc00:a::3ca/126 + bp_interface: + ipv6: fc00:b::f3/64 + + ARISTA242T1: + properties: + - common + bgp: + router-id: 0.12.0.244 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3cd + interfaces: + Loopback0: + ipv6: fc00:c:c:f4::1/128 + Ethernet1: + ipv6: fc00:a::3ce/126 + bp_interface: + ipv6: fc00:b::f4/64 + + ARISTA243T1: + properties: + - common + bgp: + router-id: 0.12.0.245 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f5::1/128 + Ethernet1: + ipv6: fc00:a::3d2/126 + bp_interface: + ipv6: fc00:b::f5/64 + + ARISTA244T1: + properties: + - common + bgp: + router-id: 0.12.0.246 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f6::1/128 + Ethernet1: + ipv6: fc00:a::3d6/126 + bp_interface: + ipv6: fc00:b::f6/64 + + ARISTA245T1: + properties: + - common + bgp: + router-id: 0.12.0.247 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f7::1/128 + Ethernet1: + ipv6: fc00:a::3da/126 + bp_interface: + ipv6: fc00:b::f7/64 + + ARISTA246T1: + properties: + - common + bgp: + router-id: 0.12.0.248 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3dd + interfaces: + Loopback0: + ipv6: fc00:c:c:f8::1/128 + Ethernet1: + ipv6: fc00:a::3de/126 + bp_interface: + ipv6: fc00:b::f8/64 + + ARISTA247T1: + properties: + - common + bgp: + router-id: 0.12.0.249 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f9::1/128 + Ethernet1: + ipv6: fc00:a::3e2/126 + bp_interface: + ipv6: fc00:b::f9/64 + + ARISTA248T1: + properties: + - common + bgp: + router-id: 0.12.0.250 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fa::1/128 + Ethernet1: + ipv6: fc00:a::3e6/126 + bp_interface: + ipv6: fc00:b::fa/64 + + ARISTA249T1: + properties: + - common + bgp: + router-id: 0.12.0.251 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:fb::1/128 + Ethernet1: + ipv6: fc00:a::3ea/126 + bp_interface: + ipv6: fc00:b::fb/64 + + ARISTA250T1: + properties: + - common + bgp: + router-id: 0.12.0.252 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3ed + interfaces: + Loopback0: + ipv6: fc00:c:c:fc::1/128 + Ethernet1: + ipv6: fc00:a::3ee/126 + bp_interface: + ipv6: fc00:b::fc/64 + + ARISTA251T1: + properties: + - common + bgp: + router-id: 0.12.0.253 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:fd::1/128 + Ethernet1: + ipv6: fc00:a::3f2/126 + bp_interface: + ipv6: fc00:b::fd/64 + + ARISTA252T1: + properties: + - common + bgp: + router-id: 0.12.0.254 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fe::1/128 + Ethernet1: + ipv6: fc00:a::3f6/126 + bp_interface: + ipv6: fc00:b::fe/64 + + ARISTA253T1: + properties: + - common + bgp: + router-id: 0.12.0.255 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ff::1/128 + Ethernet1: + ipv6: fc00:a::3fa/126 + bp_interface: + ipv6: fc00:b::ff/64 + + ARISTA254T1: + properties: + - common + bgp: + router-id: 0.12.1.0 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3fd + interfaces: + Loopback0: + ipv6: fc00:c:c:100::1/128 + Ethernet1: + ipv6: fc00:a::3fe/126 + bp_interface: + ipv6: fc00:b::100/64 + + ARISTA01PT0: + properties: + - common + bgp: + asn: 4200000000 + peers: + 4200000000: + - fc00:a::401 + interfaces: + Loopback0: + ipv6: fc00:c:c:101::1/128 + Ethernet1: + ipv6: fc00:a::402/126 + bp_interface: + ipv6: fc00:b::101/64 + + ARISTA02PT0: + properties: + - common + bgp: + asn: 4200000000 + peers: + 4200000000: + - fc00:a::405 + interfaces: + Loopback0: + ipv6: fc00:c:c:102::1/128 + Ethernet1: + ipv6: fc00:a::406/126 + bp_interface: + ipv6: fc00:b::102/64 diff --git a/ansible/vars/topo_t0-isolated-d2u510.yml b/ansible/vars/topo_t0-isolated-d2u510.yml new file mode 100644 index 00000000000..ebd4e49d896 --- /dev/null +++ b/ansible/vars/topo_t0-isolated-d2u510.yml @@ -0,0 +1,10746 @@ +topology: + host_interfaces: + - 0 + - 1 + VMs: + ARISTA01T1: + vlans: + - 2 + vm_offset: 0 + ARISTA02T1: + vlans: + - 3 + vm_offset: 1 + ARISTA03T1: + vlans: + - 4 + vm_offset: 2 + ARISTA04T1: + vlans: + - 5 + vm_offset: 3 + ARISTA05T1: + vlans: + - 6 + vm_offset: 4 + ARISTA06T1: + vlans: + - 7 + vm_offset: 5 + ARISTA07T1: + vlans: + - 8 + vm_offset: 6 + ARISTA08T1: + vlans: + - 9 + vm_offset: 7 + ARISTA09T1: + vlans: + - 10 + vm_offset: 8 + ARISTA10T1: + vlans: + - 11 + vm_offset: 9 + ARISTA11T1: + vlans: + - 12 + vm_offset: 10 + ARISTA12T1: + vlans: + - 13 + vm_offset: 11 + ARISTA13T1: + vlans: + - 14 + vm_offset: 12 + ARISTA14T1: + vlans: + - 15 + vm_offset: 13 + ARISTA15T1: + vlans: + - 16 + vm_offset: 14 + ARISTA16T1: + vlans: + - 17 + vm_offset: 15 + ARISTA17T1: + vlans: + - 18 + vm_offset: 16 + ARISTA18T1: + vlans: + - 19 + vm_offset: 17 + ARISTA19T1: + vlans: + - 20 + vm_offset: 18 + ARISTA20T1: + vlans: + - 21 + vm_offset: 19 + ARISTA21T1: + vlans: + - 22 + vm_offset: 20 + ARISTA22T1: + vlans: + - 23 + vm_offset: 21 + ARISTA23T1: + vlans: + - 24 + vm_offset: 22 + ARISTA24T1: + vlans: + - 25 + vm_offset: 23 + ARISTA25T1: + vlans: + - 26 + vm_offset: 24 + ARISTA26T1: + vlans: + - 27 + vm_offset: 25 + ARISTA27T1: + vlans: + - 28 + vm_offset: 26 + ARISTA28T1: + vlans: + - 29 + vm_offset: 27 + ARISTA29T1: + vlans: + - 30 + vm_offset: 28 + ARISTA30T1: + vlans: + - 31 + vm_offset: 29 + ARISTA31T1: + vlans: + - 32 + vm_offset: 30 + ARISTA32T1: + vlans: + - 33 + vm_offset: 31 + ARISTA33T1: + vlans: + - 34 + vm_offset: 32 + ARISTA34T1: + vlans: + - 35 + vm_offset: 33 + ARISTA35T1: + vlans: + - 36 + vm_offset: 34 + ARISTA36T1: + vlans: + - 37 + vm_offset: 35 + ARISTA37T1: + vlans: + - 38 + vm_offset: 36 + ARISTA38T1: + vlans: + - 39 + vm_offset: 37 + ARISTA39T1: + vlans: + - 40 + vm_offset: 38 + ARISTA40T1: + vlans: + - 41 + vm_offset: 39 + ARISTA41T1: + vlans: + - 42 + vm_offset: 40 + ARISTA42T1: + vlans: + - 43 + vm_offset: 41 + ARISTA43T1: + vlans: + - 44 + vm_offset: 42 + ARISTA44T1: + vlans: + - 45 + vm_offset: 43 + ARISTA45T1: + vlans: + - 46 + vm_offset: 44 + ARISTA46T1: + vlans: + - 47 + vm_offset: 45 + ARISTA47T1: + vlans: + - 48 + vm_offset: 46 + ARISTA48T1: + vlans: + - 49 + vm_offset: 47 + ARISTA49T1: + vlans: + - 50 + vm_offset: 48 + ARISTA50T1: + vlans: + - 51 + vm_offset: 49 + ARISTA51T1: + vlans: + - 52 + vm_offset: 50 + ARISTA52T1: + vlans: + - 53 + vm_offset: 51 + ARISTA53T1: + vlans: + - 54 + vm_offset: 52 + ARISTA54T1: + vlans: + - 55 + vm_offset: 53 + ARISTA55T1: + vlans: + - 56 + vm_offset: 54 + ARISTA56T1: + vlans: + - 57 + vm_offset: 55 + ARISTA57T1: + vlans: + - 58 + vm_offset: 56 + ARISTA58T1: + vlans: + - 59 + vm_offset: 57 + ARISTA59T1: + vlans: + - 60 + vm_offset: 58 + ARISTA60T1: + vlans: + - 61 + vm_offset: 59 + ARISTA61T1: + vlans: + - 62 + vm_offset: 60 + ARISTA62T1: + vlans: + - 63 + vm_offset: 61 + ARISTA63T1: + vlans: + - 64 + vm_offset: 62 + ARISTA64T1: + vlans: + - 65 + vm_offset: 63 + ARISTA65T1: + vlans: + - 66 + vm_offset: 64 + ARISTA66T1: + vlans: + - 67 + vm_offset: 65 + ARISTA67T1: + vlans: + - 68 + vm_offset: 66 + ARISTA68T1: + vlans: + - 69 + vm_offset: 67 + ARISTA69T1: + vlans: + - 70 + vm_offset: 68 + ARISTA70T1: + vlans: + - 71 + vm_offset: 69 + ARISTA71T1: + vlans: + - 72 + vm_offset: 70 + ARISTA72T1: + vlans: + - 73 + vm_offset: 71 + ARISTA73T1: + vlans: + - 74 + vm_offset: 72 + ARISTA74T1: + vlans: + - 75 + vm_offset: 73 + ARISTA75T1: + vlans: + - 76 + vm_offset: 74 + ARISTA76T1: + vlans: + - 77 + vm_offset: 75 + ARISTA77T1: + vlans: + - 78 + vm_offset: 76 + ARISTA78T1: + vlans: + - 79 + vm_offset: 77 + ARISTA79T1: + vlans: + - 80 + vm_offset: 78 + ARISTA80T1: + vlans: + - 81 + vm_offset: 79 + ARISTA81T1: + vlans: + - 82 + vm_offset: 80 + ARISTA82T1: + vlans: + - 83 + vm_offset: 81 + ARISTA83T1: + vlans: + - 84 + vm_offset: 82 + ARISTA84T1: + vlans: + - 85 + vm_offset: 83 + ARISTA85T1: + vlans: + - 86 + vm_offset: 84 + ARISTA86T1: + vlans: + - 87 + vm_offset: 85 + ARISTA87T1: + vlans: + - 88 + vm_offset: 86 + ARISTA88T1: + vlans: + - 89 + vm_offset: 87 + ARISTA89T1: + vlans: + - 90 + vm_offset: 88 + ARISTA90T1: + vlans: + - 91 + vm_offset: 89 + ARISTA91T1: + vlans: + - 92 + vm_offset: 90 + ARISTA92T1: + vlans: + - 93 + vm_offset: 91 + ARISTA93T1: + vlans: + - 94 + vm_offset: 92 + ARISTA94T1: + vlans: + - 95 + vm_offset: 93 + ARISTA95T1: + vlans: + - 96 + vm_offset: 94 + ARISTA96T1: + vlans: + - 97 + vm_offset: 95 + ARISTA97T1: + vlans: + - 98 + vm_offset: 96 + ARISTA98T1: + vlans: + - 99 + vm_offset: 97 + ARISTA99T1: + vlans: + - 100 + vm_offset: 98 + ARISTA100T1: + vlans: + - 101 + vm_offset: 99 + ARISTA101T1: + vlans: + - 102 + vm_offset: 100 + ARISTA102T1: + vlans: + - 103 + vm_offset: 101 + ARISTA103T1: + vlans: + - 104 + vm_offset: 102 + ARISTA104T1: + vlans: + - 105 + vm_offset: 103 + ARISTA105T1: + vlans: + - 106 + vm_offset: 104 + ARISTA106T1: + vlans: + - 107 + vm_offset: 105 + ARISTA107T1: + vlans: + - 108 + vm_offset: 106 + ARISTA108T1: + vlans: + - 109 + vm_offset: 107 + ARISTA109T1: + vlans: + - 110 + vm_offset: 108 + ARISTA110T1: + vlans: + - 111 + vm_offset: 109 + ARISTA111T1: + vlans: + - 112 + vm_offset: 110 + ARISTA112T1: + vlans: + - 113 + vm_offset: 111 + ARISTA113T1: + vlans: + - 114 + vm_offset: 112 + ARISTA114T1: + vlans: + - 115 + vm_offset: 113 + ARISTA115T1: + vlans: + - 116 + vm_offset: 114 + ARISTA116T1: + vlans: + - 117 + vm_offset: 115 + ARISTA117T1: + vlans: + - 118 + vm_offset: 116 + ARISTA118T1: + vlans: + - 119 + vm_offset: 117 + ARISTA119T1: + vlans: + - 120 + vm_offset: 118 + ARISTA120T1: + vlans: + - 121 + vm_offset: 119 + ARISTA121T1: + vlans: + - 122 + vm_offset: 120 + ARISTA122T1: + vlans: + - 123 + vm_offset: 121 + ARISTA123T1: + vlans: + - 124 + vm_offset: 122 + ARISTA124T1: + vlans: + - 125 + vm_offset: 123 + ARISTA125T1: + vlans: + - 126 + vm_offset: 124 + ARISTA126T1: + vlans: + - 127 + vm_offset: 125 + ARISTA127T1: + vlans: + - 128 + vm_offset: 126 + ARISTA128T1: + vlans: + - 129 + vm_offset: 127 + ARISTA129T1: + vlans: + - 130 + vm_offset: 128 + ARISTA130T1: + vlans: + - 131 + vm_offset: 129 + ARISTA131T1: + vlans: + - 132 + vm_offset: 130 + ARISTA132T1: + vlans: + - 133 + vm_offset: 131 + ARISTA133T1: + vlans: + - 134 + vm_offset: 132 + ARISTA134T1: + vlans: + - 135 + vm_offset: 133 + ARISTA135T1: + vlans: + - 136 + vm_offset: 134 + ARISTA136T1: + vlans: + - 137 + vm_offset: 135 + ARISTA137T1: + vlans: + - 138 + vm_offset: 136 + ARISTA138T1: + vlans: + - 139 + vm_offset: 137 + ARISTA139T1: + vlans: + - 140 + vm_offset: 138 + ARISTA140T1: + vlans: + - 141 + vm_offset: 139 + ARISTA141T1: + vlans: + - 142 + vm_offset: 140 + ARISTA142T1: + vlans: + - 143 + vm_offset: 141 + ARISTA143T1: + vlans: + - 144 + vm_offset: 142 + ARISTA144T1: + vlans: + - 145 + vm_offset: 143 + ARISTA145T1: + vlans: + - 146 + vm_offset: 144 + ARISTA146T1: + vlans: + - 147 + vm_offset: 145 + ARISTA147T1: + vlans: + - 148 + vm_offset: 146 + ARISTA148T1: + vlans: + - 149 + vm_offset: 147 + ARISTA149T1: + vlans: + - 150 + vm_offset: 148 + ARISTA150T1: + vlans: + - 151 + vm_offset: 149 + ARISTA151T1: + vlans: + - 152 + vm_offset: 150 + ARISTA152T1: + vlans: + - 153 + vm_offset: 151 + ARISTA153T1: + vlans: + - 154 + vm_offset: 152 + ARISTA154T1: + vlans: + - 155 + vm_offset: 153 + ARISTA155T1: + vlans: + - 156 + vm_offset: 154 + ARISTA156T1: + vlans: + - 157 + vm_offset: 155 + ARISTA157T1: + vlans: + - 158 + vm_offset: 156 + ARISTA158T1: + vlans: + - 159 + vm_offset: 157 + ARISTA159T1: + vlans: + - 160 + vm_offset: 158 + ARISTA160T1: + vlans: + - 161 + vm_offset: 159 + ARISTA161T1: + vlans: + - 162 + vm_offset: 160 + ARISTA162T1: + vlans: + - 163 + vm_offset: 161 + ARISTA163T1: + vlans: + - 164 + vm_offset: 162 + ARISTA164T1: + vlans: + - 165 + vm_offset: 163 + ARISTA165T1: + vlans: + - 166 + vm_offset: 164 + ARISTA166T1: + vlans: + - 167 + vm_offset: 165 + ARISTA167T1: + vlans: + - 168 + vm_offset: 166 + ARISTA168T1: + vlans: + - 169 + vm_offset: 167 + ARISTA169T1: + vlans: + - 170 + vm_offset: 168 + ARISTA170T1: + vlans: + - 171 + vm_offset: 169 + ARISTA171T1: + vlans: + - 172 + vm_offset: 170 + ARISTA172T1: + vlans: + - 173 + vm_offset: 171 + ARISTA173T1: + vlans: + - 174 + vm_offset: 172 + ARISTA174T1: + vlans: + - 175 + vm_offset: 173 + ARISTA175T1: + vlans: + - 176 + vm_offset: 174 + ARISTA176T1: + vlans: + - 177 + vm_offset: 175 + ARISTA177T1: + vlans: + - 178 + vm_offset: 176 + ARISTA178T1: + vlans: + - 179 + vm_offset: 177 + ARISTA179T1: + vlans: + - 180 + vm_offset: 178 + ARISTA180T1: + vlans: + - 181 + vm_offset: 179 + ARISTA181T1: + vlans: + - 182 + vm_offset: 180 + ARISTA182T1: + vlans: + - 183 + vm_offset: 181 + ARISTA183T1: + vlans: + - 184 + vm_offset: 182 + ARISTA184T1: + vlans: + - 185 + vm_offset: 183 + ARISTA185T1: + vlans: + - 186 + vm_offset: 184 + ARISTA186T1: + vlans: + - 187 + vm_offset: 185 + ARISTA187T1: + vlans: + - 188 + vm_offset: 186 + ARISTA188T1: + vlans: + - 189 + vm_offset: 187 + ARISTA189T1: + vlans: + - 190 + vm_offset: 188 + ARISTA190T1: + vlans: + - 191 + vm_offset: 189 + ARISTA191T1: + vlans: + - 192 + vm_offset: 190 + ARISTA192T1: + vlans: + - 193 + vm_offset: 191 + ARISTA193T1: + vlans: + - 194 + vm_offset: 192 + ARISTA194T1: + vlans: + - 195 + vm_offset: 193 + ARISTA195T1: + vlans: + - 196 + vm_offset: 194 + ARISTA196T1: + vlans: + - 197 + vm_offset: 195 + ARISTA197T1: + vlans: + - 198 + vm_offset: 196 + ARISTA198T1: + vlans: + - 199 + vm_offset: 197 + ARISTA199T1: + vlans: + - 200 + vm_offset: 198 + ARISTA200T1: + vlans: + - 201 + vm_offset: 199 + ARISTA201T1: + vlans: + - 202 + vm_offset: 200 + ARISTA202T1: + vlans: + - 203 + vm_offset: 201 + ARISTA203T1: + vlans: + - 204 + vm_offset: 202 + ARISTA204T1: + vlans: + - 205 + vm_offset: 203 + ARISTA205T1: + vlans: + - 206 + vm_offset: 204 + ARISTA206T1: + vlans: + - 207 + vm_offset: 205 + ARISTA207T1: + vlans: + - 208 + vm_offset: 206 + ARISTA208T1: + vlans: + - 209 + vm_offset: 207 + ARISTA209T1: + vlans: + - 210 + vm_offset: 208 + ARISTA210T1: + vlans: + - 211 + vm_offset: 209 + ARISTA211T1: + vlans: + - 212 + vm_offset: 210 + ARISTA212T1: + vlans: + - 213 + vm_offset: 211 + ARISTA213T1: + vlans: + - 214 + vm_offset: 212 + ARISTA214T1: + vlans: + - 215 + vm_offset: 213 + ARISTA215T1: + vlans: + - 216 + vm_offset: 214 + ARISTA216T1: + vlans: + - 217 + vm_offset: 215 + ARISTA217T1: + vlans: + - 218 + vm_offset: 216 + ARISTA218T1: + vlans: + - 219 + vm_offset: 217 + ARISTA219T1: + vlans: + - 220 + vm_offset: 218 + ARISTA220T1: + vlans: + - 221 + vm_offset: 219 + ARISTA221T1: + vlans: + - 222 + vm_offset: 220 + ARISTA222T1: + vlans: + - 223 + vm_offset: 221 + ARISTA223T1: + vlans: + - 224 + vm_offset: 222 + ARISTA224T1: + vlans: + - 225 + vm_offset: 223 + ARISTA225T1: + vlans: + - 226 + vm_offset: 224 + ARISTA226T1: + vlans: + - 227 + vm_offset: 225 + ARISTA227T1: + vlans: + - 228 + vm_offset: 226 + ARISTA228T1: + vlans: + - 229 + vm_offset: 227 + ARISTA229T1: + vlans: + - 230 + vm_offset: 228 + ARISTA230T1: + vlans: + - 231 + vm_offset: 229 + ARISTA231T1: + vlans: + - 232 + vm_offset: 230 + ARISTA232T1: + vlans: + - 233 + vm_offset: 231 + ARISTA233T1: + vlans: + - 234 + vm_offset: 232 + ARISTA234T1: + vlans: + - 235 + vm_offset: 233 + ARISTA235T1: + vlans: + - 236 + vm_offset: 234 + ARISTA236T1: + vlans: + - 237 + vm_offset: 235 + ARISTA237T1: + vlans: + - 238 + vm_offset: 236 + ARISTA238T1: + vlans: + - 239 + vm_offset: 237 + ARISTA239T1: + vlans: + - 240 + vm_offset: 238 + ARISTA240T1: + vlans: + - 241 + vm_offset: 239 + ARISTA241T1: + vlans: + - 242 + vm_offset: 240 + ARISTA242T1: + vlans: + - 243 + vm_offset: 241 + ARISTA243T1: + vlans: + - 244 + vm_offset: 242 + ARISTA244T1: + vlans: + - 245 + vm_offset: 243 + ARISTA245T1: + vlans: + - 246 + vm_offset: 244 + ARISTA246T1: + vlans: + - 247 + vm_offset: 245 + ARISTA247T1: + vlans: + - 248 + vm_offset: 246 + ARISTA248T1: + vlans: + - 249 + vm_offset: 247 + ARISTA249T1: + vlans: + - 250 + vm_offset: 248 + ARISTA250T1: + vlans: + - 251 + vm_offset: 249 + ARISTA251T1: + vlans: + - 252 + vm_offset: 250 + ARISTA252T1: + vlans: + - 253 + vm_offset: 251 + ARISTA253T1: + vlans: + - 254 + vm_offset: 252 + ARISTA254T1: + vlans: + - 255 + vm_offset: 253 + ARISTA255T1: + vlans: + - 256 + vm_offset: 254 + ARISTA256T1: + vlans: + - 257 + vm_offset: 255 + ARISTA257T1: + vlans: + - 258 + vm_offset: 256 + ARISTA258T1: + vlans: + - 259 + vm_offset: 257 + ARISTA259T1: + vlans: + - 260 + vm_offset: 258 + ARISTA260T1: + vlans: + - 261 + vm_offset: 259 + ARISTA261T1: + vlans: + - 262 + vm_offset: 260 + ARISTA262T1: + vlans: + - 263 + vm_offset: 261 + ARISTA263T1: + vlans: + - 264 + vm_offset: 262 + ARISTA264T1: + vlans: + - 265 + vm_offset: 263 + ARISTA265T1: + vlans: + - 266 + vm_offset: 264 + ARISTA266T1: + vlans: + - 267 + vm_offset: 265 + ARISTA267T1: + vlans: + - 268 + vm_offset: 266 + ARISTA268T1: + vlans: + - 269 + vm_offset: 267 + ARISTA269T1: + vlans: + - 270 + vm_offset: 268 + ARISTA270T1: + vlans: + - 271 + vm_offset: 269 + ARISTA271T1: + vlans: + - 272 + vm_offset: 270 + ARISTA272T1: + vlans: + - 273 + vm_offset: 271 + ARISTA273T1: + vlans: + - 274 + vm_offset: 272 + ARISTA274T1: + vlans: + - 275 + vm_offset: 273 + ARISTA275T1: + vlans: + - 276 + vm_offset: 274 + ARISTA276T1: + vlans: + - 277 + vm_offset: 275 + ARISTA277T1: + vlans: + - 278 + vm_offset: 276 + ARISTA278T1: + vlans: + - 279 + vm_offset: 277 + ARISTA279T1: + vlans: + - 280 + vm_offset: 278 + ARISTA280T1: + vlans: + - 281 + vm_offset: 279 + ARISTA281T1: + vlans: + - 282 + vm_offset: 280 + ARISTA282T1: + vlans: + - 283 + vm_offset: 281 + ARISTA283T1: + vlans: + - 284 + vm_offset: 282 + ARISTA284T1: + vlans: + - 285 + vm_offset: 283 + ARISTA285T1: + vlans: + - 286 + vm_offset: 284 + ARISTA286T1: + vlans: + - 287 + vm_offset: 285 + ARISTA287T1: + vlans: + - 288 + vm_offset: 286 + ARISTA288T1: + vlans: + - 289 + vm_offset: 287 + ARISTA289T1: + vlans: + - 290 + vm_offset: 288 + ARISTA290T1: + vlans: + - 291 + vm_offset: 289 + ARISTA291T1: + vlans: + - 292 + vm_offset: 290 + ARISTA292T1: + vlans: + - 293 + vm_offset: 291 + ARISTA293T1: + vlans: + - 294 + vm_offset: 292 + ARISTA294T1: + vlans: + - 295 + vm_offset: 293 + ARISTA295T1: + vlans: + - 296 + vm_offset: 294 + ARISTA296T1: + vlans: + - 297 + vm_offset: 295 + ARISTA297T1: + vlans: + - 298 + vm_offset: 296 + ARISTA298T1: + vlans: + - 299 + vm_offset: 297 + ARISTA299T1: + vlans: + - 300 + vm_offset: 298 + ARISTA300T1: + vlans: + - 301 + vm_offset: 299 + ARISTA301T1: + vlans: + - 302 + vm_offset: 300 + ARISTA302T1: + vlans: + - 303 + vm_offset: 301 + ARISTA303T1: + vlans: + - 304 + vm_offset: 302 + ARISTA304T1: + vlans: + - 305 + vm_offset: 303 + ARISTA305T1: + vlans: + - 306 + vm_offset: 304 + ARISTA306T1: + vlans: + - 307 + vm_offset: 305 + ARISTA307T1: + vlans: + - 308 + vm_offset: 306 + ARISTA308T1: + vlans: + - 309 + vm_offset: 307 + ARISTA309T1: + vlans: + - 310 + vm_offset: 308 + ARISTA310T1: + vlans: + - 311 + vm_offset: 309 + ARISTA311T1: + vlans: + - 312 + vm_offset: 310 + ARISTA312T1: + vlans: + - 313 + vm_offset: 311 + ARISTA313T1: + vlans: + - 314 + vm_offset: 312 + ARISTA314T1: + vlans: + - 315 + vm_offset: 313 + ARISTA315T1: + vlans: + - 316 + vm_offset: 314 + ARISTA316T1: + vlans: + - 317 + vm_offset: 315 + ARISTA317T1: + vlans: + - 318 + vm_offset: 316 + ARISTA318T1: + vlans: + - 319 + vm_offset: 317 + ARISTA319T1: + vlans: + - 320 + vm_offset: 318 + ARISTA320T1: + vlans: + - 321 + vm_offset: 319 + ARISTA321T1: + vlans: + - 322 + vm_offset: 320 + ARISTA322T1: + vlans: + - 323 + vm_offset: 321 + ARISTA323T1: + vlans: + - 324 + vm_offset: 322 + ARISTA324T1: + vlans: + - 325 + vm_offset: 323 + ARISTA325T1: + vlans: + - 326 + vm_offset: 324 + ARISTA326T1: + vlans: + - 327 + vm_offset: 325 + ARISTA327T1: + vlans: + - 328 + vm_offset: 326 + ARISTA328T1: + vlans: + - 329 + vm_offset: 327 + ARISTA329T1: + vlans: + - 330 + vm_offset: 328 + ARISTA330T1: + vlans: + - 331 + vm_offset: 329 + ARISTA331T1: + vlans: + - 332 + vm_offset: 330 + ARISTA332T1: + vlans: + - 333 + vm_offset: 331 + ARISTA333T1: + vlans: + - 334 + vm_offset: 332 + ARISTA334T1: + vlans: + - 335 + vm_offset: 333 + ARISTA335T1: + vlans: + - 336 + vm_offset: 334 + ARISTA336T1: + vlans: + - 337 + vm_offset: 335 + ARISTA337T1: + vlans: + - 338 + vm_offset: 336 + ARISTA338T1: + vlans: + - 339 + vm_offset: 337 + ARISTA339T1: + vlans: + - 340 + vm_offset: 338 + ARISTA340T1: + vlans: + - 341 + vm_offset: 339 + ARISTA341T1: + vlans: + - 342 + vm_offset: 340 + ARISTA342T1: + vlans: + - 343 + vm_offset: 341 + ARISTA343T1: + vlans: + - 344 + vm_offset: 342 + ARISTA344T1: + vlans: + - 345 + vm_offset: 343 + ARISTA345T1: + vlans: + - 346 + vm_offset: 344 + ARISTA346T1: + vlans: + - 347 + vm_offset: 345 + ARISTA347T1: + vlans: + - 348 + vm_offset: 346 + ARISTA348T1: + vlans: + - 349 + vm_offset: 347 + ARISTA349T1: + vlans: + - 350 + vm_offset: 348 + ARISTA350T1: + vlans: + - 351 + vm_offset: 349 + ARISTA351T1: + vlans: + - 352 + vm_offset: 350 + ARISTA352T1: + vlans: + - 353 + vm_offset: 351 + ARISTA353T1: + vlans: + - 354 + vm_offset: 352 + ARISTA354T1: + vlans: + - 355 + vm_offset: 353 + ARISTA355T1: + vlans: + - 356 + vm_offset: 354 + ARISTA356T1: + vlans: + - 357 + vm_offset: 355 + ARISTA357T1: + vlans: + - 358 + vm_offset: 356 + ARISTA358T1: + vlans: + - 359 + vm_offset: 357 + ARISTA359T1: + vlans: + - 360 + vm_offset: 358 + ARISTA360T1: + vlans: + - 361 + vm_offset: 359 + ARISTA361T1: + vlans: + - 362 + vm_offset: 360 + ARISTA362T1: + vlans: + - 363 + vm_offset: 361 + ARISTA363T1: + vlans: + - 364 + vm_offset: 362 + ARISTA364T1: + vlans: + - 365 + vm_offset: 363 + ARISTA365T1: + vlans: + - 366 + vm_offset: 364 + ARISTA366T1: + vlans: + - 367 + vm_offset: 365 + ARISTA367T1: + vlans: + - 368 + vm_offset: 366 + ARISTA368T1: + vlans: + - 369 + vm_offset: 367 + ARISTA369T1: + vlans: + - 370 + vm_offset: 368 + ARISTA370T1: + vlans: + - 371 + vm_offset: 369 + ARISTA371T1: + vlans: + - 372 + vm_offset: 370 + ARISTA372T1: + vlans: + - 373 + vm_offset: 371 + ARISTA373T1: + vlans: + - 374 + vm_offset: 372 + ARISTA374T1: + vlans: + - 375 + vm_offset: 373 + ARISTA375T1: + vlans: + - 376 + vm_offset: 374 + ARISTA376T1: + vlans: + - 377 + vm_offset: 375 + ARISTA377T1: + vlans: + - 378 + vm_offset: 376 + ARISTA378T1: + vlans: + - 379 + vm_offset: 377 + ARISTA379T1: + vlans: + - 380 + vm_offset: 378 + ARISTA380T1: + vlans: + - 381 + vm_offset: 379 + ARISTA381T1: + vlans: + - 382 + vm_offset: 380 + ARISTA382T1: + vlans: + - 383 + vm_offset: 381 + ARISTA383T1: + vlans: + - 384 + vm_offset: 382 + ARISTA384T1: + vlans: + - 385 + vm_offset: 383 + ARISTA385T1: + vlans: + - 386 + vm_offset: 384 + ARISTA386T1: + vlans: + - 387 + vm_offset: 385 + ARISTA387T1: + vlans: + - 388 + vm_offset: 386 + ARISTA388T1: + vlans: + - 389 + vm_offset: 387 + ARISTA389T1: + vlans: + - 390 + vm_offset: 388 + ARISTA390T1: + vlans: + - 391 + vm_offset: 389 + ARISTA391T1: + vlans: + - 392 + vm_offset: 390 + ARISTA392T1: + vlans: + - 393 + vm_offset: 391 + ARISTA393T1: + vlans: + - 394 + vm_offset: 392 + ARISTA394T1: + vlans: + - 395 + vm_offset: 393 + ARISTA395T1: + vlans: + - 396 + vm_offset: 394 + ARISTA396T1: + vlans: + - 397 + vm_offset: 395 + ARISTA397T1: + vlans: + - 398 + vm_offset: 396 + ARISTA398T1: + vlans: + - 399 + vm_offset: 397 + ARISTA399T1: + vlans: + - 400 + vm_offset: 398 + ARISTA400T1: + vlans: + - 401 + vm_offset: 399 + ARISTA401T1: + vlans: + - 402 + vm_offset: 400 + ARISTA402T1: + vlans: + - 403 + vm_offset: 401 + ARISTA403T1: + vlans: + - 404 + vm_offset: 402 + ARISTA404T1: + vlans: + - 405 + vm_offset: 403 + ARISTA405T1: + vlans: + - 406 + vm_offset: 404 + ARISTA406T1: + vlans: + - 407 + vm_offset: 405 + ARISTA407T1: + vlans: + - 408 + vm_offset: 406 + ARISTA408T1: + vlans: + - 409 + vm_offset: 407 + ARISTA409T1: + vlans: + - 410 + vm_offset: 408 + ARISTA410T1: + vlans: + - 411 + vm_offset: 409 + ARISTA411T1: + vlans: + - 412 + vm_offset: 410 + ARISTA412T1: + vlans: + - 413 + vm_offset: 411 + ARISTA413T1: + vlans: + - 414 + vm_offset: 412 + ARISTA414T1: + vlans: + - 415 + vm_offset: 413 + ARISTA415T1: + vlans: + - 416 + vm_offset: 414 + ARISTA416T1: + vlans: + - 417 + vm_offset: 415 + ARISTA417T1: + vlans: + - 418 + vm_offset: 416 + ARISTA418T1: + vlans: + - 419 + vm_offset: 417 + ARISTA419T1: + vlans: + - 420 + vm_offset: 418 + ARISTA420T1: + vlans: + - 421 + vm_offset: 419 + ARISTA421T1: + vlans: + - 422 + vm_offset: 420 + ARISTA422T1: + vlans: + - 423 + vm_offset: 421 + ARISTA423T1: + vlans: + - 424 + vm_offset: 422 + ARISTA424T1: + vlans: + - 425 + vm_offset: 423 + ARISTA425T1: + vlans: + - 426 + vm_offset: 424 + ARISTA426T1: + vlans: + - 427 + vm_offset: 425 + ARISTA427T1: + vlans: + - 428 + vm_offset: 426 + ARISTA428T1: + vlans: + - 429 + vm_offset: 427 + ARISTA429T1: + vlans: + - 430 + vm_offset: 428 + ARISTA430T1: + vlans: + - 431 + vm_offset: 429 + ARISTA431T1: + vlans: + - 432 + vm_offset: 430 + ARISTA432T1: + vlans: + - 433 + vm_offset: 431 + ARISTA433T1: + vlans: + - 434 + vm_offset: 432 + ARISTA434T1: + vlans: + - 435 + vm_offset: 433 + ARISTA435T1: + vlans: + - 436 + vm_offset: 434 + ARISTA436T1: + vlans: + - 437 + vm_offset: 435 + ARISTA437T1: + vlans: + - 438 + vm_offset: 436 + ARISTA438T1: + vlans: + - 439 + vm_offset: 437 + ARISTA439T1: + vlans: + - 440 + vm_offset: 438 + ARISTA440T1: + vlans: + - 441 + vm_offset: 439 + ARISTA441T1: + vlans: + - 442 + vm_offset: 440 + ARISTA442T1: + vlans: + - 443 + vm_offset: 441 + ARISTA443T1: + vlans: + - 444 + vm_offset: 442 + ARISTA444T1: + vlans: + - 445 + vm_offset: 443 + ARISTA445T1: + vlans: + - 446 + vm_offset: 444 + ARISTA446T1: + vlans: + - 447 + vm_offset: 445 + ARISTA447T1: + vlans: + - 448 + vm_offset: 446 + ARISTA448T1: + vlans: + - 449 + vm_offset: 447 + ARISTA449T1: + vlans: + - 450 + vm_offset: 448 + ARISTA450T1: + vlans: + - 451 + vm_offset: 449 + ARISTA451T1: + vlans: + - 452 + vm_offset: 450 + ARISTA452T1: + vlans: + - 453 + vm_offset: 451 + ARISTA453T1: + vlans: + - 454 + vm_offset: 452 + ARISTA454T1: + vlans: + - 455 + vm_offset: 453 + ARISTA455T1: + vlans: + - 456 + vm_offset: 454 + ARISTA456T1: + vlans: + - 457 + vm_offset: 455 + ARISTA457T1: + vlans: + - 458 + vm_offset: 456 + ARISTA458T1: + vlans: + - 459 + vm_offset: 457 + ARISTA459T1: + vlans: + - 460 + vm_offset: 458 + ARISTA460T1: + vlans: + - 461 + vm_offset: 459 + ARISTA461T1: + vlans: + - 462 + vm_offset: 460 + ARISTA462T1: + vlans: + - 463 + vm_offset: 461 + ARISTA463T1: + vlans: + - 464 + vm_offset: 462 + ARISTA464T1: + vlans: + - 465 + vm_offset: 463 + ARISTA465T1: + vlans: + - 466 + vm_offset: 464 + ARISTA466T1: + vlans: + - 467 + vm_offset: 465 + ARISTA467T1: + vlans: + - 468 + vm_offset: 466 + ARISTA468T1: + vlans: + - 469 + vm_offset: 467 + ARISTA469T1: + vlans: + - 470 + vm_offset: 468 + ARISTA470T1: + vlans: + - 471 + vm_offset: 469 + ARISTA471T1: + vlans: + - 472 + vm_offset: 470 + ARISTA472T1: + vlans: + - 473 + vm_offset: 471 + ARISTA473T1: + vlans: + - 474 + vm_offset: 472 + ARISTA474T1: + vlans: + - 475 + vm_offset: 473 + ARISTA475T1: + vlans: + - 476 + vm_offset: 474 + ARISTA476T1: + vlans: + - 477 + vm_offset: 475 + ARISTA477T1: + vlans: + - 478 + vm_offset: 476 + ARISTA478T1: + vlans: + - 479 + vm_offset: 477 + ARISTA479T1: + vlans: + - 480 + vm_offset: 478 + ARISTA480T1: + vlans: + - 481 + vm_offset: 479 + ARISTA481T1: + vlans: + - 482 + vm_offset: 480 + ARISTA482T1: + vlans: + - 483 + vm_offset: 481 + ARISTA483T1: + vlans: + - 484 + vm_offset: 482 + ARISTA484T1: + vlans: + - 485 + vm_offset: 483 + ARISTA485T1: + vlans: + - 486 + vm_offset: 484 + ARISTA486T1: + vlans: + - 487 + vm_offset: 485 + ARISTA487T1: + vlans: + - 488 + vm_offset: 486 + ARISTA488T1: + vlans: + - 489 + vm_offset: 487 + ARISTA489T1: + vlans: + - 490 + vm_offset: 488 + ARISTA490T1: + vlans: + - 491 + vm_offset: 489 + ARISTA491T1: + vlans: + - 492 + vm_offset: 490 + ARISTA492T1: + vlans: + - 493 + vm_offset: 491 + ARISTA493T1: + vlans: + - 494 + vm_offset: 492 + ARISTA494T1: + vlans: + - 495 + vm_offset: 493 + ARISTA495T1: + vlans: + - 496 + vm_offset: 494 + ARISTA496T1: + vlans: + - 497 + vm_offset: 495 + ARISTA497T1: + vlans: + - 498 + vm_offset: 496 + ARISTA498T1: + vlans: + - 499 + vm_offset: 497 + ARISTA499T1: + vlans: + - 500 + vm_offset: 498 + ARISTA500T1: + vlans: + - 501 + vm_offset: 499 + ARISTA501T1: + vlans: + - 502 + vm_offset: 500 + ARISTA502T1: + vlans: + - 503 + vm_offset: 501 + ARISTA503T1: + vlans: + - 504 + vm_offset: 502 + ARISTA504T1: + vlans: + - 505 + vm_offset: 503 + ARISTA505T1: + vlans: + - 506 + vm_offset: 504 + ARISTA506T1: + vlans: + - 507 + vm_offset: 505 + ARISTA507T1: + vlans: + - 508 + vm_offset: 506 + ARISTA508T1: + vlans: + - 509 + vm_offset: 507 + ARISTA509T1: + vlans: + - 510 + vm_offset: 508 + ARISTA510T1: + vlans: + - 511 + vm_offset: 509 + DUT: + vlan_configs: + default_vlan_config: one_vlan_per_intf + one_vlan_per_intf: + Vlan1000: + id: 1000 + intfs: [0] + prefix_v6: fc00:c:c:0001::/64 + tag: 1000 + Vlan1001: + id: 1001 + intfs: [1] + prefix_v6: fc00:c:c:0002::/64 + tag: 1001 + +configuration_properties: + common: + dut_asn: 4200000000 + dut_type: ToRRouter + swrole: leaf + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + spine_asn: 4200200000 + leaf_asn_start: 4200100000 + tor_asn_start: 4200000000 + failure_rate: 0 + nhipv6: FC0A::FF + +configuration: + ARISTA01T1: + properties: + - common + bgp: + router-id: 0.12.0.3 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3::1/128 + Ethernet1: + ipv6: fc00:a::a/126 + bp_interface: + ipv6: fc00:b::3/64 + + ARISTA02T1: + properties: + - common + bgp: + router-id: 0.12.0.4 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d + interfaces: + Loopback0: + ipv6: fc00:c:c:4::1/128 + Ethernet1: + ipv6: fc00:a::e/126 + bp_interface: + ipv6: fc00:b::4/64 + + ARISTA03T1: + properties: + - common + bgp: + router-id: 0.12.0.5 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::11 + interfaces: + Loopback0: + ipv6: fc00:c:c:5::1/128 + Ethernet1: + ipv6: fc00:a::12/126 + bp_interface: + ipv6: fc00:b::5/64 + + ARISTA04T1: + properties: + - common + bgp: + router-id: 0.12.0.6 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::15 + interfaces: + Loopback0: + ipv6: fc00:c:c:6::1/128 + Ethernet1: + ipv6: fc00:a::16/126 + bp_interface: + ipv6: fc00:b::6/64 + + ARISTA05T1: + properties: + - common + bgp: + router-id: 0.12.0.7 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::19 + interfaces: + Loopback0: + ipv6: fc00:c:c:7::1/128 + Ethernet1: + ipv6: fc00:a::1a/126 + bp_interface: + ipv6: fc00:b::7/64 + + ARISTA06T1: + properties: + - common + bgp: + router-id: 0.12.0.8 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d + interfaces: + Loopback0: + ipv6: fc00:c:c:8::1/128 + Ethernet1: + ipv6: fc00:a::1e/126 + bp_interface: + ipv6: fc00:b::8/64 + + ARISTA07T1: + properties: + - common + bgp: + router-id: 0.12.0.9 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::21 + interfaces: + Loopback0: + ipv6: fc00:c:c:9::1/128 + Ethernet1: + ipv6: fc00:a::22/126 + bp_interface: + ipv6: fc00:b::9/64 + + ARISTA08T1: + properties: + - common + bgp: + router-id: 0.12.0.10 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::25 + interfaces: + Loopback0: + ipv6: fc00:c:c:a::1/128 + Ethernet1: + ipv6: fc00:a::26/126 + bp_interface: + ipv6: fc00:b::a/64 + + ARISTA09T1: + properties: + - common + bgp: + router-id: 0.12.0.11 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::29 + interfaces: + Loopback0: + ipv6: fc00:c:c:b::1/128 + Ethernet1: + ipv6: fc00:a::2a/126 + bp_interface: + ipv6: fc00:b::b/64 + + ARISTA10T1: + properties: + - common + bgp: + router-id: 0.12.0.12 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d + interfaces: + Loopback0: + ipv6: fc00:c:c:c::1/128 + Ethernet1: + ipv6: fc00:a::2e/126 + bp_interface: + ipv6: fc00:b::c/64 + + ARISTA11T1: + properties: + - common + bgp: + router-id: 0.12.0.13 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::31 + interfaces: + Loopback0: + ipv6: fc00:c:c:d::1/128 + Ethernet1: + ipv6: fc00:a::32/126 + bp_interface: + ipv6: fc00:b::d/64 + + ARISTA12T1: + properties: + - common + bgp: + router-id: 0.12.0.14 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::35 + interfaces: + Loopback0: + ipv6: fc00:c:c:e::1/128 + Ethernet1: + ipv6: fc00:a::36/126 + bp_interface: + ipv6: fc00:b::e/64 + + ARISTA13T1: + properties: + - common + bgp: + router-id: 0.12.0.15 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::39 + interfaces: + Loopback0: + ipv6: fc00:c:c:f::1/128 + Ethernet1: + ipv6: fc00:a::3a/126 + bp_interface: + ipv6: fc00:b::f/64 + + ARISTA14T1: + properties: + - common + bgp: + router-id: 0.12.0.16 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d + interfaces: + Loopback0: + ipv6: fc00:c:c:10::1/128 + Ethernet1: + ipv6: fc00:a::3e/126 + bp_interface: + ipv6: fc00:b::10/64 + + ARISTA15T1: + properties: + - common + bgp: + router-id: 0.12.0.17 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::41 + interfaces: + Loopback0: + ipv6: fc00:c:c:11::1/128 + Ethernet1: + ipv6: fc00:a::42/126 + bp_interface: + ipv6: fc00:b::11/64 + + ARISTA16T1: + properties: + - common + bgp: + router-id: 0.12.0.18 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::45 + interfaces: + Loopback0: + ipv6: fc00:c:c:12::1/128 + Ethernet1: + ipv6: fc00:a::46/126 + bp_interface: + ipv6: fc00:b::12/64 + + ARISTA17T1: + properties: + - common + bgp: + router-id: 0.12.0.19 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::49 + interfaces: + Loopback0: + ipv6: fc00:c:c:13::1/128 + Ethernet1: + ipv6: fc00:a::4a/126 + bp_interface: + ipv6: fc00:b::13/64 + + ARISTA18T1: + properties: + - common + bgp: + router-id: 0.12.0.20 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4d + interfaces: + Loopback0: + ipv6: fc00:c:c:14::1/128 + Ethernet1: + ipv6: fc00:a::4e/126 + bp_interface: + ipv6: fc00:b::14/64 + + ARISTA19T1: + properties: + - common + bgp: + router-id: 0.12.0.21 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::51 + interfaces: + Loopback0: + ipv6: fc00:c:c:15::1/128 + Ethernet1: + ipv6: fc00:a::52/126 + bp_interface: + ipv6: fc00:b::15/64 + + ARISTA20T1: + properties: + - common + bgp: + router-id: 0.12.0.22 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::55 + interfaces: + Loopback0: + ipv6: fc00:c:c:16::1/128 + Ethernet1: + ipv6: fc00:a::56/126 + bp_interface: + ipv6: fc00:b::16/64 + + ARISTA21T1: + properties: + - common + bgp: + router-id: 0.12.0.23 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::59 + interfaces: + Loopback0: + ipv6: fc00:c:c:17::1/128 + Ethernet1: + ipv6: fc00:a::5a/126 + bp_interface: + ipv6: fc00:b::17/64 + + ARISTA22T1: + properties: + - common + bgp: + router-id: 0.12.0.24 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5d + interfaces: + Loopback0: + ipv6: fc00:c:c:18::1/128 + Ethernet1: + ipv6: fc00:a::5e/126 + bp_interface: + ipv6: fc00:b::18/64 + + ARISTA23T1: + properties: + - common + bgp: + router-id: 0.12.0.25 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::61 + interfaces: + Loopback0: + ipv6: fc00:c:c:19::1/128 + Ethernet1: + ipv6: fc00:a::62/126 + bp_interface: + ipv6: fc00:b::19/64 + + ARISTA24T1: + properties: + - common + bgp: + router-id: 0.12.0.26 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::65 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a::1/128 + Ethernet1: + ipv6: fc00:a::66/126 + bp_interface: + ipv6: fc00:b::1a/64 + + ARISTA25T1: + properties: + - common + bgp: + router-id: 0.12.0.27 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::69 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b::1/128 + Ethernet1: + ipv6: fc00:a::6a/126 + bp_interface: + ipv6: fc00:b::1b/64 + + ARISTA26T1: + properties: + - common + bgp: + router-id: 0.12.0.28 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c::1/128 + Ethernet1: + ipv6: fc00:a::6e/126 + bp_interface: + ipv6: fc00:b::1c/64 + + ARISTA27T1: + properties: + - common + bgp: + router-id: 0.12.0.29 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::71 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d::1/128 + Ethernet1: + ipv6: fc00:a::72/126 + bp_interface: + ipv6: fc00:b::1d/64 + + ARISTA28T1: + properties: + - common + bgp: + router-id: 0.12.0.30 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::75 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e::1/128 + Ethernet1: + ipv6: fc00:a::76/126 + bp_interface: + ipv6: fc00:b::1e/64 + + ARISTA29T1: + properties: + - common + bgp: + router-id: 0.12.0.31 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::79 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f::1/128 + Ethernet1: + ipv6: fc00:a::7a/126 + bp_interface: + ipv6: fc00:b::1f/64 + + ARISTA30T1: + properties: + - common + bgp: + router-id: 0.12.0.32 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7d + interfaces: + Loopback0: + ipv6: fc00:c:c:20::1/128 + Ethernet1: + ipv6: fc00:a::7e/126 + bp_interface: + ipv6: fc00:b::20/64 + + ARISTA31T1: + properties: + - common + bgp: + router-id: 0.12.0.33 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::81 + interfaces: + Loopback0: + ipv6: fc00:c:c:21::1/128 + Ethernet1: + ipv6: fc00:a::82/126 + bp_interface: + ipv6: fc00:b::21/64 + + ARISTA32T1: + properties: + - common + bgp: + router-id: 0.12.0.34 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::85 + interfaces: + Loopback0: + ipv6: fc00:c:c:22::1/128 + Ethernet1: + ipv6: fc00:a::86/126 + bp_interface: + ipv6: fc00:b::22/64 + + ARISTA33T1: + properties: + - common + bgp: + router-id: 0.12.0.35 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::89 + interfaces: + Loopback0: + ipv6: fc00:c:c:23::1/128 + Ethernet1: + ipv6: fc00:a::8a/126 + bp_interface: + ipv6: fc00:b::23/64 + + ARISTA34T1: + properties: + - common + bgp: + router-id: 0.12.0.36 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::8d + interfaces: + Loopback0: + ipv6: fc00:c:c:24::1/128 + Ethernet1: + ipv6: fc00:a::8e/126 + bp_interface: + ipv6: fc00:b::24/64 + + ARISTA35T1: + properties: + - common + bgp: + router-id: 0.12.0.37 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::91 + interfaces: + Loopback0: + ipv6: fc00:c:c:25::1/128 + Ethernet1: + ipv6: fc00:a::92/126 + bp_interface: + ipv6: fc00:b::25/64 + + ARISTA36T1: + properties: + - common + bgp: + router-id: 0.12.0.38 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::95 + interfaces: + Loopback0: + ipv6: fc00:c:c:26::1/128 + Ethernet1: + ipv6: fc00:a::96/126 + bp_interface: + ipv6: fc00:b::26/64 + + ARISTA37T1: + properties: + - common + bgp: + router-id: 0.12.0.39 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::99 + interfaces: + Loopback0: + ipv6: fc00:c:c:27::1/128 + Ethernet1: + ipv6: fc00:a::9a/126 + bp_interface: + ipv6: fc00:b::27/64 + + ARISTA38T1: + properties: + - common + bgp: + router-id: 0.12.0.40 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::9d + interfaces: + Loopback0: + ipv6: fc00:c:c:28::1/128 + Ethernet1: + ipv6: fc00:a::9e/126 + bp_interface: + ipv6: fc00:b::28/64 + + ARISTA39T1: + properties: + - common + bgp: + router-id: 0.12.0.41 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:29::1/128 + Ethernet1: + ipv6: fc00:a::a2/126 + bp_interface: + ipv6: fc00:b::29/64 + + ARISTA40T1: + properties: + - common + bgp: + router-id: 0.12.0.42 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2a::1/128 + Ethernet1: + ipv6: fc00:a::a6/126 + bp_interface: + ipv6: fc00:b::2a/64 + + ARISTA41T1: + properties: + - common + bgp: + router-id: 0.12.0.43 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2b::1/128 + Ethernet1: + ipv6: fc00:a::aa/126 + bp_interface: + ipv6: fc00:b::2b/64 + + ARISTA42T1: + properties: + - common + bgp: + router-id: 0.12.0.44 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::ad + interfaces: + Loopback0: + ipv6: fc00:c:c:2c::1/128 + Ethernet1: + ipv6: fc00:a::ae/126 + bp_interface: + ipv6: fc00:b::2c/64 + + ARISTA43T1: + properties: + - common + bgp: + router-id: 0.12.0.45 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:2d::1/128 + Ethernet1: + ipv6: fc00:a::b2/126 + bp_interface: + ipv6: fc00:b::2d/64 + + ARISTA44T1: + properties: + - common + bgp: + router-id: 0.12.0.46 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2e::1/128 + Ethernet1: + ipv6: fc00:a::b6/126 + bp_interface: + ipv6: fc00:b::2e/64 + + ARISTA45T1: + properties: + - common + bgp: + router-id: 0.12.0.47 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2f::1/128 + Ethernet1: + ipv6: fc00:a::ba/126 + bp_interface: + ipv6: fc00:b::2f/64 + + ARISTA46T1: + properties: + - common + bgp: + router-id: 0.12.0.48 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::bd + interfaces: + Loopback0: + ipv6: fc00:c:c:30::1/128 + Ethernet1: + ipv6: fc00:a::be/126 + bp_interface: + ipv6: fc00:b::30/64 + + ARISTA47T1: + properties: + - common + bgp: + router-id: 0.12.0.49 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:31::1/128 + Ethernet1: + ipv6: fc00:a::c2/126 + bp_interface: + ipv6: fc00:b::31/64 + + ARISTA48T1: + properties: + - common + bgp: + router-id: 0.12.0.50 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:32::1/128 + Ethernet1: + ipv6: fc00:a::c6/126 + bp_interface: + ipv6: fc00:b::32/64 + + ARISTA49T1: + properties: + - common + bgp: + router-id: 0.12.0.51 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:33::1/128 + Ethernet1: + ipv6: fc00:a::ca/126 + bp_interface: + ipv6: fc00:b::33/64 + + ARISTA50T1: + properties: + - common + bgp: + router-id: 0.12.0.52 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::cd + interfaces: + Loopback0: + ipv6: fc00:c:c:34::1/128 + Ethernet1: + ipv6: fc00:a::ce/126 + bp_interface: + ipv6: fc00:b::34/64 + + ARISTA51T1: + properties: + - common + bgp: + router-id: 0.12.0.53 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:35::1/128 + Ethernet1: + ipv6: fc00:a::d2/126 + bp_interface: + ipv6: fc00:b::35/64 + + ARISTA52T1: + properties: + - common + bgp: + router-id: 0.12.0.54 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:36::1/128 + Ethernet1: + ipv6: fc00:a::d6/126 + bp_interface: + ipv6: fc00:b::36/64 + + ARISTA53T1: + properties: + - common + bgp: + router-id: 0.12.0.55 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:37::1/128 + Ethernet1: + ipv6: fc00:a::da/126 + bp_interface: + ipv6: fc00:b::37/64 + + ARISTA54T1: + properties: + - common + bgp: + router-id: 0.12.0.56 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::dd + interfaces: + Loopback0: + ipv6: fc00:c:c:38::1/128 + Ethernet1: + ipv6: fc00:a::de/126 + bp_interface: + ipv6: fc00:b::38/64 + + ARISTA55T1: + properties: + - common + bgp: + router-id: 0.12.0.57 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:39::1/128 + Ethernet1: + ipv6: fc00:a::e2/126 + bp_interface: + ipv6: fc00:b::39/64 + + ARISTA56T1: + properties: + - common + bgp: + router-id: 0.12.0.58 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3a::1/128 + Ethernet1: + ipv6: fc00:a::e6/126 + bp_interface: + ipv6: fc00:b::3a/64 + + ARISTA57T1: + properties: + - common + bgp: + router-id: 0.12.0.59 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3b::1/128 + Ethernet1: + ipv6: fc00:a::ea/126 + bp_interface: + ipv6: fc00:b::3b/64 + + ARISTA58T1: + properties: + - common + bgp: + router-id: 0.12.0.60 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::ed + interfaces: + Loopback0: + ipv6: fc00:c:c:3c::1/128 + Ethernet1: + ipv6: fc00:a::ee/126 + bp_interface: + ipv6: fc00:b::3c/64 + + ARISTA59T1: + properties: + - common + bgp: + router-id: 0.12.0.61 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:3d::1/128 + Ethernet1: + ipv6: fc00:a::f2/126 + bp_interface: + ipv6: fc00:b::3d/64 + + ARISTA60T1: + properties: + - common + bgp: + router-id: 0.12.0.62 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3e::1/128 + Ethernet1: + ipv6: fc00:a::f6/126 + bp_interface: + ipv6: fc00:b::3e/64 + + ARISTA61T1: + properties: + - common + bgp: + router-id: 0.12.0.63 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3f::1/128 + Ethernet1: + ipv6: fc00:a::fa/126 + bp_interface: + ipv6: fc00:b::3f/64 + + ARISTA62T1: + properties: + - common + bgp: + router-id: 0.12.0.64 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::fd + interfaces: + Loopback0: + ipv6: fc00:c:c:40::1/128 + Ethernet1: + ipv6: fc00:a::fe/126 + bp_interface: + ipv6: fc00:b::40/64 + + ARISTA63T1: + properties: + - common + bgp: + router-id: 0.12.0.65 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::101 + interfaces: + Loopback0: + ipv6: fc00:c:c:41::1/128 + Ethernet1: + ipv6: fc00:a::102/126 + bp_interface: + ipv6: fc00:b::41/64 + + ARISTA64T1: + properties: + - common + bgp: + router-id: 0.12.0.66 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::105 + interfaces: + Loopback0: + ipv6: fc00:c:c:42::1/128 + Ethernet1: + ipv6: fc00:a::106/126 + bp_interface: + ipv6: fc00:b::42/64 + + ARISTA65T1: + properties: + - common + bgp: + router-id: 0.12.0.67 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::109 + interfaces: + Loopback0: + ipv6: fc00:c:c:43::1/128 + Ethernet1: + ipv6: fc00:a::10a/126 + bp_interface: + ipv6: fc00:b::43/64 + + ARISTA66T1: + properties: + - common + bgp: + router-id: 0.12.0.68 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::10d + interfaces: + Loopback0: + ipv6: fc00:c:c:44::1/128 + Ethernet1: + ipv6: fc00:a::10e/126 + bp_interface: + ipv6: fc00:b::44/64 + + ARISTA67T1: + properties: + - common + bgp: + router-id: 0.12.0.69 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::111 + interfaces: + Loopback0: + ipv6: fc00:c:c:45::1/128 + Ethernet1: + ipv6: fc00:a::112/126 + bp_interface: + ipv6: fc00:b::45/64 + + ARISTA68T1: + properties: + - common + bgp: + router-id: 0.12.0.70 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::115 + interfaces: + Loopback0: + ipv6: fc00:c:c:46::1/128 + Ethernet1: + ipv6: fc00:a::116/126 + bp_interface: + ipv6: fc00:b::46/64 + + ARISTA69T1: + properties: + - common + bgp: + router-id: 0.12.0.71 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::119 + interfaces: + Loopback0: + ipv6: fc00:c:c:47::1/128 + Ethernet1: + ipv6: fc00:a::11a/126 + bp_interface: + ipv6: fc00:b::47/64 + + ARISTA70T1: + properties: + - common + bgp: + router-id: 0.12.0.72 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::11d + interfaces: + Loopback0: + ipv6: fc00:c:c:48::1/128 + Ethernet1: + ipv6: fc00:a::11e/126 + bp_interface: + ipv6: fc00:b::48/64 + + ARISTA71T1: + properties: + - common + bgp: + router-id: 0.12.0.73 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::121 + interfaces: + Loopback0: + ipv6: fc00:c:c:49::1/128 + Ethernet1: + ipv6: fc00:a::122/126 + bp_interface: + ipv6: fc00:b::49/64 + + ARISTA72T1: + properties: + - common + bgp: + router-id: 0.12.0.74 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::125 + interfaces: + Loopback0: + ipv6: fc00:c:c:4a::1/128 + Ethernet1: + ipv6: fc00:a::126/126 + bp_interface: + ipv6: fc00:b::4a/64 + + ARISTA73T1: + properties: + - common + bgp: + router-id: 0.12.0.75 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::129 + interfaces: + Loopback0: + ipv6: fc00:c:c:4b::1/128 + Ethernet1: + ipv6: fc00:a::12a/126 + bp_interface: + ipv6: fc00:b::4b/64 + + ARISTA74T1: + properties: + - common + bgp: + router-id: 0.12.0.76 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::12d + interfaces: + Loopback0: + ipv6: fc00:c:c:4c::1/128 + Ethernet1: + ipv6: fc00:a::12e/126 + bp_interface: + ipv6: fc00:b::4c/64 + + ARISTA75T1: + properties: + - common + bgp: + router-id: 0.12.0.77 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::131 + interfaces: + Loopback0: + ipv6: fc00:c:c:4d::1/128 + Ethernet1: + ipv6: fc00:a::132/126 + bp_interface: + ipv6: fc00:b::4d/64 + + ARISTA76T1: + properties: + - common + bgp: + router-id: 0.12.0.78 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::135 + interfaces: + Loopback0: + ipv6: fc00:c:c:4e::1/128 + Ethernet1: + ipv6: fc00:a::136/126 + bp_interface: + ipv6: fc00:b::4e/64 + + ARISTA77T1: + properties: + - common + bgp: + router-id: 0.12.0.79 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::139 + interfaces: + Loopback0: + ipv6: fc00:c:c:4f::1/128 + Ethernet1: + ipv6: fc00:a::13a/126 + bp_interface: + ipv6: fc00:b::4f/64 + + ARISTA78T1: + properties: + - common + bgp: + router-id: 0.12.0.80 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::13d + interfaces: + Loopback0: + ipv6: fc00:c:c:50::1/128 + Ethernet1: + ipv6: fc00:a::13e/126 + bp_interface: + ipv6: fc00:b::50/64 + + ARISTA79T1: + properties: + - common + bgp: + router-id: 0.12.0.81 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::141 + interfaces: + Loopback0: + ipv6: fc00:c:c:51::1/128 + Ethernet1: + ipv6: fc00:a::142/126 + bp_interface: + ipv6: fc00:b::51/64 + + ARISTA80T1: + properties: + - common + bgp: + router-id: 0.12.0.82 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::145 + interfaces: + Loopback0: + ipv6: fc00:c:c:52::1/128 + Ethernet1: + ipv6: fc00:a::146/126 + bp_interface: + ipv6: fc00:b::52/64 + + ARISTA81T1: + properties: + - common + bgp: + router-id: 0.12.0.83 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::149 + interfaces: + Loopback0: + ipv6: fc00:c:c:53::1/128 + Ethernet1: + ipv6: fc00:a::14a/126 + bp_interface: + ipv6: fc00:b::53/64 + + ARISTA82T1: + properties: + - common + bgp: + router-id: 0.12.0.84 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::14d + interfaces: + Loopback0: + ipv6: fc00:c:c:54::1/128 + Ethernet1: + ipv6: fc00:a::14e/126 + bp_interface: + ipv6: fc00:b::54/64 + + ARISTA83T1: + properties: + - common + bgp: + router-id: 0.12.0.85 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::151 + interfaces: + Loopback0: + ipv6: fc00:c:c:55::1/128 + Ethernet1: + ipv6: fc00:a::152/126 + bp_interface: + ipv6: fc00:b::55/64 + + ARISTA84T1: + properties: + - common + bgp: + router-id: 0.12.0.86 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::155 + interfaces: + Loopback0: + ipv6: fc00:c:c:56::1/128 + Ethernet1: + ipv6: fc00:a::156/126 + bp_interface: + ipv6: fc00:b::56/64 + + ARISTA85T1: + properties: + - common + bgp: + router-id: 0.12.0.87 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::159 + interfaces: + Loopback0: + ipv6: fc00:c:c:57::1/128 + Ethernet1: + ipv6: fc00:a::15a/126 + bp_interface: + ipv6: fc00:b::57/64 + + ARISTA86T1: + properties: + - common + bgp: + router-id: 0.12.0.88 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::15d + interfaces: + Loopback0: + ipv6: fc00:c:c:58::1/128 + Ethernet1: + ipv6: fc00:a::15e/126 + bp_interface: + ipv6: fc00:b::58/64 + + ARISTA87T1: + properties: + - common + bgp: + router-id: 0.12.0.89 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::161 + interfaces: + Loopback0: + ipv6: fc00:c:c:59::1/128 + Ethernet1: + ipv6: fc00:a::162/126 + bp_interface: + ipv6: fc00:b::59/64 + + ARISTA88T1: + properties: + - common + bgp: + router-id: 0.12.0.90 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::165 + interfaces: + Loopback0: + ipv6: fc00:c:c:5a::1/128 + Ethernet1: + ipv6: fc00:a::166/126 + bp_interface: + ipv6: fc00:b::5a/64 + + ARISTA89T1: + properties: + - common + bgp: + router-id: 0.12.0.91 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::169 + interfaces: + Loopback0: + ipv6: fc00:c:c:5b::1/128 + Ethernet1: + ipv6: fc00:a::16a/126 + bp_interface: + ipv6: fc00:b::5b/64 + + ARISTA90T1: + properties: + - common + bgp: + router-id: 0.12.0.92 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::16d + interfaces: + Loopback0: + ipv6: fc00:c:c:5c::1/128 + Ethernet1: + ipv6: fc00:a::16e/126 + bp_interface: + ipv6: fc00:b::5c/64 + + ARISTA91T1: + properties: + - common + bgp: + router-id: 0.12.0.93 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::171 + interfaces: + Loopback0: + ipv6: fc00:c:c:5d::1/128 + Ethernet1: + ipv6: fc00:a::172/126 + bp_interface: + ipv6: fc00:b::5d/64 + + ARISTA92T1: + properties: + - common + bgp: + router-id: 0.12.0.94 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::175 + interfaces: + Loopback0: + ipv6: fc00:c:c:5e::1/128 + Ethernet1: + ipv6: fc00:a::176/126 + bp_interface: + ipv6: fc00:b::5e/64 + + ARISTA93T1: + properties: + - common + bgp: + router-id: 0.12.0.95 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::179 + interfaces: + Loopback0: + ipv6: fc00:c:c:5f::1/128 + Ethernet1: + ipv6: fc00:a::17a/126 + bp_interface: + ipv6: fc00:b::5f/64 + + ARISTA94T1: + properties: + - common + bgp: + router-id: 0.12.0.96 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::17d + interfaces: + Loopback0: + ipv6: fc00:c:c:60::1/128 + Ethernet1: + ipv6: fc00:a::17e/126 + bp_interface: + ipv6: fc00:b::60/64 + + ARISTA95T1: + properties: + - common + bgp: + router-id: 0.12.0.97 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::181 + interfaces: + Loopback0: + ipv6: fc00:c:c:61::1/128 + Ethernet1: + ipv6: fc00:a::182/126 + bp_interface: + ipv6: fc00:b::61/64 + + ARISTA96T1: + properties: + - common + bgp: + router-id: 0.12.0.98 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::185 + interfaces: + Loopback0: + ipv6: fc00:c:c:62::1/128 + Ethernet1: + ipv6: fc00:a::186/126 + bp_interface: + ipv6: fc00:b::62/64 + + ARISTA97T1: + properties: + - common + bgp: + router-id: 0.12.0.99 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::189 + interfaces: + Loopback0: + ipv6: fc00:c:c:63::1/128 + Ethernet1: + ipv6: fc00:a::18a/126 + bp_interface: + ipv6: fc00:b::63/64 + + ARISTA98T1: + properties: + - common + bgp: + router-id: 0.12.0.100 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::18d + interfaces: + Loopback0: + ipv6: fc00:c:c:64::1/128 + Ethernet1: + ipv6: fc00:a::18e/126 + bp_interface: + ipv6: fc00:b::64/64 + + ARISTA99T1: + properties: + - common + bgp: + router-id: 0.12.0.101 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::191 + interfaces: + Loopback0: + ipv6: fc00:c:c:65::1/128 + Ethernet1: + ipv6: fc00:a::192/126 + bp_interface: + ipv6: fc00:b::65/64 + + ARISTA100T1: + properties: + - common + bgp: + router-id: 0.12.0.102 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::195 + interfaces: + Loopback0: + ipv6: fc00:c:c:66::1/128 + Ethernet1: + ipv6: fc00:a::196/126 + bp_interface: + ipv6: fc00:b::66/64 + + ARISTA101T1: + properties: + - common + bgp: + router-id: 0.12.0.103 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::199 + interfaces: + Loopback0: + ipv6: fc00:c:c:67::1/128 + Ethernet1: + ipv6: fc00:a::19a/126 + bp_interface: + ipv6: fc00:b::67/64 + + ARISTA102T1: + properties: + - common + bgp: + router-id: 0.12.0.104 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::19d + interfaces: + Loopback0: + ipv6: fc00:c:c:68::1/128 + Ethernet1: + ipv6: fc00:a::19e/126 + bp_interface: + ipv6: fc00:b::68/64 + + ARISTA103T1: + properties: + - common + bgp: + router-id: 0.12.0.105 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:69::1/128 + Ethernet1: + ipv6: fc00:a::1a2/126 + bp_interface: + ipv6: fc00:b::69/64 + + ARISTA104T1: + properties: + - common + bgp: + router-id: 0.12.0.106 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6a::1/128 + Ethernet1: + ipv6: fc00:a::1a6/126 + bp_interface: + ipv6: fc00:b::6a/64 + + ARISTA105T1: + properties: + - common + bgp: + router-id: 0.12.0.107 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6b::1/128 + Ethernet1: + ipv6: fc00:a::1aa/126 + bp_interface: + ipv6: fc00:b::6b/64 + + ARISTA106T1: + properties: + - common + bgp: + router-id: 0.12.0.108 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1ad + interfaces: + Loopback0: + ipv6: fc00:c:c:6c::1/128 + Ethernet1: + ipv6: fc00:a::1ae/126 + bp_interface: + ipv6: fc00:b::6c/64 + + ARISTA107T1: + properties: + - common + bgp: + router-id: 0.12.0.109 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:6d::1/128 + Ethernet1: + ipv6: fc00:a::1b2/126 + bp_interface: + ipv6: fc00:b::6d/64 + + ARISTA108T1: + properties: + - common + bgp: + router-id: 0.12.0.110 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6e::1/128 + Ethernet1: + ipv6: fc00:a::1b6/126 + bp_interface: + ipv6: fc00:b::6e/64 + + ARISTA109T1: + properties: + - common + bgp: + router-id: 0.12.0.111 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6f::1/128 + Ethernet1: + ipv6: fc00:a::1ba/126 + bp_interface: + ipv6: fc00:b::6f/64 + + ARISTA110T1: + properties: + - common + bgp: + router-id: 0.12.0.112 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1bd + interfaces: + Loopback0: + ipv6: fc00:c:c:70::1/128 + Ethernet1: + ipv6: fc00:a::1be/126 + bp_interface: + ipv6: fc00:b::70/64 + + ARISTA111T1: + properties: + - common + bgp: + router-id: 0.12.0.113 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:71::1/128 + Ethernet1: + ipv6: fc00:a::1c2/126 + bp_interface: + ipv6: fc00:b::71/64 + + ARISTA112T1: + properties: + - common + bgp: + router-id: 0.12.0.114 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:72::1/128 + Ethernet1: + ipv6: fc00:a::1c6/126 + bp_interface: + ipv6: fc00:b::72/64 + + ARISTA113T1: + properties: + - common + bgp: + router-id: 0.12.0.115 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:73::1/128 + Ethernet1: + ipv6: fc00:a::1ca/126 + bp_interface: + ipv6: fc00:b::73/64 + + ARISTA114T1: + properties: + - common + bgp: + router-id: 0.12.0.116 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1cd + interfaces: + Loopback0: + ipv6: fc00:c:c:74::1/128 + Ethernet1: + ipv6: fc00:a::1ce/126 + bp_interface: + ipv6: fc00:b::74/64 + + ARISTA115T1: + properties: + - common + bgp: + router-id: 0.12.0.117 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:75::1/128 + Ethernet1: + ipv6: fc00:a::1d2/126 + bp_interface: + ipv6: fc00:b::75/64 + + ARISTA116T1: + properties: + - common + bgp: + router-id: 0.12.0.118 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:76::1/128 + Ethernet1: + ipv6: fc00:a::1d6/126 + bp_interface: + ipv6: fc00:b::76/64 + + ARISTA117T1: + properties: + - common + bgp: + router-id: 0.12.0.119 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:77::1/128 + Ethernet1: + ipv6: fc00:a::1da/126 + bp_interface: + ipv6: fc00:b::77/64 + + ARISTA118T1: + properties: + - common + bgp: + router-id: 0.12.0.120 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1dd + interfaces: + Loopback0: + ipv6: fc00:c:c:78::1/128 + Ethernet1: + ipv6: fc00:a::1de/126 + bp_interface: + ipv6: fc00:b::78/64 + + ARISTA119T1: + properties: + - common + bgp: + router-id: 0.12.0.121 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:79::1/128 + Ethernet1: + ipv6: fc00:a::1e2/126 + bp_interface: + ipv6: fc00:b::79/64 + + ARISTA120T1: + properties: + - common + bgp: + router-id: 0.12.0.122 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7a::1/128 + Ethernet1: + ipv6: fc00:a::1e6/126 + bp_interface: + ipv6: fc00:b::7a/64 + + ARISTA121T1: + properties: + - common + bgp: + router-id: 0.12.0.123 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7b::1/128 + Ethernet1: + ipv6: fc00:a::1ea/126 + bp_interface: + ipv6: fc00:b::7b/64 + + ARISTA122T1: + properties: + - common + bgp: + router-id: 0.12.0.124 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1ed + interfaces: + Loopback0: + ipv6: fc00:c:c:7c::1/128 + Ethernet1: + ipv6: fc00:a::1ee/126 + bp_interface: + ipv6: fc00:b::7c/64 + + ARISTA123T1: + properties: + - common + bgp: + router-id: 0.12.0.125 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:7d::1/128 + Ethernet1: + ipv6: fc00:a::1f2/126 + bp_interface: + ipv6: fc00:b::7d/64 + + ARISTA124T1: + properties: + - common + bgp: + router-id: 0.12.0.126 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7e::1/128 + Ethernet1: + ipv6: fc00:a::1f6/126 + bp_interface: + ipv6: fc00:b::7e/64 + + ARISTA125T1: + properties: + - common + bgp: + router-id: 0.12.0.127 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7f::1/128 + Ethernet1: + ipv6: fc00:a::1fa/126 + bp_interface: + ipv6: fc00:b::7f/64 + + ARISTA126T1: + properties: + - common + bgp: + router-id: 0.12.0.128 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::1fd + interfaces: + Loopback0: + ipv6: fc00:c:c:80::1/128 + Ethernet1: + ipv6: fc00:a::1fe/126 + bp_interface: + ipv6: fc00:b::80/64 + + ARISTA127T1: + properties: + - common + bgp: + router-id: 0.12.0.129 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::201 + interfaces: + Loopback0: + ipv6: fc00:c:c:81::1/128 + Ethernet1: + ipv6: fc00:a::202/126 + bp_interface: + ipv6: fc00:b::81/64 + + ARISTA128T1: + properties: + - common + bgp: + router-id: 0.12.0.130 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::205 + interfaces: + Loopback0: + ipv6: fc00:c:c:82::1/128 + Ethernet1: + ipv6: fc00:a::206/126 + bp_interface: + ipv6: fc00:b::82/64 + + ARISTA129T1: + properties: + - common + bgp: + router-id: 0.12.0.131 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::209 + interfaces: + Loopback0: + ipv6: fc00:c:c:83::1/128 + Ethernet1: + ipv6: fc00:a::20a/126 + bp_interface: + ipv6: fc00:b::83/64 + + ARISTA130T1: + properties: + - common + bgp: + router-id: 0.12.0.132 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::20d + interfaces: + Loopback0: + ipv6: fc00:c:c:84::1/128 + Ethernet1: + ipv6: fc00:a::20e/126 + bp_interface: + ipv6: fc00:b::84/64 + + ARISTA131T1: + properties: + - common + bgp: + router-id: 0.12.0.133 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::211 + interfaces: + Loopback0: + ipv6: fc00:c:c:85::1/128 + Ethernet1: + ipv6: fc00:a::212/126 + bp_interface: + ipv6: fc00:b::85/64 + + ARISTA132T1: + properties: + - common + bgp: + router-id: 0.12.0.134 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::215 + interfaces: + Loopback0: + ipv6: fc00:c:c:86::1/128 + Ethernet1: + ipv6: fc00:a::216/126 + bp_interface: + ipv6: fc00:b::86/64 + + ARISTA133T1: + properties: + - common + bgp: + router-id: 0.12.0.135 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::219 + interfaces: + Loopback0: + ipv6: fc00:c:c:87::1/128 + Ethernet1: + ipv6: fc00:a::21a/126 + bp_interface: + ipv6: fc00:b::87/64 + + ARISTA134T1: + properties: + - common + bgp: + router-id: 0.12.0.136 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::21d + interfaces: + Loopback0: + ipv6: fc00:c:c:88::1/128 + Ethernet1: + ipv6: fc00:a::21e/126 + bp_interface: + ipv6: fc00:b::88/64 + + ARISTA135T1: + properties: + - common + bgp: + router-id: 0.12.0.137 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::221 + interfaces: + Loopback0: + ipv6: fc00:c:c:89::1/128 + Ethernet1: + ipv6: fc00:a::222/126 + bp_interface: + ipv6: fc00:b::89/64 + + ARISTA136T1: + properties: + - common + bgp: + router-id: 0.12.0.138 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::225 + interfaces: + Loopback0: + ipv6: fc00:c:c:8a::1/128 + Ethernet1: + ipv6: fc00:a::226/126 + bp_interface: + ipv6: fc00:b::8a/64 + + ARISTA137T1: + properties: + - common + bgp: + router-id: 0.12.0.139 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::229 + interfaces: + Loopback0: + ipv6: fc00:c:c:8b::1/128 + Ethernet1: + ipv6: fc00:a::22a/126 + bp_interface: + ipv6: fc00:b::8b/64 + + ARISTA138T1: + properties: + - common + bgp: + router-id: 0.12.0.140 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::22d + interfaces: + Loopback0: + ipv6: fc00:c:c:8c::1/128 + Ethernet1: + ipv6: fc00:a::22e/126 + bp_interface: + ipv6: fc00:b::8c/64 + + ARISTA139T1: + properties: + - common + bgp: + router-id: 0.12.0.141 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::231 + interfaces: + Loopback0: + ipv6: fc00:c:c:8d::1/128 + Ethernet1: + ipv6: fc00:a::232/126 + bp_interface: + ipv6: fc00:b::8d/64 + + ARISTA140T1: + properties: + - common + bgp: + router-id: 0.12.0.142 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::235 + interfaces: + Loopback0: + ipv6: fc00:c:c:8e::1/128 + Ethernet1: + ipv6: fc00:a::236/126 + bp_interface: + ipv6: fc00:b::8e/64 + + ARISTA141T1: + properties: + - common + bgp: + router-id: 0.12.0.143 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::239 + interfaces: + Loopback0: + ipv6: fc00:c:c:8f::1/128 + Ethernet1: + ipv6: fc00:a::23a/126 + bp_interface: + ipv6: fc00:b::8f/64 + + ARISTA142T1: + properties: + - common + bgp: + router-id: 0.12.0.144 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::23d + interfaces: + Loopback0: + ipv6: fc00:c:c:90::1/128 + Ethernet1: + ipv6: fc00:a::23e/126 + bp_interface: + ipv6: fc00:b::90/64 + + ARISTA143T1: + properties: + - common + bgp: + router-id: 0.12.0.145 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::241 + interfaces: + Loopback0: + ipv6: fc00:c:c:91::1/128 + Ethernet1: + ipv6: fc00:a::242/126 + bp_interface: + ipv6: fc00:b::91/64 + + ARISTA144T1: + properties: + - common + bgp: + router-id: 0.12.0.146 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::245 + interfaces: + Loopback0: + ipv6: fc00:c:c:92::1/128 + Ethernet1: + ipv6: fc00:a::246/126 + bp_interface: + ipv6: fc00:b::92/64 + + ARISTA145T1: + properties: + - common + bgp: + router-id: 0.12.0.147 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::249 + interfaces: + Loopback0: + ipv6: fc00:c:c:93::1/128 + Ethernet1: + ipv6: fc00:a::24a/126 + bp_interface: + ipv6: fc00:b::93/64 + + ARISTA146T1: + properties: + - common + bgp: + router-id: 0.12.0.148 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::24d + interfaces: + Loopback0: + ipv6: fc00:c:c:94::1/128 + Ethernet1: + ipv6: fc00:a::24e/126 + bp_interface: + ipv6: fc00:b::94/64 + + ARISTA147T1: + properties: + - common + bgp: + router-id: 0.12.0.149 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::251 + interfaces: + Loopback0: + ipv6: fc00:c:c:95::1/128 + Ethernet1: + ipv6: fc00:a::252/126 + bp_interface: + ipv6: fc00:b::95/64 + + ARISTA148T1: + properties: + - common + bgp: + router-id: 0.12.0.150 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::255 + interfaces: + Loopback0: + ipv6: fc00:c:c:96::1/128 + Ethernet1: + ipv6: fc00:a::256/126 + bp_interface: + ipv6: fc00:b::96/64 + + ARISTA149T1: + properties: + - common + bgp: + router-id: 0.12.0.151 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::259 + interfaces: + Loopback0: + ipv6: fc00:c:c:97::1/128 + Ethernet1: + ipv6: fc00:a::25a/126 + bp_interface: + ipv6: fc00:b::97/64 + + ARISTA150T1: + properties: + - common + bgp: + router-id: 0.12.0.152 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::25d + interfaces: + Loopback0: + ipv6: fc00:c:c:98::1/128 + Ethernet1: + ipv6: fc00:a::25e/126 + bp_interface: + ipv6: fc00:b::98/64 + + ARISTA151T1: + properties: + - common + bgp: + router-id: 0.12.0.153 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::261 + interfaces: + Loopback0: + ipv6: fc00:c:c:99::1/128 + Ethernet1: + ipv6: fc00:a::262/126 + bp_interface: + ipv6: fc00:b::99/64 + + ARISTA152T1: + properties: + - common + bgp: + router-id: 0.12.0.154 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::265 + interfaces: + Loopback0: + ipv6: fc00:c:c:9a::1/128 + Ethernet1: + ipv6: fc00:a::266/126 + bp_interface: + ipv6: fc00:b::9a/64 + + ARISTA153T1: + properties: + - common + bgp: + router-id: 0.12.0.155 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::269 + interfaces: + Loopback0: + ipv6: fc00:c:c:9b::1/128 + Ethernet1: + ipv6: fc00:a::26a/126 + bp_interface: + ipv6: fc00:b::9b/64 + + ARISTA154T1: + properties: + - common + bgp: + router-id: 0.12.0.156 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::26d + interfaces: + Loopback0: + ipv6: fc00:c:c:9c::1/128 + Ethernet1: + ipv6: fc00:a::26e/126 + bp_interface: + ipv6: fc00:b::9c/64 + + ARISTA155T1: + properties: + - common + bgp: + router-id: 0.12.0.157 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::271 + interfaces: + Loopback0: + ipv6: fc00:c:c:9d::1/128 + Ethernet1: + ipv6: fc00:a::272/126 + bp_interface: + ipv6: fc00:b::9d/64 + + ARISTA156T1: + properties: + - common + bgp: + router-id: 0.12.0.158 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::275 + interfaces: + Loopback0: + ipv6: fc00:c:c:9e::1/128 + Ethernet1: + ipv6: fc00:a::276/126 + bp_interface: + ipv6: fc00:b::9e/64 + + ARISTA157T1: + properties: + - common + bgp: + router-id: 0.12.0.159 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::279 + interfaces: + Loopback0: + ipv6: fc00:c:c:9f::1/128 + Ethernet1: + ipv6: fc00:a::27a/126 + bp_interface: + ipv6: fc00:b::9f/64 + + ARISTA158T1: + properties: + - common + bgp: + router-id: 0.12.0.160 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::27d + interfaces: + Loopback0: + ipv6: fc00:c:c:a0::1/128 + Ethernet1: + ipv6: fc00:a::27e/126 + bp_interface: + ipv6: fc00:b::a0/64 + + ARISTA159T1: + properties: + - common + bgp: + router-id: 0.12.0.161 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::281 + interfaces: + Loopback0: + ipv6: fc00:c:c:a1::1/128 + Ethernet1: + ipv6: fc00:a::282/126 + bp_interface: + ipv6: fc00:b::a1/64 + + ARISTA160T1: + properties: + - common + bgp: + router-id: 0.12.0.162 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::285 + interfaces: + Loopback0: + ipv6: fc00:c:c:a2::1/128 + Ethernet1: + ipv6: fc00:a::286/126 + bp_interface: + ipv6: fc00:b::a2/64 + + ARISTA161T1: + properties: + - common + bgp: + router-id: 0.12.0.163 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::289 + interfaces: + Loopback0: + ipv6: fc00:c:c:a3::1/128 + Ethernet1: + ipv6: fc00:a::28a/126 + bp_interface: + ipv6: fc00:b::a3/64 + + ARISTA162T1: + properties: + - common + bgp: + router-id: 0.12.0.164 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::28d + interfaces: + Loopback0: + ipv6: fc00:c:c:a4::1/128 + Ethernet1: + ipv6: fc00:a::28e/126 + bp_interface: + ipv6: fc00:b::a4/64 + + ARISTA163T1: + properties: + - common + bgp: + router-id: 0.12.0.165 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::291 + interfaces: + Loopback0: + ipv6: fc00:c:c:a5::1/128 + Ethernet1: + ipv6: fc00:a::292/126 + bp_interface: + ipv6: fc00:b::a5/64 + + ARISTA164T1: + properties: + - common + bgp: + router-id: 0.12.0.166 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::295 + interfaces: + Loopback0: + ipv6: fc00:c:c:a6::1/128 + Ethernet1: + ipv6: fc00:a::296/126 + bp_interface: + ipv6: fc00:b::a6/64 + + ARISTA165T1: + properties: + - common + bgp: + router-id: 0.12.0.167 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::299 + interfaces: + Loopback0: + ipv6: fc00:c:c:a7::1/128 + Ethernet1: + ipv6: fc00:a::29a/126 + bp_interface: + ipv6: fc00:b::a7/64 + + ARISTA166T1: + properties: + - common + bgp: + router-id: 0.12.0.168 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::29d + interfaces: + Loopback0: + ipv6: fc00:c:c:a8::1/128 + Ethernet1: + ipv6: fc00:a::29e/126 + bp_interface: + ipv6: fc00:b::a8/64 + + ARISTA167T1: + properties: + - common + bgp: + router-id: 0.12.0.169 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:a9::1/128 + Ethernet1: + ipv6: fc00:a::2a2/126 + bp_interface: + ipv6: fc00:b::a9/64 + + ARISTA168T1: + properties: + - common + bgp: + router-id: 0.12.0.170 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:aa::1/128 + Ethernet1: + ipv6: fc00:a::2a6/126 + bp_interface: + ipv6: fc00:b::aa/64 + + ARISTA169T1: + properties: + - common + bgp: + router-id: 0.12.0.171 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ab::1/128 + Ethernet1: + ipv6: fc00:a::2aa/126 + bp_interface: + ipv6: fc00:b::ab/64 + + ARISTA170T1: + properties: + - common + bgp: + router-id: 0.12.0.172 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ac::1/128 + Ethernet1: + ipv6: fc00:a::2ae/126 + bp_interface: + ipv6: fc00:b::ac/64 + + ARISTA171T1: + properties: + - common + bgp: + router-id: 0.12.0.173 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ad::1/128 + Ethernet1: + ipv6: fc00:a::2b2/126 + bp_interface: + ipv6: fc00:b::ad/64 + + ARISTA172T1: + properties: + - common + bgp: + router-id: 0.12.0.174 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ae::1/128 + Ethernet1: + ipv6: fc00:a::2b6/126 + bp_interface: + ipv6: fc00:b::ae/64 + + ARISTA173T1: + properties: + - common + bgp: + router-id: 0.12.0.175 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:af::1/128 + Ethernet1: + ipv6: fc00:a::2ba/126 + bp_interface: + ipv6: fc00:b::af/64 + + ARISTA174T1: + properties: + - common + bgp: + router-id: 0.12.0.176 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2bd + interfaces: + Loopback0: + ipv6: fc00:c:c:b0::1/128 + Ethernet1: + ipv6: fc00:a::2be/126 + bp_interface: + ipv6: fc00:b::b0/64 + + ARISTA175T1: + properties: + - common + bgp: + router-id: 0.12.0.177 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b1::1/128 + Ethernet1: + ipv6: fc00:a::2c2/126 + bp_interface: + ipv6: fc00:b::b1/64 + + ARISTA176T1: + properties: + - common + bgp: + router-id: 0.12.0.178 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b2::1/128 + Ethernet1: + ipv6: fc00:a::2c6/126 + bp_interface: + ipv6: fc00:b::b2/64 + + ARISTA177T1: + properties: + - common + bgp: + router-id: 0.12.0.179 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b3::1/128 + Ethernet1: + ipv6: fc00:a::2ca/126 + bp_interface: + ipv6: fc00:b::b3/64 + + ARISTA178T1: + properties: + - common + bgp: + router-id: 0.12.0.180 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2cd + interfaces: + Loopback0: + ipv6: fc00:c:c:b4::1/128 + Ethernet1: + ipv6: fc00:a::2ce/126 + bp_interface: + ipv6: fc00:b::b4/64 + + ARISTA179T1: + properties: + - common + bgp: + router-id: 0.12.0.181 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b5::1/128 + Ethernet1: + ipv6: fc00:a::2d2/126 + bp_interface: + ipv6: fc00:b::b5/64 + + ARISTA180T1: + properties: + - common + bgp: + router-id: 0.12.0.182 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b6::1/128 + Ethernet1: + ipv6: fc00:a::2d6/126 + bp_interface: + ipv6: fc00:b::b6/64 + + ARISTA181T1: + properties: + - common + bgp: + router-id: 0.12.0.183 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b7::1/128 + Ethernet1: + ipv6: fc00:a::2da/126 + bp_interface: + ipv6: fc00:b::b7/64 + + ARISTA182T1: + properties: + - common + bgp: + router-id: 0.12.0.184 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2dd + interfaces: + Loopback0: + ipv6: fc00:c:c:b8::1/128 + Ethernet1: + ipv6: fc00:a::2de/126 + bp_interface: + ipv6: fc00:b::b8/64 + + ARISTA183T1: + properties: + - common + bgp: + router-id: 0.12.0.185 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b9::1/128 + Ethernet1: + ipv6: fc00:a::2e2/126 + bp_interface: + ipv6: fc00:b::b9/64 + + ARISTA184T1: + properties: + - common + bgp: + router-id: 0.12.0.186 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ba::1/128 + Ethernet1: + ipv6: fc00:a::2e6/126 + bp_interface: + ipv6: fc00:b::ba/64 + + ARISTA185T1: + properties: + - common + bgp: + router-id: 0.12.0.187 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bb::1/128 + Ethernet1: + ipv6: fc00:a::2ea/126 + bp_interface: + ipv6: fc00:b::bb/64 + + ARISTA186T1: + properties: + - common + bgp: + router-id: 0.12.0.188 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2ed + interfaces: + Loopback0: + ipv6: fc00:c:c:bc::1/128 + Ethernet1: + ipv6: fc00:a::2ee/126 + bp_interface: + ipv6: fc00:b::bc/64 + + ARISTA187T1: + properties: + - common + bgp: + router-id: 0.12.0.189 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:bd::1/128 + Ethernet1: + ipv6: fc00:a::2f2/126 + bp_interface: + ipv6: fc00:b::bd/64 + + ARISTA188T1: + properties: + - common + bgp: + router-id: 0.12.0.190 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:be::1/128 + Ethernet1: + ipv6: fc00:a::2f6/126 + bp_interface: + ipv6: fc00:b::be/64 + + ARISTA189T1: + properties: + - common + bgp: + router-id: 0.12.0.191 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bf::1/128 + Ethernet1: + ipv6: fc00:a::2fa/126 + bp_interface: + ipv6: fc00:b::bf/64 + + ARISTA190T1: + properties: + - common + bgp: + router-id: 0.12.0.192 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::2fd + interfaces: + Loopback0: + ipv6: fc00:c:c:c0::1/128 + Ethernet1: + ipv6: fc00:a::2fe/126 + bp_interface: + ipv6: fc00:b::c0/64 + + ARISTA191T1: + properties: + - common + bgp: + router-id: 0.12.0.193 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::301 + interfaces: + Loopback0: + ipv6: fc00:c:c:c1::1/128 + Ethernet1: + ipv6: fc00:a::302/126 + bp_interface: + ipv6: fc00:b::c1/64 + + ARISTA192T1: + properties: + - common + bgp: + router-id: 0.12.0.194 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::305 + interfaces: + Loopback0: + ipv6: fc00:c:c:c2::1/128 + Ethernet1: + ipv6: fc00:a::306/126 + bp_interface: + ipv6: fc00:b::c2/64 + + ARISTA193T1: + properties: + - common + bgp: + router-id: 0.12.0.195 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::309 + interfaces: + Loopback0: + ipv6: fc00:c:c:c3::1/128 + Ethernet1: + ipv6: fc00:a::30a/126 + bp_interface: + ipv6: fc00:b::c3/64 + + ARISTA194T1: + properties: + - common + bgp: + router-id: 0.12.0.196 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::30d + interfaces: + Loopback0: + ipv6: fc00:c:c:c4::1/128 + Ethernet1: + ipv6: fc00:a::30e/126 + bp_interface: + ipv6: fc00:b::c4/64 + + ARISTA195T1: + properties: + - common + bgp: + router-id: 0.12.0.197 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::311 + interfaces: + Loopback0: + ipv6: fc00:c:c:c5::1/128 + Ethernet1: + ipv6: fc00:a::312/126 + bp_interface: + ipv6: fc00:b::c5/64 + + ARISTA196T1: + properties: + - common + bgp: + router-id: 0.12.0.198 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::315 + interfaces: + Loopback0: + ipv6: fc00:c:c:c6::1/128 + Ethernet1: + ipv6: fc00:a::316/126 + bp_interface: + ipv6: fc00:b::c6/64 + + ARISTA197T1: + properties: + - common + bgp: + router-id: 0.12.0.199 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::319 + interfaces: + Loopback0: + ipv6: fc00:c:c:c7::1/128 + Ethernet1: + ipv6: fc00:a::31a/126 + bp_interface: + ipv6: fc00:b::c7/64 + + ARISTA198T1: + properties: + - common + bgp: + router-id: 0.12.0.200 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::31d + interfaces: + Loopback0: + ipv6: fc00:c:c:c8::1/128 + Ethernet1: + ipv6: fc00:a::31e/126 + bp_interface: + ipv6: fc00:b::c8/64 + + ARISTA199T1: + properties: + - common + bgp: + router-id: 0.12.0.201 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::321 + interfaces: + Loopback0: + ipv6: fc00:c:c:c9::1/128 + Ethernet1: + ipv6: fc00:a::322/126 + bp_interface: + ipv6: fc00:b::c9/64 + + ARISTA200T1: + properties: + - common + bgp: + router-id: 0.12.0.202 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::325 + interfaces: + Loopback0: + ipv6: fc00:c:c:ca::1/128 + Ethernet1: + ipv6: fc00:a::326/126 + bp_interface: + ipv6: fc00:b::ca/64 + + ARISTA201T1: + properties: + - common + bgp: + router-id: 0.12.0.203 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::329 + interfaces: + Loopback0: + ipv6: fc00:c:c:cb::1/128 + Ethernet1: + ipv6: fc00:a::32a/126 + bp_interface: + ipv6: fc00:b::cb/64 + + ARISTA202T1: + properties: + - common + bgp: + router-id: 0.12.0.204 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::32d + interfaces: + Loopback0: + ipv6: fc00:c:c:cc::1/128 + Ethernet1: + ipv6: fc00:a::32e/126 + bp_interface: + ipv6: fc00:b::cc/64 + + ARISTA203T1: + properties: + - common + bgp: + router-id: 0.12.0.205 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::331 + interfaces: + Loopback0: + ipv6: fc00:c:c:cd::1/128 + Ethernet1: + ipv6: fc00:a::332/126 + bp_interface: + ipv6: fc00:b::cd/64 + + ARISTA204T1: + properties: + - common + bgp: + router-id: 0.12.0.206 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::335 + interfaces: + Loopback0: + ipv6: fc00:c:c:ce::1/128 + Ethernet1: + ipv6: fc00:a::336/126 + bp_interface: + ipv6: fc00:b::ce/64 + + ARISTA205T1: + properties: + - common + bgp: + router-id: 0.12.0.207 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::339 + interfaces: + Loopback0: + ipv6: fc00:c:c:cf::1/128 + Ethernet1: + ipv6: fc00:a::33a/126 + bp_interface: + ipv6: fc00:b::cf/64 + + ARISTA206T1: + properties: + - common + bgp: + router-id: 0.12.0.208 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::33d + interfaces: + Loopback0: + ipv6: fc00:c:c:d0::1/128 + Ethernet1: + ipv6: fc00:a::33e/126 + bp_interface: + ipv6: fc00:b::d0/64 + + ARISTA207T1: + properties: + - common + bgp: + router-id: 0.12.0.209 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::341 + interfaces: + Loopback0: + ipv6: fc00:c:c:d1::1/128 + Ethernet1: + ipv6: fc00:a::342/126 + bp_interface: + ipv6: fc00:b::d1/64 + + ARISTA208T1: + properties: + - common + bgp: + router-id: 0.12.0.210 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::345 + interfaces: + Loopback0: + ipv6: fc00:c:c:d2::1/128 + Ethernet1: + ipv6: fc00:a::346/126 + bp_interface: + ipv6: fc00:b::d2/64 + + ARISTA209T1: + properties: + - common + bgp: + router-id: 0.12.0.211 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::349 + interfaces: + Loopback0: + ipv6: fc00:c:c:d3::1/128 + Ethernet1: + ipv6: fc00:a::34a/126 + bp_interface: + ipv6: fc00:b::d3/64 + + ARISTA210T1: + properties: + - common + bgp: + router-id: 0.12.0.212 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::34d + interfaces: + Loopback0: + ipv6: fc00:c:c:d4::1/128 + Ethernet1: + ipv6: fc00:a::34e/126 + bp_interface: + ipv6: fc00:b::d4/64 + + ARISTA211T1: + properties: + - common + bgp: + router-id: 0.12.0.213 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::351 + interfaces: + Loopback0: + ipv6: fc00:c:c:d5::1/128 + Ethernet1: + ipv6: fc00:a::352/126 + bp_interface: + ipv6: fc00:b::d5/64 + + ARISTA212T1: + properties: + - common + bgp: + router-id: 0.12.0.214 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::355 + interfaces: + Loopback0: + ipv6: fc00:c:c:d6::1/128 + Ethernet1: + ipv6: fc00:a::356/126 + bp_interface: + ipv6: fc00:b::d6/64 + + ARISTA213T1: + properties: + - common + bgp: + router-id: 0.12.0.215 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::359 + interfaces: + Loopback0: + ipv6: fc00:c:c:d7::1/128 + Ethernet1: + ipv6: fc00:a::35a/126 + bp_interface: + ipv6: fc00:b::d7/64 + + ARISTA214T1: + properties: + - common + bgp: + router-id: 0.12.0.216 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::35d + interfaces: + Loopback0: + ipv6: fc00:c:c:d8::1/128 + Ethernet1: + ipv6: fc00:a::35e/126 + bp_interface: + ipv6: fc00:b::d8/64 + + ARISTA215T1: + properties: + - common + bgp: + router-id: 0.12.0.217 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::361 + interfaces: + Loopback0: + ipv6: fc00:c:c:d9::1/128 + Ethernet1: + ipv6: fc00:a::362/126 + bp_interface: + ipv6: fc00:b::d9/64 + + ARISTA216T1: + properties: + - common + bgp: + router-id: 0.12.0.218 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::365 + interfaces: + Loopback0: + ipv6: fc00:c:c:da::1/128 + Ethernet1: + ipv6: fc00:a::366/126 + bp_interface: + ipv6: fc00:b::da/64 + + ARISTA217T1: + properties: + - common + bgp: + router-id: 0.12.0.219 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::369 + interfaces: + Loopback0: + ipv6: fc00:c:c:db::1/128 + Ethernet1: + ipv6: fc00:a::36a/126 + bp_interface: + ipv6: fc00:b::db/64 + + ARISTA218T1: + properties: + - common + bgp: + router-id: 0.12.0.220 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::36d + interfaces: + Loopback0: + ipv6: fc00:c:c:dc::1/128 + Ethernet1: + ipv6: fc00:a::36e/126 + bp_interface: + ipv6: fc00:b::dc/64 + + ARISTA219T1: + properties: + - common + bgp: + router-id: 0.12.0.221 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::371 + interfaces: + Loopback0: + ipv6: fc00:c:c:dd::1/128 + Ethernet1: + ipv6: fc00:a::372/126 + bp_interface: + ipv6: fc00:b::dd/64 + + ARISTA220T1: + properties: + - common + bgp: + router-id: 0.12.0.222 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::375 + interfaces: + Loopback0: + ipv6: fc00:c:c:de::1/128 + Ethernet1: + ipv6: fc00:a::376/126 + bp_interface: + ipv6: fc00:b::de/64 + + ARISTA221T1: + properties: + - common + bgp: + router-id: 0.12.0.223 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::379 + interfaces: + Loopback0: + ipv6: fc00:c:c:df::1/128 + Ethernet1: + ipv6: fc00:a::37a/126 + bp_interface: + ipv6: fc00:b::df/64 + + ARISTA222T1: + properties: + - common + bgp: + router-id: 0.12.0.224 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::37d + interfaces: + Loopback0: + ipv6: fc00:c:c:e0::1/128 + Ethernet1: + ipv6: fc00:a::37e/126 + bp_interface: + ipv6: fc00:b::e0/64 + + ARISTA223T1: + properties: + - common + bgp: + router-id: 0.12.0.225 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::381 + interfaces: + Loopback0: + ipv6: fc00:c:c:e1::1/128 + Ethernet1: + ipv6: fc00:a::382/126 + bp_interface: + ipv6: fc00:b::e1/64 + + ARISTA224T1: + properties: + - common + bgp: + router-id: 0.12.0.226 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::385 + interfaces: + Loopback0: + ipv6: fc00:c:c:e2::1/128 + Ethernet1: + ipv6: fc00:a::386/126 + bp_interface: + ipv6: fc00:b::e2/64 + + ARISTA225T1: + properties: + - common + bgp: + router-id: 0.12.0.227 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::389 + interfaces: + Loopback0: + ipv6: fc00:c:c:e3::1/128 + Ethernet1: + ipv6: fc00:a::38a/126 + bp_interface: + ipv6: fc00:b::e3/64 + + ARISTA226T1: + properties: + - common + bgp: + router-id: 0.12.0.228 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::38d + interfaces: + Loopback0: + ipv6: fc00:c:c:e4::1/128 + Ethernet1: + ipv6: fc00:a::38e/126 + bp_interface: + ipv6: fc00:b::e4/64 + + ARISTA227T1: + properties: + - common + bgp: + router-id: 0.12.0.229 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::391 + interfaces: + Loopback0: + ipv6: fc00:c:c:e5::1/128 + Ethernet1: + ipv6: fc00:a::392/126 + bp_interface: + ipv6: fc00:b::e5/64 + + ARISTA228T1: + properties: + - common + bgp: + router-id: 0.12.0.230 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::395 + interfaces: + Loopback0: + ipv6: fc00:c:c:e6::1/128 + Ethernet1: + ipv6: fc00:a::396/126 + bp_interface: + ipv6: fc00:b::e6/64 + + ARISTA229T1: + properties: + - common + bgp: + router-id: 0.12.0.231 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::399 + interfaces: + Loopback0: + ipv6: fc00:c:c:e7::1/128 + Ethernet1: + ipv6: fc00:a::39a/126 + bp_interface: + ipv6: fc00:b::e7/64 + + ARISTA230T1: + properties: + - common + bgp: + router-id: 0.12.0.232 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::39d + interfaces: + Loopback0: + ipv6: fc00:c:c:e8::1/128 + Ethernet1: + ipv6: fc00:a::39e/126 + bp_interface: + ipv6: fc00:b::e8/64 + + ARISTA231T1: + properties: + - common + bgp: + router-id: 0.12.0.233 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:e9::1/128 + Ethernet1: + ipv6: fc00:a::3a2/126 + bp_interface: + ipv6: fc00:b::e9/64 + + ARISTA232T1: + properties: + - common + bgp: + router-id: 0.12.0.234 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ea::1/128 + Ethernet1: + ipv6: fc00:a::3a6/126 + bp_interface: + ipv6: fc00:b::ea/64 + + ARISTA233T1: + properties: + - common + bgp: + router-id: 0.12.0.235 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:eb::1/128 + Ethernet1: + ipv6: fc00:a::3aa/126 + bp_interface: + ipv6: fc00:b::eb/64 + + ARISTA234T1: + properties: + - common + bgp: + router-id: 0.12.0.236 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ec::1/128 + Ethernet1: + ipv6: fc00:a::3ae/126 + bp_interface: + ipv6: fc00:b::ec/64 + + ARISTA235T1: + properties: + - common + bgp: + router-id: 0.12.0.237 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ed::1/128 + Ethernet1: + ipv6: fc00:a::3b2/126 + bp_interface: + ipv6: fc00:b::ed/64 + + ARISTA236T1: + properties: + - common + bgp: + router-id: 0.12.0.238 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ee::1/128 + Ethernet1: + ipv6: fc00:a::3b6/126 + bp_interface: + ipv6: fc00:b::ee/64 + + ARISTA237T1: + properties: + - common + bgp: + router-id: 0.12.0.239 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ef::1/128 + Ethernet1: + ipv6: fc00:a::3ba/126 + bp_interface: + ipv6: fc00:b::ef/64 + + ARISTA238T1: + properties: + - common + bgp: + router-id: 0.12.0.240 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3bd + interfaces: + Loopback0: + ipv6: fc00:c:c:f0::1/128 + Ethernet1: + ipv6: fc00:a::3be/126 + bp_interface: + ipv6: fc00:b::f0/64 + + ARISTA239T1: + properties: + - common + bgp: + router-id: 0.12.0.241 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f1::1/128 + Ethernet1: + ipv6: fc00:a::3c2/126 + bp_interface: + ipv6: fc00:b::f1/64 + + ARISTA240T1: + properties: + - common + bgp: + router-id: 0.12.0.242 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f2::1/128 + Ethernet1: + ipv6: fc00:a::3c6/126 + bp_interface: + ipv6: fc00:b::f2/64 + + ARISTA241T1: + properties: + - common + bgp: + router-id: 0.12.0.243 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f3::1/128 + Ethernet1: + ipv6: fc00:a::3ca/126 + bp_interface: + ipv6: fc00:b::f3/64 + + ARISTA242T1: + properties: + - common + bgp: + router-id: 0.12.0.244 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3cd + interfaces: + Loopback0: + ipv6: fc00:c:c:f4::1/128 + Ethernet1: + ipv6: fc00:a::3ce/126 + bp_interface: + ipv6: fc00:b::f4/64 + + ARISTA243T1: + properties: + - common + bgp: + router-id: 0.12.0.245 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f5::1/128 + Ethernet1: + ipv6: fc00:a::3d2/126 + bp_interface: + ipv6: fc00:b::f5/64 + + ARISTA244T1: + properties: + - common + bgp: + router-id: 0.12.0.246 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f6::1/128 + Ethernet1: + ipv6: fc00:a::3d6/126 + bp_interface: + ipv6: fc00:b::f6/64 + + ARISTA245T1: + properties: + - common + bgp: + router-id: 0.12.0.247 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f7::1/128 + Ethernet1: + ipv6: fc00:a::3da/126 + bp_interface: + ipv6: fc00:b::f7/64 + + ARISTA246T1: + properties: + - common + bgp: + router-id: 0.12.0.248 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3dd + interfaces: + Loopback0: + ipv6: fc00:c:c:f8::1/128 + Ethernet1: + ipv6: fc00:a::3de/126 + bp_interface: + ipv6: fc00:b::f8/64 + + ARISTA247T1: + properties: + - common + bgp: + router-id: 0.12.0.249 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f9::1/128 + Ethernet1: + ipv6: fc00:a::3e2/126 + bp_interface: + ipv6: fc00:b::f9/64 + + ARISTA248T1: + properties: + - common + bgp: + router-id: 0.12.0.250 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fa::1/128 + Ethernet1: + ipv6: fc00:a::3e6/126 + bp_interface: + ipv6: fc00:b::fa/64 + + ARISTA249T1: + properties: + - common + bgp: + router-id: 0.12.0.251 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:fb::1/128 + Ethernet1: + ipv6: fc00:a::3ea/126 + bp_interface: + ipv6: fc00:b::fb/64 + + ARISTA250T1: + properties: + - common + bgp: + router-id: 0.12.0.252 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3ed + interfaces: + Loopback0: + ipv6: fc00:c:c:fc::1/128 + Ethernet1: + ipv6: fc00:a::3ee/126 + bp_interface: + ipv6: fc00:b::fc/64 + + ARISTA251T1: + properties: + - common + bgp: + router-id: 0.12.0.253 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:fd::1/128 + Ethernet1: + ipv6: fc00:a::3f2/126 + bp_interface: + ipv6: fc00:b::fd/64 + + ARISTA252T1: + properties: + - common + bgp: + router-id: 0.12.0.254 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fe::1/128 + Ethernet1: + ipv6: fc00:a::3f6/126 + bp_interface: + ipv6: fc00:b::fe/64 + + ARISTA253T1: + properties: + - common + bgp: + router-id: 0.12.0.255 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ff::1/128 + Ethernet1: + ipv6: fc00:a::3fa/126 + bp_interface: + ipv6: fc00:b::ff/64 + + ARISTA254T1: + properties: + - common + bgp: + router-id: 0.12.1.0 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::3fd + interfaces: + Loopback0: + ipv6: fc00:c:c:100::1/128 + Ethernet1: + ipv6: fc00:a::3fe/126 + bp_interface: + ipv6: fc00:b::100/64 + + ARISTA255T1: + properties: + - common + bgp: + router-id: 0.12.1.1 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::401 + interfaces: + Loopback0: + ipv6: fc00:c:c:101::1/128 + Ethernet1: + ipv6: fc00:a::402/126 + bp_interface: + ipv6: fc00:b::101/64 + + ARISTA256T1: + properties: + - common + bgp: + router-id: 0.12.1.2 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::405 + interfaces: + Loopback0: + ipv6: fc00:c:c:102::1/128 + Ethernet1: + ipv6: fc00:a::406/126 + bp_interface: + ipv6: fc00:b::102/64 + + ARISTA257T1: + properties: + - common + bgp: + router-id: 0.12.1.3 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::409 + interfaces: + Loopback0: + ipv6: fc00:c:c:103::1/128 + Ethernet1: + ipv6: fc00:a::40a/126 + bp_interface: + ipv6: fc00:b::103/64 + + ARISTA258T1: + properties: + - common + bgp: + router-id: 0.12.1.4 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::40d + interfaces: + Loopback0: + ipv6: fc00:c:c:104::1/128 + Ethernet1: + ipv6: fc00:a::40e/126 + bp_interface: + ipv6: fc00:b::104/64 + + ARISTA259T1: + properties: + - common + bgp: + router-id: 0.12.1.5 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::411 + interfaces: + Loopback0: + ipv6: fc00:c:c:105::1/128 + Ethernet1: + ipv6: fc00:a::412/126 + bp_interface: + ipv6: fc00:b::105/64 + + ARISTA260T1: + properties: + - common + bgp: + router-id: 0.12.1.6 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::415 + interfaces: + Loopback0: + ipv6: fc00:c:c:106::1/128 + Ethernet1: + ipv6: fc00:a::416/126 + bp_interface: + ipv6: fc00:b::106/64 + + ARISTA261T1: + properties: + - common + bgp: + router-id: 0.12.1.7 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::419 + interfaces: + Loopback0: + ipv6: fc00:c:c:107::1/128 + Ethernet1: + ipv6: fc00:a::41a/126 + bp_interface: + ipv6: fc00:b::107/64 + + ARISTA262T1: + properties: + - common + bgp: + router-id: 0.12.1.8 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::41d + interfaces: + Loopback0: + ipv6: fc00:c:c:108::1/128 + Ethernet1: + ipv6: fc00:a::41e/126 + bp_interface: + ipv6: fc00:b::108/64 + + ARISTA263T1: + properties: + - common + bgp: + router-id: 0.12.1.9 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::421 + interfaces: + Loopback0: + ipv6: fc00:c:c:109::1/128 + Ethernet1: + ipv6: fc00:a::422/126 + bp_interface: + ipv6: fc00:b::109/64 + + ARISTA264T1: + properties: + - common + bgp: + router-id: 0.12.1.10 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::425 + interfaces: + Loopback0: + ipv6: fc00:c:c:10a::1/128 + Ethernet1: + ipv6: fc00:a::426/126 + bp_interface: + ipv6: fc00:b::10a/64 + + ARISTA265T1: + properties: + - common + bgp: + router-id: 0.12.1.11 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::429 + interfaces: + Loopback0: + ipv6: fc00:c:c:10b::1/128 + Ethernet1: + ipv6: fc00:a::42a/126 + bp_interface: + ipv6: fc00:b::10b/64 + + ARISTA266T1: + properties: + - common + bgp: + router-id: 0.12.1.12 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::42d + interfaces: + Loopback0: + ipv6: fc00:c:c:10c::1/128 + Ethernet1: + ipv6: fc00:a::42e/126 + bp_interface: + ipv6: fc00:b::10c/64 + + ARISTA267T1: + properties: + - common + bgp: + router-id: 0.12.1.13 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::431 + interfaces: + Loopback0: + ipv6: fc00:c:c:10d::1/128 + Ethernet1: + ipv6: fc00:a::432/126 + bp_interface: + ipv6: fc00:b::10d/64 + + ARISTA268T1: + properties: + - common + bgp: + router-id: 0.12.1.14 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::435 + interfaces: + Loopback0: + ipv6: fc00:c:c:10e::1/128 + Ethernet1: + ipv6: fc00:a::436/126 + bp_interface: + ipv6: fc00:b::10e/64 + + ARISTA269T1: + properties: + - common + bgp: + router-id: 0.12.1.15 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::439 + interfaces: + Loopback0: + ipv6: fc00:c:c:10f::1/128 + Ethernet1: + ipv6: fc00:a::43a/126 + bp_interface: + ipv6: fc00:b::10f/64 + + ARISTA270T1: + properties: + - common + bgp: + router-id: 0.12.1.16 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::43d + interfaces: + Loopback0: + ipv6: fc00:c:c:110::1/128 + Ethernet1: + ipv6: fc00:a::43e/126 + bp_interface: + ipv6: fc00:b::110/64 + + ARISTA271T1: + properties: + - common + bgp: + router-id: 0.12.1.17 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::441 + interfaces: + Loopback0: + ipv6: fc00:c:c:111::1/128 + Ethernet1: + ipv6: fc00:a::442/126 + bp_interface: + ipv6: fc00:b::111/64 + + ARISTA272T1: + properties: + - common + bgp: + router-id: 0.12.1.18 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::445 + interfaces: + Loopback0: + ipv6: fc00:c:c:112::1/128 + Ethernet1: + ipv6: fc00:a::446/126 + bp_interface: + ipv6: fc00:b::112/64 + + ARISTA273T1: + properties: + - common + bgp: + router-id: 0.12.1.19 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::449 + interfaces: + Loopback0: + ipv6: fc00:c:c:113::1/128 + Ethernet1: + ipv6: fc00:a::44a/126 + bp_interface: + ipv6: fc00:b::113/64 + + ARISTA274T1: + properties: + - common + bgp: + router-id: 0.12.1.20 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::44d + interfaces: + Loopback0: + ipv6: fc00:c:c:114::1/128 + Ethernet1: + ipv6: fc00:a::44e/126 + bp_interface: + ipv6: fc00:b::114/64 + + ARISTA275T1: + properties: + - common + bgp: + router-id: 0.12.1.21 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::451 + interfaces: + Loopback0: + ipv6: fc00:c:c:115::1/128 + Ethernet1: + ipv6: fc00:a::452/126 + bp_interface: + ipv6: fc00:b::115/64 + + ARISTA276T1: + properties: + - common + bgp: + router-id: 0.12.1.22 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::455 + interfaces: + Loopback0: + ipv6: fc00:c:c:116::1/128 + Ethernet1: + ipv6: fc00:a::456/126 + bp_interface: + ipv6: fc00:b::116/64 + + ARISTA277T1: + properties: + - common + bgp: + router-id: 0.12.1.23 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::459 + interfaces: + Loopback0: + ipv6: fc00:c:c:117::1/128 + Ethernet1: + ipv6: fc00:a::45a/126 + bp_interface: + ipv6: fc00:b::117/64 + + ARISTA278T1: + properties: + - common + bgp: + router-id: 0.12.1.24 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::45d + interfaces: + Loopback0: + ipv6: fc00:c:c:118::1/128 + Ethernet1: + ipv6: fc00:a::45e/126 + bp_interface: + ipv6: fc00:b::118/64 + + ARISTA279T1: + properties: + - common + bgp: + router-id: 0.12.1.25 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::461 + interfaces: + Loopback0: + ipv6: fc00:c:c:119::1/128 + Ethernet1: + ipv6: fc00:a::462/126 + bp_interface: + ipv6: fc00:b::119/64 + + ARISTA280T1: + properties: + - common + bgp: + router-id: 0.12.1.26 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::465 + interfaces: + Loopback0: + ipv6: fc00:c:c:11a::1/128 + Ethernet1: + ipv6: fc00:a::466/126 + bp_interface: + ipv6: fc00:b::11a/64 + + ARISTA281T1: + properties: + - common + bgp: + router-id: 0.12.1.27 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::469 + interfaces: + Loopback0: + ipv6: fc00:c:c:11b::1/128 + Ethernet1: + ipv6: fc00:a::46a/126 + bp_interface: + ipv6: fc00:b::11b/64 + + ARISTA282T1: + properties: + - common + bgp: + router-id: 0.12.1.28 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::46d + interfaces: + Loopback0: + ipv6: fc00:c:c:11c::1/128 + Ethernet1: + ipv6: fc00:a::46e/126 + bp_interface: + ipv6: fc00:b::11c/64 + + ARISTA283T1: + properties: + - common + bgp: + router-id: 0.12.1.29 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::471 + interfaces: + Loopback0: + ipv6: fc00:c:c:11d::1/128 + Ethernet1: + ipv6: fc00:a::472/126 + bp_interface: + ipv6: fc00:b::11d/64 + + ARISTA284T1: + properties: + - common + bgp: + router-id: 0.12.1.30 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::475 + interfaces: + Loopback0: + ipv6: fc00:c:c:11e::1/128 + Ethernet1: + ipv6: fc00:a::476/126 + bp_interface: + ipv6: fc00:b::11e/64 + + ARISTA285T1: + properties: + - common + bgp: + router-id: 0.12.1.31 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::479 + interfaces: + Loopback0: + ipv6: fc00:c:c:11f::1/128 + Ethernet1: + ipv6: fc00:a::47a/126 + bp_interface: + ipv6: fc00:b::11f/64 + + ARISTA286T1: + properties: + - common + bgp: + router-id: 0.12.1.32 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::47d + interfaces: + Loopback0: + ipv6: fc00:c:c:120::1/128 + Ethernet1: + ipv6: fc00:a::47e/126 + bp_interface: + ipv6: fc00:b::120/64 + + ARISTA287T1: + properties: + - common + bgp: + router-id: 0.12.1.33 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::481 + interfaces: + Loopback0: + ipv6: fc00:c:c:121::1/128 + Ethernet1: + ipv6: fc00:a::482/126 + bp_interface: + ipv6: fc00:b::121/64 + + ARISTA288T1: + properties: + - common + bgp: + router-id: 0.12.1.34 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::485 + interfaces: + Loopback0: + ipv6: fc00:c:c:122::1/128 + Ethernet1: + ipv6: fc00:a::486/126 + bp_interface: + ipv6: fc00:b::122/64 + + ARISTA289T1: + properties: + - common + bgp: + router-id: 0.12.1.35 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::489 + interfaces: + Loopback0: + ipv6: fc00:c:c:123::1/128 + Ethernet1: + ipv6: fc00:a::48a/126 + bp_interface: + ipv6: fc00:b::123/64 + + ARISTA290T1: + properties: + - common + bgp: + router-id: 0.12.1.36 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::48d + interfaces: + Loopback0: + ipv6: fc00:c:c:124::1/128 + Ethernet1: + ipv6: fc00:a::48e/126 + bp_interface: + ipv6: fc00:b::124/64 + + ARISTA291T1: + properties: + - common + bgp: + router-id: 0.12.1.37 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::491 + interfaces: + Loopback0: + ipv6: fc00:c:c:125::1/128 + Ethernet1: + ipv6: fc00:a::492/126 + bp_interface: + ipv6: fc00:b::125/64 + + ARISTA292T1: + properties: + - common + bgp: + router-id: 0.12.1.38 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::495 + interfaces: + Loopback0: + ipv6: fc00:c:c:126::1/128 + Ethernet1: + ipv6: fc00:a::496/126 + bp_interface: + ipv6: fc00:b::126/64 + + ARISTA293T1: + properties: + - common + bgp: + router-id: 0.12.1.39 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::499 + interfaces: + Loopback0: + ipv6: fc00:c:c:127::1/128 + Ethernet1: + ipv6: fc00:a::49a/126 + bp_interface: + ipv6: fc00:b::127/64 + + ARISTA294T1: + properties: + - common + bgp: + router-id: 0.12.1.40 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::49d + interfaces: + Loopback0: + ipv6: fc00:c:c:128::1/128 + Ethernet1: + ipv6: fc00:a::49e/126 + bp_interface: + ipv6: fc00:b::128/64 + + ARISTA295T1: + properties: + - common + bgp: + router-id: 0.12.1.41 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:129::1/128 + Ethernet1: + ipv6: fc00:a::4a2/126 + bp_interface: + ipv6: fc00:b::129/64 + + ARISTA296T1: + properties: + - common + bgp: + router-id: 0.12.1.42 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:12a::1/128 + Ethernet1: + ipv6: fc00:a::4a6/126 + bp_interface: + ipv6: fc00:b::12a/64 + + ARISTA297T1: + properties: + - common + bgp: + router-id: 0.12.1.43 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:12b::1/128 + Ethernet1: + ipv6: fc00:a::4aa/126 + bp_interface: + ipv6: fc00:b::12b/64 + + ARISTA298T1: + properties: + - common + bgp: + router-id: 0.12.1.44 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4ad + interfaces: + Loopback0: + ipv6: fc00:c:c:12c::1/128 + Ethernet1: + ipv6: fc00:a::4ae/126 + bp_interface: + ipv6: fc00:b::12c/64 + + ARISTA299T1: + properties: + - common + bgp: + router-id: 0.12.1.45 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:12d::1/128 + Ethernet1: + ipv6: fc00:a::4b2/126 + bp_interface: + ipv6: fc00:b::12d/64 + + ARISTA300T1: + properties: + - common + bgp: + router-id: 0.12.1.46 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:12e::1/128 + Ethernet1: + ipv6: fc00:a::4b6/126 + bp_interface: + ipv6: fc00:b::12e/64 + + ARISTA301T1: + properties: + - common + bgp: + router-id: 0.12.1.47 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:12f::1/128 + Ethernet1: + ipv6: fc00:a::4ba/126 + bp_interface: + ipv6: fc00:b::12f/64 + + ARISTA302T1: + properties: + - common + bgp: + router-id: 0.12.1.48 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4bd + interfaces: + Loopback0: + ipv6: fc00:c:c:130::1/128 + Ethernet1: + ipv6: fc00:a::4be/126 + bp_interface: + ipv6: fc00:b::130/64 + + ARISTA303T1: + properties: + - common + bgp: + router-id: 0.12.1.49 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:131::1/128 + Ethernet1: + ipv6: fc00:a::4c2/126 + bp_interface: + ipv6: fc00:b::131/64 + + ARISTA304T1: + properties: + - common + bgp: + router-id: 0.12.1.50 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:132::1/128 + Ethernet1: + ipv6: fc00:a::4c6/126 + bp_interface: + ipv6: fc00:b::132/64 + + ARISTA305T1: + properties: + - common + bgp: + router-id: 0.12.1.51 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:133::1/128 + Ethernet1: + ipv6: fc00:a::4ca/126 + bp_interface: + ipv6: fc00:b::133/64 + + ARISTA306T1: + properties: + - common + bgp: + router-id: 0.12.1.52 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4cd + interfaces: + Loopback0: + ipv6: fc00:c:c:134::1/128 + Ethernet1: + ipv6: fc00:a::4ce/126 + bp_interface: + ipv6: fc00:b::134/64 + + ARISTA307T1: + properties: + - common + bgp: + router-id: 0.12.1.53 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:135::1/128 + Ethernet1: + ipv6: fc00:a::4d2/126 + bp_interface: + ipv6: fc00:b::135/64 + + ARISTA308T1: + properties: + - common + bgp: + router-id: 0.12.1.54 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:136::1/128 + Ethernet1: + ipv6: fc00:a::4d6/126 + bp_interface: + ipv6: fc00:b::136/64 + + ARISTA309T1: + properties: + - common + bgp: + router-id: 0.12.1.55 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:137::1/128 + Ethernet1: + ipv6: fc00:a::4da/126 + bp_interface: + ipv6: fc00:b::137/64 + + ARISTA310T1: + properties: + - common + bgp: + router-id: 0.12.1.56 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4dd + interfaces: + Loopback0: + ipv6: fc00:c:c:138::1/128 + Ethernet1: + ipv6: fc00:a::4de/126 + bp_interface: + ipv6: fc00:b::138/64 + + ARISTA311T1: + properties: + - common + bgp: + router-id: 0.12.1.57 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:139::1/128 + Ethernet1: + ipv6: fc00:a::4e2/126 + bp_interface: + ipv6: fc00:b::139/64 + + ARISTA312T1: + properties: + - common + bgp: + router-id: 0.12.1.58 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:13a::1/128 + Ethernet1: + ipv6: fc00:a::4e6/126 + bp_interface: + ipv6: fc00:b::13a/64 + + ARISTA313T1: + properties: + - common + bgp: + router-id: 0.12.1.59 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:13b::1/128 + Ethernet1: + ipv6: fc00:a::4ea/126 + bp_interface: + ipv6: fc00:b::13b/64 + + ARISTA314T1: + properties: + - common + bgp: + router-id: 0.12.1.60 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4ed + interfaces: + Loopback0: + ipv6: fc00:c:c:13c::1/128 + Ethernet1: + ipv6: fc00:a::4ee/126 + bp_interface: + ipv6: fc00:b::13c/64 + + ARISTA315T1: + properties: + - common + bgp: + router-id: 0.12.1.61 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:13d::1/128 + Ethernet1: + ipv6: fc00:a::4f2/126 + bp_interface: + ipv6: fc00:b::13d/64 + + ARISTA316T1: + properties: + - common + bgp: + router-id: 0.12.1.62 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:13e::1/128 + Ethernet1: + ipv6: fc00:a::4f6/126 + bp_interface: + ipv6: fc00:b::13e/64 + + ARISTA317T1: + properties: + - common + bgp: + router-id: 0.12.1.63 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:13f::1/128 + Ethernet1: + ipv6: fc00:a::4fa/126 + bp_interface: + ipv6: fc00:b::13f/64 + + ARISTA318T1: + properties: + - common + bgp: + router-id: 0.12.1.64 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::4fd + interfaces: + Loopback0: + ipv6: fc00:c:c:140::1/128 + Ethernet1: + ipv6: fc00:a::4fe/126 + bp_interface: + ipv6: fc00:b::140/64 + + ARISTA319T1: + properties: + - common + bgp: + router-id: 0.12.1.65 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::501 + interfaces: + Loopback0: + ipv6: fc00:c:c:141::1/128 + Ethernet1: + ipv6: fc00:a::502/126 + bp_interface: + ipv6: fc00:b::141/64 + + ARISTA320T1: + properties: + - common + bgp: + router-id: 0.12.1.66 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::505 + interfaces: + Loopback0: + ipv6: fc00:c:c:142::1/128 + Ethernet1: + ipv6: fc00:a::506/126 + bp_interface: + ipv6: fc00:b::142/64 + + ARISTA321T1: + properties: + - common + bgp: + router-id: 0.12.1.67 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::509 + interfaces: + Loopback0: + ipv6: fc00:c:c:143::1/128 + Ethernet1: + ipv6: fc00:a::50a/126 + bp_interface: + ipv6: fc00:b::143/64 + + ARISTA322T1: + properties: + - common + bgp: + router-id: 0.12.1.68 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::50d + interfaces: + Loopback0: + ipv6: fc00:c:c:144::1/128 + Ethernet1: + ipv6: fc00:a::50e/126 + bp_interface: + ipv6: fc00:b::144/64 + + ARISTA323T1: + properties: + - common + bgp: + router-id: 0.12.1.69 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::511 + interfaces: + Loopback0: + ipv6: fc00:c:c:145::1/128 + Ethernet1: + ipv6: fc00:a::512/126 + bp_interface: + ipv6: fc00:b::145/64 + + ARISTA324T1: + properties: + - common + bgp: + router-id: 0.12.1.70 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::515 + interfaces: + Loopback0: + ipv6: fc00:c:c:146::1/128 + Ethernet1: + ipv6: fc00:a::516/126 + bp_interface: + ipv6: fc00:b::146/64 + + ARISTA325T1: + properties: + - common + bgp: + router-id: 0.12.1.71 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::519 + interfaces: + Loopback0: + ipv6: fc00:c:c:147::1/128 + Ethernet1: + ipv6: fc00:a::51a/126 + bp_interface: + ipv6: fc00:b::147/64 + + ARISTA326T1: + properties: + - common + bgp: + router-id: 0.12.1.72 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::51d + interfaces: + Loopback0: + ipv6: fc00:c:c:148::1/128 + Ethernet1: + ipv6: fc00:a::51e/126 + bp_interface: + ipv6: fc00:b::148/64 + + ARISTA327T1: + properties: + - common + bgp: + router-id: 0.12.1.73 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::521 + interfaces: + Loopback0: + ipv6: fc00:c:c:149::1/128 + Ethernet1: + ipv6: fc00:a::522/126 + bp_interface: + ipv6: fc00:b::149/64 + + ARISTA328T1: + properties: + - common + bgp: + router-id: 0.12.1.74 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::525 + interfaces: + Loopback0: + ipv6: fc00:c:c:14a::1/128 + Ethernet1: + ipv6: fc00:a::526/126 + bp_interface: + ipv6: fc00:b::14a/64 + + ARISTA329T1: + properties: + - common + bgp: + router-id: 0.12.1.75 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::529 + interfaces: + Loopback0: + ipv6: fc00:c:c:14b::1/128 + Ethernet1: + ipv6: fc00:a::52a/126 + bp_interface: + ipv6: fc00:b::14b/64 + + ARISTA330T1: + properties: + - common + bgp: + router-id: 0.12.1.76 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::52d + interfaces: + Loopback0: + ipv6: fc00:c:c:14c::1/128 + Ethernet1: + ipv6: fc00:a::52e/126 + bp_interface: + ipv6: fc00:b::14c/64 + + ARISTA331T1: + properties: + - common + bgp: + router-id: 0.12.1.77 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::531 + interfaces: + Loopback0: + ipv6: fc00:c:c:14d::1/128 + Ethernet1: + ipv6: fc00:a::532/126 + bp_interface: + ipv6: fc00:b::14d/64 + + ARISTA332T1: + properties: + - common + bgp: + router-id: 0.12.1.78 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::535 + interfaces: + Loopback0: + ipv6: fc00:c:c:14e::1/128 + Ethernet1: + ipv6: fc00:a::536/126 + bp_interface: + ipv6: fc00:b::14e/64 + + ARISTA333T1: + properties: + - common + bgp: + router-id: 0.12.1.79 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::539 + interfaces: + Loopback0: + ipv6: fc00:c:c:14f::1/128 + Ethernet1: + ipv6: fc00:a::53a/126 + bp_interface: + ipv6: fc00:b::14f/64 + + ARISTA334T1: + properties: + - common + bgp: + router-id: 0.12.1.80 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::53d + interfaces: + Loopback0: + ipv6: fc00:c:c:150::1/128 + Ethernet1: + ipv6: fc00:a::53e/126 + bp_interface: + ipv6: fc00:b::150/64 + + ARISTA335T1: + properties: + - common + bgp: + router-id: 0.12.1.81 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::541 + interfaces: + Loopback0: + ipv6: fc00:c:c:151::1/128 + Ethernet1: + ipv6: fc00:a::542/126 + bp_interface: + ipv6: fc00:b::151/64 + + ARISTA336T1: + properties: + - common + bgp: + router-id: 0.12.1.82 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::545 + interfaces: + Loopback0: + ipv6: fc00:c:c:152::1/128 + Ethernet1: + ipv6: fc00:a::546/126 + bp_interface: + ipv6: fc00:b::152/64 + + ARISTA337T1: + properties: + - common + bgp: + router-id: 0.12.1.83 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::549 + interfaces: + Loopback0: + ipv6: fc00:c:c:153::1/128 + Ethernet1: + ipv6: fc00:a::54a/126 + bp_interface: + ipv6: fc00:b::153/64 + + ARISTA338T1: + properties: + - common + bgp: + router-id: 0.12.1.84 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::54d + interfaces: + Loopback0: + ipv6: fc00:c:c:154::1/128 + Ethernet1: + ipv6: fc00:a::54e/126 + bp_interface: + ipv6: fc00:b::154/64 + + ARISTA339T1: + properties: + - common + bgp: + router-id: 0.12.1.85 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::551 + interfaces: + Loopback0: + ipv6: fc00:c:c:155::1/128 + Ethernet1: + ipv6: fc00:a::552/126 + bp_interface: + ipv6: fc00:b::155/64 + + ARISTA340T1: + properties: + - common + bgp: + router-id: 0.12.1.86 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::555 + interfaces: + Loopback0: + ipv6: fc00:c:c:156::1/128 + Ethernet1: + ipv6: fc00:a::556/126 + bp_interface: + ipv6: fc00:b::156/64 + + ARISTA341T1: + properties: + - common + bgp: + router-id: 0.12.1.87 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::559 + interfaces: + Loopback0: + ipv6: fc00:c:c:157::1/128 + Ethernet1: + ipv6: fc00:a::55a/126 + bp_interface: + ipv6: fc00:b::157/64 + + ARISTA342T1: + properties: + - common + bgp: + router-id: 0.12.1.88 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::55d + interfaces: + Loopback0: + ipv6: fc00:c:c:158::1/128 + Ethernet1: + ipv6: fc00:a::55e/126 + bp_interface: + ipv6: fc00:b::158/64 + + ARISTA343T1: + properties: + - common + bgp: + router-id: 0.12.1.89 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::561 + interfaces: + Loopback0: + ipv6: fc00:c:c:159::1/128 + Ethernet1: + ipv6: fc00:a::562/126 + bp_interface: + ipv6: fc00:b::159/64 + + ARISTA344T1: + properties: + - common + bgp: + router-id: 0.12.1.90 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::565 + interfaces: + Loopback0: + ipv6: fc00:c:c:15a::1/128 + Ethernet1: + ipv6: fc00:a::566/126 + bp_interface: + ipv6: fc00:b::15a/64 + + ARISTA345T1: + properties: + - common + bgp: + router-id: 0.12.1.91 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::569 + interfaces: + Loopback0: + ipv6: fc00:c:c:15b::1/128 + Ethernet1: + ipv6: fc00:a::56a/126 + bp_interface: + ipv6: fc00:b::15b/64 + + ARISTA346T1: + properties: + - common + bgp: + router-id: 0.12.1.92 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::56d + interfaces: + Loopback0: + ipv6: fc00:c:c:15c::1/128 + Ethernet1: + ipv6: fc00:a::56e/126 + bp_interface: + ipv6: fc00:b::15c/64 + + ARISTA347T1: + properties: + - common + bgp: + router-id: 0.12.1.93 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::571 + interfaces: + Loopback0: + ipv6: fc00:c:c:15d::1/128 + Ethernet1: + ipv6: fc00:a::572/126 + bp_interface: + ipv6: fc00:b::15d/64 + + ARISTA348T1: + properties: + - common + bgp: + router-id: 0.12.1.94 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::575 + interfaces: + Loopback0: + ipv6: fc00:c:c:15e::1/128 + Ethernet1: + ipv6: fc00:a::576/126 + bp_interface: + ipv6: fc00:b::15e/64 + + ARISTA349T1: + properties: + - common + bgp: + router-id: 0.12.1.95 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::579 + interfaces: + Loopback0: + ipv6: fc00:c:c:15f::1/128 + Ethernet1: + ipv6: fc00:a::57a/126 + bp_interface: + ipv6: fc00:b::15f/64 + + ARISTA350T1: + properties: + - common + bgp: + router-id: 0.12.1.96 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::57d + interfaces: + Loopback0: + ipv6: fc00:c:c:160::1/128 + Ethernet1: + ipv6: fc00:a::57e/126 + bp_interface: + ipv6: fc00:b::160/64 + + ARISTA351T1: + properties: + - common + bgp: + router-id: 0.12.1.97 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::581 + interfaces: + Loopback0: + ipv6: fc00:c:c:161::1/128 + Ethernet1: + ipv6: fc00:a::582/126 + bp_interface: + ipv6: fc00:b::161/64 + + ARISTA352T1: + properties: + - common + bgp: + router-id: 0.12.1.98 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::585 + interfaces: + Loopback0: + ipv6: fc00:c:c:162::1/128 + Ethernet1: + ipv6: fc00:a::586/126 + bp_interface: + ipv6: fc00:b::162/64 + + ARISTA353T1: + properties: + - common + bgp: + router-id: 0.12.1.99 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::589 + interfaces: + Loopback0: + ipv6: fc00:c:c:163::1/128 + Ethernet1: + ipv6: fc00:a::58a/126 + bp_interface: + ipv6: fc00:b::163/64 + + ARISTA354T1: + properties: + - common + bgp: + router-id: 0.12.1.100 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::58d + interfaces: + Loopback0: + ipv6: fc00:c:c:164::1/128 + Ethernet1: + ipv6: fc00:a::58e/126 + bp_interface: + ipv6: fc00:b::164/64 + + ARISTA355T1: + properties: + - common + bgp: + router-id: 0.12.1.101 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::591 + interfaces: + Loopback0: + ipv6: fc00:c:c:165::1/128 + Ethernet1: + ipv6: fc00:a::592/126 + bp_interface: + ipv6: fc00:b::165/64 + + ARISTA356T1: + properties: + - common + bgp: + router-id: 0.12.1.102 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::595 + interfaces: + Loopback0: + ipv6: fc00:c:c:166::1/128 + Ethernet1: + ipv6: fc00:a::596/126 + bp_interface: + ipv6: fc00:b::166/64 + + ARISTA357T1: + properties: + - common + bgp: + router-id: 0.12.1.103 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::599 + interfaces: + Loopback0: + ipv6: fc00:c:c:167::1/128 + Ethernet1: + ipv6: fc00:a::59a/126 + bp_interface: + ipv6: fc00:b::167/64 + + ARISTA358T1: + properties: + - common + bgp: + router-id: 0.12.1.104 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::59d + interfaces: + Loopback0: + ipv6: fc00:c:c:168::1/128 + Ethernet1: + ipv6: fc00:a::59e/126 + bp_interface: + ipv6: fc00:b::168/64 + + ARISTA359T1: + properties: + - common + bgp: + router-id: 0.12.1.105 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:169::1/128 + Ethernet1: + ipv6: fc00:a::5a2/126 + bp_interface: + ipv6: fc00:b::169/64 + + ARISTA360T1: + properties: + - common + bgp: + router-id: 0.12.1.106 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:16a::1/128 + Ethernet1: + ipv6: fc00:a::5a6/126 + bp_interface: + ipv6: fc00:b::16a/64 + + ARISTA361T1: + properties: + - common + bgp: + router-id: 0.12.1.107 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:16b::1/128 + Ethernet1: + ipv6: fc00:a::5aa/126 + bp_interface: + ipv6: fc00:b::16b/64 + + ARISTA362T1: + properties: + - common + bgp: + router-id: 0.12.1.108 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5ad + interfaces: + Loopback0: + ipv6: fc00:c:c:16c::1/128 + Ethernet1: + ipv6: fc00:a::5ae/126 + bp_interface: + ipv6: fc00:b::16c/64 + + ARISTA363T1: + properties: + - common + bgp: + router-id: 0.12.1.109 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:16d::1/128 + Ethernet1: + ipv6: fc00:a::5b2/126 + bp_interface: + ipv6: fc00:b::16d/64 + + ARISTA364T1: + properties: + - common + bgp: + router-id: 0.12.1.110 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:16e::1/128 + Ethernet1: + ipv6: fc00:a::5b6/126 + bp_interface: + ipv6: fc00:b::16e/64 + + ARISTA365T1: + properties: + - common + bgp: + router-id: 0.12.1.111 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:16f::1/128 + Ethernet1: + ipv6: fc00:a::5ba/126 + bp_interface: + ipv6: fc00:b::16f/64 + + ARISTA366T1: + properties: + - common + bgp: + router-id: 0.12.1.112 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5bd + interfaces: + Loopback0: + ipv6: fc00:c:c:170::1/128 + Ethernet1: + ipv6: fc00:a::5be/126 + bp_interface: + ipv6: fc00:b::170/64 + + ARISTA367T1: + properties: + - common + bgp: + router-id: 0.12.1.113 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:171::1/128 + Ethernet1: + ipv6: fc00:a::5c2/126 + bp_interface: + ipv6: fc00:b::171/64 + + ARISTA368T1: + properties: + - common + bgp: + router-id: 0.12.1.114 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:172::1/128 + Ethernet1: + ipv6: fc00:a::5c6/126 + bp_interface: + ipv6: fc00:b::172/64 + + ARISTA369T1: + properties: + - common + bgp: + router-id: 0.12.1.115 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:173::1/128 + Ethernet1: + ipv6: fc00:a::5ca/126 + bp_interface: + ipv6: fc00:b::173/64 + + ARISTA370T1: + properties: + - common + bgp: + router-id: 0.12.1.116 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5cd + interfaces: + Loopback0: + ipv6: fc00:c:c:174::1/128 + Ethernet1: + ipv6: fc00:a::5ce/126 + bp_interface: + ipv6: fc00:b::174/64 + + ARISTA371T1: + properties: + - common + bgp: + router-id: 0.12.1.117 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:175::1/128 + Ethernet1: + ipv6: fc00:a::5d2/126 + bp_interface: + ipv6: fc00:b::175/64 + + ARISTA372T1: + properties: + - common + bgp: + router-id: 0.12.1.118 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:176::1/128 + Ethernet1: + ipv6: fc00:a::5d6/126 + bp_interface: + ipv6: fc00:b::176/64 + + ARISTA373T1: + properties: + - common + bgp: + router-id: 0.12.1.119 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:177::1/128 + Ethernet1: + ipv6: fc00:a::5da/126 + bp_interface: + ipv6: fc00:b::177/64 + + ARISTA374T1: + properties: + - common + bgp: + router-id: 0.12.1.120 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5dd + interfaces: + Loopback0: + ipv6: fc00:c:c:178::1/128 + Ethernet1: + ipv6: fc00:a::5de/126 + bp_interface: + ipv6: fc00:b::178/64 + + ARISTA375T1: + properties: + - common + bgp: + router-id: 0.12.1.121 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:179::1/128 + Ethernet1: + ipv6: fc00:a::5e2/126 + bp_interface: + ipv6: fc00:b::179/64 + + ARISTA376T1: + properties: + - common + bgp: + router-id: 0.12.1.122 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:17a::1/128 + Ethernet1: + ipv6: fc00:a::5e6/126 + bp_interface: + ipv6: fc00:b::17a/64 + + ARISTA377T1: + properties: + - common + bgp: + router-id: 0.12.1.123 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:17b::1/128 + Ethernet1: + ipv6: fc00:a::5ea/126 + bp_interface: + ipv6: fc00:b::17b/64 + + ARISTA378T1: + properties: + - common + bgp: + router-id: 0.12.1.124 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5ed + interfaces: + Loopback0: + ipv6: fc00:c:c:17c::1/128 + Ethernet1: + ipv6: fc00:a::5ee/126 + bp_interface: + ipv6: fc00:b::17c/64 + + ARISTA379T1: + properties: + - common + bgp: + router-id: 0.12.1.125 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:17d::1/128 + Ethernet1: + ipv6: fc00:a::5f2/126 + bp_interface: + ipv6: fc00:b::17d/64 + + ARISTA380T1: + properties: + - common + bgp: + router-id: 0.12.1.126 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:17e::1/128 + Ethernet1: + ipv6: fc00:a::5f6/126 + bp_interface: + ipv6: fc00:b::17e/64 + + ARISTA381T1: + properties: + - common + bgp: + router-id: 0.12.1.127 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:17f::1/128 + Ethernet1: + ipv6: fc00:a::5fa/126 + bp_interface: + ipv6: fc00:b::17f/64 + + ARISTA382T1: + properties: + - common + bgp: + router-id: 0.12.1.128 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::5fd + interfaces: + Loopback0: + ipv6: fc00:c:c:180::1/128 + Ethernet1: + ipv6: fc00:a::5fe/126 + bp_interface: + ipv6: fc00:b::180/64 + + ARISTA383T1: + properties: + - common + bgp: + router-id: 0.12.1.129 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::601 + interfaces: + Loopback0: + ipv6: fc00:c:c:181::1/128 + Ethernet1: + ipv6: fc00:a::602/126 + bp_interface: + ipv6: fc00:b::181/64 + + ARISTA384T1: + properties: + - common + bgp: + router-id: 0.12.1.130 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::605 + interfaces: + Loopback0: + ipv6: fc00:c:c:182::1/128 + Ethernet1: + ipv6: fc00:a::606/126 + bp_interface: + ipv6: fc00:b::182/64 + + ARISTA385T1: + properties: + - common + bgp: + router-id: 0.12.1.131 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::609 + interfaces: + Loopback0: + ipv6: fc00:c:c:183::1/128 + Ethernet1: + ipv6: fc00:a::60a/126 + bp_interface: + ipv6: fc00:b::183/64 + + ARISTA386T1: + properties: + - common + bgp: + router-id: 0.12.1.132 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::60d + interfaces: + Loopback0: + ipv6: fc00:c:c:184::1/128 + Ethernet1: + ipv6: fc00:a::60e/126 + bp_interface: + ipv6: fc00:b::184/64 + + ARISTA387T1: + properties: + - common + bgp: + router-id: 0.12.1.133 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::611 + interfaces: + Loopback0: + ipv6: fc00:c:c:185::1/128 + Ethernet1: + ipv6: fc00:a::612/126 + bp_interface: + ipv6: fc00:b::185/64 + + ARISTA388T1: + properties: + - common + bgp: + router-id: 0.12.1.134 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::615 + interfaces: + Loopback0: + ipv6: fc00:c:c:186::1/128 + Ethernet1: + ipv6: fc00:a::616/126 + bp_interface: + ipv6: fc00:b::186/64 + + ARISTA389T1: + properties: + - common + bgp: + router-id: 0.12.1.135 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::619 + interfaces: + Loopback0: + ipv6: fc00:c:c:187::1/128 + Ethernet1: + ipv6: fc00:a::61a/126 + bp_interface: + ipv6: fc00:b::187/64 + + ARISTA390T1: + properties: + - common + bgp: + router-id: 0.12.1.136 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::61d + interfaces: + Loopback0: + ipv6: fc00:c:c:188::1/128 + Ethernet1: + ipv6: fc00:a::61e/126 + bp_interface: + ipv6: fc00:b::188/64 + + ARISTA391T1: + properties: + - common + bgp: + router-id: 0.12.1.137 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::621 + interfaces: + Loopback0: + ipv6: fc00:c:c:189::1/128 + Ethernet1: + ipv6: fc00:a::622/126 + bp_interface: + ipv6: fc00:b::189/64 + + ARISTA392T1: + properties: + - common + bgp: + router-id: 0.12.1.138 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::625 + interfaces: + Loopback0: + ipv6: fc00:c:c:18a::1/128 + Ethernet1: + ipv6: fc00:a::626/126 + bp_interface: + ipv6: fc00:b::18a/64 + + ARISTA393T1: + properties: + - common + bgp: + router-id: 0.12.1.139 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::629 + interfaces: + Loopback0: + ipv6: fc00:c:c:18b::1/128 + Ethernet1: + ipv6: fc00:a::62a/126 + bp_interface: + ipv6: fc00:b::18b/64 + + ARISTA394T1: + properties: + - common + bgp: + router-id: 0.12.1.140 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::62d + interfaces: + Loopback0: + ipv6: fc00:c:c:18c::1/128 + Ethernet1: + ipv6: fc00:a::62e/126 + bp_interface: + ipv6: fc00:b::18c/64 + + ARISTA395T1: + properties: + - common + bgp: + router-id: 0.12.1.141 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::631 + interfaces: + Loopback0: + ipv6: fc00:c:c:18d::1/128 + Ethernet1: + ipv6: fc00:a::632/126 + bp_interface: + ipv6: fc00:b::18d/64 + + ARISTA396T1: + properties: + - common + bgp: + router-id: 0.12.1.142 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::635 + interfaces: + Loopback0: + ipv6: fc00:c:c:18e::1/128 + Ethernet1: + ipv6: fc00:a::636/126 + bp_interface: + ipv6: fc00:b::18e/64 + + ARISTA397T1: + properties: + - common + bgp: + router-id: 0.12.1.143 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::639 + interfaces: + Loopback0: + ipv6: fc00:c:c:18f::1/128 + Ethernet1: + ipv6: fc00:a::63a/126 + bp_interface: + ipv6: fc00:b::18f/64 + + ARISTA398T1: + properties: + - common + bgp: + router-id: 0.12.1.144 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::63d + interfaces: + Loopback0: + ipv6: fc00:c:c:190::1/128 + Ethernet1: + ipv6: fc00:a::63e/126 + bp_interface: + ipv6: fc00:b::190/64 + + ARISTA399T1: + properties: + - common + bgp: + router-id: 0.12.1.145 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::641 + interfaces: + Loopback0: + ipv6: fc00:c:c:191::1/128 + Ethernet1: + ipv6: fc00:a::642/126 + bp_interface: + ipv6: fc00:b::191/64 + + ARISTA400T1: + properties: + - common + bgp: + router-id: 0.12.1.146 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::645 + interfaces: + Loopback0: + ipv6: fc00:c:c:192::1/128 + Ethernet1: + ipv6: fc00:a::646/126 + bp_interface: + ipv6: fc00:b::192/64 + + ARISTA401T1: + properties: + - common + bgp: + router-id: 0.12.1.147 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::649 + interfaces: + Loopback0: + ipv6: fc00:c:c:193::1/128 + Ethernet1: + ipv6: fc00:a::64a/126 + bp_interface: + ipv6: fc00:b::193/64 + + ARISTA402T1: + properties: + - common + bgp: + router-id: 0.12.1.148 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::64d + interfaces: + Loopback0: + ipv6: fc00:c:c:194::1/128 + Ethernet1: + ipv6: fc00:a::64e/126 + bp_interface: + ipv6: fc00:b::194/64 + + ARISTA403T1: + properties: + - common + bgp: + router-id: 0.12.1.149 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::651 + interfaces: + Loopback0: + ipv6: fc00:c:c:195::1/128 + Ethernet1: + ipv6: fc00:a::652/126 + bp_interface: + ipv6: fc00:b::195/64 + + ARISTA404T1: + properties: + - common + bgp: + router-id: 0.12.1.150 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::655 + interfaces: + Loopback0: + ipv6: fc00:c:c:196::1/128 + Ethernet1: + ipv6: fc00:a::656/126 + bp_interface: + ipv6: fc00:b::196/64 + + ARISTA405T1: + properties: + - common + bgp: + router-id: 0.12.1.151 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::659 + interfaces: + Loopback0: + ipv6: fc00:c:c:197::1/128 + Ethernet1: + ipv6: fc00:a::65a/126 + bp_interface: + ipv6: fc00:b::197/64 + + ARISTA406T1: + properties: + - common + bgp: + router-id: 0.12.1.152 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::65d + interfaces: + Loopback0: + ipv6: fc00:c:c:198::1/128 + Ethernet1: + ipv6: fc00:a::65e/126 + bp_interface: + ipv6: fc00:b::198/64 + + ARISTA407T1: + properties: + - common + bgp: + router-id: 0.12.1.153 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::661 + interfaces: + Loopback0: + ipv6: fc00:c:c:199::1/128 + Ethernet1: + ipv6: fc00:a::662/126 + bp_interface: + ipv6: fc00:b::199/64 + + ARISTA408T1: + properties: + - common + bgp: + router-id: 0.12.1.154 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::665 + interfaces: + Loopback0: + ipv6: fc00:c:c:19a::1/128 + Ethernet1: + ipv6: fc00:a::666/126 + bp_interface: + ipv6: fc00:b::19a/64 + + ARISTA409T1: + properties: + - common + bgp: + router-id: 0.12.1.155 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::669 + interfaces: + Loopback0: + ipv6: fc00:c:c:19b::1/128 + Ethernet1: + ipv6: fc00:a::66a/126 + bp_interface: + ipv6: fc00:b::19b/64 + + ARISTA410T1: + properties: + - common + bgp: + router-id: 0.12.1.156 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::66d + interfaces: + Loopback0: + ipv6: fc00:c:c:19c::1/128 + Ethernet1: + ipv6: fc00:a::66e/126 + bp_interface: + ipv6: fc00:b::19c/64 + + ARISTA411T1: + properties: + - common + bgp: + router-id: 0.12.1.157 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::671 + interfaces: + Loopback0: + ipv6: fc00:c:c:19d::1/128 + Ethernet1: + ipv6: fc00:a::672/126 + bp_interface: + ipv6: fc00:b::19d/64 + + ARISTA412T1: + properties: + - common + bgp: + router-id: 0.12.1.158 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::675 + interfaces: + Loopback0: + ipv6: fc00:c:c:19e::1/128 + Ethernet1: + ipv6: fc00:a::676/126 + bp_interface: + ipv6: fc00:b::19e/64 + + ARISTA413T1: + properties: + - common + bgp: + router-id: 0.12.1.159 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::679 + interfaces: + Loopback0: + ipv6: fc00:c:c:19f::1/128 + Ethernet1: + ipv6: fc00:a::67a/126 + bp_interface: + ipv6: fc00:b::19f/64 + + ARISTA414T1: + properties: + - common + bgp: + router-id: 0.12.1.160 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::67d + interfaces: + Loopback0: + ipv6: fc00:c:c:1a0::1/128 + Ethernet1: + ipv6: fc00:a::67e/126 + bp_interface: + ipv6: fc00:b::1a0/64 + + ARISTA415T1: + properties: + - common + bgp: + router-id: 0.12.1.161 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::681 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a1::1/128 + Ethernet1: + ipv6: fc00:a::682/126 + bp_interface: + ipv6: fc00:b::1a1/64 + + ARISTA416T1: + properties: + - common + bgp: + router-id: 0.12.1.162 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::685 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a2::1/128 + Ethernet1: + ipv6: fc00:a::686/126 + bp_interface: + ipv6: fc00:b::1a2/64 + + ARISTA417T1: + properties: + - common + bgp: + router-id: 0.12.1.163 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::689 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a3::1/128 + Ethernet1: + ipv6: fc00:a::68a/126 + bp_interface: + ipv6: fc00:b::1a3/64 + + ARISTA418T1: + properties: + - common + bgp: + router-id: 0.12.1.164 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::68d + interfaces: + Loopback0: + ipv6: fc00:c:c:1a4::1/128 + Ethernet1: + ipv6: fc00:a::68e/126 + bp_interface: + ipv6: fc00:b::1a4/64 + + ARISTA419T1: + properties: + - common + bgp: + router-id: 0.12.1.165 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::691 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a5::1/128 + Ethernet1: + ipv6: fc00:a::692/126 + bp_interface: + ipv6: fc00:b::1a5/64 + + ARISTA420T1: + properties: + - common + bgp: + router-id: 0.12.1.166 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::695 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a6::1/128 + Ethernet1: + ipv6: fc00:a::696/126 + bp_interface: + ipv6: fc00:b::1a6/64 + + ARISTA421T1: + properties: + - common + bgp: + router-id: 0.12.1.167 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::699 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a7::1/128 + Ethernet1: + ipv6: fc00:a::69a/126 + bp_interface: + ipv6: fc00:b::1a7/64 + + ARISTA422T1: + properties: + - common + bgp: + router-id: 0.12.1.168 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::69d + interfaces: + Loopback0: + ipv6: fc00:c:c:1a8::1/128 + Ethernet1: + ipv6: fc00:a::69e/126 + bp_interface: + ipv6: fc00:b::1a8/64 + + ARISTA423T1: + properties: + - common + bgp: + router-id: 0.12.1.169 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a9::1/128 + Ethernet1: + ipv6: fc00:a::6a2/126 + bp_interface: + ipv6: fc00:b::1a9/64 + + ARISTA424T1: + properties: + - common + bgp: + router-id: 0.12.1.170 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1aa::1/128 + Ethernet1: + ipv6: fc00:a::6a6/126 + bp_interface: + ipv6: fc00:b::1aa/64 + + ARISTA425T1: + properties: + - common + bgp: + router-id: 0.12.1.171 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ab::1/128 + Ethernet1: + ipv6: fc00:a::6aa/126 + bp_interface: + ipv6: fc00:b::1ab/64 + + ARISTA426T1: + properties: + - common + bgp: + router-id: 0.12.1.172 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6ad + interfaces: + Loopback0: + ipv6: fc00:c:c:1ac::1/128 + Ethernet1: + ipv6: fc00:a::6ae/126 + bp_interface: + ipv6: fc00:b::1ac/64 + + ARISTA427T1: + properties: + - common + bgp: + router-id: 0.12.1.173 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ad::1/128 + Ethernet1: + ipv6: fc00:a::6b2/126 + bp_interface: + ipv6: fc00:b::1ad/64 + + ARISTA428T1: + properties: + - common + bgp: + router-id: 0.12.1.174 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ae::1/128 + Ethernet1: + ipv6: fc00:a::6b6/126 + bp_interface: + ipv6: fc00:b::1ae/64 + + ARISTA429T1: + properties: + - common + bgp: + router-id: 0.12.1.175 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1af::1/128 + Ethernet1: + ipv6: fc00:a::6ba/126 + bp_interface: + ipv6: fc00:b::1af/64 + + ARISTA430T1: + properties: + - common + bgp: + router-id: 0.12.1.176 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6bd + interfaces: + Loopback0: + ipv6: fc00:c:c:1b0::1/128 + Ethernet1: + ipv6: fc00:a::6be/126 + bp_interface: + ipv6: fc00:b::1b0/64 + + ARISTA431T1: + properties: + - common + bgp: + router-id: 0.12.1.177 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b1::1/128 + Ethernet1: + ipv6: fc00:a::6c2/126 + bp_interface: + ipv6: fc00:b::1b1/64 + + ARISTA432T1: + properties: + - common + bgp: + router-id: 0.12.1.178 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b2::1/128 + Ethernet1: + ipv6: fc00:a::6c6/126 + bp_interface: + ipv6: fc00:b::1b2/64 + + ARISTA433T1: + properties: + - common + bgp: + router-id: 0.12.1.179 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b3::1/128 + Ethernet1: + ipv6: fc00:a::6ca/126 + bp_interface: + ipv6: fc00:b::1b3/64 + + ARISTA434T1: + properties: + - common + bgp: + router-id: 0.12.1.180 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6cd + interfaces: + Loopback0: + ipv6: fc00:c:c:1b4::1/128 + Ethernet1: + ipv6: fc00:a::6ce/126 + bp_interface: + ipv6: fc00:b::1b4/64 + + ARISTA435T1: + properties: + - common + bgp: + router-id: 0.12.1.181 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b5::1/128 + Ethernet1: + ipv6: fc00:a::6d2/126 + bp_interface: + ipv6: fc00:b::1b5/64 + + ARISTA436T1: + properties: + - common + bgp: + router-id: 0.12.1.182 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b6::1/128 + Ethernet1: + ipv6: fc00:a::6d6/126 + bp_interface: + ipv6: fc00:b::1b6/64 + + ARISTA437T1: + properties: + - common + bgp: + router-id: 0.12.1.183 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b7::1/128 + Ethernet1: + ipv6: fc00:a::6da/126 + bp_interface: + ipv6: fc00:b::1b7/64 + + ARISTA438T1: + properties: + - common + bgp: + router-id: 0.12.1.184 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6dd + interfaces: + Loopback0: + ipv6: fc00:c:c:1b8::1/128 + Ethernet1: + ipv6: fc00:a::6de/126 + bp_interface: + ipv6: fc00:b::1b8/64 + + ARISTA439T1: + properties: + - common + bgp: + router-id: 0.12.1.185 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b9::1/128 + Ethernet1: + ipv6: fc00:a::6e2/126 + bp_interface: + ipv6: fc00:b::1b9/64 + + ARISTA440T1: + properties: + - common + bgp: + router-id: 0.12.1.186 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ba::1/128 + Ethernet1: + ipv6: fc00:a::6e6/126 + bp_interface: + ipv6: fc00:b::1ba/64 + + ARISTA441T1: + properties: + - common + bgp: + router-id: 0.12.1.187 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1bb::1/128 + Ethernet1: + ipv6: fc00:a::6ea/126 + bp_interface: + ipv6: fc00:b::1bb/64 + + ARISTA442T1: + properties: + - common + bgp: + router-id: 0.12.1.188 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6ed + interfaces: + Loopback0: + ipv6: fc00:c:c:1bc::1/128 + Ethernet1: + ipv6: fc00:a::6ee/126 + bp_interface: + ipv6: fc00:b::1bc/64 + + ARISTA443T1: + properties: + - common + bgp: + router-id: 0.12.1.189 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1bd::1/128 + Ethernet1: + ipv6: fc00:a::6f2/126 + bp_interface: + ipv6: fc00:b::1bd/64 + + ARISTA444T1: + properties: + - common + bgp: + router-id: 0.12.1.190 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1be::1/128 + Ethernet1: + ipv6: fc00:a::6f6/126 + bp_interface: + ipv6: fc00:b::1be/64 + + ARISTA445T1: + properties: + - common + bgp: + router-id: 0.12.1.191 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1bf::1/128 + Ethernet1: + ipv6: fc00:a::6fa/126 + bp_interface: + ipv6: fc00:b::1bf/64 + + ARISTA446T1: + properties: + - common + bgp: + router-id: 0.12.1.192 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::6fd + interfaces: + Loopback0: + ipv6: fc00:c:c:1c0::1/128 + Ethernet1: + ipv6: fc00:a::6fe/126 + bp_interface: + ipv6: fc00:b::1c0/64 + + ARISTA447T1: + properties: + - common + bgp: + router-id: 0.12.1.193 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::701 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c1::1/128 + Ethernet1: + ipv6: fc00:a::702/126 + bp_interface: + ipv6: fc00:b::1c1/64 + + ARISTA448T1: + properties: + - common + bgp: + router-id: 0.12.1.194 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::705 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c2::1/128 + Ethernet1: + ipv6: fc00:a::706/126 + bp_interface: + ipv6: fc00:b::1c2/64 + + ARISTA449T1: + properties: + - common + bgp: + router-id: 0.12.1.195 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::709 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c3::1/128 + Ethernet1: + ipv6: fc00:a::70a/126 + bp_interface: + ipv6: fc00:b::1c3/64 + + ARISTA450T1: + properties: + - common + bgp: + router-id: 0.12.1.196 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::70d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c4::1/128 + Ethernet1: + ipv6: fc00:a::70e/126 + bp_interface: + ipv6: fc00:b::1c4/64 + + ARISTA451T1: + properties: + - common + bgp: + router-id: 0.12.1.197 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::711 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c5::1/128 + Ethernet1: + ipv6: fc00:a::712/126 + bp_interface: + ipv6: fc00:b::1c5/64 + + ARISTA452T1: + properties: + - common + bgp: + router-id: 0.12.1.198 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::715 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c6::1/128 + Ethernet1: + ipv6: fc00:a::716/126 + bp_interface: + ipv6: fc00:b::1c6/64 + + ARISTA453T1: + properties: + - common + bgp: + router-id: 0.12.1.199 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::719 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c7::1/128 + Ethernet1: + ipv6: fc00:a::71a/126 + bp_interface: + ipv6: fc00:b::1c7/64 + + ARISTA454T1: + properties: + - common + bgp: + router-id: 0.12.1.200 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::71d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c8::1/128 + Ethernet1: + ipv6: fc00:a::71e/126 + bp_interface: + ipv6: fc00:b::1c8/64 + + ARISTA455T1: + properties: + - common + bgp: + router-id: 0.12.1.201 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::721 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c9::1/128 + Ethernet1: + ipv6: fc00:a::722/126 + bp_interface: + ipv6: fc00:b::1c9/64 + + ARISTA456T1: + properties: + - common + bgp: + router-id: 0.12.1.202 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::725 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ca::1/128 + Ethernet1: + ipv6: fc00:a::726/126 + bp_interface: + ipv6: fc00:b::1ca/64 + + ARISTA457T1: + properties: + - common + bgp: + router-id: 0.12.1.203 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::729 + interfaces: + Loopback0: + ipv6: fc00:c:c:1cb::1/128 + Ethernet1: + ipv6: fc00:a::72a/126 + bp_interface: + ipv6: fc00:b::1cb/64 + + ARISTA458T1: + properties: + - common + bgp: + router-id: 0.12.1.204 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::72d + interfaces: + Loopback0: + ipv6: fc00:c:c:1cc::1/128 + Ethernet1: + ipv6: fc00:a::72e/126 + bp_interface: + ipv6: fc00:b::1cc/64 + + ARISTA459T1: + properties: + - common + bgp: + router-id: 0.12.1.205 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::731 + interfaces: + Loopback0: + ipv6: fc00:c:c:1cd::1/128 + Ethernet1: + ipv6: fc00:a::732/126 + bp_interface: + ipv6: fc00:b::1cd/64 + + ARISTA460T1: + properties: + - common + bgp: + router-id: 0.12.1.206 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::735 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ce::1/128 + Ethernet1: + ipv6: fc00:a::736/126 + bp_interface: + ipv6: fc00:b::1ce/64 + + ARISTA461T1: + properties: + - common + bgp: + router-id: 0.12.1.207 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::739 + interfaces: + Loopback0: + ipv6: fc00:c:c:1cf::1/128 + Ethernet1: + ipv6: fc00:a::73a/126 + bp_interface: + ipv6: fc00:b::1cf/64 + + ARISTA462T1: + properties: + - common + bgp: + router-id: 0.12.1.208 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::73d + interfaces: + Loopback0: + ipv6: fc00:c:c:1d0::1/128 + Ethernet1: + ipv6: fc00:a::73e/126 + bp_interface: + ipv6: fc00:b::1d0/64 + + ARISTA463T1: + properties: + - common + bgp: + router-id: 0.12.1.209 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::741 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d1::1/128 + Ethernet1: + ipv6: fc00:a::742/126 + bp_interface: + ipv6: fc00:b::1d1/64 + + ARISTA464T1: + properties: + - common + bgp: + router-id: 0.12.1.210 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::745 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d2::1/128 + Ethernet1: + ipv6: fc00:a::746/126 + bp_interface: + ipv6: fc00:b::1d2/64 + + ARISTA465T1: + properties: + - common + bgp: + router-id: 0.12.1.211 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::749 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d3::1/128 + Ethernet1: + ipv6: fc00:a::74a/126 + bp_interface: + ipv6: fc00:b::1d3/64 + + ARISTA466T1: + properties: + - common + bgp: + router-id: 0.12.1.212 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::74d + interfaces: + Loopback0: + ipv6: fc00:c:c:1d4::1/128 + Ethernet1: + ipv6: fc00:a::74e/126 + bp_interface: + ipv6: fc00:b::1d4/64 + + ARISTA467T1: + properties: + - common + bgp: + router-id: 0.12.1.213 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::751 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d5::1/128 + Ethernet1: + ipv6: fc00:a::752/126 + bp_interface: + ipv6: fc00:b::1d5/64 + + ARISTA468T1: + properties: + - common + bgp: + router-id: 0.12.1.214 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::755 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d6::1/128 + Ethernet1: + ipv6: fc00:a::756/126 + bp_interface: + ipv6: fc00:b::1d6/64 + + ARISTA469T1: + properties: + - common + bgp: + router-id: 0.12.1.215 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::759 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d7::1/128 + Ethernet1: + ipv6: fc00:a::75a/126 + bp_interface: + ipv6: fc00:b::1d7/64 + + ARISTA470T1: + properties: + - common + bgp: + router-id: 0.12.1.216 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::75d + interfaces: + Loopback0: + ipv6: fc00:c:c:1d8::1/128 + Ethernet1: + ipv6: fc00:a::75e/126 + bp_interface: + ipv6: fc00:b::1d8/64 + + ARISTA471T1: + properties: + - common + bgp: + router-id: 0.12.1.217 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::761 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d9::1/128 + Ethernet1: + ipv6: fc00:a::762/126 + bp_interface: + ipv6: fc00:b::1d9/64 + + ARISTA472T1: + properties: + - common + bgp: + router-id: 0.12.1.218 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::765 + interfaces: + Loopback0: + ipv6: fc00:c:c:1da::1/128 + Ethernet1: + ipv6: fc00:a::766/126 + bp_interface: + ipv6: fc00:b::1da/64 + + ARISTA473T1: + properties: + - common + bgp: + router-id: 0.12.1.219 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::769 + interfaces: + Loopback0: + ipv6: fc00:c:c:1db::1/128 + Ethernet1: + ipv6: fc00:a::76a/126 + bp_interface: + ipv6: fc00:b::1db/64 + + ARISTA474T1: + properties: + - common + bgp: + router-id: 0.12.1.220 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::76d + interfaces: + Loopback0: + ipv6: fc00:c:c:1dc::1/128 + Ethernet1: + ipv6: fc00:a::76e/126 + bp_interface: + ipv6: fc00:b::1dc/64 + + ARISTA475T1: + properties: + - common + bgp: + router-id: 0.12.1.221 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::771 + interfaces: + Loopback0: + ipv6: fc00:c:c:1dd::1/128 + Ethernet1: + ipv6: fc00:a::772/126 + bp_interface: + ipv6: fc00:b::1dd/64 + + ARISTA476T1: + properties: + - common + bgp: + router-id: 0.12.1.222 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::775 + interfaces: + Loopback0: + ipv6: fc00:c:c:1de::1/128 + Ethernet1: + ipv6: fc00:a::776/126 + bp_interface: + ipv6: fc00:b::1de/64 + + ARISTA477T1: + properties: + - common + bgp: + router-id: 0.12.1.223 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::779 + interfaces: + Loopback0: + ipv6: fc00:c:c:1df::1/128 + Ethernet1: + ipv6: fc00:a::77a/126 + bp_interface: + ipv6: fc00:b::1df/64 + + ARISTA478T1: + properties: + - common + bgp: + router-id: 0.12.1.224 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::77d + interfaces: + Loopback0: + ipv6: fc00:c:c:1e0::1/128 + Ethernet1: + ipv6: fc00:a::77e/126 + bp_interface: + ipv6: fc00:b::1e0/64 + + ARISTA479T1: + properties: + - common + bgp: + router-id: 0.12.1.225 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::781 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e1::1/128 + Ethernet1: + ipv6: fc00:a::782/126 + bp_interface: + ipv6: fc00:b::1e1/64 + + ARISTA480T1: + properties: + - common + bgp: + router-id: 0.12.1.226 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::785 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e2::1/128 + Ethernet1: + ipv6: fc00:a::786/126 + bp_interface: + ipv6: fc00:b::1e2/64 + + ARISTA481T1: + properties: + - common + bgp: + router-id: 0.12.1.227 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::789 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e3::1/128 + Ethernet1: + ipv6: fc00:a::78a/126 + bp_interface: + ipv6: fc00:b::1e3/64 + + ARISTA482T1: + properties: + - common + bgp: + router-id: 0.12.1.228 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::78d + interfaces: + Loopback0: + ipv6: fc00:c:c:1e4::1/128 + Ethernet1: + ipv6: fc00:a::78e/126 + bp_interface: + ipv6: fc00:b::1e4/64 + + ARISTA483T1: + properties: + - common + bgp: + router-id: 0.12.1.229 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::791 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e5::1/128 + Ethernet1: + ipv6: fc00:a::792/126 + bp_interface: + ipv6: fc00:b::1e5/64 + + ARISTA484T1: + properties: + - common + bgp: + router-id: 0.12.1.230 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::795 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e6::1/128 + Ethernet1: + ipv6: fc00:a::796/126 + bp_interface: + ipv6: fc00:b::1e6/64 + + ARISTA485T1: + properties: + - common + bgp: + router-id: 0.12.1.231 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::799 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e7::1/128 + Ethernet1: + ipv6: fc00:a::79a/126 + bp_interface: + ipv6: fc00:b::1e7/64 + + ARISTA486T1: + properties: + - common + bgp: + router-id: 0.12.1.232 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::79d + interfaces: + Loopback0: + ipv6: fc00:c:c:1e8::1/128 + Ethernet1: + ipv6: fc00:a::79e/126 + bp_interface: + ipv6: fc00:b::1e8/64 + + ARISTA487T1: + properties: + - common + bgp: + router-id: 0.12.1.233 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e9::1/128 + Ethernet1: + ipv6: fc00:a::7a2/126 + bp_interface: + ipv6: fc00:b::1e9/64 + + ARISTA488T1: + properties: + - common + bgp: + router-id: 0.12.1.234 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ea::1/128 + Ethernet1: + ipv6: fc00:a::7a6/126 + bp_interface: + ipv6: fc00:b::1ea/64 + + ARISTA489T1: + properties: + - common + bgp: + router-id: 0.12.1.235 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1eb::1/128 + Ethernet1: + ipv6: fc00:a::7aa/126 + bp_interface: + ipv6: fc00:b::1eb/64 + + ARISTA490T1: + properties: + - common + bgp: + router-id: 0.12.1.236 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7ad + interfaces: + Loopback0: + ipv6: fc00:c:c:1ec::1/128 + Ethernet1: + ipv6: fc00:a::7ae/126 + bp_interface: + ipv6: fc00:b::1ec/64 + + ARISTA491T1: + properties: + - common + bgp: + router-id: 0.12.1.237 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ed::1/128 + Ethernet1: + ipv6: fc00:a::7b2/126 + bp_interface: + ipv6: fc00:b::1ed/64 + + ARISTA492T1: + properties: + - common + bgp: + router-id: 0.12.1.238 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ee::1/128 + Ethernet1: + ipv6: fc00:a::7b6/126 + bp_interface: + ipv6: fc00:b::1ee/64 + + ARISTA493T1: + properties: + - common + bgp: + router-id: 0.12.1.239 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ef::1/128 + Ethernet1: + ipv6: fc00:a::7ba/126 + bp_interface: + ipv6: fc00:b::1ef/64 + + ARISTA494T1: + properties: + - common + bgp: + router-id: 0.12.1.240 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7bd + interfaces: + Loopback0: + ipv6: fc00:c:c:1f0::1/128 + Ethernet1: + ipv6: fc00:a::7be/126 + bp_interface: + ipv6: fc00:b::1f0/64 + + ARISTA495T1: + properties: + - common + bgp: + router-id: 0.12.1.241 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f1::1/128 + Ethernet1: + ipv6: fc00:a::7c2/126 + bp_interface: + ipv6: fc00:b::1f1/64 + + ARISTA496T1: + properties: + - common + bgp: + router-id: 0.12.1.242 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f2::1/128 + Ethernet1: + ipv6: fc00:a::7c6/126 + bp_interface: + ipv6: fc00:b::1f2/64 + + ARISTA497T1: + properties: + - common + bgp: + router-id: 0.12.1.243 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f3::1/128 + Ethernet1: + ipv6: fc00:a::7ca/126 + bp_interface: + ipv6: fc00:b::1f3/64 + + ARISTA498T1: + properties: + - common + bgp: + router-id: 0.12.1.244 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7cd + interfaces: + Loopback0: + ipv6: fc00:c:c:1f4::1/128 + Ethernet1: + ipv6: fc00:a::7ce/126 + bp_interface: + ipv6: fc00:b::1f4/64 + + ARISTA499T1: + properties: + - common + bgp: + router-id: 0.12.1.245 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f5::1/128 + Ethernet1: + ipv6: fc00:a::7d2/126 + bp_interface: + ipv6: fc00:b::1f5/64 + + ARISTA500T1: + properties: + - common + bgp: + router-id: 0.12.1.246 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f6::1/128 + Ethernet1: + ipv6: fc00:a::7d6/126 + bp_interface: + ipv6: fc00:b::1f6/64 + + ARISTA501T1: + properties: + - common + bgp: + router-id: 0.12.1.247 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f7::1/128 + Ethernet1: + ipv6: fc00:a::7da/126 + bp_interface: + ipv6: fc00:b::1f7/64 + + ARISTA502T1: + properties: + - common + bgp: + router-id: 0.12.1.248 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7dd + interfaces: + Loopback0: + ipv6: fc00:c:c:1f8::1/128 + Ethernet1: + ipv6: fc00:a::7de/126 + bp_interface: + ipv6: fc00:b::1f8/64 + + ARISTA503T1: + properties: + - common + bgp: + router-id: 0.12.1.249 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f9::1/128 + Ethernet1: + ipv6: fc00:a::7e2/126 + bp_interface: + ipv6: fc00:b::1f9/64 + + ARISTA504T1: + properties: + - common + bgp: + router-id: 0.12.1.250 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fa::1/128 + Ethernet1: + ipv6: fc00:a::7e6/126 + bp_interface: + ipv6: fc00:b::1fa/64 + + ARISTA505T1: + properties: + - common + bgp: + router-id: 0.12.1.251 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fb::1/128 + Ethernet1: + ipv6: fc00:a::7ea/126 + bp_interface: + ipv6: fc00:b::1fb/64 + + ARISTA506T1: + properties: + - common + bgp: + router-id: 0.12.1.252 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7ed + interfaces: + Loopback0: + ipv6: fc00:c:c:1fc::1/128 + Ethernet1: + ipv6: fc00:a::7ee/126 + bp_interface: + ipv6: fc00:b::1fc/64 + + ARISTA507T1: + properties: + - common + bgp: + router-id: 0.12.1.253 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fd::1/128 + Ethernet1: + ipv6: fc00:a::7f2/126 + bp_interface: + ipv6: fc00:b::1fd/64 + + ARISTA508T1: + properties: + - common + bgp: + router-id: 0.12.1.254 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fe::1/128 + Ethernet1: + ipv6: fc00:a::7f6/126 + bp_interface: + ipv6: fc00:b::1fe/64 + + ARISTA509T1: + properties: + - common + bgp: + router-id: 0.12.1.255 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ff::1/128 + Ethernet1: + ipv6: fc00:a::7fa/126 + bp_interface: + ipv6: fc00:b::1ff/64 + + ARISTA510T1: + properties: + - common + bgp: + router-id: 0.12.2.0 + asn: 4200100000 + peers: + 4200000000: + - fc00:a::7fd + interfaces: + Loopback0: + ipv6: fc00:c:c:200::1/128 + Ethernet1: + ipv6: fc00:a::7fe/126 + bp_interface: + ipv6: fc00:b::200/64 diff --git a/ansible/vars/topo_t0-isolated-d96u32s2.yml b/ansible/vars/topo_t0-isolated-d96u32s2.yml new file mode 100644 index 00000000000..24f1a4d2040 --- /dev/null +++ b/ansible/vars/topo_t0-isolated-d96u32s2.yml @@ -0,0 +1,948 @@ +topology: + host_interfaces: + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15 + - 16 + - 17 + - 18 + - 19 + - 20 + - 21 + - 22 + - 23 + - 24 + - 41 + - 42 + - 43 + - 44 + - 45 + - 46 + - 47 + - 48 + - 49 + - 50 + - 51 + - 52 + - 53 + - 54 + - 55 + - 56 + - 57 + - 58 + - 59 + - 60 + - 61 + - 62 + - 63 + - 64 + - 65 + - 66 + - 67 + - 68 + - 69 + - 70 + - 71 + - 72 + - 73 + - 74 + - 75 + - 76 + - 77 + - 78 + - 79 + - 80 + - 81 + - 82 + - 83 + - 84 + - 85 + - 86 + - 87 + - 88 + - 105 + - 106 + - 107 + - 108 + - 109 + - 110 + - 111 + - 112 + - 113 + - 114 + - 115 + - 116 + - 117 + - 118 + - 119 + - 120 + - 121 + - 122 + - 123 + - 124 + - 125 + - 126 + - 127 + VMs: + ARISTA01T1: + vlans: + - 25 + vm_offset: 0 + ARISTA02T1: + vlans: + - 26 + vm_offset: 1 + ARISTA03T1: + vlans: + - 27 + vm_offset: 2 + ARISTA04T1: + vlans: + - 28 + vm_offset: 3 + ARISTA05T1: + vlans: + - 29 + vm_offset: 4 + ARISTA06T1: + vlans: + - 30 + vm_offset: 5 + ARISTA07T1: + vlans: + - 31 + vm_offset: 6 + ARISTA08T1: + vlans: + - 32 + vm_offset: 7 + ARISTA09T1: + vlans: + - 33 + vm_offset: 8 + ARISTA10T1: + vlans: + - 34 + vm_offset: 9 + ARISTA11T1: + vlans: + - 35 + vm_offset: 10 + ARISTA12T1: + vlans: + - 36 + vm_offset: 11 + ARISTA13T1: + vlans: + - 37 + vm_offset: 12 + ARISTA14T1: + vlans: + - 38 + vm_offset: 13 + ARISTA15T1: + vlans: + - 39 + vm_offset: 14 + ARISTA16T1: + vlans: + - 40 + vm_offset: 15 + ARISTA17T1: + vlans: + - 89 + vm_offset: 16 + ARISTA18T1: + vlans: + - 90 + vm_offset: 17 + ARISTA19T1: + vlans: + - 91 + vm_offset: 18 + ARISTA20T1: + vlans: + - 92 + vm_offset: 19 + ARISTA21T1: + vlans: + - 93 + vm_offset: 20 + ARISTA22T1: + vlans: + - 94 + vm_offset: 21 + ARISTA23T1: + vlans: + - 95 + vm_offset: 22 + ARISTA24T1: + vlans: + - 96 + vm_offset: 23 + ARISTA25T1: + vlans: + - 97 + vm_offset: 24 + ARISTA26T1: + vlans: + - 98 + vm_offset: 25 + ARISTA27T1: + vlans: + - 99 + vm_offset: 26 + ARISTA28T1: + vlans: + - 100 + vm_offset: 27 + ARISTA29T1: + vlans: + - 101 + vm_offset: 28 + ARISTA30T1: + vlans: + - 102 + vm_offset: 29 + ARISTA31T1: + vlans: + - 103 + vm_offset: 30 + ARISTA32T1: + vlans: + - 104 + vm_offset: 31 + ARISTA01PT0: + vlans: + - 128 + vm_offset: 32 + ARISTA02PT0: + vlans: + - 129 + vm_offset: 33 + DUT: + vlan_configs: + default_vlan_config: one_vlan_a + one_vlan_a: + Vlan1000: + id: 1000 + intfs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127] + prefix: 192.168.0.1/21 + prefix_v6: fc02:1000::1/64 + tag: 1000 + two_vlan_a: + Vlan1000: + id: 1000 + intfs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + prefix: 192.168.0.1/22 + prefix_v6: fc02:100::1/64 + tag: 1000 + Vlan1100: + id: 1100 + intfs: [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127] + prefix: 192.168.4.1/22 + prefix_v6: fc02:101::1/64 + tag: 1100 + four_vlan_a: + Vlan1000: + id: 1000 + intfs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] + prefix: 192.168.0.1/22 + prefix_v6: fc02:100::1/64 + tag: 1000 + Vlan1100: + id: 1100 + intfs: [24, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63] + prefix: 192.168.4.1/22 + prefix_v6: fc02:101::1/64 + tag: 1100 + Vlan1200: + id: 1200 + intfs: [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87] + prefix: 192.168.8.1/22 + prefix_v6: fc02:102::1/64 + tag: 1200 + Vlan1300: + id: 1300 + intfs: [88, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127] + prefix: 192.168.12.1/22 + prefix_v6: fc02:103::1/64 + tag: 1300 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: ToRRouter + swrole: leaf + 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_asn: 65534 + leaf_asn_start: 64600 + tor_asn_start: 65500 + failure_rate: 0 + +configuration: + ARISTA01T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.0 + - fc00::1 + interfaces: + Loopback0: + ipv4: 100.1.0.1/32 + ipv6: 2064:100:0:1::/128 + Ethernet1: + ipv4: 10.0.0.1/31 + ipv6: fc00::2/126 + bp_interface: + ipv4: 10.10.246.2/24 + ipv6: fc0a::2/64 + ARISTA02T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.2 + - fc00::5 + interfaces: + Loopback0: + ipv4: 100.1.0.2/32 + ipv6: 2064:100:0:2::/128 + Ethernet1: + ipv4: 10.0.0.3/31 + ipv6: fc00::6/126 + bp_interface: + ipv4: 10.10.246.3/24 + ipv6: fc0a::3/64 + ARISTA03T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.4 + - fc00::9 + interfaces: + Loopback0: + ipv4: 100.1.0.3/32 + ipv6: 2064:100:0:3::/128 + Ethernet1: + ipv4: 10.0.0.5/31 + ipv6: fc00::a/126 + bp_interface: + ipv4: 10.10.246.4/24 + ipv6: fc0a::4/64 + ARISTA04T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.6 + - fc00::d + interfaces: + Loopback0: + ipv4: 100.1.0.4/32 + ipv6: 2064:100:0:4::/128 + Ethernet1: + ipv4: 10.0.0.7/31 + ipv6: fc00::e/126 + bp_interface: + ipv4: 10.10.246.5/24 + ipv6: fc0a::5/64 + ARISTA05T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.8 + - fc00::11 + interfaces: + Loopback0: + ipv4: 100.1.0.5/32 + ipv6: 2064:100:0:5::/128 + Ethernet1: + ipv4: 10.0.0.9/31 + ipv6: fc00::12/126 + bp_interface: + ipv4: 10.10.246.6/24 + ipv6: fc0a::6/64 + ARISTA06T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.10 + - fc00::15 + interfaces: + Loopback0: + ipv4: 100.1.0.6/32 + ipv6: 2064:100:0:6::/128 + Ethernet1: + ipv4: 10.0.0.11/31 + ipv6: fc00::16/126 + bp_interface: + ipv4: 10.10.246.7/24 + ipv6: fc0a::7/64 + ARISTA07T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.12 + - fc00::19 + interfaces: + Loopback0: + ipv4: 100.1.0.7/32 + ipv6: 2064:100:0:7::/128 + Ethernet1: + ipv4: 10.0.0.13/31 + ipv6: fc00::1a/126 + bp_interface: + ipv4: 10.10.246.8/24 + ipv6: fc0a::8/64 + ARISTA08T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.14 + - fc00::1d + interfaces: + Loopback0: + ipv4: 100.1.0.8/32 + ipv6: 2064:100:0:8::/128 + Ethernet1: + ipv4: 10.0.0.15/31 + ipv6: fc00::1e/126 + bp_interface: + ipv4: 10.10.246.9/24 + ipv6: fc0a::9/64 + ARISTA09T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.16 + - fc00::21 + interfaces: + Loopback0: + ipv4: 100.1.0.9/32 + ipv6: 2064:100:0:9::/128 + Ethernet1: + ipv4: 10.0.0.17/31 + ipv6: fc00::22/126 + bp_interface: + ipv4: 10.10.246.10/24 + ipv6: fc0a::a/64 + ARISTA10T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.18 + - fc00::25 + interfaces: + Loopback0: + ipv4: 100.1.0.10/32 + ipv6: 2064:100:0:a::/128 + Ethernet1: + ipv4: 10.0.0.19/31 + ipv6: fc00::26/126 + bp_interface: + ipv4: 10.10.246.11/24 + ipv6: fc0a::b/64 + ARISTA11T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.20 + - fc00::29 + interfaces: + Loopback0: + ipv4: 100.1.0.11/32 + ipv6: 2064:100:0:b::/128 + Ethernet1: + ipv4: 10.0.0.21/31 + ipv6: fc00::2a/126 + bp_interface: + ipv4: 10.10.246.12/24 + ipv6: fc0a::c/64 + ARISTA12T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.22 + - fc00::2d + interfaces: + Loopback0: + ipv4: 100.1.0.12/32 + ipv6: 2064:100:0:c::/128 + Ethernet1: + ipv4: 10.0.0.23/31 + ipv6: fc00::2e/126 + bp_interface: + ipv4: 10.10.246.13/24 + ipv6: fc0a::d/64 + ARISTA13T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.24 + - fc00::31 + interfaces: + Loopback0: + ipv4: 100.1.0.13/32 + ipv6: 2064:100:0:d::/128 + Ethernet1: + ipv4: 10.0.0.25/31 + ipv6: fc00::32/126 + bp_interface: + ipv4: 10.10.246.14/24 + ipv6: fc0a::e/64 + ARISTA14T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.26 + - fc00::35 + interfaces: + Loopback0: + ipv4: 100.1.0.14/32 + ipv6: 2064:100:0:e::/128 + Ethernet1: + ipv4: 10.0.0.27/31 + ipv6: fc00::36/126 + bp_interface: + ipv4: 10.10.246.15/24 + ipv6: fc0a::f/64 + ARISTA15T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.28 + - fc00::39 + interfaces: + Loopback0: + ipv4: 100.1.0.15/32 + ipv6: 2064:100:0:f::/128 + Ethernet1: + ipv4: 10.0.0.29/31 + ipv6: fc00::3a/126 + bp_interface: + ipv4: 10.10.246.16/24 + ipv6: fc0a::10/64 + ARISTA16T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.30 + - fc00::3d + interfaces: + Loopback0: + ipv4: 100.1.0.16/32 + ipv6: 2064:100:0:10::/128 + Ethernet1: + ipv4: 10.0.0.31/31 + ipv6: fc00::3e/126 + bp_interface: + ipv4: 10.10.246.17/24 + ipv6: fc0a::11/64 + ARISTA17T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.32 + - fc00::41 + interfaces: + Loopback0: + ipv4: 100.1.0.17/32 + ipv6: 2064:100:0:11::/128 + Ethernet1: + ipv4: 10.0.0.33/31 + ipv6: fc00::42/126 + bp_interface: + ipv4: 10.10.246.18/24 + ipv6: fc0a::12/64 + ARISTA18T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.34 + - fc00::45 + interfaces: + Loopback0: + ipv4: 100.1.0.18/32 + ipv6: 2064:100:0:12::/128 + Ethernet1: + ipv4: 10.0.0.35/31 + ipv6: fc00::46/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::13/64 + ARISTA19T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.36 + - fc00::49 + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100:0:13::/128 + Ethernet1: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + bp_interface: + ipv4: 10.10.246.20/24 + ipv6: fc0a::14/64 + ARISTA20T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.38 + - fc00::4d + interfaces: + Loopback0: + ipv4: 100.1.0.20/32 + ipv6: 2064:100:0:14::/128 + Ethernet1: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.21/24 + ipv6: fc0a::15/64 + ARISTA21T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.40 + - fc00::51 + interfaces: + Loopback0: + ipv4: 100.1.0.21/32 + ipv6: 2064:100:0:15::/128 + Ethernet1: + ipv4: 10.0.0.41/31 + ipv6: fc00::52/126 + bp_interface: + ipv4: 10.10.246.22/24 + ipv6: fc0a::16/64 + ARISTA22T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.42 + - fc00::55 + interfaces: + Loopback0: + ipv4: 100.1.0.22/32 + ipv6: 2064:100:0:16::/128 + Ethernet1: + ipv4: 10.0.0.43/31 + ipv6: fc00::56/126 + bp_interface: + ipv4: 10.10.246.23/24 + ipv6: fc0a::17/64 + ARISTA23T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.44 + - fc00::59 + interfaces: + Loopback0: + ipv4: 100.1.0.23/32 + ipv6: 2064:100:0:17::/128 + Ethernet1: + ipv4: 10.0.0.45/31 + ipv6: fc00::5a/126 + bp_interface: + ipv4: 10.10.246.24/24 + ipv6: fc0a::18/64 + ARISTA24T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.46 + - fc00::5d + interfaces: + Loopback0: + ipv4: 100.1.0.24/32 + ipv6: 2064:100:0:18::/128 + Ethernet1: + ipv4: 10.0.0.47/31 + ipv6: fc00::5e/126 + bp_interface: + ipv4: 10.10.246.25/24 + ipv6: fc0a::19/64 + ARISTA25T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.48 + - fc00::61 + interfaces: + Loopback0: + ipv4: 100.1.0.25/32 + ipv6: 2064:100:0:19::/128 + Ethernet1: + ipv4: 10.0.0.49/31 + ipv6: fc00::62/126 + bp_interface: + ipv4: 10.10.246.26/24 + ipv6: fc0a::1a/64 + ARISTA26T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.50 + - fc00::65 + interfaces: + Loopback0: + ipv4: 100.1.0.26/32 + ipv6: 2064:100:0:1a::/128 + Ethernet1: + ipv4: 10.0.0.51/31 + ipv6: fc00::66/126 + bp_interface: + ipv4: 10.10.246.27/24 + ipv6: fc0a::1b/64 + ARISTA27T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.52 + - fc00::69 + interfaces: + Loopback0: + ipv4: 100.1.0.27/32 + ipv6: 2064:100:0:1b::/128 + Ethernet1: + ipv4: 10.0.0.53/31 + ipv6: fc00::6a/126 + bp_interface: + ipv4: 10.10.246.28/24 + ipv6: fc0a::1c/64 + ARISTA28T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.54 + - fc00::6d + interfaces: + Loopback0: + ipv4: 100.1.0.28/32 + ipv6: 2064:100:0:1c::/128 + Ethernet1: + ipv4: 10.0.0.55/31 + ipv6: fc00::6e/126 + bp_interface: + ipv4: 10.10.246.29/24 + ipv6: fc0a::1d/64 + ARISTA29T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.56 + - fc00::71 + interfaces: + Loopback0: + ipv4: 100.1.0.29/32 + ipv6: 2064:100:0:1d::/128 + Ethernet1: + ipv4: 10.0.0.57/31 + ipv6: fc00::72/126 + bp_interface: + ipv4: 10.10.246.30/24 + ipv6: fc0a::1e/64 + ARISTA30T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.58 + - fc00::75 + interfaces: + Loopback0: + ipv4: 100.1.0.30/32 + ipv6: 2064:100:0:1e::/128 + Ethernet1: + ipv4: 10.0.0.59/31 + ipv6: fc00::76/126 + bp_interface: + ipv4: 10.10.246.31/24 + ipv6: fc0a::1f/64 + ARISTA31T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.60 + - fc00::79 + interfaces: + Loopback0: + ipv4: 100.1.0.31/32 + ipv6: 2064:100:0:1f::/128 + Ethernet1: + ipv4: 10.0.0.61/31 + ipv6: fc00::7a/126 + bp_interface: + ipv4: 10.10.246.32/24 + ipv6: fc0a::20/64 + ARISTA32T1: + properties: + - common + bgp: + asn: 64600 + peers: + 65100: + - 10.0.0.62 + - fc00::7d + interfaces: + Loopback0: + ipv4: 100.1.0.32/32 + ipv6: 2064:100:0:20::/128 + Ethernet1: + ipv4: 10.0.0.63/31 + ipv6: fc00::7e/126 + bp_interface: + ipv4: 10.10.246.33/24 + ipv6: fc0a::21/64 + ARISTA01PT0: + properties: + - common + bgp: + asn: 65100 + peers: + 65100: + - 10.0.0.64 + - fc00::81 + interfaces: + Loopback0: + ipv4: 100.1.0.33/32 + ipv6: 2064:100:0:21::/128 + Ethernet1: + ipv4: 10.0.0.65/31 + ipv6: fc00::82/126 + bp_interface: + ipv4: 10.10.246.34/24 + ipv6: fc0a::22/64 + ARISTA02PT0: + properties: + - common + bgp: + asn: 65100 + peers: + 65100: + - 10.0.0.66 + - fc00::85 + interfaces: + Loopback0: + ipv4: 100.1.0.34/32 + ipv6: 2064:100:0:22::/128 + Ethernet1: + ipv4: 10.0.0.67/31 + ipv6: fc00::86/126 + bp_interface: + ipv4: 10.10.246.35/24 + ipv6: fc0a::23/64 diff --git a/ansible/vars/topo_t1-32-lag.yml b/ansible/vars/topo_t1-32-lag.yml index 18b48281ea8..96c7264bd65 100644 --- a/ansible/vars/topo_t1-32-lag.yml +++ b/ansible/vars/topo_t1-32-lag.yml @@ -98,7 +98,7 @@ topology: vm_offset: 22 ARISTA20T0: vlans: - - 29 + - 30 vm_offset: 23 configuration_properties: diff --git a/ansible/vars/topo_t1-isolated-d128.yml b/ansible/vars/topo_t1-isolated-d128.yml index 1873728bd2e..536e06a7c1c 100644 --- a/ansible/vars/topo_t1-isolated-d128.yml +++ b/ansible/vars/topo_t1-isolated-d128.yml @@ -533,6 +533,7 @@ configuration: ARISTA01T0: properties: - common + - tor bgp: asn: 64001 peers: @@ -542,16 +543,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.1/32 - ipv6: 2064:100::1/128 + ipv6: 2064:100:0:1::/128 Ethernet1: ipv4: 10.0.0.1/31 ipv6: fc00::2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.2/24 ipv6: fc0a::2/64 ARISTA02T0: properties: - common + - tor bgp: asn: 64002 peers: @@ -561,16 +563,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.2/32 - ipv6: 2064:100::2/128 + ipv6: 2064:100:0:2::/128 Ethernet1: ipv4: 10.0.0.3/31 ipv6: fc00::6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.3/24 ipv6: fc0a::3/64 ARISTA03T0: properties: - common + - tor bgp: asn: 64003 peers: @@ -580,16 +583,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.3/32 - ipv6: 2064:100::3/128 + ipv6: 2064:100:0:3::/128 Ethernet1: ipv4: 10.0.0.5/31 ipv6: fc00::a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.4/24 ipv6: fc0a::4/64 ARISTA04T0: properties: - common + - tor bgp: asn: 64004 peers: @@ -599,16 +603,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.4/32 - ipv6: 2064:100::4/128 + ipv6: 2064:100:0:4::/128 Ethernet1: ipv4: 10.0.0.7/31 ipv6: fc00::e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.5/24 ipv6: fc0a::5/64 ARISTA05T0: properties: - common + - tor bgp: asn: 64005 peers: @@ -618,16 +623,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.5/32 - ipv6: 2064:100::5/128 + ipv6: 2064:100:0:5::/128 Ethernet1: ipv4: 10.0.0.9/31 ipv6: fc00::12/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.6/24 ipv6: fc0a::6/64 ARISTA06T0: properties: - common + - tor bgp: asn: 64006 peers: @@ -637,16 +643,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.6/32 - ipv6: 2064:100::6/128 + ipv6: 2064:100:0:6::/128 Ethernet1: ipv4: 10.0.0.11/31 ipv6: fc00::16/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.7/24 ipv6: fc0a::7/64 ARISTA07T0: properties: - common + - tor bgp: asn: 64007 peers: @@ -656,16 +663,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.7/32 - ipv6: 2064:100::7/128 + ipv6: 2064:100:0:7::/128 Ethernet1: ipv4: 10.0.0.13/31 ipv6: fc00::1a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.8/24 ipv6: fc0a::8/64 ARISTA08T0: properties: - common + - tor bgp: asn: 64008 peers: @@ -675,16 +683,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.8/32 - ipv6: 2064:100::8/128 + ipv6: 2064:100:0:8::/128 Ethernet1: ipv4: 10.0.0.15/31 ipv6: fc00::1e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.9/24 ipv6: fc0a::9/64 ARISTA09T0: properties: - common + - tor bgp: asn: 64009 peers: @@ -694,16 +703,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.9/32 - ipv6: 2064:100::9/128 + ipv6: 2064:100:0:9::/128 Ethernet1: ipv4: 10.0.0.17/31 ipv6: fc00::22/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.10/24 ipv6: fc0a::a/64 ARISTA10T0: properties: - common + - tor bgp: asn: 64010 peers: @@ -713,16 +723,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.10/32 - ipv6: 2064:100::a/128 + ipv6: 2064:100:0:a::/128 Ethernet1: ipv4: 10.0.0.19/31 ipv6: fc00::26/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.11/24 ipv6: fc0a::b/64 ARISTA11T0: properties: - common + - tor bgp: asn: 64011 peers: @@ -732,16 +743,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.11/32 - ipv6: 2064:100::b/128 + ipv6: 2064:100:0:b::/128 Ethernet1: ipv4: 10.0.0.21/31 ipv6: fc00::2a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.12/24 ipv6: fc0a::c/64 ARISTA12T0: properties: - common + - tor bgp: asn: 64012 peers: @@ -751,16 +763,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.12/32 - ipv6: 2064:100::c/128 + ipv6: 2064:100:0:c::/128 Ethernet1: ipv4: 10.0.0.23/31 ipv6: fc00::2e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.13/24 ipv6: fc0a::d/64 ARISTA13T0: properties: - common + - tor bgp: asn: 64013 peers: @@ -770,16 +783,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.13/32 - ipv6: 2064:100::d/128 + ipv6: 2064:100:0:d::/128 Ethernet1: ipv4: 10.0.0.25/31 ipv6: fc00::32/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.14/24 ipv6: fc0a::e/64 ARISTA14T0: properties: - common + - tor bgp: asn: 64014 peers: @@ -789,16 +803,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.14/32 - ipv6: 2064:100::e/128 + ipv6: 2064:100:0:e::/128 Ethernet1: ipv4: 10.0.0.27/31 ipv6: fc00::36/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.15/24 ipv6: fc0a::f/64 ARISTA15T0: properties: - common + - tor bgp: asn: 64015 peers: @@ -808,16 +823,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.15/32 - ipv6: 2064:100::f/128 + ipv6: 2064:100:0:f::/128 Ethernet1: ipv4: 10.0.0.29/31 ipv6: fc00::3a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.16/24 ipv6: fc0a::10/64 ARISTA16T0: properties: - common + - tor bgp: asn: 64016 peers: @@ -827,16 +843,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.16/32 - ipv6: 2064:100::10/128 + ipv6: 2064:100:0:10::/128 Ethernet1: ipv4: 10.0.0.31/31 ipv6: fc00::3e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.17/24 ipv6: fc0a::11/64 ARISTA17T0: properties: - common + - tor bgp: asn: 64017 peers: @@ -846,16 +863,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.17/32 - ipv6: 2064:100::11/128 + ipv6: 2064:100:0:11::/128 Ethernet1: ipv4: 10.0.0.33/31 ipv6: fc00::42/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.18/24 ipv6: fc0a::12/64 ARISTA18T0: properties: - common + - tor bgp: asn: 64018 peers: @@ -865,16 +883,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.18/32 - ipv6: 2064:100::12/128 + ipv6: 2064:100:0:12::/128 Ethernet1: ipv4: 10.0.0.35/31 ipv6: fc00::46/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.19/24 ipv6: fc0a::13/64 ARISTA19T0: properties: - common + - tor bgp: asn: 64019 peers: @@ -884,16 +903,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.19/32 - ipv6: 2064:100::13/128 + ipv6: 2064:100:0:13::/128 Ethernet1: ipv4: 10.0.0.37/31 ipv6: fc00::4a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.20/24 ipv6: fc0a::14/64 ARISTA20T0: properties: - common + - tor bgp: asn: 64020 peers: @@ -903,16 +923,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.20/32 - ipv6: 2064:100::14/128 + ipv6: 2064:100:0:14::/128 Ethernet1: ipv4: 10.0.0.39/31 ipv6: fc00::4e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.21/24 ipv6: fc0a::15/64 ARISTA21T0: properties: - common + - tor bgp: asn: 64021 peers: @@ -922,16 +943,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.21/32 - ipv6: 2064:100::15/128 + ipv6: 2064:100:0:15::/128 Ethernet1: ipv4: 10.0.0.41/31 ipv6: fc00::52/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.22/24 ipv6: fc0a::16/64 ARISTA22T0: properties: - common + - tor bgp: asn: 64022 peers: @@ -941,16 +963,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.22/32 - ipv6: 2064:100::16/128 + ipv6: 2064:100:0:16::/128 Ethernet1: ipv4: 10.0.0.43/31 ipv6: fc00::56/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.23/24 ipv6: fc0a::17/64 ARISTA23T0: properties: - common + - tor bgp: asn: 64023 peers: @@ -960,16 +983,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.23/32 - ipv6: 2064:100::17/128 + ipv6: 2064:100:0:17::/128 Ethernet1: ipv4: 10.0.0.45/31 ipv6: fc00::5a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.24/24 ipv6: fc0a::18/64 ARISTA24T0: properties: - common + - tor bgp: asn: 64024 peers: @@ -979,16 +1003,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.24/32 - ipv6: 2064:100::18/128 + ipv6: 2064:100:0:18::/128 Ethernet1: ipv4: 10.0.0.47/31 ipv6: fc00::5e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.25/24 ipv6: fc0a::19/64 ARISTA25T0: properties: - common + - tor bgp: asn: 64025 peers: @@ -998,16 +1023,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.25/32 - ipv6: 2064:100::19/128 + ipv6: 2064:100:0:19::/128 Ethernet1: ipv4: 10.0.0.49/31 ipv6: fc00::62/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.26/24 ipv6: fc0a::1a/64 ARISTA26T0: properties: - common + - tor bgp: asn: 64026 peers: @@ -1017,16 +1043,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.26/32 - ipv6: 2064:100::1a/128 + ipv6: 2064:100:0:1a::/128 Ethernet1: ipv4: 10.0.0.51/31 ipv6: fc00::66/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.27/24 ipv6: fc0a::1b/64 ARISTA27T0: properties: - common + - tor bgp: asn: 64027 peers: @@ -1036,16 +1063,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.27/32 - ipv6: 2064:100::1b/128 + ipv6: 2064:100:0:1b::/128 Ethernet1: ipv4: 10.0.0.53/31 ipv6: fc00::6a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.28/24 ipv6: fc0a::1c/64 ARISTA28T0: properties: - common + - tor bgp: asn: 64028 peers: @@ -1055,16 +1083,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.28/32 - ipv6: 2064:100::1c/128 + ipv6: 2064:100:0:1c::/128 Ethernet1: ipv4: 10.0.0.55/31 ipv6: fc00::6e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.29/24 ipv6: fc0a::1d/64 ARISTA29T0: properties: - common + - tor bgp: asn: 64029 peers: @@ -1074,16 +1103,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.29/32 - ipv6: 2064:100::1d/128 + ipv6: 2064:100:0:1d::/128 Ethernet1: ipv4: 10.0.0.57/31 ipv6: fc00::72/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.30/24 ipv6: fc0a::1e/64 ARISTA30T0: properties: - common + - tor bgp: asn: 64030 peers: @@ -1093,16 +1123,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.30/32 - ipv6: 2064:100::1e/128 + ipv6: 2064:100:0:1e::/128 Ethernet1: ipv4: 10.0.0.59/31 ipv6: fc00::76/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.31/24 ipv6: fc0a::1f/64 ARISTA31T0: properties: - common + - tor bgp: asn: 64031 peers: @@ -1112,16 +1143,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.31/32 - ipv6: 2064:100::1f/128 + ipv6: 2064:100:0:1f::/128 Ethernet1: ipv4: 10.0.0.61/31 ipv6: fc00::7a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.32/24 ipv6: fc0a::20/64 ARISTA32T0: properties: - common + - tor bgp: asn: 64032 peers: @@ -1131,16 +1163,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.32/32 - ipv6: 2064:100::20/128 + ipv6: 2064:100:0:20::/128 Ethernet1: ipv4: 10.0.0.63/31 ipv6: fc00::7e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.33/24 ipv6: fc0a::21/64 ARISTA33T0: properties: - common + - tor bgp: asn: 64033 peers: @@ -1150,16 +1183,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.33/32 - ipv6: 2064:100::21/128 + ipv6: 2064:100:0:21::/128 Ethernet1: ipv4: 10.0.0.65/31 ipv6: fc00::82/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.34/24 ipv6: fc0a::22/64 ARISTA34T0: properties: - common + - tor bgp: asn: 64034 peers: @@ -1169,16 +1203,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.34/32 - ipv6: 2064:100::22/128 + ipv6: 2064:100:0:22::/128 Ethernet1: ipv4: 10.0.0.67/31 ipv6: fc00::86/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.35/24 ipv6: fc0a::23/64 ARISTA35T0: properties: - common + - tor bgp: asn: 64035 peers: @@ -1188,16 +1223,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.35/32 - ipv6: 2064:100::23/128 + ipv6: 2064:100:0:23::/128 Ethernet1: ipv4: 10.0.0.69/31 ipv6: fc00::8a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.36/24 ipv6: fc0a::24/64 ARISTA36T0: properties: - common + - tor bgp: asn: 64036 peers: @@ -1207,16 +1243,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.36/32 - ipv6: 2064:100::24/128 + ipv6: 2064:100:0:24::/128 Ethernet1: ipv4: 10.0.0.71/31 ipv6: fc00::8e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.37/24 ipv6: fc0a::25/64 ARISTA37T0: properties: - common + - tor bgp: asn: 64037 peers: @@ -1226,16 +1263,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.37/32 - ipv6: 2064:100::25/128 + ipv6: 2064:100:0:25::/128 Ethernet1: ipv4: 10.0.0.73/31 ipv6: fc00::92/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.38/24 ipv6: fc0a::26/64 ARISTA38T0: properties: - common + - tor bgp: asn: 64038 peers: @@ -1245,16 +1283,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.38/32 - ipv6: 2064:100::26/128 + ipv6: 2064:100:0:26::/128 Ethernet1: ipv4: 10.0.0.75/31 ipv6: fc00::96/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.39/24 ipv6: fc0a::27/64 ARISTA39T0: properties: - common + - tor bgp: asn: 64039 peers: @@ -1264,16 +1303,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.39/32 - ipv6: 2064:100::27/128 + ipv6: 2064:100:0:27::/128 Ethernet1: ipv4: 10.0.0.77/31 ipv6: fc00::9a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.40/24 ipv6: fc0a::28/64 ARISTA40T0: properties: - common + - tor bgp: asn: 64040 peers: @@ -1283,16 +1323,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.40/32 - ipv6: 2064:100::28/128 + ipv6: 2064:100:0:28::/128 Ethernet1: ipv4: 10.0.0.79/31 ipv6: fc00::9e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.41/24 ipv6: fc0a::29/64 ARISTA41T0: properties: - common + - tor bgp: asn: 64041 peers: @@ -1302,16 +1343,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.41/32 - ipv6: 2064:100::29/128 + ipv6: 2064:100:0:29::/128 Ethernet1: ipv4: 10.0.0.81/31 ipv6: fc00::a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.42/24 ipv6: fc0a::2a/64 ARISTA42T0: properties: - common + - tor bgp: asn: 64042 peers: @@ -1321,16 +1363,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.42/32 - ipv6: 2064:100::2a/128 + ipv6: 2064:100:0:2a::/128 Ethernet1: ipv4: 10.0.0.83/31 ipv6: fc00::a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.43/24 ipv6: fc0a::2b/64 ARISTA43T0: properties: - common + - tor bgp: asn: 64043 peers: @@ -1340,16 +1383,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.43/32 - ipv6: 2064:100::2b/128 + ipv6: 2064:100:0:2b::/128 Ethernet1: ipv4: 10.0.0.85/31 ipv6: fc00::aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.44/24 ipv6: fc0a::2c/64 ARISTA44T0: properties: - common + - tor bgp: asn: 64044 peers: @@ -1359,16 +1403,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.44/32 - ipv6: 2064:100::2c/128 + ipv6: 2064:100:0:2c::/128 Ethernet1: ipv4: 10.0.0.87/31 ipv6: fc00::ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.45/24 ipv6: fc0a::2d/64 ARISTA45T0: properties: - common + - tor bgp: asn: 64045 peers: @@ -1378,16 +1423,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.45/32 - ipv6: 2064:100::2d/128 + ipv6: 2064:100:0:2d::/128 Ethernet1: ipv4: 10.0.0.89/31 ipv6: fc00::b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.46/24 ipv6: fc0a::2e/64 ARISTA46T0: properties: - common + - tor bgp: asn: 64046 peers: @@ -1397,16 +1443,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.46/32 - ipv6: 2064:100::2e/128 + ipv6: 2064:100:0:2e::/128 Ethernet1: ipv4: 10.0.0.91/31 ipv6: fc00::b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.47/24 ipv6: fc0a::2f/64 ARISTA47T0: properties: - common + - tor bgp: asn: 64047 peers: @@ -1416,16 +1463,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.47/32 - ipv6: 2064:100::2f/128 + ipv6: 2064:100:0:2f::/128 Ethernet1: ipv4: 10.0.0.93/31 ipv6: fc00::ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.48/24 ipv6: fc0a::30/64 ARISTA48T0: properties: - common + - tor bgp: asn: 64048 peers: @@ -1435,16 +1483,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.48/32 - ipv6: 2064:100::30/128 + ipv6: 2064:100:0:30::/128 Ethernet1: ipv4: 10.0.0.95/31 ipv6: fc00::be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.49/24 ipv6: fc0a::31/64 ARISTA49T0: properties: - common + - tor bgp: asn: 64049 peers: @@ -1454,16 +1503,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.49/32 - ipv6: 2064:100::31/128 + ipv6: 2064:100:0:31::/128 Ethernet1: ipv4: 10.0.0.97/31 ipv6: fc00::c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.50/24 ipv6: fc0a::32/64 ARISTA50T0: properties: - common + - tor bgp: asn: 64050 peers: @@ -1473,16 +1523,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.50/32 - ipv6: 2064:100::32/128 + ipv6: 2064:100:0:32::/128 Ethernet1: ipv4: 10.0.0.99/31 ipv6: fc00::c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.51/24 ipv6: fc0a::33/64 ARISTA51T0: properties: - common + - tor bgp: asn: 64051 peers: @@ -1492,16 +1543,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.51/32 - ipv6: 2064:100::33/128 + ipv6: 2064:100:0:33::/128 Ethernet1: ipv4: 10.0.0.101/31 ipv6: fc00::ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.52/24 ipv6: fc0a::34/64 ARISTA52T0: properties: - common + - tor bgp: asn: 64052 peers: @@ -1511,16 +1563,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.52/32 - ipv6: 2064:100::34/128 + ipv6: 2064:100:0:34::/128 Ethernet1: ipv4: 10.0.0.103/31 ipv6: fc00::ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.53/24 ipv6: fc0a::35/64 ARISTA53T0: properties: - common + - tor bgp: asn: 64053 peers: @@ -1530,16 +1583,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.53/32 - ipv6: 2064:100::35/128 + ipv6: 2064:100:0:35::/128 Ethernet1: ipv4: 10.0.0.105/31 ipv6: fc00::d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.54/24 ipv6: fc0a::36/64 ARISTA54T0: properties: - common + - tor bgp: asn: 64054 peers: @@ -1549,16 +1603,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.54/32 - ipv6: 2064:100::36/128 + ipv6: 2064:100:0:36::/128 Ethernet1: ipv4: 10.0.0.107/31 ipv6: fc00::d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.55/24 ipv6: fc0a::37/64 ARISTA55T0: properties: - common + - tor bgp: asn: 64055 peers: @@ -1568,16 +1623,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.55/32 - ipv6: 2064:100::37/128 + ipv6: 2064:100:0:37::/128 Ethernet1: ipv4: 10.0.0.109/31 ipv6: fc00::da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.56/24 ipv6: fc0a::38/64 ARISTA56T0: properties: - common + - tor bgp: asn: 64056 peers: @@ -1587,16 +1643,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.56/32 - ipv6: 2064:100::38/128 + ipv6: 2064:100:0:38::/128 Ethernet1: ipv4: 10.0.0.111/31 ipv6: fc00::de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.57/24 ipv6: fc0a::39/64 ARISTA57T0: properties: - common + - tor bgp: asn: 64057 peers: @@ -1606,16 +1663,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.57/32 - ipv6: 2064:100::39/128 + ipv6: 2064:100:0:39::/128 Ethernet1: ipv4: 10.0.0.113/31 ipv6: fc00::e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.58/24 ipv6: fc0a::3a/64 ARISTA58T0: properties: - common + - tor bgp: asn: 64058 peers: @@ -1625,16 +1683,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.58/32 - ipv6: 2064:100::3a/128 + ipv6: 2064:100:0:3a::/128 Ethernet1: ipv4: 10.0.0.115/31 ipv6: fc00::e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.59/24 ipv6: fc0a::3b/64 ARISTA59T0: properties: - common + - tor bgp: asn: 64059 peers: @@ -1644,16 +1703,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.59/32 - ipv6: 2064:100::3b/128 + ipv6: 2064:100:0:3b::/128 Ethernet1: ipv4: 10.0.0.117/31 ipv6: fc00::ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.60/24 ipv6: fc0a::3c/64 ARISTA60T0: properties: - common + - tor bgp: asn: 64060 peers: @@ -1663,16 +1723,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.60/32 - ipv6: 2064:100::3c/128 + ipv6: 2064:100:0:3c::/128 Ethernet1: ipv4: 10.0.0.119/31 ipv6: fc00::ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.61/24 ipv6: fc0a::3d/64 ARISTA61T0: properties: - common + - tor bgp: asn: 64061 peers: @@ -1682,16 +1743,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.61/32 - ipv6: 2064:100::3d/128 + ipv6: 2064:100:0:3d::/128 Ethernet1: ipv4: 10.0.0.121/31 ipv6: fc00::f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.62/24 ipv6: fc0a::3e/64 ARISTA62T0: properties: - common + - tor bgp: asn: 64062 peers: @@ -1701,16 +1763,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.62/32 - ipv6: 2064:100::3e/128 + ipv6: 2064:100:0:3e::/128 Ethernet1: ipv4: 10.0.0.123/31 ipv6: fc00::f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.63/24 ipv6: fc0a::3f/64 ARISTA63T0: properties: - common + - tor bgp: asn: 64063 peers: @@ -1720,16 +1783,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.63/32 - ipv6: 2064:100::3f/128 + ipv6: 2064:100:0:3f::/128 Ethernet1: ipv4: 10.0.0.125/31 ipv6: fc00::fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.64/24 ipv6: fc0a::40/64 ARISTA64T0: properties: - common + - tor bgp: asn: 64064 peers: @@ -1739,16 +1803,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.64/32 - ipv6: 2064:100::40/128 + ipv6: 2064:100:0:40::/128 Ethernet1: ipv4: 10.0.0.127/31 ipv6: fc00::fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.65/24 ipv6: fc0a::41/64 ARISTA65T0: properties: - common + - tor bgp: asn: 64065 peers: @@ -1758,16 +1823,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.65/32 - ipv6: 2064:100::41/128 + ipv6: 2064:100:0:41::/128 Ethernet1: ipv4: 10.0.0.129/31 ipv6: fc00::102/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.66/24 ipv6: fc0a::42/64 ARISTA66T0: properties: - common + - tor bgp: asn: 64066 peers: @@ -1777,16 +1843,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.66/32 - ipv6: 2064:100::42/128 + ipv6: 2064:100:0:42::/128 Ethernet1: ipv4: 10.0.0.131/31 ipv6: fc00::106/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.67/24 ipv6: fc0a::43/64 ARISTA67T0: properties: - common + - tor bgp: asn: 64067 peers: @@ -1796,16 +1863,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.67/32 - ipv6: 2064:100::43/128 + ipv6: 2064:100:0:43::/128 Ethernet1: ipv4: 10.0.0.133/31 ipv6: fc00::10a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.68/24 ipv6: fc0a::44/64 ARISTA68T0: properties: - common + - tor bgp: asn: 64068 peers: @@ -1815,16 +1883,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.68/32 - ipv6: 2064:100::44/128 + ipv6: 2064:100:0:44::/128 Ethernet1: ipv4: 10.0.0.135/31 ipv6: fc00::10e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.69/24 ipv6: fc0a::45/64 ARISTA69T0: properties: - common + - tor bgp: asn: 64069 peers: @@ -1834,16 +1903,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.69/32 - ipv6: 2064:100::45/128 + ipv6: 2064:100:0:45::/128 Ethernet1: ipv4: 10.0.0.137/31 ipv6: fc00::112/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.70/24 ipv6: fc0a::46/64 ARISTA70T0: properties: - common + - tor bgp: asn: 64070 peers: @@ -1853,16 +1923,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.70/32 - ipv6: 2064:100::46/128 + ipv6: 2064:100:0:46::/128 Ethernet1: ipv4: 10.0.0.139/31 ipv6: fc00::116/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.71/24 ipv6: fc0a::47/64 ARISTA71T0: properties: - common + - tor bgp: asn: 64071 peers: @@ -1872,16 +1943,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.71/32 - ipv6: 2064:100::47/128 + ipv6: 2064:100:0:47::/128 Ethernet1: ipv4: 10.0.0.141/31 ipv6: fc00::11a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.72/24 ipv6: fc0a::48/64 ARISTA72T0: properties: - common + - tor bgp: asn: 64072 peers: @@ -1891,16 +1963,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.72/32 - ipv6: 2064:100::48/128 + ipv6: 2064:100:0:48::/128 Ethernet1: ipv4: 10.0.0.143/31 ipv6: fc00::11e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.73/24 ipv6: fc0a::49/64 ARISTA73T0: properties: - common + - tor bgp: asn: 64073 peers: @@ -1910,16 +1983,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.73/32 - ipv6: 2064:100::49/128 + ipv6: 2064:100:0:49::/128 Ethernet1: ipv4: 10.0.0.145/31 ipv6: fc00::122/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.74/24 ipv6: fc0a::4a/64 ARISTA74T0: properties: - common + - tor bgp: asn: 64074 peers: @@ -1929,16 +2003,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.74/32 - ipv6: 2064:100::4a/128 + ipv6: 2064:100:0:4a::/128 Ethernet1: ipv4: 10.0.0.147/31 ipv6: fc00::126/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.75/24 ipv6: fc0a::4b/64 ARISTA75T0: properties: - common + - tor bgp: asn: 64075 peers: @@ -1948,16 +2023,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.75/32 - ipv6: 2064:100::4b/128 + ipv6: 2064:100:0:4b::/128 Ethernet1: ipv4: 10.0.0.149/31 ipv6: fc00::12a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.76/24 ipv6: fc0a::4c/64 ARISTA76T0: properties: - common + - tor bgp: asn: 64076 peers: @@ -1967,16 +2043,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.76/32 - ipv6: 2064:100::4c/128 + ipv6: 2064:100:0:4c::/128 Ethernet1: ipv4: 10.0.0.151/31 ipv6: fc00::12e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.77/24 ipv6: fc0a::4d/64 ARISTA77T0: properties: - common + - tor bgp: asn: 64077 peers: @@ -1986,16 +2063,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.77/32 - ipv6: 2064:100::4d/128 + ipv6: 2064:100:0:4d::/128 Ethernet1: ipv4: 10.0.0.153/31 ipv6: fc00::132/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.78/24 ipv6: fc0a::4e/64 ARISTA78T0: properties: - common + - tor bgp: asn: 64078 peers: @@ -2005,16 +2083,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.78/32 - ipv6: 2064:100::4e/128 + ipv6: 2064:100:0:4e::/128 Ethernet1: ipv4: 10.0.0.155/31 ipv6: fc00::136/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.79/24 ipv6: fc0a::4f/64 ARISTA79T0: properties: - common + - tor bgp: asn: 64079 peers: @@ -2024,16 +2103,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.79/32 - ipv6: 2064:100::4f/128 + ipv6: 2064:100:0:4f::/128 Ethernet1: ipv4: 10.0.0.157/31 ipv6: fc00::13a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.80/24 ipv6: fc0a::50/64 ARISTA80T0: properties: - common + - tor bgp: asn: 64080 peers: @@ -2043,16 +2123,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.80/32 - ipv6: 2064:100::50/128 + ipv6: 2064:100:0:50::/128 Ethernet1: ipv4: 10.0.0.159/31 ipv6: fc00::13e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.81/24 ipv6: fc0a::51/64 ARISTA81T0: properties: - common + - tor bgp: asn: 64081 peers: @@ -2062,16 +2143,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.81/32 - ipv6: 2064:100::51/128 + ipv6: 2064:100:0:51::/128 Ethernet1: ipv4: 10.0.0.161/31 ipv6: fc00::142/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.82/24 ipv6: fc0a::52/64 ARISTA82T0: properties: - common + - tor bgp: asn: 64082 peers: @@ -2081,16 +2163,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.82/32 - ipv6: 2064:100::52/128 + ipv6: 2064:100:0:52::/128 Ethernet1: ipv4: 10.0.0.163/31 ipv6: fc00::146/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.83/24 ipv6: fc0a::53/64 ARISTA83T0: properties: - common + - tor bgp: asn: 64083 peers: @@ -2100,16 +2183,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.83/32 - ipv6: 2064:100::53/128 + ipv6: 2064:100:0:53::/128 Ethernet1: ipv4: 10.0.0.165/31 ipv6: fc00::14a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.84/24 ipv6: fc0a::54/64 ARISTA84T0: properties: - common + - tor bgp: asn: 64084 peers: @@ -2119,16 +2203,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.84/32 - ipv6: 2064:100::54/128 + ipv6: 2064:100:0:54::/128 Ethernet1: ipv4: 10.0.0.167/31 ipv6: fc00::14e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.85/24 ipv6: fc0a::55/64 ARISTA85T0: properties: - common + - tor bgp: asn: 64085 peers: @@ -2138,16 +2223,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.85/32 - ipv6: 2064:100::55/128 + ipv6: 2064:100:0:55::/128 Ethernet1: ipv4: 10.0.0.169/31 ipv6: fc00::152/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.86/24 ipv6: fc0a::56/64 ARISTA86T0: properties: - common + - tor bgp: asn: 64086 peers: @@ -2157,16 +2243,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.86/32 - ipv6: 2064:100::56/128 + ipv6: 2064:100:0:56::/128 Ethernet1: ipv4: 10.0.0.171/31 ipv6: fc00::156/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.87/24 ipv6: fc0a::57/64 ARISTA87T0: properties: - common + - tor bgp: asn: 64087 peers: @@ -2176,16 +2263,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.87/32 - ipv6: 2064:100::57/128 + ipv6: 2064:100:0:57::/128 Ethernet1: ipv4: 10.0.0.173/31 ipv6: fc00::15a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.88/24 ipv6: fc0a::58/64 ARISTA88T0: properties: - common + - tor bgp: asn: 64088 peers: @@ -2195,16 +2283,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.88/32 - ipv6: 2064:100::58/128 + ipv6: 2064:100:0:58::/128 Ethernet1: ipv4: 10.0.0.175/31 ipv6: fc00::15e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.89/24 ipv6: fc0a::59/64 ARISTA89T0: properties: - common + - tor bgp: asn: 64089 peers: @@ -2214,16 +2303,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.89/32 - ipv6: 2064:100::59/128 + ipv6: 2064:100:0:59::/128 Ethernet1: ipv4: 10.0.0.177/31 ipv6: fc00::162/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.90/24 ipv6: fc0a::5a/64 ARISTA90T0: properties: - common + - tor bgp: asn: 64090 peers: @@ -2233,16 +2323,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.90/32 - ipv6: 2064:100::5a/128 + ipv6: 2064:100:0:5a::/128 Ethernet1: ipv4: 10.0.0.179/31 ipv6: fc00::166/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.91/24 ipv6: fc0a::5b/64 ARISTA91T0: properties: - common + - tor bgp: asn: 64091 peers: @@ -2252,16 +2343,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.91/32 - ipv6: 2064:100::5b/128 + ipv6: 2064:100:0:5b::/128 Ethernet1: ipv4: 10.0.0.181/31 ipv6: fc00::16a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.92/24 ipv6: fc0a::5c/64 ARISTA92T0: properties: - common + - tor bgp: asn: 64092 peers: @@ -2271,16 +2363,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.92/32 - ipv6: 2064:100::5c/128 + ipv6: 2064:100:0:5c::/128 Ethernet1: ipv4: 10.0.0.183/31 ipv6: fc00::16e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.93/24 ipv6: fc0a::5d/64 ARISTA93T0: properties: - common + - tor bgp: asn: 64093 peers: @@ -2290,16 +2383,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.93/32 - ipv6: 2064:100::5d/128 + ipv6: 2064:100:0:5d::/128 Ethernet1: ipv4: 10.0.0.185/31 ipv6: fc00::172/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.94/24 ipv6: fc0a::5e/64 ARISTA94T0: properties: - common + - tor bgp: asn: 64094 peers: @@ -2309,16 +2403,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.94/32 - ipv6: 2064:100::5e/128 + ipv6: 2064:100:0:5e::/128 Ethernet1: ipv4: 10.0.0.187/31 ipv6: fc00::176/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.95/24 ipv6: fc0a::5f/64 ARISTA95T0: properties: - common + - tor bgp: asn: 64095 peers: @@ -2328,16 +2423,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.95/32 - ipv6: 2064:100::5f/128 + ipv6: 2064:100:0:5f::/128 Ethernet1: ipv4: 10.0.0.189/31 ipv6: fc00::17a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.96/24 ipv6: fc0a::60/64 ARISTA96T0: properties: - common + - tor bgp: asn: 64096 peers: @@ -2347,16 +2443,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.96/32 - ipv6: 2064:100::60/128 + ipv6: 2064:100:0:60::/128 Ethernet1: ipv4: 10.0.0.191/31 ipv6: fc00::17e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.97/24 ipv6: fc0a::61/64 ARISTA97T0: properties: - common + - tor bgp: asn: 64097 peers: @@ -2366,16 +2463,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.97/32 - ipv6: 2064:100::61/128 + ipv6: 2064:100:0:61::/128 Ethernet1: ipv4: 10.0.0.193/31 ipv6: fc00::182/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.98/24 ipv6: fc0a::62/64 ARISTA98T0: properties: - common + - tor bgp: asn: 64098 peers: @@ -2385,16 +2483,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.98/32 - ipv6: 2064:100::62/128 + ipv6: 2064:100:0:62::/128 Ethernet1: ipv4: 10.0.0.195/31 ipv6: fc00::186/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.99/24 ipv6: fc0a::63/64 ARISTA99T0: properties: - common + - tor bgp: asn: 64099 peers: @@ -2404,16 +2503,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.99/32 - ipv6: 2064:100::63/128 + ipv6: 2064:100:0:63::/128 Ethernet1: ipv4: 10.0.0.197/31 ipv6: fc00::18a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.100/24 ipv6: fc0a::64/64 ARISTA100T0: properties: - common + - tor bgp: asn: 64100 peers: @@ -2423,16 +2523,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.100/32 - ipv6: 2064:100::64/128 + ipv6: 2064:100:0:64::/128 Ethernet1: ipv4: 10.0.0.199/31 ipv6: fc00::18e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.101/24 ipv6: fc0a::65/64 ARISTA101T0: properties: - common + - tor bgp: asn: 64101 peers: @@ -2442,16 +2543,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.101/32 - ipv6: 2064:100::65/128 + ipv6: 2064:100:0:65::/128 Ethernet1: ipv4: 10.0.0.201/31 ipv6: fc00::192/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.102/24 ipv6: fc0a::66/64 ARISTA102T0: properties: - common + - tor bgp: asn: 64102 peers: @@ -2461,16 +2563,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.102/32 - ipv6: 2064:100::66/128 + ipv6: 2064:100:0:66::/128 Ethernet1: ipv4: 10.0.0.203/31 ipv6: fc00::196/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.103/24 ipv6: fc0a::67/64 ARISTA103T0: properties: - common + - tor bgp: asn: 64103 peers: @@ -2480,16 +2583,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.103/32 - ipv6: 2064:100::67/128 + ipv6: 2064:100:0:67::/128 Ethernet1: ipv4: 10.0.0.205/31 ipv6: fc00::19a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.104/24 ipv6: fc0a::68/64 ARISTA104T0: properties: - common + - tor bgp: asn: 64104 peers: @@ -2499,16 +2603,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.104/32 - ipv6: 2064:100::68/128 + ipv6: 2064:100:0:68::/128 Ethernet1: ipv4: 10.0.0.207/31 ipv6: fc00::19e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.105/24 ipv6: fc0a::69/64 ARISTA105T0: properties: - common + - tor bgp: asn: 64105 peers: @@ -2518,16 +2623,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.105/32 - ipv6: 2064:100::69/128 + ipv6: 2064:100:0:69::/128 Ethernet1: ipv4: 10.0.0.209/31 ipv6: fc00::1a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.106/24 ipv6: fc0a::6a/64 ARISTA106T0: properties: - common + - tor bgp: asn: 64106 peers: @@ -2537,16 +2643,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.106/32 - ipv6: 2064:100::6a/128 + ipv6: 2064:100:0:6a::/128 Ethernet1: ipv4: 10.0.0.211/31 ipv6: fc00::1a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.107/24 ipv6: fc0a::6b/64 ARISTA107T0: properties: - common + - tor bgp: asn: 64107 peers: @@ -2556,16 +2663,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.107/32 - ipv6: 2064:100::6b/128 + ipv6: 2064:100:0:6b::/128 Ethernet1: ipv4: 10.0.0.213/31 ipv6: fc00::1aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.108/24 ipv6: fc0a::6c/64 ARISTA108T0: properties: - common + - tor bgp: asn: 64108 peers: @@ -2575,16 +2683,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.108/32 - ipv6: 2064:100::6c/128 + ipv6: 2064:100:0:6c::/128 Ethernet1: ipv4: 10.0.0.215/31 ipv6: fc00::1ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.109/24 ipv6: fc0a::6d/64 ARISTA109T0: properties: - common + - tor bgp: asn: 64109 peers: @@ -2594,16 +2703,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.109/32 - ipv6: 2064:100::6d/128 + ipv6: 2064:100:0:6d::/128 Ethernet1: ipv4: 10.0.0.217/31 ipv6: fc00::1b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.110/24 ipv6: fc0a::6e/64 ARISTA110T0: properties: - common + - tor bgp: asn: 64110 peers: @@ -2613,16 +2723,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.110/32 - ipv6: 2064:100::6e/128 + ipv6: 2064:100:0:6e::/128 Ethernet1: ipv4: 10.0.0.219/31 ipv6: fc00::1b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.111/24 ipv6: fc0a::6f/64 ARISTA111T0: properties: - common + - tor bgp: asn: 64111 peers: @@ -2632,16 +2743,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.111/32 - ipv6: 2064:100::6f/128 + ipv6: 2064:100:0:6f::/128 Ethernet1: ipv4: 10.0.0.221/31 ipv6: fc00::1ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.112/24 ipv6: fc0a::70/64 ARISTA112T0: properties: - common + - tor bgp: asn: 64112 peers: @@ -2651,16 +2763,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.112/32 - ipv6: 2064:100::70/128 + ipv6: 2064:100:0:70::/128 Ethernet1: ipv4: 10.0.0.223/31 ipv6: fc00::1be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.113/24 ipv6: fc0a::71/64 ARISTA113T0: properties: - common + - tor bgp: asn: 64113 peers: @@ -2670,16 +2783,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.113/32 - ipv6: 2064:100::71/128 + ipv6: 2064:100:0:71::/128 Ethernet1: ipv4: 10.0.0.225/31 ipv6: fc00::1c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.114/24 ipv6: fc0a::72/64 ARISTA114T0: properties: - common + - tor bgp: asn: 64114 peers: @@ -2689,16 +2803,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.114/32 - ipv6: 2064:100::72/128 + ipv6: 2064:100:0:72::/128 Ethernet1: ipv4: 10.0.0.227/31 ipv6: fc00::1c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.115/24 ipv6: fc0a::73/64 ARISTA115T0: properties: - common + - tor bgp: asn: 64115 peers: @@ -2708,16 +2823,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.115/32 - ipv6: 2064:100::73/128 + ipv6: 2064:100:0:73::/128 Ethernet1: ipv4: 10.0.0.229/31 ipv6: fc00::1ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.116/24 ipv6: fc0a::74/64 ARISTA116T0: properties: - common + - tor bgp: asn: 64116 peers: @@ -2727,16 +2843,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.116/32 - ipv6: 2064:100::74/128 + ipv6: 2064:100:0:74::/128 Ethernet1: ipv4: 10.0.0.231/31 ipv6: fc00::1ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.117/24 ipv6: fc0a::75/64 ARISTA117T0: properties: - common + - tor bgp: asn: 64117 peers: @@ -2746,16 +2863,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.117/32 - ipv6: 2064:100::75/128 + ipv6: 2064:100:0:75::/128 Ethernet1: ipv4: 10.0.0.233/31 ipv6: fc00::1d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.118/24 ipv6: fc0a::76/64 ARISTA118T0: properties: - common + - tor bgp: asn: 64118 peers: @@ -2765,16 +2883,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.118/32 - ipv6: 2064:100::76/128 + ipv6: 2064:100:0:76::/128 Ethernet1: ipv4: 10.0.0.235/31 ipv6: fc00::1d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.119/24 ipv6: fc0a::77/64 ARISTA119T0: properties: - common + - tor bgp: asn: 64119 peers: @@ -2784,16 +2903,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.119/32 - ipv6: 2064:100::77/128 + ipv6: 2064:100:0:77::/128 Ethernet1: ipv4: 10.0.0.237/31 ipv6: fc00::1da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.120/24 ipv6: fc0a::78/64 ARISTA120T0: properties: - common + - tor bgp: asn: 64120 peers: @@ -2803,16 +2923,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.120/32 - ipv6: 2064:100::78/128 + ipv6: 2064:100:0:78::/128 Ethernet1: ipv4: 10.0.0.239/31 ipv6: fc00::1de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.121/24 ipv6: fc0a::79/64 ARISTA121T0: properties: - common + - tor bgp: asn: 64121 peers: @@ -2822,16 +2943,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.121/32 - ipv6: 2064:100::79/128 + ipv6: 2064:100:0:79::/128 Ethernet1: ipv4: 10.0.0.241/31 ipv6: fc00::1e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.122/24 ipv6: fc0a::7a/64 ARISTA122T0: properties: - common + - tor bgp: asn: 64122 peers: @@ -2841,16 +2963,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.122/32 - ipv6: 2064:100::7a/128 + ipv6: 2064:100:0:7a::/128 Ethernet1: ipv4: 10.0.0.243/31 ipv6: fc00::1e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.123/24 ipv6: fc0a::7b/64 ARISTA123T0: properties: - common + - tor bgp: asn: 64123 peers: @@ -2860,16 +2983,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.123/32 - ipv6: 2064:100::7b/128 + ipv6: 2064:100:0:7b::/128 Ethernet1: ipv4: 10.0.0.245/31 ipv6: fc00::1ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.124/24 ipv6: fc0a::7c/64 ARISTA124T0: properties: - common + - tor bgp: asn: 64124 peers: @@ -2879,16 +3003,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.124/32 - ipv6: 2064:100::7c/128 + ipv6: 2064:100:0:7c::/128 Ethernet1: ipv4: 10.0.0.247/31 ipv6: fc00::1ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.125/24 ipv6: fc0a::7d/64 ARISTA125T0: properties: - common + - tor bgp: asn: 64125 peers: @@ -2898,16 +3023,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.125/32 - ipv6: 2064:100::7d/128 + ipv6: 2064:100:0:7d::/128 Ethernet1: ipv4: 10.0.0.249/31 ipv6: fc00::1f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.126/24 ipv6: fc0a::7e/64 ARISTA126T0: properties: - common + - tor bgp: asn: 64126 peers: @@ -2917,16 +3043,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.126/32 - ipv6: 2064:100::7e/128 + ipv6: 2064:100:0:7e::/128 Ethernet1: ipv4: 10.0.0.251/31 ipv6: fc00::1f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.127/24 ipv6: fc0a::7f/64 ARISTA127T0: properties: - common + - tor bgp: asn: 64127 peers: @@ -2936,16 +3063,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.127/32 - ipv6: 2064:100::7f/128 + ipv6: 2064:100:0:7f::/128 Ethernet1: ipv4: 10.0.0.253/31 ipv6: fc00::1fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.128/24 ipv6: fc0a::80/64 ARISTA128T0: properties: - common + - tor bgp: asn: 64128 peers: @@ -2955,10 +3083,10 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.128/32 - ipv6: 2064:100::80/128 + ipv6: 2064:100:0:80::/128 Ethernet1: ipv4: 10.0.0.255/31 ipv6: fc00::1fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.129/24 ipv6: fc0a::81/64 diff --git a/ansible/vars/topo_t1-isolated-d224u8.yml b/ansible/vars/topo_t1-isolated-d224u8.yml index f2f809366d5..6c82ab9448b 100644 --- a/ansible/vars/topo_t1-isolated-d224u8.yml +++ b/ansible/vars/topo_t1-isolated-d224u8.yml @@ -949,6 +949,7 @@ configuration: ARISTA01T0: properties: - common + - tor bgp: asn: 64001 peers: @@ -958,16 +959,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.1/32 - ipv6: 2064:100::1/128 + ipv6: 2064:100:0:1::/128 Ethernet1: ipv4: 10.0.0.1/31 ipv6: fc00::2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.2/24 ipv6: fc0a::2/64 ARISTA02T0: properties: - common + - tor bgp: asn: 64002 peers: @@ -977,16 +979,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.2/32 - ipv6: 2064:100::2/128 + ipv6: 2064:100:0:2::/128 Ethernet1: ipv4: 10.0.0.3/31 ipv6: fc00::6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.3/24 ipv6: fc0a::3/64 ARISTA03T0: properties: - common + - tor bgp: asn: 64003 peers: @@ -996,16 +999,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.3/32 - ipv6: 2064:100::3/128 + ipv6: 2064:100:0:3::/128 Ethernet1: ipv4: 10.0.0.5/31 ipv6: fc00::a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.4/24 ipv6: fc0a::4/64 ARISTA04T0: properties: - common + - tor bgp: asn: 64004 peers: @@ -1015,16 +1019,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.4/32 - ipv6: 2064:100::4/128 + ipv6: 2064:100:0:4::/128 Ethernet1: ipv4: 10.0.0.7/31 ipv6: fc00::e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.5/24 ipv6: fc0a::5/64 ARISTA05T0: properties: - common + - tor bgp: asn: 64005 peers: @@ -1034,16 +1039,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.5/32 - ipv6: 2064:100::5/128 + ipv6: 2064:100:0:5::/128 Ethernet1: ipv4: 10.0.0.9/31 ipv6: fc00::12/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.6/24 ipv6: fc0a::6/64 ARISTA06T0: properties: - common + - tor bgp: asn: 64006 peers: @@ -1053,16 +1059,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.6/32 - ipv6: 2064:100::6/128 + ipv6: 2064:100:0:6::/128 Ethernet1: ipv4: 10.0.0.11/31 ipv6: fc00::16/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.7/24 ipv6: fc0a::7/64 ARISTA07T0: properties: - common + - tor bgp: asn: 64007 peers: @@ -1072,16 +1079,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.7/32 - ipv6: 2064:100::7/128 + ipv6: 2064:100:0:7::/128 Ethernet1: ipv4: 10.0.0.13/31 ipv6: fc00::1a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.8/24 ipv6: fc0a::8/64 ARISTA08T0: properties: - common + - tor bgp: asn: 64008 peers: @@ -1091,16 +1099,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.8/32 - ipv6: 2064:100::8/128 + ipv6: 2064:100:0:8::/128 Ethernet1: ipv4: 10.0.0.15/31 ipv6: fc00::1e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.9/24 ipv6: fc0a::9/64 ARISTA09T0: properties: - common + - tor bgp: asn: 64009 peers: @@ -1110,16 +1119,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.9/32 - ipv6: 2064:100::9/128 + ipv6: 2064:100:0:9::/128 Ethernet1: ipv4: 10.0.0.17/31 ipv6: fc00::22/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.10/24 ipv6: fc0a::a/64 ARISTA10T0: properties: - common + - tor bgp: asn: 64010 peers: @@ -1129,16 +1139,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.10/32 - ipv6: 2064:100::a/128 + ipv6: 2064:100:0:a::/128 Ethernet1: ipv4: 10.0.0.19/31 ipv6: fc00::26/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.11/24 ipv6: fc0a::b/64 ARISTA11T0: properties: - common + - tor bgp: asn: 64011 peers: @@ -1148,16 +1159,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.11/32 - ipv6: 2064:100::b/128 + ipv6: 2064:100:0:b::/128 Ethernet1: ipv4: 10.0.0.21/31 ipv6: fc00::2a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.12/24 ipv6: fc0a::c/64 ARISTA12T0: properties: - common + - tor bgp: asn: 64012 peers: @@ -1167,16 +1179,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.12/32 - ipv6: 2064:100::c/128 + ipv6: 2064:100:0:c::/128 Ethernet1: ipv4: 10.0.0.23/31 ipv6: fc00::2e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.13/24 ipv6: fc0a::d/64 ARISTA13T0: properties: - common + - tor bgp: asn: 64013 peers: @@ -1186,16 +1199,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.13/32 - ipv6: 2064:100::d/128 + ipv6: 2064:100:0:d::/128 Ethernet1: ipv4: 10.0.0.25/31 ipv6: fc00::32/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.14/24 ipv6: fc0a::e/64 ARISTA14T0: properties: - common + - tor bgp: asn: 64014 peers: @@ -1205,16 +1219,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.14/32 - ipv6: 2064:100::e/128 + ipv6: 2064:100:0:e::/128 Ethernet1: ipv4: 10.0.0.27/31 ipv6: fc00::36/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.15/24 ipv6: fc0a::f/64 ARISTA15T0: properties: - common + - tor bgp: asn: 64015 peers: @@ -1224,16 +1239,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.15/32 - ipv6: 2064:100::f/128 + ipv6: 2064:100:0:f::/128 Ethernet1: ipv4: 10.0.0.29/31 ipv6: fc00::3a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.16/24 ipv6: fc0a::10/64 ARISTA16T0: properties: - common + - tor bgp: asn: 64016 peers: @@ -1243,16 +1259,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.16/32 - ipv6: 2064:100::10/128 + ipv6: 2064:100:0:10::/128 Ethernet1: ipv4: 10.0.0.31/31 ipv6: fc00::3e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.17/24 ipv6: fc0a::11/64 ARISTA17T0: properties: - common + - tor bgp: asn: 64017 peers: @@ -1262,16 +1279,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.17/32 - ipv6: 2064:100::11/128 + ipv6: 2064:100:0:11::/128 Ethernet1: ipv4: 10.0.0.33/31 ipv6: fc00::42/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.18/24 ipv6: fc0a::12/64 ARISTA18T0: properties: - common + - tor bgp: asn: 64018 peers: @@ -1281,16 +1299,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.18/32 - ipv6: 2064:100::12/128 + ipv6: 2064:100:0:12::/128 Ethernet1: ipv4: 10.0.0.35/31 ipv6: fc00::46/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.19/24 ipv6: fc0a::13/64 ARISTA19T0: properties: - common + - tor bgp: asn: 64019 peers: @@ -1300,16 +1319,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.19/32 - ipv6: 2064:100::13/128 + ipv6: 2064:100:0:13::/128 Ethernet1: ipv4: 10.0.0.37/31 ipv6: fc00::4a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.20/24 ipv6: fc0a::14/64 ARISTA20T0: properties: - common + - tor bgp: asn: 64020 peers: @@ -1319,16 +1339,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.20/32 - ipv6: 2064:100::14/128 + ipv6: 2064:100:0:14::/128 Ethernet1: ipv4: 10.0.0.39/31 ipv6: fc00::4e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.21/24 ipv6: fc0a::15/64 ARISTA21T0: properties: - common + - tor bgp: asn: 64021 peers: @@ -1338,16 +1359,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.21/32 - ipv6: 2064:100::15/128 + ipv6: 2064:100:0:15::/128 Ethernet1: ipv4: 10.0.0.41/31 ipv6: fc00::52/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.22/24 ipv6: fc0a::16/64 ARISTA22T0: properties: - common + - tor bgp: asn: 64022 peers: @@ -1357,16 +1379,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.22/32 - ipv6: 2064:100::16/128 + ipv6: 2064:100:0:16::/128 Ethernet1: ipv4: 10.0.0.43/31 ipv6: fc00::56/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.23/24 ipv6: fc0a::17/64 ARISTA23T0: properties: - common + - tor bgp: asn: 64023 peers: @@ -1376,16 +1399,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.23/32 - ipv6: 2064:100::17/128 + ipv6: 2064:100:0:17::/128 Ethernet1: ipv4: 10.0.0.45/31 ipv6: fc00::5a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.24/24 ipv6: fc0a::18/64 ARISTA24T0: properties: - common + - tor bgp: asn: 64024 peers: @@ -1395,16 +1419,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.24/32 - ipv6: 2064:100::18/128 + ipv6: 2064:100:0:18::/128 Ethernet1: ipv4: 10.0.0.47/31 ipv6: fc00::5e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.25/24 ipv6: fc0a::19/64 ARISTA25T0: properties: - common + - tor bgp: asn: 64025 peers: @@ -1414,16 +1439,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.25/32 - ipv6: 2064:100::19/128 + ipv6: 2064:100:0:19::/128 Ethernet1: ipv4: 10.0.0.49/31 ipv6: fc00::62/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.26/24 ipv6: fc0a::1a/64 ARISTA26T0: properties: - common + - tor bgp: asn: 64026 peers: @@ -1433,16 +1459,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.26/32 - ipv6: 2064:100::1a/128 + ipv6: 2064:100:0:1a::/128 Ethernet1: ipv4: 10.0.0.51/31 ipv6: fc00::66/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.27/24 ipv6: fc0a::1b/64 ARISTA27T0: properties: - common + - tor bgp: asn: 64027 peers: @@ -1452,16 +1479,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.27/32 - ipv6: 2064:100::1b/128 + ipv6: 2064:100:0:1b::/128 Ethernet1: ipv4: 10.0.0.53/31 ipv6: fc00::6a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.28/24 ipv6: fc0a::1c/64 ARISTA28T0: properties: - common + - tor bgp: asn: 64028 peers: @@ -1471,16 +1499,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.28/32 - ipv6: 2064:100::1c/128 + ipv6: 2064:100:0:1c::/128 Ethernet1: ipv4: 10.0.0.55/31 ipv6: fc00::6e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.29/24 ipv6: fc0a::1d/64 ARISTA29T0: properties: - common + - tor bgp: asn: 64029 peers: @@ -1490,16 +1519,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.29/32 - ipv6: 2064:100::1d/128 + ipv6: 2064:100:0:1d::/128 Ethernet1: ipv4: 10.0.0.57/31 ipv6: fc00::72/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.30/24 ipv6: fc0a::1e/64 ARISTA30T0: properties: - common + - tor bgp: asn: 64030 peers: @@ -1509,16 +1539,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.30/32 - ipv6: 2064:100::1e/128 + ipv6: 2064:100:0:1e::/128 Ethernet1: ipv4: 10.0.0.59/31 ipv6: fc00::76/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.31/24 ipv6: fc0a::1f/64 ARISTA31T0: properties: - common + - tor bgp: asn: 64031 peers: @@ -1528,16 +1559,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.31/32 - ipv6: 2064:100::1f/128 + ipv6: 2064:100:0:1f::/128 Ethernet1: ipv4: 10.0.0.61/31 ipv6: fc00::7a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.32/24 ipv6: fc0a::20/64 ARISTA32T0: properties: - common + - tor bgp: asn: 64032 peers: @@ -1547,16 +1579,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.32/32 - ipv6: 2064:100::20/128 + ipv6: 2064:100:0:20::/128 Ethernet1: ipv4: 10.0.0.63/31 ipv6: fc00::7e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.33/24 ipv6: fc0a::21/64 ARISTA33T0: properties: - common + - tor bgp: asn: 64033 peers: @@ -1566,16 +1599,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.33/32 - ipv6: 2064:100::21/128 + ipv6: 2064:100:0:21::/128 Ethernet1: ipv4: 10.0.0.65/31 ipv6: fc00::82/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.34/24 ipv6: fc0a::22/64 ARISTA34T0: properties: - common + - tor bgp: asn: 64034 peers: @@ -1585,16 +1619,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.34/32 - ipv6: 2064:100::22/128 + ipv6: 2064:100:0:22::/128 Ethernet1: ipv4: 10.0.0.67/31 ipv6: fc00::86/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.35/24 ipv6: fc0a::23/64 ARISTA35T0: properties: - common + - tor bgp: asn: 64035 peers: @@ -1604,16 +1639,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.35/32 - ipv6: 2064:100::23/128 + ipv6: 2064:100:0:23::/128 Ethernet1: ipv4: 10.0.0.69/31 ipv6: fc00::8a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.36/24 ipv6: fc0a::24/64 ARISTA36T0: properties: - common + - tor bgp: asn: 64036 peers: @@ -1623,16 +1659,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.36/32 - ipv6: 2064:100::24/128 + ipv6: 2064:100:0:24::/128 Ethernet1: ipv4: 10.0.0.71/31 ipv6: fc00::8e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.37/24 ipv6: fc0a::25/64 ARISTA37T0: properties: - common + - tor bgp: asn: 64037 peers: @@ -1642,16 +1679,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.37/32 - ipv6: 2064:100::25/128 + ipv6: 2064:100:0:25::/128 Ethernet1: ipv4: 10.0.0.73/31 ipv6: fc00::92/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.38/24 ipv6: fc0a::26/64 ARISTA38T0: properties: - common + - tor bgp: asn: 64038 peers: @@ -1661,16 +1699,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.38/32 - ipv6: 2064:100::26/128 + ipv6: 2064:100:0:26::/128 Ethernet1: ipv4: 10.0.0.75/31 ipv6: fc00::96/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.39/24 ipv6: fc0a::27/64 ARISTA39T0: properties: - common + - tor bgp: asn: 64039 peers: @@ -1680,16 +1719,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.39/32 - ipv6: 2064:100::27/128 + ipv6: 2064:100:0:27::/128 Ethernet1: ipv4: 10.0.0.77/31 ipv6: fc00::9a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.40/24 ipv6: fc0a::28/64 ARISTA40T0: properties: - common + - tor bgp: asn: 64040 peers: @@ -1699,16 +1739,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.40/32 - ipv6: 2064:100::28/128 + ipv6: 2064:100:0:28::/128 Ethernet1: ipv4: 10.0.0.79/31 ipv6: fc00::9e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.41/24 ipv6: fc0a::29/64 ARISTA41T0: properties: - common + - tor bgp: asn: 64041 peers: @@ -1718,16 +1759,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.41/32 - ipv6: 2064:100::29/128 + ipv6: 2064:100:0:29::/128 Ethernet1: ipv4: 10.0.0.81/31 ipv6: fc00::a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.42/24 ipv6: fc0a::2a/64 ARISTA42T0: properties: - common + - tor bgp: asn: 64042 peers: @@ -1737,16 +1779,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.42/32 - ipv6: 2064:100::2a/128 + ipv6: 2064:100:0:2a::/128 Ethernet1: ipv4: 10.0.0.83/31 ipv6: fc00::a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.43/24 ipv6: fc0a::2b/64 ARISTA43T0: properties: - common + - tor bgp: asn: 64043 peers: @@ -1756,16 +1799,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.43/32 - ipv6: 2064:100::2b/128 + ipv6: 2064:100:0:2b::/128 Ethernet1: ipv4: 10.0.0.85/31 ipv6: fc00::aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.44/24 ipv6: fc0a::2c/64 ARISTA44T0: properties: - common + - tor bgp: asn: 64044 peers: @@ -1775,16 +1819,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.44/32 - ipv6: 2064:100::2c/128 + ipv6: 2064:100:0:2c::/128 Ethernet1: ipv4: 10.0.0.87/31 ipv6: fc00::ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.45/24 ipv6: fc0a::2d/64 ARISTA45T0: properties: - common + - tor bgp: asn: 64045 peers: @@ -1794,16 +1839,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.45/32 - ipv6: 2064:100::2d/128 + ipv6: 2064:100:0:2d::/128 Ethernet1: ipv4: 10.0.0.89/31 ipv6: fc00::b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.46/24 ipv6: fc0a::2e/64 ARISTA46T0: properties: - common + - tor bgp: asn: 64046 peers: @@ -1813,16 +1859,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.46/32 - ipv6: 2064:100::2e/128 + ipv6: 2064:100:0:2e::/128 Ethernet1: ipv4: 10.0.0.91/31 ipv6: fc00::b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.47/24 ipv6: fc0a::2f/64 ARISTA47T0: properties: - common + - tor bgp: asn: 64047 peers: @@ -1832,16 +1879,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.47/32 - ipv6: 2064:100::2f/128 + ipv6: 2064:100:0:2f::/128 Ethernet1: ipv4: 10.0.0.93/31 ipv6: fc00::ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.48/24 ipv6: fc0a::30/64 ARISTA48T0: properties: - common + - tor bgp: asn: 64048 peers: @@ -1851,16 +1899,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.48/32 - ipv6: 2064:100::30/128 + ipv6: 2064:100:0:30::/128 Ethernet1: ipv4: 10.0.0.95/31 ipv6: fc00::be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.49/24 ipv6: fc0a::31/64 ARISTA01T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -1870,16 +1919,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.49/32 - ipv6: 2064:100::31/128 + ipv6: 2064:100:0:31::/128 Ethernet1: ipv4: 10.0.0.97/31 ipv6: fc00::c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.50/24 ipv6: fc0a::32/64 ARISTA02T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -1889,16 +1939,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.50/32 - ipv6: 2064:100::32/128 + ipv6: 2064:100:0:32::/128 Ethernet1: ipv4: 10.0.0.99/31 ipv6: fc00::c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.51/24 ipv6: fc0a::33/64 ARISTA49T0: properties: - common + - tor bgp: asn: 64049 peers: @@ -1908,16 +1959,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.51/32 - ipv6: 2064:100::33/128 + ipv6: 2064:100:0:33::/128 Ethernet1: ipv4: 10.0.0.101/31 ipv6: fc00::ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.52/24 ipv6: fc0a::34/64 ARISTA50T0: properties: - common + - tor bgp: asn: 64050 peers: @@ -1927,16 +1979,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.52/32 - ipv6: 2064:100::34/128 + ipv6: 2064:100:0:34::/128 Ethernet1: ipv4: 10.0.0.103/31 ipv6: fc00::ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.53/24 ipv6: fc0a::35/64 ARISTA51T0: properties: - common + - tor bgp: asn: 64051 peers: @@ -1946,16 +1999,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.53/32 - ipv6: 2064:100::35/128 + ipv6: 2064:100:0:35::/128 Ethernet1: ipv4: 10.0.0.105/31 ipv6: fc00::d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.54/24 ipv6: fc0a::36/64 ARISTA52T0: properties: - common + - tor bgp: asn: 64052 peers: @@ -1965,16 +2019,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.54/32 - ipv6: 2064:100::36/128 + ipv6: 2064:100:0:36::/128 Ethernet1: ipv4: 10.0.0.107/31 ipv6: fc00::d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.55/24 ipv6: fc0a::37/64 ARISTA53T0: properties: - common + - tor bgp: asn: 64053 peers: @@ -1984,16 +2039,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.55/32 - ipv6: 2064:100::37/128 + ipv6: 2064:100:0:37::/128 Ethernet1: ipv4: 10.0.0.109/31 ipv6: fc00::da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.56/24 ipv6: fc0a::38/64 ARISTA54T0: properties: - common + - tor bgp: asn: 64054 peers: @@ -2003,16 +2059,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.56/32 - ipv6: 2064:100::38/128 + ipv6: 2064:100:0:38::/128 Ethernet1: ipv4: 10.0.0.111/31 ipv6: fc00::de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.57/24 ipv6: fc0a::39/64 ARISTA55T0: properties: - common + - tor bgp: asn: 64055 peers: @@ -2022,16 +2079,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.57/32 - ipv6: 2064:100::39/128 + ipv6: 2064:100:0:39::/128 Ethernet1: ipv4: 10.0.0.113/31 ipv6: fc00::e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.58/24 ipv6: fc0a::3a/64 ARISTA56T0: properties: - common + - tor bgp: asn: 64056 peers: @@ -2041,16 +2099,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.58/32 - ipv6: 2064:100::3a/128 + ipv6: 2064:100:0:3a::/128 Ethernet1: ipv4: 10.0.0.115/31 ipv6: fc00::e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.59/24 ipv6: fc0a::3b/64 ARISTA03T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -2060,16 +2119,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.59/32 - ipv6: 2064:100::3b/128 + ipv6: 2064:100:0:3b::/128 Ethernet1: ipv4: 10.0.0.117/31 ipv6: fc00::ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.60/24 ipv6: fc0a::3c/64 ARISTA04T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -2079,16 +2139,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.60/32 - ipv6: 2064:100::3c/128 + ipv6: 2064:100:0:3c::/128 Ethernet1: ipv4: 10.0.0.119/31 ipv6: fc00::ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.61/24 ipv6: fc0a::3d/64 ARISTA57T0: properties: - common + - tor bgp: asn: 64057 peers: @@ -2098,16 +2159,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.61/32 - ipv6: 2064:100::3d/128 + ipv6: 2064:100:0:3d::/128 Ethernet1: ipv4: 10.0.0.121/31 ipv6: fc00::f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.62/24 ipv6: fc0a::3e/64 ARISTA58T0: properties: - common + - tor bgp: asn: 64058 peers: @@ -2117,16 +2179,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.62/32 - ipv6: 2064:100::3e/128 + ipv6: 2064:100:0:3e::/128 Ethernet1: ipv4: 10.0.0.123/31 ipv6: fc00::f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.63/24 ipv6: fc0a::3f/64 ARISTA59T0: properties: - common + - tor bgp: asn: 64059 peers: @@ -2136,16 +2199,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.63/32 - ipv6: 2064:100::3f/128 + ipv6: 2064:100:0:3f::/128 Ethernet1: ipv4: 10.0.0.125/31 ipv6: fc00::fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.64/24 ipv6: fc0a::40/64 ARISTA60T0: properties: - common + - tor bgp: asn: 64060 peers: @@ -2155,16 +2219,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.64/32 - ipv6: 2064:100::40/128 + ipv6: 2064:100:0:40::/128 Ethernet1: ipv4: 10.0.0.127/31 ipv6: fc00::fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.65/24 ipv6: fc0a::41/64 ARISTA61T0: properties: - common + - tor bgp: asn: 64061 peers: @@ -2174,16 +2239,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.65/32 - ipv6: 2064:100::41/128 + ipv6: 2064:100:0:41::/128 Ethernet1: ipv4: 10.0.0.129/31 ipv6: fc00::102/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.66/24 ipv6: fc0a::42/64 ARISTA62T0: properties: - common + - tor bgp: asn: 64062 peers: @@ -2193,16 +2259,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.66/32 - ipv6: 2064:100::42/128 + ipv6: 2064:100:0:42::/128 Ethernet1: ipv4: 10.0.0.131/31 ipv6: fc00::106/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.67/24 ipv6: fc0a::43/64 ARISTA63T0: properties: - common + - tor bgp: asn: 64063 peers: @@ -2212,16 +2279,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.67/32 - ipv6: 2064:100::43/128 + ipv6: 2064:100:0:43::/128 Ethernet1: ipv4: 10.0.0.133/31 ipv6: fc00::10a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.68/24 ipv6: fc0a::44/64 ARISTA64T0: properties: - common + - tor bgp: asn: 64064 peers: @@ -2231,16 +2299,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.68/32 - ipv6: 2064:100::44/128 + ipv6: 2064:100:0:44::/128 Ethernet1: ipv4: 10.0.0.135/31 ipv6: fc00::10e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.69/24 ipv6: fc0a::45/64 ARISTA65T0: properties: - common + - tor bgp: asn: 64065 peers: @@ -2250,16 +2319,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.69/32 - ipv6: 2064:100::45/128 + ipv6: 2064:100:0:45::/128 Ethernet1: ipv4: 10.0.0.137/31 ipv6: fc00::112/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.70/24 ipv6: fc0a::46/64 ARISTA66T0: properties: - common + - tor bgp: asn: 64066 peers: @@ -2269,16 +2339,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.70/32 - ipv6: 2064:100::46/128 + ipv6: 2064:100:0:46::/128 Ethernet1: ipv4: 10.0.0.139/31 ipv6: fc00::116/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.71/24 ipv6: fc0a::47/64 ARISTA67T0: properties: - common + - tor bgp: asn: 64067 peers: @@ -2288,16 +2359,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.71/32 - ipv6: 2064:100::47/128 + ipv6: 2064:100:0:47::/128 Ethernet1: ipv4: 10.0.0.141/31 ipv6: fc00::11a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.72/24 ipv6: fc0a::48/64 ARISTA68T0: properties: - common + - tor bgp: asn: 64068 peers: @@ -2307,16 +2379,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.72/32 - ipv6: 2064:100::48/128 + ipv6: 2064:100:0:48::/128 Ethernet1: ipv4: 10.0.0.143/31 ipv6: fc00::11e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.73/24 ipv6: fc0a::49/64 ARISTA69T0: properties: - common + - tor bgp: asn: 64069 peers: @@ -2326,16 +2399,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.73/32 - ipv6: 2064:100::49/128 + ipv6: 2064:100:0:49::/128 Ethernet1: ipv4: 10.0.0.145/31 ipv6: fc00::122/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.74/24 ipv6: fc0a::4a/64 ARISTA70T0: properties: - common + - tor bgp: asn: 64070 peers: @@ -2345,16 +2419,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.74/32 - ipv6: 2064:100::4a/128 + ipv6: 2064:100:0:4a::/128 Ethernet1: ipv4: 10.0.0.147/31 ipv6: fc00::126/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.75/24 ipv6: fc0a::4b/64 ARISTA71T0: properties: - common + - tor bgp: asn: 64071 peers: @@ -2364,16 +2439,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.75/32 - ipv6: 2064:100::4b/128 + ipv6: 2064:100:0:4b::/128 Ethernet1: ipv4: 10.0.0.149/31 ipv6: fc00::12a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.76/24 ipv6: fc0a::4c/64 ARISTA72T0: properties: - common + - tor bgp: asn: 64072 peers: @@ -2383,16 +2459,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.76/32 - ipv6: 2064:100::4c/128 + ipv6: 2064:100:0:4c::/128 Ethernet1: ipv4: 10.0.0.151/31 ipv6: fc00::12e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.77/24 ipv6: fc0a::4d/64 ARISTA73T0: properties: - common + - tor bgp: asn: 64073 peers: @@ -2402,16 +2479,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.77/32 - ipv6: 2064:100::4d/128 + ipv6: 2064:100:0:4d::/128 Ethernet1: ipv4: 10.0.0.153/31 ipv6: fc00::132/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.78/24 ipv6: fc0a::4e/64 ARISTA74T0: properties: - common + - tor bgp: asn: 64074 peers: @@ -2421,16 +2499,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.78/32 - ipv6: 2064:100::4e/128 + ipv6: 2064:100:0:4e::/128 Ethernet1: ipv4: 10.0.0.155/31 ipv6: fc00::136/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.79/24 ipv6: fc0a::4f/64 ARISTA75T0: properties: - common + - tor bgp: asn: 64075 peers: @@ -2440,16 +2519,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.79/32 - ipv6: 2064:100::4f/128 + ipv6: 2064:100:0:4f::/128 Ethernet1: ipv4: 10.0.0.157/31 ipv6: fc00::13a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.80/24 ipv6: fc0a::50/64 ARISTA76T0: properties: - common + - tor bgp: asn: 64076 peers: @@ -2459,16 +2539,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.80/32 - ipv6: 2064:100::50/128 + ipv6: 2064:100:0:50::/128 Ethernet1: ipv4: 10.0.0.159/31 ipv6: fc00::13e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.81/24 ipv6: fc0a::51/64 ARISTA77T0: properties: - common + - tor bgp: asn: 64077 peers: @@ -2478,16 +2559,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.81/32 - ipv6: 2064:100::51/128 + ipv6: 2064:100:0:51::/128 Ethernet1: ipv4: 10.0.0.161/31 ipv6: fc00::142/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.82/24 ipv6: fc0a::52/64 ARISTA78T0: properties: - common + - tor bgp: asn: 64078 peers: @@ -2497,16 +2579,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.82/32 - ipv6: 2064:100::52/128 + ipv6: 2064:100:0:52::/128 Ethernet1: ipv4: 10.0.0.163/31 ipv6: fc00::146/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.83/24 ipv6: fc0a::53/64 ARISTA79T0: properties: - common + - tor bgp: asn: 64079 peers: @@ -2516,16 +2599,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.83/32 - ipv6: 2064:100::53/128 + ipv6: 2064:100:0:53::/128 Ethernet1: ipv4: 10.0.0.165/31 ipv6: fc00::14a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.84/24 ipv6: fc0a::54/64 ARISTA80T0: properties: - common + - tor bgp: asn: 64080 peers: @@ -2535,16 +2619,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.84/32 - ipv6: 2064:100::54/128 + ipv6: 2064:100:0:54::/128 Ethernet1: ipv4: 10.0.0.167/31 ipv6: fc00::14e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.85/24 ipv6: fc0a::55/64 ARISTA81T0: properties: - common + - tor bgp: asn: 64081 peers: @@ -2554,16 +2639,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.85/32 - ipv6: 2064:100::55/128 + ipv6: 2064:100:0:55::/128 Ethernet1: ipv4: 10.0.0.169/31 ipv6: fc00::152/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.86/24 ipv6: fc0a::56/64 ARISTA82T0: properties: - common + - tor bgp: asn: 64082 peers: @@ -2573,16 +2659,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.86/32 - ipv6: 2064:100::56/128 + ipv6: 2064:100:0:56::/128 Ethernet1: ipv4: 10.0.0.171/31 ipv6: fc00::156/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.87/24 ipv6: fc0a::57/64 ARISTA83T0: properties: - common + - tor bgp: asn: 64083 peers: @@ -2592,16 +2679,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.87/32 - ipv6: 2064:100::57/128 + ipv6: 2064:100:0:57::/128 Ethernet1: ipv4: 10.0.0.173/31 ipv6: fc00::15a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.88/24 ipv6: fc0a::58/64 ARISTA84T0: properties: - common + - tor bgp: asn: 64084 peers: @@ -2611,16 +2699,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.88/32 - ipv6: 2064:100::58/128 + ipv6: 2064:100:0:58::/128 Ethernet1: ipv4: 10.0.0.175/31 ipv6: fc00::15e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.89/24 ipv6: fc0a::59/64 ARISTA85T0: properties: - common + - tor bgp: asn: 64085 peers: @@ -2630,16 +2719,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.89/32 - ipv6: 2064:100::59/128 + ipv6: 2064:100:0:59::/128 Ethernet1: ipv4: 10.0.0.177/31 ipv6: fc00::162/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.90/24 ipv6: fc0a::5a/64 ARISTA86T0: properties: - common + - tor bgp: asn: 64086 peers: @@ -2649,16 +2739,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.90/32 - ipv6: 2064:100::5a/128 + ipv6: 2064:100:0:5a::/128 Ethernet1: ipv4: 10.0.0.179/31 ipv6: fc00::166/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.91/24 ipv6: fc0a::5b/64 ARISTA87T0: properties: - common + - tor bgp: asn: 64087 peers: @@ -2668,16 +2759,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.91/32 - ipv6: 2064:100::5b/128 + ipv6: 2064:100:0:5b::/128 Ethernet1: ipv4: 10.0.0.181/31 ipv6: fc00::16a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.92/24 ipv6: fc0a::5c/64 ARISTA88T0: properties: - common + - tor bgp: asn: 64088 peers: @@ -2687,16 +2779,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.92/32 - ipv6: 2064:100::5c/128 + ipv6: 2064:100:0:5c::/128 Ethernet1: ipv4: 10.0.0.183/31 ipv6: fc00::16e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.93/24 ipv6: fc0a::5d/64 ARISTA89T0: properties: - common + - tor bgp: asn: 64089 peers: @@ -2706,16 +2799,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.93/32 - ipv6: 2064:100::5d/128 + ipv6: 2064:100:0:5d::/128 Ethernet1: ipv4: 10.0.0.185/31 ipv6: fc00::172/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.94/24 ipv6: fc0a::5e/64 ARISTA90T0: properties: - common + - tor bgp: asn: 64090 peers: @@ -2725,16 +2819,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.94/32 - ipv6: 2064:100::5e/128 + ipv6: 2064:100:0:5e::/128 Ethernet1: ipv4: 10.0.0.187/31 ipv6: fc00::176/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.95/24 ipv6: fc0a::5f/64 ARISTA91T0: properties: - common + - tor bgp: asn: 64091 peers: @@ -2744,16 +2839,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.95/32 - ipv6: 2064:100::5f/128 + ipv6: 2064:100:0:5f::/128 Ethernet1: ipv4: 10.0.0.189/31 ipv6: fc00::17a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.96/24 ipv6: fc0a::60/64 ARISTA92T0: properties: - common + - tor bgp: asn: 64092 peers: @@ -2763,16 +2859,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.96/32 - ipv6: 2064:100::60/128 + ipv6: 2064:100:0:60::/128 Ethernet1: ipv4: 10.0.0.191/31 ipv6: fc00::17e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.97/24 ipv6: fc0a::61/64 ARISTA93T0: properties: - common + - tor bgp: asn: 64093 peers: @@ -2782,16 +2879,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.97/32 - ipv6: 2064:100::61/128 + ipv6: 2064:100:0:61::/128 Ethernet1: ipv4: 10.0.0.193/31 ipv6: fc00::182/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.98/24 ipv6: fc0a::62/64 ARISTA94T0: properties: - common + - tor bgp: asn: 64094 peers: @@ -2801,16 +2899,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.98/32 - ipv6: 2064:100::62/128 + ipv6: 2064:100:0:62::/128 Ethernet1: ipv4: 10.0.0.195/31 ipv6: fc00::186/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.99/24 ipv6: fc0a::63/64 ARISTA95T0: properties: - common + - tor bgp: asn: 64095 peers: @@ -2820,16 +2919,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.99/32 - ipv6: 2064:100::63/128 + ipv6: 2064:100:0:63::/128 Ethernet1: ipv4: 10.0.0.197/31 ipv6: fc00::18a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.100/24 ipv6: fc0a::64/64 ARISTA96T0: properties: - common + - tor bgp: asn: 64096 peers: @@ -2839,16 +2939,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.100/32 - ipv6: 2064:100::64/128 + ipv6: 2064:100:0:64::/128 Ethernet1: ipv4: 10.0.0.199/31 ipv6: fc00::18e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.101/24 ipv6: fc0a::65/64 ARISTA97T0: properties: - common + - tor bgp: asn: 64097 peers: @@ -2858,16 +2959,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.101/32 - ipv6: 2064:100::65/128 + ipv6: 2064:100:0:65::/128 Ethernet1: ipv4: 10.0.0.201/31 ipv6: fc00::192/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.102/24 ipv6: fc0a::66/64 ARISTA98T0: properties: - common + - tor bgp: asn: 64098 peers: @@ -2877,16 +2979,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.102/32 - ipv6: 2064:100::66/128 + ipv6: 2064:100:0:66::/128 Ethernet1: ipv4: 10.0.0.203/31 ipv6: fc00::196/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.103/24 ipv6: fc0a::67/64 ARISTA99T0: properties: - common + - tor bgp: asn: 64099 peers: @@ -2896,16 +2999,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.103/32 - ipv6: 2064:100::67/128 + ipv6: 2064:100:0:67::/128 Ethernet1: ipv4: 10.0.0.205/31 ipv6: fc00::19a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.104/24 ipv6: fc0a::68/64 ARISTA100T0: properties: - common + - tor bgp: asn: 64100 peers: @@ -2915,16 +3019,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.104/32 - ipv6: 2064:100::68/128 + ipv6: 2064:100:0:68::/128 Ethernet1: ipv4: 10.0.0.207/31 ipv6: fc00::19e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.105/24 ipv6: fc0a::69/64 ARISTA101T0: properties: - common + - tor bgp: asn: 64101 peers: @@ -2934,16 +3039,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.105/32 - ipv6: 2064:100::69/128 + ipv6: 2064:100:0:69::/128 Ethernet1: ipv4: 10.0.0.209/31 ipv6: fc00::1a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.106/24 ipv6: fc0a::6a/64 ARISTA102T0: properties: - common + - tor bgp: asn: 64102 peers: @@ -2953,16 +3059,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.106/32 - ipv6: 2064:100::6a/128 + ipv6: 2064:100:0:6a::/128 Ethernet1: ipv4: 10.0.0.211/31 ipv6: fc00::1a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.107/24 ipv6: fc0a::6b/64 ARISTA103T0: properties: - common + - tor bgp: asn: 64103 peers: @@ -2972,16 +3079,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.107/32 - ipv6: 2064:100::6b/128 + ipv6: 2064:100:0:6b::/128 Ethernet1: ipv4: 10.0.0.213/31 ipv6: fc00::1aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.108/24 ipv6: fc0a::6c/64 ARISTA104T0: properties: - common + - tor bgp: asn: 64104 peers: @@ -2991,16 +3099,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.108/32 - ipv6: 2064:100::6c/128 + ipv6: 2064:100:0:6c::/128 Ethernet1: ipv4: 10.0.0.215/31 ipv6: fc00::1ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.109/24 ipv6: fc0a::6d/64 ARISTA105T0: properties: - common + - tor bgp: asn: 64105 peers: @@ -3010,16 +3119,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.109/32 - ipv6: 2064:100::6d/128 + ipv6: 2064:100:0:6d::/128 Ethernet1: ipv4: 10.0.0.217/31 ipv6: fc00::1b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.110/24 ipv6: fc0a::6e/64 ARISTA106T0: properties: - common + - tor bgp: asn: 64106 peers: @@ -3029,16 +3139,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.110/32 - ipv6: 2064:100::6e/128 + ipv6: 2064:100:0:6e::/128 Ethernet1: ipv4: 10.0.0.219/31 ipv6: fc00::1b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.111/24 ipv6: fc0a::6f/64 ARISTA107T0: properties: - common + - tor bgp: asn: 64107 peers: @@ -3048,16 +3159,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.111/32 - ipv6: 2064:100::6f/128 + ipv6: 2064:100:0:6f::/128 Ethernet1: ipv4: 10.0.0.221/31 ipv6: fc00::1ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.112/24 ipv6: fc0a::70/64 ARISTA108T0: properties: - common + - tor bgp: asn: 64108 peers: @@ -3067,16 +3179,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.112/32 - ipv6: 2064:100::70/128 + ipv6: 2064:100:0:70::/128 Ethernet1: ipv4: 10.0.0.223/31 ipv6: fc00::1be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.113/24 ipv6: fc0a::71/64 ARISTA109T0: properties: - common + - tor bgp: asn: 64109 peers: @@ -3086,16 +3199,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.113/32 - ipv6: 2064:100::71/128 + ipv6: 2064:100:0:71::/128 Ethernet1: ipv4: 10.0.0.225/31 ipv6: fc00::1c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.114/24 ipv6: fc0a::72/64 ARISTA110T0: properties: - common + - tor bgp: asn: 64110 peers: @@ -3105,16 +3219,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.114/32 - ipv6: 2064:100::72/128 + ipv6: 2064:100:0:72::/128 Ethernet1: ipv4: 10.0.0.227/31 ipv6: fc00::1c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.115/24 ipv6: fc0a::73/64 ARISTA111T0: properties: - common + - tor bgp: asn: 64111 peers: @@ -3124,16 +3239,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.115/32 - ipv6: 2064:100::73/128 + ipv6: 2064:100:0:73::/128 Ethernet1: ipv4: 10.0.0.229/31 ipv6: fc00::1ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.116/24 ipv6: fc0a::74/64 ARISTA112T0: properties: - common + - tor bgp: asn: 64112 peers: @@ -3143,16 +3259,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.116/32 - ipv6: 2064:100::74/128 + ipv6: 2064:100:0:74::/128 Ethernet1: ipv4: 10.0.0.231/31 ipv6: fc00::1ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.117/24 ipv6: fc0a::75/64 ARISTA113T0: properties: - common + - tor bgp: asn: 64113 peers: @@ -3162,16 +3279,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.117/32 - ipv6: 2064:100::75/128 + ipv6: 2064:100:0:75::/128 Ethernet1: ipv4: 10.0.0.233/31 ipv6: fc00::1d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.118/24 ipv6: fc0a::76/64 ARISTA114T0: properties: - common + - tor bgp: asn: 64114 peers: @@ -3181,16 +3299,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.118/32 - ipv6: 2064:100::76/128 + ipv6: 2064:100:0:76::/128 Ethernet1: ipv4: 10.0.0.235/31 ipv6: fc00::1d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.119/24 ipv6: fc0a::77/64 ARISTA115T0: properties: - common + - tor bgp: asn: 64115 peers: @@ -3200,16 +3319,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.119/32 - ipv6: 2064:100::77/128 + ipv6: 2064:100:0:77::/128 Ethernet1: ipv4: 10.0.0.237/31 ipv6: fc00::1da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.120/24 ipv6: fc0a::78/64 ARISTA116T0: properties: - common + - tor bgp: asn: 64116 peers: @@ -3219,16 +3339,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.120/32 - ipv6: 2064:100::78/128 + ipv6: 2064:100:0:78::/128 Ethernet1: ipv4: 10.0.0.239/31 ipv6: fc00::1de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.121/24 ipv6: fc0a::79/64 ARISTA117T0: properties: - common + - tor bgp: asn: 64117 peers: @@ -3238,16 +3359,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.121/32 - ipv6: 2064:100::79/128 + ipv6: 2064:100:0:79::/128 Ethernet1: ipv4: 10.0.0.241/31 ipv6: fc00::1e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.122/24 ipv6: fc0a::7a/64 ARISTA118T0: properties: - common + - tor bgp: asn: 64118 peers: @@ -3257,16 +3379,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.122/32 - ipv6: 2064:100::7a/128 + ipv6: 2064:100:0:7a::/128 Ethernet1: ipv4: 10.0.0.243/31 ipv6: fc00::1e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.123/24 ipv6: fc0a::7b/64 ARISTA119T0: properties: - common + - tor bgp: asn: 64119 peers: @@ -3276,16 +3399,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.123/32 - ipv6: 2064:100::7b/128 + ipv6: 2064:100:0:7b::/128 Ethernet1: ipv4: 10.0.0.245/31 ipv6: fc00::1ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.124/24 ipv6: fc0a::7c/64 ARISTA120T0: properties: - common + - tor bgp: asn: 64120 peers: @@ -3295,16 +3419,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.124/32 - ipv6: 2064:100::7c/128 + ipv6: 2064:100:0:7c::/128 Ethernet1: ipv4: 10.0.0.247/31 ipv6: fc00::1ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.125/24 ipv6: fc0a::7d/64 ARISTA121T0: properties: - common + - tor bgp: asn: 64121 peers: @@ -3314,16 +3439,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.125/32 - ipv6: 2064:100::7d/128 + ipv6: 2064:100:0:7d::/128 Ethernet1: ipv4: 10.0.0.249/31 ipv6: fc00::1f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.126/24 ipv6: fc0a::7e/64 ARISTA122T0: properties: - common + - tor bgp: asn: 64122 peers: @@ -3333,16 +3459,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.126/32 - ipv6: 2064:100::7e/128 + ipv6: 2064:100:0:7e::/128 Ethernet1: ipv4: 10.0.0.251/31 ipv6: fc00::1f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.127/24 ipv6: fc0a::7f/64 ARISTA123T0: properties: - common + - tor bgp: asn: 64123 peers: @@ -3352,16 +3479,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.127/32 - ipv6: 2064:100::7f/128 + ipv6: 2064:100:0:7f::/128 Ethernet1: ipv4: 10.0.0.253/31 ipv6: fc00::1fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.128/24 ipv6: fc0a::80/64 ARISTA124T0: properties: - common + - tor bgp: asn: 64124 peers: @@ -3371,16 +3499,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.128/32 - ipv6: 2064:100::80/128 + ipv6: 2064:100:0:80::/128 Ethernet1: ipv4: 10.0.0.255/31 ipv6: fc00::1fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.129/24 ipv6: fc0a::81/64 ARISTA125T0: properties: - common + - tor bgp: asn: 64125 peers: @@ -3390,16 +3519,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.129/32 - ipv6: 2064:100::81/128 + ipv6: 2064:100:0:81::/128 Ethernet1: ipv4: 10.0.1.1/31 ipv6: fc00::202/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.130/24 ipv6: fc0a::82/64 ARISTA126T0: properties: - common + - tor bgp: asn: 64126 peers: @@ -3409,16 +3539,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.130/32 - ipv6: 2064:100::82/128 + ipv6: 2064:100:0:82::/128 Ethernet1: ipv4: 10.0.1.3/31 ipv6: fc00::206/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.131/24 ipv6: fc0a::83/64 ARISTA127T0: properties: - common + - tor bgp: asn: 64127 peers: @@ -3428,16 +3559,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.131/32 - ipv6: 2064:100::83/128 + ipv6: 2064:100:0:83::/128 Ethernet1: ipv4: 10.0.1.5/31 ipv6: fc00::20a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.132/24 ipv6: fc0a::84/64 ARISTA128T0: properties: - common + - tor bgp: asn: 64128 peers: @@ -3447,16 +3579,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.132/32 - ipv6: 2064:100::84/128 + ipv6: 2064:100:0:84::/128 Ethernet1: ipv4: 10.0.1.7/31 ipv6: fc00::20e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.133/24 ipv6: fc0a::85/64 ARISTA129T0: properties: - common + - tor bgp: asn: 64129 peers: @@ -3466,16 +3599,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.133/32 - ipv6: 2064:100::85/128 + ipv6: 2064:100:0:85::/128 Ethernet1: ipv4: 10.0.1.9/31 ipv6: fc00::212/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.134/24 ipv6: fc0a::86/64 ARISTA130T0: properties: - common + - tor bgp: asn: 64130 peers: @@ -3485,16 +3619,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.134/32 - ipv6: 2064:100::86/128 + ipv6: 2064:100:0:86::/128 Ethernet1: ipv4: 10.0.1.11/31 ipv6: fc00::216/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.135/24 ipv6: fc0a::87/64 ARISTA131T0: properties: - common + - tor bgp: asn: 64131 peers: @@ -3504,16 +3639,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.135/32 - ipv6: 2064:100::87/128 + ipv6: 2064:100:0:87::/128 Ethernet1: ipv4: 10.0.1.13/31 ipv6: fc00::21a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.136/24 ipv6: fc0a::88/64 ARISTA132T0: properties: - common + - tor bgp: asn: 64132 peers: @@ -3523,16 +3659,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.136/32 - ipv6: 2064:100::88/128 + ipv6: 2064:100:0:88::/128 Ethernet1: ipv4: 10.0.1.15/31 ipv6: fc00::21e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.137/24 ipv6: fc0a::89/64 ARISTA133T0: properties: - common + - tor bgp: asn: 64133 peers: @@ -3542,16 +3679,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.137/32 - ipv6: 2064:100::89/128 + ipv6: 2064:100:0:89::/128 Ethernet1: ipv4: 10.0.1.17/31 ipv6: fc00::222/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.138/24 ipv6: fc0a::8a/64 ARISTA134T0: properties: - common + - tor bgp: asn: 64134 peers: @@ -3561,16 +3699,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.138/32 - ipv6: 2064:100::8a/128 + ipv6: 2064:100:0:8a::/128 Ethernet1: ipv4: 10.0.1.19/31 ipv6: fc00::226/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.139/24 ipv6: fc0a::8b/64 ARISTA135T0: properties: - common + - tor bgp: asn: 64135 peers: @@ -3580,16 +3719,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.139/32 - ipv6: 2064:100::8b/128 + ipv6: 2064:100:0:8b::/128 Ethernet1: ipv4: 10.0.1.21/31 ipv6: fc00::22a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.140/24 ipv6: fc0a::8c/64 ARISTA136T0: properties: - common + - tor bgp: asn: 64136 peers: @@ -3599,16 +3739,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.140/32 - ipv6: 2064:100::8c/128 + ipv6: 2064:100:0:8c::/128 Ethernet1: ipv4: 10.0.1.23/31 ipv6: fc00::22e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.141/24 ipv6: fc0a::8d/64 ARISTA137T0: properties: - common + - tor bgp: asn: 64137 peers: @@ -3618,16 +3759,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.141/32 - ipv6: 2064:100::8d/128 + ipv6: 2064:100:0:8d::/128 Ethernet1: ipv4: 10.0.1.25/31 ipv6: fc00::232/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.142/24 ipv6: fc0a::8e/64 ARISTA138T0: properties: - common + - tor bgp: asn: 64138 peers: @@ -3637,16 +3779,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.142/32 - ipv6: 2064:100::8e/128 + ipv6: 2064:100:0:8e::/128 Ethernet1: ipv4: 10.0.1.27/31 ipv6: fc00::236/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.143/24 ipv6: fc0a::8f/64 ARISTA139T0: properties: - common + - tor bgp: asn: 64139 peers: @@ -3656,16 +3799,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.143/32 - ipv6: 2064:100::8f/128 + ipv6: 2064:100:0:8f::/128 Ethernet1: ipv4: 10.0.1.29/31 ipv6: fc00::23a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.144/24 ipv6: fc0a::90/64 ARISTA140T0: properties: - common + - tor bgp: asn: 64140 peers: @@ -3675,16 +3819,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.144/32 - ipv6: 2064:100::90/128 + ipv6: 2064:100:0:90::/128 Ethernet1: ipv4: 10.0.1.31/31 ipv6: fc00::23e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.145/24 ipv6: fc0a::91/64 ARISTA141T0: properties: - common + - tor bgp: asn: 64141 peers: @@ -3694,16 +3839,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.145/32 - ipv6: 2064:100::91/128 + ipv6: 2064:100:0:91::/128 Ethernet1: ipv4: 10.0.1.33/31 ipv6: fc00::242/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.146/24 ipv6: fc0a::92/64 ARISTA142T0: properties: - common + - tor bgp: asn: 64142 peers: @@ -3713,16 +3859,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.146/32 - ipv6: 2064:100::92/128 + ipv6: 2064:100:0:92::/128 Ethernet1: ipv4: 10.0.1.35/31 ipv6: fc00::246/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.147/24 ipv6: fc0a::93/64 ARISTA143T0: properties: - common + - tor bgp: asn: 64143 peers: @@ -3732,16 +3879,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.147/32 - ipv6: 2064:100::93/128 + ipv6: 2064:100:0:93::/128 Ethernet1: ipv4: 10.0.1.37/31 ipv6: fc00::24a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.148/24 ipv6: fc0a::94/64 ARISTA144T0: properties: - common + - tor bgp: asn: 64144 peers: @@ -3751,16 +3899,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.148/32 - ipv6: 2064:100::94/128 + ipv6: 2064:100:0:94::/128 Ethernet1: ipv4: 10.0.1.39/31 ipv6: fc00::24e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.149/24 ipv6: fc0a::95/64 ARISTA145T0: properties: - common + - tor bgp: asn: 64145 peers: @@ -3770,16 +3919,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.149/32 - ipv6: 2064:100::95/128 + ipv6: 2064:100:0:95::/128 Ethernet1: ipv4: 10.0.1.41/31 ipv6: fc00::252/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.150/24 ipv6: fc0a::96/64 ARISTA146T0: properties: - common + - tor bgp: asn: 64146 peers: @@ -3789,16 +3939,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.150/32 - ipv6: 2064:100::96/128 + ipv6: 2064:100:0:96::/128 Ethernet1: ipv4: 10.0.1.43/31 ipv6: fc00::256/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.151/24 ipv6: fc0a::97/64 ARISTA147T0: properties: - common + - tor bgp: asn: 64147 peers: @@ -3808,16 +3959,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.151/32 - ipv6: 2064:100::97/128 + ipv6: 2064:100:0:97::/128 Ethernet1: ipv4: 10.0.1.45/31 ipv6: fc00::25a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.152/24 ipv6: fc0a::98/64 ARISTA148T0: properties: - common + - tor bgp: asn: 64148 peers: @@ -3827,16 +3979,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.152/32 - ipv6: 2064:100::98/128 + ipv6: 2064:100:0:98::/128 Ethernet1: ipv4: 10.0.1.47/31 ipv6: fc00::25e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.153/24 ipv6: fc0a::99/64 ARISTA149T0: properties: - common + - tor bgp: asn: 64149 peers: @@ -3846,16 +3999,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.153/32 - ipv6: 2064:100::99/128 + ipv6: 2064:100:0:99::/128 Ethernet1: ipv4: 10.0.1.49/31 ipv6: fc00::262/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.154/24 ipv6: fc0a::9a/64 ARISTA150T0: properties: - common + - tor bgp: asn: 64150 peers: @@ -3865,16 +4019,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.154/32 - ipv6: 2064:100::9a/128 + ipv6: 2064:100:0:9a::/128 Ethernet1: ipv4: 10.0.1.51/31 ipv6: fc00::266/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.155/24 ipv6: fc0a::9b/64 ARISTA151T0: properties: - common + - tor bgp: asn: 64151 peers: @@ -3884,16 +4039,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.155/32 - ipv6: 2064:100::9b/128 + ipv6: 2064:100:0:9b::/128 Ethernet1: ipv4: 10.0.1.53/31 ipv6: fc00::26a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.156/24 ipv6: fc0a::9c/64 ARISTA152T0: properties: - common + - tor bgp: asn: 64152 peers: @@ -3903,16 +4059,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.156/32 - ipv6: 2064:100::9c/128 + ipv6: 2064:100:0:9c::/128 Ethernet1: ipv4: 10.0.1.55/31 ipv6: fc00::26e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.157/24 ipv6: fc0a::9d/64 ARISTA153T0: properties: - common + - tor bgp: asn: 64153 peers: @@ -3922,16 +4079,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.157/32 - ipv6: 2064:100::9d/128 + ipv6: 2064:100:0:9d::/128 Ethernet1: ipv4: 10.0.1.57/31 ipv6: fc00::272/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.158/24 ipv6: fc0a::9e/64 ARISTA154T0: properties: - common + - tor bgp: asn: 64154 peers: @@ -3941,16 +4099,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.158/32 - ipv6: 2064:100::9e/128 + ipv6: 2064:100:0:9e::/128 Ethernet1: ipv4: 10.0.1.59/31 ipv6: fc00::276/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.159/24 ipv6: fc0a::9f/64 ARISTA155T0: properties: - common + - tor bgp: asn: 64155 peers: @@ -3960,16 +4119,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.159/32 - ipv6: 2064:100::9f/128 + ipv6: 2064:100:0:9f::/128 Ethernet1: ipv4: 10.0.1.61/31 ipv6: fc00::27a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.160/24 ipv6: fc0a::a0/64 ARISTA156T0: properties: - common + - tor bgp: asn: 64156 peers: @@ -3979,16 +4139,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.160/32 - ipv6: 2064:100::a0/128 + ipv6: 2064:100:0:a0::/128 Ethernet1: ipv4: 10.0.1.63/31 ipv6: fc00::27e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.161/24 ipv6: fc0a::a1/64 ARISTA157T0: properties: - common + - tor bgp: asn: 64157 peers: @@ -3998,16 +4159,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.161/32 - ipv6: 2064:100::a1/128 + ipv6: 2064:100:0:a1::/128 Ethernet1: ipv4: 10.0.1.65/31 ipv6: fc00::282/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.162/24 ipv6: fc0a::a2/64 ARISTA158T0: properties: - common + - tor bgp: asn: 64158 peers: @@ -4017,16 +4179,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.162/32 - ipv6: 2064:100::a2/128 + ipv6: 2064:100:0:a2::/128 Ethernet1: ipv4: 10.0.1.67/31 ipv6: fc00::286/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.163/24 ipv6: fc0a::a3/64 ARISTA159T0: properties: - common + - tor bgp: asn: 64159 peers: @@ -4036,16 +4199,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.163/32 - ipv6: 2064:100::a3/128 + ipv6: 2064:100:0:a3::/128 Ethernet1: ipv4: 10.0.1.69/31 ipv6: fc00::28a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.164/24 ipv6: fc0a::a4/64 ARISTA160T0: properties: - common + - tor bgp: asn: 64160 peers: @@ -4055,16 +4219,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.164/32 - ipv6: 2064:100::a4/128 + ipv6: 2064:100:0:a4::/128 Ethernet1: ipv4: 10.0.1.71/31 ipv6: fc00::28e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.165/24 ipv6: fc0a::a5/64 ARISTA05T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -4074,16 +4239,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.165/32 - ipv6: 2064:100::a5/128 + ipv6: 2064:100:0:a5::/128 Ethernet1: ipv4: 10.0.1.73/31 ipv6: fc00::292/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.166/24 ipv6: fc0a::a6/64 ARISTA06T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -4093,16 +4259,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.166/32 - ipv6: 2064:100::a6/128 + ipv6: 2064:100:0:a6::/128 Ethernet1: ipv4: 10.0.1.75/31 ipv6: fc00::296/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.167/24 ipv6: fc0a::a7/64 ARISTA161T0: properties: - common + - tor bgp: asn: 64161 peers: @@ -4112,16 +4279,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.167/32 - ipv6: 2064:100::a7/128 + ipv6: 2064:100:0:a7::/128 Ethernet1: ipv4: 10.0.1.77/31 ipv6: fc00::29a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.168/24 ipv6: fc0a::a8/64 ARISTA162T0: properties: - common + - tor bgp: asn: 64162 peers: @@ -4131,16 +4299,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.168/32 - ipv6: 2064:100::a8/128 + ipv6: 2064:100:0:a8::/128 Ethernet1: ipv4: 10.0.1.79/31 ipv6: fc00::29e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.169/24 ipv6: fc0a::a9/64 ARISTA163T0: properties: - common + - tor bgp: asn: 64163 peers: @@ -4150,16 +4319,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.169/32 - ipv6: 2064:100::a9/128 + ipv6: 2064:100:0:a9::/128 Ethernet1: ipv4: 10.0.1.81/31 ipv6: fc00::2a2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.170/24 ipv6: fc0a::aa/64 ARISTA164T0: properties: - common + - tor bgp: asn: 64164 peers: @@ -4169,16 +4339,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.170/32 - ipv6: 2064:100::aa/128 + ipv6: 2064:100:0:aa::/128 Ethernet1: ipv4: 10.0.1.83/31 ipv6: fc00::2a6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.171/24 ipv6: fc0a::ab/64 ARISTA165T0: properties: - common + - tor bgp: asn: 64165 peers: @@ -4188,16 +4359,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.171/32 - ipv6: 2064:100::ab/128 + ipv6: 2064:100:0:ab::/128 Ethernet1: ipv4: 10.0.1.85/31 ipv6: fc00::2aa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.172/24 ipv6: fc0a::ac/64 ARISTA166T0: properties: - common + - tor bgp: asn: 64166 peers: @@ -4207,16 +4379,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.172/32 - ipv6: 2064:100::ac/128 + ipv6: 2064:100:0:ac::/128 Ethernet1: ipv4: 10.0.1.87/31 ipv6: fc00::2ae/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.173/24 ipv6: fc0a::ad/64 ARISTA167T0: properties: - common + - tor bgp: asn: 64167 peers: @@ -4226,16 +4399,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.173/32 - ipv6: 2064:100::ad/128 + ipv6: 2064:100:0:ad::/128 Ethernet1: ipv4: 10.0.1.89/31 ipv6: fc00::2b2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.174/24 ipv6: fc0a::ae/64 ARISTA168T0: properties: - common + - tor bgp: asn: 64168 peers: @@ -4245,16 +4419,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.174/32 - ipv6: 2064:100::ae/128 + ipv6: 2064:100:0:ae::/128 Ethernet1: ipv4: 10.0.1.91/31 ipv6: fc00::2b6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.175/24 ipv6: fc0a::af/64 ARISTA07T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -4264,16 +4439,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.175/32 - ipv6: 2064:100::af/128 + ipv6: 2064:100:0:af::/128 Ethernet1: ipv4: 10.0.1.93/31 ipv6: fc00::2ba/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.176/24 ipv6: fc0a::b0/64 ARISTA08T2: properties: - common + - spine bgp: asn: 65200 peers: @@ -4283,16 +4459,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.176/32 - ipv6: 2064:100::b0/128 + ipv6: 2064:100:0:b0::/128 Ethernet1: ipv4: 10.0.1.95/31 ipv6: fc00::2be/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.177/24 ipv6: fc0a::b1/64 ARISTA169T0: properties: - common + - tor bgp: asn: 64169 peers: @@ -4302,16 +4479,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.177/32 - ipv6: 2064:100::b1/128 + ipv6: 2064:100:0:b1::/128 Ethernet1: ipv4: 10.0.1.97/31 ipv6: fc00::2c2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.178/24 ipv6: fc0a::b2/64 ARISTA170T0: properties: - common + - tor bgp: asn: 64170 peers: @@ -4321,16 +4499,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.178/32 - ipv6: 2064:100::b2/128 + ipv6: 2064:100:0:b2::/128 Ethernet1: ipv4: 10.0.1.99/31 ipv6: fc00::2c6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.179/24 ipv6: fc0a::b3/64 ARISTA171T0: properties: - common + - tor bgp: asn: 64171 peers: @@ -4340,16 +4519,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.179/32 - ipv6: 2064:100::b3/128 + ipv6: 2064:100:0:b3::/128 Ethernet1: ipv4: 10.0.1.101/31 ipv6: fc00::2ca/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.180/24 ipv6: fc0a::b4/64 ARISTA172T0: properties: - common + - tor bgp: asn: 64172 peers: @@ -4359,16 +4539,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.180/32 - ipv6: 2064:100::b4/128 + ipv6: 2064:100:0:b4::/128 Ethernet1: ipv4: 10.0.1.103/31 ipv6: fc00::2ce/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.181/24 ipv6: fc0a::b5/64 ARISTA173T0: properties: - common + - tor bgp: asn: 64173 peers: @@ -4378,16 +4559,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.181/32 - ipv6: 2064:100::b5/128 + ipv6: 2064:100:0:b5::/128 Ethernet1: ipv4: 10.0.1.105/31 ipv6: fc00::2d2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.182/24 ipv6: fc0a::b6/64 ARISTA174T0: properties: - common + - tor bgp: asn: 64174 peers: @@ -4397,16 +4579,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.182/32 - ipv6: 2064:100::b6/128 + ipv6: 2064:100:0:b6::/128 Ethernet1: ipv4: 10.0.1.107/31 ipv6: fc00::2d6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.183/24 ipv6: fc0a::b7/64 ARISTA175T0: properties: - common + - tor bgp: asn: 64175 peers: @@ -4416,16 +4599,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.183/32 - ipv6: 2064:100::b7/128 + ipv6: 2064:100:0:b7::/128 Ethernet1: ipv4: 10.0.1.109/31 ipv6: fc00::2da/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.184/24 ipv6: fc0a::b8/64 ARISTA176T0: properties: - common + - tor bgp: asn: 64176 peers: @@ -4435,16 +4619,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.184/32 - ipv6: 2064:100::b8/128 + ipv6: 2064:100:0:b8::/128 Ethernet1: ipv4: 10.0.1.111/31 ipv6: fc00::2de/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.185/24 ipv6: fc0a::b9/64 ARISTA177T0: properties: - common + - tor bgp: asn: 64177 peers: @@ -4454,16 +4639,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.185/32 - ipv6: 2064:100::b9/128 + ipv6: 2064:100:0:b9::/128 Ethernet1: ipv4: 10.0.1.113/31 ipv6: fc00::2e2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.186/24 ipv6: fc0a::ba/64 ARISTA178T0: properties: - common + - tor bgp: asn: 64178 peers: @@ -4473,16 +4659,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.186/32 - ipv6: 2064:100::ba/128 + ipv6: 2064:100:0:ba::/128 Ethernet1: ipv4: 10.0.1.115/31 ipv6: fc00::2e6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.187/24 ipv6: fc0a::bb/64 ARISTA179T0: properties: - common + - tor bgp: asn: 64179 peers: @@ -4492,16 +4679,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.187/32 - ipv6: 2064:100::bb/128 + ipv6: 2064:100:0:bb::/128 Ethernet1: ipv4: 10.0.1.117/31 ipv6: fc00::2ea/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.188/24 ipv6: fc0a::bc/64 ARISTA180T0: properties: - common + - tor bgp: asn: 64180 peers: @@ -4511,16 +4699,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.188/32 - ipv6: 2064:100::bc/128 + ipv6: 2064:100:0:bc::/128 Ethernet1: ipv4: 10.0.1.119/31 ipv6: fc00::2ee/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.189/24 ipv6: fc0a::bd/64 ARISTA181T0: properties: - common + - tor bgp: asn: 64181 peers: @@ -4530,16 +4719,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.189/32 - ipv6: 2064:100::bd/128 + ipv6: 2064:100:0:bd::/128 Ethernet1: ipv4: 10.0.1.121/31 ipv6: fc00::2f2/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.190/24 ipv6: fc0a::be/64 ARISTA182T0: properties: - common + - tor bgp: asn: 64182 peers: @@ -4549,16 +4739,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.190/32 - ipv6: 2064:100::be/128 + ipv6: 2064:100:0:be::/128 Ethernet1: ipv4: 10.0.1.123/31 ipv6: fc00::2f6/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.191/24 ipv6: fc0a::bf/64 ARISTA183T0: properties: - common + - tor bgp: asn: 64183 peers: @@ -4568,16 +4759,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.191/32 - ipv6: 2064:100::bf/128 + ipv6: 2064:100:0:bf::/128 Ethernet1: ipv4: 10.0.1.125/31 ipv6: fc00::2fa/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.192/24 ipv6: fc0a::c0/64 ARISTA184T0: properties: - common + - tor bgp: asn: 64184 peers: @@ -4587,16 +4779,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.192/32 - ipv6: 2064:100::c0/128 + ipv6: 2064:100:0:c0::/128 Ethernet1: ipv4: 10.0.1.127/31 ipv6: fc00::2fe/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.193/24 ipv6: fc0a::c1/64 ARISTA185T0: properties: - common + - tor bgp: asn: 64185 peers: @@ -4606,16 +4799,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.193/32 - ipv6: 2064:100::c1/128 + ipv6: 2064:100:0:c1::/128 Ethernet1: ipv4: 10.0.1.129/31 ipv6: fc00::302/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.194/24 ipv6: fc0a::c2/64 ARISTA186T0: properties: - common + - tor bgp: asn: 64186 peers: @@ -4625,16 +4819,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.194/32 - ipv6: 2064:100::c2/128 + ipv6: 2064:100:0:c2::/128 Ethernet1: ipv4: 10.0.1.131/31 ipv6: fc00::306/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.195/24 ipv6: fc0a::c3/64 ARISTA187T0: properties: - common + - tor bgp: asn: 64187 peers: @@ -4644,16 +4839,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.195/32 - ipv6: 2064:100::c3/128 + ipv6: 2064:100:0:c3::/128 Ethernet1: ipv4: 10.0.1.133/31 ipv6: fc00::30a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.196/24 ipv6: fc0a::c4/64 ARISTA188T0: properties: - common + - tor bgp: asn: 64188 peers: @@ -4663,16 +4859,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.196/32 - ipv6: 2064:100::c4/128 + ipv6: 2064:100:0:c4::/128 Ethernet1: ipv4: 10.0.1.135/31 ipv6: fc00::30e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.197/24 ipv6: fc0a::c5/64 ARISTA189T0: properties: - common + - tor bgp: asn: 64189 peers: @@ -4682,16 +4879,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.197/32 - ipv6: 2064:100::c5/128 + ipv6: 2064:100:0:c5::/128 Ethernet1: ipv4: 10.0.1.137/31 ipv6: fc00::312/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.198/24 ipv6: fc0a::c6/64 ARISTA190T0: properties: - common + - tor bgp: asn: 64190 peers: @@ -4701,16 +4899,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.198/32 - ipv6: 2064:100::c6/128 + ipv6: 2064:100:0:c6::/128 Ethernet1: ipv4: 10.0.1.139/31 ipv6: fc00::316/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.199/24 ipv6: fc0a::c7/64 ARISTA191T0: properties: - common + - tor bgp: asn: 64191 peers: @@ -4720,16 +4919,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.199/32 - ipv6: 2064:100::c7/128 + ipv6: 2064:100:0:c7::/128 Ethernet1: ipv4: 10.0.1.141/31 ipv6: fc00::31a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.200/24 ipv6: fc0a::c8/64 ARISTA192T0: properties: - common + - tor bgp: asn: 64192 peers: @@ -4739,16 +4939,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.200/32 - ipv6: 2064:100::c8/128 + ipv6: 2064:100:0:c8::/128 Ethernet1: ipv4: 10.0.1.143/31 ipv6: fc00::31e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.201/24 ipv6: fc0a::c9/64 ARISTA193T0: properties: - common + - tor bgp: asn: 64193 peers: @@ -4758,16 +4959,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.201/32 - ipv6: 2064:100::c9/128 + ipv6: 2064:100:0:c9::/128 Ethernet1: ipv4: 10.0.1.145/31 ipv6: fc00::322/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.202/24 ipv6: fc0a::ca/64 ARISTA194T0: properties: - common + - tor bgp: asn: 64194 peers: @@ -4777,16 +4979,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.202/32 - ipv6: 2064:100::ca/128 + ipv6: 2064:100:0:ca::/128 Ethernet1: ipv4: 10.0.1.147/31 ipv6: fc00::326/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.203/24 ipv6: fc0a::cb/64 ARISTA195T0: properties: - common + - tor bgp: asn: 64195 peers: @@ -4796,16 +4999,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.203/32 - ipv6: 2064:100::cb/128 + ipv6: 2064:100:0:cb::/128 Ethernet1: ipv4: 10.0.1.149/31 ipv6: fc00::32a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.204/24 ipv6: fc0a::cc/64 ARISTA196T0: properties: - common + - tor bgp: asn: 64196 peers: @@ -4815,16 +5019,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.204/32 - ipv6: 2064:100::cc/128 + ipv6: 2064:100:0:cc::/128 Ethernet1: ipv4: 10.0.1.151/31 ipv6: fc00::32e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.205/24 ipv6: fc0a::cd/64 ARISTA197T0: properties: - common + - tor bgp: asn: 64197 peers: @@ -4834,16 +5039,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.205/32 - ipv6: 2064:100::cd/128 + ipv6: 2064:100:0:cd::/128 Ethernet1: ipv4: 10.0.1.153/31 ipv6: fc00::332/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.206/24 ipv6: fc0a::ce/64 ARISTA198T0: properties: - common + - tor bgp: asn: 64198 peers: @@ -4853,16 +5059,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.206/32 - ipv6: 2064:100::ce/128 + ipv6: 2064:100:0:ce::/128 Ethernet1: ipv4: 10.0.1.155/31 ipv6: fc00::336/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.207/24 ipv6: fc0a::cf/64 ARISTA199T0: properties: - common + - tor bgp: asn: 64199 peers: @@ -4872,16 +5079,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.207/32 - ipv6: 2064:100::cf/128 + ipv6: 2064:100:0:cf::/128 Ethernet1: ipv4: 10.0.1.157/31 ipv6: fc00::33a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.208/24 ipv6: fc0a::d0/64 ARISTA200T0: properties: - common + - tor bgp: asn: 64200 peers: @@ -4891,16 +5099,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.208/32 - ipv6: 2064:100::d0/128 + ipv6: 2064:100:0:d0::/128 Ethernet1: ipv4: 10.0.1.159/31 ipv6: fc00::33e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.209/24 ipv6: fc0a::d1/64 ARISTA201T0: properties: - common + - tor bgp: asn: 64201 peers: @@ -4910,16 +5119,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.209/32 - ipv6: 2064:100::d1/128 + ipv6: 2064:100:0:d1::/128 Ethernet1: ipv4: 10.0.1.161/31 ipv6: fc00::342/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.210/24 ipv6: fc0a::d2/64 ARISTA202T0: properties: - common + - tor bgp: asn: 64202 peers: @@ -4929,16 +5139,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.210/32 - ipv6: 2064:100::d2/128 + ipv6: 2064:100:0:d2::/128 Ethernet1: ipv4: 10.0.1.163/31 ipv6: fc00::346/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.211/24 ipv6: fc0a::d3/64 ARISTA203T0: properties: - common + - tor bgp: asn: 64203 peers: @@ -4948,16 +5159,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.211/32 - ipv6: 2064:100::d3/128 + ipv6: 2064:100:0:d3::/128 Ethernet1: ipv4: 10.0.1.165/31 ipv6: fc00::34a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.212/24 ipv6: fc0a::d4/64 ARISTA204T0: properties: - common + - tor bgp: asn: 64204 peers: @@ -4967,16 +5179,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.212/32 - ipv6: 2064:100::d4/128 + ipv6: 2064:100:0:d4::/128 Ethernet1: ipv4: 10.0.1.167/31 ipv6: fc00::34e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.213/24 ipv6: fc0a::d5/64 ARISTA205T0: properties: - common + - tor bgp: asn: 64205 peers: @@ -4986,16 +5199,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.213/32 - ipv6: 2064:100::d5/128 + ipv6: 2064:100:0:d5::/128 Ethernet1: ipv4: 10.0.1.169/31 ipv6: fc00::352/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.214/24 ipv6: fc0a::d6/64 ARISTA206T0: properties: - common + - tor bgp: asn: 64206 peers: @@ -5005,16 +5219,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.214/32 - ipv6: 2064:100::d6/128 + ipv6: 2064:100:0:d6::/128 Ethernet1: ipv4: 10.0.1.171/31 ipv6: fc00::356/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.215/24 ipv6: fc0a::d7/64 ARISTA207T0: properties: - common + - tor bgp: asn: 64207 peers: @@ -5024,16 +5239,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.215/32 - ipv6: 2064:100::d7/128 + ipv6: 2064:100:0:d7::/128 Ethernet1: ipv4: 10.0.1.173/31 ipv6: fc00::35a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.216/24 ipv6: fc0a::d8/64 ARISTA208T0: properties: - common + - tor bgp: asn: 64208 peers: @@ -5043,16 +5259,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.216/32 - ipv6: 2064:100::d8/128 + ipv6: 2064:100:0:d8::/128 Ethernet1: ipv4: 10.0.1.175/31 ipv6: fc00::35e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.217/24 ipv6: fc0a::d9/64 ARISTA209T0: properties: - common + - tor bgp: asn: 64209 peers: @@ -5062,16 +5279,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.217/32 - ipv6: 2064:100::d9/128 + ipv6: 2064:100:0:d9::/128 Ethernet1: ipv4: 10.0.1.177/31 ipv6: fc00::362/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.218/24 ipv6: fc0a::da/64 ARISTA210T0: properties: - common + - tor bgp: asn: 64210 peers: @@ -5081,16 +5299,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.218/32 - ipv6: 2064:100::da/128 + ipv6: 2064:100:0:da::/128 Ethernet1: ipv4: 10.0.1.179/31 ipv6: fc00::366/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.219/24 ipv6: fc0a::db/64 ARISTA211T0: properties: - common + - tor bgp: asn: 64211 peers: @@ -5100,16 +5319,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.219/32 - ipv6: 2064:100::db/128 + ipv6: 2064:100:0:db::/128 Ethernet1: ipv4: 10.0.1.181/31 ipv6: fc00::36a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.220/24 ipv6: fc0a::dc/64 ARISTA212T0: properties: - common + - tor bgp: asn: 64212 peers: @@ -5119,16 +5339,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.220/32 - ipv6: 2064:100::dc/128 + ipv6: 2064:100:0:dc::/128 Ethernet1: ipv4: 10.0.1.183/31 ipv6: fc00::36e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.221/24 ipv6: fc0a::dd/64 ARISTA213T0: properties: - common + - tor bgp: asn: 64213 peers: @@ -5138,16 +5359,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.221/32 - ipv6: 2064:100::dd/128 + ipv6: 2064:100:0:dd::/128 Ethernet1: ipv4: 10.0.1.185/31 ipv6: fc00::372/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.222/24 ipv6: fc0a::de/64 ARISTA214T0: properties: - common + - tor bgp: asn: 64214 peers: @@ -5157,16 +5379,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.222/32 - ipv6: 2064:100::de/128 + ipv6: 2064:100:0:de::/128 Ethernet1: ipv4: 10.0.1.187/31 ipv6: fc00::376/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.223/24 ipv6: fc0a::df/64 ARISTA215T0: properties: - common + - tor bgp: asn: 64215 peers: @@ -5176,16 +5399,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.223/32 - ipv6: 2064:100::df/128 + ipv6: 2064:100:0:df::/128 Ethernet1: ipv4: 10.0.1.189/31 ipv6: fc00::37a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.224/24 ipv6: fc0a::e0/64 ARISTA216T0: properties: - common + - tor bgp: asn: 64216 peers: @@ -5195,16 +5419,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.224/32 - ipv6: 2064:100::e0/128 + ipv6: 2064:100:0:e0::/128 Ethernet1: ipv4: 10.0.1.191/31 ipv6: fc00::37e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.225/24 ipv6: fc0a::e1/64 ARISTA217T0: properties: - common + - tor bgp: asn: 64217 peers: @@ -5214,16 +5439,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.225/32 - ipv6: 2064:100::e1/128 + ipv6: 2064:100:0:e1::/128 Ethernet1: ipv4: 10.0.1.193/31 ipv6: fc00::382/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.226/24 ipv6: fc0a::e2/64 ARISTA218T0: properties: - common + - tor bgp: asn: 64218 peers: @@ -5233,16 +5459,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.226/32 - ipv6: 2064:100::e2/128 + ipv6: 2064:100:0:e2::/128 Ethernet1: ipv4: 10.0.1.195/31 ipv6: fc00::386/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.227/24 ipv6: fc0a::e3/64 ARISTA219T0: properties: - common + - tor bgp: asn: 64219 peers: @@ -5252,16 +5479,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.227/32 - ipv6: 2064:100::e3/128 + ipv6: 2064:100:0:e3::/128 Ethernet1: ipv4: 10.0.1.197/31 ipv6: fc00::38a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.228/24 ipv6: fc0a::e4/64 ARISTA220T0: properties: - common + - tor bgp: asn: 64220 peers: @@ -5271,16 +5499,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.228/32 - ipv6: 2064:100::e4/128 + ipv6: 2064:100:0:e4::/128 Ethernet1: ipv4: 10.0.1.199/31 ipv6: fc00::38e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.229/24 ipv6: fc0a::e5/64 ARISTA221T0: properties: - common + - tor bgp: asn: 64221 peers: @@ -5290,16 +5519,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.229/32 - ipv6: 2064:100::e5/128 + ipv6: 2064:100:0:e5::/128 Ethernet1: ipv4: 10.0.1.201/31 ipv6: fc00::392/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.230/24 ipv6: fc0a::e6/64 ARISTA222T0: properties: - common + - tor bgp: asn: 64222 peers: @@ -5309,16 +5539,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.230/32 - ipv6: 2064:100::e6/128 + ipv6: 2064:100:0:e6::/128 Ethernet1: ipv4: 10.0.1.203/31 ipv6: fc00::396/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.231/24 ipv6: fc0a::e7/64 ARISTA223T0: properties: - common + - tor bgp: asn: 64223 peers: @@ -5328,16 +5559,17 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.231/32 - ipv6: 2064:100::e7/128 + ipv6: 2064:100:0:e7::/128 Ethernet1: ipv4: 10.0.1.205/31 ipv6: fc00::39a/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.232/24 ipv6: fc0a::e8/64 ARISTA224T0: properties: - common + - tor bgp: asn: 64224 peers: @@ -5347,10 +5579,10 @@ configuration: interfaces: Loopback0: ipv4: 100.1.0.232/32 - ipv6: 2064:100::e8/128 + ipv6: 2064:100:0:e8::/128 Ethernet1: ipv4: 10.0.1.207/31 ipv6: fc00::39e/126 - bp_interfaces: + bp_interface: ipv4: 10.10.246.233/24 ipv6: fc0a::e9/64 diff --git a/ansible/vars/topo_t1-isolated-d254u2s1.yaml b/ansible/vars/topo_t1-isolated-d254u2s1.yaml new file mode 100644 index 00000000000..92283cb5438 --- /dev/null +++ b/ansible/vars/topo_t1-isolated-d254u2s1.yaml @@ -0,0 +1,5667 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + vm_offset: 0 + ARISTA02T2: + vlans: + - 1 + vm_offset: 1 + ARISTA01T0: + vlans: + - 2 + vm_offset: 2 + ARISTA02T0: + vlans: + - 3 + vm_offset: 3 + ARISTA03T0: + vlans: + - 4 + vm_offset: 4 + ARISTA04T0: + vlans: + - 5 + vm_offset: 5 + ARISTA05T0: + vlans: + - 6 + vm_offset: 6 + ARISTA06T0: + vlans: + - 7 + vm_offset: 7 + ARISTA07T0: + vlans: + - 8 + vm_offset: 8 + ARISTA08T0: + vlans: + - 9 + vm_offset: 9 + ARISTA09T0: + vlans: + - 10 + vm_offset: 10 + ARISTA10T0: + vlans: + - 11 + vm_offset: 11 + ARISTA11T0: + vlans: + - 12 + vm_offset: 12 + ARISTA12T0: + vlans: + - 13 + vm_offset: 13 + ARISTA13T0: + vlans: + - 14 + vm_offset: 14 + ARISTA14T0: + vlans: + - 15 + vm_offset: 15 + ARISTA15T0: + vlans: + - 16 + vm_offset: 16 + ARISTA16T0: + vlans: + - 17 + vm_offset: 17 + ARISTA17T0: + vlans: + - 18 + vm_offset: 18 + ARISTA18T0: + vlans: + - 19 + vm_offset: 19 + ARISTA19T0: + vlans: + - 20 + vm_offset: 20 + ARISTA20T0: + vlans: + - 21 + vm_offset: 21 + ARISTA21T0: + vlans: + - 22 + vm_offset: 22 + ARISTA22T0: + vlans: + - 23 + vm_offset: 23 + ARISTA23T0: + vlans: + - 24 + vm_offset: 24 + ARISTA24T0: + vlans: + - 25 + vm_offset: 25 + ARISTA25T0: + vlans: + - 26 + vm_offset: 26 + ARISTA26T0: + vlans: + - 27 + vm_offset: 27 + ARISTA27T0: + vlans: + - 28 + vm_offset: 28 + ARISTA28T0: + vlans: + - 29 + vm_offset: 29 + ARISTA29T0: + vlans: + - 30 + vm_offset: 30 + ARISTA30T0: + vlans: + - 31 + vm_offset: 31 + ARISTA31T0: + vlans: + - 32 + vm_offset: 32 + ARISTA32T0: + vlans: + - 33 + vm_offset: 33 + ARISTA33T0: + vlans: + - 34 + vm_offset: 34 + ARISTA34T0: + vlans: + - 35 + vm_offset: 35 + ARISTA35T0: + vlans: + - 36 + vm_offset: 36 + ARISTA36T0: + vlans: + - 37 + vm_offset: 37 + ARISTA37T0: + vlans: + - 38 + vm_offset: 38 + ARISTA38T0: + vlans: + - 39 + vm_offset: 39 + ARISTA39T0: + vlans: + - 40 + vm_offset: 40 + ARISTA40T0: + vlans: + - 41 + vm_offset: 41 + ARISTA41T0: + vlans: + - 42 + vm_offset: 42 + ARISTA42T0: + vlans: + - 43 + vm_offset: 43 + ARISTA43T0: + vlans: + - 44 + vm_offset: 44 + ARISTA44T0: + vlans: + - 45 + vm_offset: 45 + ARISTA45T0: + vlans: + - 46 + vm_offset: 46 + ARISTA46T0: + vlans: + - 47 + vm_offset: 47 + ARISTA47T0: + vlans: + - 48 + vm_offset: 48 + ARISTA48T0: + vlans: + - 49 + vm_offset: 49 + ARISTA49T0: + vlans: + - 50 + vm_offset: 50 + ARISTA50T0: + vlans: + - 51 + vm_offset: 51 + ARISTA51T0: + vlans: + - 52 + vm_offset: 52 + ARISTA52T0: + vlans: + - 53 + vm_offset: 53 + ARISTA53T0: + vlans: + - 54 + vm_offset: 54 + ARISTA54T0: + vlans: + - 55 + vm_offset: 55 + ARISTA55T0: + vlans: + - 56 + vm_offset: 56 + ARISTA56T0: + vlans: + - 57 + vm_offset: 57 + ARISTA57T0: + vlans: + - 58 + vm_offset: 58 + ARISTA58T0: + vlans: + - 59 + vm_offset: 59 + ARISTA59T0: + vlans: + - 60 + vm_offset: 60 + ARISTA60T0: + vlans: + - 61 + vm_offset: 61 + ARISTA61T0: + vlans: + - 62 + vm_offset: 62 + ARISTA62T0: + vlans: + - 63 + vm_offset: 63 + ARISTA63T0: + vlans: + - 64 + vm_offset: 64 + ARISTA64T0: + vlans: + - 65 + vm_offset: 65 + ARISTA65T0: + vlans: + - 66 + vm_offset: 66 + ARISTA66T0: + vlans: + - 67 + vm_offset: 67 + ARISTA67T0: + vlans: + - 68 + vm_offset: 68 + ARISTA68T0: + vlans: + - 69 + vm_offset: 69 + ARISTA69T0: + vlans: + - 70 + vm_offset: 70 + ARISTA70T0: + vlans: + - 71 + vm_offset: 71 + ARISTA71T0: + vlans: + - 72 + vm_offset: 72 + ARISTA72T0: + vlans: + - 73 + vm_offset: 73 + ARISTA73T0: + vlans: + - 74 + vm_offset: 74 + ARISTA74T0: + vlans: + - 75 + vm_offset: 75 + ARISTA75T0: + vlans: + - 76 + vm_offset: 76 + ARISTA76T0: + vlans: + - 77 + vm_offset: 77 + ARISTA77T0: + vlans: + - 78 + vm_offset: 78 + ARISTA78T0: + vlans: + - 79 + vm_offset: 79 + ARISTA79T0: + vlans: + - 80 + vm_offset: 80 + ARISTA80T0: + vlans: + - 81 + vm_offset: 81 + ARISTA81T0: + vlans: + - 82 + vm_offset: 82 + ARISTA82T0: + vlans: + - 83 + vm_offset: 83 + ARISTA83T0: + vlans: + - 84 + vm_offset: 84 + ARISTA84T0: + vlans: + - 85 + vm_offset: 85 + ARISTA85T0: + vlans: + - 86 + vm_offset: 86 + ARISTA86T0: + vlans: + - 87 + vm_offset: 87 + ARISTA87T0: + vlans: + - 88 + vm_offset: 88 + ARISTA88T0: + vlans: + - 89 + vm_offset: 89 + ARISTA89T0: + vlans: + - 90 + vm_offset: 90 + ARISTA90T0: + vlans: + - 91 + vm_offset: 91 + ARISTA91T0: + vlans: + - 92 + vm_offset: 92 + ARISTA92T0: + vlans: + - 93 + vm_offset: 93 + ARISTA93T0: + vlans: + - 94 + vm_offset: 94 + ARISTA94T0: + vlans: + - 95 + vm_offset: 95 + ARISTA95T0: + vlans: + - 96 + vm_offset: 96 + ARISTA96T0: + vlans: + - 97 + vm_offset: 97 + ARISTA97T0: + vlans: + - 98 + vm_offset: 98 + ARISTA98T0: + vlans: + - 99 + vm_offset: 99 + ARISTA99T0: + vlans: + - 100 + vm_offset: 100 + ARISTA100T0: + vlans: + - 101 + vm_offset: 101 + ARISTA101T0: + vlans: + - 102 + vm_offset: 102 + ARISTA102T0: + vlans: + - 103 + vm_offset: 103 + ARISTA103T0: + vlans: + - 104 + vm_offset: 104 + ARISTA104T0: + vlans: + - 105 + vm_offset: 105 + ARISTA105T0: + vlans: + - 106 + vm_offset: 106 + ARISTA106T0: + vlans: + - 107 + vm_offset: 107 + ARISTA107T0: + vlans: + - 108 + vm_offset: 108 + ARISTA108T0: + vlans: + - 109 + vm_offset: 109 + ARISTA109T0: + vlans: + - 110 + vm_offset: 110 + ARISTA110T0: + vlans: + - 111 + vm_offset: 111 + ARISTA111T0: + vlans: + - 112 + vm_offset: 112 + ARISTA112T0: + vlans: + - 113 + vm_offset: 113 + ARISTA113T0: + vlans: + - 114 + vm_offset: 114 + ARISTA114T0: + vlans: + - 115 + vm_offset: 115 + ARISTA115T0: + vlans: + - 116 + vm_offset: 116 + ARISTA116T0: + vlans: + - 117 + vm_offset: 117 + ARISTA117T0: + vlans: + - 118 + vm_offset: 118 + ARISTA118T0: + vlans: + - 119 + vm_offset: 119 + ARISTA119T0: + vlans: + - 120 + vm_offset: 120 + ARISTA120T0: + vlans: + - 121 + vm_offset: 121 + ARISTA121T0: + vlans: + - 122 + vm_offset: 122 + ARISTA122T0: + vlans: + - 123 + vm_offset: 123 + ARISTA123T0: + vlans: + - 124 + vm_offset: 124 + ARISTA124T0: + vlans: + - 125 + vm_offset: 125 + ARISTA125T0: + vlans: + - 126 + vm_offset: 126 + ARISTA126T0: + vlans: + - 127 + vm_offset: 127 + ARISTA127T0: + vlans: + - 128 + vm_offset: 128 + ARISTA128T0: + vlans: + - 129 + vm_offset: 129 + ARISTA129T0: + vlans: + - 130 + vm_offset: 130 + ARISTA130T0: + vlans: + - 131 + vm_offset: 131 + ARISTA131T0: + vlans: + - 132 + vm_offset: 132 + ARISTA132T0: + vlans: + - 133 + vm_offset: 133 + ARISTA133T0: + vlans: + - 134 + vm_offset: 134 + ARISTA134T0: + vlans: + - 135 + vm_offset: 135 + ARISTA135T0: + vlans: + - 136 + vm_offset: 136 + ARISTA136T0: + vlans: + - 137 + vm_offset: 137 + ARISTA137T0: + vlans: + - 138 + vm_offset: 138 + ARISTA138T0: + vlans: + - 139 + vm_offset: 139 + ARISTA139T0: + vlans: + - 140 + vm_offset: 140 + ARISTA140T0: + vlans: + - 141 + vm_offset: 141 + ARISTA141T0: + vlans: + - 142 + vm_offset: 142 + ARISTA142T0: + vlans: + - 143 + vm_offset: 143 + ARISTA143T0: + vlans: + - 144 + vm_offset: 144 + ARISTA144T0: + vlans: + - 145 + vm_offset: 145 + ARISTA145T0: + vlans: + - 146 + vm_offset: 146 + ARISTA146T0: + vlans: + - 147 + vm_offset: 147 + ARISTA147T0: + vlans: + - 148 + vm_offset: 148 + ARISTA148T0: + vlans: + - 149 + vm_offset: 149 + ARISTA149T0: + vlans: + - 150 + vm_offset: 150 + ARISTA150T0: + vlans: + - 151 + vm_offset: 151 + ARISTA151T0: + vlans: + - 152 + vm_offset: 152 + ARISTA152T0: + vlans: + - 153 + vm_offset: 153 + ARISTA153T0: + vlans: + - 154 + vm_offset: 154 + ARISTA154T0: + vlans: + - 155 + vm_offset: 155 + ARISTA155T0: + vlans: + - 156 + vm_offset: 156 + ARISTA156T0: + vlans: + - 157 + vm_offset: 157 + ARISTA157T0: + vlans: + - 158 + vm_offset: 158 + ARISTA158T0: + vlans: + - 159 + vm_offset: 159 + ARISTA159T0: + vlans: + - 160 + vm_offset: 160 + ARISTA160T0: + vlans: + - 161 + vm_offset: 161 + ARISTA161T0: + vlans: + - 162 + vm_offset: 162 + ARISTA162T0: + vlans: + - 163 + vm_offset: 163 + ARISTA163T0: + vlans: + - 164 + vm_offset: 164 + ARISTA164T0: + vlans: + - 165 + vm_offset: 165 + ARISTA165T0: + vlans: + - 166 + vm_offset: 166 + ARISTA166T0: + vlans: + - 167 + vm_offset: 167 + ARISTA167T0: + vlans: + - 168 + vm_offset: 168 + ARISTA168T0: + vlans: + - 169 + vm_offset: 169 + ARISTA169T0: + vlans: + - 170 + vm_offset: 170 + ARISTA170T0: + vlans: + - 171 + vm_offset: 171 + ARISTA171T0: + vlans: + - 172 + vm_offset: 172 + ARISTA172T0: + vlans: + - 173 + vm_offset: 173 + ARISTA173T0: + vlans: + - 174 + vm_offset: 174 + ARISTA174T0: + vlans: + - 175 + vm_offset: 175 + ARISTA175T0: + vlans: + - 176 + vm_offset: 176 + ARISTA176T0: + vlans: + - 177 + vm_offset: 177 + ARISTA177T0: + vlans: + - 178 + vm_offset: 178 + ARISTA178T0: + vlans: + - 179 + vm_offset: 179 + ARISTA179T0: + vlans: + - 180 + vm_offset: 180 + ARISTA180T0: + vlans: + - 181 + vm_offset: 181 + ARISTA181T0: + vlans: + - 182 + vm_offset: 182 + ARISTA182T0: + vlans: + - 183 + vm_offset: 183 + ARISTA183T0: + vlans: + - 184 + vm_offset: 184 + ARISTA184T0: + vlans: + - 185 + vm_offset: 185 + ARISTA185T0: + vlans: + - 186 + vm_offset: 186 + ARISTA186T0: + vlans: + - 187 + vm_offset: 187 + ARISTA187T0: + vlans: + - 188 + vm_offset: 188 + ARISTA188T0: + vlans: + - 189 + vm_offset: 189 + ARISTA189T0: + vlans: + - 190 + vm_offset: 190 + ARISTA190T0: + vlans: + - 191 + vm_offset: 191 + ARISTA191T0: + vlans: + - 192 + vm_offset: 192 + ARISTA192T0: + vlans: + - 193 + vm_offset: 193 + ARISTA193T0: + vlans: + - 194 + vm_offset: 194 + ARISTA194T0: + vlans: + - 195 + vm_offset: 195 + ARISTA195T0: + vlans: + - 196 + vm_offset: 196 + ARISTA196T0: + vlans: + - 197 + vm_offset: 197 + ARISTA197T0: + vlans: + - 198 + vm_offset: 198 + ARISTA198T0: + vlans: + - 199 + vm_offset: 199 + ARISTA199T0: + vlans: + - 200 + vm_offset: 200 + ARISTA200T0: + vlans: + - 201 + vm_offset: 201 + ARISTA201T0: + vlans: + - 202 + vm_offset: 202 + ARISTA202T0: + vlans: + - 203 + vm_offset: 203 + ARISTA203T0: + vlans: + - 204 + vm_offset: 204 + ARISTA204T0: + vlans: + - 205 + vm_offset: 205 + ARISTA205T0: + vlans: + - 206 + vm_offset: 206 + ARISTA206T0: + vlans: + - 207 + vm_offset: 207 + ARISTA207T0: + vlans: + - 208 + vm_offset: 208 + ARISTA208T0: + vlans: + - 209 + vm_offset: 209 + ARISTA209T0: + vlans: + - 210 + vm_offset: 210 + ARISTA210T0: + vlans: + - 211 + vm_offset: 211 + ARISTA211T0: + vlans: + - 212 + vm_offset: 212 + ARISTA212T0: + vlans: + - 213 + vm_offset: 213 + ARISTA213T0: + vlans: + - 214 + vm_offset: 214 + ARISTA214T0: + vlans: + - 215 + vm_offset: 215 + ARISTA215T0: + vlans: + - 216 + vm_offset: 216 + ARISTA216T0: + vlans: + - 217 + vm_offset: 217 + ARISTA217T0: + vlans: + - 218 + vm_offset: 218 + ARISTA218T0: + vlans: + - 219 + vm_offset: 219 + ARISTA219T0: + vlans: + - 220 + vm_offset: 220 + ARISTA220T0: + vlans: + - 221 + vm_offset: 221 + ARISTA221T0: + vlans: + - 222 + vm_offset: 222 + ARISTA222T0: + vlans: + - 223 + vm_offset: 223 + ARISTA223T0: + vlans: + - 224 + vm_offset: 224 + ARISTA224T0: + vlans: + - 225 + vm_offset: 225 + ARISTA225T0: + vlans: + - 226 + vm_offset: 226 + ARISTA226T0: + vlans: + - 227 + vm_offset: 227 + ARISTA227T0: + vlans: + - 228 + vm_offset: 228 + ARISTA228T0: + vlans: + - 229 + vm_offset: 229 + ARISTA229T0: + vlans: + - 230 + vm_offset: 230 + ARISTA230T0: + vlans: + - 231 + vm_offset: 231 + ARISTA231T0: + vlans: + - 232 + vm_offset: 232 + ARISTA232T0: + vlans: + - 233 + vm_offset: 233 + ARISTA233T0: + vlans: + - 234 + vm_offset: 234 + ARISTA234T0: + vlans: + - 235 + vm_offset: 235 + ARISTA235T0: + vlans: + - 236 + vm_offset: 236 + ARISTA236T0: + vlans: + - 237 + vm_offset: 237 + ARISTA237T0: + vlans: + - 238 + vm_offset: 238 + ARISTA238T0: + vlans: + - 239 + vm_offset: 239 + ARISTA239T0: + vlans: + - 240 + vm_offset: 240 + ARISTA240T0: + vlans: + - 241 + vm_offset: 241 + ARISTA241T0: + vlans: + - 242 + vm_offset: 242 + ARISTA242T0: + vlans: + - 243 + vm_offset: 243 + ARISTA243T0: + vlans: + - 244 + vm_offset: 244 + ARISTA244T0: + vlans: + - 245 + vm_offset: 245 + ARISTA245T0: + vlans: + - 246 + vm_offset: 246 + ARISTA246T0: + vlans: + - 247 + vm_offset: 247 + ARISTA247T0: + vlans: + - 248 + vm_offset: 248 + ARISTA248T0: + vlans: + - 249 + vm_offset: 249 + ARISTA249T0: + vlans: + - 250 + vm_offset: 250 + ARISTA250T0: + vlans: + - 251 + vm_offset: 251 + ARISTA251T0: + vlans: + - 252 + vm_offset: 252 + ARISTA252T0: + vlans: + - 253 + vm_offset: 253 + ARISTA253T0: + vlans: + - 254 + vm_offset: 254 + ARISTA254T0: + vlans: + - 255 + vm_offset: 255 + +configuration_properties: + common: + dut_asn: 4200100000 + dut_type: LeafRouter + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + nhipv6: FC0A::FF + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + router-id: 0.12.0.1 + asn: 4200200000 + peers: + 4200100000: + - fc00:a::1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1::1/128 + Ethernet1: + ipv6: fc00:a::2/126 + bp_interface: + ipv6: fc00:b::1/64 + + ARISTA02T2: + properties: + - common + - spine + bgp: + router-id: 0.12.0.2 + asn: 4200200000 + peers: + 4200100000: + - fc00:a::5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2::1/128 + Ethernet1: + ipv6: fc00:a::6/126 + bp_interface: + ipv6: fc00:b::2/64 + + ARISTA01T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.3 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3::1/128 + Ethernet1: + ipv6: fc00:a::a/126 + bp_interface: + ipv6: fc00:b::3/64 + + ARISTA02T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.4 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d + interfaces: + Loopback0: + ipv6: fc00:c:c:4::1/128 + Ethernet1: + ipv6: fc00:a::e/126 + bp_interface: + ipv6: fc00:b::4/64 + + ARISTA03T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.5 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::11 + interfaces: + Loopback0: + ipv6: fc00:c:c:5::1/128 + Ethernet1: + ipv6: fc00:a::12/126 + bp_interface: + ipv6: fc00:b::5/64 + + ARISTA04T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.6 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::15 + interfaces: + Loopback0: + ipv6: fc00:c:c:6::1/128 + Ethernet1: + ipv6: fc00:a::16/126 + bp_interface: + ipv6: fc00:b::6/64 + + ARISTA05T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.7 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::19 + interfaces: + Loopback0: + ipv6: fc00:c:c:7::1/128 + Ethernet1: + ipv6: fc00:a::1a/126 + bp_interface: + ipv6: fc00:b::7/64 + + ARISTA06T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.8 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d + interfaces: + Loopback0: + ipv6: fc00:c:c:8::1/128 + Ethernet1: + ipv6: fc00:a::1e/126 + bp_interface: + ipv6: fc00:b::8/64 + + ARISTA07T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.9 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::21 + interfaces: + Loopback0: + ipv6: fc00:c:c:9::1/128 + Ethernet1: + ipv6: fc00:a::22/126 + bp_interface: + ipv6: fc00:b::9/64 + + ARISTA08T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.10 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::25 + interfaces: + Loopback0: + ipv6: fc00:c:c:a::1/128 + Ethernet1: + ipv6: fc00:a::26/126 + bp_interface: + ipv6: fc00:b::a/64 + + ARISTA09T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.11 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::29 + interfaces: + Loopback0: + ipv6: fc00:c:c:b::1/128 + Ethernet1: + ipv6: fc00:a::2a/126 + bp_interface: + ipv6: fc00:b::b/64 + + ARISTA10T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.12 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d + interfaces: + Loopback0: + ipv6: fc00:c:c:c::1/128 + Ethernet1: + ipv6: fc00:a::2e/126 + bp_interface: + ipv6: fc00:b::c/64 + + ARISTA11T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.13 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::31 + interfaces: + Loopback0: + ipv6: fc00:c:c:d::1/128 + Ethernet1: + ipv6: fc00:a::32/126 + bp_interface: + ipv6: fc00:b::d/64 + + ARISTA12T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.14 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::35 + interfaces: + Loopback0: + ipv6: fc00:c:c:e::1/128 + Ethernet1: + ipv6: fc00:a::36/126 + bp_interface: + ipv6: fc00:b::e/64 + + ARISTA13T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.15 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::39 + interfaces: + Loopback0: + ipv6: fc00:c:c:f::1/128 + Ethernet1: + ipv6: fc00:a::3a/126 + bp_interface: + ipv6: fc00:b::f/64 + + ARISTA14T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.16 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d + interfaces: + Loopback0: + ipv6: fc00:c:c:10::1/128 + Ethernet1: + ipv6: fc00:a::3e/126 + bp_interface: + ipv6: fc00:b::10/64 + + ARISTA15T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.17 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::41 + interfaces: + Loopback0: + ipv6: fc00:c:c:11::1/128 + Ethernet1: + ipv6: fc00:a::42/126 + bp_interface: + ipv6: fc00:b::11/64 + + ARISTA16T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.18 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::45 + interfaces: + Loopback0: + ipv6: fc00:c:c:12::1/128 + Ethernet1: + ipv6: fc00:a::46/126 + bp_interface: + ipv6: fc00:b::12/64 + + ARISTA17T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.19 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::49 + interfaces: + Loopback0: + ipv6: fc00:c:c:13::1/128 + Ethernet1: + ipv6: fc00:a::4a/126 + bp_interface: + ipv6: fc00:b::13/64 + + ARISTA18T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.20 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4d + interfaces: + Loopback0: + ipv6: fc00:c:c:14::1/128 + Ethernet1: + ipv6: fc00:a::4e/126 + bp_interface: + ipv6: fc00:b::14/64 + + ARISTA19T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.21 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::51 + interfaces: + Loopback0: + ipv6: fc00:c:c:15::1/128 + Ethernet1: + ipv6: fc00:a::52/126 + bp_interface: + ipv6: fc00:b::15/64 + + ARISTA20T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.22 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::55 + interfaces: + Loopback0: + ipv6: fc00:c:c:16::1/128 + Ethernet1: + ipv6: fc00:a::56/126 + bp_interface: + ipv6: fc00:b::16/64 + + ARISTA21T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.23 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::59 + interfaces: + Loopback0: + ipv6: fc00:c:c:17::1/128 + Ethernet1: + ipv6: fc00:a::5a/126 + bp_interface: + ipv6: fc00:b::17/64 + + ARISTA22T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.24 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5d + interfaces: + Loopback0: + ipv6: fc00:c:c:18::1/128 + Ethernet1: + ipv6: fc00:a::5e/126 + bp_interface: + ipv6: fc00:b::18/64 + + ARISTA23T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.25 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::61 + interfaces: + Loopback0: + ipv6: fc00:c:c:19::1/128 + Ethernet1: + ipv6: fc00:a::62/126 + bp_interface: + ipv6: fc00:b::19/64 + + ARISTA24T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.26 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::65 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a::1/128 + Ethernet1: + ipv6: fc00:a::66/126 + bp_interface: + ipv6: fc00:b::1a/64 + + ARISTA25T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.27 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::69 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b::1/128 + Ethernet1: + ipv6: fc00:a::6a/126 + bp_interface: + ipv6: fc00:b::1b/64 + + ARISTA26T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.28 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c::1/128 + Ethernet1: + ipv6: fc00:a::6e/126 + bp_interface: + ipv6: fc00:b::1c/64 + + ARISTA27T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.29 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::71 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d::1/128 + Ethernet1: + ipv6: fc00:a::72/126 + bp_interface: + ipv6: fc00:b::1d/64 + + ARISTA28T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.30 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::75 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e::1/128 + Ethernet1: + ipv6: fc00:a::76/126 + bp_interface: + ipv6: fc00:b::1e/64 + + ARISTA29T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.31 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::79 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f::1/128 + Ethernet1: + ipv6: fc00:a::7a/126 + bp_interface: + ipv6: fc00:b::1f/64 + + ARISTA30T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.32 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7d + interfaces: + Loopback0: + ipv6: fc00:c:c:20::1/128 + Ethernet1: + ipv6: fc00:a::7e/126 + bp_interface: + ipv6: fc00:b::20/64 + + ARISTA31T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.33 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::81 + interfaces: + Loopback0: + ipv6: fc00:c:c:21::1/128 + Ethernet1: + ipv6: fc00:a::82/126 + bp_interface: + ipv6: fc00:b::21/64 + + ARISTA32T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.34 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::85 + interfaces: + Loopback0: + ipv6: fc00:c:c:22::1/128 + Ethernet1: + ipv6: fc00:a::86/126 + bp_interface: + ipv6: fc00:b::22/64 + + ARISTA33T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.35 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::89 + interfaces: + Loopback0: + ipv6: fc00:c:c:23::1/128 + Ethernet1: + ipv6: fc00:a::8a/126 + bp_interface: + ipv6: fc00:b::23/64 + + ARISTA34T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.36 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::8d + interfaces: + Loopback0: + ipv6: fc00:c:c:24::1/128 + Ethernet1: + ipv6: fc00:a::8e/126 + bp_interface: + ipv6: fc00:b::24/64 + + ARISTA35T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.37 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::91 + interfaces: + Loopback0: + ipv6: fc00:c:c:25::1/128 + Ethernet1: + ipv6: fc00:a::92/126 + bp_interface: + ipv6: fc00:b::25/64 + + ARISTA36T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.38 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::95 + interfaces: + Loopback0: + ipv6: fc00:c:c:26::1/128 + Ethernet1: + ipv6: fc00:a::96/126 + bp_interface: + ipv6: fc00:b::26/64 + + ARISTA37T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.39 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::99 + interfaces: + Loopback0: + ipv6: fc00:c:c:27::1/128 + Ethernet1: + ipv6: fc00:a::9a/126 + bp_interface: + ipv6: fc00:b::27/64 + + ARISTA38T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.40 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::9d + interfaces: + Loopback0: + ipv6: fc00:c:c:28::1/128 + Ethernet1: + ipv6: fc00:a::9e/126 + bp_interface: + ipv6: fc00:b::28/64 + + ARISTA39T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.41 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:29::1/128 + Ethernet1: + ipv6: fc00:a::a2/126 + bp_interface: + ipv6: fc00:b::29/64 + + ARISTA40T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.42 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2a::1/128 + Ethernet1: + ipv6: fc00:a::a6/126 + bp_interface: + ipv6: fc00:b::2a/64 + + ARISTA41T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.43 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2b::1/128 + Ethernet1: + ipv6: fc00:a::aa/126 + bp_interface: + ipv6: fc00:b::2b/64 + + ARISTA42T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.44 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::ad + interfaces: + Loopback0: + ipv6: fc00:c:c:2c::1/128 + Ethernet1: + ipv6: fc00:a::ae/126 + bp_interface: + ipv6: fc00:b::2c/64 + + ARISTA43T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.45 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:2d::1/128 + Ethernet1: + ipv6: fc00:a::b2/126 + bp_interface: + ipv6: fc00:b::2d/64 + + ARISTA44T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.46 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2e::1/128 + Ethernet1: + ipv6: fc00:a::b6/126 + bp_interface: + ipv6: fc00:b::2e/64 + + ARISTA45T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.47 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2f::1/128 + Ethernet1: + ipv6: fc00:a::ba/126 + bp_interface: + ipv6: fc00:b::2f/64 + + ARISTA46T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.48 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::bd + interfaces: + Loopback0: + ipv6: fc00:c:c:30::1/128 + Ethernet1: + ipv6: fc00:a::be/126 + bp_interface: + ipv6: fc00:b::30/64 + + ARISTA47T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.49 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:31::1/128 + Ethernet1: + ipv6: fc00:a::c2/126 + bp_interface: + ipv6: fc00:b::31/64 + + ARISTA48T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.50 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:32::1/128 + Ethernet1: + ipv6: fc00:a::c6/126 + bp_interface: + ipv6: fc00:b::32/64 + + ARISTA49T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.51 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:33::1/128 + Ethernet1: + ipv6: fc00:a::ca/126 + bp_interface: + ipv6: fc00:b::33/64 + + ARISTA50T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.52 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::cd + interfaces: + Loopback0: + ipv6: fc00:c:c:34::1/128 + Ethernet1: + ipv6: fc00:a::ce/126 + bp_interface: + ipv6: fc00:b::34/64 + + ARISTA51T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.53 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:35::1/128 + Ethernet1: + ipv6: fc00:a::d2/126 + bp_interface: + ipv6: fc00:b::35/64 + + ARISTA52T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.54 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:36::1/128 + Ethernet1: + ipv6: fc00:a::d6/126 + bp_interface: + ipv6: fc00:b::36/64 + + ARISTA53T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.55 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:37::1/128 + Ethernet1: + ipv6: fc00:a::da/126 + bp_interface: + ipv6: fc00:b::37/64 + + ARISTA54T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.56 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::dd + interfaces: + Loopback0: + ipv6: fc00:c:c:38::1/128 + Ethernet1: + ipv6: fc00:a::de/126 + bp_interface: + ipv6: fc00:b::38/64 + + ARISTA55T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.57 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:39::1/128 + Ethernet1: + ipv6: fc00:a::e2/126 + bp_interface: + ipv6: fc00:b::39/64 + + ARISTA56T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.58 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3a::1/128 + Ethernet1: + ipv6: fc00:a::e6/126 + bp_interface: + ipv6: fc00:b::3a/64 + + ARISTA57T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.59 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3b::1/128 + Ethernet1: + ipv6: fc00:a::ea/126 + bp_interface: + ipv6: fc00:b::3b/64 + + ARISTA58T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.60 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::ed + interfaces: + Loopback0: + ipv6: fc00:c:c:3c::1/128 + Ethernet1: + ipv6: fc00:a::ee/126 + bp_interface: + ipv6: fc00:b::3c/64 + + ARISTA59T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.61 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:3d::1/128 + Ethernet1: + ipv6: fc00:a::f2/126 + bp_interface: + ipv6: fc00:b::3d/64 + + ARISTA60T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.62 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3e::1/128 + Ethernet1: + ipv6: fc00:a::f6/126 + bp_interface: + ipv6: fc00:b::3e/64 + + ARISTA61T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.63 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3f::1/128 + Ethernet1: + ipv6: fc00:a::fa/126 + bp_interface: + ipv6: fc00:b::3f/64 + + ARISTA62T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.64 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::fd + interfaces: + Loopback0: + ipv6: fc00:c:c:40::1/128 + Ethernet1: + ipv6: fc00:a::fe/126 + bp_interface: + ipv6: fc00:b::40/64 + + ARISTA63T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.65 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::101 + interfaces: + Loopback0: + ipv6: fc00:c:c:41::1/128 + Ethernet1: + ipv6: fc00:a::102/126 + bp_interface: + ipv6: fc00:b::41/64 + + ARISTA64T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.66 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::105 + interfaces: + Loopback0: + ipv6: fc00:c:c:42::1/128 + Ethernet1: + ipv6: fc00:a::106/126 + bp_interface: + ipv6: fc00:b::42/64 + + ARISTA65T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.67 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::109 + interfaces: + Loopback0: + ipv6: fc00:c:c:43::1/128 + Ethernet1: + ipv6: fc00:a::10a/126 + bp_interface: + ipv6: fc00:b::43/64 + + ARISTA66T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.68 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::10d + interfaces: + Loopback0: + ipv6: fc00:c:c:44::1/128 + Ethernet1: + ipv6: fc00:a::10e/126 + bp_interface: + ipv6: fc00:b::44/64 + + ARISTA67T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.69 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::111 + interfaces: + Loopback0: + ipv6: fc00:c:c:45::1/128 + Ethernet1: + ipv6: fc00:a::112/126 + bp_interface: + ipv6: fc00:b::45/64 + + ARISTA68T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.70 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::115 + interfaces: + Loopback0: + ipv6: fc00:c:c:46::1/128 + Ethernet1: + ipv6: fc00:a::116/126 + bp_interface: + ipv6: fc00:b::46/64 + + ARISTA69T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.71 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::119 + interfaces: + Loopback0: + ipv6: fc00:c:c:47::1/128 + Ethernet1: + ipv6: fc00:a::11a/126 + bp_interface: + ipv6: fc00:b::47/64 + + ARISTA70T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.72 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::11d + interfaces: + Loopback0: + ipv6: fc00:c:c:48::1/128 + Ethernet1: + ipv6: fc00:a::11e/126 + bp_interface: + ipv6: fc00:b::48/64 + + ARISTA71T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.73 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::121 + interfaces: + Loopback0: + ipv6: fc00:c:c:49::1/128 + Ethernet1: + ipv6: fc00:a::122/126 + bp_interface: + ipv6: fc00:b::49/64 + + ARISTA72T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.74 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::125 + interfaces: + Loopback0: + ipv6: fc00:c:c:4a::1/128 + Ethernet1: + ipv6: fc00:a::126/126 + bp_interface: + ipv6: fc00:b::4a/64 + + ARISTA73T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.75 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::129 + interfaces: + Loopback0: + ipv6: fc00:c:c:4b::1/128 + Ethernet1: + ipv6: fc00:a::12a/126 + bp_interface: + ipv6: fc00:b::4b/64 + + ARISTA74T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.76 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::12d + interfaces: + Loopback0: + ipv6: fc00:c:c:4c::1/128 + Ethernet1: + ipv6: fc00:a::12e/126 + bp_interface: + ipv6: fc00:b::4c/64 + + ARISTA75T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.77 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::131 + interfaces: + Loopback0: + ipv6: fc00:c:c:4d::1/128 + Ethernet1: + ipv6: fc00:a::132/126 + bp_interface: + ipv6: fc00:b::4d/64 + + ARISTA76T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.78 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::135 + interfaces: + Loopback0: + ipv6: fc00:c:c:4e::1/128 + Ethernet1: + ipv6: fc00:a::136/126 + bp_interface: + ipv6: fc00:b::4e/64 + + ARISTA77T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.79 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::139 + interfaces: + Loopback0: + ipv6: fc00:c:c:4f::1/128 + Ethernet1: + ipv6: fc00:a::13a/126 + bp_interface: + ipv6: fc00:b::4f/64 + + ARISTA78T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.80 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::13d + interfaces: + Loopback0: + ipv6: fc00:c:c:50::1/128 + Ethernet1: + ipv6: fc00:a::13e/126 + bp_interface: + ipv6: fc00:b::50/64 + + ARISTA79T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.81 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::141 + interfaces: + Loopback0: + ipv6: fc00:c:c:51::1/128 + Ethernet1: + ipv6: fc00:a::142/126 + bp_interface: + ipv6: fc00:b::51/64 + + ARISTA80T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.82 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::145 + interfaces: + Loopback0: + ipv6: fc00:c:c:52::1/128 + Ethernet1: + ipv6: fc00:a::146/126 + bp_interface: + ipv6: fc00:b::52/64 + + ARISTA81T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.83 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::149 + interfaces: + Loopback0: + ipv6: fc00:c:c:53::1/128 + Ethernet1: + ipv6: fc00:a::14a/126 + bp_interface: + ipv6: fc00:b::53/64 + + ARISTA82T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.84 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::14d + interfaces: + Loopback0: + ipv6: fc00:c:c:54::1/128 + Ethernet1: + ipv6: fc00:a::14e/126 + bp_interface: + ipv6: fc00:b::54/64 + + ARISTA83T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.85 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::151 + interfaces: + Loopback0: + ipv6: fc00:c:c:55::1/128 + Ethernet1: + ipv6: fc00:a::152/126 + bp_interface: + ipv6: fc00:b::55/64 + + ARISTA84T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.86 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::155 + interfaces: + Loopback0: + ipv6: fc00:c:c:56::1/128 + Ethernet1: + ipv6: fc00:a::156/126 + bp_interface: + ipv6: fc00:b::56/64 + + ARISTA85T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.87 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::159 + interfaces: + Loopback0: + ipv6: fc00:c:c:57::1/128 + Ethernet1: + ipv6: fc00:a::15a/126 + bp_interface: + ipv6: fc00:b::57/64 + + ARISTA86T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.88 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::15d + interfaces: + Loopback0: + ipv6: fc00:c:c:58::1/128 + Ethernet1: + ipv6: fc00:a::15e/126 + bp_interface: + ipv6: fc00:b::58/64 + + ARISTA87T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.89 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::161 + interfaces: + Loopback0: + ipv6: fc00:c:c:59::1/128 + Ethernet1: + ipv6: fc00:a::162/126 + bp_interface: + ipv6: fc00:b::59/64 + + ARISTA88T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.90 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::165 + interfaces: + Loopback0: + ipv6: fc00:c:c:5a::1/128 + Ethernet1: + ipv6: fc00:a::166/126 + bp_interface: + ipv6: fc00:b::5a/64 + + ARISTA89T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.91 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::169 + interfaces: + Loopback0: + ipv6: fc00:c:c:5b::1/128 + Ethernet1: + ipv6: fc00:a::16a/126 + bp_interface: + ipv6: fc00:b::5b/64 + + ARISTA90T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.92 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::16d + interfaces: + Loopback0: + ipv6: fc00:c:c:5c::1/128 + Ethernet1: + ipv6: fc00:a::16e/126 + bp_interface: + ipv6: fc00:b::5c/64 + + ARISTA91T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.93 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::171 + interfaces: + Loopback0: + ipv6: fc00:c:c:5d::1/128 + Ethernet1: + ipv6: fc00:a::172/126 + bp_interface: + ipv6: fc00:b::5d/64 + + ARISTA92T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.94 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::175 + interfaces: + Loopback0: + ipv6: fc00:c:c:5e::1/128 + Ethernet1: + ipv6: fc00:a::176/126 + bp_interface: + ipv6: fc00:b::5e/64 + + ARISTA93T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.95 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::179 + interfaces: + Loopback0: + ipv6: fc00:c:c:5f::1/128 + Ethernet1: + ipv6: fc00:a::17a/126 + bp_interface: + ipv6: fc00:b::5f/64 + + ARISTA94T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.96 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::17d + interfaces: + Loopback0: + ipv6: fc00:c:c:60::1/128 + Ethernet1: + ipv6: fc00:a::17e/126 + bp_interface: + ipv6: fc00:b::60/64 + + ARISTA95T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.97 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::181 + interfaces: + Loopback0: + ipv6: fc00:c:c:61::1/128 + Ethernet1: + ipv6: fc00:a::182/126 + bp_interface: + ipv6: fc00:b::61/64 + + ARISTA96T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.98 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::185 + interfaces: + Loopback0: + ipv6: fc00:c:c:62::1/128 + Ethernet1: + ipv6: fc00:a::186/126 + bp_interface: + ipv6: fc00:b::62/64 + + ARISTA97T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.99 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::189 + interfaces: + Loopback0: + ipv6: fc00:c:c:63::1/128 + Ethernet1: + ipv6: fc00:a::18a/126 + bp_interface: + ipv6: fc00:b::63/64 + + ARISTA98T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.100 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::18d + interfaces: + Loopback0: + ipv6: fc00:c:c:64::1/128 + Ethernet1: + ipv6: fc00:a::18e/126 + bp_interface: + ipv6: fc00:b::64/64 + + ARISTA99T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.101 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::191 + interfaces: + Loopback0: + ipv6: fc00:c:c:65::1/128 + Ethernet1: + ipv6: fc00:a::192/126 + bp_interface: + ipv6: fc00:b::65/64 + + ARISTA100T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.102 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::195 + interfaces: + Loopback0: + ipv6: fc00:c:c:66::1/128 + Ethernet1: + ipv6: fc00:a::196/126 + bp_interface: + ipv6: fc00:b::66/64 + + ARISTA101T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.103 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::199 + interfaces: + Loopback0: + ipv6: fc00:c:c:67::1/128 + Ethernet1: + ipv6: fc00:a::19a/126 + bp_interface: + ipv6: fc00:b::67/64 + + ARISTA102T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.104 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::19d + interfaces: + Loopback0: + ipv6: fc00:c:c:68::1/128 + Ethernet1: + ipv6: fc00:a::19e/126 + bp_interface: + ipv6: fc00:b::68/64 + + ARISTA103T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.105 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:69::1/128 + Ethernet1: + ipv6: fc00:a::1a2/126 + bp_interface: + ipv6: fc00:b::69/64 + + ARISTA104T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.106 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6a::1/128 + Ethernet1: + ipv6: fc00:a::1a6/126 + bp_interface: + ipv6: fc00:b::6a/64 + + ARISTA105T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.107 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6b::1/128 + Ethernet1: + ipv6: fc00:a::1aa/126 + bp_interface: + ipv6: fc00:b::6b/64 + + ARISTA106T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.108 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1ad + interfaces: + Loopback0: + ipv6: fc00:c:c:6c::1/128 + Ethernet1: + ipv6: fc00:a::1ae/126 + bp_interface: + ipv6: fc00:b::6c/64 + + ARISTA107T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.109 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:6d::1/128 + Ethernet1: + ipv6: fc00:a::1b2/126 + bp_interface: + ipv6: fc00:b::6d/64 + + ARISTA108T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.110 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6e::1/128 + Ethernet1: + ipv6: fc00:a::1b6/126 + bp_interface: + ipv6: fc00:b::6e/64 + + ARISTA109T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.111 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6f::1/128 + Ethernet1: + ipv6: fc00:a::1ba/126 + bp_interface: + ipv6: fc00:b::6f/64 + + ARISTA110T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.112 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1bd + interfaces: + Loopback0: + ipv6: fc00:c:c:70::1/128 + Ethernet1: + ipv6: fc00:a::1be/126 + bp_interface: + ipv6: fc00:b::70/64 + + ARISTA111T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.113 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:71::1/128 + Ethernet1: + ipv6: fc00:a::1c2/126 + bp_interface: + ipv6: fc00:b::71/64 + + ARISTA112T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.114 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:72::1/128 + Ethernet1: + ipv6: fc00:a::1c6/126 + bp_interface: + ipv6: fc00:b::72/64 + + ARISTA113T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.115 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:73::1/128 + Ethernet1: + ipv6: fc00:a::1ca/126 + bp_interface: + ipv6: fc00:b::73/64 + + ARISTA114T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.116 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1cd + interfaces: + Loopback0: + ipv6: fc00:c:c:74::1/128 + Ethernet1: + ipv6: fc00:a::1ce/126 + bp_interface: + ipv6: fc00:b::74/64 + + ARISTA115T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.117 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:75::1/128 + Ethernet1: + ipv6: fc00:a::1d2/126 + bp_interface: + ipv6: fc00:b::75/64 + + ARISTA116T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.118 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:76::1/128 + Ethernet1: + ipv6: fc00:a::1d6/126 + bp_interface: + ipv6: fc00:b::76/64 + + ARISTA117T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.119 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:77::1/128 + Ethernet1: + ipv6: fc00:a::1da/126 + bp_interface: + ipv6: fc00:b::77/64 + + ARISTA118T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.120 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1dd + interfaces: + Loopback0: + ipv6: fc00:c:c:78::1/128 + Ethernet1: + ipv6: fc00:a::1de/126 + bp_interface: + ipv6: fc00:b::78/64 + + ARISTA119T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.121 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:79::1/128 + Ethernet1: + ipv6: fc00:a::1e2/126 + bp_interface: + ipv6: fc00:b::79/64 + + ARISTA120T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.122 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7a::1/128 + Ethernet1: + ipv6: fc00:a::1e6/126 + bp_interface: + ipv6: fc00:b::7a/64 + + ARISTA121T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.123 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7b::1/128 + Ethernet1: + ipv6: fc00:a::1ea/126 + bp_interface: + ipv6: fc00:b::7b/64 + + ARISTA122T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.124 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1ed + interfaces: + Loopback0: + ipv6: fc00:c:c:7c::1/128 + Ethernet1: + ipv6: fc00:a::1ee/126 + bp_interface: + ipv6: fc00:b::7c/64 + + ARISTA123T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.125 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:7d::1/128 + Ethernet1: + ipv6: fc00:a::1f2/126 + bp_interface: + ipv6: fc00:b::7d/64 + + ARISTA124T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.126 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7e::1/128 + Ethernet1: + ipv6: fc00:a::1f6/126 + bp_interface: + ipv6: fc00:b::7e/64 + + ARISTA125T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.127 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7f::1/128 + Ethernet1: + ipv6: fc00:a::1fa/126 + bp_interface: + ipv6: fc00:b::7f/64 + + ARISTA126T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.128 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1fd + interfaces: + Loopback0: + ipv6: fc00:c:c:80::1/128 + Ethernet1: + ipv6: fc00:a::1fe/126 + bp_interface: + ipv6: fc00:b::80/64 + + ARISTA127T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.129 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::201 + interfaces: + Loopback0: + ipv6: fc00:c:c:81::1/128 + Ethernet1: + ipv6: fc00:a::202/126 + bp_interface: + ipv6: fc00:b::81/64 + + ARISTA128T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.130 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::205 + interfaces: + Loopback0: + ipv6: fc00:c:c:82::1/128 + Ethernet1: + ipv6: fc00:a::206/126 + bp_interface: + ipv6: fc00:b::82/64 + + ARISTA129T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.131 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::209 + interfaces: + Loopback0: + ipv6: fc00:c:c:83::1/128 + Ethernet1: + ipv6: fc00:a::20a/126 + bp_interface: + ipv6: fc00:b::83/64 + + ARISTA130T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.132 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::20d + interfaces: + Loopback0: + ipv6: fc00:c:c:84::1/128 + Ethernet1: + ipv6: fc00:a::20e/126 + bp_interface: + ipv6: fc00:b::84/64 + + ARISTA131T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.133 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::211 + interfaces: + Loopback0: + ipv6: fc00:c:c:85::1/128 + Ethernet1: + ipv6: fc00:a::212/126 + bp_interface: + ipv6: fc00:b::85/64 + + ARISTA132T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.134 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::215 + interfaces: + Loopback0: + ipv6: fc00:c:c:86::1/128 + Ethernet1: + ipv6: fc00:a::216/126 + bp_interface: + ipv6: fc00:b::86/64 + + ARISTA133T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.135 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::219 + interfaces: + Loopback0: + ipv6: fc00:c:c:87::1/128 + Ethernet1: + ipv6: fc00:a::21a/126 + bp_interface: + ipv6: fc00:b::87/64 + + ARISTA134T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.136 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::21d + interfaces: + Loopback0: + ipv6: fc00:c:c:88::1/128 + Ethernet1: + ipv6: fc00:a::21e/126 + bp_interface: + ipv6: fc00:b::88/64 + + ARISTA135T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.137 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::221 + interfaces: + Loopback0: + ipv6: fc00:c:c:89::1/128 + Ethernet1: + ipv6: fc00:a::222/126 + bp_interface: + ipv6: fc00:b::89/64 + + ARISTA136T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.138 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::225 + interfaces: + Loopback0: + ipv6: fc00:c:c:8a::1/128 + Ethernet1: + ipv6: fc00:a::226/126 + bp_interface: + ipv6: fc00:b::8a/64 + + ARISTA137T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.139 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::229 + interfaces: + Loopback0: + ipv6: fc00:c:c:8b::1/128 + Ethernet1: + ipv6: fc00:a::22a/126 + bp_interface: + ipv6: fc00:b::8b/64 + + ARISTA138T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.140 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::22d + interfaces: + Loopback0: + ipv6: fc00:c:c:8c::1/128 + Ethernet1: + ipv6: fc00:a::22e/126 + bp_interface: + ipv6: fc00:b::8c/64 + + ARISTA139T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.141 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::231 + interfaces: + Loopback0: + ipv6: fc00:c:c:8d::1/128 + Ethernet1: + ipv6: fc00:a::232/126 + bp_interface: + ipv6: fc00:b::8d/64 + + ARISTA140T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.142 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::235 + interfaces: + Loopback0: + ipv6: fc00:c:c:8e::1/128 + Ethernet1: + ipv6: fc00:a::236/126 + bp_interface: + ipv6: fc00:b::8e/64 + + ARISTA141T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.143 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::239 + interfaces: + Loopback0: + ipv6: fc00:c:c:8f::1/128 + Ethernet1: + ipv6: fc00:a::23a/126 + bp_interface: + ipv6: fc00:b::8f/64 + + ARISTA142T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.144 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::23d + interfaces: + Loopback0: + ipv6: fc00:c:c:90::1/128 + Ethernet1: + ipv6: fc00:a::23e/126 + bp_interface: + ipv6: fc00:b::90/64 + + ARISTA143T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.145 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::241 + interfaces: + Loopback0: + ipv6: fc00:c:c:91::1/128 + Ethernet1: + ipv6: fc00:a::242/126 + bp_interface: + ipv6: fc00:b::91/64 + + ARISTA144T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.146 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::245 + interfaces: + Loopback0: + ipv6: fc00:c:c:92::1/128 + Ethernet1: + ipv6: fc00:a::246/126 + bp_interface: + ipv6: fc00:b::92/64 + + ARISTA145T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.147 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::249 + interfaces: + Loopback0: + ipv6: fc00:c:c:93::1/128 + Ethernet1: + ipv6: fc00:a::24a/126 + bp_interface: + ipv6: fc00:b::93/64 + + ARISTA146T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.148 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::24d + interfaces: + Loopback0: + ipv6: fc00:c:c:94::1/128 + Ethernet1: + ipv6: fc00:a::24e/126 + bp_interface: + ipv6: fc00:b::94/64 + + ARISTA147T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.149 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::251 + interfaces: + Loopback0: + ipv6: fc00:c:c:95::1/128 + Ethernet1: + ipv6: fc00:a::252/126 + bp_interface: + ipv6: fc00:b::95/64 + + ARISTA148T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.150 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::255 + interfaces: + Loopback0: + ipv6: fc00:c:c:96::1/128 + Ethernet1: + ipv6: fc00:a::256/126 + bp_interface: + ipv6: fc00:b::96/64 + + ARISTA149T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.151 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::259 + interfaces: + Loopback0: + ipv6: fc00:c:c:97::1/128 + Ethernet1: + ipv6: fc00:a::25a/126 + bp_interface: + ipv6: fc00:b::97/64 + + ARISTA150T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.152 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::25d + interfaces: + Loopback0: + ipv6: fc00:c:c:98::1/128 + Ethernet1: + ipv6: fc00:a::25e/126 + bp_interface: + ipv6: fc00:b::98/64 + + ARISTA151T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.153 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::261 + interfaces: + Loopback0: + ipv6: fc00:c:c:99::1/128 + Ethernet1: + ipv6: fc00:a::262/126 + bp_interface: + ipv6: fc00:b::99/64 + + ARISTA152T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.154 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::265 + interfaces: + Loopback0: + ipv6: fc00:c:c:9a::1/128 + Ethernet1: + ipv6: fc00:a::266/126 + bp_interface: + ipv6: fc00:b::9a/64 + + ARISTA153T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.155 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::269 + interfaces: + Loopback0: + ipv6: fc00:c:c:9b::1/128 + Ethernet1: + ipv6: fc00:a::26a/126 + bp_interface: + ipv6: fc00:b::9b/64 + + ARISTA154T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.156 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::26d + interfaces: + Loopback0: + ipv6: fc00:c:c:9c::1/128 + Ethernet1: + ipv6: fc00:a::26e/126 + bp_interface: + ipv6: fc00:b::9c/64 + + ARISTA155T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.157 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::271 + interfaces: + Loopback0: + ipv6: fc00:c:c:9d::1/128 + Ethernet1: + ipv6: fc00:a::272/126 + bp_interface: + ipv6: fc00:b::9d/64 + + ARISTA156T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.158 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::275 + interfaces: + Loopback0: + ipv6: fc00:c:c:9e::1/128 + Ethernet1: + ipv6: fc00:a::276/126 + bp_interface: + ipv6: fc00:b::9e/64 + + ARISTA157T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.159 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::279 + interfaces: + Loopback0: + ipv6: fc00:c:c:9f::1/128 + Ethernet1: + ipv6: fc00:a::27a/126 + bp_interface: + ipv6: fc00:b::9f/64 + + ARISTA158T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.160 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::27d + interfaces: + Loopback0: + ipv6: fc00:c:c:a0::1/128 + Ethernet1: + ipv6: fc00:a::27e/126 + bp_interface: + ipv6: fc00:b::a0/64 + + ARISTA159T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.161 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::281 + interfaces: + Loopback0: + ipv6: fc00:c:c:a1::1/128 + Ethernet1: + ipv6: fc00:a::282/126 + bp_interface: + ipv6: fc00:b::a1/64 + + ARISTA160T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.162 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::285 + interfaces: + Loopback0: + ipv6: fc00:c:c:a2::1/128 + Ethernet1: + ipv6: fc00:a::286/126 + bp_interface: + ipv6: fc00:b::a2/64 + + ARISTA161T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.163 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::289 + interfaces: + Loopback0: + ipv6: fc00:c:c:a3::1/128 + Ethernet1: + ipv6: fc00:a::28a/126 + bp_interface: + ipv6: fc00:b::a3/64 + + ARISTA162T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.164 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::28d + interfaces: + Loopback0: + ipv6: fc00:c:c:a4::1/128 + Ethernet1: + ipv6: fc00:a::28e/126 + bp_interface: + ipv6: fc00:b::a4/64 + + ARISTA163T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.165 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::291 + interfaces: + Loopback0: + ipv6: fc00:c:c:a5::1/128 + Ethernet1: + ipv6: fc00:a::292/126 + bp_interface: + ipv6: fc00:b::a5/64 + + ARISTA164T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.166 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::295 + interfaces: + Loopback0: + ipv6: fc00:c:c:a6::1/128 + Ethernet1: + ipv6: fc00:a::296/126 + bp_interface: + ipv6: fc00:b::a6/64 + + ARISTA165T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.167 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::299 + interfaces: + Loopback0: + ipv6: fc00:c:c:a7::1/128 + Ethernet1: + ipv6: fc00:a::29a/126 + bp_interface: + ipv6: fc00:b::a7/64 + + ARISTA166T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.168 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::29d + interfaces: + Loopback0: + ipv6: fc00:c:c:a8::1/128 + Ethernet1: + ipv6: fc00:a::29e/126 + bp_interface: + ipv6: fc00:b::a8/64 + + ARISTA167T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.169 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:a9::1/128 + Ethernet1: + ipv6: fc00:a::2a2/126 + bp_interface: + ipv6: fc00:b::a9/64 + + ARISTA168T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.170 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:aa::1/128 + Ethernet1: + ipv6: fc00:a::2a6/126 + bp_interface: + ipv6: fc00:b::aa/64 + + ARISTA169T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.171 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ab::1/128 + Ethernet1: + ipv6: fc00:a::2aa/126 + bp_interface: + ipv6: fc00:b::ab/64 + + ARISTA170T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.172 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ac::1/128 + Ethernet1: + ipv6: fc00:a::2ae/126 + bp_interface: + ipv6: fc00:b::ac/64 + + ARISTA171T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.173 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ad::1/128 + Ethernet1: + ipv6: fc00:a::2b2/126 + bp_interface: + ipv6: fc00:b::ad/64 + + ARISTA172T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.174 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ae::1/128 + Ethernet1: + ipv6: fc00:a::2b6/126 + bp_interface: + ipv6: fc00:b::ae/64 + + ARISTA173T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.175 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:af::1/128 + Ethernet1: + ipv6: fc00:a::2ba/126 + bp_interface: + ipv6: fc00:b::af/64 + + ARISTA174T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.176 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2bd + interfaces: + Loopback0: + ipv6: fc00:c:c:b0::1/128 + Ethernet1: + ipv6: fc00:a::2be/126 + bp_interface: + ipv6: fc00:b::b0/64 + + ARISTA175T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.177 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b1::1/128 + Ethernet1: + ipv6: fc00:a::2c2/126 + bp_interface: + ipv6: fc00:b::b1/64 + + ARISTA176T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.178 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b2::1/128 + Ethernet1: + ipv6: fc00:a::2c6/126 + bp_interface: + ipv6: fc00:b::b2/64 + + ARISTA177T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.179 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b3::1/128 + Ethernet1: + ipv6: fc00:a::2ca/126 + bp_interface: + ipv6: fc00:b::b3/64 + + ARISTA178T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.180 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2cd + interfaces: + Loopback0: + ipv6: fc00:c:c:b4::1/128 + Ethernet1: + ipv6: fc00:a::2ce/126 + bp_interface: + ipv6: fc00:b::b4/64 + + ARISTA179T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.181 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b5::1/128 + Ethernet1: + ipv6: fc00:a::2d2/126 + bp_interface: + ipv6: fc00:b::b5/64 + + ARISTA180T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.182 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b6::1/128 + Ethernet1: + ipv6: fc00:a::2d6/126 + bp_interface: + ipv6: fc00:b::b6/64 + + ARISTA181T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.183 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b7::1/128 + Ethernet1: + ipv6: fc00:a::2da/126 + bp_interface: + ipv6: fc00:b::b7/64 + + ARISTA182T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.184 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2dd + interfaces: + Loopback0: + ipv6: fc00:c:c:b8::1/128 + Ethernet1: + ipv6: fc00:a::2de/126 + bp_interface: + ipv6: fc00:b::b8/64 + + ARISTA183T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.185 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b9::1/128 + Ethernet1: + ipv6: fc00:a::2e2/126 + bp_interface: + ipv6: fc00:b::b9/64 + + ARISTA184T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.186 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ba::1/128 + Ethernet1: + ipv6: fc00:a::2e6/126 + bp_interface: + ipv6: fc00:b::ba/64 + + ARISTA185T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.187 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bb::1/128 + Ethernet1: + ipv6: fc00:a::2ea/126 + bp_interface: + ipv6: fc00:b::bb/64 + + ARISTA186T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.188 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2ed + interfaces: + Loopback0: + ipv6: fc00:c:c:bc::1/128 + Ethernet1: + ipv6: fc00:a::2ee/126 + bp_interface: + ipv6: fc00:b::bc/64 + + ARISTA187T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.189 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:bd::1/128 + Ethernet1: + ipv6: fc00:a::2f2/126 + bp_interface: + ipv6: fc00:b::bd/64 + + ARISTA188T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.190 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:be::1/128 + Ethernet1: + ipv6: fc00:a::2f6/126 + bp_interface: + ipv6: fc00:b::be/64 + + ARISTA189T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.191 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bf::1/128 + Ethernet1: + ipv6: fc00:a::2fa/126 + bp_interface: + ipv6: fc00:b::bf/64 + + ARISTA190T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.192 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2fd + interfaces: + Loopback0: + ipv6: fc00:c:c:c0::1/128 + Ethernet1: + ipv6: fc00:a::2fe/126 + bp_interface: + ipv6: fc00:b::c0/64 + + ARISTA191T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.193 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::301 + interfaces: + Loopback0: + ipv6: fc00:c:c:c1::1/128 + Ethernet1: + ipv6: fc00:a::302/126 + bp_interface: + ipv6: fc00:b::c1/64 + + ARISTA192T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.194 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::305 + interfaces: + Loopback0: + ipv6: fc00:c:c:c2::1/128 + Ethernet1: + ipv6: fc00:a::306/126 + bp_interface: + ipv6: fc00:b::c2/64 + + ARISTA193T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.195 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::309 + interfaces: + Loopback0: + ipv6: fc00:c:c:c3::1/128 + Ethernet1: + ipv6: fc00:a::30a/126 + bp_interface: + ipv6: fc00:b::c3/64 + + ARISTA194T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.196 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::30d + interfaces: + Loopback0: + ipv6: fc00:c:c:c4::1/128 + Ethernet1: + ipv6: fc00:a::30e/126 + bp_interface: + ipv6: fc00:b::c4/64 + + ARISTA195T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.197 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::311 + interfaces: + Loopback0: + ipv6: fc00:c:c:c5::1/128 + Ethernet1: + ipv6: fc00:a::312/126 + bp_interface: + ipv6: fc00:b::c5/64 + + ARISTA196T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.198 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::315 + interfaces: + Loopback0: + ipv6: fc00:c:c:c6::1/128 + Ethernet1: + ipv6: fc00:a::316/126 + bp_interface: + ipv6: fc00:b::c6/64 + + ARISTA197T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.199 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::319 + interfaces: + Loopback0: + ipv6: fc00:c:c:c7::1/128 + Ethernet1: + ipv6: fc00:a::31a/126 + bp_interface: + ipv6: fc00:b::c7/64 + + ARISTA198T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.200 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::31d + interfaces: + Loopback0: + ipv6: fc00:c:c:c8::1/128 + Ethernet1: + ipv6: fc00:a::31e/126 + bp_interface: + ipv6: fc00:b::c8/64 + + ARISTA199T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.201 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::321 + interfaces: + Loopback0: + ipv6: fc00:c:c:c9::1/128 + Ethernet1: + ipv6: fc00:a::322/126 + bp_interface: + ipv6: fc00:b::c9/64 + + ARISTA200T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.202 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::325 + interfaces: + Loopback0: + ipv6: fc00:c:c:ca::1/128 + Ethernet1: + ipv6: fc00:a::326/126 + bp_interface: + ipv6: fc00:b::ca/64 + + ARISTA201T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.203 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::329 + interfaces: + Loopback0: + ipv6: fc00:c:c:cb::1/128 + Ethernet1: + ipv6: fc00:a::32a/126 + bp_interface: + ipv6: fc00:b::cb/64 + + ARISTA202T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.204 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::32d + interfaces: + Loopback0: + ipv6: fc00:c:c:cc::1/128 + Ethernet1: + ipv6: fc00:a::32e/126 + bp_interface: + ipv6: fc00:b::cc/64 + + ARISTA203T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.205 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::331 + interfaces: + Loopback0: + ipv6: fc00:c:c:cd::1/128 + Ethernet1: + ipv6: fc00:a::332/126 + bp_interface: + ipv6: fc00:b::cd/64 + + ARISTA204T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.206 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::335 + interfaces: + Loopback0: + ipv6: fc00:c:c:ce::1/128 + Ethernet1: + ipv6: fc00:a::336/126 + bp_interface: + ipv6: fc00:b::ce/64 + + ARISTA205T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.207 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::339 + interfaces: + Loopback0: + ipv6: fc00:c:c:cf::1/128 + Ethernet1: + ipv6: fc00:a::33a/126 + bp_interface: + ipv6: fc00:b::cf/64 + + ARISTA206T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.208 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::33d + interfaces: + Loopback0: + ipv6: fc00:c:c:d0::1/128 + Ethernet1: + ipv6: fc00:a::33e/126 + bp_interface: + ipv6: fc00:b::d0/64 + + ARISTA207T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.209 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::341 + interfaces: + Loopback0: + ipv6: fc00:c:c:d1::1/128 + Ethernet1: + ipv6: fc00:a::342/126 + bp_interface: + ipv6: fc00:b::d1/64 + + ARISTA208T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.210 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::345 + interfaces: + Loopback0: + ipv6: fc00:c:c:d2::1/128 + Ethernet1: + ipv6: fc00:a::346/126 + bp_interface: + ipv6: fc00:b::d2/64 + + ARISTA209T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.211 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::349 + interfaces: + Loopback0: + ipv6: fc00:c:c:d3::1/128 + Ethernet1: + ipv6: fc00:a::34a/126 + bp_interface: + ipv6: fc00:b::d3/64 + + ARISTA210T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.212 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::34d + interfaces: + Loopback0: + ipv6: fc00:c:c:d4::1/128 + Ethernet1: + ipv6: fc00:a::34e/126 + bp_interface: + ipv6: fc00:b::d4/64 + + ARISTA211T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.213 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::351 + interfaces: + Loopback0: + ipv6: fc00:c:c:d5::1/128 + Ethernet1: + ipv6: fc00:a::352/126 + bp_interface: + ipv6: fc00:b::d5/64 + + ARISTA212T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.214 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::355 + interfaces: + Loopback0: + ipv6: fc00:c:c:d6::1/128 + Ethernet1: + ipv6: fc00:a::356/126 + bp_interface: + ipv6: fc00:b::d6/64 + + ARISTA213T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.215 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::359 + interfaces: + Loopback0: + ipv6: fc00:c:c:d7::1/128 + Ethernet1: + ipv6: fc00:a::35a/126 + bp_interface: + ipv6: fc00:b::d7/64 + + ARISTA214T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.216 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::35d + interfaces: + Loopback0: + ipv6: fc00:c:c:d8::1/128 + Ethernet1: + ipv6: fc00:a::35e/126 + bp_interface: + ipv6: fc00:b::d8/64 + + ARISTA215T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.217 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::361 + interfaces: + Loopback0: + ipv6: fc00:c:c:d9::1/128 + Ethernet1: + ipv6: fc00:a::362/126 + bp_interface: + ipv6: fc00:b::d9/64 + + ARISTA216T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.218 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::365 + interfaces: + Loopback0: + ipv6: fc00:c:c:da::1/128 + Ethernet1: + ipv6: fc00:a::366/126 + bp_interface: + ipv6: fc00:b::da/64 + + ARISTA217T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.219 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::369 + interfaces: + Loopback0: + ipv6: fc00:c:c:db::1/128 + Ethernet1: + ipv6: fc00:a::36a/126 + bp_interface: + ipv6: fc00:b::db/64 + + ARISTA218T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.220 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::36d + interfaces: + Loopback0: + ipv6: fc00:c:c:dc::1/128 + Ethernet1: + ipv6: fc00:a::36e/126 + bp_interface: + ipv6: fc00:b::dc/64 + + ARISTA219T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.221 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::371 + interfaces: + Loopback0: + ipv6: fc00:c:c:dd::1/128 + Ethernet1: + ipv6: fc00:a::372/126 + bp_interface: + ipv6: fc00:b::dd/64 + + ARISTA220T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.222 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::375 + interfaces: + Loopback0: + ipv6: fc00:c:c:de::1/128 + Ethernet1: + ipv6: fc00:a::376/126 + bp_interface: + ipv6: fc00:b::de/64 + + ARISTA221T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.223 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::379 + interfaces: + Loopback0: + ipv6: fc00:c:c:df::1/128 + Ethernet1: + ipv6: fc00:a::37a/126 + bp_interface: + ipv6: fc00:b::df/64 + + ARISTA222T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.224 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::37d + interfaces: + Loopback0: + ipv6: fc00:c:c:e0::1/128 + Ethernet1: + ipv6: fc00:a::37e/126 + bp_interface: + ipv6: fc00:b::e0/64 + + ARISTA223T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.225 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::381 + interfaces: + Loopback0: + ipv6: fc00:c:c:e1::1/128 + Ethernet1: + ipv6: fc00:a::382/126 + bp_interface: + ipv6: fc00:b::e1/64 + + ARISTA224T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.226 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::385 + interfaces: + Loopback0: + ipv6: fc00:c:c:e2::1/128 + Ethernet1: + ipv6: fc00:a::386/126 + bp_interface: + ipv6: fc00:b::e2/64 + + ARISTA225T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.227 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::389 + interfaces: + Loopback0: + ipv6: fc00:c:c:e3::1/128 + Ethernet1: + ipv6: fc00:a::38a/126 + bp_interface: + ipv6: fc00:b::e3/64 + + ARISTA226T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.228 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::38d + interfaces: + Loopback0: + ipv6: fc00:c:c:e4::1/128 + Ethernet1: + ipv6: fc00:a::38e/126 + bp_interface: + ipv6: fc00:b::e4/64 + + ARISTA227T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.229 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::391 + interfaces: + Loopback0: + ipv6: fc00:c:c:e5::1/128 + Ethernet1: + ipv6: fc00:a::392/126 + bp_interface: + ipv6: fc00:b::e5/64 + + ARISTA228T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.230 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::395 + interfaces: + Loopback0: + ipv6: fc00:c:c:e6::1/128 + Ethernet1: + ipv6: fc00:a::396/126 + bp_interface: + ipv6: fc00:b::e6/64 + + ARISTA229T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.231 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::399 + interfaces: + Loopback0: + ipv6: fc00:c:c:e7::1/128 + Ethernet1: + ipv6: fc00:a::39a/126 + bp_interface: + ipv6: fc00:b::e7/64 + + ARISTA230T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.232 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::39d + interfaces: + Loopback0: + ipv6: fc00:c:c:e8::1/128 + Ethernet1: + ipv6: fc00:a::39e/126 + bp_interface: + ipv6: fc00:b::e8/64 + + ARISTA231T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.233 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:e9::1/128 + Ethernet1: + ipv6: fc00:a::3a2/126 + bp_interface: + ipv6: fc00:b::e9/64 + + ARISTA232T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.234 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ea::1/128 + Ethernet1: + ipv6: fc00:a::3a6/126 + bp_interface: + ipv6: fc00:b::ea/64 + + ARISTA233T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.235 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:eb::1/128 + Ethernet1: + ipv6: fc00:a::3aa/126 + bp_interface: + ipv6: fc00:b::eb/64 + + ARISTA234T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.236 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ec::1/128 + Ethernet1: + ipv6: fc00:a::3ae/126 + bp_interface: + ipv6: fc00:b::ec/64 + + ARISTA235T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.237 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ed::1/128 + Ethernet1: + ipv6: fc00:a::3b2/126 + bp_interface: + ipv6: fc00:b::ed/64 + + ARISTA236T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.238 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ee::1/128 + Ethernet1: + ipv6: fc00:a::3b6/126 + bp_interface: + ipv6: fc00:b::ee/64 + + ARISTA237T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.239 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ef::1/128 + Ethernet1: + ipv6: fc00:a::3ba/126 + bp_interface: + ipv6: fc00:b::ef/64 + + ARISTA238T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.240 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3bd + interfaces: + Loopback0: + ipv6: fc00:c:c:f0::1/128 + Ethernet1: + ipv6: fc00:a::3be/126 + bp_interface: + ipv6: fc00:b::f0/64 + + ARISTA239T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.241 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f1::1/128 + Ethernet1: + ipv6: fc00:a::3c2/126 + bp_interface: + ipv6: fc00:b::f1/64 + + ARISTA240T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.242 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f2::1/128 + Ethernet1: + ipv6: fc00:a::3c6/126 + bp_interface: + ipv6: fc00:b::f2/64 + + ARISTA241T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.243 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f3::1/128 + Ethernet1: + ipv6: fc00:a::3ca/126 + bp_interface: + ipv6: fc00:b::f3/64 + + ARISTA242T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.244 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3cd + interfaces: + Loopback0: + ipv6: fc00:c:c:f4::1/128 + Ethernet1: + ipv6: fc00:a::3ce/126 + bp_interface: + ipv6: fc00:b::f4/64 + + ARISTA243T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.245 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f5::1/128 + Ethernet1: + ipv6: fc00:a::3d2/126 + bp_interface: + ipv6: fc00:b::f5/64 + + ARISTA244T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.246 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f6::1/128 + Ethernet1: + ipv6: fc00:a::3d6/126 + bp_interface: + ipv6: fc00:b::f6/64 + + ARISTA245T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.247 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f7::1/128 + Ethernet1: + ipv6: fc00:a::3da/126 + bp_interface: + ipv6: fc00:b::f7/64 + + ARISTA246T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.248 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3dd + interfaces: + Loopback0: + ipv6: fc00:c:c:f8::1/128 + Ethernet1: + ipv6: fc00:a::3de/126 + bp_interface: + ipv6: fc00:b::f8/64 + + ARISTA247T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.249 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f9::1/128 + Ethernet1: + ipv6: fc00:a::3e2/126 + bp_interface: + ipv6: fc00:b::f9/64 + + ARISTA248T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.250 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fa::1/128 + Ethernet1: + ipv6: fc00:a::3e6/126 + bp_interface: + ipv6: fc00:b::fa/64 + + ARISTA249T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.251 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:fb::1/128 + Ethernet1: + ipv6: fc00:a::3ea/126 + bp_interface: + ipv6: fc00:b::fb/64 + + ARISTA250T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.252 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3ed + interfaces: + Loopback0: + ipv6: fc00:c:c:fc::1/128 + Ethernet1: + ipv6: fc00:a::3ee/126 + bp_interface: + ipv6: fc00:b::fc/64 + + ARISTA251T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.253 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:fd::1/128 + Ethernet1: + ipv6: fc00:a::3f2/126 + bp_interface: + ipv6: fc00:b::fd/64 + + ARISTA252T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.254 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fe::1/128 + Ethernet1: + ipv6: fc00:a::3f6/126 + bp_interface: + ipv6: fc00:b::fe/64 + + ARISTA253T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.255 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ff::1/128 + Ethernet1: + ipv6: fc00:a::3fa/126 + bp_interface: + ipv6: fc00:b::ff/64 + + ARISTA254T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.0 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3fd + interfaces: + Loopback0: + ipv6: fc00:c:c:100::1/128 + Ethernet1: + ipv6: fc00:a::3fe/126 + bp_interface: + ipv6: fc00:b::100/64 + + ARISTA01PT0: + properties: + - common + - tor + bgp: + asn: 4200000000 + peers: + 4200000000: + - fc00:a::401 + interfaces: + Loopback0: + ipv6: fc00:c:c:101::1/128 + Ethernet1: + ipv6: fc00:a::402/126 + bp_interface: + ipv6: fc00:b::101/64 diff --git a/ansible/vars/topo_t1-isolated-d254u2s2.yaml b/ansible/vars/topo_t1-isolated-d254u2s2.yaml new file mode 100644 index 00000000000..fd3cb2daf4e --- /dev/null +++ b/ansible/vars/topo_t1-isolated-d254u2s2.yaml @@ -0,0 +1,5684 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + vm_offset: 0 + ARISTA02T2: + vlans: + - 1 + vm_offset: 1 + ARISTA01T0: + vlans: + - 2 + vm_offset: 2 + ARISTA02T0: + vlans: + - 3 + vm_offset: 3 + ARISTA03T0: + vlans: + - 4 + vm_offset: 4 + ARISTA04T0: + vlans: + - 5 + vm_offset: 5 + ARISTA05T0: + vlans: + - 6 + vm_offset: 6 + ARISTA06T0: + vlans: + - 7 + vm_offset: 7 + ARISTA07T0: + vlans: + - 8 + vm_offset: 8 + ARISTA08T0: + vlans: + - 9 + vm_offset: 9 + ARISTA09T0: + vlans: + - 10 + vm_offset: 10 + ARISTA10T0: + vlans: + - 11 + vm_offset: 11 + ARISTA11T0: + vlans: + - 12 + vm_offset: 12 + ARISTA12T0: + vlans: + - 13 + vm_offset: 13 + ARISTA13T0: + vlans: + - 14 + vm_offset: 14 + ARISTA14T0: + vlans: + - 15 + vm_offset: 15 + ARISTA15T0: + vlans: + - 16 + vm_offset: 16 + ARISTA16T0: + vlans: + - 17 + vm_offset: 17 + ARISTA17T0: + vlans: + - 18 + vm_offset: 18 + ARISTA18T0: + vlans: + - 19 + vm_offset: 19 + ARISTA19T0: + vlans: + - 20 + vm_offset: 20 + ARISTA20T0: + vlans: + - 21 + vm_offset: 21 + ARISTA21T0: + vlans: + - 22 + vm_offset: 22 + ARISTA22T0: + vlans: + - 23 + vm_offset: 23 + ARISTA23T0: + vlans: + - 24 + vm_offset: 24 + ARISTA24T0: + vlans: + - 25 + vm_offset: 25 + ARISTA25T0: + vlans: + - 26 + vm_offset: 26 + ARISTA26T0: + vlans: + - 27 + vm_offset: 27 + ARISTA27T0: + vlans: + - 28 + vm_offset: 28 + ARISTA28T0: + vlans: + - 29 + vm_offset: 29 + ARISTA29T0: + vlans: + - 30 + vm_offset: 30 + ARISTA30T0: + vlans: + - 31 + vm_offset: 31 + ARISTA31T0: + vlans: + - 32 + vm_offset: 32 + ARISTA32T0: + vlans: + - 33 + vm_offset: 33 + ARISTA33T0: + vlans: + - 34 + vm_offset: 34 + ARISTA34T0: + vlans: + - 35 + vm_offset: 35 + ARISTA35T0: + vlans: + - 36 + vm_offset: 36 + ARISTA36T0: + vlans: + - 37 + vm_offset: 37 + ARISTA37T0: + vlans: + - 38 + vm_offset: 38 + ARISTA38T0: + vlans: + - 39 + vm_offset: 39 + ARISTA39T0: + vlans: + - 40 + vm_offset: 40 + ARISTA40T0: + vlans: + - 41 + vm_offset: 41 + ARISTA41T0: + vlans: + - 42 + vm_offset: 42 + ARISTA42T0: + vlans: + - 43 + vm_offset: 43 + ARISTA43T0: + vlans: + - 44 + vm_offset: 44 + ARISTA44T0: + vlans: + - 45 + vm_offset: 45 + ARISTA45T0: + vlans: + - 46 + vm_offset: 46 + ARISTA46T0: + vlans: + - 47 + vm_offset: 47 + ARISTA47T0: + vlans: + - 48 + vm_offset: 48 + ARISTA48T0: + vlans: + - 49 + vm_offset: 49 + ARISTA49T0: + vlans: + - 50 + vm_offset: 50 + ARISTA50T0: + vlans: + - 51 + vm_offset: 51 + ARISTA51T0: + vlans: + - 52 + vm_offset: 52 + ARISTA52T0: + vlans: + - 53 + vm_offset: 53 + ARISTA53T0: + vlans: + - 54 + vm_offset: 54 + ARISTA54T0: + vlans: + - 55 + vm_offset: 55 + ARISTA55T0: + vlans: + - 56 + vm_offset: 56 + ARISTA56T0: + vlans: + - 57 + vm_offset: 57 + ARISTA57T0: + vlans: + - 58 + vm_offset: 58 + ARISTA58T0: + vlans: + - 59 + vm_offset: 59 + ARISTA59T0: + vlans: + - 60 + vm_offset: 60 + ARISTA60T0: + vlans: + - 61 + vm_offset: 61 + ARISTA61T0: + vlans: + - 62 + vm_offset: 62 + ARISTA62T0: + vlans: + - 63 + vm_offset: 63 + ARISTA63T0: + vlans: + - 64 + vm_offset: 64 + ARISTA64T0: + vlans: + - 65 + vm_offset: 65 + ARISTA65T0: + vlans: + - 66 + vm_offset: 66 + ARISTA66T0: + vlans: + - 67 + vm_offset: 67 + ARISTA67T0: + vlans: + - 68 + vm_offset: 68 + ARISTA68T0: + vlans: + - 69 + vm_offset: 69 + ARISTA69T0: + vlans: + - 70 + vm_offset: 70 + ARISTA70T0: + vlans: + - 71 + vm_offset: 71 + ARISTA71T0: + vlans: + - 72 + vm_offset: 72 + ARISTA72T0: + vlans: + - 73 + vm_offset: 73 + ARISTA73T0: + vlans: + - 74 + vm_offset: 74 + ARISTA74T0: + vlans: + - 75 + vm_offset: 75 + ARISTA75T0: + vlans: + - 76 + vm_offset: 76 + ARISTA76T0: + vlans: + - 77 + vm_offset: 77 + ARISTA77T0: + vlans: + - 78 + vm_offset: 78 + ARISTA78T0: + vlans: + - 79 + vm_offset: 79 + ARISTA79T0: + vlans: + - 80 + vm_offset: 80 + ARISTA80T0: + vlans: + - 81 + vm_offset: 81 + ARISTA81T0: + vlans: + - 82 + vm_offset: 82 + ARISTA82T0: + vlans: + - 83 + vm_offset: 83 + ARISTA83T0: + vlans: + - 84 + vm_offset: 84 + ARISTA84T0: + vlans: + - 85 + vm_offset: 85 + ARISTA85T0: + vlans: + - 86 + vm_offset: 86 + ARISTA86T0: + vlans: + - 87 + vm_offset: 87 + ARISTA87T0: + vlans: + - 88 + vm_offset: 88 + ARISTA88T0: + vlans: + - 89 + vm_offset: 89 + ARISTA89T0: + vlans: + - 90 + vm_offset: 90 + ARISTA90T0: + vlans: + - 91 + vm_offset: 91 + ARISTA91T0: + vlans: + - 92 + vm_offset: 92 + ARISTA92T0: + vlans: + - 93 + vm_offset: 93 + ARISTA93T0: + vlans: + - 94 + vm_offset: 94 + ARISTA94T0: + vlans: + - 95 + vm_offset: 95 + ARISTA95T0: + vlans: + - 96 + vm_offset: 96 + ARISTA96T0: + vlans: + - 97 + vm_offset: 97 + ARISTA97T0: + vlans: + - 98 + vm_offset: 98 + ARISTA98T0: + vlans: + - 99 + vm_offset: 99 + ARISTA99T0: + vlans: + - 100 + vm_offset: 100 + ARISTA100T0: + vlans: + - 101 + vm_offset: 101 + ARISTA101T0: + vlans: + - 102 + vm_offset: 102 + ARISTA102T0: + vlans: + - 103 + vm_offset: 103 + ARISTA103T0: + vlans: + - 104 + vm_offset: 104 + ARISTA104T0: + vlans: + - 105 + vm_offset: 105 + ARISTA105T0: + vlans: + - 106 + vm_offset: 106 + ARISTA106T0: + vlans: + - 107 + vm_offset: 107 + ARISTA107T0: + vlans: + - 108 + vm_offset: 108 + ARISTA108T0: + vlans: + - 109 + vm_offset: 109 + ARISTA109T0: + vlans: + - 110 + vm_offset: 110 + ARISTA110T0: + vlans: + - 111 + vm_offset: 111 + ARISTA111T0: + vlans: + - 112 + vm_offset: 112 + ARISTA112T0: + vlans: + - 113 + vm_offset: 113 + ARISTA113T0: + vlans: + - 114 + vm_offset: 114 + ARISTA114T0: + vlans: + - 115 + vm_offset: 115 + ARISTA115T0: + vlans: + - 116 + vm_offset: 116 + ARISTA116T0: + vlans: + - 117 + vm_offset: 117 + ARISTA117T0: + vlans: + - 118 + vm_offset: 118 + ARISTA118T0: + vlans: + - 119 + vm_offset: 119 + ARISTA119T0: + vlans: + - 120 + vm_offset: 120 + ARISTA120T0: + vlans: + - 121 + vm_offset: 121 + ARISTA121T0: + vlans: + - 122 + vm_offset: 122 + ARISTA122T0: + vlans: + - 123 + vm_offset: 123 + ARISTA123T0: + vlans: + - 124 + vm_offset: 124 + ARISTA124T0: + vlans: + - 125 + vm_offset: 125 + ARISTA125T0: + vlans: + - 126 + vm_offset: 126 + ARISTA126T0: + vlans: + - 127 + vm_offset: 127 + ARISTA127T0: + vlans: + - 128 + vm_offset: 128 + ARISTA128T0: + vlans: + - 129 + vm_offset: 129 + ARISTA129T0: + vlans: + - 130 + vm_offset: 130 + ARISTA130T0: + vlans: + - 131 + vm_offset: 131 + ARISTA131T0: + vlans: + - 132 + vm_offset: 132 + ARISTA132T0: + vlans: + - 133 + vm_offset: 133 + ARISTA133T0: + vlans: + - 134 + vm_offset: 134 + ARISTA134T0: + vlans: + - 135 + vm_offset: 135 + ARISTA135T0: + vlans: + - 136 + vm_offset: 136 + ARISTA136T0: + vlans: + - 137 + vm_offset: 137 + ARISTA137T0: + vlans: + - 138 + vm_offset: 138 + ARISTA138T0: + vlans: + - 139 + vm_offset: 139 + ARISTA139T0: + vlans: + - 140 + vm_offset: 140 + ARISTA140T0: + vlans: + - 141 + vm_offset: 141 + ARISTA141T0: + vlans: + - 142 + vm_offset: 142 + ARISTA142T0: + vlans: + - 143 + vm_offset: 143 + ARISTA143T0: + vlans: + - 144 + vm_offset: 144 + ARISTA144T0: + vlans: + - 145 + vm_offset: 145 + ARISTA145T0: + vlans: + - 146 + vm_offset: 146 + ARISTA146T0: + vlans: + - 147 + vm_offset: 147 + ARISTA147T0: + vlans: + - 148 + vm_offset: 148 + ARISTA148T0: + vlans: + - 149 + vm_offset: 149 + ARISTA149T0: + vlans: + - 150 + vm_offset: 150 + ARISTA150T0: + vlans: + - 151 + vm_offset: 151 + ARISTA151T0: + vlans: + - 152 + vm_offset: 152 + ARISTA152T0: + vlans: + - 153 + vm_offset: 153 + ARISTA153T0: + vlans: + - 154 + vm_offset: 154 + ARISTA154T0: + vlans: + - 155 + vm_offset: 155 + ARISTA155T0: + vlans: + - 156 + vm_offset: 156 + ARISTA156T0: + vlans: + - 157 + vm_offset: 157 + ARISTA157T0: + vlans: + - 158 + vm_offset: 158 + ARISTA158T0: + vlans: + - 159 + vm_offset: 159 + ARISTA159T0: + vlans: + - 160 + vm_offset: 160 + ARISTA160T0: + vlans: + - 161 + vm_offset: 161 + ARISTA161T0: + vlans: + - 162 + vm_offset: 162 + ARISTA162T0: + vlans: + - 163 + vm_offset: 163 + ARISTA163T0: + vlans: + - 164 + vm_offset: 164 + ARISTA164T0: + vlans: + - 165 + vm_offset: 165 + ARISTA165T0: + vlans: + - 166 + vm_offset: 166 + ARISTA166T0: + vlans: + - 167 + vm_offset: 167 + ARISTA167T0: + vlans: + - 168 + vm_offset: 168 + ARISTA168T0: + vlans: + - 169 + vm_offset: 169 + ARISTA169T0: + vlans: + - 170 + vm_offset: 170 + ARISTA170T0: + vlans: + - 171 + vm_offset: 171 + ARISTA171T0: + vlans: + - 172 + vm_offset: 172 + ARISTA172T0: + vlans: + - 173 + vm_offset: 173 + ARISTA173T0: + vlans: + - 174 + vm_offset: 174 + ARISTA174T0: + vlans: + - 175 + vm_offset: 175 + ARISTA175T0: + vlans: + - 176 + vm_offset: 176 + ARISTA176T0: + vlans: + - 177 + vm_offset: 177 + ARISTA177T0: + vlans: + - 178 + vm_offset: 178 + ARISTA178T0: + vlans: + - 179 + vm_offset: 179 + ARISTA179T0: + vlans: + - 180 + vm_offset: 180 + ARISTA180T0: + vlans: + - 181 + vm_offset: 181 + ARISTA181T0: + vlans: + - 182 + vm_offset: 182 + ARISTA182T0: + vlans: + - 183 + vm_offset: 183 + ARISTA183T0: + vlans: + - 184 + vm_offset: 184 + ARISTA184T0: + vlans: + - 185 + vm_offset: 185 + ARISTA185T0: + vlans: + - 186 + vm_offset: 186 + ARISTA186T0: + vlans: + - 187 + vm_offset: 187 + ARISTA187T0: + vlans: + - 188 + vm_offset: 188 + ARISTA188T0: + vlans: + - 189 + vm_offset: 189 + ARISTA189T0: + vlans: + - 190 + vm_offset: 190 + ARISTA190T0: + vlans: + - 191 + vm_offset: 191 + ARISTA191T0: + vlans: + - 192 + vm_offset: 192 + ARISTA192T0: + vlans: + - 193 + vm_offset: 193 + ARISTA193T0: + vlans: + - 194 + vm_offset: 194 + ARISTA194T0: + vlans: + - 195 + vm_offset: 195 + ARISTA195T0: + vlans: + - 196 + vm_offset: 196 + ARISTA196T0: + vlans: + - 197 + vm_offset: 197 + ARISTA197T0: + vlans: + - 198 + vm_offset: 198 + ARISTA198T0: + vlans: + - 199 + vm_offset: 199 + ARISTA199T0: + vlans: + - 200 + vm_offset: 200 + ARISTA200T0: + vlans: + - 201 + vm_offset: 201 + ARISTA201T0: + vlans: + - 202 + vm_offset: 202 + ARISTA202T0: + vlans: + - 203 + vm_offset: 203 + ARISTA203T0: + vlans: + - 204 + vm_offset: 204 + ARISTA204T0: + vlans: + - 205 + vm_offset: 205 + ARISTA205T0: + vlans: + - 206 + vm_offset: 206 + ARISTA206T0: + vlans: + - 207 + vm_offset: 207 + ARISTA207T0: + vlans: + - 208 + vm_offset: 208 + ARISTA208T0: + vlans: + - 209 + vm_offset: 209 + ARISTA209T0: + vlans: + - 210 + vm_offset: 210 + ARISTA210T0: + vlans: + - 211 + vm_offset: 211 + ARISTA211T0: + vlans: + - 212 + vm_offset: 212 + ARISTA212T0: + vlans: + - 213 + vm_offset: 213 + ARISTA213T0: + vlans: + - 214 + vm_offset: 214 + ARISTA214T0: + vlans: + - 215 + vm_offset: 215 + ARISTA215T0: + vlans: + - 216 + vm_offset: 216 + ARISTA216T0: + vlans: + - 217 + vm_offset: 217 + ARISTA217T0: + vlans: + - 218 + vm_offset: 218 + ARISTA218T0: + vlans: + - 219 + vm_offset: 219 + ARISTA219T0: + vlans: + - 220 + vm_offset: 220 + ARISTA220T0: + vlans: + - 221 + vm_offset: 221 + ARISTA221T0: + vlans: + - 222 + vm_offset: 222 + ARISTA222T0: + vlans: + - 223 + vm_offset: 223 + ARISTA223T0: + vlans: + - 224 + vm_offset: 224 + ARISTA224T0: + vlans: + - 225 + vm_offset: 225 + ARISTA225T0: + vlans: + - 226 + vm_offset: 226 + ARISTA226T0: + vlans: + - 227 + vm_offset: 227 + ARISTA227T0: + vlans: + - 228 + vm_offset: 228 + ARISTA228T0: + vlans: + - 229 + vm_offset: 229 + ARISTA229T0: + vlans: + - 230 + vm_offset: 230 + ARISTA230T0: + vlans: + - 231 + vm_offset: 231 + ARISTA231T0: + vlans: + - 232 + vm_offset: 232 + ARISTA232T0: + vlans: + - 233 + vm_offset: 233 + ARISTA233T0: + vlans: + - 234 + vm_offset: 234 + ARISTA234T0: + vlans: + - 235 + vm_offset: 235 + ARISTA235T0: + vlans: + - 236 + vm_offset: 236 + ARISTA236T0: + vlans: + - 237 + vm_offset: 237 + ARISTA237T0: + vlans: + - 238 + vm_offset: 238 + ARISTA238T0: + vlans: + - 239 + vm_offset: 239 + ARISTA239T0: + vlans: + - 240 + vm_offset: 240 + ARISTA240T0: + vlans: + - 241 + vm_offset: 241 + ARISTA241T0: + vlans: + - 242 + vm_offset: 242 + ARISTA242T0: + vlans: + - 243 + vm_offset: 243 + ARISTA243T0: + vlans: + - 244 + vm_offset: 244 + ARISTA244T0: + vlans: + - 245 + vm_offset: 245 + ARISTA245T0: + vlans: + - 246 + vm_offset: 246 + ARISTA246T0: + vlans: + - 247 + vm_offset: 247 + ARISTA247T0: + vlans: + - 248 + vm_offset: 248 + ARISTA248T0: + vlans: + - 249 + vm_offset: 249 + ARISTA249T0: + vlans: + - 250 + vm_offset: 250 + ARISTA250T0: + vlans: + - 251 + vm_offset: 251 + ARISTA251T0: + vlans: + - 252 + vm_offset: 252 + ARISTA252T0: + vlans: + - 253 + vm_offset: 253 + ARISTA253T0: + vlans: + - 254 + vm_offset: 254 + ARISTA254T0: + vlans: + - 255 + vm_offset: 255 + +configuration_properties: + common: + dut_asn: 4200100000 + dut_type: LeafRouter + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + nhipv6: FC0A::FF + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + router-id: 0.12.0.1 + asn: 4200200000 + peers: + 4200100000: + - fc00:a::1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1::1/128 + Ethernet1: + ipv6: fc00:a::2/126 + bp_interface: + ipv6: fc00:b::1/64 + + ARISTA02T2: + properties: + - common + - spine + bgp: + router-id: 0.12.0.2 + asn: 4200200000 + peers: + 4200100000: + - fc00:a::5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2::1/128 + Ethernet1: + ipv6: fc00:a::6/126 + bp_interface: + ipv6: fc00:b::2/64 + + ARISTA01T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.3 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3::1/128 + Ethernet1: + ipv6: fc00:a::a/126 + bp_interface: + ipv6: fc00:b::3/64 + + ARISTA02T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.4 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d + interfaces: + Loopback0: + ipv6: fc00:c:c:4::1/128 + Ethernet1: + ipv6: fc00:a::e/126 + bp_interface: + ipv6: fc00:b::4/64 + + ARISTA03T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.5 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::11 + interfaces: + Loopback0: + ipv6: fc00:c:c:5::1/128 + Ethernet1: + ipv6: fc00:a::12/126 + bp_interface: + ipv6: fc00:b::5/64 + + ARISTA04T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.6 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::15 + interfaces: + Loopback0: + ipv6: fc00:c:c:6::1/128 + Ethernet1: + ipv6: fc00:a::16/126 + bp_interface: + ipv6: fc00:b::6/64 + + ARISTA05T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.7 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::19 + interfaces: + Loopback0: + ipv6: fc00:c:c:7::1/128 + Ethernet1: + ipv6: fc00:a::1a/126 + bp_interface: + ipv6: fc00:b::7/64 + + ARISTA06T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.8 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d + interfaces: + Loopback0: + ipv6: fc00:c:c:8::1/128 + Ethernet1: + ipv6: fc00:a::1e/126 + bp_interface: + ipv6: fc00:b::8/64 + + ARISTA07T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.9 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::21 + interfaces: + Loopback0: + ipv6: fc00:c:c:9::1/128 + Ethernet1: + ipv6: fc00:a::22/126 + bp_interface: + ipv6: fc00:b::9/64 + + ARISTA08T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.10 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::25 + interfaces: + Loopback0: + ipv6: fc00:c:c:a::1/128 + Ethernet1: + ipv6: fc00:a::26/126 + bp_interface: + ipv6: fc00:b::a/64 + + ARISTA09T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.11 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::29 + interfaces: + Loopback0: + ipv6: fc00:c:c:b::1/128 + Ethernet1: + ipv6: fc00:a::2a/126 + bp_interface: + ipv6: fc00:b::b/64 + + ARISTA10T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.12 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d + interfaces: + Loopback0: + ipv6: fc00:c:c:c::1/128 + Ethernet1: + ipv6: fc00:a::2e/126 + bp_interface: + ipv6: fc00:b::c/64 + + ARISTA11T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.13 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::31 + interfaces: + Loopback0: + ipv6: fc00:c:c:d::1/128 + Ethernet1: + ipv6: fc00:a::32/126 + bp_interface: + ipv6: fc00:b::d/64 + + ARISTA12T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.14 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::35 + interfaces: + Loopback0: + ipv6: fc00:c:c:e::1/128 + Ethernet1: + ipv6: fc00:a::36/126 + bp_interface: + ipv6: fc00:b::e/64 + + ARISTA13T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.15 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::39 + interfaces: + Loopback0: + ipv6: fc00:c:c:f::1/128 + Ethernet1: + ipv6: fc00:a::3a/126 + bp_interface: + ipv6: fc00:b::f/64 + + ARISTA14T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.16 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d + interfaces: + Loopback0: + ipv6: fc00:c:c:10::1/128 + Ethernet1: + ipv6: fc00:a::3e/126 + bp_interface: + ipv6: fc00:b::10/64 + + ARISTA15T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.17 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::41 + interfaces: + Loopback0: + ipv6: fc00:c:c:11::1/128 + Ethernet1: + ipv6: fc00:a::42/126 + bp_interface: + ipv6: fc00:b::11/64 + + ARISTA16T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.18 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::45 + interfaces: + Loopback0: + ipv6: fc00:c:c:12::1/128 + Ethernet1: + ipv6: fc00:a::46/126 + bp_interface: + ipv6: fc00:b::12/64 + + ARISTA17T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.19 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::49 + interfaces: + Loopback0: + ipv6: fc00:c:c:13::1/128 + Ethernet1: + ipv6: fc00:a::4a/126 + bp_interface: + ipv6: fc00:b::13/64 + + ARISTA18T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.20 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4d + interfaces: + Loopback0: + ipv6: fc00:c:c:14::1/128 + Ethernet1: + ipv6: fc00:a::4e/126 + bp_interface: + ipv6: fc00:b::14/64 + + ARISTA19T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.21 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::51 + interfaces: + Loopback0: + ipv6: fc00:c:c:15::1/128 + Ethernet1: + ipv6: fc00:a::52/126 + bp_interface: + ipv6: fc00:b::15/64 + + ARISTA20T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.22 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::55 + interfaces: + Loopback0: + ipv6: fc00:c:c:16::1/128 + Ethernet1: + ipv6: fc00:a::56/126 + bp_interface: + ipv6: fc00:b::16/64 + + ARISTA21T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.23 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::59 + interfaces: + Loopback0: + ipv6: fc00:c:c:17::1/128 + Ethernet1: + ipv6: fc00:a::5a/126 + bp_interface: + ipv6: fc00:b::17/64 + + ARISTA22T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.24 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5d + interfaces: + Loopback0: + ipv6: fc00:c:c:18::1/128 + Ethernet1: + ipv6: fc00:a::5e/126 + bp_interface: + ipv6: fc00:b::18/64 + + ARISTA23T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.25 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::61 + interfaces: + Loopback0: + ipv6: fc00:c:c:19::1/128 + Ethernet1: + ipv6: fc00:a::62/126 + bp_interface: + ipv6: fc00:b::19/64 + + ARISTA24T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.26 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::65 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a::1/128 + Ethernet1: + ipv6: fc00:a::66/126 + bp_interface: + ipv6: fc00:b::1a/64 + + ARISTA25T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.27 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::69 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b::1/128 + Ethernet1: + ipv6: fc00:a::6a/126 + bp_interface: + ipv6: fc00:b::1b/64 + + ARISTA26T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.28 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c::1/128 + Ethernet1: + ipv6: fc00:a::6e/126 + bp_interface: + ipv6: fc00:b::1c/64 + + ARISTA27T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.29 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::71 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d::1/128 + Ethernet1: + ipv6: fc00:a::72/126 + bp_interface: + ipv6: fc00:b::1d/64 + + ARISTA28T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.30 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::75 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e::1/128 + Ethernet1: + ipv6: fc00:a::76/126 + bp_interface: + ipv6: fc00:b::1e/64 + + ARISTA29T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.31 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::79 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f::1/128 + Ethernet1: + ipv6: fc00:a::7a/126 + bp_interface: + ipv6: fc00:b::1f/64 + + ARISTA30T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.32 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7d + interfaces: + Loopback0: + ipv6: fc00:c:c:20::1/128 + Ethernet1: + ipv6: fc00:a::7e/126 + bp_interface: + ipv6: fc00:b::20/64 + + ARISTA31T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.33 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::81 + interfaces: + Loopback0: + ipv6: fc00:c:c:21::1/128 + Ethernet1: + ipv6: fc00:a::82/126 + bp_interface: + ipv6: fc00:b::21/64 + + ARISTA32T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.34 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::85 + interfaces: + Loopback0: + ipv6: fc00:c:c:22::1/128 + Ethernet1: + ipv6: fc00:a::86/126 + bp_interface: + ipv6: fc00:b::22/64 + + ARISTA33T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.35 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::89 + interfaces: + Loopback0: + ipv6: fc00:c:c:23::1/128 + Ethernet1: + ipv6: fc00:a::8a/126 + bp_interface: + ipv6: fc00:b::23/64 + + ARISTA34T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.36 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::8d + interfaces: + Loopback0: + ipv6: fc00:c:c:24::1/128 + Ethernet1: + ipv6: fc00:a::8e/126 + bp_interface: + ipv6: fc00:b::24/64 + + ARISTA35T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.37 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::91 + interfaces: + Loopback0: + ipv6: fc00:c:c:25::1/128 + Ethernet1: + ipv6: fc00:a::92/126 + bp_interface: + ipv6: fc00:b::25/64 + + ARISTA36T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.38 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::95 + interfaces: + Loopback0: + ipv6: fc00:c:c:26::1/128 + Ethernet1: + ipv6: fc00:a::96/126 + bp_interface: + ipv6: fc00:b::26/64 + + ARISTA37T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.39 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::99 + interfaces: + Loopback0: + ipv6: fc00:c:c:27::1/128 + Ethernet1: + ipv6: fc00:a::9a/126 + bp_interface: + ipv6: fc00:b::27/64 + + ARISTA38T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.40 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::9d + interfaces: + Loopback0: + ipv6: fc00:c:c:28::1/128 + Ethernet1: + ipv6: fc00:a::9e/126 + bp_interface: + ipv6: fc00:b::28/64 + + ARISTA39T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.41 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:29::1/128 + Ethernet1: + ipv6: fc00:a::a2/126 + bp_interface: + ipv6: fc00:b::29/64 + + ARISTA40T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.42 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2a::1/128 + Ethernet1: + ipv6: fc00:a::a6/126 + bp_interface: + ipv6: fc00:b::2a/64 + + ARISTA41T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.43 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2b::1/128 + Ethernet1: + ipv6: fc00:a::aa/126 + bp_interface: + ipv6: fc00:b::2b/64 + + ARISTA42T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.44 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::ad + interfaces: + Loopback0: + ipv6: fc00:c:c:2c::1/128 + Ethernet1: + ipv6: fc00:a::ae/126 + bp_interface: + ipv6: fc00:b::2c/64 + + ARISTA43T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.45 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:2d::1/128 + Ethernet1: + ipv6: fc00:a::b2/126 + bp_interface: + ipv6: fc00:b::2d/64 + + ARISTA44T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.46 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2e::1/128 + Ethernet1: + ipv6: fc00:a::b6/126 + bp_interface: + ipv6: fc00:b::2e/64 + + ARISTA45T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.47 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2f::1/128 + Ethernet1: + ipv6: fc00:a::ba/126 + bp_interface: + ipv6: fc00:b::2f/64 + + ARISTA46T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.48 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::bd + interfaces: + Loopback0: + ipv6: fc00:c:c:30::1/128 + Ethernet1: + ipv6: fc00:a::be/126 + bp_interface: + ipv6: fc00:b::30/64 + + ARISTA47T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.49 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:31::1/128 + Ethernet1: + ipv6: fc00:a::c2/126 + bp_interface: + ipv6: fc00:b::31/64 + + ARISTA48T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.50 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:32::1/128 + Ethernet1: + ipv6: fc00:a::c6/126 + bp_interface: + ipv6: fc00:b::32/64 + + ARISTA49T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.51 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:33::1/128 + Ethernet1: + ipv6: fc00:a::ca/126 + bp_interface: + ipv6: fc00:b::33/64 + + ARISTA50T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.52 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::cd + interfaces: + Loopback0: + ipv6: fc00:c:c:34::1/128 + Ethernet1: + ipv6: fc00:a::ce/126 + bp_interface: + ipv6: fc00:b::34/64 + + ARISTA51T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.53 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:35::1/128 + Ethernet1: + ipv6: fc00:a::d2/126 + bp_interface: + ipv6: fc00:b::35/64 + + ARISTA52T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.54 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:36::1/128 + Ethernet1: + ipv6: fc00:a::d6/126 + bp_interface: + ipv6: fc00:b::36/64 + + ARISTA53T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.55 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:37::1/128 + Ethernet1: + ipv6: fc00:a::da/126 + bp_interface: + ipv6: fc00:b::37/64 + + ARISTA54T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.56 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::dd + interfaces: + Loopback0: + ipv6: fc00:c:c:38::1/128 + Ethernet1: + ipv6: fc00:a::de/126 + bp_interface: + ipv6: fc00:b::38/64 + + ARISTA55T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.57 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:39::1/128 + Ethernet1: + ipv6: fc00:a::e2/126 + bp_interface: + ipv6: fc00:b::39/64 + + ARISTA56T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.58 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3a::1/128 + Ethernet1: + ipv6: fc00:a::e6/126 + bp_interface: + ipv6: fc00:b::3a/64 + + ARISTA57T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.59 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3b::1/128 + Ethernet1: + ipv6: fc00:a::ea/126 + bp_interface: + ipv6: fc00:b::3b/64 + + ARISTA58T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.60 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::ed + interfaces: + Loopback0: + ipv6: fc00:c:c:3c::1/128 + Ethernet1: + ipv6: fc00:a::ee/126 + bp_interface: + ipv6: fc00:b::3c/64 + + ARISTA59T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.61 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:3d::1/128 + Ethernet1: + ipv6: fc00:a::f2/126 + bp_interface: + ipv6: fc00:b::3d/64 + + ARISTA60T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.62 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3e::1/128 + Ethernet1: + ipv6: fc00:a::f6/126 + bp_interface: + ipv6: fc00:b::3e/64 + + ARISTA61T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.63 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3f::1/128 + Ethernet1: + ipv6: fc00:a::fa/126 + bp_interface: + ipv6: fc00:b::3f/64 + + ARISTA62T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.64 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::fd + interfaces: + Loopback0: + ipv6: fc00:c:c:40::1/128 + Ethernet1: + ipv6: fc00:a::fe/126 + bp_interface: + ipv6: fc00:b::40/64 + + ARISTA63T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.65 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::101 + interfaces: + Loopback0: + ipv6: fc00:c:c:41::1/128 + Ethernet1: + ipv6: fc00:a::102/126 + bp_interface: + ipv6: fc00:b::41/64 + + ARISTA64T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.66 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::105 + interfaces: + Loopback0: + ipv6: fc00:c:c:42::1/128 + Ethernet1: + ipv6: fc00:a::106/126 + bp_interface: + ipv6: fc00:b::42/64 + + ARISTA65T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.67 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::109 + interfaces: + Loopback0: + ipv6: fc00:c:c:43::1/128 + Ethernet1: + ipv6: fc00:a::10a/126 + bp_interface: + ipv6: fc00:b::43/64 + + ARISTA66T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.68 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::10d + interfaces: + Loopback0: + ipv6: fc00:c:c:44::1/128 + Ethernet1: + ipv6: fc00:a::10e/126 + bp_interface: + ipv6: fc00:b::44/64 + + ARISTA67T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.69 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::111 + interfaces: + Loopback0: + ipv6: fc00:c:c:45::1/128 + Ethernet1: + ipv6: fc00:a::112/126 + bp_interface: + ipv6: fc00:b::45/64 + + ARISTA68T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.70 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::115 + interfaces: + Loopback0: + ipv6: fc00:c:c:46::1/128 + Ethernet1: + ipv6: fc00:a::116/126 + bp_interface: + ipv6: fc00:b::46/64 + + ARISTA69T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.71 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::119 + interfaces: + Loopback0: + ipv6: fc00:c:c:47::1/128 + Ethernet1: + ipv6: fc00:a::11a/126 + bp_interface: + ipv6: fc00:b::47/64 + + ARISTA70T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.72 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::11d + interfaces: + Loopback0: + ipv6: fc00:c:c:48::1/128 + Ethernet1: + ipv6: fc00:a::11e/126 + bp_interface: + ipv6: fc00:b::48/64 + + ARISTA71T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.73 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::121 + interfaces: + Loopback0: + ipv6: fc00:c:c:49::1/128 + Ethernet1: + ipv6: fc00:a::122/126 + bp_interface: + ipv6: fc00:b::49/64 + + ARISTA72T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.74 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::125 + interfaces: + Loopback0: + ipv6: fc00:c:c:4a::1/128 + Ethernet1: + ipv6: fc00:a::126/126 + bp_interface: + ipv6: fc00:b::4a/64 + + ARISTA73T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.75 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::129 + interfaces: + Loopback0: + ipv6: fc00:c:c:4b::1/128 + Ethernet1: + ipv6: fc00:a::12a/126 + bp_interface: + ipv6: fc00:b::4b/64 + + ARISTA74T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.76 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::12d + interfaces: + Loopback0: + ipv6: fc00:c:c:4c::1/128 + Ethernet1: + ipv6: fc00:a::12e/126 + bp_interface: + ipv6: fc00:b::4c/64 + + ARISTA75T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.77 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::131 + interfaces: + Loopback0: + ipv6: fc00:c:c:4d::1/128 + Ethernet1: + ipv6: fc00:a::132/126 + bp_interface: + ipv6: fc00:b::4d/64 + + ARISTA76T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.78 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::135 + interfaces: + Loopback0: + ipv6: fc00:c:c:4e::1/128 + Ethernet1: + ipv6: fc00:a::136/126 + bp_interface: + ipv6: fc00:b::4e/64 + + ARISTA77T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.79 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::139 + interfaces: + Loopback0: + ipv6: fc00:c:c:4f::1/128 + Ethernet1: + ipv6: fc00:a::13a/126 + bp_interface: + ipv6: fc00:b::4f/64 + + ARISTA78T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.80 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::13d + interfaces: + Loopback0: + ipv6: fc00:c:c:50::1/128 + Ethernet1: + ipv6: fc00:a::13e/126 + bp_interface: + ipv6: fc00:b::50/64 + + ARISTA79T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.81 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::141 + interfaces: + Loopback0: + ipv6: fc00:c:c:51::1/128 + Ethernet1: + ipv6: fc00:a::142/126 + bp_interface: + ipv6: fc00:b::51/64 + + ARISTA80T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.82 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::145 + interfaces: + Loopback0: + ipv6: fc00:c:c:52::1/128 + Ethernet1: + ipv6: fc00:a::146/126 + bp_interface: + ipv6: fc00:b::52/64 + + ARISTA81T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.83 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::149 + interfaces: + Loopback0: + ipv6: fc00:c:c:53::1/128 + Ethernet1: + ipv6: fc00:a::14a/126 + bp_interface: + ipv6: fc00:b::53/64 + + ARISTA82T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.84 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::14d + interfaces: + Loopback0: + ipv6: fc00:c:c:54::1/128 + Ethernet1: + ipv6: fc00:a::14e/126 + bp_interface: + ipv6: fc00:b::54/64 + + ARISTA83T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.85 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::151 + interfaces: + Loopback0: + ipv6: fc00:c:c:55::1/128 + Ethernet1: + ipv6: fc00:a::152/126 + bp_interface: + ipv6: fc00:b::55/64 + + ARISTA84T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.86 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::155 + interfaces: + Loopback0: + ipv6: fc00:c:c:56::1/128 + Ethernet1: + ipv6: fc00:a::156/126 + bp_interface: + ipv6: fc00:b::56/64 + + ARISTA85T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.87 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::159 + interfaces: + Loopback0: + ipv6: fc00:c:c:57::1/128 + Ethernet1: + ipv6: fc00:a::15a/126 + bp_interface: + ipv6: fc00:b::57/64 + + ARISTA86T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.88 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::15d + interfaces: + Loopback0: + ipv6: fc00:c:c:58::1/128 + Ethernet1: + ipv6: fc00:a::15e/126 + bp_interface: + ipv6: fc00:b::58/64 + + ARISTA87T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.89 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::161 + interfaces: + Loopback0: + ipv6: fc00:c:c:59::1/128 + Ethernet1: + ipv6: fc00:a::162/126 + bp_interface: + ipv6: fc00:b::59/64 + + ARISTA88T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.90 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::165 + interfaces: + Loopback0: + ipv6: fc00:c:c:5a::1/128 + Ethernet1: + ipv6: fc00:a::166/126 + bp_interface: + ipv6: fc00:b::5a/64 + + ARISTA89T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.91 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::169 + interfaces: + Loopback0: + ipv6: fc00:c:c:5b::1/128 + Ethernet1: + ipv6: fc00:a::16a/126 + bp_interface: + ipv6: fc00:b::5b/64 + + ARISTA90T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.92 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::16d + interfaces: + Loopback0: + ipv6: fc00:c:c:5c::1/128 + Ethernet1: + ipv6: fc00:a::16e/126 + bp_interface: + ipv6: fc00:b::5c/64 + + ARISTA91T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.93 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::171 + interfaces: + Loopback0: + ipv6: fc00:c:c:5d::1/128 + Ethernet1: + ipv6: fc00:a::172/126 + bp_interface: + ipv6: fc00:b::5d/64 + + ARISTA92T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.94 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::175 + interfaces: + Loopback0: + ipv6: fc00:c:c:5e::1/128 + Ethernet1: + ipv6: fc00:a::176/126 + bp_interface: + ipv6: fc00:b::5e/64 + + ARISTA93T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.95 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::179 + interfaces: + Loopback0: + ipv6: fc00:c:c:5f::1/128 + Ethernet1: + ipv6: fc00:a::17a/126 + bp_interface: + ipv6: fc00:b::5f/64 + + ARISTA94T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.96 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::17d + interfaces: + Loopback0: + ipv6: fc00:c:c:60::1/128 + Ethernet1: + ipv6: fc00:a::17e/126 + bp_interface: + ipv6: fc00:b::60/64 + + ARISTA95T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.97 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::181 + interfaces: + Loopback0: + ipv6: fc00:c:c:61::1/128 + Ethernet1: + ipv6: fc00:a::182/126 + bp_interface: + ipv6: fc00:b::61/64 + + ARISTA96T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.98 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::185 + interfaces: + Loopback0: + ipv6: fc00:c:c:62::1/128 + Ethernet1: + ipv6: fc00:a::186/126 + bp_interface: + ipv6: fc00:b::62/64 + + ARISTA97T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.99 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::189 + interfaces: + Loopback0: + ipv6: fc00:c:c:63::1/128 + Ethernet1: + ipv6: fc00:a::18a/126 + bp_interface: + ipv6: fc00:b::63/64 + + ARISTA98T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.100 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::18d + interfaces: + Loopback0: + ipv6: fc00:c:c:64::1/128 + Ethernet1: + ipv6: fc00:a::18e/126 + bp_interface: + ipv6: fc00:b::64/64 + + ARISTA99T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.101 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::191 + interfaces: + Loopback0: + ipv6: fc00:c:c:65::1/128 + Ethernet1: + ipv6: fc00:a::192/126 + bp_interface: + ipv6: fc00:b::65/64 + + ARISTA100T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.102 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::195 + interfaces: + Loopback0: + ipv6: fc00:c:c:66::1/128 + Ethernet1: + ipv6: fc00:a::196/126 + bp_interface: + ipv6: fc00:b::66/64 + + ARISTA101T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.103 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::199 + interfaces: + Loopback0: + ipv6: fc00:c:c:67::1/128 + Ethernet1: + ipv6: fc00:a::19a/126 + bp_interface: + ipv6: fc00:b::67/64 + + ARISTA102T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.104 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::19d + interfaces: + Loopback0: + ipv6: fc00:c:c:68::1/128 + Ethernet1: + ipv6: fc00:a::19e/126 + bp_interface: + ipv6: fc00:b::68/64 + + ARISTA103T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.105 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:69::1/128 + Ethernet1: + ipv6: fc00:a::1a2/126 + bp_interface: + ipv6: fc00:b::69/64 + + ARISTA104T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.106 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6a::1/128 + Ethernet1: + ipv6: fc00:a::1a6/126 + bp_interface: + ipv6: fc00:b::6a/64 + + ARISTA105T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.107 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6b::1/128 + Ethernet1: + ipv6: fc00:a::1aa/126 + bp_interface: + ipv6: fc00:b::6b/64 + + ARISTA106T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.108 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1ad + interfaces: + Loopback0: + ipv6: fc00:c:c:6c::1/128 + Ethernet1: + ipv6: fc00:a::1ae/126 + bp_interface: + ipv6: fc00:b::6c/64 + + ARISTA107T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.109 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:6d::1/128 + Ethernet1: + ipv6: fc00:a::1b2/126 + bp_interface: + ipv6: fc00:b::6d/64 + + ARISTA108T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.110 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6e::1/128 + Ethernet1: + ipv6: fc00:a::1b6/126 + bp_interface: + ipv6: fc00:b::6e/64 + + ARISTA109T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.111 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6f::1/128 + Ethernet1: + ipv6: fc00:a::1ba/126 + bp_interface: + ipv6: fc00:b::6f/64 + + ARISTA110T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.112 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1bd + interfaces: + Loopback0: + ipv6: fc00:c:c:70::1/128 + Ethernet1: + ipv6: fc00:a::1be/126 + bp_interface: + ipv6: fc00:b::70/64 + + ARISTA111T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.113 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:71::1/128 + Ethernet1: + ipv6: fc00:a::1c2/126 + bp_interface: + ipv6: fc00:b::71/64 + + ARISTA112T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.114 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:72::1/128 + Ethernet1: + ipv6: fc00:a::1c6/126 + bp_interface: + ipv6: fc00:b::72/64 + + ARISTA113T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.115 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:73::1/128 + Ethernet1: + ipv6: fc00:a::1ca/126 + bp_interface: + ipv6: fc00:b::73/64 + + ARISTA114T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.116 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1cd + interfaces: + Loopback0: + ipv6: fc00:c:c:74::1/128 + Ethernet1: + ipv6: fc00:a::1ce/126 + bp_interface: + ipv6: fc00:b::74/64 + + ARISTA115T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.117 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:75::1/128 + Ethernet1: + ipv6: fc00:a::1d2/126 + bp_interface: + ipv6: fc00:b::75/64 + + ARISTA116T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.118 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:76::1/128 + Ethernet1: + ipv6: fc00:a::1d6/126 + bp_interface: + ipv6: fc00:b::76/64 + + ARISTA117T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.119 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:77::1/128 + Ethernet1: + ipv6: fc00:a::1da/126 + bp_interface: + ipv6: fc00:b::77/64 + + ARISTA118T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.120 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1dd + interfaces: + Loopback0: + ipv6: fc00:c:c:78::1/128 + Ethernet1: + ipv6: fc00:a::1de/126 + bp_interface: + ipv6: fc00:b::78/64 + + ARISTA119T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.121 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:79::1/128 + Ethernet1: + ipv6: fc00:a::1e2/126 + bp_interface: + ipv6: fc00:b::79/64 + + ARISTA120T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.122 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7a::1/128 + Ethernet1: + ipv6: fc00:a::1e6/126 + bp_interface: + ipv6: fc00:b::7a/64 + + ARISTA121T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.123 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7b::1/128 + Ethernet1: + ipv6: fc00:a::1ea/126 + bp_interface: + ipv6: fc00:b::7b/64 + + ARISTA122T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.124 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1ed + interfaces: + Loopback0: + ipv6: fc00:c:c:7c::1/128 + Ethernet1: + ipv6: fc00:a::1ee/126 + bp_interface: + ipv6: fc00:b::7c/64 + + ARISTA123T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.125 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:7d::1/128 + Ethernet1: + ipv6: fc00:a::1f2/126 + bp_interface: + ipv6: fc00:b::7d/64 + + ARISTA124T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.126 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7e::1/128 + Ethernet1: + ipv6: fc00:a::1f6/126 + bp_interface: + ipv6: fc00:b::7e/64 + + ARISTA125T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.127 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7f::1/128 + Ethernet1: + ipv6: fc00:a::1fa/126 + bp_interface: + ipv6: fc00:b::7f/64 + + ARISTA126T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.128 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1fd + interfaces: + Loopback0: + ipv6: fc00:c:c:80::1/128 + Ethernet1: + ipv6: fc00:a::1fe/126 + bp_interface: + ipv6: fc00:b::80/64 + + ARISTA127T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.129 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::201 + interfaces: + Loopback0: + ipv6: fc00:c:c:81::1/128 + Ethernet1: + ipv6: fc00:a::202/126 + bp_interface: + ipv6: fc00:b::81/64 + + ARISTA128T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.130 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::205 + interfaces: + Loopback0: + ipv6: fc00:c:c:82::1/128 + Ethernet1: + ipv6: fc00:a::206/126 + bp_interface: + ipv6: fc00:b::82/64 + + ARISTA129T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.131 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::209 + interfaces: + Loopback0: + ipv6: fc00:c:c:83::1/128 + Ethernet1: + ipv6: fc00:a::20a/126 + bp_interface: + ipv6: fc00:b::83/64 + + ARISTA130T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.132 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::20d + interfaces: + Loopback0: + ipv6: fc00:c:c:84::1/128 + Ethernet1: + ipv6: fc00:a::20e/126 + bp_interface: + ipv6: fc00:b::84/64 + + ARISTA131T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.133 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::211 + interfaces: + Loopback0: + ipv6: fc00:c:c:85::1/128 + Ethernet1: + ipv6: fc00:a::212/126 + bp_interface: + ipv6: fc00:b::85/64 + + ARISTA132T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.134 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::215 + interfaces: + Loopback0: + ipv6: fc00:c:c:86::1/128 + Ethernet1: + ipv6: fc00:a::216/126 + bp_interface: + ipv6: fc00:b::86/64 + + ARISTA133T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.135 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::219 + interfaces: + Loopback0: + ipv6: fc00:c:c:87::1/128 + Ethernet1: + ipv6: fc00:a::21a/126 + bp_interface: + ipv6: fc00:b::87/64 + + ARISTA134T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.136 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::21d + interfaces: + Loopback0: + ipv6: fc00:c:c:88::1/128 + Ethernet1: + ipv6: fc00:a::21e/126 + bp_interface: + ipv6: fc00:b::88/64 + + ARISTA135T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.137 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::221 + interfaces: + Loopback0: + ipv6: fc00:c:c:89::1/128 + Ethernet1: + ipv6: fc00:a::222/126 + bp_interface: + ipv6: fc00:b::89/64 + + ARISTA136T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.138 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::225 + interfaces: + Loopback0: + ipv6: fc00:c:c:8a::1/128 + Ethernet1: + ipv6: fc00:a::226/126 + bp_interface: + ipv6: fc00:b::8a/64 + + ARISTA137T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.139 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::229 + interfaces: + Loopback0: + ipv6: fc00:c:c:8b::1/128 + Ethernet1: + ipv6: fc00:a::22a/126 + bp_interface: + ipv6: fc00:b::8b/64 + + ARISTA138T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.140 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::22d + interfaces: + Loopback0: + ipv6: fc00:c:c:8c::1/128 + Ethernet1: + ipv6: fc00:a::22e/126 + bp_interface: + ipv6: fc00:b::8c/64 + + ARISTA139T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.141 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::231 + interfaces: + Loopback0: + ipv6: fc00:c:c:8d::1/128 + Ethernet1: + ipv6: fc00:a::232/126 + bp_interface: + ipv6: fc00:b::8d/64 + + ARISTA140T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.142 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::235 + interfaces: + Loopback0: + ipv6: fc00:c:c:8e::1/128 + Ethernet1: + ipv6: fc00:a::236/126 + bp_interface: + ipv6: fc00:b::8e/64 + + ARISTA141T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.143 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::239 + interfaces: + Loopback0: + ipv6: fc00:c:c:8f::1/128 + Ethernet1: + ipv6: fc00:a::23a/126 + bp_interface: + ipv6: fc00:b::8f/64 + + ARISTA142T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.144 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::23d + interfaces: + Loopback0: + ipv6: fc00:c:c:90::1/128 + Ethernet1: + ipv6: fc00:a::23e/126 + bp_interface: + ipv6: fc00:b::90/64 + + ARISTA143T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.145 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::241 + interfaces: + Loopback0: + ipv6: fc00:c:c:91::1/128 + Ethernet1: + ipv6: fc00:a::242/126 + bp_interface: + ipv6: fc00:b::91/64 + + ARISTA144T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.146 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::245 + interfaces: + Loopback0: + ipv6: fc00:c:c:92::1/128 + Ethernet1: + ipv6: fc00:a::246/126 + bp_interface: + ipv6: fc00:b::92/64 + + ARISTA145T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.147 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::249 + interfaces: + Loopback0: + ipv6: fc00:c:c:93::1/128 + Ethernet1: + ipv6: fc00:a::24a/126 + bp_interface: + ipv6: fc00:b::93/64 + + ARISTA146T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.148 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::24d + interfaces: + Loopback0: + ipv6: fc00:c:c:94::1/128 + Ethernet1: + ipv6: fc00:a::24e/126 + bp_interface: + ipv6: fc00:b::94/64 + + ARISTA147T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.149 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::251 + interfaces: + Loopback0: + ipv6: fc00:c:c:95::1/128 + Ethernet1: + ipv6: fc00:a::252/126 + bp_interface: + ipv6: fc00:b::95/64 + + ARISTA148T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.150 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::255 + interfaces: + Loopback0: + ipv6: fc00:c:c:96::1/128 + Ethernet1: + ipv6: fc00:a::256/126 + bp_interface: + ipv6: fc00:b::96/64 + + ARISTA149T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.151 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::259 + interfaces: + Loopback0: + ipv6: fc00:c:c:97::1/128 + Ethernet1: + ipv6: fc00:a::25a/126 + bp_interface: + ipv6: fc00:b::97/64 + + ARISTA150T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.152 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::25d + interfaces: + Loopback0: + ipv6: fc00:c:c:98::1/128 + Ethernet1: + ipv6: fc00:a::25e/126 + bp_interface: + ipv6: fc00:b::98/64 + + ARISTA151T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.153 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::261 + interfaces: + Loopback0: + ipv6: fc00:c:c:99::1/128 + Ethernet1: + ipv6: fc00:a::262/126 + bp_interface: + ipv6: fc00:b::99/64 + + ARISTA152T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.154 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::265 + interfaces: + Loopback0: + ipv6: fc00:c:c:9a::1/128 + Ethernet1: + ipv6: fc00:a::266/126 + bp_interface: + ipv6: fc00:b::9a/64 + + ARISTA153T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.155 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::269 + interfaces: + Loopback0: + ipv6: fc00:c:c:9b::1/128 + Ethernet1: + ipv6: fc00:a::26a/126 + bp_interface: + ipv6: fc00:b::9b/64 + + ARISTA154T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.156 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::26d + interfaces: + Loopback0: + ipv6: fc00:c:c:9c::1/128 + Ethernet1: + ipv6: fc00:a::26e/126 + bp_interface: + ipv6: fc00:b::9c/64 + + ARISTA155T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.157 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::271 + interfaces: + Loopback0: + ipv6: fc00:c:c:9d::1/128 + Ethernet1: + ipv6: fc00:a::272/126 + bp_interface: + ipv6: fc00:b::9d/64 + + ARISTA156T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.158 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::275 + interfaces: + Loopback0: + ipv6: fc00:c:c:9e::1/128 + Ethernet1: + ipv6: fc00:a::276/126 + bp_interface: + ipv6: fc00:b::9e/64 + + ARISTA157T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.159 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::279 + interfaces: + Loopback0: + ipv6: fc00:c:c:9f::1/128 + Ethernet1: + ipv6: fc00:a::27a/126 + bp_interface: + ipv6: fc00:b::9f/64 + + ARISTA158T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.160 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::27d + interfaces: + Loopback0: + ipv6: fc00:c:c:a0::1/128 + Ethernet1: + ipv6: fc00:a::27e/126 + bp_interface: + ipv6: fc00:b::a0/64 + + ARISTA159T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.161 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::281 + interfaces: + Loopback0: + ipv6: fc00:c:c:a1::1/128 + Ethernet1: + ipv6: fc00:a::282/126 + bp_interface: + ipv6: fc00:b::a1/64 + + ARISTA160T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.162 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::285 + interfaces: + Loopback0: + ipv6: fc00:c:c:a2::1/128 + Ethernet1: + ipv6: fc00:a::286/126 + bp_interface: + ipv6: fc00:b::a2/64 + + ARISTA161T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.163 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::289 + interfaces: + Loopback0: + ipv6: fc00:c:c:a3::1/128 + Ethernet1: + ipv6: fc00:a::28a/126 + bp_interface: + ipv6: fc00:b::a3/64 + + ARISTA162T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.164 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::28d + interfaces: + Loopback0: + ipv6: fc00:c:c:a4::1/128 + Ethernet1: + ipv6: fc00:a::28e/126 + bp_interface: + ipv6: fc00:b::a4/64 + + ARISTA163T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.165 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::291 + interfaces: + Loopback0: + ipv6: fc00:c:c:a5::1/128 + Ethernet1: + ipv6: fc00:a::292/126 + bp_interface: + ipv6: fc00:b::a5/64 + + ARISTA164T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.166 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::295 + interfaces: + Loopback0: + ipv6: fc00:c:c:a6::1/128 + Ethernet1: + ipv6: fc00:a::296/126 + bp_interface: + ipv6: fc00:b::a6/64 + + ARISTA165T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.167 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::299 + interfaces: + Loopback0: + ipv6: fc00:c:c:a7::1/128 + Ethernet1: + ipv6: fc00:a::29a/126 + bp_interface: + ipv6: fc00:b::a7/64 + + ARISTA166T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.168 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::29d + interfaces: + Loopback0: + ipv6: fc00:c:c:a8::1/128 + Ethernet1: + ipv6: fc00:a::29e/126 + bp_interface: + ipv6: fc00:b::a8/64 + + ARISTA167T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.169 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:a9::1/128 + Ethernet1: + ipv6: fc00:a::2a2/126 + bp_interface: + ipv6: fc00:b::a9/64 + + ARISTA168T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.170 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:aa::1/128 + Ethernet1: + ipv6: fc00:a::2a6/126 + bp_interface: + ipv6: fc00:b::aa/64 + + ARISTA169T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.171 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ab::1/128 + Ethernet1: + ipv6: fc00:a::2aa/126 + bp_interface: + ipv6: fc00:b::ab/64 + + ARISTA170T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.172 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ac::1/128 + Ethernet1: + ipv6: fc00:a::2ae/126 + bp_interface: + ipv6: fc00:b::ac/64 + + ARISTA171T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.173 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ad::1/128 + Ethernet1: + ipv6: fc00:a::2b2/126 + bp_interface: + ipv6: fc00:b::ad/64 + + ARISTA172T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.174 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ae::1/128 + Ethernet1: + ipv6: fc00:a::2b6/126 + bp_interface: + ipv6: fc00:b::ae/64 + + ARISTA173T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.175 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:af::1/128 + Ethernet1: + ipv6: fc00:a::2ba/126 + bp_interface: + ipv6: fc00:b::af/64 + + ARISTA174T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.176 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2bd + interfaces: + Loopback0: + ipv6: fc00:c:c:b0::1/128 + Ethernet1: + ipv6: fc00:a::2be/126 + bp_interface: + ipv6: fc00:b::b0/64 + + ARISTA175T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.177 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b1::1/128 + Ethernet1: + ipv6: fc00:a::2c2/126 + bp_interface: + ipv6: fc00:b::b1/64 + + ARISTA176T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.178 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b2::1/128 + Ethernet1: + ipv6: fc00:a::2c6/126 + bp_interface: + ipv6: fc00:b::b2/64 + + ARISTA177T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.179 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b3::1/128 + Ethernet1: + ipv6: fc00:a::2ca/126 + bp_interface: + ipv6: fc00:b::b3/64 + + ARISTA178T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.180 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2cd + interfaces: + Loopback0: + ipv6: fc00:c:c:b4::1/128 + Ethernet1: + ipv6: fc00:a::2ce/126 + bp_interface: + ipv6: fc00:b::b4/64 + + ARISTA179T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.181 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b5::1/128 + Ethernet1: + ipv6: fc00:a::2d2/126 + bp_interface: + ipv6: fc00:b::b5/64 + + ARISTA180T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.182 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b6::1/128 + Ethernet1: + ipv6: fc00:a::2d6/126 + bp_interface: + ipv6: fc00:b::b6/64 + + ARISTA181T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.183 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b7::1/128 + Ethernet1: + ipv6: fc00:a::2da/126 + bp_interface: + ipv6: fc00:b::b7/64 + + ARISTA182T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.184 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2dd + interfaces: + Loopback0: + ipv6: fc00:c:c:b8::1/128 + Ethernet1: + ipv6: fc00:a::2de/126 + bp_interface: + ipv6: fc00:b::b8/64 + + ARISTA183T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.185 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b9::1/128 + Ethernet1: + ipv6: fc00:a::2e2/126 + bp_interface: + ipv6: fc00:b::b9/64 + + ARISTA184T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.186 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ba::1/128 + Ethernet1: + ipv6: fc00:a::2e6/126 + bp_interface: + ipv6: fc00:b::ba/64 + + ARISTA185T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.187 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bb::1/128 + Ethernet1: + ipv6: fc00:a::2ea/126 + bp_interface: + ipv6: fc00:b::bb/64 + + ARISTA186T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.188 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2ed + interfaces: + Loopback0: + ipv6: fc00:c:c:bc::1/128 + Ethernet1: + ipv6: fc00:a::2ee/126 + bp_interface: + ipv6: fc00:b::bc/64 + + ARISTA187T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.189 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:bd::1/128 + Ethernet1: + ipv6: fc00:a::2f2/126 + bp_interface: + ipv6: fc00:b::bd/64 + + ARISTA188T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.190 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:be::1/128 + Ethernet1: + ipv6: fc00:a::2f6/126 + bp_interface: + ipv6: fc00:b::be/64 + + ARISTA189T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.191 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bf::1/128 + Ethernet1: + ipv6: fc00:a::2fa/126 + bp_interface: + ipv6: fc00:b::bf/64 + + ARISTA190T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.192 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2fd + interfaces: + Loopback0: + ipv6: fc00:c:c:c0::1/128 + Ethernet1: + ipv6: fc00:a::2fe/126 + bp_interface: + ipv6: fc00:b::c0/64 + + ARISTA191T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.193 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::301 + interfaces: + Loopback0: + ipv6: fc00:c:c:c1::1/128 + Ethernet1: + ipv6: fc00:a::302/126 + bp_interface: + ipv6: fc00:b::c1/64 + + ARISTA192T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.194 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::305 + interfaces: + Loopback0: + ipv6: fc00:c:c:c2::1/128 + Ethernet1: + ipv6: fc00:a::306/126 + bp_interface: + ipv6: fc00:b::c2/64 + + ARISTA193T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.195 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::309 + interfaces: + Loopback0: + ipv6: fc00:c:c:c3::1/128 + Ethernet1: + ipv6: fc00:a::30a/126 + bp_interface: + ipv6: fc00:b::c3/64 + + ARISTA194T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.196 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::30d + interfaces: + Loopback0: + ipv6: fc00:c:c:c4::1/128 + Ethernet1: + ipv6: fc00:a::30e/126 + bp_interface: + ipv6: fc00:b::c4/64 + + ARISTA195T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.197 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::311 + interfaces: + Loopback0: + ipv6: fc00:c:c:c5::1/128 + Ethernet1: + ipv6: fc00:a::312/126 + bp_interface: + ipv6: fc00:b::c5/64 + + ARISTA196T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.198 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::315 + interfaces: + Loopback0: + ipv6: fc00:c:c:c6::1/128 + Ethernet1: + ipv6: fc00:a::316/126 + bp_interface: + ipv6: fc00:b::c6/64 + + ARISTA197T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.199 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::319 + interfaces: + Loopback0: + ipv6: fc00:c:c:c7::1/128 + Ethernet1: + ipv6: fc00:a::31a/126 + bp_interface: + ipv6: fc00:b::c7/64 + + ARISTA198T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.200 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::31d + interfaces: + Loopback0: + ipv6: fc00:c:c:c8::1/128 + Ethernet1: + ipv6: fc00:a::31e/126 + bp_interface: + ipv6: fc00:b::c8/64 + + ARISTA199T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.201 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::321 + interfaces: + Loopback0: + ipv6: fc00:c:c:c9::1/128 + Ethernet1: + ipv6: fc00:a::322/126 + bp_interface: + ipv6: fc00:b::c9/64 + + ARISTA200T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.202 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::325 + interfaces: + Loopback0: + ipv6: fc00:c:c:ca::1/128 + Ethernet1: + ipv6: fc00:a::326/126 + bp_interface: + ipv6: fc00:b::ca/64 + + ARISTA201T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.203 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::329 + interfaces: + Loopback0: + ipv6: fc00:c:c:cb::1/128 + Ethernet1: + ipv6: fc00:a::32a/126 + bp_interface: + ipv6: fc00:b::cb/64 + + ARISTA202T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.204 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::32d + interfaces: + Loopback0: + ipv6: fc00:c:c:cc::1/128 + Ethernet1: + ipv6: fc00:a::32e/126 + bp_interface: + ipv6: fc00:b::cc/64 + + ARISTA203T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.205 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::331 + interfaces: + Loopback0: + ipv6: fc00:c:c:cd::1/128 + Ethernet1: + ipv6: fc00:a::332/126 + bp_interface: + ipv6: fc00:b::cd/64 + + ARISTA204T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.206 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::335 + interfaces: + Loopback0: + ipv6: fc00:c:c:ce::1/128 + Ethernet1: + ipv6: fc00:a::336/126 + bp_interface: + ipv6: fc00:b::ce/64 + + ARISTA205T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.207 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::339 + interfaces: + Loopback0: + ipv6: fc00:c:c:cf::1/128 + Ethernet1: + ipv6: fc00:a::33a/126 + bp_interface: + ipv6: fc00:b::cf/64 + + ARISTA206T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.208 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::33d + interfaces: + Loopback0: + ipv6: fc00:c:c:d0::1/128 + Ethernet1: + ipv6: fc00:a::33e/126 + bp_interface: + ipv6: fc00:b::d0/64 + + ARISTA207T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.209 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::341 + interfaces: + Loopback0: + ipv6: fc00:c:c:d1::1/128 + Ethernet1: + ipv6: fc00:a::342/126 + bp_interface: + ipv6: fc00:b::d1/64 + + ARISTA208T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.210 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::345 + interfaces: + Loopback0: + ipv6: fc00:c:c:d2::1/128 + Ethernet1: + ipv6: fc00:a::346/126 + bp_interface: + ipv6: fc00:b::d2/64 + + ARISTA209T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.211 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::349 + interfaces: + Loopback0: + ipv6: fc00:c:c:d3::1/128 + Ethernet1: + ipv6: fc00:a::34a/126 + bp_interface: + ipv6: fc00:b::d3/64 + + ARISTA210T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.212 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::34d + interfaces: + Loopback0: + ipv6: fc00:c:c:d4::1/128 + Ethernet1: + ipv6: fc00:a::34e/126 + bp_interface: + ipv6: fc00:b::d4/64 + + ARISTA211T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.213 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::351 + interfaces: + Loopback0: + ipv6: fc00:c:c:d5::1/128 + Ethernet1: + ipv6: fc00:a::352/126 + bp_interface: + ipv6: fc00:b::d5/64 + + ARISTA212T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.214 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::355 + interfaces: + Loopback0: + ipv6: fc00:c:c:d6::1/128 + Ethernet1: + ipv6: fc00:a::356/126 + bp_interface: + ipv6: fc00:b::d6/64 + + ARISTA213T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.215 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::359 + interfaces: + Loopback0: + ipv6: fc00:c:c:d7::1/128 + Ethernet1: + ipv6: fc00:a::35a/126 + bp_interface: + ipv6: fc00:b::d7/64 + + ARISTA214T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.216 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::35d + interfaces: + Loopback0: + ipv6: fc00:c:c:d8::1/128 + Ethernet1: + ipv6: fc00:a::35e/126 + bp_interface: + ipv6: fc00:b::d8/64 + + ARISTA215T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.217 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::361 + interfaces: + Loopback0: + ipv6: fc00:c:c:d9::1/128 + Ethernet1: + ipv6: fc00:a::362/126 + bp_interface: + ipv6: fc00:b::d9/64 + + ARISTA216T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.218 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::365 + interfaces: + Loopback0: + ipv6: fc00:c:c:da::1/128 + Ethernet1: + ipv6: fc00:a::366/126 + bp_interface: + ipv6: fc00:b::da/64 + + ARISTA217T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.219 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::369 + interfaces: + Loopback0: + ipv6: fc00:c:c:db::1/128 + Ethernet1: + ipv6: fc00:a::36a/126 + bp_interface: + ipv6: fc00:b::db/64 + + ARISTA218T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.220 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::36d + interfaces: + Loopback0: + ipv6: fc00:c:c:dc::1/128 + Ethernet1: + ipv6: fc00:a::36e/126 + bp_interface: + ipv6: fc00:b::dc/64 + + ARISTA219T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.221 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::371 + interfaces: + Loopback0: + ipv6: fc00:c:c:dd::1/128 + Ethernet1: + ipv6: fc00:a::372/126 + bp_interface: + ipv6: fc00:b::dd/64 + + ARISTA220T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.222 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::375 + interfaces: + Loopback0: + ipv6: fc00:c:c:de::1/128 + Ethernet1: + ipv6: fc00:a::376/126 + bp_interface: + ipv6: fc00:b::de/64 + + ARISTA221T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.223 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::379 + interfaces: + Loopback0: + ipv6: fc00:c:c:df::1/128 + Ethernet1: + ipv6: fc00:a::37a/126 + bp_interface: + ipv6: fc00:b::df/64 + + ARISTA222T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.224 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::37d + interfaces: + Loopback0: + ipv6: fc00:c:c:e0::1/128 + Ethernet1: + ipv6: fc00:a::37e/126 + bp_interface: + ipv6: fc00:b::e0/64 + + ARISTA223T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.225 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::381 + interfaces: + Loopback0: + ipv6: fc00:c:c:e1::1/128 + Ethernet1: + ipv6: fc00:a::382/126 + bp_interface: + ipv6: fc00:b::e1/64 + + ARISTA224T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.226 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::385 + interfaces: + Loopback0: + ipv6: fc00:c:c:e2::1/128 + Ethernet1: + ipv6: fc00:a::386/126 + bp_interface: + ipv6: fc00:b::e2/64 + + ARISTA225T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.227 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::389 + interfaces: + Loopback0: + ipv6: fc00:c:c:e3::1/128 + Ethernet1: + ipv6: fc00:a::38a/126 + bp_interface: + ipv6: fc00:b::e3/64 + + ARISTA226T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.228 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::38d + interfaces: + Loopback0: + ipv6: fc00:c:c:e4::1/128 + Ethernet1: + ipv6: fc00:a::38e/126 + bp_interface: + ipv6: fc00:b::e4/64 + + ARISTA227T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.229 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::391 + interfaces: + Loopback0: + ipv6: fc00:c:c:e5::1/128 + Ethernet1: + ipv6: fc00:a::392/126 + bp_interface: + ipv6: fc00:b::e5/64 + + ARISTA228T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.230 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::395 + interfaces: + Loopback0: + ipv6: fc00:c:c:e6::1/128 + Ethernet1: + ipv6: fc00:a::396/126 + bp_interface: + ipv6: fc00:b::e6/64 + + ARISTA229T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.231 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::399 + interfaces: + Loopback0: + ipv6: fc00:c:c:e7::1/128 + Ethernet1: + ipv6: fc00:a::39a/126 + bp_interface: + ipv6: fc00:b::e7/64 + + ARISTA230T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.232 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::39d + interfaces: + Loopback0: + ipv6: fc00:c:c:e8::1/128 + Ethernet1: + ipv6: fc00:a::39e/126 + bp_interface: + ipv6: fc00:b::e8/64 + + ARISTA231T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.233 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:e9::1/128 + Ethernet1: + ipv6: fc00:a::3a2/126 + bp_interface: + ipv6: fc00:b::e9/64 + + ARISTA232T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.234 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ea::1/128 + Ethernet1: + ipv6: fc00:a::3a6/126 + bp_interface: + ipv6: fc00:b::ea/64 + + ARISTA233T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.235 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:eb::1/128 + Ethernet1: + ipv6: fc00:a::3aa/126 + bp_interface: + ipv6: fc00:b::eb/64 + + ARISTA234T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.236 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ec::1/128 + Ethernet1: + ipv6: fc00:a::3ae/126 + bp_interface: + ipv6: fc00:b::ec/64 + + ARISTA235T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.237 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ed::1/128 + Ethernet1: + ipv6: fc00:a::3b2/126 + bp_interface: + ipv6: fc00:b::ed/64 + + ARISTA236T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.238 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ee::1/128 + Ethernet1: + ipv6: fc00:a::3b6/126 + bp_interface: + ipv6: fc00:b::ee/64 + + ARISTA237T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.239 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ef::1/128 + Ethernet1: + ipv6: fc00:a::3ba/126 + bp_interface: + ipv6: fc00:b::ef/64 + + ARISTA238T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.240 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3bd + interfaces: + Loopback0: + ipv6: fc00:c:c:f0::1/128 + Ethernet1: + ipv6: fc00:a::3be/126 + bp_interface: + ipv6: fc00:b::f0/64 + + ARISTA239T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.241 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f1::1/128 + Ethernet1: + ipv6: fc00:a::3c2/126 + bp_interface: + ipv6: fc00:b::f1/64 + + ARISTA240T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.242 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f2::1/128 + Ethernet1: + ipv6: fc00:a::3c6/126 + bp_interface: + ipv6: fc00:b::f2/64 + + ARISTA241T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.243 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f3::1/128 + Ethernet1: + ipv6: fc00:a::3ca/126 + bp_interface: + ipv6: fc00:b::f3/64 + + ARISTA242T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.244 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3cd + interfaces: + Loopback0: + ipv6: fc00:c:c:f4::1/128 + Ethernet1: + ipv6: fc00:a::3ce/126 + bp_interface: + ipv6: fc00:b::f4/64 + + ARISTA243T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.245 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f5::1/128 + Ethernet1: + ipv6: fc00:a::3d2/126 + bp_interface: + ipv6: fc00:b::f5/64 + + ARISTA244T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.246 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f6::1/128 + Ethernet1: + ipv6: fc00:a::3d6/126 + bp_interface: + ipv6: fc00:b::f6/64 + + ARISTA245T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.247 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f7::1/128 + Ethernet1: + ipv6: fc00:a::3da/126 + bp_interface: + ipv6: fc00:b::f7/64 + + ARISTA246T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.248 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3dd + interfaces: + Loopback0: + ipv6: fc00:c:c:f8::1/128 + Ethernet1: + ipv6: fc00:a::3de/126 + bp_interface: + ipv6: fc00:b::f8/64 + + ARISTA247T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.249 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f9::1/128 + Ethernet1: + ipv6: fc00:a::3e2/126 + bp_interface: + ipv6: fc00:b::f9/64 + + ARISTA248T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.250 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fa::1/128 + Ethernet1: + ipv6: fc00:a::3e6/126 + bp_interface: + ipv6: fc00:b::fa/64 + + ARISTA249T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.251 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:fb::1/128 + Ethernet1: + ipv6: fc00:a::3ea/126 + bp_interface: + ipv6: fc00:b::fb/64 + + ARISTA250T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.252 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3ed + interfaces: + Loopback0: + ipv6: fc00:c:c:fc::1/128 + Ethernet1: + ipv6: fc00:a::3ee/126 + bp_interface: + ipv6: fc00:b::fc/64 + + ARISTA251T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.253 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:fd::1/128 + Ethernet1: + ipv6: fc00:a::3f2/126 + bp_interface: + ipv6: fc00:b::fd/64 + + ARISTA252T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.254 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fe::1/128 + Ethernet1: + ipv6: fc00:a::3f6/126 + bp_interface: + ipv6: fc00:b::fe/64 + + ARISTA253T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.255 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ff::1/128 + Ethernet1: + ipv6: fc00:a::3fa/126 + bp_interface: + ipv6: fc00:b::ff/64 + + ARISTA254T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.0 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3fd + interfaces: + Loopback0: + ipv6: fc00:c:c:100::1/128 + Ethernet1: + ipv6: fc00:a::3fe/126 + bp_interface: + ipv6: fc00:b::100/64 + + ARISTA01PT0: + properties: + - common + - tor + bgp: + asn: 4200000000 + peers: + 4200000000: + - fc00:a::401 + interfaces: + Loopback0: + ipv6: fc00:c:c:101::1/128 + Ethernet1: + ipv6: fc00:a::402/126 + bp_interface: + ipv6: fc00:b::101/64 + + ARISTA02PT0: + properties: + - common + - tor + bgp: + asn: 4200000000 + peers: + 4200000000: + - fc00:a::405 + interfaces: + Loopback0: + ipv6: fc00:c:c:102::1/128 + Ethernet1: + ipv6: fc00:a::406/126 + bp_interface: + ipv6: fc00:b::102/64 diff --git a/ansible/vars/topo_t1-isolated-d510u2.yaml b/ansible/vars/topo_t1-isolated-d510u2.yaml new file mode 100644 index 00000000000..33ab6dea7d3 --- /dev/null +++ b/ansible/vars/topo_t1-isolated-d510u2.yaml @@ -0,0 +1,11282 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + vm_offset: 0 + ARISTA02T2: + vlans: + - 1 + vm_offset: 1 + ARISTA01T0: + vlans: + - 2 + vm_offset: 2 + ARISTA02T0: + vlans: + - 3 + vm_offset: 3 + ARISTA03T0: + vlans: + - 4 + vm_offset: 4 + ARISTA04T0: + vlans: + - 5 + vm_offset: 5 + ARISTA05T0: + vlans: + - 6 + vm_offset: 6 + ARISTA06T0: + vlans: + - 7 + vm_offset: 7 + ARISTA07T0: + vlans: + - 8 + vm_offset: 8 + ARISTA08T0: + vlans: + - 9 + vm_offset: 9 + ARISTA09T0: + vlans: + - 10 + vm_offset: 10 + ARISTA10T0: + vlans: + - 11 + vm_offset: 11 + ARISTA11T0: + vlans: + - 12 + vm_offset: 12 + ARISTA12T0: + vlans: + - 13 + vm_offset: 13 + ARISTA13T0: + vlans: + - 14 + vm_offset: 14 + ARISTA14T0: + vlans: + - 15 + vm_offset: 15 + ARISTA15T0: + vlans: + - 16 + vm_offset: 16 + ARISTA16T0: + vlans: + - 17 + vm_offset: 17 + ARISTA17T0: + vlans: + - 18 + vm_offset: 18 + ARISTA18T0: + vlans: + - 19 + vm_offset: 19 + ARISTA19T0: + vlans: + - 20 + vm_offset: 20 + ARISTA20T0: + vlans: + - 21 + vm_offset: 21 + ARISTA21T0: + vlans: + - 22 + vm_offset: 22 + ARISTA22T0: + vlans: + - 23 + vm_offset: 23 + ARISTA23T0: + vlans: + - 24 + vm_offset: 24 + ARISTA24T0: + vlans: + - 25 + vm_offset: 25 + ARISTA25T0: + vlans: + - 26 + vm_offset: 26 + ARISTA26T0: + vlans: + - 27 + vm_offset: 27 + ARISTA27T0: + vlans: + - 28 + vm_offset: 28 + ARISTA28T0: + vlans: + - 29 + vm_offset: 29 + ARISTA29T0: + vlans: + - 30 + vm_offset: 30 + ARISTA30T0: + vlans: + - 31 + vm_offset: 31 + ARISTA31T0: + vlans: + - 32 + vm_offset: 32 + ARISTA32T0: + vlans: + - 33 + vm_offset: 33 + ARISTA33T0: + vlans: + - 34 + vm_offset: 34 + ARISTA34T0: + vlans: + - 35 + vm_offset: 35 + ARISTA35T0: + vlans: + - 36 + vm_offset: 36 + ARISTA36T0: + vlans: + - 37 + vm_offset: 37 + ARISTA37T0: + vlans: + - 38 + vm_offset: 38 + ARISTA38T0: + vlans: + - 39 + vm_offset: 39 + ARISTA39T0: + vlans: + - 40 + vm_offset: 40 + ARISTA40T0: + vlans: + - 41 + vm_offset: 41 + ARISTA41T0: + vlans: + - 42 + vm_offset: 42 + ARISTA42T0: + vlans: + - 43 + vm_offset: 43 + ARISTA43T0: + vlans: + - 44 + vm_offset: 44 + ARISTA44T0: + vlans: + - 45 + vm_offset: 45 + ARISTA45T0: + vlans: + - 46 + vm_offset: 46 + ARISTA46T0: + vlans: + - 47 + vm_offset: 47 + ARISTA47T0: + vlans: + - 48 + vm_offset: 48 + ARISTA48T0: + vlans: + - 49 + vm_offset: 49 + ARISTA49T0: + vlans: + - 50 + vm_offset: 50 + ARISTA50T0: + vlans: + - 51 + vm_offset: 51 + ARISTA51T0: + vlans: + - 52 + vm_offset: 52 + ARISTA52T0: + vlans: + - 53 + vm_offset: 53 + ARISTA53T0: + vlans: + - 54 + vm_offset: 54 + ARISTA54T0: + vlans: + - 55 + vm_offset: 55 + ARISTA55T0: + vlans: + - 56 + vm_offset: 56 + ARISTA56T0: + vlans: + - 57 + vm_offset: 57 + ARISTA57T0: + vlans: + - 58 + vm_offset: 58 + ARISTA58T0: + vlans: + - 59 + vm_offset: 59 + ARISTA59T0: + vlans: + - 60 + vm_offset: 60 + ARISTA60T0: + vlans: + - 61 + vm_offset: 61 + ARISTA61T0: + vlans: + - 62 + vm_offset: 62 + ARISTA62T0: + vlans: + - 63 + vm_offset: 63 + ARISTA63T0: + vlans: + - 64 + vm_offset: 64 + ARISTA64T0: + vlans: + - 65 + vm_offset: 65 + ARISTA65T0: + vlans: + - 66 + vm_offset: 66 + ARISTA66T0: + vlans: + - 67 + vm_offset: 67 + ARISTA67T0: + vlans: + - 68 + vm_offset: 68 + ARISTA68T0: + vlans: + - 69 + vm_offset: 69 + ARISTA69T0: + vlans: + - 70 + vm_offset: 70 + ARISTA70T0: + vlans: + - 71 + vm_offset: 71 + ARISTA71T0: + vlans: + - 72 + vm_offset: 72 + ARISTA72T0: + vlans: + - 73 + vm_offset: 73 + ARISTA73T0: + vlans: + - 74 + vm_offset: 74 + ARISTA74T0: + vlans: + - 75 + vm_offset: 75 + ARISTA75T0: + vlans: + - 76 + vm_offset: 76 + ARISTA76T0: + vlans: + - 77 + vm_offset: 77 + ARISTA77T0: + vlans: + - 78 + vm_offset: 78 + ARISTA78T0: + vlans: + - 79 + vm_offset: 79 + ARISTA79T0: + vlans: + - 80 + vm_offset: 80 + ARISTA80T0: + vlans: + - 81 + vm_offset: 81 + ARISTA81T0: + vlans: + - 82 + vm_offset: 82 + ARISTA82T0: + vlans: + - 83 + vm_offset: 83 + ARISTA83T0: + vlans: + - 84 + vm_offset: 84 + ARISTA84T0: + vlans: + - 85 + vm_offset: 85 + ARISTA85T0: + vlans: + - 86 + vm_offset: 86 + ARISTA86T0: + vlans: + - 87 + vm_offset: 87 + ARISTA87T0: + vlans: + - 88 + vm_offset: 88 + ARISTA88T0: + vlans: + - 89 + vm_offset: 89 + ARISTA89T0: + vlans: + - 90 + vm_offset: 90 + ARISTA90T0: + vlans: + - 91 + vm_offset: 91 + ARISTA91T0: + vlans: + - 92 + vm_offset: 92 + ARISTA92T0: + vlans: + - 93 + vm_offset: 93 + ARISTA93T0: + vlans: + - 94 + vm_offset: 94 + ARISTA94T0: + vlans: + - 95 + vm_offset: 95 + ARISTA95T0: + vlans: + - 96 + vm_offset: 96 + ARISTA96T0: + vlans: + - 97 + vm_offset: 97 + ARISTA97T0: + vlans: + - 98 + vm_offset: 98 + ARISTA98T0: + vlans: + - 99 + vm_offset: 99 + ARISTA99T0: + vlans: + - 100 + vm_offset: 100 + ARISTA100T0: + vlans: + - 101 + vm_offset: 101 + ARISTA101T0: + vlans: + - 102 + vm_offset: 102 + ARISTA102T0: + vlans: + - 103 + vm_offset: 103 + ARISTA103T0: + vlans: + - 104 + vm_offset: 104 + ARISTA104T0: + vlans: + - 105 + vm_offset: 105 + ARISTA105T0: + vlans: + - 106 + vm_offset: 106 + ARISTA106T0: + vlans: + - 107 + vm_offset: 107 + ARISTA107T0: + vlans: + - 108 + vm_offset: 108 + ARISTA108T0: + vlans: + - 109 + vm_offset: 109 + ARISTA109T0: + vlans: + - 110 + vm_offset: 110 + ARISTA110T0: + vlans: + - 111 + vm_offset: 111 + ARISTA111T0: + vlans: + - 112 + vm_offset: 112 + ARISTA112T0: + vlans: + - 113 + vm_offset: 113 + ARISTA113T0: + vlans: + - 114 + vm_offset: 114 + ARISTA114T0: + vlans: + - 115 + vm_offset: 115 + ARISTA115T0: + vlans: + - 116 + vm_offset: 116 + ARISTA116T0: + vlans: + - 117 + vm_offset: 117 + ARISTA117T0: + vlans: + - 118 + vm_offset: 118 + ARISTA118T0: + vlans: + - 119 + vm_offset: 119 + ARISTA119T0: + vlans: + - 120 + vm_offset: 120 + ARISTA120T0: + vlans: + - 121 + vm_offset: 121 + ARISTA121T0: + vlans: + - 122 + vm_offset: 122 + ARISTA122T0: + vlans: + - 123 + vm_offset: 123 + ARISTA123T0: + vlans: + - 124 + vm_offset: 124 + ARISTA124T0: + vlans: + - 125 + vm_offset: 125 + ARISTA125T0: + vlans: + - 126 + vm_offset: 126 + ARISTA126T0: + vlans: + - 127 + vm_offset: 127 + ARISTA127T0: + vlans: + - 128 + vm_offset: 128 + ARISTA128T0: + vlans: + - 129 + vm_offset: 129 + ARISTA129T0: + vlans: + - 130 + vm_offset: 130 + ARISTA130T0: + vlans: + - 131 + vm_offset: 131 + ARISTA131T0: + vlans: + - 132 + vm_offset: 132 + ARISTA132T0: + vlans: + - 133 + vm_offset: 133 + ARISTA133T0: + vlans: + - 134 + vm_offset: 134 + ARISTA134T0: + vlans: + - 135 + vm_offset: 135 + ARISTA135T0: + vlans: + - 136 + vm_offset: 136 + ARISTA136T0: + vlans: + - 137 + vm_offset: 137 + ARISTA137T0: + vlans: + - 138 + vm_offset: 138 + ARISTA138T0: + vlans: + - 139 + vm_offset: 139 + ARISTA139T0: + vlans: + - 140 + vm_offset: 140 + ARISTA140T0: + vlans: + - 141 + vm_offset: 141 + ARISTA141T0: + vlans: + - 142 + vm_offset: 142 + ARISTA142T0: + vlans: + - 143 + vm_offset: 143 + ARISTA143T0: + vlans: + - 144 + vm_offset: 144 + ARISTA144T0: + vlans: + - 145 + vm_offset: 145 + ARISTA145T0: + vlans: + - 146 + vm_offset: 146 + ARISTA146T0: + vlans: + - 147 + vm_offset: 147 + ARISTA147T0: + vlans: + - 148 + vm_offset: 148 + ARISTA148T0: + vlans: + - 149 + vm_offset: 149 + ARISTA149T0: + vlans: + - 150 + vm_offset: 150 + ARISTA150T0: + vlans: + - 151 + vm_offset: 151 + ARISTA151T0: + vlans: + - 152 + vm_offset: 152 + ARISTA152T0: + vlans: + - 153 + vm_offset: 153 + ARISTA153T0: + vlans: + - 154 + vm_offset: 154 + ARISTA154T0: + vlans: + - 155 + vm_offset: 155 + ARISTA155T0: + vlans: + - 156 + vm_offset: 156 + ARISTA156T0: + vlans: + - 157 + vm_offset: 157 + ARISTA157T0: + vlans: + - 158 + vm_offset: 158 + ARISTA158T0: + vlans: + - 159 + vm_offset: 159 + ARISTA159T0: + vlans: + - 160 + vm_offset: 160 + ARISTA160T0: + vlans: + - 161 + vm_offset: 161 + ARISTA161T0: + vlans: + - 162 + vm_offset: 162 + ARISTA162T0: + vlans: + - 163 + vm_offset: 163 + ARISTA163T0: + vlans: + - 164 + vm_offset: 164 + ARISTA164T0: + vlans: + - 165 + vm_offset: 165 + ARISTA165T0: + vlans: + - 166 + vm_offset: 166 + ARISTA166T0: + vlans: + - 167 + vm_offset: 167 + ARISTA167T0: + vlans: + - 168 + vm_offset: 168 + ARISTA168T0: + vlans: + - 169 + vm_offset: 169 + ARISTA169T0: + vlans: + - 170 + vm_offset: 170 + ARISTA170T0: + vlans: + - 171 + vm_offset: 171 + ARISTA171T0: + vlans: + - 172 + vm_offset: 172 + ARISTA172T0: + vlans: + - 173 + vm_offset: 173 + ARISTA173T0: + vlans: + - 174 + vm_offset: 174 + ARISTA174T0: + vlans: + - 175 + vm_offset: 175 + ARISTA175T0: + vlans: + - 176 + vm_offset: 176 + ARISTA176T0: + vlans: + - 177 + vm_offset: 177 + ARISTA177T0: + vlans: + - 178 + vm_offset: 178 + ARISTA178T0: + vlans: + - 179 + vm_offset: 179 + ARISTA179T0: + vlans: + - 180 + vm_offset: 180 + ARISTA180T0: + vlans: + - 181 + vm_offset: 181 + ARISTA181T0: + vlans: + - 182 + vm_offset: 182 + ARISTA182T0: + vlans: + - 183 + vm_offset: 183 + ARISTA183T0: + vlans: + - 184 + vm_offset: 184 + ARISTA184T0: + vlans: + - 185 + vm_offset: 185 + ARISTA185T0: + vlans: + - 186 + vm_offset: 186 + ARISTA186T0: + vlans: + - 187 + vm_offset: 187 + ARISTA187T0: + vlans: + - 188 + vm_offset: 188 + ARISTA188T0: + vlans: + - 189 + vm_offset: 189 + ARISTA189T0: + vlans: + - 190 + vm_offset: 190 + ARISTA190T0: + vlans: + - 191 + vm_offset: 191 + ARISTA191T0: + vlans: + - 192 + vm_offset: 192 + ARISTA192T0: + vlans: + - 193 + vm_offset: 193 + ARISTA193T0: + vlans: + - 194 + vm_offset: 194 + ARISTA194T0: + vlans: + - 195 + vm_offset: 195 + ARISTA195T0: + vlans: + - 196 + vm_offset: 196 + ARISTA196T0: + vlans: + - 197 + vm_offset: 197 + ARISTA197T0: + vlans: + - 198 + vm_offset: 198 + ARISTA198T0: + vlans: + - 199 + vm_offset: 199 + ARISTA199T0: + vlans: + - 200 + vm_offset: 200 + ARISTA200T0: + vlans: + - 201 + vm_offset: 201 + ARISTA201T0: + vlans: + - 202 + vm_offset: 202 + ARISTA202T0: + vlans: + - 203 + vm_offset: 203 + ARISTA203T0: + vlans: + - 204 + vm_offset: 204 + ARISTA204T0: + vlans: + - 205 + vm_offset: 205 + ARISTA205T0: + vlans: + - 206 + vm_offset: 206 + ARISTA206T0: + vlans: + - 207 + vm_offset: 207 + ARISTA207T0: + vlans: + - 208 + vm_offset: 208 + ARISTA208T0: + vlans: + - 209 + vm_offset: 209 + ARISTA209T0: + vlans: + - 210 + vm_offset: 210 + ARISTA210T0: + vlans: + - 211 + vm_offset: 211 + ARISTA211T0: + vlans: + - 212 + vm_offset: 212 + ARISTA212T0: + vlans: + - 213 + vm_offset: 213 + ARISTA213T0: + vlans: + - 214 + vm_offset: 214 + ARISTA214T0: + vlans: + - 215 + vm_offset: 215 + ARISTA215T0: + vlans: + - 216 + vm_offset: 216 + ARISTA216T0: + vlans: + - 217 + vm_offset: 217 + ARISTA217T0: + vlans: + - 218 + vm_offset: 218 + ARISTA218T0: + vlans: + - 219 + vm_offset: 219 + ARISTA219T0: + vlans: + - 220 + vm_offset: 220 + ARISTA220T0: + vlans: + - 221 + vm_offset: 221 + ARISTA221T0: + vlans: + - 222 + vm_offset: 222 + ARISTA222T0: + vlans: + - 223 + vm_offset: 223 + ARISTA223T0: + vlans: + - 224 + vm_offset: 224 + ARISTA224T0: + vlans: + - 225 + vm_offset: 225 + ARISTA225T0: + vlans: + - 226 + vm_offset: 226 + ARISTA226T0: + vlans: + - 227 + vm_offset: 227 + ARISTA227T0: + vlans: + - 228 + vm_offset: 228 + ARISTA228T0: + vlans: + - 229 + vm_offset: 229 + ARISTA229T0: + vlans: + - 230 + vm_offset: 230 + ARISTA230T0: + vlans: + - 231 + vm_offset: 231 + ARISTA231T0: + vlans: + - 232 + vm_offset: 232 + ARISTA232T0: + vlans: + - 233 + vm_offset: 233 + ARISTA233T0: + vlans: + - 234 + vm_offset: 234 + ARISTA234T0: + vlans: + - 235 + vm_offset: 235 + ARISTA235T0: + vlans: + - 236 + vm_offset: 236 + ARISTA236T0: + vlans: + - 237 + vm_offset: 237 + ARISTA237T0: + vlans: + - 238 + vm_offset: 238 + ARISTA238T0: + vlans: + - 239 + vm_offset: 239 + ARISTA239T0: + vlans: + - 240 + vm_offset: 240 + ARISTA240T0: + vlans: + - 241 + vm_offset: 241 + ARISTA241T0: + vlans: + - 242 + vm_offset: 242 + ARISTA242T0: + vlans: + - 243 + vm_offset: 243 + ARISTA243T0: + vlans: + - 244 + vm_offset: 244 + ARISTA244T0: + vlans: + - 245 + vm_offset: 245 + ARISTA245T0: + vlans: + - 246 + vm_offset: 246 + ARISTA246T0: + vlans: + - 247 + vm_offset: 247 + ARISTA247T0: + vlans: + - 248 + vm_offset: 248 + ARISTA248T0: + vlans: + - 249 + vm_offset: 249 + ARISTA249T0: + vlans: + - 250 + vm_offset: 250 + ARISTA250T0: + vlans: + - 251 + vm_offset: 251 + ARISTA251T0: + vlans: + - 252 + vm_offset: 252 + ARISTA252T0: + vlans: + - 253 + vm_offset: 253 + ARISTA253T0: + vlans: + - 254 + vm_offset: 254 + ARISTA254T0: + vlans: + - 255 + vm_offset: 255 + ARISTA255T0: + vlans: + - 256 + vm_offset: 256 + ARISTA256T0: + vlans: + - 257 + vm_offset: 257 + ARISTA257T0: + vlans: + - 258 + vm_offset: 258 + ARISTA258T0: + vlans: + - 259 + vm_offset: 259 + ARISTA259T0: + vlans: + - 260 + vm_offset: 260 + ARISTA260T0: + vlans: + - 261 + vm_offset: 261 + ARISTA261T0: + vlans: + - 262 + vm_offset: 262 + ARISTA262T0: + vlans: + - 263 + vm_offset: 263 + ARISTA263T0: + vlans: + - 264 + vm_offset: 264 + ARISTA264T0: + vlans: + - 265 + vm_offset: 265 + ARISTA265T0: + vlans: + - 266 + vm_offset: 266 + ARISTA266T0: + vlans: + - 267 + vm_offset: 267 + ARISTA267T0: + vlans: + - 268 + vm_offset: 268 + ARISTA268T0: + vlans: + - 269 + vm_offset: 269 + ARISTA269T0: + vlans: + - 270 + vm_offset: 270 + ARISTA270T0: + vlans: + - 271 + vm_offset: 271 + ARISTA271T0: + vlans: + - 272 + vm_offset: 272 + ARISTA272T0: + vlans: + - 273 + vm_offset: 273 + ARISTA273T0: + vlans: + - 274 + vm_offset: 274 + ARISTA274T0: + vlans: + - 275 + vm_offset: 275 + ARISTA275T0: + vlans: + - 276 + vm_offset: 276 + ARISTA276T0: + vlans: + - 277 + vm_offset: 277 + ARISTA277T0: + vlans: + - 278 + vm_offset: 278 + ARISTA278T0: + vlans: + - 279 + vm_offset: 279 + ARISTA279T0: + vlans: + - 280 + vm_offset: 280 + ARISTA280T0: + vlans: + - 281 + vm_offset: 281 + ARISTA281T0: + vlans: + - 282 + vm_offset: 282 + ARISTA282T0: + vlans: + - 283 + vm_offset: 283 + ARISTA283T0: + vlans: + - 284 + vm_offset: 284 + ARISTA284T0: + vlans: + - 285 + vm_offset: 285 + ARISTA285T0: + vlans: + - 286 + vm_offset: 286 + ARISTA286T0: + vlans: + - 287 + vm_offset: 287 + ARISTA287T0: + vlans: + - 288 + vm_offset: 288 + ARISTA288T0: + vlans: + - 289 + vm_offset: 289 + ARISTA289T0: + vlans: + - 290 + vm_offset: 290 + ARISTA290T0: + vlans: + - 291 + vm_offset: 291 + ARISTA291T0: + vlans: + - 292 + vm_offset: 292 + ARISTA292T0: + vlans: + - 293 + vm_offset: 293 + ARISTA293T0: + vlans: + - 294 + vm_offset: 294 + ARISTA294T0: + vlans: + - 295 + vm_offset: 295 + ARISTA295T0: + vlans: + - 296 + vm_offset: 296 + ARISTA296T0: + vlans: + - 297 + vm_offset: 297 + ARISTA297T0: + vlans: + - 298 + vm_offset: 298 + ARISTA298T0: + vlans: + - 299 + vm_offset: 299 + ARISTA299T0: + vlans: + - 300 + vm_offset: 300 + ARISTA300T0: + vlans: + - 301 + vm_offset: 301 + ARISTA301T0: + vlans: + - 302 + vm_offset: 302 + ARISTA302T0: + vlans: + - 303 + vm_offset: 303 + ARISTA303T0: + vlans: + - 304 + vm_offset: 304 + ARISTA304T0: + vlans: + - 305 + vm_offset: 305 + ARISTA305T0: + vlans: + - 306 + vm_offset: 306 + ARISTA306T0: + vlans: + - 307 + vm_offset: 307 + ARISTA307T0: + vlans: + - 308 + vm_offset: 308 + ARISTA308T0: + vlans: + - 309 + vm_offset: 309 + ARISTA309T0: + vlans: + - 310 + vm_offset: 310 + ARISTA310T0: + vlans: + - 311 + vm_offset: 311 + ARISTA311T0: + vlans: + - 312 + vm_offset: 312 + ARISTA312T0: + vlans: + - 313 + vm_offset: 313 + ARISTA313T0: + vlans: + - 314 + vm_offset: 314 + ARISTA314T0: + vlans: + - 315 + vm_offset: 315 + ARISTA315T0: + vlans: + - 316 + vm_offset: 316 + ARISTA316T0: + vlans: + - 317 + vm_offset: 317 + ARISTA317T0: + vlans: + - 318 + vm_offset: 318 + ARISTA318T0: + vlans: + - 319 + vm_offset: 319 + ARISTA319T0: + vlans: + - 320 + vm_offset: 320 + ARISTA320T0: + vlans: + - 321 + vm_offset: 321 + ARISTA321T0: + vlans: + - 322 + vm_offset: 322 + ARISTA322T0: + vlans: + - 323 + vm_offset: 323 + ARISTA323T0: + vlans: + - 324 + vm_offset: 324 + ARISTA324T0: + vlans: + - 325 + vm_offset: 325 + ARISTA325T0: + vlans: + - 326 + vm_offset: 326 + ARISTA326T0: + vlans: + - 327 + vm_offset: 327 + ARISTA327T0: + vlans: + - 328 + vm_offset: 328 + ARISTA328T0: + vlans: + - 329 + vm_offset: 329 + ARISTA329T0: + vlans: + - 330 + vm_offset: 330 + ARISTA330T0: + vlans: + - 331 + vm_offset: 331 + ARISTA331T0: + vlans: + - 332 + vm_offset: 332 + ARISTA332T0: + vlans: + - 333 + vm_offset: 333 + ARISTA333T0: + vlans: + - 334 + vm_offset: 334 + ARISTA334T0: + vlans: + - 335 + vm_offset: 335 + ARISTA335T0: + vlans: + - 336 + vm_offset: 336 + ARISTA336T0: + vlans: + - 337 + vm_offset: 337 + ARISTA337T0: + vlans: + - 338 + vm_offset: 338 + ARISTA338T0: + vlans: + - 339 + vm_offset: 339 + ARISTA339T0: + vlans: + - 340 + vm_offset: 340 + ARISTA340T0: + vlans: + - 341 + vm_offset: 341 + ARISTA341T0: + vlans: + - 342 + vm_offset: 342 + ARISTA342T0: + vlans: + - 343 + vm_offset: 343 + ARISTA343T0: + vlans: + - 344 + vm_offset: 344 + ARISTA344T0: + vlans: + - 345 + vm_offset: 345 + ARISTA345T0: + vlans: + - 346 + vm_offset: 346 + ARISTA346T0: + vlans: + - 347 + vm_offset: 347 + ARISTA347T0: + vlans: + - 348 + vm_offset: 348 + ARISTA348T0: + vlans: + - 349 + vm_offset: 349 + ARISTA349T0: + vlans: + - 350 + vm_offset: 350 + ARISTA350T0: + vlans: + - 351 + vm_offset: 351 + ARISTA351T0: + vlans: + - 352 + vm_offset: 352 + ARISTA352T0: + vlans: + - 353 + vm_offset: 353 + ARISTA353T0: + vlans: + - 354 + vm_offset: 354 + ARISTA354T0: + vlans: + - 355 + vm_offset: 355 + ARISTA355T0: + vlans: + - 356 + vm_offset: 356 + ARISTA356T0: + vlans: + - 357 + vm_offset: 357 + ARISTA357T0: + vlans: + - 358 + vm_offset: 358 + ARISTA358T0: + vlans: + - 359 + vm_offset: 359 + ARISTA359T0: + vlans: + - 360 + vm_offset: 360 + ARISTA360T0: + vlans: + - 361 + vm_offset: 361 + ARISTA361T0: + vlans: + - 362 + vm_offset: 362 + ARISTA362T0: + vlans: + - 363 + vm_offset: 363 + ARISTA363T0: + vlans: + - 364 + vm_offset: 364 + ARISTA364T0: + vlans: + - 365 + vm_offset: 365 + ARISTA365T0: + vlans: + - 366 + vm_offset: 366 + ARISTA366T0: + vlans: + - 367 + vm_offset: 367 + ARISTA367T0: + vlans: + - 368 + vm_offset: 368 + ARISTA368T0: + vlans: + - 369 + vm_offset: 369 + ARISTA369T0: + vlans: + - 370 + vm_offset: 370 + ARISTA370T0: + vlans: + - 371 + vm_offset: 371 + ARISTA371T0: + vlans: + - 372 + vm_offset: 372 + ARISTA372T0: + vlans: + - 373 + vm_offset: 373 + ARISTA373T0: + vlans: + - 374 + vm_offset: 374 + ARISTA374T0: + vlans: + - 375 + vm_offset: 375 + ARISTA375T0: + vlans: + - 376 + vm_offset: 376 + ARISTA376T0: + vlans: + - 377 + vm_offset: 377 + ARISTA377T0: + vlans: + - 378 + vm_offset: 378 + ARISTA378T0: + vlans: + - 379 + vm_offset: 379 + ARISTA379T0: + vlans: + - 380 + vm_offset: 380 + ARISTA380T0: + vlans: + - 381 + vm_offset: 381 + ARISTA381T0: + vlans: + - 382 + vm_offset: 382 + ARISTA382T0: + vlans: + - 383 + vm_offset: 383 + ARISTA383T0: + vlans: + - 384 + vm_offset: 384 + ARISTA384T0: + vlans: + - 385 + vm_offset: 385 + ARISTA385T0: + vlans: + - 386 + vm_offset: 386 + ARISTA386T0: + vlans: + - 387 + vm_offset: 387 + ARISTA387T0: + vlans: + - 388 + vm_offset: 388 + ARISTA388T0: + vlans: + - 389 + vm_offset: 389 + ARISTA389T0: + vlans: + - 390 + vm_offset: 390 + ARISTA390T0: + vlans: + - 391 + vm_offset: 391 + ARISTA391T0: + vlans: + - 392 + vm_offset: 392 + ARISTA392T0: + vlans: + - 393 + vm_offset: 393 + ARISTA393T0: + vlans: + - 394 + vm_offset: 394 + ARISTA394T0: + vlans: + - 395 + vm_offset: 395 + ARISTA395T0: + vlans: + - 396 + vm_offset: 396 + ARISTA396T0: + vlans: + - 397 + vm_offset: 397 + ARISTA397T0: + vlans: + - 398 + vm_offset: 398 + ARISTA398T0: + vlans: + - 399 + vm_offset: 399 + ARISTA399T0: + vlans: + - 400 + vm_offset: 400 + ARISTA400T0: + vlans: + - 401 + vm_offset: 401 + ARISTA401T0: + vlans: + - 402 + vm_offset: 402 + ARISTA402T0: + vlans: + - 403 + vm_offset: 403 + ARISTA403T0: + vlans: + - 404 + vm_offset: 404 + ARISTA404T0: + vlans: + - 405 + vm_offset: 405 + ARISTA405T0: + vlans: + - 406 + vm_offset: 406 + ARISTA406T0: + vlans: + - 407 + vm_offset: 407 + ARISTA407T0: + vlans: + - 408 + vm_offset: 408 + ARISTA408T0: + vlans: + - 409 + vm_offset: 409 + ARISTA409T0: + vlans: + - 410 + vm_offset: 410 + ARISTA410T0: + vlans: + - 411 + vm_offset: 411 + ARISTA411T0: + vlans: + - 412 + vm_offset: 412 + ARISTA412T0: + vlans: + - 413 + vm_offset: 413 + ARISTA413T0: + vlans: + - 414 + vm_offset: 414 + ARISTA414T0: + vlans: + - 415 + vm_offset: 415 + ARISTA415T0: + vlans: + - 416 + vm_offset: 416 + ARISTA416T0: + vlans: + - 417 + vm_offset: 417 + ARISTA417T0: + vlans: + - 418 + vm_offset: 418 + ARISTA418T0: + vlans: + - 419 + vm_offset: 419 + ARISTA419T0: + vlans: + - 420 + vm_offset: 420 + ARISTA420T0: + vlans: + - 421 + vm_offset: 421 + ARISTA421T0: + vlans: + - 422 + vm_offset: 422 + ARISTA422T0: + vlans: + - 423 + vm_offset: 423 + ARISTA423T0: + vlans: + - 424 + vm_offset: 424 + ARISTA424T0: + vlans: + - 425 + vm_offset: 425 + ARISTA425T0: + vlans: + - 426 + vm_offset: 426 + ARISTA426T0: + vlans: + - 427 + vm_offset: 427 + ARISTA427T0: + vlans: + - 428 + vm_offset: 428 + ARISTA428T0: + vlans: + - 429 + vm_offset: 429 + ARISTA429T0: + vlans: + - 430 + vm_offset: 430 + ARISTA430T0: + vlans: + - 431 + vm_offset: 431 + ARISTA431T0: + vlans: + - 432 + vm_offset: 432 + ARISTA432T0: + vlans: + - 433 + vm_offset: 433 + ARISTA433T0: + vlans: + - 434 + vm_offset: 434 + ARISTA434T0: + vlans: + - 435 + vm_offset: 435 + ARISTA435T0: + vlans: + - 436 + vm_offset: 436 + ARISTA436T0: + vlans: + - 437 + vm_offset: 437 + ARISTA437T0: + vlans: + - 438 + vm_offset: 438 + ARISTA438T0: + vlans: + - 439 + vm_offset: 439 + ARISTA439T0: + vlans: + - 440 + vm_offset: 440 + ARISTA440T0: + vlans: + - 441 + vm_offset: 441 + ARISTA441T0: + vlans: + - 442 + vm_offset: 442 + ARISTA442T0: + vlans: + - 443 + vm_offset: 443 + ARISTA443T0: + vlans: + - 444 + vm_offset: 444 + ARISTA444T0: + vlans: + - 445 + vm_offset: 445 + ARISTA445T0: + vlans: + - 446 + vm_offset: 446 + ARISTA446T0: + vlans: + - 447 + vm_offset: 447 + ARISTA447T0: + vlans: + - 448 + vm_offset: 448 + ARISTA448T0: + vlans: + - 449 + vm_offset: 449 + ARISTA449T0: + vlans: + - 450 + vm_offset: 450 + ARISTA450T0: + vlans: + - 451 + vm_offset: 451 + ARISTA451T0: + vlans: + - 452 + vm_offset: 452 + ARISTA452T0: + vlans: + - 453 + vm_offset: 453 + ARISTA453T0: + vlans: + - 454 + vm_offset: 454 + ARISTA454T0: + vlans: + - 455 + vm_offset: 455 + ARISTA455T0: + vlans: + - 456 + vm_offset: 456 + ARISTA456T0: + vlans: + - 457 + vm_offset: 457 + ARISTA457T0: + vlans: + - 458 + vm_offset: 458 + ARISTA458T0: + vlans: + - 459 + vm_offset: 459 + ARISTA459T0: + vlans: + - 460 + vm_offset: 460 + ARISTA460T0: + vlans: + - 461 + vm_offset: 461 + ARISTA461T0: + vlans: + - 462 + vm_offset: 462 + ARISTA462T0: + vlans: + - 463 + vm_offset: 463 + ARISTA463T0: + vlans: + - 464 + vm_offset: 464 + ARISTA464T0: + vlans: + - 465 + vm_offset: 465 + ARISTA465T0: + vlans: + - 466 + vm_offset: 466 + ARISTA466T0: + vlans: + - 467 + vm_offset: 467 + ARISTA467T0: + vlans: + - 468 + vm_offset: 468 + ARISTA468T0: + vlans: + - 469 + vm_offset: 469 + ARISTA469T0: + vlans: + - 470 + vm_offset: 470 + ARISTA470T0: + vlans: + - 471 + vm_offset: 471 + ARISTA471T0: + vlans: + - 472 + vm_offset: 472 + ARISTA472T0: + vlans: + - 473 + vm_offset: 473 + ARISTA473T0: + vlans: + - 474 + vm_offset: 474 + ARISTA474T0: + vlans: + - 475 + vm_offset: 475 + ARISTA475T0: + vlans: + - 476 + vm_offset: 476 + ARISTA476T0: + vlans: + - 477 + vm_offset: 477 + ARISTA477T0: + vlans: + - 478 + vm_offset: 478 + ARISTA478T0: + vlans: + - 479 + vm_offset: 479 + ARISTA479T0: + vlans: + - 480 + vm_offset: 480 + ARISTA480T0: + vlans: + - 481 + vm_offset: 481 + ARISTA481T0: + vlans: + - 482 + vm_offset: 482 + ARISTA482T0: + vlans: + - 483 + vm_offset: 483 + ARISTA483T0: + vlans: + - 484 + vm_offset: 484 + ARISTA484T0: + vlans: + - 485 + vm_offset: 485 + ARISTA485T0: + vlans: + - 486 + vm_offset: 486 + ARISTA486T0: + vlans: + - 487 + vm_offset: 487 + ARISTA487T0: + vlans: + - 488 + vm_offset: 488 + ARISTA488T0: + vlans: + - 489 + vm_offset: 489 + ARISTA489T0: + vlans: + - 490 + vm_offset: 490 + ARISTA490T0: + vlans: + - 491 + vm_offset: 491 + ARISTA491T0: + vlans: + - 492 + vm_offset: 492 + ARISTA492T0: + vlans: + - 493 + vm_offset: 493 + ARISTA493T0: + vlans: + - 494 + vm_offset: 494 + ARISTA494T0: + vlans: + - 495 + vm_offset: 495 + ARISTA495T0: + vlans: + - 496 + vm_offset: 496 + ARISTA496T0: + vlans: + - 497 + vm_offset: 497 + ARISTA497T0: + vlans: + - 498 + vm_offset: 498 + ARISTA498T0: + vlans: + - 499 + vm_offset: 499 + ARISTA499T0: + vlans: + - 500 + vm_offset: 500 + ARISTA500T0: + vlans: + - 501 + vm_offset: 501 + ARISTA501T0: + vlans: + - 502 + vm_offset: 502 + ARISTA502T0: + vlans: + - 503 + vm_offset: 503 + ARISTA503T0: + vlans: + - 504 + vm_offset: 504 + ARISTA504T0: + vlans: + - 505 + vm_offset: 505 + ARISTA505T0: + vlans: + - 506 + vm_offset: 506 + ARISTA506T0: + vlans: + - 507 + vm_offset: 507 + ARISTA507T0: + vlans: + - 508 + vm_offset: 508 + ARISTA508T0: + vlans: + - 509 + vm_offset: 509 + ARISTA509T0: + vlans: + - 510 + vm_offset: 510 + ARISTA510T0: + vlans: + - 511 + vm_offset: 511 + +configuration_properties: + common: + dut_asn: 4200100000 + dut_type: LeafRouter + podset_number: 200 + tor_number: 16 + tor_subnet_number: 2 + max_tor_subnet_number: 16 + tor_subnet_size: 128 + nhipv6: FC0A::FF + spine: + swrole: spine + tor: + swrole: tor + +configuration: + ARISTA01T2: + properties: + - common + - spine + bgp: + router-id: 0.12.0.1 + asn: 4200200000 + peers: + 4200100000: + - fc00:a::1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1::1/128 + Ethernet1: + ipv6: fc00:a::2/126 + bp_interface: + ipv6: fc00:b::1/64 + + ARISTA02T2: + properties: + - common + - spine + bgp: + router-id: 0.12.0.2 + asn: 4200200000 + peers: + 4200100000: + - fc00:a::5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2::1/128 + Ethernet1: + ipv6: fc00:a::6/126 + bp_interface: + ipv6: fc00:b::2/64 + + ARISTA01T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.3 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3::1/128 + Ethernet1: + ipv6: fc00:a::a/126 + bp_interface: + ipv6: fc00:b::3/64 + + ARISTA02T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.4 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d + interfaces: + Loopback0: + ipv6: fc00:c:c:4::1/128 + Ethernet1: + ipv6: fc00:a::e/126 + bp_interface: + ipv6: fc00:b::4/64 + + ARISTA03T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.5 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::11 + interfaces: + Loopback0: + ipv6: fc00:c:c:5::1/128 + Ethernet1: + ipv6: fc00:a::12/126 + bp_interface: + ipv6: fc00:b::5/64 + + ARISTA04T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.6 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::15 + interfaces: + Loopback0: + ipv6: fc00:c:c:6::1/128 + Ethernet1: + ipv6: fc00:a::16/126 + bp_interface: + ipv6: fc00:b::6/64 + + ARISTA05T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.7 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::19 + interfaces: + Loopback0: + ipv6: fc00:c:c:7::1/128 + Ethernet1: + ipv6: fc00:a::1a/126 + bp_interface: + ipv6: fc00:b::7/64 + + ARISTA06T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.8 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d + interfaces: + Loopback0: + ipv6: fc00:c:c:8::1/128 + Ethernet1: + ipv6: fc00:a::1e/126 + bp_interface: + ipv6: fc00:b::8/64 + + ARISTA07T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.9 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::21 + interfaces: + Loopback0: + ipv6: fc00:c:c:9::1/128 + Ethernet1: + ipv6: fc00:a::22/126 + bp_interface: + ipv6: fc00:b::9/64 + + ARISTA08T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.10 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::25 + interfaces: + Loopback0: + ipv6: fc00:c:c:a::1/128 + Ethernet1: + ipv6: fc00:a::26/126 + bp_interface: + ipv6: fc00:b::a/64 + + ARISTA09T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.11 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::29 + interfaces: + Loopback0: + ipv6: fc00:c:c:b::1/128 + Ethernet1: + ipv6: fc00:a::2a/126 + bp_interface: + ipv6: fc00:b::b/64 + + ARISTA10T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.12 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d + interfaces: + Loopback0: + ipv6: fc00:c:c:c::1/128 + Ethernet1: + ipv6: fc00:a::2e/126 + bp_interface: + ipv6: fc00:b::c/64 + + ARISTA11T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.13 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::31 + interfaces: + Loopback0: + ipv6: fc00:c:c:d::1/128 + Ethernet1: + ipv6: fc00:a::32/126 + bp_interface: + ipv6: fc00:b::d/64 + + ARISTA12T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.14 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::35 + interfaces: + Loopback0: + ipv6: fc00:c:c:e::1/128 + Ethernet1: + ipv6: fc00:a::36/126 + bp_interface: + ipv6: fc00:b::e/64 + + ARISTA13T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.15 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::39 + interfaces: + Loopback0: + ipv6: fc00:c:c:f::1/128 + Ethernet1: + ipv6: fc00:a::3a/126 + bp_interface: + ipv6: fc00:b::f/64 + + ARISTA14T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.16 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d + interfaces: + Loopback0: + ipv6: fc00:c:c:10::1/128 + Ethernet1: + ipv6: fc00:a::3e/126 + bp_interface: + ipv6: fc00:b::10/64 + + ARISTA15T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.17 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::41 + interfaces: + Loopback0: + ipv6: fc00:c:c:11::1/128 + Ethernet1: + ipv6: fc00:a::42/126 + bp_interface: + ipv6: fc00:b::11/64 + + ARISTA16T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.18 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::45 + interfaces: + Loopback0: + ipv6: fc00:c:c:12::1/128 + Ethernet1: + ipv6: fc00:a::46/126 + bp_interface: + ipv6: fc00:b::12/64 + + ARISTA17T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.19 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::49 + interfaces: + Loopback0: + ipv6: fc00:c:c:13::1/128 + Ethernet1: + ipv6: fc00:a::4a/126 + bp_interface: + ipv6: fc00:b::13/64 + + ARISTA18T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.20 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4d + interfaces: + Loopback0: + ipv6: fc00:c:c:14::1/128 + Ethernet1: + ipv6: fc00:a::4e/126 + bp_interface: + ipv6: fc00:b::14/64 + + ARISTA19T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.21 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::51 + interfaces: + Loopback0: + ipv6: fc00:c:c:15::1/128 + Ethernet1: + ipv6: fc00:a::52/126 + bp_interface: + ipv6: fc00:b::15/64 + + ARISTA20T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.22 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::55 + interfaces: + Loopback0: + ipv6: fc00:c:c:16::1/128 + Ethernet1: + ipv6: fc00:a::56/126 + bp_interface: + ipv6: fc00:b::16/64 + + ARISTA21T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.23 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::59 + interfaces: + Loopback0: + ipv6: fc00:c:c:17::1/128 + Ethernet1: + ipv6: fc00:a::5a/126 + bp_interface: + ipv6: fc00:b::17/64 + + ARISTA22T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.24 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5d + interfaces: + Loopback0: + ipv6: fc00:c:c:18::1/128 + Ethernet1: + ipv6: fc00:a::5e/126 + bp_interface: + ipv6: fc00:b::18/64 + + ARISTA23T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.25 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::61 + interfaces: + Loopback0: + ipv6: fc00:c:c:19::1/128 + Ethernet1: + ipv6: fc00:a::62/126 + bp_interface: + ipv6: fc00:b::19/64 + + ARISTA24T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.26 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::65 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a::1/128 + Ethernet1: + ipv6: fc00:a::66/126 + bp_interface: + ipv6: fc00:b::1a/64 + + ARISTA25T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.27 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::69 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b::1/128 + Ethernet1: + ipv6: fc00:a::6a/126 + bp_interface: + ipv6: fc00:b::1b/64 + + ARISTA26T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.28 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c::1/128 + Ethernet1: + ipv6: fc00:a::6e/126 + bp_interface: + ipv6: fc00:b::1c/64 + + ARISTA27T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.29 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::71 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d::1/128 + Ethernet1: + ipv6: fc00:a::72/126 + bp_interface: + ipv6: fc00:b::1d/64 + + ARISTA28T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.30 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::75 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e::1/128 + Ethernet1: + ipv6: fc00:a::76/126 + bp_interface: + ipv6: fc00:b::1e/64 + + ARISTA29T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.31 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::79 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f::1/128 + Ethernet1: + ipv6: fc00:a::7a/126 + bp_interface: + ipv6: fc00:b::1f/64 + + ARISTA30T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.32 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7d + interfaces: + Loopback0: + ipv6: fc00:c:c:20::1/128 + Ethernet1: + ipv6: fc00:a::7e/126 + bp_interface: + ipv6: fc00:b::20/64 + + ARISTA31T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.33 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::81 + interfaces: + Loopback0: + ipv6: fc00:c:c:21::1/128 + Ethernet1: + ipv6: fc00:a::82/126 + bp_interface: + ipv6: fc00:b::21/64 + + ARISTA32T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.34 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::85 + interfaces: + Loopback0: + ipv6: fc00:c:c:22::1/128 + Ethernet1: + ipv6: fc00:a::86/126 + bp_interface: + ipv6: fc00:b::22/64 + + ARISTA33T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.35 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::89 + interfaces: + Loopback0: + ipv6: fc00:c:c:23::1/128 + Ethernet1: + ipv6: fc00:a::8a/126 + bp_interface: + ipv6: fc00:b::23/64 + + ARISTA34T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.36 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::8d + interfaces: + Loopback0: + ipv6: fc00:c:c:24::1/128 + Ethernet1: + ipv6: fc00:a::8e/126 + bp_interface: + ipv6: fc00:b::24/64 + + ARISTA35T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.37 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::91 + interfaces: + Loopback0: + ipv6: fc00:c:c:25::1/128 + Ethernet1: + ipv6: fc00:a::92/126 + bp_interface: + ipv6: fc00:b::25/64 + + ARISTA36T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.38 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::95 + interfaces: + Loopback0: + ipv6: fc00:c:c:26::1/128 + Ethernet1: + ipv6: fc00:a::96/126 + bp_interface: + ipv6: fc00:b::26/64 + + ARISTA37T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.39 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::99 + interfaces: + Loopback0: + ipv6: fc00:c:c:27::1/128 + Ethernet1: + ipv6: fc00:a::9a/126 + bp_interface: + ipv6: fc00:b::27/64 + + ARISTA38T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.40 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::9d + interfaces: + Loopback0: + ipv6: fc00:c:c:28::1/128 + Ethernet1: + ipv6: fc00:a::9e/126 + bp_interface: + ipv6: fc00:b::28/64 + + ARISTA39T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.41 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:29::1/128 + Ethernet1: + ipv6: fc00:a::a2/126 + bp_interface: + ipv6: fc00:b::29/64 + + ARISTA40T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.42 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2a::1/128 + Ethernet1: + ipv6: fc00:a::a6/126 + bp_interface: + ipv6: fc00:b::2a/64 + + ARISTA41T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.43 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2b::1/128 + Ethernet1: + ipv6: fc00:a::aa/126 + bp_interface: + ipv6: fc00:b::2b/64 + + ARISTA42T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.44 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::ad + interfaces: + Loopback0: + ipv6: fc00:c:c:2c::1/128 + Ethernet1: + ipv6: fc00:a::ae/126 + bp_interface: + ipv6: fc00:b::2c/64 + + ARISTA43T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.45 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:2d::1/128 + Ethernet1: + ipv6: fc00:a::b2/126 + bp_interface: + ipv6: fc00:b::2d/64 + + ARISTA44T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.46 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:2e::1/128 + Ethernet1: + ipv6: fc00:a::b6/126 + bp_interface: + ipv6: fc00:b::2e/64 + + ARISTA45T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.47 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:2f::1/128 + Ethernet1: + ipv6: fc00:a::ba/126 + bp_interface: + ipv6: fc00:b::2f/64 + + ARISTA46T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.48 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::bd + interfaces: + Loopback0: + ipv6: fc00:c:c:30::1/128 + Ethernet1: + ipv6: fc00:a::be/126 + bp_interface: + ipv6: fc00:b::30/64 + + ARISTA47T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.49 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:31::1/128 + Ethernet1: + ipv6: fc00:a::c2/126 + bp_interface: + ipv6: fc00:b::31/64 + + ARISTA48T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.50 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:32::1/128 + Ethernet1: + ipv6: fc00:a::c6/126 + bp_interface: + ipv6: fc00:b::32/64 + + ARISTA49T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.51 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:33::1/128 + Ethernet1: + ipv6: fc00:a::ca/126 + bp_interface: + ipv6: fc00:b::33/64 + + ARISTA50T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.52 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::cd + interfaces: + Loopback0: + ipv6: fc00:c:c:34::1/128 + Ethernet1: + ipv6: fc00:a::ce/126 + bp_interface: + ipv6: fc00:b::34/64 + + ARISTA51T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.53 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:35::1/128 + Ethernet1: + ipv6: fc00:a::d2/126 + bp_interface: + ipv6: fc00:b::35/64 + + ARISTA52T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.54 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:36::1/128 + Ethernet1: + ipv6: fc00:a::d6/126 + bp_interface: + ipv6: fc00:b::36/64 + + ARISTA53T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.55 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:37::1/128 + Ethernet1: + ipv6: fc00:a::da/126 + bp_interface: + ipv6: fc00:b::37/64 + + ARISTA54T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.56 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::dd + interfaces: + Loopback0: + ipv6: fc00:c:c:38::1/128 + Ethernet1: + ipv6: fc00:a::de/126 + bp_interface: + ipv6: fc00:b::38/64 + + ARISTA55T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.57 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:39::1/128 + Ethernet1: + ipv6: fc00:a::e2/126 + bp_interface: + ipv6: fc00:b::39/64 + + ARISTA56T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.58 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3a::1/128 + Ethernet1: + ipv6: fc00:a::e6/126 + bp_interface: + ipv6: fc00:b::3a/64 + + ARISTA57T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.59 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3b::1/128 + Ethernet1: + ipv6: fc00:a::ea/126 + bp_interface: + ipv6: fc00:b::3b/64 + + ARISTA58T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.60 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::ed + interfaces: + Loopback0: + ipv6: fc00:c:c:3c::1/128 + Ethernet1: + ipv6: fc00:a::ee/126 + bp_interface: + ipv6: fc00:b::3c/64 + + ARISTA59T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.61 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:3d::1/128 + Ethernet1: + ipv6: fc00:a::f2/126 + bp_interface: + ipv6: fc00:b::3d/64 + + ARISTA60T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.62 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:3e::1/128 + Ethernet1: + ipv6: fc00:a::f6/126 + bp_interface: + ipv6: fc00:b::3e/64 + + ARISTA61T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.63 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:3f::1/128 + Ethernet1: + ipv6: fc00:a::fa/126 + bp_interface: + ipv6: fc00:b::3f/64 + + ARISTA62T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.64 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::fd + interfaces: + Loopback0: + ipv6: fc00:c:c:40::1/128 + Ethernet1: + ipv6: fc00:a::fe/126 + bp_interface: + ipv6: fc00:b::40/64 + + ARISTA63T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.65 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::101 + interfaces: + Loopback0: + ipv6: fc00:c:c:41::1/128 + Ethernet1: + ipv6: fc00:a::102/126 + bp_interface: + ipv6: fc00:b::41/64 + + ARISTA64T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.66 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::105 + interfaces: + Loopback0: + ipv6: fc00:c:c:42::1/128 + Ethernet1: + ipv6: fc00:a::106/126 + bp_interface: + ipv6: fc00:b::42/64 + + ARISTA65T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.67 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::109 + interfaces: + Loopback0: + ipv6: fc00:c:c:43::1/128 + Ethernet1: + ipv6: fc00:a::10a/126 + bp_interface: + ipv6: fc00:b::43/64 + + ARISTA66T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.68 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::10d + interfaces: + Loopback0: + ipv6: fc00:c:c:44::1/128 + Ethernet1: + ipv6: fc00:a::10e/126 + bp_interface: + ipv6: fc00:b::44/64 + + ARISTA67T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.69 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::111 + interfaces: + Loopback0: + ipv6: fc00:c:c:45::1/128 + Ethernet1: + ipv6: fc00:a::112/126 + bp_interface: + ipv6: fc00:b::45/64 + + ARISTA68T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.70 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::115 + interfaces: + Loopback0: + ipv6: fc00:c:c:46::1/128 + Ethernet1: + ipv6: fc00:a::116/126 + bp_interface: + ipv6: fc00:b::46/64 + + ARISTA69T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.71 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::119 + interfaces: + Loopback0: + ipv6: fc00:c:c:47::1/128 + Ethernet1: + ipv6: fc00:a::11a/126 + bp_interface: + ipv6: fc00:b::47/64 + + ARISTA70T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.72 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::11d + interfaces: + Loopback0: + ipv6: fc00:c:c:48::1/128 + Ethernet1: + ipv6: fc00:a::11e/126 + bp_interface: + ipv6: fc00:b::48/64 + + ARISTA71T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.73 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::121 + interfaces: + Loopback0: + ipv6: fc00:c:c:49::1/128 + Ethernet1: + ipv6: fc00:a::122/126 + bp_interface: + ipv6: fc00:b::49/64 + + ARISTA72T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.74 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::125 + interfaces: + Loopback0: + ipv6: fc00:c:c:4a::1/128 + Ethernet1: + ipv6: fc00:a::126/126 + bp_interface: + ipv6: fc00:b::4a/64 + + ARISTA73T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.75 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::129 + interfaces: + Loopback0: + ipv6: fc00:c:c:4b::1/128 + Ethernet1: + ipv6: fc00:a::12a/126 + bp_interface: + ipv6: fc00:b::4b/64 + + ARISTA74T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.76 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::12d + interfaces: + Loopback0: + ipv6: fc00:c:c:4c::1/128 + Ethernet1: + ipv6: fc00:a::12e/126 + bp_interface: + ipv6: fc00:b::4c/64 + + ARISTA75T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.77 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::131 + interfaces: + Loopback0: + ipv6: fc00:c:c:4d::1/128 + Ethernet1: + ipv6: fc00:a::132/126 + bp_interface: + ipv6: fc00:b::4d/64 + + ARISTA76T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.78 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::135 + interfaces: + Loopback0: + ipv6: fc00:c:c:4e::1/128 + Ethernet1: + ipv6: fc00:a::136/126 + bp_interface: + ipv6: fc00:b::4e/64 + + ARISTA77T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.79 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::139 + interfaces: + Loopback0: + ipv6: fc00:c:c:4f::1/128 + Ethernet1: + ipv6: fc00:a::13a/126 + bp_interface: + ipv6: fc00:b::4f/64 + + ARISTA78T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.80 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::13d + interfaces: + Loopback0: + ipv6: fc00:c:c:50::1/128 + Ethernet1: + ipv6: fc00:a::13e/126 + bp_interface: + ipv6: fc00:b::50/64 + + ARISTA79T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.81 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::141 + interfaces: + Loopback0: + ipv6: fc00:c:c:51::1/128 + Ethernet1: + ipv6: fc00:a::142/126 + bp_interface: + ipv6: fc00:b::51/64 + + ARISTA80T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.82 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::145 + interfaces: + Loopback0: + ipv6: fc00:c:c:52::1/128 + Ethernet1: + ipv6: fc00:a::146/126 + bp_interface: + ipv6: fc00:b::52/64 + + ARISTA81T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.83 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::149 + interfaces: + Loopback0: + ipv6: fc00:c:c:53::1/128 + Ethernet1: + ipv6: fc00:a::14a/126 + bp_interface: + ipv6: fc00:b::53/64 + + ARISTA82T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.84 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::14d + interfaces: + Loopback0: + ipv6: fc00:c:c:54::1/128 + Ethernet1: + ipv6: fc00:a::14e/126 + bp_interface: + ipv6: fc00:b::54/64 + + ARISTA83T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.85 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::151 + interfaces: + Loopback0: + ipv6: fc00:c:c:55::1/128 + Ethernet1: + ipv6: fc00:a::152/126 + bp_interface: + ipv6: fc00:b::55/64 + + ARISTA84T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.86 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::155 + interfaces: + Loopback0: + ipv6: fc00:c:c:56::1/128 + Ethernet1: + ipv6: fc00:a::156/126 + bp_interface: + ipv6: fc00:b::56/64 + + ARISTA85T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.87 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::159 + interfaces: + Loopback0: + ipv6: fc00:c:c:57::1/128 + Ethernet1: + ipv6: fc00:a::15a/126 + bp_interface: + ipv6: fc00:b::57/64 + + ARISTA86T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.88 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::15d + interfaces: + Loopback0: + ipv6: fc00:c:c:58::1/128 + Ethernet1: + ipv6: fc00:a::15e/126 + bp_interface: + ipv6: fc00:b::58/64 + + ARISTA87T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.89 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::161 + interfaces: + Loopback0: + ipv6: fc00:c:c:59::1/128 + Ethernet1: + ipv6: fc00:a::162/126 + bp_interface: + ipv6: fc00:b::59/64 + + ARISTA88T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.90 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::165 + interfaces: + Loopback0: + ipv6: fc00:c:c:5a::1/128 + Ethernet1: + ipv6: fc00:a::166/126 + bp_interface: + ipv6: fc00:b::5a/64 + + ARISTA89T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.91 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::169 + interfaces: + Loopback0: + ipv6: fc00:c:c:5b::1/128 + Ethernet1: + ipv6: fc00:a::16a/126 + bp_interface: + ipv6: fc00:b::5b/64 + + ARISTA90T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.92 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::16d + interfaces: + Loopback0: + ipv6: fc00:c:c:5c::1/128 + Ethernet1: + ipv6: fc00:a::16e/126 + bp_interface: + ipv6: fc00:b::5c/64 + + ARISTA91T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.93 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::171 + interfaces: + Loopback0: + ipv6: fc00:c:c:5d::1/128 + Ethernet1: + ipv6: fc00:a::172/126 + bp_interface: + ipv6: fc00:b::5d/64 + + ARISTA92T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.94 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::175 + interfaces: + Loopback0: + ipv6: fc00:c:c:5e::1/128 + Ethernet1: + ipv6: fc00:a::176/126 + bp_interface: + ipv6: fc00:b::5e/64 + + ARISTA93T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.95 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::179 + interfaces: + Loopback0: + ipv6: fc00:c:c:5f::1/128 + Ethernet1: + ipv6: fc00:a::17a/126 + bp_interface: + ipv6: fc00:b::5f/64 + + ARISTA94T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.96 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::17d + interfaces: + Loopback0: + ipv6: fc00:c:c:60::1/128 + Ethernet1: + ipv6: fc00:a::17e/126 + bp_interface: + ipv6: fc00:b::60/64 + + ARISTA95T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.97 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::181 + interfaces: + Loopback0: + ipv6: fc00:c:c:61::1/128 + Ethernet1: + ipv6: fc00:a::182/126 + bp_interface: + ipv6: fc00:b::61/64 + + ARISTA96T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.98 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::185 + interfaces: + Loopback0: + ipv6: fc00:c:c:62::1/128 + Ethernet1: + ipv6: fc00:a::186/126 + bp_interface: + ipv6: fc00:b::62/64 + + ARISTA97T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.99 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::189 + interfaces: + Loopback0: + ipv6: fc00:c:c:63::1/128 + Ethernet1: + ipv6: fc00:a::18a/126 + bp_interface: + ipv6: fc00:b::63/64 + + ARISTA98T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.100 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::18d + interfaces: + Loopback0: + ipv6: fc00:c:c:64::1/128 + Ethernet1: + ipv6: fc00:a::18e/126 + bp_interface: + ipv6: fc00:b::64/64 + + ARISTA99T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.101 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::191 + interfaces: + Loopback0: + ipv6: fc00:c:c:65::1/128 + Ethernet1: + ipv6: fc00:a::192/126 + bp_interface: + ipv6: fc00:b::65/64 + + ARISTA100T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.102 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::195 + interfaces: + Loopback0: + ipv6: fc00:c:c:66::1/128 + Ethernet1: + ipv6: fc00:a::196/126 + bp_interface: + ipv6: fc00:b::66/64 + + ARISTA101T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.103 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::199 + interfaces: + Loopback0: + ipv6: fc00:c:c:67::1/128 + Ethernet1: + ipv6: fc00:a::19a/126 + bp_interface: + ipv6: fc00:b::67/64 + + ARISTA102T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.104 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::19d + interfaces: + Loopback0: + ipv6: fc00:c:c:68::1/128 + Ethernet1: + ipv6: fc00:a::19e/126 + bp_interface: + ipv6: fc00:b::68/64 + + ARISTA103T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.105 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:69::1/128 + Ethernet1: + ipv6: fc00:a::1a2/126 + bp_interface: + ipv6: fc00:b::69/64 + + ARISTA104T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.106 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6a::1/128 + Ethernet1: + ipv6: fc00:a::1a6/126 + bp_interface: + ipv6: fc00:b::6a/64 + + ARISTA105T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.107 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6b::1/128 + Ethernet1: + ipv6: fc00:a::1aa/126 + bp_interface: + ipv6: fc00:b::6b/64 + + ARISTA106T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.108 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1ad + interfaces: + Loopback0: + ipv6: fc00:c:c:6c::1/128 + Ethernet1: + ipv6: fc00:a::1ae/126 + bp_interface: + ipv6: fc00:b::6c/64 + + ARISTA107T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.109 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:6d::1/128 + Ethernet1: + ipv6: fc00:a::1b2/126 + bp_interface: + ipv6: fc00:b::6d/64 + + ARISTA108T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.110 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:6e::1/128 + Ethernet1: + ipv6: fc00:a::1b6/126 + bp_interface: + ipv6: fc00:b::6e/64 + + ARISTA109T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.111 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:6f::1/128 + Ethernet1: + ipv6: fc00:a::1ba/126 + bp_interface: + ipv6: fc00:b::6f/64 + + ARISTA110T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.112 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1bd + interfaces: + Loopback0: + ipv6: fc00:c:c:70::1/128 + Ethernet1: + ipv6: fc00:a::1be/126 + bp_interface: + ipv6: fc00:b::70/64 + + ARISTA111T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.113 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:71::1/128 + Ethernet1: + ipv6: fc00:a::1c2/126 + bp_interface: + ipv6: fc00:b::71/64 + + ARISTA112T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.114 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:72::1/128 + Ethernet1: + ipv6: fc00:a::1c6/126 + bp_interface: + ipv6: fc00:b::72/64 + + ARISTA113T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.115 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:73::1/128 + Ethernet1: + ipv6: fc00:a::1ca/126 + bp_interface: + ipv6: fc00:b::73/64 + + ARISTA114T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.116 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1cd + interfaces: + Loopback0: + ipv6: fc00:c:c:74::1/128 + Ethernet1: + ipv6: fc00:a::1ce/126 + bp_interface: + ipv6: fc00:b::74/64 + + ARISTA115T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.117 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:75::1/128 + Ethernet1: + ipv6: fc00:a::1d2/126 + bp_interface: + ipv6: fc00:b::75/64 + + ARISTA116T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.118 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:76::1/128 + Ethernet1: + ipv6: fc00:a::1d6/126 + bp_interface: + ipv6: fc00:b::76/64 + + ARISTA117T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.119 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:77::1/128 + Ethernet1: + ipv6: fc00:a::1da/126 + bp_interface: + ipv6: fc00:b::77/64 + + ARISTA118T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.120 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1dd + interfaces: + Loopback0: + ipv6: fc00:c:c:78::1/128 + Ethernet1: + ipv6: fc00:a::1de/126 + bp_interface: + ipv6: fc00:b::78/64 + + ARISTA119T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.121 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:79::1/128 + Ethernet1: + ipv6: fc00:a::1e2/126 + bp_interface: + ipv6: fc00:b::79/64 + + ARISTA120T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.122 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7a::1/128 + Ethernet1: + ipv6: fc00:a::1e6/126 + bp_interface: + ipv6: fc00:b::7a/64 + + ARISTA121T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.123 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7b::1/128 + Ethernet1: + ipv6: fc00:a::1ea/126 + bp_interface: + ipv6: fc00:b::7b/64 + + ARISTA122T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.124 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1ed + interfaces: + Loopback0: + ipv6: fc00:c:c:7c::1/128 + Ethernet1: + ipv6: fc00:a::1ee/126 + bp_interface: + ipv6: fc00:b::7c/64 + + ARISTA123T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.125 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:7d::1/128 + Ethernet1: + ipv6: fc00:a::1f2/126 + bp_interface: + ipv6: fc00:b::7d/64 + + ARISTA124T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.126 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:7e::1/128 + Ethernet1: + ipv6: fc00:a::1f6/126 + bp_interface: + ipv6: fc00:b::7e/64 + + ARISTA125T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.127 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:7f::1/128 + Ethernet1: + ipv6: fc00:a::1fa/126 + bp_interface: + ipv6: fc00:b::7f/64 + + ARISTA126T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.128 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::1fd + interfaces: + Loopback0: + ipv6: fc00:c:c:80::1/128 + Ethernet1: + ipv6: fc00:a::1fe/126 + bp_interface: + ipv6: fc00:b::80/64 + + ARISTA127T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.129 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::201 + interfaces: + Loopback0: + ipv6: fc00:c:c:81::1/128 + Ethernet1: + ipv6: fc00:a::202/126 + bp_interface: + ipv6: fc00:b::81/64 + + ARISTA128T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.130 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::205 + interfaces: + Loopback0: + ipv6: fc00:c:c:82::1/128 + Ethernet1: + ipv6: fc00:a::206/126 + bp_interface: + ipv6: fc00:b::82/64 + + ARISTA129T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.131 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::209 + interfaces: + Loopback0: + ipv6: fc00:c:c:83::1/128 + Ethernet1: + ipv6: fc00:a::20a/126 + bp_interface: + ipv6: fc00:b::83/64 + + ARISTA130T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.132 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::20d + interfaces: + Loopback0: + ipv6: fc00:c:c:84::1/128 + Ethernet1: + ipv6: fc00:a::20e/126 + bp_interface: + ipv6: fc00:b::84/64 + + ARISTA131T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.133 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::211 + interfaces: + Loopback0: + ipv6: fc00:c:c:85::1/128 + Ethernet1: + ipv6: fc00:a::212/126 + bp_interface: + ipv6: fc00:b::85/64 + + ARISTA132T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.134 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::215 + interfaces: + Loopback0: + ipv6: fc00:c:c:86::1/128 + Ethernet1: + ipv6: fc00:a::216/126 + bp_interface: + ipv6: fc00:b::86/64 + + ARISTA133T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.135 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::219 + interfaces: + Loopback0: + ipv6: fc00:c:c:87::1/128 + Ethernet1: + ipv6: fc00:a::21a/126 + bp_interface: + ipv6: fc00:b::87/64 + + ARISTA134T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.136 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::21d + interfaces: + Loopback0: + ipv6: fc00:c:c:88::1/128 + Ethernet1: + ipv6: fc00:a::21e/126 + bp_interface: + ipv6: fc00:b::88/64 + + ARISTA135T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.137 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::221 + interfaces: + Loopback0: + ipv6: fc00:c:c:89::1/128 + Ethernet1: + ipv6: fc00:a::222/126 + bp_interface: + ipv6: fc00:b::89/64 + + ARISTA136T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.138 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::225 + interfaces: + Loopback0: + ipv6: fc00:c:c:8a::1/128 + Ethernet1: + ipv6: fc00:a::226/126 + bp_interface: + ipv6: fc00:b::8a/64 + + ARISTA137T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.139 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::229 + interfaces: + Loopback0: + ipv6: fc00:c:c:8b::1/128 + Ethernet1: + ipv6: fc00:a::22a/126 + bp_interface: + ipv6: fc00:b::8b/64 + + ARISTA138T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.140 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::22d + interfaces: + Loopback0: + ipv6: fc00:c:c:8c::1/128 + Ethernet1: + ipv6: fc00:a::22e/126 + bp_interface: + ipv6: fc00:b::8c/64 + + ARISTA139T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.141 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::231 + interfaces: + Loopback0: + ipv6: fc00:c:c:8d::1/128 + Ethernet1: + ipv6: fc00:a::232/126 + bp_interface: + ipv6: fc00:b::8d/64 + + ARISTA140T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.142 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::235 + interfaces: + Loopback0: + ipv6: fc00:c:c:8e::1/128 + Ethernet1: + ipv6: fc00:a::236/126 + bp_interface: + ipv6: fc00:b::8e/64 + + ARISTA141T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.143 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::239 + interfaces: + Loopback0: + ipv6: fc00:c:c:8f::1/128 + Ethernet1: + ipv6: fc00:a::23a/126 + bp_interface: + ipv6: fc00:b::8f/64 + + ARISTA142T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.144 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::23d + interfaces: + Loopback0: + ipv6: fc00:c:c:90::1/128 + Ethernet1: + ipv6: fc00:a::23e/126 + bp_interface: + ipv6: fc00:b::90/64 + + ARISTA143T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.145 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::241 + interfaces: + Loopback0: + ipv6: fc00:c:c:91::1/128 + Ethernet1: + ipv6: fc00:a::242/126 + bp_interface: + ipv6: fc00:b::91/64 + + ARISTA144T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.146 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::245 + interfaces: + Loopback0: + ipv6: fc00:c:c:92::1/128 + Ethernet1: + ipv6: fc00:a::246/126 + bp_interface: + ipv6: fc00:b::92/64 + + ARISTA145T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.147 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::249 + interfaces: + Loopback0: + ipv6: fc00:c:c:93::1/128 + Ethernet1: + ipv6: fc00:a::24a/126 + bp_interface: + ipv6: fc00:b::93/64 + + ARISTA146T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.148 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::24d + interfaces: + Loopback0: + ipv6: fc00:c:c:94::1/128 + Ethernet1: + ipv6: fc00:a::24e/126 + bp_interface: + ipv6: fc00:b::94/64 + + ARISTA147T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.149 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::251 + interfaces: + Loopback0: + ipv6: fc00:c:c:95::1/128 + Ethernet1: + ipv6: fc00:a::252/126 + bp_interface: + ipv6: fc00:b::95/64 + + ARISTA148T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.150 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::255 + interfaces: + Loopback0: + ipv6: fc00:c:c:96::1/128 + Ethernet1: + ipv6: fc00:a::256/126 + bp_interface: + ipv6: fc00:b::96/64 + + ARISTA149T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.151 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::259 + interfaces: + Loopback0: + ipv6: fc00:c:c:97::1/128 + Ethernet1: + ipv6: fc00:a::25a/126 + bp_interface: + ipv6: fc00:b::97/64 + + ARISTA150T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.152 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::25d + interfaces: + Loopback0: + ipv6: fc00:c:c:98::1/128 + Ethernet1: + ipv6: fc00:a::25e/126 + bp_interface: + ipv6: fc00:b::98/64 + + ARISTA151T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.153 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::261 + interfaces: + Loopback0: + ipv6: fc00:c:c:99::1/128 + Ethernet1: + ipv6: fc00:a::262/126 + bp_interface: + ipv6: fc00:b::99/64 + + ARISTA152T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.154 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::265 + interfaces: + Loopback0: + ipv6: fc00:c:c:9a::1/128 + Ethernet1: + ipv6: fc00:a::266/126 + bp_interface: + ipv6: fc00:b::9a/64 + + ARISTA153T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.155 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::269 + interfaces: + Loopback0: + ipv6: fc00:c:c:9b::1/128 + Ethernet1: + ipv6: fc00:a::26a/126 + bp_interface: + ipv6: fc00:b::9b/64 + + ARISTA154T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.156 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::26d + interfaces: + Loopback0: + ipv6: fc00:c:c:9c::1/128 + Ethernet1: + ipv6: fc00:a::26e/126 + bp_interface: + ipv6: fc00:b::9c/64 + + ARISTA155T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.157 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::271 + interfaces: + Loopback0: + ipv6: fc00:c:c:9d::1/128 + Ethernet1: + ipv6: fc00:a::272/126 + bp_interface: + ipv6: fc00:b::9d/64 + + ARISTA156T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.158 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::275 + interfaces: + Loopback0: + ipv6: fc00:c:c:9e::1/128 + Ethernet1: + ipv6: fc00:a::276/126 + bp_interface: + ipv6: fc00:b::9e/64 + + ARISTA157T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.159 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::279 + interfaces: + Loopback0: + ipv6: fc00:c:c:9f::1/128 + Ethernet1: + ipv6: fc00:a::27a/126 + bp_interface: + ipv6: fc00:b::9f/64 + + ARISTA158T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.160 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::27d + interfaces: + Loopback0: + ipv6: fc00:c:c:a0::1/128 + Ethernet1: + ipv6: fc00:a::27e/126 + bp_interface: + ipv6: fc00:b::a0/64 + + ARISTA159T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.161 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::281 + interfaces: + Loopback0: + ipv6: fc00:c:c:a1::1/128 + Ethernet1: + ipv6: fc00:a::282/126 + bp_interface: + ipv6: fc00:b::a1/64 + + ARISTA160T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.162 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::285 + interfaces: + Loopback0: + ipv6: fc00:c:c:a2::1/128 + Ethernet1: + ipv6: fc00:a::286/126 + bp_interface: + ipv6: fc00:b::a2/64 + + ARISTA161T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.163 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::289 + interfaces: + Loopback0: + ipv6: fc00:c:c:a3::1/128 + Ethernet1: + ipv6: fc00:a::28a/126 + bp_interface: + ipv6: fc00:b::a3/64 + + ARISTA162T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.164 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::28d + interfaces: + Loopback0: + ipv6: fc00:c:c:a4::1/128 + Ethernet1: + ipv6: fc00:a::28e/126 + bp_interface: + ipv6: fc00:b::a4/64 + + ARISTA163T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.165 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::291 + interfaces: + Loopback0: + ipv6: fc00:c:c:a5::1/128 + Ethernet1: + ipv6: fc00:a::292/126 + bp_interface: + ipv6: fc00:b::a5/64 + + ARISTA164T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.166 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::295 + interfaces: + Loopback0: + ipv6: fc00:c:c:a6::1/128 + Ethernet1: + ipv6: fc00:a::296/126 + bp_interface: + ipv6: fc00:b::a6/64 + + ARISTA165T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.167 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::299 + interfaces: + Loopback0: + ipv6: fc00:c:c:a7::1/128 + Ethernet1: + ipv6: fc00:a::29a/126 + bp_interface: + ipv6: fc00:b::a7/64 + + ARISTA166T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.168 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::29d + interfaces: + Loopback0: + ipv6: fc00:c:c:a8::1/128 + Ethernet1: + ipv6: fc00:a::29e/126 + bp_interface: + ipv6: fc00:b::a8/64 + + ARISTA167T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.169 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:a9::1/128 + Ethernet1: + ipv6: fc00:a::2a2/126 + bp_interface: + ipv6: fc00:b::a9/64 + + ARISTA168T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.170 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:aa::1/128 + Ethernet1: + ipv6: fc00:a::2a6/126 + bp_interface: + ipv6: fc00:b::aa/64 + + ARISTA169T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.171 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ab::1/128 + Ethernet1: + ipv6: fc00:a::2aa/126 + bp_interface: + ipv6: fc00:b::ab/64 + + ARISTA170T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.172 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ac::1/128 + Ethernet1: + ipv6: fc00:a::2ae/126 + bp_interface: + ipv6: fc00:b::ac/64 + + ARISTA171T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.173 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ad::1/128 + Ethernet1: + ipv6: fc00:a::2b2/126 + bp_interface: + ipv6: fc00:b::ad/64 + + ARISTA172T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.174 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ae::1/128 + Ethernet1: + ipv6: fc00:a::2b6/126 + bp_interface: + ipv6: fc00:b::ae/64 + + ARISTA173T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.175 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:af::1/128 + Ethernet1: + ipv6: fc00:a::2ba/126 + bp_interface: + ipv6: fc00:b::af/64 + + ARISTA174T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.176 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2bd + interfaces: + Loopback0: + ipv6: fc00:c:c:b0::1/128 + Ethernet1: + ipv6: fc00:a::2be/126 + bp_interface: + ipv6: fc00:b::b0/64 + + ARISTA175T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.177 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b1::1/128 + Ethernet1: + ipv6: fc00:a::2c2/126 + bp_interface: + ipv6: fc00:b::b1/64 + + ARISTA176T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.178 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b2::1/128 + Ethernet1: + ipv6: fc00:a::2c6/126 + bp_interface: + ipv6: fc00:b::b2/64 + + ARISTA177T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.179 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b3::1/128 + Ethernet1: + ipv6: fc00:a::2ca/126 + bp_interface: + ipv6: fc00:b::b3/64 + + ARISTA178T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.180 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2cd + interfaces: + Loopback0: + ipv6: fc00:c:c:b4::1/128 + Ethernet1: + ipv6: fc00:a::2ce/126 + bp_interface: + ipv6: fc00:b::b4/64 + + ARISTA179T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.181 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b5::1/128 + Ethernet1: + ipv6: fc00:a::2d2/126 + bp_interface: + ipv6: fc00:b::b5/64 + + ARISTA180T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.182 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:b6::1/128 + Ethernet1: + ipv6: fc00:a::2d6/126 + bp_interface: + ipv6: fc00:b::b6/64 + + ARISTA181T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.183 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:b7::1/128 + Ethernet1: + ipv6: fc00:a::2da/126 + bp_interface: + ipv6: fc00:b::b7/64 + + ARISTA182T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.184 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2dd + interfaces: + Loopback0: + ipv6: fc00:c:c:b8::1/128 + Ethernet1: + ipv6: fc00:a::2de/126 + bp_interface: + ipv6: fc00:b::b8/64 + + ARISTA183T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.185 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:b9::1/128 + Ethernet1: + ipv6: fc00:a::2e2/126 + bp_interface: + ipv6: fc00:b::b9/64 + + ARISTA184T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.186 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ba::1/128 + Ethernet1: + ipv6: fc00:a::2e6/126 + bp_interface: + ipv6: fc00:b::ba/64 + + ARISTA185T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.187 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bb::1/128 + Ethernet1: + ipv6: fc00:a::2ea/126 + bp_interface: + ipv6: fc00:b::bb/64 + + ARISTA186T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.188 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2ed + interfaces: + Loopback0: + ipv6: fc00:c:c:bc::1/128 + Ethernet1: + ipv6: fc00:a::2ee/126 + bp_interface: + ipv6: fc00:b::bc/64 + + ARISTA187T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.189 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:bd::1/128 + Ethernet1: + ipv6: fc00:a::2f2/126 + bp_interface: + ipv6: fc00:b::bd/64 + + ARISTA188T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.190 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:be::1/128 + Ethernet1: + ipv6: fc00:a::2f6/126 + bp_interface: + ipv6: fc00:b::be/64 + + ARISTA189T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.191 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:bf::1/128 + Ethernet1: + ipv6: fc00:a::2fa/126 + bp_interface: + ipv6: fc00:b::bf/64 + + ARISTA190T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.192 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::2fd + interfaces: + Loopback0: + ipv6: fc00:c:c:c0::1/128 + Ethernet1: + ipv6: fc00:a::2fe/126 + bp_interface: + ipv6: fc00:b::c0/64 + + ARISTA191T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.193 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::301 + interfaces: + Loopback0: + ipv6: fc00:c:c:c1::1/128 + Ethernet1: + ipv6: fc00:a::302/126 + bp_interface: + ipv6: fc00:b::c1/64 + + ARISTA192T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.194 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::305 + interfaces: + Loopback0: + ipv6: fc00:c:c:c2::1/128 + Ethernet1: + ipv6: fc00:a::306/126 + bp_interface: + ipv6: fc00:b::c2/64 + + ARISTA193T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.195 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::309 + interfaces: + Loopback0: + ipv6: fc00:c:c:c3::1/128 + Ethernet1: + ipv6: fc00:a::30a/126 + bp_interface: + ipv6: fc00:b::c3/64 + + ARISTA194T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.196 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::30d + interfaces: + Loopback0: + ipv6: fc00:c:c:c4::1/128 + Ethernet1: + ipv6: fc00:a::30e/126 + bp_interface: + ipv6: fc00:b::c4/64 + + ARISTA195T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.197 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::311 + interfaces: + Loopback0: + ipv6: fc00:c:c:c5::1/128 + Ethernet1: + ipv6: fc00:a::312/126 + bp_interface: + ipv6: fc00:b::c5/64 + + ARISTA196T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.198 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::315 + interfaces: + Loopback0: + ipv6: fc00:c:c:c6::1/128 + Ethernet1: + ipv6: fc00:a::316/126 + bp_interface: + ipv6: fc00:b::c6/64 + + ARISTA197T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.199 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::319 + interfaces: + Loopback0: + ipv6: fc00:c:c:c7::1/128 + Ethernet1: + ipv6: fc00:a::31a/126 + bp_interface: + ipv6: fc00:b::c7/64 + + ARISTA198T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.200 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::31d + interfaces: + Loopback0: + ipv6: fc00:c:c:c8::1/128 + Ethernet1: + ipv6: fc00:a::31e/126 + bp_interface: + ipv6: fc00:b::c8/64 + + ARISTA199T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.201 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::321 + interfaces: + Loopback0: + ipv6: fc00:c:c:c9::1/128 + Ethernet1: + ipv6: fc00:a::322/126 + bp_interface: + ipv6: fc00:b::c9/64 + + ARISTA200T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.202 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::325 + interfaces: + Loopback0: + ipv6: fc00:c:c:ca::1/128 + Ethernet1: + ipv6: fc00:a::326/126 + bp_interface: + ipv6: fc00:b::ca/64 + + ARISTA201T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.203 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::329 + interfaces: + Loopback0: + ipv6: fc00:c:c:cb::1/128 + Ethernet1: + ipv6: fc00:a::32a/126 + bp_interface: + ipv6: fc00:b::cb/64 + + ARISTA202T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.204 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::32d + interfaces: + Loopback0: + ipv6: fc00:c:c:cc::1/128 + Ethernet1: + ipv6: fc00:a::32e/126 + bp_interface: + ipv6: fc00:b::cc/64 + + ARISTA203T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.205 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::331 + interfaces: + Loopback0: + ipv6: fc00:c:c:cd::1/128 + Ethernet1: + ipv6: fc00:a::332/126 + bp_interface: + ipv6: fc00:b::cd/64 + + ARISTA204T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.206 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::335 + interfaces: + Loopback0: + ipv6: fc00:c:c:ce::1/128 + Ethernet1: + ipv6: fc00:a::336/126 + bp_interface: + ipv6: fc00:b::ce/64 + + ARISTA205T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.207 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::339 + interfaces: + Loopback0: + ipv6: fc00:c:c:cf::1/128 + Ethernet1: + ipv6: fc00:a::33a/126 + bp_interface: + ipv6: fc00:b::cf/64 + + ARISTA206T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.208 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::33d + interfaces: + Loopback0: + ipv6: fc00:c:c:d0::1/128 + Ethernet1: + ipv6: fc00:a::33e/126 + bp_interface: + ipv6: fc00:b::d0/64 + + ARISTA207T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.209 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::341 + interfaces: + Loopback0: + ipv6: fc00:c:c:d1::1/128 + Ethernet1: + ipv6: fc00:a::342/126 + bp_interface: + ipv6: fc00:b::d1/64 + + ARISTA208T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.210 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::345 + interfaces: + Loopback0: + ipv6: fc00:c:c:d2::1/128 + Ethernet1: + ipv6: fc00:a::346/126 + bp_interface: + ipv6: fc00:b::d2/64 + + ARISTA209T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.211 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::349 + interfaces: + Loopback0: + ipv6: fc00:c:c:d3::1/128 + Ethernet1: + ipv6: fc00:a::34a/126 + bp_interface: + ipv6: fc00:b::d3/64 + + ARISTA210T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.212 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::34d + interfaces: + Loopback0: + ipv6: fc00:c:c:d4::1/128 + Ethernet1: + ipv6: fc00:a::34e/126 + bp_interface: + ipv6: fc00:b::d4/64 + + ARISTA211T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.213 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::351 + interfaces: + Loopback0: + ipv6: fc00:c:c:d5::1/128 + Ethernet1: + ipv6: fc00:a::352/126 + bp_interface: + ipv6: fc00:b::d5/64 + + ARISTA212T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.214 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::355 + interfaces: + Loopback0: + ipv6: fc00:c:c:d6::1/128 + Ethernet1: + ipv6: fc00:a::356/126 + bp_interface: + ipv6: fc00:b::d6/64 + + ARISTA213T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.215 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::359 + interfaces: + Loopback0: + ipv6: fc00:c:c:d7::1/128 + Ethernet1: + ipv6: fc00:a::35a/126 + bp_interface: + ipv6: fc00:b::d7/64 + + ARISTA214T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.216 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::35d + interfaces: + Loopback0: + ipv6: fc00:c:c:d8::1/128 + Ethernet1: + ipv6: fc00:a::35e/126 + bp_interface: + ipv6: fc00:b::d8/64 + + ARISTA215T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.217 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::361 + interfaces: + Loopback0: + ipv6: fc00:c:c:d9::1/128 + Ethernet1: + ipv6: fc00:a::362/126 + bp_interface: + ipv6: fc00:b::d9/64 + + ARISTA216T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.218 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::365 + interfaces: + Loopback0: + ipv6: fc00:c:c:da::1/128 + Ethernet1: + ipv6: fc00:a::366/126 + bp_interface: + ipv6: fc00:b::da/64 + + ARISTA217T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.219 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::369 + interfaces: + Loopback0: + ipv6: fc00:c:c:db::1/128 + Ethernet1: + ipv6: fc00:a::36a/126 + bp_interface: + ipv6: fc00:b::db/64 + + ARISTA218T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.220 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::36d + interfaces: + Loopback0: + ipv6: fc00:c:c:dc::1/128 + Ethernet1: + ipv6: fc00:a::36e/126 + bp_interface: + ipv6: fc00:b::dc/64 + + ARISTA219T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.221 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::371 + interfaces: + Loopback0: + ipv6: fc00:c:c:dd::1/128 + Ethernet1: + ipv6: fc00:a::372/126 + bp_interface: + ipv6: fc00:b::dd/64 + + ARISTA220T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.222 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::375 + interfaces: + Loopback0: + ipv6: fc00:c:c:de::1/128 + Ethernet1: + ipv6: fc00:a::376/126 + bp_interface: + ipv6: fc00:b::de/64 + + ARISTA221T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.223 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::379 + interfaces: + Loopback0: + ipv6: fc00:c:c:df::1/128 + Ethernet1: + ipv6: fc00:a::37a/126 + bp_interface: + ipv6: fc00:b::df/64 + + ARISTA222T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.224 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::37d + interfaces: + Loopback0: + ipv6: fc00:c:c:e0::1/128 + Ethernet1: + ipv6: fc00:a::37e/126 + bp_interface: + ipv6: fc00:b::e0/64 + + ARISTA223T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.225 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::381 + interfaces: + Loopback0: + ipv6: fc00:c:c:e1::1/128 + Ethernet1: + ipv6: fc00:a::382/126 + bp_interface: + ipv6: fc00:b::e1/64 + + ARISTA224T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.226 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::385 + interfaces: + Loopback0: + ipv6: fc00:c:c:e2::1/128 + Ethernet1: + ipv6: fc00:a::386/126 + bp_interface: + ipv6: fc00:b::e2/64 + + ARISTA225T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.227 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::389 + interfaces: + Loopback0: + ipv6: fc00:c:c:e3::1/128 + Ethernet1: + ipv6: fc00:a::38a/126 + bp_interface: + ipv6: fc00:b::e3/64 + + ARISTA226T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.228 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::38d + interfaces: + Loopback0: + ipv6: fc00:c:c:e4::1/128 + Ethernet1: + ipv6: fc00:a::38e/126 + bp_interface: + ipv6: fc00:b::e4/64 + + ARISTA227T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.229 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::391 + interfaces: + Loopback0: + ipv6: fc00:c:c:e5::1/128 + Ethernet1: + ipv6: fc00:a::392/126 + bp_interface: + ipv6: fc00:b::e5/64 + + ARISTA228T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.230 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::395 + interfaces: + Loopback0: + ipv6: fc00:c:c:e6::1/128 + Ethernet1: + ipv6: fc00:a::396/126 + bp_interface: + ipv6: fc00:b::e6/64 + + ARISTA229T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.231 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::399 + interfaces: + Loopback0: + ipv6: fc00:c:c:e7::1/128 + Ethernet1: + ipv6: fc00:a::39a/126 + bp_interface: + ipv6: fc00:b::e7/64 + + ARISTA230T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.232 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::39d + interfaces: + Loopback0: + ipv6: fc00:c:c:e8::1/128 + Ethernet1: + ipv6: fc00:a::39e/126 + bp_interface: + ipv6: fc00:b::e8/64 + + ARISTA231T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.233 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:e9::1/128 + Ethernet1: + ipv6: fc00:a::3a2/126 + bp_interface: + ipv6: fc00:b::e9/64 + + ARISTA232T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.234 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ea::1/128 + Ethernet1: + ipv6: fc00:a::3a6/126 + bp_interface: + ipv6: fc00:b::ea/64 + + ARISTA233T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.235 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:eb::1/128 + Ethernet1: + ipv6: fc00:a::3aa/126 + bp_interface: + ipv6: fc00:b::eb/64 + + ARISTA234T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.236 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3ad + interfaces: + Loopback0: + ipv6: fc00:c:c:ec::1/128 + Ethernet1: + ipv6: fc00:a::3ae/126 + bp_interface: + ipv6: fc00:b::ec/64 + + ARISTA235T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.237 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:ed::1/128 + Ethernet1: + ipv6: fc00:a::3b2/126 + bp_interface: + ipv6: fc00:b::ed/64 + + ARISTA236T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.238 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:ee::1/128 + Ethernet1: + ipv6: fc00:a::3b6/126 + bp_interface: + ipv6: fc00:b::ee/64 + + ARISTA237T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.239 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ef::1/128 + Ethernet1: + ipv6: fc00:a::3ba/126 + bp_interface: + ipv6: fc00:b::ef/64 + + ARISTA238T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.240 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3bd + interfaces: + Loopback0: + ipv6: fc00:c:c:f0::1/128 + Ethernet1: + ipv6: fc00:a::3be/126 + bp_interface: + ipv6: fc00:b::f0/64 + + ARISTA239T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.241 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f1::1/128 + Ethernet1: + ipv6: fc00:a::3c2/126 + bp_interface: + ipv6: fc00:b::f1/64 + + ARISTA240T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.242 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f2::1/128 + Ethernet1: + ipv6: fc00:a::3c6/126 + bp_interface: + ipv6: fc00:b::f2/64 + + ARISTA241T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.243 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f3::1/128 + Ethernet1: + ipv6: fc00:a::3ca/126 + bp_interface: + ipv6: fc00:b::f3/64 + + ARISTA242T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.244 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3cd + interfaces: + Loopback0: + ipv6: fc00:c:c:f4::1/128 + Ethernet1: + ipv6: fc00:a::3ce/126 + bp_interface: + ipv6: fc00:b::f4/64 + + ARISTA243T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.245 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f5::1/128 + Ethernet1: + ipv6: fc00:a::3d2/126 + bp_interface: + ipv6: fc00:b::f5/64 + + ARISTA244T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.246 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:f6::1/128 + Ethernet1: + ipv6: fc00:a::3d6/126 + bp_interface: + ipv6: fc00:b::f6/64 + + ARISTA245T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.247 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:f7::1/128 + Ethernet1: + ipv6: fc00:a::3da/126 + bp_interface: + ipv6: fc00:b::f7/64 + + ARISTA246T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.248 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3dd + interfaces: + Loopback0: + ipv6: fc00:c:c:f8::1/128 + Ethernet1: + ipv6: fc00:a::3de/126 + bp_interface: + ipv6: fc00:b::f8/64 + + ARISTA247T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.249 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:f9::1/128 + Ethernet1: + ipv6: fc00:a::3e2/126 + bp_interface: + ipv6: fc00:b::f9/64 + + ARISTA248T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.250 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fa::1/128 + Ethernet1: + ipv6: fc00:a::3e6/126 + bp_interface: + ipv6: fc00:b::fa/64 + + ARISTA249T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.251 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:fb::1/128 + Ethernet1: + ipv6: fc00:a::3ea/126 + bp_interface: + ipv6: fc00:b::fb/64 + + ARISTA250T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.252 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3ed + interfaces: + Loopback0: + ipv6: fc00:c:c:fc::1/128 + Ethernet1: + ipv6: fc00:a::3ee/126 + bp_interface: + ipv6: fc00:b::fc/64 + + ARISTA251T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.253 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:fd::1/128 + Ethernet1: + ipv6: fc00:a::3f2/126 + bp_interface: + ipv6: fc00:b::fd/64 + + ARISTA252T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.254 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:fe::1/128 + Ethernet1: + ipv6: fc00:a::3f6/126 + bp_interface: + ipv6: fc00:b::fe/64 + + ARISTA253T0: + properties: + - common + - tor + bgp: + router-id: 0.12.0.255 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:ff::1/128 + Ethernet1: + ipv6: fc00:a::3fa/126 + bp_interface: + ipv6: fc00:b::ff/64 + + ARISTA254T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.0 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::3fd + interfaces: + Loopback0: + ipv6: fc00:c:c:100::1/128 + Ethernet1: + ipv6: fc00:a::3fe/126 + bp_interface: + ipv6: fc00:b::100/64 + + ARISTA255T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.1 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::401 + interfaces: + Loopback0: + ipv6: fc00:c:c:101::1/128 + Ethernet1: + ipv6: fc00:a::402/126 + bp_interface: + ipv6: fc00:b::101/64 + + ARISTA256T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.2 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::405 + interfaces: + Loopback0: + ipv6: fc00:c:c:102::1/128 + Ethernet1: + ipv6: fc00:a::406/126 + bp_interface: + ipv6: fc00:b::102/64 + + ARISTA257T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.3 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::409 + interfaces: + Loopback0: + ipv6: fc00:c:c:103::1/128 + Ethernet1: + ipv6: fc00:a::40a/126 + bp_interface: + ipv6: fc00:b::103/64 + + ARISTA258T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.4 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::40d + interfaces: + Loopback0: + ipv6: fc00:c:c:104::1/128 + Ethernet1: + ipv6: fc00:a::40e/126 + bp_interface: + ipv6: fc00:b::104/64 + + ARISTA259T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.5 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::411 + interfaces: + Loopback0: + ipv6: fc00:c:c:105::1/128 + Ethernet1: + ipv6: fc00:a::412/126 + bp_interface: + ipv6: fc00:b::105/64 + + ARISTA260T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.6 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::415 + interfaces: + Loopback0: + ipv6: fc00:c:c:106::1/128 + Ethernet1: + ipv6: fc00:a::416/126 + bp_interface: + ipv6: fc00:b::106/64 + + ARISTA261T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.7 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::419 + interfaces: + Loopback0: + ipv6: fc00:c:c:107::1/128 + Ethernet1: + ipv6: fc00:a::41a/126 + bp_interface: + ipv6: fc00:b::107/64 + + ARISTA262T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.8 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::41d + interfaces: + Loopback0: + ipv6: fc00:c:c:108::1/128 + Ethernet1: + ipv6: fc00:a::41e/126 + bp_interface: + ipv6: fc00:b::108/64 + + ARISTA263T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.9 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::421 + interfaces: + Loopback0: + ipv6: fc00:c:c:109::1/128 + Ethernet1: + ipv6: fc00:a::422/126 + bp_interface: + ipv6: fc00:b::109/64 + + ARISTA264T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.10 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::425 + interfaces: + Loopback0: + ipv6: fc00:c:c:10a::1/128 + Ethernet1: + ipv6: fc00:a::426/126 + bp_interface: + ipv6: fc00:b::10a/64 + + ARISTA265T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.11 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::429 + interfaces: + Loopback0: + ipv6: fc00:c:c:10b::1/128 + Ethernet1: + ipv6: fc00:a::42a/126 + bp_interface: + ipv6: fc00:b::10b/64 + + ARISTA266T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.12 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::42d + interfaces: + Loopback0: + ipv6: fc00:c:c:10c::1/128 + Ethernet1: + ipv6: fc00:a::42e/126 + bp_interface: + ipv6: fc00:b::10c/64 + + ARISTA267T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.13 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::431 + interfaces: + Loopback0: + ipv6: fc00:c:c:10d::1/128 + Ethernet1: + ipv6: fc00:a::432/126 + bp_interface: + ipv6: fc00:b::10d/64 + + ARISTA268T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.14 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::435 + interfaces: + Loopback0: + ipv6: fc00:c:c:10e::1/128 + Ethernet1: + ipv6: fc00:a::436/126 + bp_interface: + ipv6: fc00:b::10e/64 + + ARISTA269T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.15 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::439 + interfaces: + Loopback0: + ipv6: fc00:c:c:10f::1/128 + Ethernet1: + ipv6: fc00:a::43a/126 + bp_interface: + ipv6: fc00:b::10f/64 + + ARISTA270T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.16 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::43d + interfaces: + Loopback0: + ipv6: fc00:c:c:110::1/128 + Ethernet1: + ipv6: fc00:a::43e/126 + bp_interface: + ipv6: fc00:b::110/64 + + ARISTA271T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.17 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::441 + interfaces: + Loopback0: + ipv6: fc00:c:c:111::1/128 + Ethernet1: + ipv6: fc00:a::442/126 + bp_interface: + ipv6: fc00:b::111/64 + + ARISTA272T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.18 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::445 + interfaces: + Loopback0: + ipv6: fc00:c:c:112::1/128 + Ethernet1: + ipv6: fc00:a::446/126 + bp_interface: + ipv6: fc00:b::112/64 + + ARISTA273T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.19 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::449 + interfaces: + Loopback0: + ipv6: fc00:c:c:113::1/128 + Ethernet1: + ipv6: fc00:a::44a/126 + bp_interface: + ipv6: fc00:b::113/64 + + ARISTA274T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.20 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::44d + interfaces: + Loopback0: + ipv6: fc00:c:c:114::1/128 + Ethernet1: + ipv6: fc00:a::44e/126 + bp_interface: + ipv6: fc00:b::114/64 + + ARISTA275T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.21 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::451 + interfaces: + Loopback0: + ipv6: fc00:c:c:115::1/128 + Ethernet1: + ipv6: fc00:a::452/126 + bp_interface: + ipv6: fc00:b::115/64 + + ARISTA276T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.22 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::455 + interfaces: + Loopback0: + ipv6: fc00:c:c:116::1/128 + Ethernet1: + ipv6: fc00:a::456/126 + bp_interface: + ipv6: fc00:b::116/64 + + ARISTA277T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.23 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::459 + interfaces: + Loopback0: + ipv6: fc00:c:c:117::1/128 + Ethernet1: + ipv6: fc00:a::45a/126 + bp_interface: + ipv6: fc00:b::117/64 + + ARISTA278T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.24 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::45d + interfaces: + Loopback0: + ipv6: fc00:c:c:118::1/128 + Ethernet1: + ipv6: fc00:a::45e/126 + bp_interface: + ipv6: fc00:b::118/64 + + ARISTA279T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.25 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::461 + interfaces: + Loopback0: + ipv6: fc00:c:c:119::1/128 + Ethernet1: + ipv6: fc00:a::462/126 + bp_interface: + ipv6: fc00:b::119/64 + + ARISTA280T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.26 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::465 + interfaces: + Loopback0: + ipv6: fc00:c:c:11a::1/128 + Ethernet1: + ipv6: fc00:a::466/126 + bp_interface: + ipv6: fc00:b::11a/64 + + ARISTA281T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.27 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::469 + interfaces: + Loopback0: + ipv6: fc00:c:c:11b::1/128 + Ethernet1: + ipv6: fc00:a::46a/126 + bp_interface: + ipv6: fc00:b::11b/64 + + ARISTA282T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.28 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::46d + interfaces: + Loopback0: + ipv6: fc00:c:c:11c::1/128 + Ethernet1: + ipv6: fc00:a::46e/126 + bp_interface: + ipv6: fc00:b::11c/64 + + ARISTA283T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.29 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::471 + interfaces: + Loopback0: + ipv6: fc00:c:c:11d::1/128 + Ethernet1: + ipv6: fc00:a::472/126 + bp_interface: + ipv6: fc00:b::11d/64 + + ARISTA284T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.30 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::475 + interfaces: + Loopback0: + ipv6: fc00:c:c:11e::1/128 + Ethernet1: + ipv6: fc00:a::476/126 + bp_interface: + ipv6: fc00:b::11e/64 + + ARISTA285T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.31 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::479 + interfaces: + Loopback0: + ipv6: fc00:c:c:11f::1/128 + Ethernet1: + ipv6: fc00:a::47a/126 + bp_interface: + ipv6: fc00:b::11f/64 + + ARISTA286T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.32 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::47d + interfaces: + Loopback0: + ipv6: fc00:c:c:120::1/128 + Ethernet1: + ipv6: fc00:a::47e/126 + bp_interface: + ipv6: fc00:b::120/64 + + ARISTA287T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.33 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::481 + interfaces: + Loopback0: + ipv6: fc00:c:c:121::1/128 + Ethernet1: + ipv6: fc00:a::482/126 + bp_interface: + ipv6: fc00:b::121/64 + + ARISTA288T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.34 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::485 + interfaces: + Loopback0: + ipv6: fc00:c:c:122::1/128 + Ethernet1: + ipv6: fc00:a::486/126 + bp_interface: + ipv6: fc00:b::122/64 + + ARISTA289T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.35 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::489 + interfaces: + Loopback0: + ipv6: fc00:c:c:123::1/128 + Ethernet1: + ipv6: fc00:a::48a/126 + bp_interface: + ipv6: fc00:b::123/64 + + ARISTA290T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.36 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::48d + interfaces: + Loopback0: + ipv6: fc00:c:c:124::1/128 + Ethernet1: + ipv6: fc00:a::48e/126 + bp_interface: + ipv6: fc00:b::124/64 + + ARISTA291T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.37 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::491 + interfaces: + Loopback0: + ipv6: fc00:c:c:125::1/128 + Ethernet1: + ipv6: fc00:a::492/126 + bp_interface: + ipv6: fc00:b::125/64 + + ARISTA292T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.38 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::495 + interfaces: + Loopback0: + ipv6: fc00:c:c:126::1/128 + Ethernet1: + ipv6: fc00:a::496/126 + bp_interface: + ipv6: fc00:b::126/64 + + ARISTA293T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.39 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::499 + interfaces: + Loopback0: + ipv6: fc00:c:c:127::1/128 + Ethernet1: + ipv6: fc00:a::49a/126 + bp_interface: + ipv6: fc00:b::127/64 + + ARISTA294T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.40 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::49d + interfaces: + Loopback0: + ipv6: fc00:c:c:128::1/128 + Ethernet1: + ipv6: fc00:a::49e/126 + bp_interface: + ipv6: fc00:b::128/64 + + ARISTA295T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.41 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:129::1/128 + Ethernet1: + ipv6: fc00:a::4a2/126 + bp_interface: + ipv6: fc00:b::129/64 + + ARISTA296T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.42 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:12a::1/128 + Ethernet1: + ipv6: fc00:a::4a6/126 + bp_interface: + ipv6: fc00:b::12a/64 + + ARISTA297T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.43 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:12b::1/128 + Ethernet1: + ipv6: fc00:a::4aa/126 + bp_interface: + ipv6: fc00:b::12b/64 + + ARISTA298T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.44 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4ad + interfaces: + Loopback0: + ipv6: fc00:c:c:12c::1/128 + Ethernet1: + ipv6: fc00:a::4ae/126 + bp_interface: + ipv6: fc00:b::12c/64 + + ARISTA299T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.45 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:12d::1/128 + Ethernet1: + ipv6: fc00:a::4b2/126 + bp_interface: + ipv6: fc00:b::12d/64 + + ARISTA300T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.46 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:12e::1/128 + Ethernet1: + ipv6: fc00:a::4b6/126 + bp_interface: + ipv6: fc00:b::12e/64 + + ARISTA301T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.47 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:12f::1/128 + Ethernet1: + ipv6: fc00:a::4ba/126 + bp_interface: + ipv6: fc00:b::12f/64 + + ARISTA302T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.48 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4bd + interfaces: + Loopback0: + ipv6: fc00:c:c:130::1/128 + Ethernet1: + ipv6: fc00:a::4be/126 + bp_interface: + ipv6: fc00:b::130/64 + + ARISTA303T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.49 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:131::1/128 + Ethernet1: + ipv6: fc00:a::4c2/126 + bp_interface: + ipv6: fc00:b::131/64 + + ARISTA304T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.50 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:132::1/128 + Ethernet1: + ipv6: fc00:a::4c6/126 + bp_interface: + ipv6: fc00:b::132/64 + + ARISTA305T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.51 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:133::1/128 + Ethernet1: + ipv6: fc00:a::4ca/126 + bp_interface: + ipv6: fc00:b::133/64 + + ARISTA306T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.52 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4cd + interfaces: + Loopback0: + ipv6: fc00:c:c:134::1/128 + Ethernet1: + ipv6: fc00:a::4ce/126 + bp_interface: + ipv6: fc00:b::134/64 + + ARISTA307T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.53 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:135::1/128 + Ethernet1: + ipv6: fc00:a::4d2/126 + bp_interface: + ipv6: fc00:b::135/64 + + ARISTA308T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.54 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:136::1/128 + Ethernet1: + ipv6: fc00:a::4d6/126 + bp_interface: + ipv6: fc00:b::136/64 + + ARISTA309T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.55 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:137::1/128 + Ethernet1: + ipv6: fc00:a::4da/126 + bp_interface: + ipv6: fc00:b::137/64 + + ARISTA310T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.56 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4dd + interfaces: + Loopback0: + ipv6: fc00:c:c:138::1/128 + Ethernet1: + ipv6: fc00:a::4de/126 + bp_interface: + ipv6: fc00:b::138/64 + + ARISTA311T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.57 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:139::1/128 + Ethernet1: + ipv6: fc00:a::4e2/126 + bp_interface: + ipv6: fc00:b::139/64 + + ARISTA312T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.58 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:13a::1/128 + Ethernet1: + ipv6: fc00:a::4e6/126 + bp_interface: + ipv6: fc00:b::13a/64 + + ARISTA313T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.59 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:13b::1/128 + Ethernet1: + ipv6: fc00:a::4ea/126 + bp_interface: + ipv6: fc00:b::13b/64 + + ARISTA314T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.60 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4ed + interfaces: + Loopback0: + ipv6: fc00:c:c:13c::1/128 + Ethernet1: + ipv6: fc00:a::4ee/126 + bp_interface: + ipv6: fc00:b::13c/64 + + ARISTA315T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.61 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:13d::1/128 + Ethernet1: + ipv6: fc00:a::4f2/126 + bp_interface: + ipv6: fc00:b::13d/64 + + ARISTA316T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.62 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:13e::1/128 + Ethernet1: + ipv6: fc00:a::4f6/126 + bp_interface: + ipv6: fc00:b::13e/64 + + ARISTA317T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.63 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:13f::1/128 + Ethernet1: + ipv6: fc00:a::4fa/126 + bp_interface: + ipv6: fc00:b::13f/64 + + ARISTA318T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.64 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::4fd + interfaces: + Loopback0: + ipv6: fc00:c:c:140::1/128 + Ethernet1: + ipv6: fc00:a::4fe/126 + bp_interface: + ipv6: fc00:b::140/64 + + ARISTA319T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.65 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::501 + interfaces: + Loopback0: + ipv6: fc00:c:c:141::1/128 + Ethernet1: + ipv6: fc00:a::502/126 + bp_interface: + ipv6: fc00:b::141/64 + + ARISTA320T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.66 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::505 + interfaces: + Loopback0: + ipv6: fc00:c:c:142::1/128 + Ethernet1: + ipv6: fc00:a::506/126 + bp_interface: + ipv6: fc00:b::142/64 + + ARISTA321T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.67 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::509 + interfaces: + Loopback0: + ipv6: fc00:c:c:143::1/128 + Ethernet1: + ipv6: fc00:a::50a/126 + bp_interface: + ipv6: fc00:b::143/64 + + ARISTA322T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.68 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::50d + interfaces: + Loopback0: + ipv6: fc00:c:c:144::1/128 + Ethernet1: + ipv6: fc00:a::50e/126 + bp_interface: + ipv6: fc00:b::144/64 + + ARISTA323T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.69 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::511 + interfaces: + Loopback0: + ipv6: fc00:c:c:145::1/128 + Ethernet1: + ipv6: fc00:a::512/126 + bp_interface: + ipv6: fc00:b::145/64 + + ARISTA324T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.70 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::515 + interfaces: + Loopback0: + ipv6: fc00:c:c:146::1/128 + Ethernet1: + ipv6: fc00:a::516/126 + bp_interface: + ipv6: fc00:b::146/64 + + ARISTA325T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.71 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::519 + interfaces: + Loopback0: + ipv6: fc00:c:c:147::1/128 + Ethernet1: + ipv6: fc00:a::51a/126 + bp_interface: + ipv6: fc00:b::147/64 + + ARISTA326T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.72 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::51d + interfaces: + Loopback0: + ipv6: fc00:c:c:148::1/128 + Ethernet1: + ipv6: fc00:a::51e/126 + bp_interface: + ipv6: fc00:b::148/64 + + ARISTA327T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.73 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::521 + interfaces: + Loopback0: + ipv6: fc00:c:c:149::1/128 + Ethernet1: + ipv6: fc00:a::522/126 + bp_interface: + ipv6: fc00:b::149/64 + + ARISTA328T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.74 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::525 + interfaces: + Loopback0: + ipv6: fc00:c:c:14a::1/128 + Ethernet1: + ipv6: fc00:a::526/126 + bp_interface: + ipv6: fc00:b::14a/64 + + ARISTA329T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.75 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::529 + interfaces: + Loopback0: + ipv6: fc00:c:c:14b::1/128 + Ethernet1: + ipv6: fc00:a::52a/126 + bp_interface: + ipv6: fc00:b::14b/64 + + ARISTA330T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.76 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::52d + interfaces: + Loopback0: + ipv6: fc00:c:c:14c::1/128 + Ethernet1: + ipv6: fc00:a::52e/126 + bp_interface: + ipv6: fc00:b::14c/64 + + ARISTA331T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.77 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::531 + interfaces: + Loopback0: + ipv6: fc00:c:c:14d::1/128 + Ethernet1: + ipv6: fc00:a::532/126 + bp_interface: + ipv6: fc00:b::14d/64 + + ARISTA332T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.78 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::535 + interfaces: + Loopback0: + ipv6: fc00:c:c:14e::1/128 + Ethernet1: + ipv6: fc00:a::536/126 + bp_interface: + ipv6: fc00:b::14e/64 + + ARISTA333T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.79 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::539 + interfaces: + Loopback0: + ipv6: fc00:c:c:14f::1/128 + Ethernet1: + ipv6: fc00:a::53a/126 + bp_interface: + ipv6: fc00:b::14f/64 + + ARISTA334T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.80 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::53d + interfaces: + Loopback0: + ipv6: fc00:c:c:150::1/128 + Ethernet1: + ipv6: fc00:a::53e/126 + bp_interface: + ipv6: fc00:b::150/64 + + ARISTA335T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.81 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::541 + interfaces: + Loopback0: + ipv6: fc00:c:c:151::1/128 + Ethernet1: + ipv6: fc00:a::542/126 + bp_interface: + ipv6: fc00:b::151/64 + + ARISTA336T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.82 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::545 + interfaces: + Loopback0: + ipv6: fc00:c:c:152::1/128 + Ethernet1: + ipv6: fc00:a::546/126 + bp_interface: + ipv6: fc00:b::152/64 + + ARISTA337T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.83 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::549 + interfaces: + Loopback0: + ipv6: fc00:c:c:153::1/128 + Ethernet1: + ipv6: fc00:a::54a/126 + bp_interface: + ipv6: fc00:b::153/64 + + ARISTA338T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.84 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::54d + interfaces: + Loopback0: + ipv6: fc00:c:c:154::1/128 + Ethernet1: + ipv6: fc00:a::54e/126 + bp_interface: + ipv6: fc00:b::154/64 + + ARISTA339T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.85 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::551 + interfaces: + Loopback0: + ipv6: fc00:c:c:155::1/128 + Ethernet1: + ipv6: fc00:a::552/126 + bp_interface: + ipv6: fc00:b::155/64 + + ARISTA340T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.86 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::555 + interfaces: + Loopback0: + ipv6: fc00:c:c:156::1/128 + Ethernet1: + ipv6: fc00:a::556/126 + bp_interface: + ipv6: fc00:b::156/64 + + ARISTA341T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.87 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::559 + interfaces: + Loopback0: + ipv6: fc00:c:c:157::1/128 + Ethernet1: + ipv6: fc00:a::55a/126 + bp_interface: + ipv6: fc00:b::157/64 + + ARISTA342T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.88 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::55d + interfaces: + Loopback0: + ipv6: fc00:c:c:158::1/128 + Ethernet1: + ipv6: fc00:a::55e/126 + bp_interface: + ipv6: fc00:b::158/64 + + ARISTA343T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.89 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::561 + interfaces: + Loopback0: + ipv6: fc00:c:c:159::1/128 + Ethernet1: + ipv6: fc00:a::562/126 + bp_interface: + ipv6: fc00:b::159/64 + + ARISTA344T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.90 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::565 + interfaces: + Loopback0: + ipv6: fc00:c:c:15a::1/128 + Ethernet1: + ipv6: fc00:a::566/126 + bp_interface: + ipv6: fc00:b::15a/64 + + ARISTA345T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.91 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::569 + interfaces: + Loopback0: + ipv6: fc00:c:c:15b::1/128 + Ethernet1: + ipv6: fc00:a::56a/126 + bp_interface: + ipv6: fc00:b::15b/64 + + ARISTA346T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.92 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::56d + interfaces: + Loopback0: + ipv6: fc00:c:c:15c::1/128 + Ethernet1: + ipv6: fc00:a::56e/126 + bp_interface: + ipv6: fc00:b::15c/64 + + ARISTA347T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.93 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::571 + interfaces: + Loopback0: + ipv6: fc00:c:c:15d::1/128 + Ethernet1: + ipv6: fc00:a::572/126 + bp_interface: + ipv6: fc00:b::15d/64 + + ARISTA348T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.94 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::575 + interfaces: + Loopback0: + ipv6: fc00:c:c:15e::1/128 + Ethernet1: + ipv6: fc00:a::576/126 + bp_interface: + ipv6: fc00:b::15e/64 + + ARISTA349T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.95 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::579 + interfaces: + Loopback0: + ipv6: fc00:c:c:15f::1/128 + Ethernet1: + ipv6: fc00:a::57a/126 + bp_interface: + ipv6: fc00:b::15f/64 + + ARISTA350T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.96 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::57d + interfaces: + Loopback0: + ipv6: fc00:c:c:160::1/128 + Ethernet1: + ipv6: fc00:a::57e/126 + bp_interface: + ipv6: fc00:b::160/64 + + ARISTA351T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.97 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::581 + interfaces: + Loopback0: + ipv6: fc00:c:c:161::1/128 + Ethernet1: + ipv6: fc00:a::582/126 + bp_interface: + ipv6: fc00:b::161/64 + + ARISTA352T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.98 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::585 + interfaces: + Loopback0: + ipv6: fc00:c:c:162::1/128 + Ethernet1: + ipv6: fc00:a::586/126 + bp_interface: + ipv6: fc00:b::162/64 + + ARISTA353T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.99 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::589 + interfaces: + Loopback0: + ipv6: fc00:c:c:163::1/128 + Ethernet1: + ipv6: fc00:a::58a/126 + bp_interface: + ipv6: fc00:b::163/64 + + ARISTA354T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.100 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::58d + interfaces: + Loopback0: + ipv6: fc00:c:c:164::1/128 + Ethernet1: + ipv6: fc00:a::58e/126 + bp_interface: + ipv6: fc00:b::164/64 + + ARISTA355T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.101 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::591 + interfaces: + Loopback0: + ipv6: fc00:c:c:165::1/128 + Ethernet1: + ipv6: fc00:a::592/126 + bp_interface: + ipv6: fc00:b::165/64 + + ARISTA356T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.102 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::595 + interfaces: + Loopback0: + ipv6: fc00:c:c:166::1/128 + Ethernet1: + ipv6: fc00:a::596/126 + bp_interface: + ipv6: fc00:b::166/64 + + ARISTA357T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.103 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::599 + interfaces: + Loopback0: + ipv6: fc00:c:c:167::1/128 + Ethernet1: + ipv6: fc00:a::59a/126 + bp_interface: + ipv6: fc00:b::167/64 + + ARISTA358T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.104 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::59d + interfaces: + Loopback0: + ipv6: fc00:c:c:168::1/128 + Ethernet1: + ipv6: fc00:a::59e/126 + bp_interface: + ipv6: fc00:b::168/64 + + ARISTA359T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.105 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:169::1/128 + Ethernet1: + ipv6: fc00:a::5a2/126 + bp_interface: + ipv6: fc00:b::169/64 + + ARISTA360T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.106 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:16a::1/128 + Ethernet1: + ipv6: fc00:a::5a6/126 + bp_interface: + ipv6: fc00:b::16a/64 + + ARISTA361T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.107 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:16b::1/128 + Ethernet1: + ipv6: fc00:a::5aa/126 + bp_interface: + ipv6: fc00:b::16b/64 + + ARISTA362T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.108 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5ad + interfaces: + Loopback0: + ipv6: fc00:c:c:16c::1/128 + Ethernet1: + ipv6: fc00:a::5ae/126 + bp_interface: + ipv6: fc00:b::16c/64 + + ARISTA363T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.109 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:16d::1/128 + Ethernet1: + ipv6: fc00:a::5b2/126 + bp_interface: + ipv6: fc00:b::16d/64 + + ARISTA364T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.110 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:16e::1/128 + Ethernet1: + ipv6: fc00:a::5b6/126 + bp_interface: + ipv6: fc00:b::16e/64 + + ARISTA365T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.111 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:16f::1/128 + Ethernet1: + ipv6: fc00:a::5ba/126 + bp_interface: + ipv6: fc00:b::16f/64 + + ARISTA366T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.112 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5bd + interfaces: + Loopback0: + ipv6: fc00:c:c:170::1/128 + Ethernet1: + ipv6: fc00:a::5be/126 + bp_interface: + ipv6: fc00:b::170/64 + + ARISTA367T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.113 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:171::1/128 + Ethernet1: + ipv6: fc00:a::5c2/126 + bp_interface: + ipv6: fc00:b::171/64 + + ARISTA368T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.114 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:172::1/128 + Ethernet1: + ipv6: fc00:a::5c6/126 + bp_interface: + ipv6: fc00:b::172/64 + + ARISTA369T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.115 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:173::1/128 + Ethernet1: + ipv6: fc00:a::5ca/126 + bp_interface: + ipv6: fc00:b::173/64 + + ARISTA370T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.116 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5cd + interfaces: + Loopback0: + ipv6: fc00:c:c:174::1/128 + Ethernet1: + ipv6: fc00:a::5ce/126 + bp_interface: + ipv6: fc00:b::174/64 + + ARISTA371T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.117 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:175::1/128 + Ethernet1: + ipv6: fc00:a::5d2/126 + bp_interface: + ipv6: fc00:b::175/64 + + ARISTA372T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.118 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:176::1/128 + Ethernet1: + ipv6: fc00:a::5d6/126 + bp_interface: + ipv6: fc00:b::176/64 + + ARISTA373T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.119 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:177::1/128 + Ethernet1: + ipv6: fc00:a::5da/126 + bp_interface: + ipv6: fc00:b::177/64 + + ARISTA374T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.120 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5dd + interfaces: + Loopback0: + ipv6: fc00:c:c:178::1/128 + Ethernet1: + ipv6: fc00:a::5de/126 + bp_interface: + ipv6: fc00:b::178/64 + + ARISTA375T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.121 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:179::1/128 + Ethernet1: + ipv6: fc00:a::5e2/126 + bp_interface: + ipv6: fc00:b::179/64 + + ARISTA376T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.122 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:17a::1/128 + Ethernet1: + ipv6: fc00:a::5e6/126 + bp_interface: + ipv6: fc00:b::17a/64 + + ARISTA377T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.123 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:17b::1/128 + Ethernet1: + ipv6: fc00:a::5ea/126 + bp_interface: + ipv6: fc00:b::17b/64 + + ARISTA378T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.124 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5ed + interfaces: + Loopback0: + ipv6: fc00:c:c:17c::1/128 + Ethernet1: + ipv6: fc00:a::5ee/126 + bp_interface: + ipv6: fc00:b::17c/64 + + ARISTA379T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.125 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:17d::1/128 + Ethernet1: + ipv6: fc00:a::5f2/126 + bp_interface: + ipv6: fc00:b::17d/64 + + ARISTA380T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.126 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:17e::1/128 + Ethernet1: + ipv6: fc00:a::5f6/126 + bp_interface: + ipv6: fc00:b::17e/64 + + ARISTA381T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.127 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:17f::1/128 + Ethernet1: + ipv6: fc00:a::5fa/126 + bp_interface: + ipv6: fc00:b::17f/64 + + ARISTA382T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.128 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::5fd + interfaces: + Loopback0: + ipv6: fc00:c:c:180::1/128 + Ethernet1: + ipv6: fc00:a::5fe/126 + bp_interface: + ipv6: fc00:b::180/64 + + ARISTA383T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.129 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::601 + interfaces: + Loopback0: + ipv6: fc00:c:c:181::1/128 + Ethernet1: + ipv6: fc00:a::602/126 + bp_interface: + ipv6: fc00:b::181/64 + + ARISTA384T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.130 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::605 + interfaces: + Loopback0: + ipv6: fc00:c:c:182::1/128 + Ethernet1: + ipv6: fc00:a::606/126 + bp_interface: + ipv6: fc00:b::182/64 + + ARISTA385T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.131 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::609 + interfaces: + Loopback0: + ipv6: fc00:c:c:183::1/128 + Ethernet1: + ipv6: fc00:a::60a/126 + bp_interface: + ipv6: fc00:b::183/64 + + ARISTA386T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.132 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::60d + interfaces: + Loopback0: + ipv6: fc00:c:c:184::1/128 + Ethernet1: + ipv6: fc00:a::60e/126 + bp_interface: + ipv6: fc00:b::184/64 + + ARISTA387T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.133 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::611 + interfaces: + Loopback0: + ipv6: fc00:c:c:185::1/128 + Ethernet1: + ipv6: fc00:a::612/126 + bp_interface: + ipv6: fc00:b::185/64 + + ARISTA388T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.134 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::615 + interfaces: + Loopback0: + ipv6: fc00:c:c:186::1/128 + Ethernet1: + ipv6: fc00:a::616/126 + bp_interface: + ipv6: fc00:b::186/64 + + ARISTA389T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.135 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::619 + interfaces: + Loopback0: + ipv6: fc00:c:c:187::1/128 + Ethernet1: + ipv6: fc00:a::61a/126 + bp_interface: + ipv6: fc00:b::187/64 + + ARISTA390T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.136 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::61d + interfaces: + Loopback0: + ipv6: fc00:c:c:188::1/128 + Ethernet1: + ipv6: fc00:a::61e/126 + bp_interface: + ipv6: fc00:b::188/64 + + ARISTA391T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.137 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::621 + interfaces: + Loopback0: + ipv6: fc00:c:c:189::1/128 + Ethernet1: + ipv6: fc00:a::622/126 + bp_interface: + ipv6: fc00:b::189/64 + + ARISTA392T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.138 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::625 + interfaces: + Loopback0: + ipv6: fc00:c:c:18a::1/128 + Ethernet1: + ipv6: fc00:a::626/126 + bp_interface: + ipv6: fc00:b::18a/64 + + ARISTA393T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.139 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::629 + interfaces: + Loopback0: + ipv6: fc00:c:c:18b::1/128 + Ethernet1: + ipv6: fc00:a::62a/126 + bp_interface: + ipv6: fc00:b::18b/64 + + ARISTA394T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.140 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::62d + interfaces: + Loopback0: + ipv6: fc00:c:c:18c::1/128 + Ethernet1: + ipv6: fc00:a::62e/126 + bp_interface: + ipv6: fc00:b::18c/64 + + ARISTA395T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.141 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::631 + interfaces: + Loopback0: + ipv6: fc00:c:c:18d::1/128 + Ethernet1: + ipv6: fc00:a::632/126 + bp_interface: + ipv6: fc00:b::18d/64 + + ARISTA396T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.142 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::635 + interfaces: + Loopback0: + ipv6: fc00:c:c:18e::1/128 + Ethernet1: + ipv6: fc00:a::636/126 + bp_interface: + ipv6: fc00:b::18e/64 + + ARISTA397T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.143 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::639 + interfaces: + Loopback0: + ipv6: fc00:c:c:18f::1/128 + Ethernet1: + ipv6: fc00:a::63a/126 + bp_interface: + ipv6: fc00:b::18f/64 + + ARISTA398T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.144 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::63d + interfaces: + Loopback0: + ipv6: fc00:c:c:190::1/128 + Ethernet1: + ipv6: fc00:a::63e/126 + bp_interface: + ipv6: fc00:b::190/64 + + ARISTA399T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.145 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::641 + interfaces: + Loopback0: + ipv6: fc00:c:c:191::1/128 + Ethernet1: + ipv6: fc00:a::642/126 + bp_interface: + ipv6: fc00:b::191/64 + + ARISTA400T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.146 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::645 + interfaces: + Loopback0: + ipv6: fc00:c:c:192::1/128 + Ethernet1: + ipv6: fc00:a::646/126 + bp_interface: + ipv6: fc00:b::192/64 + + ARISTA401T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.147 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::649 + interfaces: + Loopback0: + ipv6: fc00:c:c:193::1/128 + Ethernet1: + ipv6: fc00:a::64a/126 + bp_interface: + ipv6: fc00:b::193/64 + + ARISTA402T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.148 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::64d + interfaces: + Loopback0: + ipv6: fc00:c:c:194::1/128 + Ethernet1: + ipv6: fc00:a::64e/126 + bp_interface: + ipv6: fc00:b::194/64 + + ARISTA403T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.149 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::651 + interfaces: + Loopback0: + ipv6: fc00:c:c:195::1/128 + Ethernet1: + ipv6: fc00:a::652/126 + bp_interface: + ipv6: fc00:b::195/64 + + ARISTA404T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.150 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::655 + interfaces: + Loopback0: + ipv6: fc00:c:c:196::1/128 + Ethernet1: + ipv6: fc00:a::656/126 + bp_interface: + ipv6: fc00:b::196/64 + + ARISTA405T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.151 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::659 + interfaces: + Loopback0: + ipv6: fc00:c:c:197::1/128 + Ethernet1: + ipv6: fc00:a::65a/126 + bp_interface: + ipv6: fc00:b::197/64 + + ARISTA406T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.152 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::65d + interfaces: + Loopback0: + ipv6: fc00:c:c:198::1/128 + Ethernet1: + ipv6: fc00:a::65e/126 + bp_interface: + ipv6: fc00:b::198/64 + + ARISTA407T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.153 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::661 + interfaces: + Loopback0: + ipv6: fc00:c:c:199::1/128 + Ethernet1: + ipv6: fc00:a::662/126 + bp_interface: + ipv6: fc00:b::199/64 + + ARISTA408T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.154 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::665 + interfaces: + Loopback0: + ipv6: fc00:c:c:19a::1/128 + Ethernet1: + ipv6: fc00:a::666/126 + bp_interface: + ipv6: fc00:b::19a/64 + + ARISTA409T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.155 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::669 + interfaces: + Loopback0: + ipv6: fc00:c:c:19b::1/128 + Ethernet1: + ipv6: fc00:a::66a/126 + bp_interface: + ipv6: fc00:b::19b/64 + + ARISTA410T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.156 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::66d + interfaces: + Loopback0: + ipv6: fc00:c:c:19c::1/128 + Ethernet1: + ipv6: fc00:a::66e/126 + bp_interface: + ipv6: fc00:b::19c/64 + + ARISTA411T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.157 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::671 + interfaces: + Loopback0: + ipv6: fc00:c:c:19d::1/128 + Ethernet1: + ipv6: fc00:a::672/126 + bp_interface: + ipv6: fc00:b::19d/64 + + ARISTA412T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.158 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::675 + interfaces: + Loopback0: + ipv6: fc00:c:c:19e::1/128 + Ethernet1: + ipv6: fc00:a::676/126 + bp_interface: + ipv6: fc00:b::19e/64 + + ARISTA413T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.159 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::679 + interfaces: + Loopback0: + ipv6: fc00:c:c:19f::1/128 + Ethernet1: + ipv6: fc00:a::67a/126 + bp_interface: + ipv6: fc00:b::19f/64 + + ARISTA414T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.160 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::67d + interfaces: + Loopback0: + ipv6: fc00:c:c:1a0::1/128 + Ethernet1: + ipv6: fc00:a::67e/126 + bp_interface: + ipv6: fc00:b::1a0/64 + + ARISTA415T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.161 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::681 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a1::1/128 + Ethernet1: + ipv6: fc00:a::682/126 + bp_interface: + ipv6: fc00:b::1a1/64 + + ARISTA416T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.162 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::685 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a2::1/128 + Ethernet1: + ipv6: fc00:a::686/126 + bp_interface: + ipv6: fc00:b::1a2/64 + + ARISTA417T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.163 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::689 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a3::1/128 + Ethernet1: + ipv6: fc00:a::68a/126 + bp_interface: + ipv6: fc00:b::1a3/64 + + ARISTA418T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.164 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::68d + interfaces: + Loopback0: + ipv6: fc00:c:c:1a4::1/128 + Ethernet1: + ipv6: fc00:a::68e/126 + bp_interface: + ipv6: fc00:b::1a4/64 + + ARISTA419T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.165 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::691 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a5::1/128 + Ethernet1: + ipv6: fc00:a::692/126 + bp_interface: + ipv6: fc00:b::1a5/64 + + ARISTA420T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.166 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::695 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a6::1/128 + Ethernet1: + ipv6: fc00:a::696/126 + bp_interface: + ipv6: fc00:b::1a6/64 + + ARISTA421T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.167 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::699 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a7::1/128 + Ethernet1: + ipv6: fc00:a::69a/126 + bp_interface: + ipv6: fc00:b::1a7/64 + + ARISTA422T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.168 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::69d + interfaces: + Loopback0: + ipv6: fc00:c:c:1a8::1/128 + Ethernet1: + ipv6: fc00:a::69e/126 + bp_interface: + ipv6: fc00:b::1a8/64 + + ARISTA423T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.169 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1a9::1/128 + Ethernet1: + ipv6: fc00:a::6a2/126 + bp_interface: + ipv6: fc00:b::1a9/64 + + ARISTA424T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.170 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1aa::1/128 + Ethernet1: + ipv6: fc00:a::6a6/126 + bp_interface: + ipv6: fc00:b::1aa/64 + + ARISTA425T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.171 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ab::1/128 + Ethernet1: + ipv6: fc00:a::6aa/126 + bp_interface: + ipv6: fc00:b::1ab/64 + + ARISTA426T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.172 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6ad + interfaces: + Loopback0: + ipv6: fc00:c:c:1ac::1/128 + Ethernet1: + ipv6: fc00:a::6ae/126 + bp_interface: + ipv6: fc00:b::1ac/64 + + ARISTA427T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.173 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ad::1/128 + Ethernet1: + ipv6: fc00:a::6b2/126 + bp_interface: + ipv6: fc00:b::1ad/64 + + ARISTA428T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.174 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ae::1/128 + Ethernet1: + ipv6: fc00:a::6b6/126 + bp_interface: + ipv6: fc00:b::1ae/64 + + ARISTA429T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.175 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1af::1/128 + Ethernet1: + ipv6: fc00:a::6ba/126 + bp_interface: + ipv6: fc00:b::1af/64 + + ARISTA430T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.176 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6bd + interfaces: + Loopback0: + ipv6: fc00:c:c:1b0::1/128 + Ethernet1: + ipv6: fc00:a::6be/126 + bp_interface: + ipv6: fc00:b::1b0/64 + + ARISTA431T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.177 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b1::1/128 + Ethernet1: + ipv6: fc00:a::6c2/126 + bp_interface: + ipv6: fc00:b::1b1/64 + + ARISTA432T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.178 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b2::1/128 + Ethernet1: + ipv6: fc00:a::6c6/126 + bp_interface: + ipv6: fc00:b::1b2/64 + + ARISTA433T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.179 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b3::1/128 + Ethernet1: + ipv6: fc00:a::6ca/126 + bp_interface: + ipv6: fc00:b::1b3/64 + + ARISTA434T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.180 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6cd + interfaces: + Loopback0: + ipv6: fc00:c:c:1b4::1/128 + Ethernet1: + ipv6: fc00:a::6ce/126 + bp_interface: + ipv6: fc00:b::1b4/64 + + ARISTA435T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.181 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b5::1/128 + Ethernet1: + ipv6: fc00:a::6d2/126 + bp_interface: + ipv6: fc00:b::1b5/64 + + ARISTA436T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.182 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b6::1/128 + Ethernet1: + ipv6: fc00:a::6d6/126 + bp_interface: + ipv6: fc00:b::1b6/64 + + ARISTA437T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.183 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b7::1/128 + Ethernet1: + ipv6: fc00:a::6da/126 + bp_interface: + ipv6: fc00:b::1b7/64 + + ARISTA438T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.184 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6dd + interfaces: + Loopback0: + ipv6: fc00:c:c:1b8::1/128 + Ethernet1: + ipv6: fc00:a::6de/126 + bp_interface: + ipv6: fc00:b::1b8/64 + + ARISTA439T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.185 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1b9::1/128 + Ethernet1: + ipv6: fc00:a::6e2/126 + bp_interface: + ipv6: fc00:b::1b9/64 + + ARISTA440T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.186 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ba::1/128 + Ethernet1: + ipv6: fc00:a::6e6/126 + bp_interface: + ipv6: fc00:b::1ba/64 + + ARISTA441T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.187 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1bb::1/128 + Ethernet1: + ipv6: fc00:a::6ea/126 + bp_interface: + ipv6: fc00:b::1bb/64 + + ARISTA442T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.188 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6ed + interfaces: + Loopback0: + ipv6: fc00:c:c:1bc::1/128 + Ethernet1: + ipv6: fc00:a::6ee/126 + bp_interface: + ipv6: fc00:b::1bc/64 + + ARISTA443T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.189 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1bd::1/128 + Ethernet1: + ipv6: fc00:a::6f2/126 + bp_interface: + ipv6: fc00:b::1bd/64 + + ARISTA444T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.190 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1be::1/128 + Ethernet1: + ipv6: fc00:a::6f6/126 + bp_interface: + ipv6: fc00:b::1be/64 + + ARISTA445T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.191 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1bf::1/128 + Ethernet1: + ipv6: fc00:a::6fa/126 + bp_interface: + ipv6: fc00:b::1bf/64 + + ARISTA446T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.192 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::6fd + interfaces: + Loopback0: + ipv6: fc00:c:c:1c0::1/128 + Ethernet1: + ipv6: fc00:a::6fe/126 + bp_interface: + ipv6: fc00:b::1c0/64 + + ARISTA447T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.193 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::701 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c1::1/128 + Ethernet1: + ipv6: fc00:a::702/126 + bp_interface: + ipv6: fc00:b::1c1/64 + + ARISTA448T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.194 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::705 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c2::1/128 + Ethernet1: + ipv6: fc00:a::706/126 + bp_interface: + ipv6: fc00:b::1c2/64 + + ARISTA449T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.195 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::709 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c3::1/128 + Ethernet1: + ipv6: fc00:a::70a/126 + bp_interface: + ipv6: fc00:b::1c3/64 + + ARISTA450T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.196 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::70d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c4::1/128 + Ethernet1: + ipv6: fc00:a::70e/126 + bp_interface: + ipv6: fc00:b::1c4/64 + + ARISTA451T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.197 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::711 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c5::1/128 + Ethernet1: + ipv6: fc00:a::712/126 + bp_interface: + ipv6: fc00:b::1c5/64 + + ARISTA452T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.198 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::715 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c6::1/128 + Ethernet1: + ipv6: fc00:a::716/126 + bp_interface: + ipv6: fc00:b::1c6/64 + + ARISTA453T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.199 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::719 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c7::1/128 + Ethernet1: + ipv6: fc00:a::71a/126 + bp_interface: + ipv6: fc00:b::1c7/64 + + ARISTA454T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.200 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::71d + interfaces: + Loopback0: + ipv6: fc00:c:c:1c8::1/128 + Ethernet1: + ipv6: fc00:a::71e/126 + bp_interface: + ipv6: fc00:b::1c8/64 + + ARISTA455T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.201 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::721 + interfaces: + Loopback0: + ipv6: fc00:c:c:1c9::1/128 + Ethernet1: + ipv6: fc00:a::722/126 + bp_interface: + ipv6: fc00:b::1c9/64 + + ARISTA456T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.202 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::725 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ca::1/128 + Ethernet1: + ipv6: fc00:a::726/126 + bp_interface: + ipv6: fc00:b::1ca/64 + + ARISTA457T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.203 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::729 + interfaces: + Loopback0: + ipv6: fc00:c:c:1cb::1/128 + Ethernet1: + ipv6: fc00:a::72a/126 + bp_interface: + ipv6: fc00:b::1cb/64 + + ARISTA458T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.204 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::72d + interfaces: + Loopback0: + ipv6: fc00:c:c:1cc::1/128 + Ethernet1: + ipv6: fc00:a::72e/126 + bp_interface: + ipv6: fc00:b::1cc/64 + + ARISTA459T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.205 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::731 + interfaces: + Loopback0: + ipv6: fc00:c:c:1cd::1/128 + Ethernet1: + ipv6: fc00:a::732/126 + bp_interface: + ipv6: fc00:b::1cd/64 + + ARISTA460T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.206 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::735 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ce::1/128 + Ethernet1: + ipv6: fc00:a::736/126 + bp_interface: + ipv6: fc00:b::1ce/64 + + ARISTA461T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.207 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::739 + interfaces: + Loopback0: + ipv6: fc00:c:c:1cf::1/128 + Ethernet1: + ipv6: fc00:a::73a/126 + bp_interface: + ipv6: fc00:b::1cf/64 + + ARISTA462T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.208 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::73d + interfaces: + Loopback0: + ipv6: fc00:c:c:1d0::1/128 + Ethernet1: + ipv6: fc00:a::73e/126 + bp_interface: + ipv6: fc00:b::1d0/64 + + ARISTA463T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.209 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::741 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d1::1/128 + Ethernet1: + ipv6: fc00:a::742/126 + bp_interface: + ipv6: fc00:b::1d1/64 + + ARISTA464T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.210 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::745 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d2::1/128 + Ethernet1: + ipv6: fc00:a::746/126 + bp_interface: + ipv6: fc00:b::1d2/64 + + ARISTA465T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.211 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::749 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d3::1/128 + Ethernet1: + ipv6: fc00:a::74a/126 + bp_interface: + ipv6: fc00:b::1d3/64 + + ARISTA466T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.212 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::74d + interfaces: + Loopback0: + ipv6: fc00:c:c:1d4::1/128 + Ethernet1: + ipv6: fc00:a::74e/126 + bp_interface: + ipv6: fc00:b::1d4/64 + + ARISTA467T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.213 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::751 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d5::1/128 + Ethernet1: + ipv6: fc00:a::752/126 + bp_interface: + ipv6: fc00:b::1d5/64 + + ARISTA468T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.214 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::755 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d6::1/128 + Ethernet1: + ipv6: fc00:a::756/126 + bp_interface: + ipv6: fc00:b::1d6/64 + + ARISTA469T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.215 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::759 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d7::1/128 + Ethernet1: + ipv6: fc00:a::75a/126 + bp_interface: + ipv6: fc00:b::1d7/64 + + ARISTA470T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.216 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::75d + interfaces: + Loopback0: + ipv6: fc00:c:c:1d8::1/128 + Ethernet1: + ipv6: fc00:a::75e/126 + bp_interface: + ipv6: fc00:b::1d8/64 + + ARISTA471T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.217 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::761 + interfaces: + Loopback0: + ipv6: fc00:c:c:1d9::1/128 + Ethernet1: + ipv6: fc00:a::762/126 + bp_interface: + ipv6: fc00:b::1d9/64 + + ARISTA472T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.218 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::765 + interfaces: + Loopback0: + ipv6: fc00:c:c:1da::1/128 + Ethernet1: + ipv6: fc00:a::766/126 + bp_interface: + ipv6: fc00:b::1da/64 + + ARISTA473T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.219 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::769 + interfaces: + Loopback0: + ipv6: fc00:c:c:1db::1/128 + Ethernet1: + ipv6: fc00:a::76a/126 + bp_interface: + ipv6: fc00:b::1db/64 + + ARISTA474T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.220 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::76d + interfaces: + Loopback0: + ipv6: fc00:c:c:1dc::1/128 + Ethernet1: + ipv6: fc00:a::76e/126 + bp_interface: + ipv6: fc00:b::1dc/64 + + ARISTA475T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.221 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::771 + interfaces: + Loopback0: + ipv6: fc00:c:c:1dd::1/128 + Ethernet1: + ipv6: fc00:a::772/126 + bp_interface: + ipv6: fc00:b::1dd/64 + + ARISTA476T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.222 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::775 + interfaces: + Loopback0: + ipv6: fc00:c:c:1de::1/128 + Ethernet1: + ipv6: fc00:a::776/126 + bp_interface: + ipv6: fc00:b::1de/64 + + ARISTA477T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.223 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::779 + interfaces: + Loopback0: + ipv6: fc00:c:c:1df::1/128 + Ethernet1: + ipv6: fc00:a::77a/126 + bp_interface: + ipv6: fc00:b::1df/64 + + ARISTA478T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.224 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::77d + interfaces: + Loopback0: + ipv6: fc00:c:c:1e0::1/128 + Ethernet1: + ipv6: fc00:a::77e/126 + bp_interface: + ipv6: fc00:b::1e0/64 + + ARISTA479T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.225 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::781 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e1::1/128 + Ethernet1: + ipv6: fc00:a::782/126 + bp_interface: + ipv6: fc00:b::1e1/64 + + ARISTA480T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.226 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::785 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e2::1/128 + Ethernet1: + ipv6: fc00:a::786/126 + bp_interface: + ipv6: fc00:b::1e2/64 + + ARISTA481T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.227 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::789 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e3::1/128 + Ethernet1: + ipv6: fc00:a::78a/126 + bp_interface: + ipv6: fc00:b::1e3/64 + + ARISTA482T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.228 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::78d + interfaces: + Loopback0: + ipv6: fc00:c:c:1e4::1/128 + Ethernet1: + ipv6: fc00:a::78e/126 + bp_interface: + ipv6: fc00:b::1e4/64 + + ARISTA483T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.229 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::791 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e5::1/128 + Ethernet1: + ipv6: fc00:a::792/126 + bp_interface: + ipv6: fc00:b::1e5/64 + + ARISTA484T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.230 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::795 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e6::1/128 + Ethernet1: + ipv6: fc00:a::796/126 + bp_interface: + ipv6: fc00:b::1e6/64 + + ARISTA485T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.231 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::799 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e7::1/128 + Ethernet1: + ipv6: fc00:a::79a/126 + bp_interface: + ipv6: fc00:b::1e7/64 + + ARISTA486T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.232 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::79d + interfaces: + Loopback0: + ipv6: fc00:c:c:1e8::1/128 + Ethernet1: + ipv6: fc00:a::79e/126 + bp_interface: + ipv6: fc00:b::1e8/64 + + ARISTA487T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.233 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7a1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1e9::1/128 + Ethernet1: + ipv6: fc00:a::7a2/126 + bp_interface: + ipv6: fc00:b::1e9/64 + + ARISTA488T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.234 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7a5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ea::1/128 + Ethernet1: + ipv6: fc00:a::7a6/126 + bp_interface: + ipv6: fc00:b::1ea/64 + + ARISTA489T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.235 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7a9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1eb::1/128 + Ethernet1: + ipv6: fc00:a::7aa/126 + bp_interface: + ipv6: fc00:b::1eb/64 + + ARISTA490T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.236 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7ad + interfaces: + Loopback0: + ipv6: fc00:c:c:1ec::1/128 + Ethernet1: + ipv6: fc00:a::7ae/126 + bp_interface: + ipv6: fc00:b::1ec/64 + + ARISTA491T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.237 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7b1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ed::1/128 + Ethernet1: + ipv6: fc00:a::7b2/126 + bp_interface: + ipv6: fc00:b::1ed/64 + + ARISTA492T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.238 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7b5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ee::1/128 + Ethernet1: + ipv6: fc00:a::7b6/126 + bp_interface: + ipv6: fc00:b::1ee/64 + + ARISTA493T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.239 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7b9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ef::1/128 + Ethernet1: + ipv6: fc00:a::7ba/126 + bp_interface: + ipv6: fc00:b::1ef/64 + + ARISTA494T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.240 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7bd + interfaces: + Loopback0: + ipv6: fc00:c:c:1f0::1/128 + Ethernet1: + ipv6: fc00:a::7be/126 + bp_interface: + ipv6: fc00:b::1f0/64 + + ARISTA495T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.241 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7c1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f1::1/128 + Ethernet1: + ipv6: fc00:a::7c2/126 + bp_interface: + ipv6: fc00:b::1f1/64 + + ARISTA496T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.242 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7c5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f2::1/128 + Ethernet1: + ipv6: fc00:a::7c6/126 + bp_interface: + ipv6: fc00:b::1f2/64 + + ARISTA497T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.243 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7c9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f3::1/128 + Ethernet1: + ipv6: fc00:a::7ca/126 + bp_interface: + ipv6: fc00:b::1f3/64 + + ARISTA498T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.244 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7cd + interfaces: + Loopback0: + ipv6: fc00:c:c:1f4::1/128 + Ethernet1: + ipv6: fc00:a::7ce/126 + bp_interface: + ipv6: fc00:b::1f4/64 + + ARISTA499T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.245 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7d1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f5::1/128 + Ethernet1: + ipv6: fc00:a::7d2/126 + bp_interface: + ipv6: fc00:b::1f5/64 + + ARISTA500T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.246 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7d5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f6::1/128 + Ethernet1: + ipv6: fc00:a::7d6/126 + bp_interface: + ipv6: fc00:b::1f6/64 + + ARISTA501T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.247 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7d9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f7::1/128 + Ethernet1: + ipv6: fc00:a::7da/126 + bp_interface: + ipv6: fc00:b::1f7/64 + + ARISTA502T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.248 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7dd + interfaces: + Loopback0: + ipv6: fc00:c:c:1f8::1/128 + Ethernet1: + ipv6: fc00:a::7de/126 + bp_interface: + ipv6: fc00:b::1f8/64 + + ARISTA503T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.249 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7e1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1f9::1/128 + Ethernet1: + ipv6: fc00:a::7e2/126 + bp_interface: + ipv6: fc00:b::1f9/64 + + ARISTA504T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.250 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7e5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fa::1/128 + Ethernet1: + ipv6: fc00:a::7e6/126 + bp_interface: + ipv6: fc00:b::1fa/64 + + ARISTA505T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.251 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7e9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fb::1/128 + Ethernet1: + ipv6: fc00:a::7ea/126 + bp_interface: + ipv6: fc00:b::1fb/64 + + ARISTA506T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.252 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7ed + interfaces: + Loopback0: + ipv6: fc00:c:c:1fc::1/128 + Ethernet1: + ipv6: fc00:a::7ee/126 + bp_interface: + ipv6: fc00:b::1fc/64 + + ARISTA507T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.253 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7f1 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fd::1/128 + Ethernet1: + ipv6: fc00:a::7f2/126 + bp_interface: + ipv6: fc00:b::1fd/64 + + ARISTA508T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.254 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7f5 + interfaces: + Loopback0: + ipv6: fc00:c:c:1fe::1/128 + Ethernet1: + ipv6: fc00:a::7f6/126 + bp_interface: + ipv6: fc00:b::1fe/64 + + ARISTA509T0: + properties: + - common + - tor + bgp: + router-id: 0.12.1.255 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7f9 + interfaces: + Loopback0: + ipv6: fc00:c:c:1ff::1/128 + Ethernet1: + ipv6: fc00:a::7fa/126 + bp_interface: + ipv6: fc00:b::1ff/64 + + ARISTA510T0: + properties: + - common + - tor + bgp: + router-id: 0.12.2.0 + asn: 4200000000 + peers: + 4200100000: + - fc00:a::7fd + interfaces: + Loopback0: + ipv6: fc00:c:c:200::1/128 + Ethernet1: + ipv6: fc00:a::7fe/126 + bp_interface: + ipv6: fc00:b::200/64 diff --git a/ansible/vars/topo_t1-smartswitch.yml b/ansible/vars/topo_t1-smartswitch.yml new file mode 100644 index 00000000000..5e98c0fff4a --- /dev/null +++ b/ansible/vars/topo_t1-smartswitch.yml @@ -0,0 +1,153 @@ +topology: + VMs: + ARISTA01T2: + vlans: + - 0 + vm_offset: 0 + ARISTA02T2: + vlans: + - 1 + vm_offset: 1 + ARISTA01T0: + vlans: + - 2 + vm_offset: 2 + ARISTA02T0: + vlans: + - 3 + vm_offset: 3 + DPUs: + SONIC01DPU: + vlans: + - 4 + - 5 + vm_offset: 4 + +configuration_properties: + common: + dut_asn: 65100 + dut_type: LeafRouter + nhipv4: 10.10.246.254 + nhipv6: FC0A::FF + podset_number: 200 + tor_number: 2 + tor_subnet_number: 2 + max_tor_subnet_number: 2 + 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: + 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 + + 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 + + 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 + + SONIC01DPU: + properties: + - common + - SonicHost + bgp: + asn: 64003 + peers: + 65100: + - 10.0.0.36 + - FC00::49 + - 10.0.0.38 + - FC00::4D + interfaces: + Loopback0: + ipv4: 100.1.0.19/32 + ipv6: 2064:100::13/128 + Ethernet0: + ipv4: 10.0.0.37/31 + ipv6: fc00::4a/126 + Ethernet4: + ipv4: 10.0.0.39/31 + ipv6: fc00::4e/126 + bp_interface: + ipv4: 10.10.246.19/24 + ipv6: fc0a::26/64 diff --git a/ansible/veos b/ansible/veos index 6d545542b13..634c7eaa421 100644 --- a/ansible/veos +++ b/ansible/veos @@ -208,17 +208,141 @@ vms_1: ansible_host: 10.250.0.68 VM0167: ansible_host: 10.250.0.69 - -vms_2: - hosts: + VM0168: + ansible_host: 10.250.0.70 + VM0169: + ansible_host: 10.250.0.71 + VM0170: + ansible_host: 10.250.0.72 + VM0171: + ansible_host: 10.250.0.73 + VM0172: + ansible_host: 10.250.0.74 + VM0173: + ansible_host: 10.250.0.75 + VM0174: + ansible_host: 10.250.0.76 + VM0175: + ansible_host: 10.250.0.77 + VM0176: + ansible_host: 10.250.0.78 + VM0177: + ansible_host: 10.250.0.79 + VM0178: + ansible_host: 10.250.0.80 + VM0179: + ansible_host: 10.250.0.81 + VM0180: + ansible_host: 10.250.0.82 + VM0181: + ansible_host: 10.250.0.83 + VM0182: + ansible_host: 10.250.0.84 + VM0183: + ansible_host: 10.250.0.85 + VM0184: + ansible_host: 10.250.0.86 + VM0185: + ansible_host: 10.250.0.87 + VM0186: + ansible_host: 10.250.0.88 + VM0187: + ansible_host: 10.250.0.89 + VM0188: + ansible_host: 10.250.0.90 + VM0189: + ansible_host: 10.250.0.91 + VM0190: + ansible_host: 10.250.0.92 + VM0191: + ansible_host: 10.250.0.93 + VM0192: + ansible_host: 10.250.0.94 + VM0193: + ansible_host: 10.250.0.95 + VM0194: + ansible_host: 10.250.0.96 + VM0195: + ansible_host: 10.250.0.97 + VM0196: + ansible_host: 10.250.0.98 + VM0197: + ansible_host: 10.250.0.99 + VM0198: + ansible_host: 10.250.0.100 + VM0199: + ansible_host: 10.250.0.101 VM0200: - ansible_host: 10.250.0.51 + ansible_host: 10.250.0.102 VM0201: - ansible_host: 10.250.0.52 + ansible_host: 10.250.0.103 VM0202: - ansible_host: 10.250.0.53 + ansible_host: 10.250.0.104 VM0203: - ansible_host: 10.250.0.54 + ansible_host: 10.250.0.105 + VM0204: + ansible_host: 10.250.0.106 + VM0205: + ansible_host: 10.250.0.107 + VM0206: + ansible_host: 10.250.0.108 + VM0207: + ansible_host: 10.250.0.109 + VM0208: + ansible_host: 10.250.0.110 + VM0209: + ansible_host: 10.250.0.111 + VM0210: + ansible_host: 10.250.0.112 + VM0211: + ansible_host: 10.250.0.113 + VM0212: + ansible_host: 10.250.0.114 + VM0213: + ansible_host: 10.250.0.115 + VM0214: + ansible_host: 10.250.0.116 + VM0215: + ansible_host: 10.250.0.117 + VM0216: + ansible_host: 10.250.0.118 + VM0217: + ansible_host: 10.250.0.119 + VM0218: + ansible_host: 10.250.0.120 + VM0219: + ansible_host: 10.250.0.121 + VM0220: + ansible_host: 10.250.0.122 + VM0221: + ansible_host: 10.250.0.123 + VM0222: + ansible_host: 10.250.0.124 + VM0223: + ansible_host: 10.250.0.125 + VM0224: + ansible_host: 10.250.0.126 + VM0225: + ansible_host: 10.250.0.127 + VM0226: + ansible_host: 10.250.0.128 + VM0227: + ansible_host: 10.250.0.129 + VM0228: + ansible_host: 10.250.0.130 + VM0229: + ansible_host: 10.250.0.131 + +vms_2: + hosts: + VM0300: + ansible_host: 10.250.0.252 + VM0301: + ansible_host: 10.250.0.253 + VM0302: + ansible_host: 10.250.0.254 + VM0303: + ansible_host: 10.250.0.255 # The groups below are helper to limit running playbooks to specific server(s) only server_1: diff --git a/ansible/veos_vtb b/ansible/veos_vtb index 1539fea3d18..d19e79a6402 100644 --- a/ansible/veos_vtb +++ b/ansible/veos_vtb @@ -17,6 +17,7 @@ all: - t1-8-lag - t1-64-lag-clet - t1-backend + - t1-smartswitch - t0 - t0-16 - t0-28 diff --git a/ansible/vtestbed.csv b/ansible/vtestbed.csv deleted file mode 100644 index d732fc4701a..00000000000 --- a/ansible/vtestbed.csv +++ /dev/null @@ -1,17 +0,0 @@ -# conf-name,group-name,topo,ptf_image_name,ptf,ptf_ip,ptf_ipv6,server,vm_base,dut,inv_name,auto_recover,comment -vms-kvm-t0,vms6-1,t0,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-01],veos_vtb,False,Tests virtual switch vm -vms-kvm-t0-64,vms6-1,t0-64,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-02],veos_vtb,False,Tests virtual switch vm -vms-kvm-t0-64-32,vms6-1,t0-64-32,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-02],veos_vtb,False,Tests virtual switch vm -vms-kvm-t1-lag,vms6-2,t1-lag,docker-ptf,ptf-02,10.250.0.106/24,fec0::ffff:afa:6/64,server_1,VM0104,[vlab-03],veos_vtb,False,Tests virtual switch vm -vms-kvm-t0-2,vms6-3,t0,docker-ptf,ptf-03,10.250.0.108/24,fec0::ffff:afa:8/64,server_1,VM0104,[vlab-04],veos_vtb,False,Tests virtual switch vm -vms-kvm-dual-t0,vms6-4,dualtor,docker-ptf,ptf-04,10.250.0.109/24,fec0::ffff:afa:9/64,server_1,VM0108,[vlab-05;vlab-06],veos_vtb,False,Dual-TOR testbed -vms-kvm-multi-asic-t1-lag,vms6-4,t1-64-lag,docker-ptf,ptf-05,10.250.0.110/24,fec0::ffff:afa:a/64,server_1,VM0104,[vlab-07],veos_vtb,False,Tests multi-asic virtual switch vm -vms-kvm-four-asic-t1-lag,vms6-4,t1-8-lag,docker-ptf,ptf-05,10.250.0.110/24,fec0::ffff:afa:a/64,server_1,VM0128,[vlab-08],veos_vtb,False,Tests multi-asic virtual switch vm -vms-kvm-t2,vms6-4,t2-vs,docker-ptf,ptf-04,10.250.0.109/24,fec0::ffff:afa:9/64,server_1,VM0100,[vlab-t2-01;vlab-t2-02;vlab-t2-sup],veos_vtb,False,T2 Virtual chassis -vms-kvm-t0-3,vms6-6,t0,docker-ptf,ptf-06,10.250.0.116/24,fec0::ffff:afb:2/64,server_1,VM0132,[vlab-09],veos_vtb,False,Tests virtual switch vm -vms-kvm-t0-4,vms6-7,t0,docker-ptf,ptf-07,10.250.0.118/24,fec0::ffff:afb:4/64,server_1,VM0136,[vlab-10],veos_vtb,False,Tests virtual switch vm -vms-kvm-dual-mixed,vms6-8,dualtor-mixed,docker-ptf,ptf-08,10.250.0.109/24,fec0::ffff:afa:9/64,server_1,VM0140,[vlab-11;vlab-12],veos_vtb,False,Dual-TOR-Mixed testbed -vms-kvm-wan-pub,vms6-1,wan-pub,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-01],veos_vtb,'False',Tests virtual switch vm -vms-kvm-dpu,vms6-1,dpu,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-01],veos_vtb,'False',Tests virtual switch vm as DPU -vms-kvm-ciscovs-7nodes,vms9-1,ciscovs-7nodes,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-c-01],veos_vtb,False,Tests virtual switch vm with 7 nodes -vms-kvm-ciscovs-5nodes,vms9-1,ciscovs-5nodes,docker-ptf,ptf-01,10.250.0.102/24,fec0::ffff:afa:2/64,server_1,VM0100,[vlab-c-01],veos_vtb,False,Tests mimic T0 topo with 5 nodes diff --git a/ansible/vtestbed.yaml b/ansible/vtestbed.yaml index 9af84127ed4..617228dcd93 100644 --- a/ansible/vtestbed.yaml +++ b/ansible/vtestbed.yaml @@ -381,3 +381,18 @@ inv_name: veos_vtb auto_recover: 'False' comment: Tests virtual cisco vs vm with 5 nodes + +- conf-name: vms-kvm-t1-smartswitch + group-name: vms6-1 + topo: t1-smartswitch + ptf_image_name: docker-ptf + ptf: ptf-01 + ptf_ip: 10.250.0.102/24 + ptf_ipv6: fec0::ffff:afa:2/64 + server: server_1 + vm_base: VM0100 + dut: + - vlab-01 + inv_name: veos_vtb + auto_recover: False + comment: Tests virtual switch vm with a DPU diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1256f817404..12998b6d836 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -43,6 +43,21 @@ stages: parameters: MGMT_BRANCH: "" + - job: dependency_check + displayName: "Dependency Check" + timeoutInMinutes: 10 + pool: sonic-common + steps: + - template: .azure-pipelines/dependency-check.yml + + - job: markers_check + displayName: "Markers Check" + timeoutInMinutes: 10 + pool: sonic-common + steps: + - template: .azure-pipelines/markers-check.yml + + - stage: Test dependsOn: Pre_test condition: and(succeeded(), in(dependencies.Pre_test.result, 'Succeeded')) @@ -71,7 +86,7 @@ stages: MIN_WORKER: $(T0_INSTANCE_NUM) MAX_WORKER: $(T0_INSTANCE_NUM) KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: t0_2vlans_elastictest displayName: "kvmtest-t0-2vlans by Elastictest" @@ -87,7 +102,7 @@ stages: MAX_WORKER: $(T0_2VLANS_INSTANCE_NUM) DEPLOY_MG_EXTRA_PARAMS: "-e vlan_config=two_vlan_a" KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: t1_lag_elastictest displayName: "kvmtest-t1-lag by Elastictest" @@ -101,7 +116,7 @@ stages: MIN_WORKER: $(T1_LAG_INSTANCE_NUM) MAX_WORKER: $(T1_LAG_INSTANCE_NUM) KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: dualtor_elastictest displayName: "kvmtest-dualtor-t0 by Elastictest" @@ -116,7 +131,7 @@ stages: MAX_WORKER: $(T0_DUALTOR_INSTANCE_NUM) COMMON_EXTRA_PARAMS: "--disable_loganalyzer " KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: multi_asic_elastictest displayName: "kvmtest-multi-asic-t1-lag by Elastictest" @@ -132,7 +147,7 @@ stages: MAX_WORKER: $(MULTI_ASIC_INSTANCE_NUM) NUM_ASIC: 4 KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: sonic_t0_elastictest displayName: "kvmtest-t0-sonic by Elastictest" @@ -149,7 +164,7 @@ stages: COMMON_EXTRA_PARAMS: "--neighbor_type=sonic " VM_TYPE: vsonic KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: dpu_elastictest displayName: "kvmtest-dpu by Elastictest" @@ -163,7 +178,7 @@ stages: MIN_WORKER: $(T0_SONIC_INSTANCE_NUM) MAX_WORKER: $(T0_SONIC_INSTANCE_NUM) KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" - job: onboarding_elastictest_t0 displayName: "onboarding t0 testcases by Elastictest - optional" @@ -179,7 +194,7 @@ stages: MIN_WORKER: $(T0_ONBOARDING_SONIC_INSTANCE_NUM) MAX_WORKER: $(T0_ONBOARDING_SONIC_INSTANCE_NUM) KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" TEST_SET: onboarding_t0 - job: onboarding_elastictest_t1 @@ -196,7 +211,7 @@ stages: MIN_WORKER: $(T1_LAG_ONBOARDING_INSTANCE_NUM) MAX_WORKER: $(T1_LAG_ONBOARDING_INSTANCE_NUM) KVM_IMAGE_BRANCH: $(BUILD_BRANCH) - MGMT_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: "master" TEST_SET: onboarding_t1 # - job: onboarding_elastictest_dualtor @@ -213,7 +228,7 @@ stages: # MIN_WORKER: $(T0_DUALTOR_INSTANCE_NUM) # MAX_WORKER: $(T0_DUALTOR_INSTANCE_NUM) # KVM_IMAGE_BRANCH: $(BUILD_BRANCH) -# MGMT_BRANCH: $(BUILD_BRANCH) +# MGMT_BRANCH: "master" # TEST_SET: onboarding_dualtor # - job: wan_elastictest diff --git a/docs/testbed/README.testbed.SmartSwitch.VsSetup.md b/docs/testbed/README.testbed.SmartSwitch.VsSetup.md new file mode 100644 index 00000000000..d7f7827ec5f --- /dev/null +++ b/docs/testbed/README.testbed.SmartSwitch.VsSetup.md @@ -0,0 +1,217 @@ +# SmartSwitch Testbed Setup + +1. [1. Prepare the environment](#1-prepare-the-environment) +2. [2. Deploy the testbed](#2-deploy-the-testbed) +3. [3. Configurate DPU](#3-configurate-dpu) + 1. [3.1. Setup mgmt network connection on DPU](#31-setup-mgmt-network-connection-on-dpu) + 2. [3.2. Setup port config on DPU](#32-setup-port-config-on-dpu) + 3. [3.3. Upgrade DPU image to DASH BMv2](#33-upgrade-dpu-image-to-dash-bmv2) + 4. [3.4. Enable DASH BMv2 Pipeline](#34-enable-dash-bmv2-pipeline) + 5. [3.5. Initialize DASH BMv2 Pipeline](#35-initialize-dash-bmv2-pipeline) + +## 1. Prepare the environment + +1. Follow [instructions](https://github.com/sonic-net/sonic-mgmt/blob/master/docs/testbed/README.testbed.VsSetup.md#option-2-ceos-container-based-image-recommended) to download cEOS image, this image will be used for T2 and T0 neighbors. + +1. Follow [instructions](https://github.com/sonic-net/sonic-mgmt/blob/master/docs/testbed/README.testbed.VsSetup.md#download-the-sonic-vs-image) to download sonic-vs images. + + In our case, images are probably built locally, make sure: + + * Your NPU image should be named as "sonic-vs.img" and be put under `~/sonic-vm/images`. + * Your DPU image should be named as "sonic-vs.img" too and be put under `~/veos-vm/images`. + +1. If you haven't, follow instructions below to setup your sonic-mgmt docker. + * [Setup sonic-mgmt docker](https://github.com/sonic-net/sonic-mgmt/blob/master/docs/testbed/README.testbed.VsSetup.md#setup-sonic-mgmt-docker) + * [Setup host public key in sonic-mgmt docker](https://github.com/sonic-net/sonic-mgmt/blob/master/docs/testbed/README.testbed.VsSetup.md#setup-host-public-key-in-sonic-mgmt-docker) + +1. Fetch my branch from [sonic-mgmt PR#14595](https://github.com/sonic-net/sonic-mgmt/pull/14595). + +## 2. Deploy the testbed + +1. Deploy the topology. + + ```bash + cd /data/sonic-mgmt/ansible + ./testbed-cli.sh -t vtestbed.yaml -m veos_vtb -k ceos add-topo vms-kvm-t1-smartswitch password.txt + ``` + + The whole topology contains: + * 4 cEOS neighbors VM0100, VM0101, VM0102 and VM0103. 2 of them are simulating T2s, and the other 2 are simulating T0s. + * 2 SONiC VMs. One is named as `vlab-01` running as NPU, the other is named `VM0104` running as DPU. + * 1 PTF docker for test utilities, packets sending and sniffing. + * OVS bridges binding the interfaces. + + Diagram below illustrates the topology. + ![t1-smartswitch](img/testbed_t1-smartswitch.png) + +1. Deploy minigraph. + + ```bash + ./testbed-cli.sh -t vtestbed.yaml -m veos_vtb gen-mg vms-kvm-t1-smartswitch veos_vtb password.txt + ./testbed-cli.sh -t vtestbed.yaml -m veos_vtb deploy-mg vms-kvm-t1-smartswitch veos_vtb password.txt + ``` + +## 3. Configurate DPU + +### 3.1. Setup mgmt network connection on DPU + +1. telnet to DPU VM + + ```bash + telnet 127.0.0.1 7004 + + User: admin + Password: YourPaSsWoRd + ``` + +1. Configure mgmt interface + + ```bash + sudo config interface ip add eth0 10.250.0.55/24 + ``` + +### 3.2. Setup port config on DPU + +1. copy minigraph to DPU + + ```bash + scp sonic-mgmt/ansible/minigraph/SONIC01DPU.xml admin@10.250.0.55: + + User:admin + Password: YourPaSsWoRd + ``` + +1. load minigraph on DPU + + ```bash + sudo cp SONIC01DPU.xml /etc/sonic/minigraph.xml + sudo config load_minigraph -y + + sudo config save -y + ``` + +
+Optional: A small test to validate the topology +The sender sciprt below injects some simple tcp packets to `eth0` on ptf docker, which connects to one of the T2 neighbor's bridge.The `10.0.0.37` was configured on the first front panel port on DPU neighbor. + + # sender.py + from scapy.all import * + from time import sleep + + eth_dst = "22:48:23:27:33:d8" + eth_src = "9a:50:c1:b1:9f:00" + src_ip = "10.0.0.1" + dst_ip = "10.0.0.37" + ip_ttl = 255 + tcp_dport = 5000 + tcp_sport = 1234 + + packet = Ether(dst=eth_dst, src=eth_src) / IP(src=src_ip, dst=dst_ip, ttl=ip_ttl) / TCP(dport=tcp_dport, sport=tcp_sport) / Raw(load="Hello World"*100) + + while True: + sendp(packet, iface="eth0") + sleep(0.1) + +Thus, the packets are supposed to be sniffed on `eth4` (binding to DPU) on PTF. + + # sniffer.py + def packet_callback(packet): + print(packet.summary()) + + # Sniff packets from the specified interface (e.g., 'eth0') + sniff(iface='eth4', prn=packet_callback, count=10) + + +
+ +### 3.3. Upgrade DPU image to DASH BMv2 + +1. Login on sonic VM and upgrade it with the 1st-step compiled vsonic image sonic-vs.bin and reboot it + + ```bash + admin@vlab-01:~$ sudo sonic-installer install -y sonic-vs.bin + admin@vlab-01:~$ sudo reboot + ``` + +### 3.4. Enable DASH BMv2 Pipeline + +1. Specify switch type dpu + + ```bash + admin@vlab-01:~$ sonic-db-cli CONFIG_DB hset 'DEVICE_METADATA|localhost' switch_type dpu + admin@vlab-01:~$ sudo config save -y + ``` + +1. Enable service dash-engine + + ```bash + admin@vlab-01:~$ sudo systemctl enable dash-engine && sudo systemctl start dash-engine + ``` + +1. Specify command syncd_dash instead of syncd in container syncd + + ```bash + admin@vlab-01:~$ docker exec syncd sed -i '/CMD_SYNCD/s/syncd/syncd_dash/' /usr/bin/syncd_init_common.sh + ``` + +1. Manually configure IP on dpu interface eth1/eth2 + + ```bash + admin@vlab-01:~$ sudo ifconfig eth1 10.0.0.37/31 up && sudo ifconfig eth2 10.0.0.39/31 up + ``` + +1. config reload + + ```bash + admin@vlab-01:~$ sudo config reload -y + ``` + +### 3.5. Initialize DASH BMv2 Pipeline + +1. Update libdashsai package on your sonic-mgmt test repo. Without this, calling gNMI and set DASH config will not work: + + ```bash + r12f@r12f-dl380:~/code/sonic/mgmt + $ sudo dpkg -i libdashapi_1.0.0_amd64.deb + ``` + + libdashapi_1.0.0_amd64.deb can be found under “target/debs/bookworm”. + +1. Install p4runtime shell in DPU KVM: [p4lang/p4runtime-shell](https://github.com/p4lang/p4runtime-shell) + + The DPU KVM might not have internet access, hence we will need to pull the container outside the KVM, save and copy it in, then import the container. + + 1. Run following command outside KVM: + + ```bash + docker pull p4lang/p4runtime-sh + docker save p4lang/p4runtime-sh:latest -o p4runtime-sh.tar + scp p4runtime-sh.tar admin@10.250.0.55:/home/admin + ``` + + 1. Run following command inside KVM: + + ```bash + docker load -i p4runtime-sh.tar + ``` + +1. Manually configure underlay route (for neighbor) of dash pipeline bmv2 with p4runtime-sh. Currently configuring underlay route via northbound dash API is still not working. + + ```bash + $ docker run --rm -ti --network=host p4lang/p4runtime-sh --grpc-addr 127.0.0.1:9559 --device-id 0 --election-id 0,1 + underlay_entry = table_entry["dash_ingress.underlay.underlay_routing"](action="dash_ingress.underlay.pkt_act") + underlay_entry.match["meta.dst_ip_addr"] = "::10.0.0.37/127" + underlay_entry.action["packet_action"] = "1" + underlay_entry.action["next_hop_id"] = "0" + underlay_entry.insert + + underlay_entry.match["meta.dst_ip_addr"] = "::10.0.0.39/127" + underlay_entry.action["packet_action"] = "1" + underlay_entry.action["next_hop_id"] = "1" + underlay_entry.insert + + underlay_entry.match["meta.dst_ip_addr"] = "::30.30.30.30/128" + underlay_entry.action["packet_action"] = "1" + underlay_entry.action["next_hop_id"] = "1" + underlay_entry.insert + ``` diff --git a/docs/testbed/img/testbed_t1-smartswitch.png b/docs/testbed/img/testbed_t1-smartswitch.png new file mode 100644 index 00000000000..9994f1af148 Binary files /dev/null and b/docs/testbed/img/testbed_t1-smartswitch.png differ diff --git a/sdn_tests/tests/Watchport_Blackbox_Test _Plan.md b/sdn_tests/tests/Watchport_Blackbox_Test _Plan.md new file mode 100644 index 00000000000..4c6c34a00a9 --- /dev/null +++ b/sdn_tests/tests/Watchport_Blackbox_Test _Plan.md @@ -0,0 +1,256 @@ +# Objective + +This document captures the tests that are intended to be covered in the blackbox test environment for Watchport feature. + +# Overview + +Watchport is a feature that aims to quickly remove a link (that went down) from the WCMP/ECMP group it participates in before the controller (used interchangeably with the external view) can detect the link down event and take the appropriate recovery action. This is mainly to shorten the duration of traffic black hole problems that may arise if a down member exists in a WCMP/ECMP group. + +The test-plan aims to verify the correctness of the feature by picking up certain triggers and common use-cases. The testing will not cover the following: + +- Reference or object dependencies like whether a nexthop member exists before being referenced in the WCMP/ECMP group action. +- Traffic loss/convergence related scenarios. + +# Testbed Requirements + +The testbed requirements are the existence of a basic blackbox setup that comprises a SUT and control switch which are connected to each other on multiple links. + +# Test Cases + +## Configured weights are realized + + + + + + + + + + + + + + + + + + +
TitleVerify basic WCMP/ECMP packet hashing works with watch port actions.
Procedure
    +
  • Create a WCMP/ECMP group (herein referred to as Action Profile Group APG) with multiple members (herein referred to as Action Profile Members APM) with an associated watch port for each member.
  • +
+
    +
  • Send different packets to the SUT from the control switch by varying a field in the packet header that will apply the hashing algorithm to select an APM from the APG.
  • +
+
Expected Results
    +
  • Verify the packets are distributed to all the members in the APG by comparing the actual number of packets received on each port vs the expected up members.
  • +
+
+ +## + +## Member down handling + + + + + + + + + + + + + + + + + + +
TitleVerify the watchport action when the watch port link is forced down.
Procedure
    +
  • Create a WCMP/ECMP APG with multiple APM.
  • +
+
    +
  • Bring down the watch port associated with one member of the APG.
  • +
+
Expected Results
    +
  • Verify that the member of the down port is excluded from the APG (via traffic tests) but the read request from P4RT (as in APP_DB) reflects the original set of Action Profile members.
  • +
+
    +
  • Send different packets as in the earlier step and verify traffic is distributed only to the members whose watch port link is up.
  • +
+
+ +## Member up handling + + + + + + + + + + + + + + + + + + +
TitleVerify the watchport action when the watch port link comes up
Procedure
    +
  • Disable link damping (if any) to ensure link up notifications are delivered instantly.
  • +
+
    +
  • Bring up the watch port of an excluded member of an APG.
  • +
+
    +
  • Resend packets with varying headers that will ensure all members are hashed.
  • +
+
Expected Results
    +
  • Verify that packets are distributed as per the new membership.
  • +
+
+ +## Watch port for a single member group + + + + + + + + + + + + + + + + + + +
TitleVerify watch port functionality for single member.
Procedure
    +
  • Disable link damping (if any) to ensure link up notifications are delivered instantly.
  • +
+
    +
  • Create a WCMP/ECMP APG with only one member
  • +
+
    +
  • Send different packets to the SUT from the control switch by varying a field in the packet header.
  • +
+
    +
  • Bring down the watch port associated with the member.
  • +
+
    +
  • Bring up the watch port associated with the member in the APG.
  • +
+
Expected Results
    +
  • Verify that all packets are sent out on the same member while the associated watch port is up, no traffic loss.
  • +
+
    +
  • Verify that all packets are dropped when the associated watch port is down.
  • +
+
+ +## Modify operation on a watchport member + + + + + + + + + + + + + + + + + + + + + + + + + + +
TitleVerify watch port action along with the controller updates.
Procedure
    +
  • Disable link damping (if any) to ensure link up notifications are delivered instantly.
  • +
+
    +
  • Create a WCMP/ECMP APG with multiple members and watch ports.
  • +
+
    +
  • Bring down one of the watch port associated with a member and verify the member is excluded from the selection process for this APG.
  • +
+
    +
  • Send a modify APG request that removes the member whose watch port was brought down.
  • +
+
    +
  • Bring the associated watch port up and verify that the deleted member does not get added back to the APG.
  • +
+
    +
  • Send traffic with varying packet headers.
  • +
+
Expected Results
    +
  • Verify APP_DB state always reflects the membership consistent to the external view and not the membership that the switch implementation modified when the associated watch port went down/up.
  • +
+
    +
  • Verify traffic is destined only to the members programmed by the controller and whose associated watch port is up.
  • +
+
Procedure
    +
  • Repeat the same steps as above but replace the modify APG with remove APG operation.
  • +
+
Expected Results
    +
  • Verify that bringing up the watch port does not result in any critical error reported by the switch. (No group exists since the group was removed)
  • +
+
+ +## Specifying a down-port as watch port + + + + + + + + + + + + + + + + + + +
TitleVerify the watch port action when the controller adds a member to the APG whose associated watch port is down.
Procedure
    +
  • Disable link damping (if any) to ensure link up notifications are delivered instantly.
  • +
+
    +
  • Create a WCMP/ECMP APG with some members whose watch ports are up and some down.
  • +
+
    +
  • Send traffic and ensure only non-excluded member ports receive it, no traffic loss.
  • +
+
    +
  • Bring up the watch port whose APM was excluded from the APG.
  • +
+
Expected Results
    +
  • Verify APP_STATE DB read always reflect all members.
  • +
+
    +
  • Verify traffic is destined to only members in the APG whose associated watch ports are up and there is no overall traffic loss.
  • +
+
diff --git a/setup-container.sh b/setup-container.sh index 90bae4ef4f8..d549d304669 100755 --- a/setup-container.sh +++ b/setup-container.sh @@ -373,6 +373,12 @@ function parse_arguments() { else exit_failure "found existing container (\"docker start $EXISTING_CONTAINER_NAME\")" fi + else + # If container name is over 64 characters, container will not be able to start due to hostname limitation + container_name_len=${#CONTAINER_NAME} + if [ "$container_name_len" -gt "64" ]; then + exit_failure "Length of supplied container name exceeds 64 characters (currently $container_name_len chars)" + fi fi if [[ -z "${LINK_DIR}" ]]; then diff --git a/tests/acl/templates/acltb_test_rules_part_1.j2 b/tests/acl/templates/acltb_test_rules_part_1.j2 index 4583a14977c..f7c1483f9a5 100644 --- a/tests/acl/templates/acltb_test_rules_part_1.j2 +++ b/tests/acl/templates/acltb_test_rules_part_1.j2 @@ -125,6 +125,21 @@ "destination-port": "179" } } + }, + "29": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 29 + }, + "ip": { + "config": { + "destination-ip-address": "{{ loopback_ip }}/32" + } + } } } } diff --git a/tests/acl/templates/acltb_test_rules_part_2.j2 b/tests/acl/templates/acltb_test_rules_part_2.j2 index 0119fc83bb8..faa0b39c3a0 100644 --- a/tests/acl/templates/acltb_test_rules_part_2.j2 +++ b/tests/acl/templates/acltb_test_rules_part_2.j2 @@ -510,6 +510,21 @@ "destination-ip-address": "192.168.0.122/32" } } + }, + "34": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 34 + }, + "ip": { + "config": { + "destination-ip-address": "{{ loopback_ip }}/32" + } + } } } } diff --git a/tests/acl/templates/acltb_test_rules_permit_loopback.j2 b/tests/acl/templates/acltb_test_rules_permit_loopback.j2 new file mode 100644 index 00000000000..faa0b39c3a0 --- /dev/null +++ b/tests/acl/templates/acltb_test_rules_permit_loopback.j2 @@ -0,0 +1,535 @@ +{ + "acl": { + "acl-sets": { + "acl-set": { + "{{ acl_table_name }}": { + "acl-entries": { + "acl-entry": { + "1": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 1 + }, + "ip": { + "config": { + "source-ip-address": "20.0.0.2/32" + } + } + }, + "2": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 2 + }, + "ip": { + "config": { + "destination-ip-address": "192.168.0.252/32" + } + } + }, + "3": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 3 + }, + "ip": { + "config": { + "destination-ip-address": "193.191.32.1/32" + } + } + }, + "4": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 4 + }, + "transport": { + "config": { + "source-port": "4621" + } + } + }, + "5": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 5 + }, + "ip": { + "config": { + "protocol": 126 + } + } + }, + "6": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 6 + }, + "transport": { + "config": { + "tcp-flags": ["TCP_ACK", "TCP_PSH", "TCP_FIN", "TCP_SYN"] + } + } + }, + "7": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 7 + }, + "ip": { + "config": { + "source-ip-address": "20.0.0.3/32" + } + } + }, + "8": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 8 + }, + "ip": { + "config": { + "source-ip-address": "20.0.0.3/32" + } + } + }, + "9": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 9 + }, + "transport": { + "config": { + "destination-port": "4631" + } + } + }, + "10": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 10 + }, + "transport": { + "config": { + "source-port": "4656..4671" + } + } + }, + "11": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 11 + }, + "transport": { + "config": { + "destination-port": "4640..4687" + } + } + }, + "12": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 12 + }, + "ip": { + "config": { + "protocol":1, + "source-ip-address": "20.0.0.4/32" + } + } + }, + "13": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 13 + }, + "ip": { + "config": { + "protocol":17, + "source-ip-address": "20.0.0.4/32" + } + } + }, + "14": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 14 + }, + "ip": { + "config": { + "source-ip-address": "20.0.0.6/32" + } + } + }, + "15": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 15 + }, + "ip": { + "config": { + "destination-ip-address": "192.168.0.251/32" + } + } + }, + "16": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 16 + }, + "ip": { + "config": { + "destination-ip-address": "193.221.112.1/32" + } + } + }, + "17": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 17 + }, + "transport": { + "config": { + "source-port": "4721" + } + } + }, + "18": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 18 + }, + "ip": { + "config": { + "protocol": 127 + } + } + }, + "19": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 19 + }, + "transport": { + "config": { + "tcp-flags": ["TCP_RST", "TCP_URG"] + } + } + }, + "20": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 20 + }, + "ip": { + "config": { + "source-ip-address": "20.0.0.7/32" + } + } + }, + "21": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 21 + }, + "ip": { + "config": { + "source-ip-address": "20.0.0.7/32" + } + } + }, + "22": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 22 + }, + "transport": { + "config": { + "destination-port": "4731" + } + } + }, + "23": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 23 + }, + "transport": { + "config": { + "source-port": "4756..4771" + } + } + }, + "24": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 24 + }, + "transport": { + "config": { + "destination-port": "4740..4787" + } + } + }, + "25": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 25 + }, + "ip": { + "config": { + "protocol":1, + "source-ip-address": "20.0.0.8/32" + } + } + }, + "26": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 26 + }, + "ip": { + "config": { + "protocol":17, + "source-ip-address": "20.0.0.8/32" + } + } + }, + "27": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 27 + }, + "transport": { + "config": { + "source-port": "179" + } + } + }, + "28": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 28 + }, + "transport": { + "config": { + "destination-port": "179" + } + } + }, + "29": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 29 + }, + "ip": { + "config": { + "protocol": 1, + "source-ip-address": "20.0.0.10/32" + } + }, + "icmp": { + "config": { + "type": 3, + "code": 1 + } + } + }, + "30": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 30 + }, + "ip": { + "config": { + "destination-ip-address": "192.168.1.66/32" + } + } + }, + "31": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 31 + }, + "ip": { + "config": { + "destination-ip-address": "192.168.1.67/32" + } + } + }, + "32": { + "actions": { + "config": { + "forwarding-action": "DROP" + } + }, + "config": { + "sequence-id": 32 + }, + "ip": { + "config": { + "destination-ip-address": "192.168.0.121/32" + } + } + }, + "33": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 33 + }, + "ip": { + "config": { + "destination-ip-address": "192.168.0.122/32" + } + } + }, + "34": { + "actions": { + "config": { + "forwarding-action": "ACCEPT" + } + }, + "config": { + "sequence-id": 34 + }, + "ip": { + "config": { + "destination-ip-address": "{{ loopback_ip }}/32" + } + } + } + } + } + } + } + } + } +} diff --git a/tests/acl/test_acl.py b/tests/acl/test_acl.py index 2908cfc2038..39e1e6783f3 100644 --- a/tests/acl/test_acl.py +++ b/tests/acl/test_acl.py @@ -25,6 +25,7 @@ from tests.common.fixtures.conn_graph_facts import conn_graph_facts # noqa F401 from tests.common.platform.processes_utils import wait_critical_processes from tests.common.platform.interface_utils import check_all_interface_information +from tests.common.utilities import get_iface_ip logger = logging.getLogger(__name__) @@ -46,7 +47,7 @@ # TODO: We really shouldn't have two separate templates for v4 and v6, need to combine them somehow ACL_RULES_FULL_TEMPLATE = { - "ipv4": "acltb_test_rules.j2", + "ipv4": "acltb_test_rules_permit_loopback.j2", "ipv6": "acltb_v6_test_rules.j2" } ACL_RULES_PART_TEMPLATES = { @@ -357,14 +358,18 @@ def setup(duthosts, ptfhost, rand_selected_dut, rand_unselected_dut, tbinfo, ptf # source or destination port if 'dualtor' in tbinfo['topo']['name'] and rand_unselected_dut is not None: peer_mg_facts = rand_unselected_dut.get_extended_minigraph_facts(tbinfo) + lo_dev = "Loopback2" for interface, neighbor in list(peer_mg_facts['minigraph_neighbors'].items()): if (topo == "t1" and "T2" in neighbor["name"]) or (topo == "t0" and "T1" in neighbor["name"]): port_id = peer_mg_facts["minigraph_ptf_indices"][interface] upstream_port_ids.append(port_id) upstream_port_id_to_router_mac_map[port_id] = rand_unselected_dut.facts["router_mac"] + else: + lo_dev = "Loopback0" # Get the list of LAGs port_channels = mg_facts["minigraph_portchannels"] + selected_tor_loopback_ip = get_iface_ip(mg_facts, lo_dev) # TODO: We should make this more robust (i.e. bind all active front-panel ports) acl_table_ports = defaultdict(list) @@ -404,7 +409,8 @@ def setup(duthosts, ptfhost, rand_selected_dut, rand_unselected_dut, tbinfo, ptf "acl_table_ports": acl_table_ports, "vlan_ports": vlan_ports, "topo": topo, - "vlan_mac": vlan_mac + "vlan_mac": vlan_mac, + "loopback_ip": selected_tor_loopback_ip } logger.info("Gathered variables for ACL test:\n{}".format(pprint.pformat(setup_information))) @@ -565,7 +571,8 @@ def acl_table(duthosts, rand_one_dut_hostname, setup, stage, ip_version, tbinfo, "table_name": table_name, "table_ports": ",".join(setup["acl_table_ports"]['']), "table_stage": stage, - "table_type": "L3" if ip_version == "ipv4" else "L3V6" + "table_type": "L3" if ip_version == "ipv4" else "L3V6", + "loopback_ip": setup["loopback_ip"] } logger.info("Generated ACL table configuration:\n{}".format(pprint.pformat(acl_table_config))) @@ -1244,7 +1251,9 @@ def setup_rules(self, dut, acl_table, ip_version): """ table_name = acl_table["table_name"] + loopback_ip = acl_table["loopback_ip"] dut.host.options["variable_manager"].extra_vars.update({"acl_table_name": table_name}) + dut.host.options["variable_manager"].extra_vars.update({"loopback_ip": loopback_ip}) logger.info("Generating basic ACL rules config for ACL table \"{}\" on {}".format(table_name, dut)) @@ -1272,7 +1281,9 @@ def setup_rules(self, dut, acl_table, ip_version): """ table_name = acl_table["table_name"] + loopback_ip = acl_table["loopback_ip"] dut.host.options["variable_manager"].extra_vars.update({"acl_table_name": table_name}) + dut.host.options["variable_manager"].extra_vars.update({"loopback_ip": loopback_ip}) logger.info("Generating incremental ACL rules config for ACL table \"{}\"" .format(table_name)) @@ -1303,19 +1314,11 @@ def post_setup_hook(self, dut, localhost, populate_vlan_arp_entries, tbinfo, con """ dut.command("config save -y") + up_bgp_neighbors = dut.get_bgp_neighbors_per_asic("established") reboot(dut, localhost, safe_reboot=True, check_intf_up_ports=True) # We need some additional delay on e1031 if dut.facts["platform"] == "x86_64-cel_e1031-r0": time.sleep(240) - if 't1' in tbinfo["topo"]["name"]: - # Wait BGP sessions up on T1 as we saw BGP sessions to T0 - # established later than T2 - bgp_neighbors = dut.get_bgp_neighbors() - pytest_assert( - wait_until(120, 10, 0, dut.check_bgp_session_state, list(bgp_neighbors.keys())), - "Not all bgp sessions are established after reboot") - # Delay 10 seconds for route convergence - time.sleep(10) # We need additional delay and make sure ports are up for Nokia-IXR7250E-36x400G if dut.facts["hwsku"] == "Nokia-IXR7250E-36x400G": interfaces = conn_graph_facts["device_conn"][dut.hostname] @@ -1328,6 +1331,12 @@ def post_setup_hook(self, dut, localhost, populate_vlan_arp_entries, tbinfo, con assert result, "Not all transceivers are detected or interfaces are up in {} seconds".format( MAX_WAIT_TIME_FOR_INTERFACES) + pytest_assert( + wait_until(300, 10, 0, dut.check_bgp_session_state_all_asics, up_bgp_neighbors, "established"), + "All BGP sessions are not up after reboot, no point in continuing the test") + # Delay 10 seconds for route convergence + time.sleep(10) + populate_vlan_arp_entries() diff --git a/tests/acl/test_stress_acl.py b/tests/acl/test_stress_acl.py index 47244a30bc4..ca0a80e5589 100644 --- a/tests/acl/test_stress_acl.py +++ b/tests/acl/test_stress_acl.py @@ -91,12 +91,15 @@ def prepare_test_file(rand_selected_dut): @pytest.fixture(scope='module') def prepare_test_port(rand_selected_dut, tbinfo): mg_facts = rand_selected_dut.get_extended_minigraph_facts(tbinfo) - if tbinfo["topo"]["type"] == "mx": - dut_port = mg_facts["minigraph_acls"]["DataAcl"][0] - else: - dut_port = list(mg_facts['minigraph_portchannels'].keys())[0] + + ports = list(mg_facts['minigraph_portchannels']) + if not ports: + ports = mg_facts["minigraph_acls"]["DataAcl"] + + dut_port = ports[0] if ports else None + if not dut_port: - pytest.skip('No portchannels found') + pytest.skip('No portchannels nor dataacl ports found') if "Ethernet" in dut_port: dut_eth_port = dut_port elif "PortChannel" in dut_port: diff --git a/tests/arp/files/ferret.py b/tests/arp/files/ferret.py index f7212842ee8..7850a6986b8 100644 --- a/tests/arp/files/ferret.py +++ b/tests/arp/files/ferret.py @@ -174,7 +174,7 @@ class Responder(object): def __init__(self, db, vxlan_port): # defines a part of the packet for ARP Reply self.arp_chunk = binascii.unhexlify('08060001080006040002') - self.arp_pad = binascii.unhexlify('00' * 18) + self.arp_pad = binascii.unhexlify('fe11e1' * 6) self.db = db self.vxlan_port = vxlan_port diff --git a/tests/arp/test_stress_arp.py b/tests/arp/test_stress_arp.py index c6dcd250261..4710bfe7335 100644 --- a/tests/arp/test_stress_arp.py +++ b/tests/arp/test_stress_arp.py @@ -1,6 +1,7 @@ import logging import time import pytest +import random from .arp_utils import MacToInt, IntToMac, get_crm_resources, fdb_cleanup, \ clear_dut_arp_cache, get_fdb_dynamic_mac_count import ptf.testutils as testutils @@ -11,9 +12,12 @@ from tests.common.utilities import wait_until, increment_ipv6_addr from tests.common.errors import RunAnsibleModuleFail + ARP_BASE_IP = "172.16.0.1/16" ARP_SRC_MAC = "00:00:01:02:03:04" ENTRIES_NUMBERS = 12000 +TEST_CONNTRACK_TIMEOUT = 300 +TEST_INCOMPLETE_NEIGHBOR_CNT = 10 logger = logging.getLogger(__name__) @@ -95,15 +99,21 @@ def test_ipv4_arp(duthost, garp_enabled, ip_and_intf_info, intfs_for_test, if normalized_level is None: normalized_level = "debug" asic_type = duthost.facts['asic_type'] - ipv4_avaliable = get_crm_resources(duthost, "ipv4_neighbor", "available") - fdb_avaliable = get_crm_resources(duthost, "fdb_entry", "available") - pytest_assert(ipv4_avaliable > 0 and fdb_avaliable > 0, "Entries have been filled") - - arp_avaliable = min(min(ipv4_avaliable, fdb_avaliable), ENTRIES_NUMBERS) + ipv4_available = get_crm_resources(duthost, "ipv4_neighbor", "available") + fdb_available = get_crm_resources(duthost, "fdb_entry", "available") + pytest_assert(ipv4_available > 0 and fdb_available > 0, "Entries have been filled") + + arp_available = min(min(ipv4_available, fdb_available), ENTRIES_NUMBERS) + # Neighbor support is dependant on NH scale for some cisco platforms. + # Limit ARP scale based on available NH entries + asic_type = duthost.facts["asic_type"] + if 'cisco-8000' in asic_type: + ipv4_nh_available = get_crm_resources(duthost, "ipv4_nexthop", "available") + arp_available = min(arp_available, ipv4_nh_available) pytest_require(garp_enabled, 'Gratuitous ARP not enabled for this device') ptf_intf_ipv4_hosts = genrate_ipv4_ip() - ptf_intf_ipv4_hosts = ptf_intf_ipv4_hosts[1:arp_avaliable + 1] + ptf_intf_ipv4_hosts = ptf_intf_ipv4_hosts[1:arp_available + 1] _, _, intf1_index, _, = intfs_for_test loop_times = LOOP_TIMES_LEVEL_MAP[normalized_level] @@ -116,9 +126,9 @@ def test_ipv4_arp(duthost, garp_enabled, ip_and_intf_info, intfs_for_test, # There is a certain probability of hash collision, we set the percentage as 1% here # The entries we add will not exceed 10000, so the number we tolerate is 100 logger.debug("Expected route number: {}, real route number {}" - .format(arp_avaliable, get_fdb_dynamic_mac_count(duthost))) + .format(arp_available, get_fdb_dynamic_mac_count(duthost))) pytest_assert(wait_until(20, 1, 0, - lambda: abs(arp_avaliable - get_fdb_dynamic_mac_count(duthost)) < 250), + lambda: abs(arp_available - get_fdb_dynamic_mac_count(duthost)) < 250), "ARP Table Add failed") finally: try: @@ -147,6 +157,7 @@ def generate_global_addr(mac): return ipv6 +# generate neighbor solicitation packet for test def ipv6_packets_for_test(ip_and_intf_info, fake_src_mac, fake_src_addr): _, _, src_addr_v6, _, _ = ip_and_intf_info fake_src_mac = fake_src_mac @@ -163,14 +174,14 @@ def ipv6_packets_for_test(ip_and_intf_info, fake_src_mac, fake_src_addr): return ns_pkt -def add_nd(ptfadapter, ip_and_intf_info, ptf_intf_index, nd_avaliable): - for entry in range(0, nd_avaliable): +def add_nd(ptfadapter, ip_and_intf_info, ptf_intf_index, nd_available): + for entry in range(0, nd_available): nd_entry_mac = IntToMac(MacToInt(ARP_SRC_MAC) + entry) fake_src_addr = generate_global_addr(nd_entry_mac) ns_pkt = ipv6_packets_for_test(ip_and_intf_info, nd_entry_mac, fake_src_addr) testutils.send_packet(ptfadapter, ptf_intf_index, ns_pkt) - logger.info("Sending {} ipv6 neighbor entries".format(nd_avaliable)) + logger.info("Sending {} ipv6 neighbor entries".format(nd_available)) def test_ipv6_nd(duthost, ptfhost, config_facts, tbinfo, ip_and_intf_info, @@ -185,23 +196,26 @@ def test_ipv6_nd(duthost, ptfhost, config_facts, tbinfo, ip_and_intf_info, normalized_level = "debug" asic_type = duthost.facts['asic_type'] loop_times = LOOP_TIMES_LEVEL_MAP[normalized_level] - ipv6_avaliable = get_crm_resources(duthost, "ipv6_neighbor", "available") - fdb_avaliable = get_crm_resources(duthost, "fdb_entry", "available") - pytest_assert(ipv6_avaliable > 0 and fdb_avaliable > 0, "Entries have been filled") - - nd_avaliable = min(min(ipv6_avaliable, fdb_avaliable), ENTRIES_NUMBERS) - + ipv6_available = get_crm_resources(duthost, "ipv6_neighbor", "available") + fdb_available = get_crm_resources(duthost, "fdb_entry", "available") + pytest_assert(ipv6_available > 0 and fdb_available > 0, "Entries have been filled") + + nd_available = min(min(ipv6_available, fdb_available), ENTRIES_NUMBERS) + asic_type = duthost.facts["asic_type"] + if 'cisco-8000' in asic_type: + ipv6_nh_available = get_crm_resources(duthost, "ipv6_nexthop", "available") + nd_available = min(nd_available, ipv6_nh_available) while loop_times > 0: loop_times -= 1 try: - add_nd(ptfadapter, ip_and_intf_info, ptf_intf_index, nd_avaliable) + add_nd(ptfadapter, ip_and_intf_info, ptf_intf_index, nd_available) if asic_type != 'vs': # There is a certain probability of hash collision, we set the percentage as 1% here # The entries we add will not exceed 10000, so the number we tolerate is 100 logger.debug("Expected route number: {}, real route number {}" - .format(nd_avaliable, get_fdb_dynamic_mac_count(duthost))) + .format(nd_available, get_fdb_dynamic_mac_count(duthost))) pytest_assert(wait_until(20, 1, 0, - lambda: abs(nd_avaliable - get_fdb_dynamic_mac_count(duthost)) < 250), + lambda: abs(nd_available - get_fdb_dynamic_mac_count(duthost)) < 250), "Neighbor Table Add failed") finally: try: @@ -214,3 +228,84 @@ def test_ipv6_nd(duthost, ptfhost, config_facts, tbinfo, ip_and_intf_info, raise e # Wait for 10 seconds before starting next loop time.sleep(10) + + +def send_ipv6_echo_request(ptfadapter, dut_mac, ip_and_intf_info, ptf_intf_index, nd_available, tgt_cnt): + for i in range(tgt_cnt): + entry = random.randrange(0, nd_available) + nd_entry_mac = IntToMac(MacToInt(ARP_SRC_MAC) + entry) + fake_src_addr = generate_global_addr(nd_entry_mac) + _, _, src_addr_v6, _, _ = ip_and_intf_info + tgt_addr = increment_ipv6_addr(src_addr_v6) + er_pkt = testutils.simple_icmpv6_packet(eth_dst=dut_mac, + eth_src=nd_entry_mac, + ipv6_src=fake_src_addr, + ipv6_dst=tgt_addr, + icmp_type=128, + ) + identifier = random.randint(10000, 50000) + er_pkt.load = identifier.to_bytes(2, "big") + b"D" * 40 + testutils.send_packet(ptfadapter, ptf_intf_index, er_pkt) + + +def test_ipv6_nd_incomplete(duthost, ptfhost, config_facts, tbinfo, ip_and_intf_info, + ptfadapter, get_function_completeness_level, proxy_arp_enabled): + _, _, ptf_intf_ipv6_addr, _, ptf_intf_index = ip_and_intf_info + ptf_intf_ipv6_addr = increment_ipv6_addr(ptf_intf_ipv6_addr) + pytest_require(proxy_arp_enabled, 'Proxy ARP not enabled for all VLANs') + pytest_require(ptf_intf_ipv6_addr is not None, 'No IPv6 VLAN address configured on device') + + ipv6_available = get_crm_resources(duthost, "ipv6_neighbor", "available") + fdb_available = get_crm_resources(duthost, "fdb_entry", "available") + pytest_assert(ipv6_available > 0 and fdb_available > 0, "Entries have been filled") + + nd_available = min(min(ipv6_available, fdb_available), ENTRIES_NUMBERS) + tgt_incomplete_neighbor_cnt = min(nd_available, TEST_INCOMPLETE_NEIGHBOR_CNT) + + max_conntrack = int(duthost.command("cat /proc/sys/net/netfilter/nf_conntrack_max")["stdout"]) + logger.info("nf_conntrack_max: {}".format(max_conntrack)) + # we test a small portion of max_conntrack to see the increase + tgt_conntrack_cnt = int(max_conntrack * 0.1) + + conntrack_cnt_pre = int(duthost.command("cat /proc/sys/net/netfilter/nf_conntrack_count")["stdout"]) + logger.info("nf_conntrack_count pre test: {}".format(conntrack_cnt_pre)) + + pytest_assert("[UNREPLIED]" not in duthost.command("sudo conntrack -f ipv6 -L dying")["stdout"], + "unreplied icmpv6 requests ended up in the dying list before test is run") + + orig_conntrack_icmpv6_timeout = int(duthost.command("cat /proc/sys/net/netfilter/" + "nf_conntrack_icmpv6_timeout")["stdout"]) + logger.info("original nf_conntrack_icmpv6_timeout: {}".format(orig_conntrack_icmpv6_timeout)) + + try: + clear_dut_arp_cache(duthost) + + duthost.command("conntrack -F") + + duthost.shell("echo {} > /proc/sys/net/netfilter/nf_conntrack_icmpv6_timeout" + .format(TEST_CONNTRACK_TIMEOUT)) + logger.info("setting nf_conntrack_icmpv6_timeout to {}".format(TEST_CONNTRACK_TIMEOUT)) + + send_ipv6_echo_request(ptfadapter, duthost.facts["router_mac"], ip_and_intf_info, + ptf_intf_index, tgt_incomplete_neighbor_cnt, tgt_conntrack_cnt) + + conntrack_cnt_post = int(duthost.command("cat /proc/sys/net/netfilter/nf_conntrack_count")["stdout"]) + logger.info("nf_conntrack_count post test: {}".format(conntrack_cnt_post)) + + pytest_assert((conntrack_cnt_post - conntrack_cnt_pre) < tgt_conntrack_cnt * 0.1, + "{} echo requests cause large increase in conntrack entries".format(tgt_conntrack_cnt)) + + pytest_assert("[UNREPLIED]" not in duthost.command("conntrack -f ipv6 -L dying")["stdout"], + "unreplied icmpv6 requests ended up in the dying list") + + logger.info("neighbors in INCOMPLETE state: {}" + .format(duthost.command("ip -6 neigh")["stdout"].count("INCOMPLETE"))) + + finally: + duthost.shell("echo {} > /proc/sys/net/netfilter/nf_conntrack_icmpv6_timeout" + .format(orig_conntrack_icmpv6_timeout)) + logger.info("setting nf_conntrack_icmpv6_timeout back to {}".format(orig_conntrack_icmpv6_timeout)) + + duthost.command("conntrack -F") + + clear_dut_arp_cache(duthost) diff --git a/tests/autorestart/test_container_autorestart.py b/tests/autorestart/test_container_autorestart.py index 591b2e8a75b..d7a983e35da 100644 --- a/tests/autorestart/test_container_autorestart.py +++ b/tests/autorestart/test_container_autorestart.py @@ -27,6 +27,7 @@ DHCP_SERVER = "dhcp_server" POST_CHECK_INTERVAL_SECS = 1 POST_CHECK_THRESHOLD_SECS = 360 +POST_CHECK_THRESHOLD_SECS_T2 = 600 PROGRAM_STATUS = "RUNNING" @@ -459,13 +460,16 @@ def postcheck_critical_processes_status(duthost, feature_autorestart_states, up_ if is_hiting_start_limit(duthost, feature_name): clear_failed_flag_and_restart(duthost, feature_name, feature_name) + post_check_threshold = POST_CHECK_THRESHOLD_SECS_T2 if duthost.get_facts().get("modular_chassis") \ + else POST_CHECK_THRESHOLD_SECS + critical_proceses = wait_until( - POST_CHECK_THRESHOLD_SECS, POST_CHECK_INTERVAL_SECS, 0, + post_check_threshold, POST_CHECK_INTERVAL_SECS, 0, check_all_critical_processes_status, duthost ) bgp_check = wait_until( - POST_CHECK_THRESHOLD_SECS, POST_CHECK_INTERVAL_SECS, 0, + post_check_threshold, POST_CHECK_INTERVAL_SECS, 0, duthost.check_bgp_session_state_all_asics, up_bgp_neighbors, "established" ) diff --git a/tests/bfd/bfd_base.py b/tests/bfd/bfd_base.py index e801cbfa870..b0f78a1868b 100644 --- a/tests/bfd/bfd_base.py +++ b/tests/bfd/bfd_base.py @@ -4,8 +4,7 @@ import pytest from tests.bfd.bfd_helpers import prepare_bfd_state, selecting_route_to_delete, \ - extract_ip_addresses_for_backend_portchannels, get_dut_asic_static_routes, extract_backend_portchannels, \ - get_src_dst_asic_next_hops + extract_ip_addresses_for_backend_portchannels, get_dut_asic_static_routes from tests.common.helpers.multi_thread_utils import SafeThreadPoolExecutor logger = logging.getLogger(__name__) @@ -170,93 +169,3 @@ def select_src_dst_dut_with_asic(self, request, get_src_dst_asic_and_duts): "dst_prefix": dst_prefix, "version": version, } - - @pytest.fixture(scope="class") - def select_dut_and_src_dst_asic_index(self, duthosts): - if not duthosts.frontend_nodes: - pytest.skip("DUT does not have any frontend nodes") - - dut_index = random.choice(list(range(len(duthosts.frontend_nodes)))) - asic_namespace_list = duthosts.frontend_nodes[dut_index].get_asic_namespace_list() - if len(asic_namespace_list) < 2: - pytest.skip("DUT does not have more than one ASICs") - - # Random selection of src asic & dst asic on DUT - src_asic_namespace, dst_asic_namespace = random.sample(asic_namespace_list, 2) - src_asic_index = src_asic_namespace.split("asic")[1] - dst_asic_index = dst_asic_namespace.split("asic")[1] - - yield { - "dut_index": dut_index, - "src_asic_index": int(src_asic_index), - "dst_asic_index": int(dst_asic_index), - } - - @pytest.fixture(scope="class") - def get_src_dst_asic(self, request, duthosts, select_dut_and_src_dst_asic_index): - logger.info("Printing select_dut_and_src_dst_asic_index") - logger.info(select_dut_and_src_dst_asic_index) - - logger.info("Printing duthosts.frontend_nodes") - logger.info(duthosts.frontend_nodes) - dut = duthosts.frontend_nodes[select_dut_and_src_dst_asic_index["dut_index"]] - - logger.info("Printing dut asics") - logger.info(dut.asics) - - src_asic = dut.asics[select_dut_and_src_dst_asic_index["src_asic_index"]] - dst_asic = dut.asics[select_dut_and_src_dst_asic_index["dst_asic_index"]] - - request.config.src_asic = src_asic - request.config.dst_asic = dst_asic - request.config.dut = dut - - rtn_dict = { - "src_asic": src_asic, - "dst_asic": dst_asic, - "dut": dut, - } - - rtn_dict.update(select_dut_and_src_dst_asic_index) - yield rtn_dict - - @pytest.fixture(scope="class", params=["ipv4", "ipv6"]) - def prepare_traffic_test_variables(self, get_src_dst_asic, request): - version = request.param - logger.info("Version: %s", version) - - dut = get_src_dst_asic["dut"] - src_asic = get_src_dst_asic["src_asic"] - src_asic_index = get_src_dst_asic["src_asic_index"] - dst_asic = get_src_dst_asic["dst_asic"] - dst_asic_index = get_src_dst_asic["dst_asic_index"] - logger.info( - "DUT: {}, src_asic_index: {}, dst_asic_index: {}".format(dut.hostname, src_asic_index, dst_asic_index) - ) - - backend_port_channels = extract_backend_portchannels(dut) - src_asic_next_hops, dst_asic_next_hops, src_prefix, dst_prefix = get_src_dst_asic_next_hops( - version, - dut, - src_asic, - dst_asic, - request, - backend_port_channels, - ) - - src_asic_router_mac = src_asic.get_router_mac() - - yield { - "dut": dut, - "src_asic": src_asic, - "src_asic_index": src_asic_index, - "dst_asic": dst_asic, - "dst_asic_index": dst_asic_index, - "src_asic_next_hops": src_asic_next_hops, - "dst_asic_next_hops": dst_asic_next_hops, - "src_prefix": src_prefix, - "dst_prefix": dst_prefix, - "src_asic_router_mac": src_asic_router_mac, - "backend_port_channels": backend_port_channels, - "version": version, - } diff --git a/tests/bfd/bfd_helpers.py b/tests/bfd/bfd_helpers.py index 1744545f38c..97a7a4ed8eb 100644 --- a/tests/bfd/bfd_helpers.py +++ b/tests/bfd/bfd_helpers.py @@ -31,7 +31,7 @@ def prepare_bfd_state(dut, flag, expected_bfd_state): def verify_bfd_only(dut, nexthops, asic, expected_bfd_state): logger.info("BFD verifications") assert wait_until( - 300, + 450, 10, 0, lambda: verify_bfd_state(dut, nexthops.values(), asic, expected_bfd_state), @@ -589,7 +589,8 @@ def send_packets_batch_from_ptf( def get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, packet_count, version, src_asic_router_mac, @@ -599,10 +600,13 @@ def get_backend_interface_in_use_by_counter( src_asic_index, dst_asic_index, ): - clear_interface_counters(dut) + with SafeThreadPoolExecutor(max_workers=8) as executor: + for dut in [src_dut, dst_dut]: + executor.submit(clear_interface_counters, dut) + send_packets_batch_from_ptf(packet_count, version, src_asic_router_mac, ptfadapter, ptf_src_port, dst_neighbor_ip) - src_output = dut.show_and_parse("show int counters -n asic{} -d all".format(src_asic_index)) - dst_output = dut.show_and_parse("show int counters -n asic{} -d all".format(dst_asic_index)) + src_output = src_dut.show_and_parse("show int counters -n asic{} -d all".format(src_asic_index)) + dst_output = dst_dut.show_and_parse("show int counters -n asic{} -d all".format(dst_asic_index)) src_bp_iface = None for item in src_output: if "BP" in item.get("iface", "") and int(item.get("tx_ok", "0").replace(',', '')) >= packet_count: @@ -619,24 +623,25 @@ def get_backend_interface_in_use_by_counter( return src_bp_iface, dst_bp_iface -def get_src_dst_asic_next_hops(version, dut, src_asic, dst_asic, request, backend_port_channels): - src_asic_next_hops = extract_ip_addresses_for_backend_portchannels(dut, dst_asic, version, backend_port_channels) - assert len(src_asic_next_hops) != 0, "Source next hops are empty" - dst_asic_next_hops = extract_ip_addresses_for_backend_portchannels(dut, src_asic, version, backend_port_channels) - assert len(dst_asic_next_hops) != 0, "Destination next hops are empty" - - dut_asic_static_routes = get_dut_asic_static_routes(version, dut) - - # Picking a static route to delete its BFD session - src_prefix = selecting_route_to_delete(dut_asic_static_routes, src_asic_next_hops.values()) - request.config.src_prefix = src_prefix - assert src_prefix is not None and src_prefix != "", "Source prefix not found" +def get_src_dst_asic_next_hops(version, src_dut, src_asic, src_backend_port_channels, dst_dut, dst_asic, + dst_backend_port_channels): + src_asic_next_hops = extract_ip_addresses_for_backend_portchannels( + dst_dut, + dst_asic, + version, + backend_port_channels=dst_backend_port_channels, + ) - dst_prefix = selecting_route_to_delete(dut_asic_static_routes, dst_asic_next_hops.values()) - request.config.dst_prefix = dst_prefix - assert dst_prefix is not None and dst_prefix != "", "Destination prefix not found" + assert len(src_asic_next_hops) != 0, "Source next hops are empty" + dst_asic_next_hops = extract_ip_addresses_for_backend_portchannels( + src_dut, + src_asic, + version, + backend_port_channels=src_backend_port_channels, + ) - return src_asic_next_hops, dst_asic_next_hops, src_prefix, dst_prefix + assert len(dst_asic_next_hops) != 0, "Destination next hops are empty" + return src_asic_next_hops, dst_asic_next_hops def get_port_channel_by_member(backend_port_channels, member): @@ -656,6 +661,7 @@ def toggle_port_channel_or_member( ): request.config.portchannels_on_dut = "dut" request.config.selected_portchannels = [target_to_toggle] + request.config.dut = dut request.config.asic = asic batch_control_interface_state(dut, asic, [target_to_toggle], action) @@ -670,13 +676,14 @@ def assert_bp_iface_after_shutdown( dst_bp_iface_after_shutdown, src_asic_index, dst_asic_index, - dut_hostname, + src_dut_hostname, + dst_dut_hostname, ): if src_bp_iface_before_shutdown == src_bp_iface_after_shutdown: pytest.fail( "Source backend interface in use on asic{} of dut {} does not change after shutdown".format( src_asic_index, - dut_hostname, + src_dut_hostname, ) ) @@ -684,7 +691,7 @@ def assert_bp_iface_after_shutdown( pytest.fail( "Destination backend interface in use on asic{} of dut {} does not change after shutdown".format( dst_asic_index, - dut_hostname, + dst_dut_hostname, ) ) @@ -696,13 +703,14 @@ def assert_port_channel_after_shutdown( dst_port_channel_after_shutdown, src_asic_index, dst_asic_index, - dut_hostname, + src_dut_hostname, + dst_dut_hostname, ): if src_port_channel_before_shutdown == src_port_channel_after_shutdown: pytest.fail( "Source port channel in use on asic{} of dut {} does not change after shutdown".format( src_asic_index, - dut_hostname, + src_dut_hostname, ) ) @@ -710,7 +718,7 @@ def assert_port_channel_after_shutdown( pytest.fail( "Destination port channel in use on asic{} of dut {} does not change after shutdown".format( dst_asic_index, - dut_hostname, + dst_dut_hostname, ) ) @@ -722,7 +730,7 @@ def verify_given_bfd_state(asic_next_hops, port_channel, asic_index, dut, expect def wait_until_given_bfd_down(next_hops, port_channel, asic_index, dut): assert wait_until( - 300, + 450, 10, 0, lambda: verify_given_bfd_state(next_hops, port_channel, asic_index, dut, "Down"), @@ -730,8 +738,10 @@ def wait_until_given_bfd_down(next_hops, port_channel, asic_index, dut): def assert_traffic_switching( - dut, - backend_port_channels, + src_dut, + dst_dut, + src_backend_port_channels, + dst_backend_port_channels, src_asic_index, src_bp_iface_before_shutdown, src_bp_iface_after_shutdown, @@ -748,16 +758,17 @@ def assert_traffic_switching( dst_bp_iface_after_shutdown, src_asic_index, dst_asic_index, - dut.hostname, + src_dut.hostname, + dst_dut.hostname, ) src_port_channel_after_shutdown = get_port_channel_by_member( - backend_port_channels, + src_backend_port_channels, src_bp_iface_after_shutdown, ) dst_port_channel_after_shutdown = get_port_channel_by_member( - backend_port_channels, + dst_backend_port_channels, dst_bp_iface_after_shutdown, ) @@ -768,5 +779,22 @@ def assert_traffic_switching( dst_port_channel_after_shutdown, src_asic_index, dst_asic_index, - dut.hostname, + src_dut.hostname, + dst_dut.hostname, ) + + +def get_upstream_and_downstream_dut_pool(frontend_nodes): + upstream_dut_pool = [] + downstream_dut_pool = [] + for node in frontend_nodes: + bgp_neighbors = node.get_bgp_neighbors() + for neighbor_info in bgp_neighbors.values(): + if "t3" in neighbor_info["description"].lower(): + upstream_dut_pool.append(node) + break + elif "t1" in neighbor_info["description"].lower(): + downstream_dut_pool.append(node) + break + + return upstream_dut_pool, downstream_dut_pool diff --git a/tests/bfd/conftest.py b/tests/bfd/conftest.py index 7892b067991..fcabab697a8 100644 --- a/tests/bfd/conftest.py +++ b/tests/bfd/conftest.py @@ -48,27 +48,25 @@ def bfd_cleanup_db(request, duthosts, enum_supervisor_dut_hostname): # 120, 4, 0, check_orch_cpu_utilization, dut, orch_cpu_threshold # ), "Orch CPU utilization exceeds orch cpu threshold {} after finishing the test".format(orch_cpu_threshold) - logger.info("Verifying swss container status on RP") rp = duthosts[enum_supervisor_dut_hostname] container_status = True if hasattr(request.config, "rp_asic_ids"): + logger.info("Verifying swss container status on RP") for id in request.config.rp_asic_ids: docker_output = rp.shell( "docker ps | grep swss{} | awk '{{print $NF}}'".format(id) )["stdout"] if len(docker_output) == 0: container_status = False + if not container_status: - config_reload(rp) + logger.error("swss container is not running on RP, so running config reload") + config_reload(rp, safe_reload=True) if hasattr(request.config, "src_dut") and hasattr(request.config, "dst_dut"): clear_bfd_configs(request.config.src_dut, request.config.src_asic.asic_index, request.config.src_prefix) clear_bfd_configs(request.config.dst_dut, request.config.dst_asic.asic_index, request.config.dst_prefix) - elif hasattr(request.config, "dut"): - clear_bfd_configs(request.config.dut, request.config.src_asic.asic_index, request.config.src_prefix) - clear_bfd_configs(request.config.dut, request.config.dst_asic.asic_index, request.config.dst_prefix) - logger.info("Bringing up portchannels or respective members") portchannels_on_dut = None if hasattr(request.config, "portchannels_on_dut"): portchannels_on_dut = request.config.portchannels_on_dut @@ -77,12 +75,10 @@ def bfd_cleanup_db(request, duthosts, enum_supervisor_dut_hostname): portchannels_on_dut = request.config.portchannels_on_dut selected_interfaces = request.config.selected_portchannel_members else: - logger.info( - "None of the portchannels are selected to flap. So skipping portchannel interface check" - ) selected_interfaces = [] if selected_interfaces: + logger.info("Bringing up portchannels or respective members") if portchannels_on_dut == "src": dut = request.config.src_dut elif portchannels_on_dut == "dst": @@ -98,3 +94,7 @@ def bfd_cleanup_db(request, duthosts, enum_supervisor_dut_hostname): asic = request.config.asic ensure_interfaces_are_up(dut, asic, selected_interfaces) + else: + logger.info( + "None of the portchannels are selected to flap. So skipping portchannel interface check" + ) diff --git a/tests/bfd/test_bfd.py b/tests/bfd/test_bfd.py index 43d95e629a9..5ffaf30ce4f 100644 --- a/tests/bfd/test_bfd.py +++ b/tests/bfd/test_bfd.py @@ -108,21 +108,24 @@ def get_neighbors_scale(duthost, tbinfo, ipv6=False, scale_count=1): neighbor_devs = [] ptf_devs = [] index = 0 + # The arrays: neighbor_intfs and ptf_intfs are filled only upto 128. + # Beyond that we need to re-use the same addresses. We do this by + # using the modulus(% operation) instead of the actual index intself. for idx in range(1, scale_count): if idx != 0 and idx % 127 == 0: index += 1 if ipv6: local_addrs.append(t1_ipv6_pattern.format(idx * 2)) neighbor_addrs.append(t1_ipv6_pattern.format(idx * 2 + 1)) - neighbor_devs.append(neighbor_intfs[index]) - ptf_devs.append(ptf_intfs[index]) + neighbor_devs.append(neighbor_intfs[index % len(neighbor_intfs)]) + ptf_devs.append(ptf_intfs[index % len(ptf_intfs)]) else: rolloveridx = idx % 125 idx2 = idx // 125 local_addrs.append(t1_ipv4_pattern.format(idx2, rolloveridx * 2)) neighbor_addrs.append(t1_ipv4_pattern.format(idx2, rolloveridx * 2 + 1)) - neighbor_devs.append(neighbor_intfs[index]) - ptf_devs.append(ptf_intfs[index]) + neighbor_devs.append(neighbor_intfs[index % len(neighbor_intfs)]) + ptf_devs.append(ptf_intfs[index % len(ptf_intfs)]) prefix = 127 if ipv6 else 31 return local_addrs, prefix, neighbor_addrs, neighbor_devs, ptf_devs @@ -311,11 +314,17 @@ def create_bfd_sessions_multihop(ptfhost, duthost, loopback_addr, ptf_intf, neig extra_vars = {"bfd_responder_args": "-c {}".format(ptf_file_dir)} ptfhost.host.options["variable_manager"].extra_vars.update(extra_vars) - - ptfhost.template(src='templates/bfd_responder.conf.j2', dest='/etc/supervisor/conf.d/bfd_responder.conf') - ptfhost.command('supervisorctl reread') - ptfhost.command('supervisorctl update') - ptfhost.command('supervisorctl restart bfd_responder') + try: + ptfhost.template(src='templates/bfd_responder.conf.j2', dest='/etc/supervisor/conf.d/bfd_responder.conf') + ptfhost.command('supervisorctl reread') + ptfhost.command('supervisorctl update') + ptfhost.command('supervisorctl restart bfd_responder') + except Exception as e: + logger.error('Failed to start bfd_responder, exception: {}'.format(str(e))) + logger.debug("Debug bfd_responder") + ptfhost.command('supervisorctl tail bfd_responder stderr') + ptfhost.command('cat /tmp/bfd_responder.err.log') + raise e logger.info("Waiting for bfd session to be in Up state") time.sleep(30) temp = duthost.shell('show bfd summary') diff --git a/tests/bfd/test_bfd_traffic.py b/tests/bfd/test_bfd_traffic.py index fd3aa77d614..a3eba1c5ffd 100644 --- a/tests/bfd/test_bfd_traffic.py +++ b/tests/bfd/test_bfd_traffic.py @@ -1,11 +1,12 @@ import logging +import random import pytest -from tests.bfd.bfd_base import BfdBase from tests.bfd.bfd_helpers import get_ptf_src_port, get_backend_interface_in_use_by_counter, \ get_random_bgp_neighbor_ip_of_asic, toggle_port_channel_or_member, get_port_channel_by_member, \ - wait_until_given_bfd_down, assert_traffic_switching, create_and_verify_bfd_state, verify_bfd_only + wait_until_given_bfd_down, assert_traffic_switching, verify_bfd_only, extract_backend_portchannels, \ + get_src_dst_asic_next_hops, get_upstream_and_downstream_dut_pool from tests.common.helpers.multi_thread_utils import SafeThreadPoolExecutor pytestmark = [ @@ -16,45 +17,115 @@ logger = logging.getLogger(__name__) -class TestBfdTraffic(BfdBase): +class TestBfdTraffic: PACKET_COUNT = 10000 - def test_bfd_traffic_remote_port_channel_shutdown( - self, - request, - tbinfo, - ptfadapter, - prepare_traffic_test_variables, - bfd_cleanup_db, - ): - dut = prepare_traffic_test_variables["dut"] + @pytest.fixture(scope="class") + def get_src_dst_asic(self, request, duthosts): + if not duthosts.frontend_nodes: + pytest.skip("DUT does not have any frontend nodes") + + src_dut_pool, dst_dut_pool = get_upstream_and_downstream_dut_pool(duthosts.frontend_nodes) + if not src_dut_pool or not dst_dut_pool: + pytest.skip("No upstream or downstream DUTs found") + + src_dut_index = random.choice(list(range(len(src_dut_pool)))) + dst_dut_index = random.choice(list(range(len(dst_dut_pool)))) + src_dut = src_dut_pool[src_dut_index] + dst_dut = dst_dut_pool[dst_dut_index] + src_asic_namespace_list = src_dut.get_asic_namespace_list() + dst_asic_namespace_list = dst_dut.get_asic_namespace_list() + if not src_asic_namespace_list or not dst_asic_namespace_list: + pytest.skip("No asic namespaces found on source or destination DUT") + + src_asic_namespace = random.choice(src_asic_namespace_list) + dst_asic_namespace = random.choice(dst_asic_namespace_list) + src_asic_index = int(src_asic_namespace.split("asic")[1]) + dst_asic_index = int(dst_asic_namespace.split("asic")[1]) + src_asic = src_dut.asics[src_asic_index] + dst_asic = dst_dut.asics[dst_asic_index] + + yield { + "src_dut": src_dut, + "src_asic": src_asic, + "src_asic_index": src_asic_index, + "dst_dut": dst_dut, + "dst_asic": dst_asic, + "dst_asic_index": dst_asic_index, + } + + @pytest.fixture(scope="class", params=["ipv4", "ipv6"]) + def prepare_traffic_test_variables(self, get_src_dst_asic, request): + version = request.param + logger.info("Version: %s", version) + + src_dut = get_src_dst_asic["src_dut"] + src_asic = get_src_dst_asic["src_asic"] + src_asic_index = get_src_dst_asic["src_asic_index"] + dst_dut = get_src_dst_asic["dst_dut"] + dst_asic = get_src_dst_asic["dst_asic"] + dst_asic_index = get_src_dst_asic["dst_asic_index"] + logger.info( + "src_dut: {}, src_asic_index: {}, dst_dut: {}, dst_asic_index: {}".format( + src_dut.hostname, + src_asic_index, + dst_dut.hostname, + dst_asic_index, + ) + ) + + src_backend_port_channels = extract_backend_portchannels(src_dut) + dst_backend_port_channels = extract_backend_portchannels(dst_dut) + src_asic_next_hops, dst_asic_next_hops = get_src_dst_asic_next_hops( + version, + src_dut, + src_asic, + src_backend_port_channels, + dst_dut, + dst_asic, + dst_backend_port_channels, + ) + + src_asic_router_mac = src_asic.get_router_mac() + + yield { + "src_dut": src_dut, + "src_asic": src_asic, + "src_asic_index": src_asic_index, + "dst_dut": dst_dut, + "dst_asic": dst_asic, + "dst_asic_index": dst_asic_index, + "src_asic_next_hops": src_asic_next_hops, + "dst_asic_next_hops": dst_asic_next_hops, + "src_asic_router_mac": src_asic_router_mac, + "src_backend_port_channels": src_backend_port_channels, + "dst_backend_port_channels": dst_backend_port_channels, + "version": version, + } + + def test_bfd_traffic_remote_port_channel_shutdown(self, request, tbinfo, ptfadapter, + prepare_traffic_test_variables, bfd_cleanup_db): + src_dut = prepare_traffic_test_variables["src_dut"] src_asic = prepare_traffic_test_variables["src_asic"] src_asic_index = prepare_traffic_test_variables["src_asic_index"] + dst_dut = prepare_traffic_test_variables["dst_dut"] dst_asic = prepare_traffic_test_variables["dst_asic"] dst_asic_index = prepare_traffic_test_variables["dst_asic_index"] src_asic_next_hops = prepare_traffic_test_variables["src_asic_next_hops"] dst_asic_next_hops = prepare_traffic_test_variables["dst_asic_next_hops"] - src_prefix = prepare_traffic_test_variables["src_prefix"] - dst_prefix = prepare_traffic_test_variables["dst_prefix"] src_asic_router_mac = prepare_traffic_test_variables["src_asic_router_mac"] - backend_port_channels = prepare_traffic_test_variables["backend_port_channels"] + src_backend_port_channels = prepare_traffic_test_variables["src_backend_port_channels"] + dst_backend_port_channels = prepare_traffic_test_variables["dst_backend_port_channels"] version = prepare_traffic_test_variables["version"] - src_dst_context = [ - ("src", src_asic, src_prefix, src_asic_next_hops), - ("dst", dst_asic, dst_prefix, dst_asic_next_hops), - ] - - with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, prefix, next_hops in src_dst_context: - executor.submit(create_and_verify_bfd_state, asic, prefix, dut, next_hops) - dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dut, dst_asic_index, version) + dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dst_dut, dst_asic_index, version) if not dst_neighbor_ip: - pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dut.hostname)) + pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dst_dut.hostname)) ptf_src_port = get_ptf_src_port(src_asic, tbinfo) src_bp_iface_before_shutdown, dst_bp_iface_before_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -66,7 +137,7 @@ def test_bfd_traffic_remote_port_channel_shutdown( ) dst_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + dst_backend_port_channels, dst_bp_iface_before_shutdown, ) @@ -75,26 +146,27 @@ def test_bfd_traffic_remote_port_channel_shutdown( toggle_port_channel_or_member( dst_port_channel_before_shutdown, - dut, + dst_dut, dst_asic, request, "shutdown", ) src_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + src_backend_port_channels, src_bp_iface_before_shutdown, ) with SafeThreadPoolExecutor(max_workers=8) as executor: - for next_hops, port_channel, asic_index in [ - (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index), - (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index), + for next_hops, port_channel, asic_index, dut in [ + (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index, src_dut), + (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index, dst_dut), ]: executor.submit(wait_until_given_bfd_down, next_hops, port_channel, asic_index, dut) src_bp_iface_after_shutdown, dst_bp_iface_after_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -106,8 +178,10 @@ def test_bfd_traffic_remote_port_channel_shutdown( ) assert_traffic_switching( - dut, - backend_port_channels, + src_dut, + dst_dut, + src_backend_port_channels, + dst_backend_port_channels, src_asic_index, src_bp_iface_before_shutdown, src_bp_iface_after_shutdown, @@ -120,52 +194,42 @@ def test_bfd_traffic_remote_port_channel_shutdown( toggle_port_channel_or_member( dst_port_channel_before_shutdown, - dut, + dst_dut, dst_asic, request, "startup", ) with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, _, next_hops in src_dst_context: + for dut, next_hops, asic in [ + (src_dut, src_asic_next_hops, src_asic), + (dst_dut, dst_asic_next_hops, dst_asic), + ]: executor.submit(verify_bfd_only, dut, next_hops, asic, "Up") - def test_bfd_traffic_local_port_channel_shutdown( - self, - request, - tbinfo, - ptfadapter, - prepare_traffic_test_variables, - bfd_cleanup_db, - ): - dut = prepare_traffic_test_variables["dut"] + def test_bfd_traffic_local_port_channel_shutdown(self, request, tbinfo, ptfadapter, + prepare_traffic_test_variables, bfd_cleanup_db): + src_dut = prepare_traffic_test_variables["src_dut"] src_asic = prepare_traffic_test_variables["src_asic"] src_asic_index = prepare_traffic_test_variables["src_asic_index"] + dst_dut = prepare_traffic_test_variables["dst_dut"] dst_asic = prepare_traffic_test_variables["dst_asic"] dst_asic_index = prepare_traffic_test_variables["dst_asic_index"] src_asic_next_hops = prepare_traffic_test_variables["src_asic_next_hops"] dst_asic_next_hops = prepare_traffic_test_variables["dst_asic_next_hops"] - src_prefix = prepare_traffic_test_variables["src_prefix"] - dst_prefix = prepare_traffic_test_variables["dst_prefix"] src_asic_router_mac = prepare_traffic_test_variables["src_asic_router_mac"] - backend_port_channels = prepare_traffic_test_variables["backend_port_channels"] + src_backend_port_channels = prepare_traffic_test_variables["src_backend_port_channels"] + dst_backend_port_channels = prepare_traffic_test_variables["dst_backend_port_channels"] version = prepare_traffic_test_variables["version"] - src_dst_context = [ - ("src", src_asic, src_prefix, src_asic_next_hops), - ("dst", dst_asic, dst_prefix, dst_asic_next_hops), - ] - - with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, prefix, next_hops in src_dst_context: - executor.submit(create_and_verify_bfd_state, asic, prefix, dut, next_hops) - dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dut, dst_asic_index, version) + dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dst_dut, dst_asic_index, version) if not dst_neighbor_ip: - pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dut.hostname)) + pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dst_dut.hostname)) ptf_src_port = get_ptf_src_port(src_asic, tbinfo) src_bp_iface_before_shutdown, dst_bp_iface_before_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -177,7 +241,7 @@ def test_bfd_traffic_local_port_channel_shutdown( ) src_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + src_backend_port_channels, src_bp_iface_before_shutdown, ) @@ -186,26 +250,27 @@ def test_bfd_traffic_local_port_channel_shutdown( toggle_port_channel_or_member( src_port_channel_before_shutdown, - dut, + src_dut, src_asic, request, "shutdown", ) dst_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + dst_backend_port_channels, dst_bp_iface_before_shutdown, ) with SafeThreadPoolExecutor(max_workers=8) as executor: - for next_hops, port_channel, asic_index in [ - (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index), - (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index), + for next_hops, port_channel, asic_index, dut in [ + (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index, src_dut), + (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index, dst_dut), ]: executor.submit(wait_until_given_bfd_down, next_hops, port_channel, asic_index, dut) src_bp_iface_after_shutdown, dst_bp_iface_after_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -217,8 +282,10 @@ def test_bfd_traffic_local_port_channel_shutdown( ) assert_traffic_switching( - dut, - backend_port_channels, + src_dut, + dst_dut, + src_backend_port_channels, + dst_backend_port_channels, src_asic_index, src_bp_iface_before_shutdown, src_bp_iface_after_shutdown, @@ -231,52 +298,42 @@ def test_bfd_traffic_local_port_channel_shutdown( toggle_port_channel_or_member( src_port_channel_before_shutdown, - dut, + src_dut, src_asic, request, "startup", ) with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, _, next_hops in src_dst_context: + for dut, next_hops, asic in [ + (src_dut, src_asic_next_hops, src_asic), + (dst_dut, dst_asic_next_hops, dst_asic), + ]: executor.submit(verify_bfd_only, dut, next_hops, asic, "Up") - def test_bfd_traffic_remote_port_channel_member_shutdown( - self, - request, - tbinfo, - ptfadapter, - prepare_traffic_test_variables, - bfd_cleanup_db, - ): - dut = prepare_traffic_test_variables["dut"] + def test_bfd_traffic_remote_port_channel_member_shutdown(self, request, tbinfo, ptfadapter, + prepare_traffic_test_variables, bfd_cleanup_db): + src_dut = prepare_traffic_test_variables["src_dut"] src_asic = prepare_traffic_test_variables["src_asic"] src_asic_index = prepare_traffic_test_variables["src_asic_index"] + dst_dut = prepare_traffic_test_variables["dst_dut"] dst_asic = prepare_traffic_test_variables["dst_asic"] dst_asic_index = prepare_traffic_test_variables["dst_asic_index"] src_asic_next_hops = prepare_traffic_test_variables["src_asic_next_hops"] dst_asic_next_hops = prepare_traffic_test_variables["dst_asic_next_hops"] - src_prefix = prepare_traffic_test_variables["src_prefix"] - dst_prefix = prepare_traffic_test_variables["dst_prefix"] src_asic_router_mac = prepare_traffic_test_variables["src_asic_router_mac"] - backend_port_channels = prepare_traffic_test_variables["backend_port_channels"] + src_backend_port_channels = prepare_traffic_test_variables["src_backend_port_channels"] + dst_backend_port_channels = prepare_traffic_test_variables["dst_backend_port_channels"] version = prepare_traffic_test_variables["version"] - src_dst_context = [ - ("src", src_asic, src_prefix, src_asic_next_hops), - ("dst", dst_asic, dst_prefix, dst_asic_next_hops), - ] - - with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, prefix, next_hops in src_dst_context: - executor.submit(create_and_verify_bfd_state, asic, prefix, dut, next_hops) - dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dut, dst_asic_index, version) + dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dst_dut, dst_asic_index, version) if not dst_neighbor_ip: - pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dut.hostname)) + pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dst_dut.hostname)) ptf_src_port = get_ptf_src_port(src_asic, tbinfo) src_bp_iface_before_shutdown, dst_bp_iface_before_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -287,36 +344,37 @@ def test_bfd_traffic_remote_port_channel_member_shutdown( dst_asic_index, ) - toggle_port_channel_or_member( - dst_bp_iface_before_shutdown, - dut, - dst_asic, - request, - "shutdown", - ) - src_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + src_backend_port_channels, src_bp_iface_before_shutdown, ) dst_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + dst_backend_port_channels, dst_bp_iface_before_shutdown, ) if not src_port_channel_before_shutdown or not dst_port_channel_before_shutdown: pytest.fail("No port channel found with interface in use") + toggle_port_channel_or_member( + dst_bp_iface_before_shutdown, + dst_dut, + dst_asic, + request, + "shutdown", + ) + with SafeThreadPoolExecutor(max_workers=8) as executor: - for next_hops, port_channel, asic_index in [ - (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index), - (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index), + for next_hops, port_channel, asic_index, dut in [ + (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index, src_dut), + (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index, dst_dut), ]: executor.submit(wait_until_given_bfd_down, next_hops, port_channel, asic_index, dut) src_bp_iface_after_shutdown, dst_bp_iface_after_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -328,8 +386,10 @@ def test_bfd_traffic_remote_port_channel_member_shutdown( ) assert_traffic_switching( - dut, - backend_port_channels, + src_dut, + dst_dut, + src_backend_port_channels, + dst_backend_port_channels, src_asic_index, src_bp_iface_before_shutdown, src_bp_iface_after_shutdown, @@ -342,52 +402,42 @@ def test_bfd_traffic_remote_port_channel_member_shutdown( toggle_port_channel_or_member( dst_bp_iface_before_shutdown, - dut, + dst_dut, dst_asic, request, "startup", ) with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, _, next_hops in src_dst_context: + for dut, next_hops, asic in [ + (src_dut, src_asic_next_hops, src_asic), + (dst_dut, dst_asic_next_hops, dst_asic), + ]: executor.submit(verify_bfd_only, dut, next_hops, asic, "Up") - def test_bfd_traffic_local_port_channel_member_shutdown( - self, - request, - tbinfo, - ptfadapter, - prepare_traffic_test_variables, - bfd_cleanup_db, - ): - dut = prepare_traffic_test_variables["dut"] + def test_bfd_traffic_local_port_channel_member_shutdown(self, request, tbinfo, ptfadapter, + prepare_traffic_test_variables, bfd_cleanup_db): + src_dut = prepare_traffic_test_variables["src_dut"] src_asic = prepare_traffic_test_variables["src_asic"] src_asic_index = prepare_traffic_test_variables["src_asic_index"] + dst_dut = prepare_traffic_test_variables["dst_dut"] dst_asic = prepare_traffic_test_variables["dst_asic"] dst_asic_index = prepare_traffic_test_variables["dst_asic_index"] src_asic_next_hops = prepare_traffic_test_variables["src_asic_next_hops"] dst_asic_next_hops = prepare_traffic_test_variables["dst_asic_next_hops"] - src_prefix = prepare_traffic_test_variables["src_prefix"] - dst_prefix = prepare_traffic_test_variables["dst_prefix"] src_asic_router_mac = prepare_traffic_test_variables["src_asic_router_mac"] - backend_port_channels = prepare_traffic_test_variables["backend_port_channels"] + src_backend_port_channels = prepare_traffic_test_variables["src_backend_port_channels"] + dst_backend_port_channels = prepare_traffic_test_variables["dst_backend_port_channels"] version = prepare_traffic_test_variables["version"] - src_dst_context = [ - ("src", src_asic, src_prefix, src_asic_next_hops), - ("dst", dst_asic, dst_prefix, dst_asic_next_hops), - ] - with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, prefix, next_hops in src_dst_context: - executor.submit(create_and_verify_bfd_state, asic, prefix, dut, next_hops) - - dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dut, dst_asic_index, version) + dst_neighbor_ip = get_random_bgp_neighbor_ip_of_asic(dst_dut, dst_asic_index, version) if not dst_neighbor_ip: - pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dut.hostname)) + pytest.skip("No BGP neighbor found on asic{} of dut {}".format(dst_asic_index, dst_dut.hostname)) ptf_src_port = get_ptf_src_port(src_asic, tbinfo) src_bp_iface_before_shutdown, dst_bp_iface_before_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -398,36 +448,37 @@ def test_bfd_traffic_local_port_channel_member_shutdown( dst_asic_index, ) - toggle_port_channel_or_member( - src_bp_iface_before_shutdown, - dut, - src_asic, - request, - "shutdown", - ) - src_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + src_backend_port_channels, src_bp_iface_before_shutdown, ) dst_port_channel_before_shutdown = get_port_channel_by_member( - backend_port_channels, + dst_backend_port_channels, dst_bp_iface_before_shutdown, ) if not src_port_channel_before_shutdown or not dst_port_channel_before_shutdown: pytest.fail("No port channel found with interface in use") + toggle_port_channel_or_member( + src_bp_iface_before_shutdown, + src_dut, + src_asic, + request, + "shutdown", + ) + with SafeThreadPoolExecutor(max_workers=8) as executor: - for next_hops, port_channel, asic_index in [ - (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index), - (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index), + for next_hops, port_channel, asic_index, dut in [ + (src_asic_next_hops, dst_port_channel_before_shutdown, src_asic_index, src_dut), + (dst_asic_next_hops, src_port_channel_before_shutdown, dst_asic_index, dst_dut), ]: executor.submit(wait_until_given_bfd_down, next_hops, port_channel, asic_index, dut) src_bp_iface_after_shutdown, dst_bp_iface_after_shutdown = get_backend_interface_in_use_by_counter( - dut, + src_dut, + dst_dut, self.PACKET_COUNT, version, src_asic_router_mac, @@ -439,8 +490,10 @@ def test_bfd_traffic_local_port_channel_member_shutdown( ) assert_traffic_switching( - dut, - backend_port_channels, + src_dut, + dst_dut, + src_backend_port_channels, + dst_backend_port_channels, src_asic_index, src_bp_iface_before_shutdown, src_bp_iface_after_shutdown, @@ -453,12 +506,15 @@ def test_bfd_traffic_local_port_channel_member_shutdown( toggle_port_channel_or_member( src_bp_iface_before_shutdown, - dut, + src_dut, src_asic, request, "startup", ) with SafeThreadPoolExecutor(max_workers=8) as executor: - for _, asic, _, next_hops in src_dst_context: + for dut, next_hops, asic in [ + (src_dut, src_asic_next_hops, src_asic), + (dst_dut, dst_asic_next_hops, dst_asic), + ]: executor.submit(verify_bfd_only, dut, next_hops, asic, "Up") diff --git a/tests/bgp/bgp_helpers.py b/tests/bgp/bgp_helpers.py index 2eb7e391f61..d14770146c9 100644 --- a/tests/bgp/bgp_helpers.py +++ b/tests/bgp/bgp_helpers.py @@ -291,7 +291,7 @@ def update_routes(action, ptfip, port, route): url = 'http://%s:%d' % (ptfip, port) data = {'commands': msg} logging.info('Post url={}, data={}'.format(url, data)) - r = requests.post(url, data=data) + r = requests.post(url, data=data, proxies={"http": None, "https": None}) assert r.status_code == 200 @@ -843,7 +843,7 @@ def fetch_and_delete_pcap_file(bgp_pcap, log_dir, duthost, request): log_dir, LOCAL_PCAP_FILE_TEMPLATE % request.node.name ) else: - local_pcap_file = tempfile.NamedTemporaryFile() + local_pcap_file = tempfile.NamedTemporaryFile(delete=False) local_pcap_filename = local_pcap_file.name duthost.fetch(src=bgp_pcap, dest=local_pcap_filename, flat=True) duthost.file(path=bgp_pcap, state="absent") diff --git a/tests/bgp/test_4-byte_asn_community.py b/tests/bgp/test_4-byte_asn_community.py index d58e2a60805..6fad41c7699 100644 --- a/tests/bgp/test_4-byte_asn_community.py +++ b/tests/bgp/test_4-byte_asn_community.py @@ -206,8 +206,8 @@ def setup_ceos(tbinfo, nbrhosts, duthosts, enum_frontend_dut_hostname, enum_rand # verify sessions are established and gather neighbor information for k, v in bgp_facts['bgp_neighbors'].items(): - # skip internal neighbors to other 'asic' namespaces - if 'asic' not in v['description'].lower(): + # skip iBGP neighbors + if "INTERNAL" not in v["peer group"] and "VOQ_CHASSIS" not in v["peer group"]: if v['description'] == neigh: if v['ip_version'] == 4: neigh_ip_v4 = k @@ -493,7 +493,12 @@ def run_bgp_4_byte_asn_community_sonic(setup): output = setup['duthost'].shell("show ip bgp neighbors {} routes".format(setup['neigh_ip_v4']))['stdout'] assert str(neighbor_4byte_asn) in str(output.split('\n')[9].split()[5]) output = setup['duthost'].shell("show ipv6 bgp neighbors {} routes".format(setup['neigh_ip_v6'].lower()))['stdout'] - assert str(neighbor_4byte_asn) in str(output.split('\n')[9].split()[5]) + # Command output 'show ipv6 bgp neighbors routes' may split into two lines, hence checking both the lines + # Network Next Hop Metric LocPrf Weight Path + # *> 2064:100::1/128 fe80::4cc2:44ff:feee:73ff + # 0 400001 i + assert (str(neighbor_4byte_asn) in str(output.split('\n')[9]) or + str(neighbor_4byte_asn) in str(output.split('\n')[10])) output = setup['neighhost'].shell("show ip bgp summary | grep {}".format(setup['dut_ip_v4']))['stdout'] assert str(dut_4byte_asn) in output.split()[2] diff --git a/tests/bgp/test_bgp_bbr.py b/tests/bgp/test_bgp_bbr.py index 281968d5648..513a25ee635 100644 --- a/tests/bgp/test_bgp_bbr.py +++ b/tests/bgp/test_bgp_bbr.py @@ -22,6 +22,7 @@ from tests.common.utilities import wait_until, delete_running_config from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic pytestmark = [ @@ -75,6 +76,7 @@ def add_bbr_config_to_running_config(duthost, status): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -97,6 +99,7 @@ def config_bbr_by_gcu(duthost, status): "value": "{}".format(status) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -271,7 +274,7 @@ def update_routes(action, ptfip, port, route): return url = 'http://%s:%d' % (ptfip, port) data = {'commands': msg} - r = requests.post(url, data=data) + r = requests.post(url, data=data, proxies={"http": None, "https": None}) assert r.status_code == 200 @@ -438,6 +441,7 @@ def test_bbr_disabled_dut_asn_in_aspath(duthosts, rand_one_dut_hostname, nbrhost @pytest.mark.parametrize('bbr_status', ['enabled', 'disabled']) +@pytest.mark.disable_loganalyzer def test_bbr_status_consistent_after_reload(duthosts, rand_one_dut_hostname, setup, bbr_status, restore_bbr_default_state): duthost = duthosts[rand_one_dut_hostname] diff --git a/tests/bgp/test_bgp_bbr_default_state.py b/tests/bgp/test_bgp_bbr_default_state.py index bf6019c671b..427dc3f093f 100644 --- a/tests/bgp/test_bgp_bbr_default_state.py +++ b/tests/bgp/test_bgp_bbr_default_state.py @@ -11,6 +11,7 @@ from tests.common.utilities import delete_running_config from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.config_reload import config_reload @@ -54,6 +55,7 @@ def add_bbr_config_to_running_config(duthost, status): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) try: @@ -73,6 +75,7 @@ def config_bbr_by_gcu(duthost, status): "value": "{}".format(status) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) try: @@ -126,8 +129,13 @@ def setup(duthosts, rand_one_dut_hostname, tbinfo, nbrhosts): return setup_info -def test_bbr_disabled_constants_yml_default(duthosts, rand_one_dut_hostname, setup, config_bbr_disabled): +def test_bbr_disabled_constants_yml_default(duthosts, rand_one_dut_hostname, setup, config_bbr_disabled, loganalyzer): duthost = duthosts[rand_one_dut_hostname] + if duthost.sonichost.facts['platform_asic'] == 'broadcom': + ignore_regex = r".* ERR swss#orchagent:\s*.*\s*queryAattributeEnumValuesCapability:\s*returned value " \ + r"\d+ is not allowed on SAI_SWITCH_ATTR_(?:ECMP|LAG)_DEFAULT_HASH_ALGORITHM.*" + loganalyzer[duthost.hostname].ignore_regex.extend([ignore_regex]) + duthost.shell("sudo config save -y") config_reload(duthost) is_bbr_enabled = duthost.shell("show runningconfiguration bgp | grep allowas", module_ignore_errors=True)['stdout'] diff --git a/tests/bgp/test_bgp_dual_asn.py b/tests/bgp/test_bgp_dual_asn.py index 9ad279d95f2..45b1e1b5a00 100644 --- a/tests/bgp/test_bgp_dual_asn.py +++ b/tests/bgp/test_bgp_dual_asn.py @@ -12,9 +12,10 @@ from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert from bgp_helpers import update_routes -from tests.generic_config_updater.test_bgp_speaker import get_bgp_speaker_runningconfig +from tests.common.gu_utils import get_bgp_speaker_runningconfig from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import ( create_checkpoint, delete_checkpoint, @@ -367,6 +368,7 @@ def bgp_peer_range_add_config( } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -402,6 +404,7 @@ def bgp_peer_range_delete_config( {"op": "remove", "path": "/BGP_PEER_RANGE/{}".format(ip_range_name)}, {"op": "remove", "path": "/BGP_PEER_RANGE/{}".format(ipv6_range_name)}, ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/bgp/test_bgp_queue.py b/tests/bgp/test_bgp_queue.py index a87f58f107e..88ff7b50387 100644 --- a/tests/bgp/test_bgp_queue.py +++ b/tests/bgp/test_bgp_queue.py @@ -19,7 +19,8 @@ def get_queue_counters(asichost, port, queue): Return the counter for a given queue in given port """ cmd = "show queue counters {}".format(port) - output = asichost.command(cmd)['stdout_lines'] + output = asichost.command(cmd, new_format=True)['stdout_lines'] + txq = "UC{}".format(queue) for line in output: fields = line.split() @@ -60,8 +61,11 @@ def test_bgp_queues(duthosts, enum_frontend_dut_hostname, enum_asic_index, tbinf # Only consider established bgp sessions if v['state'] == 'established': # For "peer group" if it's internal it will be "INTERNAL_PEER_V4" or "INTERNAL_PEER_V6" + # or "VOQ_CHASSIS_PEER_V4" or "VOQ_CHASSIS_PEER_V6" for VOQ_CHASSIS # If it's external it will be "RH_V4", "RH_V6", "AH_V4", "AH_V6", ... - if "INTERNAL" in v["peer group"] and duthost.get_facts().get('modular_chassis'): + # Skip internal neighbors for VOQ_CHASSIS until BRCM fixes iBGP traffic in 2024011 + if ("INTERNAL" in v["peer group"] or 'VOQ_CHASSIS' in v["peer group"]) and \ + duthost.get_facts().get('modular_chassis'): # Skip iBGP neighbors since we only want to verify eBGP continue assert (k in arp_dict.keys() or k in ndp_dict.keys()) diff --git a/tests/bgp/test_bgp_sentinel.py b/tests/bgp/test_bgp_sentinel.py index 315bb3fb762..47d5500ca32 100644 --- a/tests/bgp/test_bgp_sentinel.py +++ b/tests/bgp/test_bgp_sentinel.py @@ -321,7 +321,7 @@ def change_route(operation, ptfip, neighbor, route, nexthop, port, community): url = "http://%s:%d" % (ptfip, port) data = {"command": "neighbor %s %s route %s next-hop %s local-preference 10000 community [%s]" % (neighbor, operation, route, nexthop, community)} - r = requests.post(url, data=data) + r = requests.post(url, data=data, proxies={"http": None, "https": None}) assert r.status_code == 200 diff --git a/tests/bgp/test_bgp_session.py b/tests/bgp/test_bgp_session.py index 75314f4a1a0..95cb5a0a505 100644 --- a/tests/bgp/test_bgp_session.py +++ b/tests/bgp/test_bgp_session.py @@ -4,6 +4,7 @@ from tests.common.platform.device_utils import fanout_switch_port_lookup from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert +from tests.common.helpers.assertions import pytest_require from tests.common.reboot import reboot logger = logging.getLogger(__name__) @@ -13,6 +14,24 @@ ] +@pytest.fixture +def enable_container_autorestart(duthosts, rand_one_dut_hostname): + # Enable autorestart for all features + duthost = duthosts[rand_one_dut_hostname] + feature_list, _ = duthost.get_feature_status() + container_autorestart_states = duthost.get_container_autorestart_states() + for feature, status in list(feature_list.items()): + # Enable container autorestart only if the feature is enabled and container autorestart is disabled. + if status == 'enabled' and container_autorestart_states[feature] == 'disabled': + duthost.shell("sudo config feature autorestart {} enabled".format(feature)) + + yield + for feature, status in list(feature_list.items()): + # Disable container autorestart back if it was initially disabled. + if status == 'enabled' and container_autorestart_states[feature] == 'disabled': + duthost.shell("sudo config feature autorestart {} disabled".format(feature)) + + @pytest.fixture(scope='module') def setup(duthosts, rand_one_dut_hostname, nbrhosts, fanouthosts): duthost = duthosts[rand_one_dut_hostname] @@ -101,13 +120,20 @@ def verify_bgp_session_down(duthost, bgp_neighbor): @pytest.mark.parametrize("failure_type", ["interface", "neighbor"]) @pytest.mark.disable_loganalyzer def test_bgp_session_interface_down(duthosts, rand_one_dut_hostname, fanouthosts, localhost, - nbrhosts, setup, test_type, failure_type): + enable_container_autorestart, + nbrhosts, setup, test_type, failure_type, tbinfo): ''' 1: check all bgp sessions are up 2: inject failure, shutdown fanout physical interface or neighbor port or neighbor session 4: do the test, reset bgp or swss or do the reboot 5: Verify all bgp sessions are up ''' + # Skip the test on dualtor with reboot test type + pytest_require( + ("dualtor" not in tbinfo["topo"]["name"] or test_type != "reboot"), + "warm reboot is not supported on dualtor" + ) + duthost = duthosts[rand_one_dut_hostname] # Skip the test on Virtual Switch due to fanout switch dependency and warm reboot diff --git a/tests/bgp/test_bgp_session_flap.py b/tests/bgp/test_bgp_session_flap.py index f41fafc6894..3ed3d564ee9 100644 --- a/tests/bgp/test_bgp_session_flap.py +++ b/tests/bgp/test_bgp_session_flap.py @@ -66,7 +66,8 @@ def setup(tbinfo, nbrhosts, duthosts, enum_frontend_dut_hostname, enum_rand_one_ tor_neighbors = dict() neigh_asn = dict() for k, v in bgp_facts['bgp_neighbors'].items(): - if 'asic' not in v['description'].lower(): + # Skip iBGP neighbors + if "INTERNAL" not in v["peer group"] and "VOQ_CHASSIS" not in v["peer group"]: neigh_keys.append(v['description']) neigh_asn[v['description']] = v['remote AS'] tor_neighbors[v['description']] = nbrhosts[v['description']]["host"] diff --git a/tests/bgp/test_bgp_speaker.py b/tests/bgp/test_bgp_speaker.py index 28c6e26b1db..bd556a23c06 100644 --- a/tests/bgp/test_bgp_speaker.py +++ b/tests/bgp/test_bgp_speaker.py @@ -58,7 +58,7 @@ def withdraw_route(ptfip, neighbor, route, nexthop, port): def change_route(operation, ptfip, neighbor, route, nexthop, port): url = "http://%s:%d" % (ptfip, port) data = {"command": "neighbor %s %s route %s next-hop %s" % (neighbor, operation, route, nexthop)} - r = requests.post(url, data=data) + r = requests.post(url, data=data, proxies={"http": None, "https": None}) assert r.status_code == 200 diff --git a/tests/bgp/test_bgp_suppress_fib.py b/tests/bgp/test_bgp_suppress_fib.py index ea91f4ea461..4273e62517a 100644 --- a/tests/bgp/test_bgp_suppress_fib.py +++ b/tests/bgp/test_bgp_suppress_fib.py @@ -341,7 +341,7 @@ def install_route_from_exabgp(operation, ptfip, route_list, port): data = {"command": command} logger.info("url: {}".format(url)) logger.info("command: {}".format(data)) - r = requests.post(url, data=data, timeout=90) + r = requests.post(url, data=data, timeout=90, proxies={"http": None, "https": None}) assert r.status_code == 200 diff --git a/tests/bgp/test_bgpmon.py b/tests/bgp/test_bgpmon.py index a2b413252ed..8954753d9b8 100644 --- a/tests/bgp/test_bgpmon.py +++ b/tests/bgp/test_bgpmon.py @@ -109,6 +109,17 @@ def build_syn_pkt(local_addr, peer_addr): return exp_packet +def test_resolve_via_default_exist(duthost): + """ + Test to verify if 'ip nht resolve-via-default' and 'ipv6 nht resolve-via-default' are present in global FRR config. + """ + frr_global_config = duthost.shell("vtysh -c 'show running-config'")['stdout'] + pytest_assert("ip nht resolve-via-default" in frr_global_config, + "ip nht resolve-via-default not present in global FRR config") + pytest_assert("ipv6 nht resolve-via-default" in frr_global_config, + "ipv6 nht resolve-via-default not present in global FRR config") + + def test_bgpmon(dut_with_default_route, localhost, enum_rand_one_frontend_asic_index, common_setup_teardown, set_timeout_for_bgpmon, ptfadapter, ptfhost): """ diff --git a/tests/bgp/test_bgpmon_v6.py b/tests/bgp/test_bgpmon_v6.py index 4a5eb14021d..5b19094ff1f 100644 --- a/tests/bgp/test_bgpmon_v6.py +++ b/tests/bgp/test_bgpmon_v6.py @@ -2,11 +2,9 @@ import logging import ipaddress from netaddr import IPNetwork -import ptf.testutils as testutils from jinja2 import Template -import ptf.packet as scapy -from ptf.mask import Mask import json +import random from tests.common.fixtures.ptfhost_utils import change_mac_addresses # noqa F401 from tests.common.fixtures.ptfhost_utils import remove_ip_addresses # noqa F401 from tests.common.helpers.generators import generate_ip_through_default_route, generate_ip_through_default_v6_route @@ -129,37 +127,13 @@ def common_v6_setup_teardown(duthosts, tbinfo, enum_rand_one_per_hwsku_frontend_ duthost.file(path=BGPMON_CONFIG_FILE, state='absent') -def build_v6_syn_pkt(local_addr, peer_addr): - pkt = testutils.simple_tcpv6_packet( - ipv6_src=local_addr, - ipv6_dst=peer_addr, - pktlen=40, - tcp_dport=BGP_PORT, - tcp_flags="S" - ) - - exp_packet = Mask(pkt) - exp_packet.set_ignore_extra_bytes() - - exp_packet.set_do_not_care_scapy(scapy.Ether, "dst") - exp_packet.set_do_not_care_scapy(scapy.Ether, "src") - - exp_packet.set_do_not_care_scapy(scapy.IPv6, "version") - exp_packet.set_do_not_care_scapy(scapy.IPv6, "tc") - exp_packet.set_do_not_care_scapy(scapy.IPv6, "fl") - exp_packet.set_do_not_care_scapy(scapy.IPv6, "plen") - exp_packet.set_do_not_care_scapy(scapy.IPv6, "hlim") - - exp_packet.set_do_not_care_scapy(scapy.TCP, "sport") - exp_packet.set_do_not_care_scapy(scapy.TCP, "seq") - exp_packet.set_do_not_care_scapy(scapy.TCP, "ack") - exp_packet.set_do_not_care_scapy(scapy.TCP, "reserved") - exp_packet.set_do_not_care_scapy(scapy.TCP, "dataofs") - exp_packet.set_do_not_care_scapy(scapy.TCP, "window") - exp_packet.set_do_not_care_scapy(scapy.TCP, "chksum") - exp_packet.set_do_not_care_scapy(scapy.TCP, "urgptr") - - return exp_packet +def bgpmon_peer_connected(asichost, bgpmon_peer): + try: + bgp_summary = json.loads(asichost.run_vtysh("-c 'show bgp summary json'")['stdout']) + return bgp_summary['ipv6Unicast']['peers'][bgpmon_peer]["state"] == "Established" + except Exception: + logger.info('Unable to get bgp status') + return False def test_bgpmon_v6(duthosts, localhost, enum_rand_one_per_hwsku_frontend_hostname, @@ -171,39 +145,24 @@ def test_bgpmon_v6(duthosts, localhost, enum_rand_one_per_hwsku_frontend_hostnam duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] asichost = duthost.asic_instance(enum_rand_one_frontend_asic_index) - def bgpmon_peer_connected(duthost, bgpmon_peer): - try: - bgp_summary = json.loads(asichost.run_vtysh("-c 'show bgp summary json'")['stdout']) - return bgp_summary['ipv6Unicast']['peers'][bgpmon_peer]["state"] == "Established" - except Exception: - logger.info('Unable to get bgp status') - return False - local_addr, peer_addr, peer_ports, local_ports, asn, router_id = common_v6_setup_teardown pytest_assert(peer_ports is not None, "No upstream neighbors in the testbed") - exp_packet = build_v6_syn_pkt(local_addr, peer_addr) # Flush dataplane ptfadapter.dataplane.flush() # Load bgp monitor config - logger.info("Configured bgpmon and verifying packet on {}".format(peer_ports)) + logger.info("Configured BGPMON on {}".format(duthost)) asichost.write_to_config_db(BGPMON_CONFIG_FILE) - # Verify syn packet on ptf - (rcvd_port_index, rcvd_pkt) = testutils.verify_packet_any_port(test=ptfadapter, pkt=exp_packet, - ports=peer_ports, timeout=BGP_CONNECT_TIMEOUT) - - # Find the local dut port that is mapped to this received ptf interface, get the router_mac for that asic - # For packet chassis router mac is different across asics - router_mac = get_uplink_route_mac(duthosts, local_ports[rcvd_port_index]) - - # ip as BGMPMON IP , mac as the neighbor mac(mac for default nexthop that was used for sending syn packet) , - # add the neighbor entry and the default route for dut loopback - ptf_interface = "eth" + str(peer_ports[rcvd_port_index]) - res = ptfhost.shell('cat /sys/class/net/{}/address'.format(ptf_interface)) - original_mac = res['stdout'] - ptfhost.shell("ifconfig %s hw ether %s" % (ptf_interface, scapy.Ether(rcvd_pkt).dst)) - ptfhost.shell("ip -6 addr add %s dev %s" % (peer_addr + "/128", ptf_interface)) + port_index = random.randint(0, len(peer_ports)-1) + logger.info("Configured route to from PTF to LC on PTF port {}".format(peer_ports[port_index])) + router_mac = get_uplink_route_mac(duthosts, local_ports[port_index]) + ptf_interface = "eth" + str(peer_ports[port_index]) + ptfhost.shell("ip -6 addr add {} dev {}".format(peer_addr + "/128", ptf_interface)) + ptfhost.shell("ip neigh add %s lladdr %s dev %s" % (local_addr, router_mac, ptf_interface)) + ptfhost.shell("ip -6 route add %s dev %s" % (local_addr + "/128", ptf_interface)) + + logger.info("Starting BGP Monitor on PTF") ptfhost.exabgp(name=BGP_MONITOR_NAME, state="started", local_ip=peer_addr, @@ -211,45 +170,66 @@ def bgpmon_peer_connected(duthost, bgpmon_peer): peer_ip=local_addr, local_asn=asn, peer_asn=asn, - port=BGP_MONITOR_PORT, passive=True) - ptfhost.shell("ip neigh add %s lladdr %s dev %s" % (local_addr, router_mac, ptf_interface)) - ptfhost.shell("ip -6 route add %s dev %s" % (local_addr + "/128", ptf_interface)) + port=BGP_MONITOR_PORT) + try: pytest_assert(wait_tcp_connection(localhost, ptfhost.mgmt_ip, BGP_MONITOR_PORT, timeout_s=60), "Failed to start bgp monitor session on PTF") - pytest_assert(wait_until(MAX_TIME_FOR_BGPMON, 5, 0, bgpmon_peer_connected, duthost, peer_addr), + pytest_assert(wait_until(MAX_TIME_FOR_BGPMON, 5, 0, bgpmon_peer_connected, asichost, peer_addr), "BGPMon Peer connection not established") finally: ptfhost.exabgp(name=BGP_MONITOR_NAME, state="absent") ptfhost.shell("ip -6 route del %s dev %s" % (local_addr + "/128", ptf_interface)) ptfhost.shell("ip -6 neigh del %s lladdr %s dev %s" % (local_addr, router_mac, ptf_interface)) ptfhost.shell("ip -6 addr del %s dev %s" % (peer_addr + "/128", ptf_interface)) - ptfhost.shell("ifconfig %s hw ether %s" % (ptf_interface, original_mac)) -def test_bgpmon_no_ipv6_resolve_via_default(duthosts, enum_rand_one_per_hwsku_frontend_hostname, +def test_bgpmon_no_ipv6_resolve_via_default(duthosts, localhost, enum_rand_one_per_hwsku_frontend_hostname, ptfhost, enum_rand_one_frontend_asic_index, common_v6_setup_teardown, ptfadapter): """ Verify no syn for BGP is sent when 'ipv6 nht resolve-via-default' is disabled. """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] asichost = duthost.asic_instance(enum_rand_one_frontend_asic_index) - local_addr, peer_addr, peer_ports, _, _, _ = common_v6_setup_teardown - exp_packet = build_v6_syn_pkt(local_addr, peer_addr) + + local_addr, peer_addr, peer_ports, local_ports, asn, router_id = common_v6_setup_teardown + pytest_assert(peer_ports is not None, "No upstream neighbors in the testbed") + + # Flush dataplane + ptfadapter.dataplane.flush() # Load bgp monitor config - logger.info("Configured bgpmon and verifying no packet on {} when resolve-via-default is disabled" - .format(peer_ports)) + logger.info("Configured BGPMON on {}".format(duthost)) + asichost.write_to_config_db(BGPMON_CONFIG_FILE) + + port_index = random.randint(0, len(peer_ports)-1) + logger.info("Configured route to from PTF to LC on PTF port {}".format(peer_ports[port_index])) + router_mac = get_uplink_route_mac(duthosts, local_ports[port_index]) + ptf_interface = "eth" + str(peer_ports[port_index]) + ptfhost.shell("ip -6 addr add {} dev {}".format(peer_addr + "/128", ptf_interface)) + ptfhost.shell("ip neigh add %s lladdr %s dev %s" % (local_addr, router_mac, ptf_interface)) + ptfhost.shell("ip -6 route add %s dev %s" % (local_addr + "/128", ptf_interface)) try: - # Disable resolve-via-default - duthost.run_vtysh(" -c \"configure terminal\" -c \"no ipv6 nht resolve-via-default\"", asic_index='all') # Flush dataplane ptfadapter.dataplane.flush() asichost.write_to_config_db(BGPMON_CONFIG_FILE) - - # Verify no syn packet is received - pytest_assert(0 == testutils.count_matched_packets_all_ports(test=ptfadapter, exp_packet=exp_packet, - ports=peer_ports, timeout=BGP_CONNECT_TIMEOUT), - "Syn packets is captured when resolve-via-default is disabled") + # Disable resolve-via-default + duthost.run_vtysh("-c \"configure terminal\" -c \"no ipv6 nht resolve-via-default\"", asic_index='all') + ptfhost.exabgp(name=BGP_MONITOR_NAME, + state="started", + local_ip=peer_addr, + router_id=router_id, + peer_ip=local_addr, + local_asn=asn, + peer_asn=asn, + port=BGP_MONITOR_PORT) + pytest_assert(wait_tcp_connection(localhost, ptfhost.mgmt_ip, BGP_MONITOR_PORT, timeout_s=60), + "Failed to start bgp monitor session on PTF") + pytest_assert(not wait_until(MAX_TIME_FOR_BGPMON, 5, 0, bgpmon_peer_connected, asichost, peer_addr), + "BGPMon Peer connection is established when it shouldn't be") finally: # Re-enable resolve-via-default + ptfhost.exabgp(name=BGP_MONITOR_NAME, state="absent") + ptfhost.shell("ip -6 route del %s dev %s" % (local_addr + "/128", ptf_interface)) + ptfhost.shell("ip -6 neigh del %s lladdr %s dev %s" % (local_addr, router_mac, ptf_interface)) + ptfhost.shell("ip -6 addr del %s dev %s" % (peer_addr + "/128", ptf_interface)) duthost.run_vtysh("-c \"configure terminal\" -c \"ipv6 nht resolve-via-default\"", asic_index='all') diff --git a/tests/bgp/test_startup_tsa_tsb_service.py b/tests/bgp/test_startup_tsa_tsb_service.py index 4170fdb766a..5432b0d042f 100644 --- a/tests/bgp/test_startup_tsa_tsb_service.py +++ b/tests/bgp/test_startup_tsa_tsb_service.py @@ -130,6 +130,15 @@ def check_tsc_command_error(duthost): return False +def check_tsa_tsb_service_run_time_diff(service_uptime, configured_service_timer): + """ + @summary: Determine time difference between service runtime and configured value + """ + current_time = datetime.datetime.now() + actual_service_timer = (current_time - service_uptime).total_seconds() + return int(actual_service_timer) < configured_service_timer + + def nbrhosts_to_dut(duthost, nbrhosts): """ @summary: Fetch the neighbor hosts' details for duthost @@ -1102,7 +1111,8 @@ def test_user_init_tsb_on_sup_while_service_run_on_dut(duthosts, localhost, suphost.shell('TSB') for linecard in duthosts.frontend_nodes: - if get_tsa_tsb_service_status(linecard, 'running'): + if get_tsa_tsb_service_status(linecard, 'running') and \ + check_tsa_tsb_service_run_time_diff(service_uptime, tsa_tsb_timer[linecard]): # Verify DUT continues to be in maintenance state if the timer is running. pytest_assert(TS_MAINTENANCE == get_traffic_shift_state(linecard, cmd='TSC no-stats'), "DUT is not in maintenance state when startup_tsa_tsb service is running") diff --git a/tests/clock/conftest.py b/tests/clock/conftest.py index 6d1c155bb6a..d681f3b8dd6 100755 --- a/tests/clock/conftest.py +++ b/tests/clock/conftest.py @@ -42,6 +42,12 @@ def restore_time(duthosts, ntp_server): """ @summary: fixture to restore time after test (using ntp) """ + logging.info('Check NTP server reachability') + try: + ClockUtils.run_cmd(duthosts, f'{ClockConsts.CMD_NTPDATE} -q {ntp_server}', raise_err=True) + except Exception as e: + pytest.skip(f'Unreachable NTP server {ntp_server}: {str(e)}') + logging.info('Check if there is ntp configured before test') show_ntp_output = ClockUtils.run_cmd(duthosts, ClockConsts.CMD_SHOW_NTP) if 'unsynchronised' in show_ntp_output: @@ -69,36 +75,14 @@ def restore_time(duthosts, ntp_server): logging.info(f'Reset time after test. Sync with NTP server: {ntp_server}') - logging.info(f'Sync with NTP server: {ntp_server}') - output = ClockUtils.run_cmd(duthosts, ClockConsts.CMD_CONFIG_NTP_ADD, ntp_server) - assert ClockConsts.OUTPUT_CMD_NTP_ADD_SUCCESS.format(ntp_server) in output, \ - f'Error: The given string does not contain the expected substring.\n' \ - f'Expected substring: "{ClockConsts.OUTPUT_CMD_NTP_ADD_SUCCESS.format(ntp_server)}"\n' \ - f'Given (whole) string: "{output}"' + logging.info('Stopping NTP service') + ClockUtils.run_cmd(duthosts, ClockConsts.CMD_NTP_STOP) - logging.info('Check polling time') - show_ntp_output = ClockUtils.run_cmd(duthosts, ClockConsts.CMD_SHOW_NTP) - match = re.search(ClockConsts.REGEX_NTP_POLLING_TIME, show_ntp_output) - if match: - polling_time_seconds = int(match.group(1)) - else: - logging.info('Could not match the regex.\nPattern: "{}"\nShow ntp output string: "{}"' - .format(ClockConsts.REGEX_NTP_POLLING_TIME, show_ntp_output)) - polling_time_seconds = ClockConsts.RANDOM_NUM - logging.info(f'Polling time (in seconds): {polling_time_seconds + 1}') - - logging.info('Wait for the sync') - time.sleep(polling_time_seconds) - - logging.info(f'Delete NTP server: {ntp_server}') - output = ClockUtils.run_cmd(duthosts, ClockConsts.CMD_CONFIG_NTP_DEL, ntp_server) - assert ClockConsts.OUTPUT_CMD_NTP_DEL_SUCCESS.format(ntp_server) in output, \ - f'Error: The given string does not contain the expected substring.\n' \ - f'Expected substring: "{ClockConsts.OUTPUT_CMD_NTP_DEL_SUCCESS.format(ntp_server)}"\n' \ - f'Given (whole) string: "{output}"' - - logging.info('Wait for the sync') - time.sleep(polling_time_seconds) + logging.info(f'Syncing datetime with NTP server {ntp_server}') + ClockUtils.run_cmd(duthosts, ClockConsts.CMD_NTPDATE, f'-s {ntp_server}') + + logging.info('Starting NTP service') + ClockUtils.run_cmd(duthosts, ClockConsts.CMD_NTP_START) if orig_ntp_server: logging.info('Restore original NTP server after test') diff --git a/tests/clock/test_clock.py b/tests/clock/test_clock.py index 409472bc306..6ef4e361731 100755 --- a/tests/clock/test_clock.py +++ b/tests/clock/test_clock.py @@ -31,6 +31,9 @@ class ClockConsts: CMD_SHOW_CLOCK_TIMEZONES = "show clock timezones" CMD_CONFIG_CLOCK_TIMEZONE = "config clock timezone" CMD_CONFIG_CLOCK_DATE = "config clock date" + CMD_NTP_STOP = 'service ntp stop' + CMD_NTP_START = 'service ntp start' + CMD_NTPDATE = 'ntpdate' # expected outputs OUTPUT_CMD_SUCCESS = '' @@ -60,7 +63,7 @@ class ClockConsts: class ClockUtils: @staticmethod - def run_cmd(duthosts, cmd, param=''): + def run_cmd(duthosts, cmd, param='', raise_err=False): """ @summary: Run a given command and return its output. @@ -81,6 +84,8 @@ def run_cmd(duthosts, cmd, param=''): err = cmd_err.results["stderr"] cmd_output = output if output else err logging.info(f'Command Error!\nError message: "{cmd_output}"') + if raise_err: + raise Exception(cmd_output) cmd_output = str(cmd_output) logging.info(f'Output: {cmd_output}') diff --git a/tests/common/config_reload.py b/tests/common/config_reload.py index 0b0fe7c2768..5916a63b2bf 100644 --- a/tests/common/config_reload.py +++ b/tests/common/config_reload.py @@ -6,7 +6,7 @@ from tests.common.plugins.loganalyzer.utils import ignore_loganalyzer from tests.common.platform.processes_utils import wait_critical_processes from tests.common.utilities import wait_until -from tests.configlet.util.common import chk_for_pfc_wd +from tests.common.configlet.utils import chk_for_pfc_wd from tests.common.platform.interface_utils import check_interface_status_of_up_ports from tests.common.helpers.dut_utils import ignore_t2_syslog_msgs @@ -215,7 +215,7 @@ def _config_reload_cmd_wrapper(cmd, executable): time.sleep(wait) if wait_for_bgp: - bgp_neighbors = sonic_host.get_bgp_neighbors_per_asic() + bgp_neighbors = sonic_host.get_bgp_neighbors_per_asic(state="all") pytest_assert( wait_until(wait + 120, 10, 0, sonic_host.check_bgp_session_state_all_asics, bgp_neighbors), "Not all bgp sessions are established after config reload", diff --git a/tests/common/configlet/__init__.py b/tests/common/configlet/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/configlet/util/helpers.py b/tests/common/configlet/helpers.py similarity index 100% rename from tests/configlet/util/helpers.py rename to tests/common/configlet/helpers.py diff --git a/tests/configlet/util/common.py b/tests/common/configlet/utils.py old mode 100755 new mode 100644 similarity index 100% rename from tests/configlet/util/common.py rename to tests/common/configlet/utils.py diff --git a/tests/common/devices/eos.py b/tests/common/devices/eos.py index 35f28ab3e85..e2ce0bb06dc 100644 --- a/tests/common/devices/eos.py +++ b/tests/common/devices/eos.py @@ -556,3 +556,21 @@ def no_isis_metric(self, interface): lines=['no isis metric'], parents=['interface {}'.format(interface)]) return not self._has_cli_cmd_failed(out) + + def set_interface_lacp_time_multiplier(self, interface_name, multiplier): + out = self.eos_config( + lines=['lacp timer multiplier %d' % multiplier], + parents='interface %s' % interface_name) + + if out['failed'] is True or out['changed'] is False: + logging.warning("Unable to set interface [%s] lacp timer multiplier to [%d]" % (interface_name, multiplier)) + else: + logging.info("Set interface [%s] lacp timer to [%d]" % (interface_name, multiplier)) + return out + + def no_lacp_time_multiplier(self, interface_name): + out = self.eos_config( + lines=['no lacp timer multiplier'], + parents=['interface {}'.format(interface_name)]) + logging.info('Reset lacp timer to default for interface [%s]' % interface_name) + return out diff --git a/tests/common/devices/multi_asic.py b/tests/common/devices/multi_asic.py index 6f541c201af..d879e468481 100644 --- a/tests/common/devices/multi_asic.py +++ b/tests/common/devices/multi_asic.py @@ -549,7 +549,8 @@ def get_bgp_neighbors_per_asic(self, state="established"): Get a diction of BGP neighbor states Args: - state: BGP session state, return neighbor IP of sessions that match this state + state: BGP session state, return neighbor IP of sessions that match this state. If state is "all", + return all neighbors regardless of state. Returns: dictionary {namespace: { (neighbor_ip : info_dict)* }} """ @@ -557,9 +558,10 @@ def get_bgp_neighbors_per_asic(self, state="established"): for asic in self.asics: bgp_neigh[asic.namespace] = {} bgp_info = asic.bgp_facts()["ansible_facts"]["bgp_neighbors"] - for k, v in list(bgp_info.items()): - if v["state"] != state: - bgp_info.pop(k) + if state != "all": + for k, v in list(bgp_info.items()): + if v["state"] != state: + bgp_info.pop(k) bgp_neigh[asic.namespace].update(bgp_info) return bgp_neigh @@ -598,7 +600,7 @@ def check_bgp_session_state_all_asics(self, bgp_neighbors, state="established"): """ for asic in self.asics: if asic.namespace in bgp_neighbors: - neigh_ips = [k.lower() for k, v in list(bgp_neighbors[asic.namespace].items()) if v["state"] == state] + neigh_ips = [k.lower() for k, v in list(bgp_neighbors[asic.namespace].items())] if not asic.check_bgp_session_state(neigh_ips, state): return False return True diff --git a/tests/common/devices/ptf.py b/tests/common/devices/ptf.py index 1e652052a33..048fcbdd35c 100644 --- a/tests/common/devices/ptf.py +++ b/tests/common/devices/ptf.py @@ -3,7 +3,7 @@ import tempfile from tests.common.devices.base import AnsibleHostBase -from tests.macsec.macsec_helper import load_macsec_info +from tests.common.macsec.macsec_helper import load_macsec_info logger = logging.getLogger(__name__) diff --git a/tests/common/devices/sonic.py b/tests/common/devices/sonic.py index b19ee0fb873..60aa4db6eb0 100644 --- a/tests/common/devices/sonic.py +++ b/tests/common/devices/sonic.py @@ -32,6 +32,7 @@ "orchagent": "swss", "syncd": "syncd" } +UNKNOWN_ASIC = "unknown" class SonicHost(AnsibleHostBase): @@ -531,11 +532,11 @@ def get_monit_services_status(self): return monit_services_status for index, service_info in enumerate(services_status_result["stdout_lines"]): - if "status" in service_info and "monitoring status" not in service_info: + if service_info.strip().startswith("status"): service_type_name = services_status_result["stdout_lines"][index - 1] service_type = service_type_name.split("'")[0].strip() service_name = service_type_name.split("'")[1].strip() - service_status = service_info[service_info.find("status") + len("status"):].strip() + service_status = service_info.split("status", 1)[1].strip() monit_services_status[service_name] = {} monit_services_status[service_name]["service_status"] = service_status @@ -945,7 +946,7 @@ def get_pmon_daemon_states(self): @return: dictionary of { service_name1 : state1, ... ... } """ # some services are meant to have a short life span or not part of the daemons - exemptions = ['lm-sensors', 'start.sh', 'rsyslogd', 'start', 'dependent-startup', 'chassis_db_init'] + exemptions = ['lm-sensors', 'start.sh', 'rsyslogd', 'start', 'dependent-startup', 'chassis_db_init', 'delay'] daemons = self.shell('docker exec pmon supervisorctl status', module_ignore_errors=True)['stdout_lines'] @@ -1124,9 +1125,10 @@ def shutdown_multiple(self, ifnames): ifnames (list): the interface names to shutdown """ image_info = self.get_image_info() - # 201811 image does not support multiple interfaces shutdown + # 201811 & 201911 images do not support multiple interface shutdown # Change the batch shutdown call to individual call here - if "201811" in image_info.get("current"): + current_image = image_info.get("current") + if "201811" in current_image or "201911" in current_image: for ifname in ifnames: self.shutdown(ifname) return @@ -1152,9 +1154,10 @@ def no_shutdown_multiple(self, ifnames): ifnames (list): the interface names to bring up """ image_info = self.get_image_info() - # 201811 image does not support multiple interfaces startup + # 201811 & 201911 images do not support multiple interface startup # Change the batch startup call to individual call here - if "201811" in image_info.get("current"): + current_image = image_info.get("current") + if "201811" in current_image or "201911" in current_image: for ifname in ifnames: self.no_shutdown(ifname) return @@ -1759,28 +1762,34 @@ def run_redis_cli_cmd(self, redis_cmd): cmd = "/usr/bin/redis-cli {}".format(redis_cmd) return self.command(cmd, verbose=False) + def _try_get_brcm_asic_name(self, output): + search_sets = { + "td2": {"b85", "BCM5685"}, + "td3": {"b87", "BCM5687"}, + "th": {"b96", "BCM5696"}, + "th2": {"b97", "BCM5697"}, + "th3": {"b98", "BCM5698"}, + "th4": {"b99", "BCM5699"}, + "th5": {"f90", "BCM7890"}, + } + for asic in search_sets.keys(): + for search_term in search_sets[asic]: + if search_term in output: + return asic + return UNKNOWN_ASIC + def get_asic_name(self): - asic = "unknown" + asic = UNKNOWN_ASIC output = self.shell("lspci", module_ignore_errors=True)["stdout"] - if ("Broadcom Limited Device b960" in output or - "Broadcom Limited Broadcom BCM56960" in output): - asic = "th" - elif "Device b971" in output: - asic = "th2" - elif ("Broadcom Limited Device b850" in output or - "Broadcom Limited Broadcom BCM56850" in output or - "Broadcom Inc. and subsidiaries Broadcom BCM56850" in output): - asic = "td2" - elif ("Broadcom Limited Device b870" in output or - "Broadcom Inc. and subsidiaries Device b870" in output): - asic = "td3" - elif "Broadcom Limited Device b980" in output: - asic = "th3" + if "Broadcom" in output: + asic = self._try_get_brcm_asic_name(output) elif "Cisco Systems Inc Device a001" in output: asic = "gb" elif "Mellanox Technologies" in output: asic = "spc" + logger.info("asic: {}".format(asic)) + return asic def is_nvidia_platform(self): diff --git a/tests/common/devices/sonic_asic.py b/tests/common/devices/sonic_asic.py index 89e1b33f8b7..7bffb324027 100644 --- a/tests/common/devices/sonic_asic.py +++ b/tests/common/devices/sonic_asic.py @@ -407,10 +407,12 @@ def create_ssh_tunnel_sai_rpc(self): " -L *:{}:{}:{} localhost").format(self.get_rpc_port_ssh_tunnel(), ns_docker_if_ipv4, self._RPC_PORT_FOR_SSH_TUNNEL)) - def command(self, cmdstr): + def command(self, cmdstr, new_format=False): """ Prepend 'ip netns' option for commands meant for this ASIC + If new format is provided (new_format=True) we use the syntax "{cmd} -n asic{index}" instead. + Args: cmdstr Returns: @@ -419,7 +421,10 @@ def command(self, cmdstr): if not self.sonichost.is_multi_asic or self.namespace == DEFAULT_NAMESPACE: return self.sonichost.command(cmdstr) - cmdstr = "sudo ip netns exec {} {}".format(self.namespace, cmdstr) + if new_format: + cmdstr = "sudo {} {}".format(cmdstr, self.cli_ns_option) + else: + cmdstr = "sudo ip netns exec {} {}".format(self.namespace, cmdstr) return self.sonichost.command(cmdstr) diff --git a/tests/common/dualtor/data_plane_utils.py b/tests/common/dualtor/data_plane_utils.py index febaa97d841..1f7b00371b4 100644 --- a/tests/common/dualtor/data_plane_utils.py +++ b/tests/common/dualtor/data_plane_utils.py @@ -161,14 +161,15 @@ def verify_and_report(tor_IO, verify, delay, allowed_disruption, def run_test( duthosts, activehost, ptfhost, ptfadapter, vmhost, action, tbinfo, tor_vlan_port, send_interval, traffic_direction, - stop_after, cable_type=CableType.active_standby # noqa F811 + stop_after, cable_type=CableType.active_standby, random_dst=None # noqa F811 ): io_ready = threading.Event() peerhost = get_peerhost(duthosts, activehost) tor_IO = DualTorIO( activehost, peerhost, ptfhost, ptfadapter, vmhost, tbinfo, - io_ready, tor_vlan_port=tor_vlan_port, send_interval=send_interval, cable_type=cable_type + io_ready, tor_vlan_port=tor_vlan_port, send_interval=send_interval, cable_type=cable_type, + random_dst=random_dst ) tor_IO.generate_traffic(traffic_direction) @@ -330,7 +331,7 @@ def send_server_to_t1_with_action(duthosts, ptfhost, ptfadapter, tbinfo, def server_to_t1_io_test(activehost, tor_vlan_port=None, delay=0, allowed_disruption=0, action=None, verify=False, send_interval=0.01, - stop_after=None): + stop_after=None, random_dst=None): """ Helper method for `send_server_to_t1_with_action`. Starts sender and sniffer before performing the action on the tor host. @@ -357,7 +358,7 @@ def server_to_t1_io_test(activehost, tor_vlan_port=None, tor_IO = run_test(duthosts, activehost, ptfhost, ptfadapter, vmhost, action, tbinfo, tor_vlan_port, send_interval, traffic_direction="server_to_t1", stop_after=stop_after, - cable_type=cable_type) + cable_type=cable_type, random_dst=random_dst) # If a delay is allowed but no numebr of allowed disruptions # is specified, default to 1 allowed disruption diff --git a/tests/common/dualtor/dual_tor_io.py b/tests/common/dualtor/dual_tor_io.py index 5df1e7b99ea..978c53aa8a8 100644 --- a/tests/common/dualtor/dual_tor_io.py +++ b/tests/common/dualtor/dual_tor_io.py @@ -38,7 +38,8 @@ class DualTorIO: """Class to conduct IO over ports in `active-standby` mode.""" def __init__(self, activehost, standbyhost, ptfhost, ptfadapter, vmhost, tbinfo, - io_ready, tor_vlan_port=None, send_interval=0.01, cable_type=CableType.active_standby): + io_ready, tor_vlan_port=None, send_interval=0.01, cable_type=CableType.active_standby, + random_dst=None): self.tor_pc_intf = None self.tor_vlan_intf = tor_vlan_port self.duthost = activehost @@ -54,6 +55,12 @@ def __init__(self, activehost, standbyhost, ptfhost, ptfadapter, vmhost, tbinfo, self.cable_type = cable_type + if random_dst is None: + # if random_dst is not set, default to true for active standby dualtor. + self.random_dst = (self.cable_type == CableType.active_standby) + else: + self.random_dst = random_dst + self.dataplane = self.ptfadapter.dataplane self.dataplane.flush() self.test_results = dict() @@ -390,8 +397,10 @@ def generate_upstream_traffic(self, src='server'): packet = tcp_tx_packet_orig.copy() packet[scapyall.Ether].src = eth_src packet[scapyall.IP].src = server_ip - packet[scapyall.IP].dst = dst_ips[vlan_intf] \ - if self.cable_type == CableType.active_active else self.random_host_ip() + if self.random_dst: + packet[scapyall.IP].dst = self.random_host_ip() + else: + packet[scapyall.IP].dst = dst_ips[vlan_intf] packet.load = payload packet[scapyall.TCP].chksum = None packet[scapyall.IP].chksum = None diff --git a/tests/common/dualtor/dual_tor_mock.py b/tests/common/dualtor/dual_tor_mock.py index a5d1bb12181..02d70e4f059 100644 --- a/tests/common/dualtor/dual_tor_mock.py +++ b/tests/common/dualtor/dual_tor_mock.py @@ -11,6 +11,7 @@ from tests.common.dualtor.dual_tor_utils import tor_mux_intfs # noqa F401 from tests.common.helpers.assertions import pytest_assert from tests.common.platform.processes_utils import wait_critical_processes +from tests.common.utilities import wait_until __all__ = [ 'apply_active_state_to_orchagent', @@ -67,6 +68,9 @@ def set_dual_tor_state_to_orchagent(dut, state, tor_mux_intfs): # noqa F """ Helper function for setting active/standby state to orchagent """ + def check_config_applied(num_tor_mux_intfs): + out = dut.shell('redis-cli -n 0 keys "MUX_CABLE_TABLE:*" | wc -l') + return out['stdout_lines'][0] == str(num_tor_mux_intfs) logger.info("Applying {} state to orchagent".format(state)) intf_configs = [] @@ -97,6 +101,7 @@ def set_dual_tor_state_to_orchagent(dut, state, tor_mux_intfs): # noqa F logger.debug('SWSS config string is {}'.format(swss_config_str)) swss_filename = '/mux{}.json'.format(state) _apply_config_to_swss(dut, swss_config_str, swss_filename) + wait_until(120, 5, 5, check_config_applied, len(tor_mux_intfs)) def del_dual_tor_state_from_orchagent(dut, state, tor_mux_intfs): # noqa F811 @@ -295,6 +300,7 @@ def apply_dual_tor_neigh_entries(cleanup_mocked_configs, rand_selected_dut, tbin for ipv6, mac in list(mock_server_ipv6_mac_map.items()): cmds.append('ip -6 neigh replace {} lladdr {} dev {}'.format(ipv6, mac, vlan)) dut.shell_cmds(cmds=cmds) + time.sleep(5) return @@ -323,6 +329,7 @@ def apply_dual_tor_peer_switch_route(cleanup_mocked_configs, rand_selected_dut, # Use `ip route replace` in case a rule already exists for this IP # If there are no pre-existing routes, equivalent to `ip route add` dut.shell('ip route replace {} {}'.format(mock_peer_switch_loopback_ip, nexthop_str)) + time.sleep(5) return @@ -333,6 +340,12 @@ def apply_peer_switch_table_to_dut(cleanup_mocked_configs, rand_selected_dut, mo Adds the PEER_SWITCH table to config DB and the peer_switch field to the device metadata Also adds the 'subtype' field in the device metadata table and sets it to 'DualToR' ''' + def check_config_applied(): + out = dut.shell('redis-cli -n 4 HGETALL "DEVICE_METADATA|localhost"')['stdout_lines'][-1] + device_metadata_done = 'DualToR' in out + out = dut.shell('redis-cli -n 4 HGETALL "PEER_SWITCH|switch_hostname"')['stdout_lines'][0] + peerswitch_done = 'ipv4_address' in out + return device_metadata_done and peerswitch_done logger.info("Applying PEER_SWITCH table") dut = rand_selected_dut peer_switch_hostname = 'switch_hostname' @@ -359,6 +372,7 @@ def apply_peer_switch_table_to_dut(cleanup_mocked_configs, rand_selected_dut, mo logger.info("Restarting swss service") dut.shell('systemctl reset-failed swss; systemctl restart swss') wait_critical_processes(dut) + wait_until(120, 5, 5, check_config_applied) @pytest.fixture(scope='module') @@ -366,6 +380,11 @@ def apply_tunnel_table_to_dut(cleanup_mocked_configs, rand_selected_dut, mock_pe ''' Adds the TUNNEL table to config DB ''' + def check_config_applied(tunnel_params): + out = dut.shell('redis-cli -n 4 HGETALL "TUNNEL|MuxTunnel0" | wc -l')['stdout_lines'][0] + + # *2 because each key value pair is represented with 2 rows in redis-cli + return out == str(len(tunnel_params['TUNNEL']['MuxTunnel0'])*2) logger.info("Applying TUNNEL table") dut = rand_selected_dut @@ -389,6 +408,7 @@ def apply_tunnel_table_to_dut(cleanup_mocked_configs, rand_selected_dut, mock_pe dut.copy(content=json.dumps(tunnel_params, indent=2), dest="/tmp/tunnel_params.json") dut.shell("sonic-cfggen -j /tmp/tunnel_params.json --write-to-db") + wait_until(120, 5, 5, check_config_applied, tunnel_params) return @@ -399,6 +419,9 @@ def apply_mux_cable_table_to_dut(cleanup_mocked_configs, rand_selected_dut, ''' Adds the MUX_CABLE table to config DB ''' + def check_config_applied(num_tor_mux_intfs): + out = dut.shell('redis-cli -n 4 keys "MUX_CABLE|*" | wc -l') + return out['stdout_lines'][0] == str(num_tor_mux_intfs) logger.info("Applying MUX_CABLE table") dut = rand_selected_dut @@ -420,6 +443,7 @@ def apply_mux_cable_table_to_dut(cleanup_mocked_configs, rand_selected_dut, mux_cable_params = {'MUX_CABLE': mux_cable_params} dut.copy(content=json.dumps(mux_cable_params, indent=2), dest="/tmp/mux_cable_params.json") dut.shell("sonic-cfggen -j /tmp/mux_cable_params.json --write-to-db") + wait_until(120, 5, 5, check_config_applied, len(tor_mux_intfs)) return @@ -434,8 +458,8 @@ def apply_mock_dual_tor_tables(request, tbinfo): ''' if is_t0_mocked_dualtor(tbinfo): request.getfixturevalue("apply_mux_cable_table_to_dut") - request.getfixturevalue("apply_tunnel_table_to_dut") request.getfixturevalue("apply_peer_switch_table_to_dut") + request.getfixturevalue("apply_tunnel_table_to_dut") logger.info("Done applying database tables for dual ToR mock") @@ -458,4 +482,4 @@ def cleanup_mocked_configs(duthost, tbinfo): if is_t0_mocked_dualtor(tbinfo): logger.info("Load minigraph to reset the DUT %s", duthost.hostname) - config_reload(duthost, config_source="minigraph", safe_reload=True) + config_reload(duthost, config_source="running_golden_config", safe_reload=True) diff --git a/tests/common/dualtor/tunnel_traffic_utils.py b/tests/common/dualtor/tunnel_traffic_utils.py index 059ca8ad703..402061c7dc3 100644 --- a/tests/common/dualtor/tunnel_traffic_utils.py +++ b/tests/common/dualtor/tunnel_traffic_utils.py @@ -262,6 +262,7 @@ def __init__(self, standby_tor, active_tor=None, existing=True, inner_packet=Non self.listen_ports = sorted(self._get_t1_ptf_port_indexes(standby_tor, tbinfo)) self.ptfadapter = ptfadapter self.packet_count = packet_count + self.asic_type = standby_tor.facts["asic_type"] standby_tor_cfg_facts = self.standby_tor.config_facts( host=self.standby_tor.hostname, source="running" @@ -292,17 +293,15 @@ def __enter__(self): def __exit__(self, *exc_info): if exc_info[0]: return + if self.asic_type == "vs": + logging.info("Skipping traffic check on VS platform.") + return try: - result = testutils.verify_packet_any_port( + port_index, rec_pkt = testutils.verify_packet_any_port( ptfadapter, self.exp_pkt, ports=self.listen_ports ) - if isinstance(result, tuple): - port_index, rec_pkt = result - elif isinstance(result, bool): - logging.info("Using dummy testutils to skip traffic test.") - return except AssertionError as detail: logging.debug("Error occurred in polling for tunnel traffic", exc_info=True) if "Did not receive expected packet on any of ports" in str(detail): diff --git a/tests/common/fixtures/advanced_reboot.py b/tests/common/fixtures/advanced_reboot.py index 4ae3b8cfe43..a6b5f33af7a 100644 --- a/tests/common/fixtures/advanced_reboot.py +++ b/tests/common/fixtures/advanced_reboot.py @@ -430,12 +430,14 @@ def __clearArpAndFdbTables(self): logger.info('Clearing all fdb entries on DUT {}'.format(self.duthost.hostname)) self.duthost.shell('sonic-clear fdb all') - def __fetchTestLogs(self, rebootOper=None): + def __fetchTestLogs(self, rebootOper=None, log_dst_suffix=None): """ - Fetch test logs from duthost and ptfhost after individual test run + Fetch test logs from duthost and ptfhost. + @param rebootOper: if provided it will be added to each individual file name + @param log_dst_suffix: if provided it will be appended to the directory name """ - if rebootOper: - dir_name = "{}_{}".format(self.request.node.name, rebootOper) + if log_dst_suffix: + dir_name = "{}_{}".format(self.request.node.name, log_dst_suffix) else: dir_name = self.request.node.name report_file_dir = os.path.realpath((os.path.join(os.path.dirname(__file__), "../../logs/platform_tests/"))) @@ -547,12 +549,13 @@ def print_test_logs_summary(self, log_dir): if log_file.endswith('reboot.log'): with open(os.path.join(log_dir, log_file)) as reboot_log: reboot_text_log_file = reboot_log.read() - reboot_summary = re.search(r"Summary:(\n|.)*?=========", reboot_text_log_file).group() - if reboot_summary.find('Fails') == -1: - # if no fails detected - the test passed, print the summary only - logger.info('\n'+reboot_summary) - else: - logger.info(reboot_text_log_file) + reboot_summary = re.search(r"Summary:(\n|.)*?=========", reboot_text_log_file) + if reboot_summary: + if reboot_summary.group().find('Fails') == -1: + # if no fails detected - the test passed, print the summary only + logger.info('\n'+reboot_summary.group()) + else: + logger.info(reboot_text_log_file) def acl_manager_checker(self, error_list): """ @@ -604,7 +607,7 @@ def runRebootTest(self): if self.postboot_setup: self.postboot_setup() # capture the test logs, and print all of them in case of failure, or a summary in case of success - log_dir = self.__fetchTestLogs(rebootOper) + log_dir = self.__fetchTestLogs(rebootOper, log_dst_suffix=rebootOper) self.print_test_logs_summary(log_dir) if self.advanceboot_loganalyzer and post_reboot_analysis: verification_errors = post_reboot_analysis(marker, event_counters=event_counters, @@ -638,6 +641,88 @@ def runRebootTestcase(self, prebootList=None, inbootList=None, prebootFiles='pee self.imageInstall(prebootList, inbootList, prebootFiles) return self.runRebootTest() + def runMultiHopRebootTestcase(self, upgrade_path_urls, prebootFiles='peer_dev_info,neigh_port_info', + base_image_setup=None, pre_hop_setup=None, + post_hop_teardown=None, multihop_advanceboot_loganalyzer_factory=None): + """ + This method validates and prepares test bed for multi-hop reboot test case. It runs the reboot test case using + provided test arguments. + @param prebootList: list of operation to run before reboot process + @param prebootFiles: preboot files + """ + # Install image A (base image) + self.imageInstall(None, None, prebootFiles) + if base_image_setup: + base_image_setup() + + test_results = dict() + test_case_name = str(self.request.node.name) + test_results[test_case_name] = list() + for hop_index, _ in enumerate(upgrade_path_urls[1:], start=1): + try: + if pre_hop_setup: + pre_hop_setup(hop_index) + if multihop_advanceboot_loganalyzer_factory: + pre_reboot_analysis, post_reboot_analysis = multihop_advanceboot_loganalyzer_factory(hop_index) + marker = pre_reboot_analysis() + event_counters = self.__setupRebootOper(None) + + # Run the upgrade + thread = InterruptableThread( + target=self.__runPtfRunner, + kwargs={"ptf_collect_dir": "./logs/ptf_collect/hop{}/".format(hop_index)}) + thread.daemon = True + thread.start() + # give the test REBOOT_CASE_TIMEOUT (1800s) to complete the reboot with IO, + # and then additional 300s to examine the pcap, logs and generate reports + ptf_timeout = REBOOT_CASE_TIMEOUT + 300 + thread.join(timeout=ptf_timeout, suppress_exception=True) + self.ptfhost.shell("pkill -f 'ptftests advanced-reboot.ReloadTest'", module_ignore_errors=True) + # the thread might still be running, and to catch any exceptions after pkill allow 10s to join + thread.join(timeout=10) + + self.__verifyRebootOper(None) + if self.duthost.num_asics() == 1 and not check_bgp_router_id(self.duthost, self.mgFacts): + test_results[test_case_name].append("Failed to verify BGP router identifier is Loopback0 on %s" % + self.duthost.hostname) + if post_hop_teardown: + post_hop_teardown(hop_index) + except Exception: + traceback_msg = traceback.format_exc() + err_msg = "Exception caught while running advanced-reboot test on ptf: \n{}".format(traceback_msg) + logger.error(err_msg) + test_results[test_case_name].append(err_msg) + finally: + # capture the test logs, and print all of them in case of failure, or a summary in case of success + log_dir = self.__fetchTestLogs(log_dst_suffix="hop{}".format(hop_index)) + self.print_test_logs_summary(log_dir) + if multihop_advanceboot_loganalyzer_factory and post_reboot_analysis: + verification_errors = post_reboot_analysis(marker, event_counters=event_counters, log_dir=log_dir) + if verification_errors: + logger.error("Post reboot verification failed. List of failures: {}" + .format('\n'.join(verification_errors))) + test_results[test_case_name].extend(verification_errors) + # Set the post_reboot_analysis to None to avoid using it again after post_hop_teardown + # on the subsequent iteration in the event that we land in the finally block before + # the new one is initialised + post_reboot_analysis = None + self.acl_manager_checker(test_results[test_case_name]) + self.__clearArpAndFdbTables() + self.__revertRebootOper(None) + + failed_list = [(testcase, failures) for testcase, failures in list(test_results.items()) + if len(failures) != 0] + pytest_assert(len(failed_list) == 0, "Advanced-reboot failure. Failed multi-hop test {testname} " + "on update {hop_index} from {from_image} to {to_image}, " + "failure summary:\n{fail_summary}".format( + testname=self.request.node.name, + hop_index=hop_index, + from_image=upgrade_path_urls[hop_index-1], + to_image=upgrade_path_urls[hop_index], + fail_summary=failed_list + )) + return True # Success + def __setupRebootOper(self, rebootOper): if self.dual_tor_mode: for device in self.duthosts: @@ -702,10 +787,11 @@ def __revertRebootOper(self, rebootOper): logger.info('Running revert handler for reboot operation {}'.format(rebootOper)) rebootOper.revert() - def __runPtfRunner(self, rebootOper=None): + def __runPtfRunner(self, rebootOper=None, ptf_collect_dir="./logs/ptf_collect/"): """ Run single PTF advanced-reboot.ReloadTest @param rebootOper:Reboot operation to conduct before/during reboot process + @param ptf_collect_dir: PTF log collection directory """ logger.info("Running PTF runner on PTF host: {0}".format(self.ptfhost)) @@ -743,6 +829,7 @@ def __runPtfRunner(self, rebootOper=None): "service_list": None if self.rebootType != 'service-warm-restart' else self.service_list, "service_data": None if self.rebootType != 'service-warm-restart' else self.service_data, "neighbor_type": self.neighborType, + "kvm_support": True, } if self.capture_on_vmhost: @@ -790,6 +877,7 @@ def __runPtfRunner(self, rebootOper=None): platform="remote", params=params, log_file='/tmp/advanced-reboot.ReloadTest.log', + ptf_collect_dir=ptf_collect_dir, module_ignore_errors=self.moduleIgnoreErrors, timeout=REBOOT_CASE_TIMEOUT, is_python3=True diff --git a/tests/common/fixtures/duthost_utils.py b/tests/common/fixtures/duthost_utils.py index d2913307fdf..e906989b93a 100644 --- a/tests/common/fixtures/duthost_utils.py +++ b/tests/common/fixtures/duthost_utils.py @@ -619,6 +619,17 @@ def check_bgp_router_id(duthost, mgFacts): logger.error("Error loading BGP routerID - {}".format(e)) +def wait_bgp_sessions(duthost, timeout=120): + """ + A helper function to wait bgp sessions on DUT + """ + bgp_neighbors = duthost.get_bgp_neighbors_per_asic(state="all") + pytest_assert( + wait_until(timeout, 10, 0, duthost.check_bgp_session_state_all_asics, bgp_neighbors), + "Not all bgp sessions are established after config reload", + ) + + @pytest.fixture(scope="module") def convert_and_restore_config_db_to_ipv6_only(duthosts): """Convert the DUT's mgmt-ip to IPv6 only @@ -754,7 +765,7 @@ def convert_and_restore_config_db_to_ipv6_only(duthosts): if config_db_modified[duthost.hostname]: logger.info(f"config changed. Doing config reload for {duthost.hostname}") try: - config_reload(duthost, wait=120) + config_reload(duthost, wait=300, wait_for_bgp=True) except AnsibleConnectionFailure as e: # IPV4 mgmt interface been deleted by config reload # In latest SONiC, config reload command will exit after mgmt interface restart @@ -767,6 +778,7 @@ def convert_and_restore_config_db_to_ipv6_only(duthosts): # Wait until all critical processes are up, # especially snmpd as it needs to be up for SNMP status verification wait_critical_processes(duthost) + wait_bgp_sessions(duthost) # Verify mgmt-interface status mgmt_intf_name = "eth0" diff --git a/tests/common/fixtures/ptfhost_utils.py b/tests/common/fixtures/ptfhost_utils.py index 642cd521e74..3d3c0703320 100644 --- a/tests/common/fixtures/ptfhost_utils.py +++ b/tests/common/fixtures/ptfhost_utils.py @@ -669,3 +669,19 @@ def skip_traffic_test(request): if m.name == "skip_traffic_test": return True return False + + +@pytest.fixture(scope='function') +def disable_ipv6(ptfhost): + default_ipv6_status = ptfhost.shell("sysctl -n net.ipv6.conf.all.disable_ipv6")["stdout"] + changed = False + # Disable IPv6 on all interfaces in PTF container + if default_ipv6_status != "1": + ptfhost.shell("echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6") + changed = True + + yield + + # Restore the original IPv6 setting on all interfaces in the PTF container + if changed: + ptfhost.shell("echo {} > /proc/sys/net/ipv6/conf/all/disable_ipv6".format(default_ipv6_status)) diff --git a/tests/common/flow_counter/flow_counter_utils.py b/tests/common/flow_counter/flow_counter_utils.py index ad1907ebb37..37ed3d3bd1f 100644 --- a/tests/common/flow_counter/flow_counter_utils.py +++ b/tests/common/flow_counter/flow_counter_utils.py @@ -2,6 +2,7 @@ import logging import pytest import random +import time from tests.common.helpers.assertions import pytest_assert from tests.common.utilities import wait_until, check_skip_release @@ -15,7 +16,7 @@ class RouteFlowCounterTestContext: """Allow caller to use "with" key words to run router flow counter test. """ - def __init__(self, support, dut, route_pattern_list, expected_stats, interval=1000): + def __init__(self, support, dut, route_pattern_list, expected_stats, interval=1000, wait_before_check=True): """Init RouteFlowCounterTestContext Args: @@ -24,12 +25,14 @@ def __init__(self, support, dut, route_pattern_list, expected_stats, interval=10 e.g. ['1.1.1.0/24', 'Vrf1|1.1.1.0/24', 'Vnet1|2.2.2.0/24'] expected_stats (dict): Expected result value. e.g. {'1.1.1.0/24': {'packets': '5', 'bytes': '4500'}} interval (int, optional): Route flow counter query interval. Defaults to 1000. + wait_before_check: Whether wait for the interval before checking the counters. """ self.dut = dut self.route_pattern_list = route_pattern_list self.expected_stats = expected_stats self.interval = interval self.is_route_flow_counter_supported = support + self.wait_before_check = wait_before_check def __enter__(self): """Enable route flow counter and configure route pattern @@ -46,7 +49,7 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): """Do following tasks: 1. Verify route flow counter stats agaist expected value - 2. Disable route flow coutern and remove route pattern + 2. Disable route flow counter and remove route pattern Args: exc_type (object): not used @@ -57,6 +60,8 @@ def __exit__(self, exc_type, exc_val, exc_tb): return try: + if self.wait_before_check: + time.sleep(self.interval / 1000) result, message = self.check_stats() pytest_assert(result, message) finally: diff --git a/tests/common/gu_utils.py b/tests/common/gu_utils.py index cb5b0f96a37..07435568d5b 100644 --- a/tests/common/gu_utils.py +++ b/tests/common/gu_utils.py @@ -3,6 +3,7 @@ import pytest import os import time +import re from jsonpointer import JsonPointer from tests.common.helpers.assertions import pytest_assert from tests.common.utilities import wait_until @@ -19,6 +20,8 @@ BASE_DIR = os.path.dirname(os.path.realpath(__file__)) FILES_DIR = os.path.join(BASE_DIR, "files") TMP_DIR = '/tmp' +HOST_NAME = "/localhost" +ASIC_PREFIX = "/asic" def generate_tmpfile(duthost): @@ -33,6 +36,36 @@ def delete_tmpfile(duthost, tmpfile): duthost.file(path=tmpfile, state='absent') +def format_json_patch_for_multiasic(duthost, json_data, is_asic_specific=False): + if is_asic_specific: + return json_data + + json_patch = [] + if duthost.is_multi_asic: + num_asic = duthost.facts.get('num_asic') + + for operation in json_data: + path = operation["path"] + if path.startswith(HOST_NAME) and ASIC_PREFIX in path: + json_patch.append(operation) + else: + template = { + "op": operation["op"], + "path": "{}{}".format(HOST_NAME, path) + } + + if operation["op"] in ["add", "replace", "test"]: + template["value"] = operation["value"] + json_patch.append(template.copy()) + for asic_index in range(num_asic): + asic_ns = "{}{}".format(ASIC_PREFIX, asic_index) + template["path"] = "{}{}".format(asic_ns, path) + json_patch.append(template.copy()) + json_data = json_patch + + return json_data + + def apply_patch(duthost, json_data, dest_file): """Run apply-patch on target duthost @@ -107,7 +140,7 @@ def expect_res_success(duthost, output, expected_content_list, unexpected_conten def expect_op_failure(output): """Expected failure from apply-patch output """ - logger.info("return code {}".format(output['rc'])) + logger.info("Return code: {}, error: {}".format(output['rc'], output['stderr'])) pytest_assert( output['rc'], "The command should fail with non zero return code" @@ -477,3 +510,24 @@ def expect_acl_rule_removed(duthost, rulename, setup): removed = len(output) == 0 pytest_assert(removed, "'{}' showed a rule, this following rule should have been removed".format(cmds)) + + +def get_bgp_speaker_runningconfig(duthost): + """ Get bgp speaker config that contains src_address and ip_range + + Sample output in t0: + ['\n neighbor BGPSLBPassive update-source 10.1.0.32', + '\n neighbor BGPVac update-source 10.1.0.32', + '\n bgp listen range 10.255.0.0/25 peer-group BGPSLBPassive', + '\n bgp listen range 192.168.0.0/21 peer-group BGPVac'] + """ + cmds = "show runningconfiguration bgp" + output = duthost.shell(cmds) + pytest_assert(not output['rc'], "'{}' failed with rc={}".format(cmds, output['rc'])) + + # Sample: + # neighbor BGPSLBPassive update-source 10.1.0.32 + # bgp listen range 192.168.0.0/21 peer-group BGPVac + bgp_speaker_pattern = r"\s+neighbor.*update-source.*|\s+bgp listen range.*" + bgp_speaker_config = re.findall(bgp_speaker_pattern, output['stdout']) + return bgp_speaker_config diff --git a/tests/common/helpers/bgp.py b/tests/common/helpers/bgp.py index 932fc9a11e9..4f14b1d3411 100644 --- a/tests/common/helpers/bgp.py +++ b/tests/common/helpers/bgp.py @@ -143,7 +143,7 @@ def teardown_session(self): msg = msg.format(self.peer_ip) logging.debug("teardown session: %s", msg) url = "http://%s:%d" % (self.ptfip, self.port) - resp = requests.post(url, data={"commands": msg}) + resp = requests.post(url, data={"commands": msg}, proxies={"http": None, "https": None}) logging.debug("teardown session return: %s" % resp) assert resp.status_code == 200 @@ -162,7 +162,7 @@ def announce_route(self, route): msg = msg.format(**route) logging.debug("announce route: %s", msg) url = "http://%s:%d" % (self.ptfip, self.port) - resp = requests.post(url, data={"commands": msg}) + resp = requests.post(url, data={"commands": msg}, proxies={"http": None, "https": None}) logging.debug("announce return: %s", resp) assert resp.status_code == 200 @@ -174,6 +174,6 @@ def withdraw_route(self, route): msg = msg.format(**route) logging.debug("withdraw route: %s", msg) url = "http://%s:%d" % (self.ptfip, self.port) - resp = requests.post(url, data={"commands": msg}) + resp = requests.post(url, data={"commands": msg}, proxies={"http": None, "https": None}) logging.debug("withdraw return: %s", resp) assert resp.status_code == 200 diff --git a/tests/common/helpers/dut_utils.py b/tests/common/helpers/dut_utils.py index e7307c7c4dc..4097762a6ec 100644 --- a/tests/common/helpers/dut_utils.py +++ b/tests/common/helpers/dut_utils.py @@ -1,17 +1,32 @@ import logging import allure import os +import jinja2 +import glob +import re +import yaml from tests.common.helpers.assertions import pytest_assert from tests.common.utilities import get_host_visible_vars from tests.common.utilities import wait_until from tests.common.errors import RunAnsibleModuleFail from collections import defaultdict +from tests.common.connections.console_host import ConsoleHost +from tests.common.utilities import get_dut_current_passwd +from tests.common.connections.base_console_conn import ( + CONSOLE_SSH_CISCO_CONFIG, + CONSOLE_SSH_DIGI_CONFIG, + CONSOLE_SSH_SONIC_CONFIG +) +import time CONTAINER_CHECK_INTERVAL_SECS = 1 CONTAINER_RESTART_THRESHOLD_SECS = 180 + # Ansible config files LAB_CONNECTION_GRAPH_PATH = os.path.normpath((os.path.join(os.path.dirname(__file__), "../../../ansible/files"))) +BASI_PATH = os.path.dirname(os.path.abspath(__file__)) + logger = logging.getLogger(__name__) @@ -346,7 +361,7 @@ def get_sai_sdk_dump_file(duthost, dump_file_name): cmd_gen_sdk_dump = f"docker exec syncd bash -c 'saisdkdump -f {full_path_dump_file}' " duthost.shell(cmd_gen_sdk_dump) - cmd_copy_dmp_from_syncd_to_host = f"docker cp syncd:{full_path_dump_file} {full_path_dump_file}" + cmd_copy_dmp_from_syncd_to_host = f"docker cp syncd: {full_path_dump_file} {full_path_dump_file}" duthost.shell(cmd_copy_dmp_from_syncd_to_host) compressed_dump_file = f"/tmp/{dump_file_name}.tar.gz" @@ -393,3 +408,187 @@ def is_mellanox_fanout(duthost, localhost): return False return True + + +def create_duthost_console(duthost,localhost, conn_graph_facts, creds): # noqa F811 + dut_hostname = duthost.hostname + console_host = conn_graph_facts['device_console_info'][dut_hostname]['ManagementIp'] + if "/" in console_host: + console_host = console_host.split("/")[0] + console_port = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['peerport'] + console_type = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['type'] + console_menu_type = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['menu_type'] + console_username = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['proxy'] + + console_type = f"console_{console_type}" + console_menu_type = f"{console_type}_{console_menu_type}" + + # console password and sonic_password are lists, which may contain more than one password + sonicadmin_alt_password = localhost.host.options['variable_manager']._hostvars[dut_hostname].get( + "ansible_altpassword") + sonic_password = [creds['sonicadmin_password'], sonicadmin_alt_password] + + # Attempt to clear the console port + try: + duthost_clear_console_port( + menu_type=console_menu_type, + console_host=console_host, + console_port=console_port, + console_username=console_username, + console_password=creds['console_password'][console_type] + ) + except Exception as e: + logger.warning(f"Issue trying to clear console port: {e}") + + # Set up console host + host = None + for attempt in range(1, 4): + try: + host = ConsoleHost(console_type=console_type, + console_host=console_host, + console_port=console_port, + sonic_username=creds['sonicadmin_user'], + sonic_password=sonic_password, + console_username=console_username, + console_password=creds['console_password'][console_type]) + break + except Exception as e: + logger.warning(f"Attempt {attempt}/3 failed: {e}") + continue + else: + raise Exception("Failed to set up connection to console port. See warning logs for details.") + + return host + + +def creds_on_dut(duthost): + """ read credential information according to the dut inventory """ + groups = duthost.host.options['inventory_manager'].get_host(duthost.hostname).get_vars()['group_names'] + groups.append("fanout") + logger.info("dut {} belongs to groups {}".format(duthost.hostname, groups)) + exclude_regex_patterns = [ + r'topo_.*\.yml', + r'breakout_speed\.yml', + r'lag_fanout_ports_test_vars\.yml', + r'qos\.yml', + r'sku-sensors-data\.yml', + r'mux_simulator_http_port_map\.yml' + ] + ansible_folder_path = os.path.join(BASI_PATH, "../../../ansible/") + files = glob.glob(os.path.join(ansible_folder_path, "group_vars/all/*.yml")) + files += glob.glob(os.path.join(ansible_folder_path, "vars/*.yml")) + for group in groups: + files += glob.glob(os.path.join(ansible_folder_path, f"group_vars/{group}/*.yml")) + filtered_files = [ + f for f in files if not re.search('|'.join(exclude_regex_patterns), f) + ] + + creds = {} + for f in filtered_files: + with open(f) as stream: + v = yaml.safe_load(stream) + if v is not None: + creds.update(v) + else: + logging.info("skip empty var file {}".format(f)) + + cred_vars = [ + "sonicadmin_user", + "sonicadmin_password", + "docker_registry_host", + "docker_registry_username", + "docker_registry_password", + "public_docker_registry_host" + ] + hostvars = duthost.host.options['variable_manager']._hostvars[duthost.hostname] + for cred_var in cred_vars: + if cred_var in creds: + creds[cred_var] = jinja2.Template(creds[cred_var]).render(**hostvars) + # load creds for console + if "console_login" not in list(hostvars.keys()): + console_login_creds = {} + else: + console_login_creds = hostvars["console_login"] + creds["console_user"] = {} + creds["console_password"] = {} + + creds["ansible_altpasswords"] = [] + + # If ansible_altpasswords is empty, add ansible_altpassword to it + if len(creds["ansible_altpasswords"]) == 0: + creds["ansible_altpasswords"].append(hostvars["ansible_altpassword"]) + + passwords = creds["ansible_altpasswords"] + [creds["sonicadmin_password"]] + creds['sonicadmin_password'] = get_dut_current_passwd( + duthost.mgmt_ip, + duthost.mgmt_ipv6, + creds['sonicadmin_user'], + passwords + ) + + for k, v in list(console_login_creds.items()): + creds["console_user"][k] = v["user"] + creds["console_password"][k] = v["passwd"] + + return creds + + +def duthost_clear_console_port( + menu_type: str, + console_host: str, + console_port: str, + console_username: str, + console_password: str +): + """ + Helper function to clear the console port for a given DUT. + Useful when a device has an occupied console port, preventing dut_console tests from running. + + Parameters: + menu_type: Connection type for the console's config menu (as expected by the ConsoleTypeMapper) + console_host: DUT host's console IP address + console_port: DUT host's console port, to be cleared + console_username: Username for the console account (overridden for Digi console) + console_password: Password for the console account + """ + if menu_type == "console_ssh_": + raise Exception("Device does not have a defined Console_menu_type.") + + # Override console user if the configuration menu is Digi, as this requires admin login + console_user = 'admin' if menu_type == CONSOLE_SSH_DIGI_CONFIG else console_username + + duthost_config_menu = ConsoleHost( + console_type=menu_type, + console_host=console_host, + console_port=console_port, + console_username=console_user, + console_password=console_password, + sonic_username=None, + sonic_password=None + ) + + # Command lists for each config menu type + # List of tuples, containing a command to execute, and an optional pattern to wait for + command_list = { + CONSOLE_SSH_DIGI_CONFIG: [ + ('2', None), # Enter serial port config + (console_port, None), # Choose DUT console port + ('a', None), # Enter port management + ('1', f'Port #{console_port} has been reset successfully.') # Reset chosen port + ], + CONSOLE_SSH_SONIC_CONFIG: [ + (f'sudo sonic-clear line {console_port}', None) # Clear DUT console port (requires sudo) + ], + CONSOLE_SSH_CISCO_CONFIG: [ + (f'clear line tty {console_port}', '[confirm]'), # Clear DUT console port + ('', '[OK]') # Confirm selection + ], + } + + for command, wait_for_pattern in command_list[menu_type]: + duthost_config_menu.write_channel(command + duthost_config_menu.RETURN) + duthost_config_menu.read_until_prompt_or_pattern(wait_for_pattern) + + duthost_config_menu.disconnect() + logger.info(f"Successfully cleared console port {console_port}, sleeping for 5 seconds") + time.sleep(5) diff --git a/tests/common/helpers/enable-dynamic-buffer.py b/tests/common/helpers/enable-dynamic-buffer.py index 0f122f2cd2e..ebf28bfef99 100755 --- a/tests/common/helpers/enable-dynamic-buffer.py +++ b/tests/common/helpers/enable-dynamic-buffer.py @@ -2,6 +2,7 @@ import subprocess import re +import time from sonic_py_common.logger import Logger from swsscommon.swsscommon import ConfigDBConnector @@ -119,6 +120,10 @@ def stop_traditional_buffer_model(config_db): # Stop the buffermgrd # We don't stop the buffermgrd at the beginning # because we need it to remove tables from APPL_DB while their counter part are removed from CONFIG_DB + + # Before stopping buffermgrd, need to make sure buffermgrd is running, + # otherwise it might cause some side-effect timing issue + check_buffermgrd_is_running() command = 'docker exec swss supervisorctl stop buffermgrd' proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) _, err = proc.communicate() @@ -131,6 +136,28 @@ def stop_traditional_buffer_model(config_db): return lossless_pgs +def check_buffermgrd_is_running(): + cmd_get_buffermgrd_status = "docker exec swss supervisorctl status buffermgrd" + max_try_times = 10 + try_times = 0 + while try_times < max_try_times: + try_times += 1 + proc = subprocess.Popen(cmd_get_buffermgrd_status, shell=True, stdout=subprocess.PIPE) + output, err = proc.communicate() + if err: + logger.log_notice("try_times:{}. Failed to check buffermgrd status: {}".format(try_times, err)) + else: + if "RUNNING" in output.decode('utf-8'): + logger.log_notice("Daemon buffermgrd is running") + return True + else: + logger.log_notice("try_times:{}. Daemon buffermgrd is not running".format(try_times)) + time.sleep(2) + + logger.log_notice("Daemon buffermgrd is not running, after checking {} times".format(max_try_times)) + exit(1) + + def start_dynamic_buffer_model(config_db, lossless_pgs, metadata): """ Start the dynamic buffer model diff --git a/tests/common/helpers/pfc_gen_t2.py b/tests/common/helpers/pfc_gen_t2.py index baf292b79ac..04f1d50dd76 100755 --- a/tests/common/helpers/pfc_gen_t2.py +++ b/tests/common/helpers/pfc_gen_t2.py @@ -261,13 +261,14 @@ def main(): num_sent = _sendmmsg(s.fileno(), m_msghdr[0], num_to_send, 0) # direct to c library api if num_sent < 0: errno = get_errno() - fo_logger.debug(fo_str + ' sendmmsg got errno ' + str(errno) + ' for socket ' + s.getsockname()) + fo_logger.debug(fo_str + ' sendmmsg got errno ' + str(errno) + ' for socket ' + + str(s.getsockname())) break else: if num_sent != num_to_send: fo_logger.debug(fo_str + ' sendmmsg iteration ' + str(iters) + ' only sent ' + str(num_sent) + ' out of requested ' + str(num_to_send) + - ' for socket ' + s.getsockname()) + ' for socket ' + str(s.getsockname())) # Count across all sockets total_num_sent += num_sent iters += 1 @@ -302,14 +303,16 @@ def main(): num_sent = _sendmmsg(s.fileno(), m_msghdr[0], num_to_send, 0) if num_sent < 0: errno = get_errno() - fo_logger.debug(fo_str + ' sendmmsg got errno ' + str(errno) + ' for socket ' + s.getsockname()) + fo_logger.debug(fo_str + ' sendmmsg got errno ' + str(errno) + ' for socket ' + + str(s.getsockname())) test_failed = True break else: if num_sent != num_to_send: fo_logger.debug(fo_str + ' sendmmsg iteration ' + str(iters) + ' only sent ' + str(num_sent) + - ' out of requested ' + str(num_to_send) + ' for socket ' + s.getsockname()) + ' out of requested ' + str(num_to_send) + ' for socket ' + + str(s.getsockname())) total_pkts_remaining[index] -= num_sent total_pkts_sent[index] += num_sent if total_pkts_remaining[index] <= 0: diff --git a/tests/common/helpers/pfc_storm.py b/tests/common/helpers/pfc_storm.py index 3571dd78b04..92be4bfd0ed 100644 --- a/tests/common/helpers/pfc_storm.py +++ b/tests/common/helpers/pfc_storm.py @@ -35,6 +35,7 @@ def __init__(self, duthost, fanout_graph_facts, fanouthosts, **kwargs): Other keys: 'pfc_storm_defer_time', 'pfc_storm_stop_defer_time', 'pfc_asym' """ self.dut = duthost + self.asic_type = duthost.facts['asic_type'] hostvars = self.dut.host.options['variable_manager']._hostvars[self.dut.hostname] self.inventory = hostvars['inventory_file'].split('/')[-1] self.ip_addr = duthost.mgmt_ip @@ -53,14 +54,20 @@ def __init__(self, duthost, fanout_graph_facts, fanouthosts, **kwargs): self.platform_name = None self.update_platform_name() self._populate_optional_params(kwargs) - self.peer_device = self.fanout_hosts[self.peer_info['peerdevice']] - self.fanout_asic_type = self.peer_device.facts['asic_type'] if isinstance(self.peer_device.host, SonicHost) \ - else None + if self.asic_type == 'vs': + self.peer_device = {} + self.fanout_asic_type = "" + else: + self.peer_device = self.fanout_hosts[self.peer_info['peerdevice']] + self.fanout_asic_type = self.peer_device.facts['asic_type'] \ + if isinstance(self.peer_device.host, SonicHost) else None def _populate_peer_hwsku(self): """ Find out the hwsku associated with the fanout """ + if self.asic_type == 'vs': + return peer_dev_info = self.fanout_info[self.peer_info['peerdevice']]['device_info'] self.peer_info['hwsku'] = peer_dev_info['HwSku'] @@ -68,6 +75,8 @@ def _validate_params(self, **params): """ Validate if all the needed keys are present """ + if self.asic_type == 'vs': + return expected_args = params.get('expected_args') peer_info_keys = list(self.peer_info.keys()) if not all(elem in peer_info_keys for elem in expected_args): @@ -108,6 +117,8 @@ def _create_pfc_gen(self): """ Create the pfc generation file on the fanout if it does not exist """ + if self.asic_type == 'vs': + return pfc_gen_fpath = os.path.join(self._PFC_GEN_DIR[self.peer_device.os], self.pfc_gen_file) out = self.peer_device.stat(path=pfc_gen_fpath) @@ -118,6 +129,8 @@ def deploy_pfc_gen(self): """ Deploy the pfc generation file on the fanout """ + if self.asic_type == 'vs': + return if self.peer_device.os in ('eos', 'sonic'): src_pfc_gen_file = "common/helpers/{}".format(self.pfc_gen_file) self._create_pfc_gen() @@ -141,6 +154,8 @@ def update_peer_info(self, peer_info): """ Update the fanout info. Can be invoked after the class init to change the fanout or fanout interface """ + if self.asic_type == 'vs': + return self._validate_params(expected_args=['peerdevice', 'pfc_fanout_interface']) for key in peer_info: self.peer_info[key] = peer_info[key] @@ -153,6 +168,8 @@ def update_platform_name(self): """ Identifies the fanout platform """ + if self.asic_type == 'vs': + return if 'arista' in self.peer_info['hwsku'].lower(): self.platform_name = 'arista' elif 'MLNX-OS' in self.peer_info['hwsku']: @@ -167,26 +184,27 @@ def _update_template_args(self): "pfc_gen_file": self.pfc_gen_file, "pfc_queue_index": self.pfc_queue_idx, "pfc_frames_number": self.pfc_frames_number, - "pfc_fanout_interface": self.peer_info['pfc_fanout_interface'], + "pfc_fanout_interface": self.peer_info['pfc_fanout_interface'] if self.asic_type != 'vs' else "", "ansible_eth0_ipv4_addr": self.ip_addr, - "peer_hwsku": self.peer_info['hwsku'], + "peer_hwsku": self.peer_info['hwsku'] if self.asic_type != 'vs' else "", "send_pfc_frame_interval": self.send_pfc_frame_interval, "pfc_send_period": self.pfc_send_period } - if self.peer_device.os in self._PFC_GEN_DIR: - self.extra_vars['pfc_gen_dir'] = \ - self._PFC_GEN_DIR[self.peer_device.os] if getattr(self, "pfc_storm_defer_time", None): self.extra_vars.update({"pfc_storm_defer_time": self.pfc_storm_defer_time}) if getattr(self, "pfc_storm_stop_defer_time", None): self.extra_vars.update({"pfc_storm_stop_defer_time": self.pfc_storm_stop_defer_time}) if getattr(self, "pfc_asym", None): self.extra_vars.update({"pfc_asym": self.pfc_asym}) - if self.fanout_asic_type == 'mellanox' and self.peer_device.os == 'sonic': - self.extra_vars.update({"pfc_fanout_label_port": self._generate_mellanox_label_ports()}) - if self.dut.facts['asic_type'] == "mellanox": + if self.asic_type == "mellanox": self.extra_vars.update({"pfc_gen_multiprocess": True}) + if self.asic_type != 'vs': + if self.peer_device.os in self._PFC_GEN_DIR: + self.extra_vars['pfc_gen_dir'] = self._PFC_GEN_DIR[self.peer_device.os] + if self.fanout_asic_type == 'mellanox' and self.peer_device.os == 'sonic': + self.extra_vars.update({"pfc_fanout_label_port": self._generate_mellanox_label_ports()}) + def _prepare_start_template(self): """ Populates the pfc storm start template @@ -198,6 +216,9 @@ def _prepare_start_template(self): elif self.fanout_asic_type == 'mellanox' and self.peer_device.os == 'sonic': self.pfc_start_template = os.path.join( TEMPLATES_DIR, "pfc_storm_mlnx_{}.j2".format(self.peer_device.os)) + elif self.asic_type == 'vs': + self.pfc_start_template = os.path.join( + TEMPLATES_DIR, "pfc_storm_eos.j2") else: self.pfc_start_template = os.path.join( TEMPLATES_DIR, "pfc_storm_{}.j2".format(self.peer_device.os)) @@ -214,6 +235,9 @@ def _prepare_stop_template(self): elif self.fanout_asic_type == 'mellanox' and self.peer_device.os == 'sonic': self.pfc_stop_template = os.path.join( TEMPLATES_DIR, "pfc_storm_stop_mlnx_{}.j2".format(self.peer_device.os)) + elif self.asic_type == 'vs': + self.pfc_stop_template = os.path.join( + TEMPLATES_DIR, "pfc_storm_stop_eos.j2") else: self.pfc_stop_template = os.path.join( TEMPLATES_DIR, "pfc_storm_stop_{}.j2".format(self.peer_device.os)) @@ -223,6 +247,8 @@ def _run_pfc_gen_template(self): """ Run pfc generator script on a specific OS type. """ + if self.asic_type == 'vs': + return if self.peer_device.os == 'sonic': with open(self.extra_vars['template_path']) as tmpl_fd: tmpl = Template(tmpl_fd.read()) @@ -243,6 +269,8 @@ def start_storm(self): Starts PFC storm on the fanout interfaces """ self._prepare_start_template() + if self.asic_type == 'vs': + return logger.info("--- Starting PFC storm on {} on interfaces {} on queue {} ---" .format(self.peer_info['peerdevice'], self.peer_info['pfc_fanout_interface'], @@ -254,6 +282,8 @@ def stop_storm(self): Stops PFC storm on the fanout interfaces """ self._prepare_stop_template() + if self.asic_type == 'vs': + return logger.info("--- Stopping PFC storm on {} on interfaces {} on queue {} ---" .format(self.peer_info['peerdevice'], self.peer_info['pfc_fanout_interface'], @@ -283,6 +313,7 @@ def __init__(self, duthost, fanout_graph_facts, fanouthosts, peer_params): storm_handle(dict): PFCStorm instance for each fanout connected to the DUT """ self.duthost = duthost + self.asic_type = duthost.facts['asic_type'] self.fanout_graph = fanout_graph_facts self.fanouthosts = fanouthosts self.peer_params = peer_params @@ -319,10 +350,13 @@ def set_storm_params(self): Construct the peer info and deploy the pfc gen script on the fanouts """ for peer_dev in self.peer_params: - peer_dev_info = self.fanout_graph[peer_dev]['device_info'] - peer_info = {'peerdevice': peer_dev, - 'hwsku': peer_dev_info['HwSku'], - 'pfc_fanout_interface': self.peer_params[peer_dev]['intfs']} + if self.asic_type == 'vs': + peer_info = {} + else: + peer_dev_info = self.fanout_graph[peer_dev]['device_info'] + peer_info = {'peerdevice': peer_dev, + 'hwsku': peer_dev_info['HwSku'], + 'pfc_fanout_interface': self.peer_params[peer_dev]['intfs']} q_idx, frames_cnt, gen_file = self._get_pfc_params(peer_dev) if self.duthost.topo_type == 't2' and self.fanouthosts[peer_dev].os == 'sonic': diff --git a/tests/common/helpers/pfcwd_helper.py b/tests/common/helpers/pfcwd_helper.py index 5b5ecd0c1e6..e4c9a438fae 100644 --- a/tests/common/helpers/pfcwd_helper.py +++ b/tests/common/helpers/pfcwd_helper.py @@ -9,6 +9,7 @@ from tests.ptf_runner import ptf_runner from tests.common import constants +from tests.common.cisco_data import is_cisco_device from tests.common.mellanox_data import is_mellanox_device # If the version of the Python interpreter is greater or equal to 3, set the unicode variable to the str class. @@ -490,7 +491,7 @@ def start_background_traffic( @contextlib.contextmanager def send_background_traffic(duthost, ptfhost, storm_hndle, selected_test_ports, test_ports_info): """Send background traffic, stop the background traffic when the context finish """ - if is_mellanox_device(duthost): + if is_mellanox_device(duthost) or is_cisco_device(duthost): background_traffic_params = _prepare_background_traffic_params(duthost, storm_hndle, selected_test_ports, test_ports_info) @@ -498,7 +499,7 @@ def send_background_traffic(duthost, ptfhost, storm_hndle, selected_test_ports, # Ensure the background traffic is running before moving on time.sleep(1) yield - if is_mellanox_device(duthost): + if is_mellanox_device(duthost) or is_cisco_device(duthost): _stop_background_traffic(ptfhost, background_traffic_log) @@ -567,11 +568,27 @@ def has_neighbor_device(setup_pfc_test): return True -def check_pfc_storm_state(dut, port, queue, expected_state): +def check_pfc_storm_state(dut, port, queue): """ Helper function to check if PFC storm is detected/restored on a given queue """ + pfcwd_stats = dut.show_and_parse("show pfcwd stats") + queue_name = str(port) + ":" + str(queue) + for entry in pfcwd_stats: + if entry["queue"] == queue_name: + logger.info("PFCWD status on queue {} stats: {}".format(queue_name, entry)) + return entry['storm detected/restored'] + logger.info("PFCWD not triggered on queue {}".format(queue_name)) + return None + + +def verify_pfc_storm_in_expected_state(dut, port, queue, expected_state): + """ + Helper function to verify if PFC storm on a specific queue is in expected state + """ pfcwd_stat = parser_show_pfcwd_stat(dut, port, queue) + if dut.facts['asic_type'] == 'vs': + return True if expected_state == "storm": if ("storm" in pfcwd_stat[0]['status']) and \ int(pfcwd_stat[0]['storm_detect_count']) > int(pfcwd_stat[0]['restored_count']): diff --git a/tests/common/helpers/psu_helpers.py b/tests/common/helpers/psu_helpers.py new file mode 100644 index 00000000000..b471487eafb --- /dev/null +++ b/tests/common/helpers/psu_helpers.py @@ -0,0 +1,60 @@ +import logging +from tests.common.helpers.assertions import pytest_assert +from tests.common.utilities import wait_until + + +def turn_on_all_outlets(pdu_controller): + """Turns on all outlets through SNMP and confirms they are turned on successfully + + Args: + pdu_controller (BasePduController): Instance of PDU controller + + Returns: + None + """ + logging.info("Turning on all outlets/PDUs") + outlet_status = pdu_controller.get_outlet_status() + for outlet in outlet_status: + if not outlet['outlet_on']: + pdu_controller.turn_on_outlet(outlet) + + for outlet in outlet_status: + pytest_assert(wait_until(60, 5, 0, check_outlet_status, + pdu_controller, outlet, True), + "Outlet {} did not turn on".format(outlet['pdu_name'])) + + +def check_outlet_status(pdu_controller, outlet, expect_status=True): + """Check if a given PDU matches the expected status + + Args: + pdu_controller (BasePduController): Instance of PDU controller + outlet (RPS outlet): Outlet whose status is to be checked + expect_status (boolean): Expected status in True/False (On/Off) + + Returns: + boolean: True if the outlet matches expected status, False otherwise + """ + status = pdu_controller.get_outlet_status(outlet) + return 'outlet_on' in status[0] and status[0]['outlet_on'] == expect_status + + +def get_grouped_pdus_by_psu(pdu_controller): + """Returns a grouping of PDUs associated with a PSU in dictionary form + + Args: + pdu_controller (BasePduController): Instance of PDU controller + + Returns: + dict: {PSU: array of PDUs} where PDUs are associated with PSU + """ + # Group outlets/PDUs by PSU + outlet_status = pdu_controller.get_outlet_status() + psu_to_pdus = {} + for outlet in outlet_status: + if outlet['psu_name'] not in psu_to_pdus: + psu_to_pdus[outlet['psu_name']] = [outlet] + else: + psu_to_pdus[outlet['psu_name']].append(outlet) + + return psu_to_pdus diff --git a/tests/common/helpers/telemetry_helper.py b/tests/common/helpers/telemetry_helper.py index 2ae26114513..4124a43f53a 100644 --- a/tests/common/helpers/telemetry_helper.py +++ b/tests/common/helpers/telemetry_helper.py @@ -52,6 +52,19 @@ def setup_telemetry_forpyclient(duthost): client_auth_out = duthost.shell('sonic-db-cli CONFIG_DB HGET "%s|gnmi" "client_auth"' % (env.gnmi_config_table), module_ignore_errors=False)['stdout_lines'] client_auth = str(client_auth_out[0]) + + if client_auth == "true": + duthost.shell('sonic-db-cli CONFIG_DB HSET "%s|gnmi" "client_auth" "false"' % (env.gnmi_config_table), + module_ignore_errors=False) + duthost.shell("systemctl reset-failed %s" % (env.gnmi_container)) + duthost.service(name=env.gnmi_container, state="restarted") + # Wait until telemetry was restarted + py_assert(wait_until(100, 10, 0, duthost.is_service_fully_started, env.gnmi_container), + "%s not started." % (env.gnmi_container)) + logger.info("telemetry process restarted") + else: + logger.info('client auth is false. No need to restart telemetry') + return client_auth @@ -83,19 +96,6 @@ def _context_for_setup_streaming_telemetry(request, duthosts, enum_rand_one_per_ env = GNMIEnvironment(duthost, GNMIEnvironment.TELEMETRY_MODE) default_client_auth = setup_telemetry_forpyclient(duthost) - if default_client_auth == "true": - duthost.shell('sonic-db-cli CONFIG_DB HSET "%s|gnmi" "client_auth" "false"' % (env.gnmi_config_table), - module_ignore_errors=False) - duthost.shell("systemctl reset-failed %s" % (env.gnmi_container)) - duthost.service(name=env.gnmi_container, state="restarted") - else: - logger.info('client auth is false. No need to restart telemetry') - - # Wait until telemetry was restarted - py_assert(wait_until(100, 10, 0, duthost.is_service_fully_started, env.gnmi_container), - "%s not started." % (env.gnmi_container)) - logger.info("telemetry process restarted. Now run pyclient on ptfdocker") - # Wait until the TCP port was opened dut_ip = duthost.mgmt_ip if is_ipv6: diff --git a/tests/common/helpers/upgrade_helpers.py b/tests/common/helpers/upgrade_helpers.py index 96004624121..8383919362f 100644 --- a/tests/common/helpers/upgrade_helpers.py +++ b/tests/common/helpers/upgrade_helpers.py @@ -221,6 +221,28 @@ def upgrade_test_helper(duthost, localhost, ptfhost, from_image, to_image, ptfhost.shell('supervisorctl stop ferret') +def multi_hop_warm_upgrade_test_helper(duthost, localhost, ptfhost, tbinfo, get_advanced_reboot, upgrade_type, + upgrade_path_urls, base_image_setup=None, pre_hop_setup=None, + post_hop_teardown=None, multihop_advanceboot_loganalyzer_factory=None, + enable_cpa=False): + + reboot_type = get_reboot_command(duthost, upgrade_type) + if enable_cpa and "warm-reboot" in reboot_type: + # always do warm-reboot with CPA enabled + setup_ferret(duthost, ptfhost, tbinfo) + ptf_ip = ptfhost.host.options['inventory_manager'].get_host(ptfhost.hostname).vars['ansible_host'] + reboot_type = reboot_type + " -c {}".format(ptf_ip) + + advancedReboot = get_advanced_reboot(rebootType=reboot_type) + advancedReboot.runMultiHopRebootTestcase( + upgrade_path_urls, base_image_setup=base_image_setup, pre_hop_setup=pre_hop_setup, + post_hop_teardown=post_hop_teardown, + multihop_advanceboot_loganalyzer_factory=multihop_advanceboot_loganalyzer_factory) + + if enable_cpa and "warm-reboot" in reboot_type: + ptfhost.shell('supervisorctl stop ferret') + + def check_asic_and_db_consistency(pytest_config, duthost, consistency_checker_provider): if not pytest_config.getoption("enable_consistency_checker"): logger.info("Consistency checker is not enabled. Skipping check.") diff --git a/tests/common/helpers/voq_lag.py b/tests/common/helpers/voq_lag.py index d836f586817..a529a53689e 100644 --- a/tests/common/helpers/voq_lag.py +++ b/tests/common/helpers/voq_lag.py @@ -2,7 +2,6 @@ import logging import re -from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert from tests.common.helpers.sonic_db import AsicDbCli, AppDbCli, VoqDbCli @@ -11,14 +10,13 @@ def get_lag_ids_from_chassis_db(duthosts): """ - Get lag_ids from CHASSIS_DB - cmd = 'redis-dump -H 10.0.5.16 -p 6380 -d 12 -y -k "*SYSTEM_LAG_TABLE*PortChannel0016"' - Args: - duthosts: The duthost fixture. + Get all LAG IDs from CHASSIS_DB - Returns: - lag_ids: lag id + Args: + duthosts: duthosts to probe + Returns: + lag_ids: List of LAG ids in CHASSIS_DB """ lag_ids = list() for sup in duthosts.supervisor_nodes: @@ -27,29 +25,30 @@ def get_lag_ids_from_chassis_db(duthosts): for lag in lag_list: lag_ids.append(voqdb.hget_key_value(lag, "lag_id")) - logging.info("LAG id's preset in CHASSIS_DB are {}".format(lag_ids)) + logging.info("LAG IDs present in CHASSIS_DB are {}".format(lag_ids)) return lag_ids -def get_lag_id_from_chassis_db(duthosts): +def get_lag_id_from_chassis_db(duthosts, pc=TMP_PC): """ - Get LAG id for a lag form CHASSIS_DB + Get LAG ID for a LAG from CHASSIS_DB + Args: - duthosts: The duthost fixture. + duthosts: duthosts to probe Returns: - lag_ids : lag id + lag_id: LAG ID of LAG """ for sup in duthosts.supervisor_nodes: voqdb = VoqDbCli(sup) lag_list = voqdb.get_lag_list() for lag in lag_list: - if TMP_PC in lag: + if pc in lag: lag_id = voqdb.hget_key_value(lag, "lag_id") - logging.info("LAG id for lag {} is {}".format(TMP_PC, lag_id)) + logging.info("LAG ID for LAG {} is {}".format(pc, lag_id)) return lag_id - pytest.fail("LAG id for lag {} is not preset in CHASSIS_DB".format(TMP_PC)) + pytest.fail("LAG ID for LAG {} is not present in CHASSIS_DB".format(pc)) def verify_lag_interface(duthost, asic, portchannel, expected=True): @@ -60,311 +59,200 @@ def verify_lag_interface(duthost, asic, portchannel, expected=True): return False -def add_lag(duthost, asic, portchannel_members=None, portchannel_ip=None, - portchannel=TMP_PC, add=True): - """ - Add LAG to an ASIC - runs command e.g. 'sudo config portchannel -n asic0 add PortChannel99' - Args: - duthost: duthost - asic: asic object - portchannel_members : portchannel members - portchannel_ip: portchannel ip - portchannel : portchannel - add : True adds portchannel - """ - if add: - config_cmd = "config portchannel {}"\ - .format(asic.cli_ns_option if asic.cli_ns_option else "") - duthost.shell("{} add {}".format(config_cmd, portchannel)) - int_facts = duthost.interface_facts(namespace=asic.namespace)['ansible_facts'] - pytest_assert(int_facts['ansible_interface_facts'][portchannel]) - - if portchannel_members: - for member in portchannel_members: - duthost.shell("config portchannel {} member add {} {}" - .format(asic.cli_ns_option, portchannel, member)) - - if portchannel_ip: - duthost.shell("config interface {} ip add {} {}" - .format(asic.cli_ns_option, portchannel, portchannel_ip)) - int_facts = duthost.interface_facts(namespace=asic.namespace)['ansible_facts'] - pytest_assert(int_facts['ansible_interface_facts'] - [portchannel]['ipv4']['address'] == portchannel_ip.split('/')[0]) - - pytest_assert(wait_until(30, 5, 0, verify_lag_interface, duthost, asic, portchannel), - 'For added Portchannel {} link is not up'.format(portchannel)) - - -def verify_lag_id_is_unique_in_chassis_db(duthosts, duthost, asic): - """ - Verifies lag id is unique for a newly added LAG in CHASSIS_DB - args: - duthosts : duthost - duthost : duthost - asic : asic - - """ - logging.info("Verifying on duthost {} asic {} that lag id is unique" - .format(duthost.hostname, asic.asic_index)) - lag_id_list = get_lag_ids_from_chassis_db(duthosts) - add_lag(duthost, asic) - added_pc_lag_id = get_lag_id_from_chassis_db(duthosts) - if added_pc_lag_id in lag_id_list: - pytest.fail('LAG id {} for newly added LAG {} already exist in lag_id_list {}' - .format(added_pc_lag_id, TMP_PC, lag_id_list)) - - logging.info('LAG id {} for newly added LAG {} is unique.' - .format(added_pc_lag_id, TMP_PC)) - - -def verify_lag_in_app_db(asic, deleted=False): - """ - Verifies lag in ASIC APP DB. - It runs the command e.g. 'sonic-db-cli APPL_DB keys "*LAG_TABLE*"' - Args: - asic: asic - deleted: False if lag is not deleted - """ +def is_lag_in_app_db(asic, pc=TMP_PC): + """Returns True if LAG in given ASIC APP DB else False""" appdb = AppDbCli(asic) app_db_lag_list = appdb.get_app_db_lag_list() - if deleted: - for lag in app_db_lag_list: - if TMP_PC in lag: - pytest.fail('LAG {} still exist in ASIC app db,' - ' Expected was should be deleted from asic app db.'.format(TMP_PC)) + for lag in app_db_lag_list: + if pc in lag: + return True + + return False - logging.info('LAG {} is deleted in ASIC app db'.format(TMP_PC)) - return +def verify_lag_in_app_db(asic, pc=TMP_PC, expected=True): + """Verifies if LAG exists or not in given ASIC APP DB""" + exists = is_lag_in_app_db(asic, pc) + lag_exists_msg = "LAG {} exists in {} asic{} APPL_DB".format(pc, asic.sonichost.hostname, asic.asic_index) + lag_missing_msg = "LAG {} doesn't exist in {} asic{} APPL_DB".format(pc, asic.sonichost.hostname, asic.asic_index) + lag_msg = lag_exists_msg if exists else lag_missing_msg + if exists == expected: + logging.info(lag_msg) else: - for lag in app_db_lag_list: - if TMP_PC in lag: - logging.info('LAG {} exist in ASIC app db'.format(TMP_PC)) - return - pytest.fail('LAG {} does not exist in ASIC app db,' - ' Expected was should should exist in asic app db. '.format(TMP_PC)) + pytest.fail(lag_msg) -def verify_lag_in_asic_db(asics, lag_id, deleted=False): - """ - Verifies LAG in ASIC DB - Args: - asics: asic - lag_id: lag id - deleted: True if lag is deleted - """ +def verify_lag_in_chassis_db(duthosts, pc=TMP_PC, expected=True): + """Verifies if LAG exists or not in CHASSIS DB""" + for sup in duthosts.supervisor_nodes: + voqdb = VoqDbCli(sup) + lag_list = voqdb.get_lag_list() + exists = False + for lag in lag_list: + if pc in lag: + exists = True + break + + lag_exists_msg = "LAG {} exists CHASSIS_APP_DB on {}".format(pc, sup) + lag_missing_msg = "LAG {} doesn't exist in CHASSIS_APP_DB on {}".format(pc, sup) + lag_msg = lag_exists_msg if exists else lag_missing_msg + if exists == expected: + logging.info(lag_msg) + else: + pytest.fail(lag_msg) + + +def verify_lag_id_in_asic_dbs(asics, lag_id, expected=True): + """Verifies if LAG exists or not in given ASIC DBs""" for asic in asics: asicdb = AsicDbCli(asic) asic_db_lag_list = asicdb.get_asic_db_lag_list() - if deleted: - for lag in asic_db_lag_list: - if asicdb.hget_key_value(lag, "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: - pytest.fail('LAG id {} for LAG {} exist in ASIC DB,' - ' Expected was should not be present'.format(lag_id, TMP_PC)) - - logging.info('LAG id {} for LAG {} does not exist in ASIC DB'.format(lag_id, TMP_PC)) - + exists = False + for lag in asic_db_lag_list: + if asicdb.hget_key_value(lag, "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: + exists = True + break + + lag_id_exists_msg = "LAG ID {} exists in {} asic{} ASIC_DB"\ + .format(lag_id, asic.sonichost.hostname, asic.asic_index) + lag_id_missing_msg = "LAG ID {} doesn't exist in {} asic{} ASIC_DB"\ + .format(lag_id, asic.sonichost.hostname, asic.asic_index) + lag_msg = lag_id_exists_msg if exists else lag_id_missing_msg + if exists == expected: + logging.info(lag_msg) else: - for lag in asic_db_lag_list: - if asicdb.hget_key_value(lag, "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: - logging.info('LAG id {} for LAG {} exist in ASIC DB'.format(lag_id, TMP_PC)) - return - pytest.fail('LAG id {} for LAG {} does not exist in ASIC DB'.format(lag_id, TMP_PC)) - - -def verify_lag_in_remote_asic_db(remote_duthosts, lag_id, deleted=False): - """ - Verifies lag in remote asic db - Args: - remote_duthosts: list of remote dut - lag_id: lag id of added/deleted lag - deleted: True if lag is deleted - """ - for dut in remote_duthosts: - logging.info("Verifing lag in remote {} asic db ".format(dut.hostname)) - verify_lag_in_asic_db(dut.asics, lag_id, deleted) - - -def delete_lag(duthost, asic, portchannel=TMP_PC): - """ - Deletes a LAG - - """ - logging.info("Deleting lag from {}".format(duthost.hostname)) - duthost.shell("config portchannel {} del {}".format(asic.cli_ns_option, portchannel)) + pytest.fail(lag_msg) -def delete_lag_members_ip(duthost, asic, portchannel_members, - portchannel_ip=None, portchannel=TMP_PC): - """ - deletes lag members and ip - """ - if portchannel_ip: - duthost.shell("config interface {} ip remove {} {}" - .format(asic.cli_ns_option, portchannel, portchannel_ip)) - - logging.info('Deleting lag members {} from lag {} on dut {}' - .format(portchannel_members, portchannel, duthost.hostname)) - for member in portchannel_members: - duthost.shell("config portchannel {} member del {} {}" - .format(asic.cli_ns_option, portchannel, member)) - - if portchannel_ip: - pytest_assert(wait_until(30, 5, 0, verify_lag_interface, duthost, asic, portchannel, expected=False), - 'For deleted Portchannel {} ip link is not down'.format(portchannel)) - - -def verify_lag_id_deleted_in_chassis_db(duthosts, duthost, asic, lag_id): - """ - Verifies lag id is deletes in CHASSIS_DB - """ - delete_lag(duthost, asic) - lag_id_list = get_lag_ids_from_chassis_db(duthosts) - if lag_id in lag_id_list: - pytest.fail('LAG id {} for lag {} still exist in chassis db lag_id_list {}, ' - 'Expected was should be deleted. '.format(lag_id, TMP_PC, lag_id_list)) - - logging.info('LAG id {} for lag {} is deleted in chassis db.'.format(lag_id, TMP_PC)) - - -def verify_lag_member_in_app_db(asic, pc_members, deleted=False): - """" - Verifies lag member in asic app db - cmd = sonic-db-cli APPL_DB KEYS "*LAG_MEMBER_TABLE*" - """ +def verify_lag_member_in_app_db(asic, pc_member, pc=TMP_PC, expected=True): + """"Verifies if LAG member exists or not in given ASICs APP DB""" appdb = AppDbCli(asic) app_db_lag_member_list = appdb.get_app_db_lag_member_list() - if deleted: - for member in pc_members: - pattern = "{}:{}".format(TMP_PC, member) - exist = False - for lag_member in app_db_lag_member_list: - if pattern in lag_member: - exist = True - break - - if exist: - pytest.fail('LAG {} still exist in ASIC app db, ' - 'Expected was should be deleted from asic app db.'.format(TMP_PC)) - - logging.info('For lag {} lag members {} are deleted in ASIC app db'.format(TMP_PC, pc_members)) + exists = False + pattern = "{}:{}".format(pc, pc_member) + for lag_member in app_db_lag_member_list: + if pattern in lag_member: + exists = True + break + + lag_member_exists_msg = "LAG {} member {} exists in {} asic{} APPL_DB".\ + format(pc, pc_member, asic.sonichost.hostname, asic.asic_index) + lag_member_missing_msg = "LAG {} member {} doesn't exist in {} asic{} APPL_DB".\ + format(pc, pc_member, asic.sonichost.hostname, asic.asic_index) + lag_member_msg = lag_member_exists_msg if exists else lag_member_missing_msg + if exists == expected: + logging.info(lag_member_msg) else: - for member in pc_members: - pattern = "{}:{}".format(TMP_PC, member) - exist = False - for lag in app_db_lag_member_list: - if pattern in lag: - exist = True - break + pytest.fail(lag_member_msg) - if not exist: - pytest.fail('LAG {} does not exist in ASIC app db,' - ' Expected was should should exist in asic app db. '.format(TMP_PC)) - logging.info('For lag {} lag members {} are present in ASIC app db'.format(TMP_PC, pc_members)) +def verify_lag_member_in_chassis_db(duthosts, pc_member, pc=TMP_PC, expected=True): + """Verifies if LAG member exists or not in CHASSIS DB""" + for sup in duthosts.supervisor_nodes: + voqdb = VoqDbCli(sup) + lag_member_list = voqdb.get_lag_member_list() + exists = False + pattern = "{}.*{}".format(pc, pc_member) + for lag_member in lag_member_list: + if re.search(pattern, lag_member): + exists = True + break + + lag_member_exists_msg = "LAG {} member {} exists in {} CHASSIS_APP_DB".format(pc, pc_member, sup) + lag_member_missing_msg = "LAG {} member {} doesn't exist in {} CHASSIS_APP_DB".format(pc, pc_member, sup) + lag_member_msg = lag_member_exists_msg if exists else lag_member_missing_msg + if exists == expected: + logging.info(lag_member_msg) + else: + pytest.fail(lag_member_msg) -def verify_lag_member_in_asic_db(asics, lag_id, pc_members, deleted=False): - """ - Verifies lag member in ASIC DB - It runs the command e.g. - """ +def verify_lag_member_in_asic_db(asics, lag_id, expected=0): + """Verifies if expected amount of LAG members exist in given ASIC DBs""" for asic in asics: asicdb = AsicDbCli(asic) asic_lag_list = asicdb.get_asic_db_lag_list() asic_db_lag_member_list = asicdb.get_asic_db_lag_member_list() lag_oid = None - if deleted: - for lag in asic_lag_list: - if asicdb.hget_key_value(lag, - "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: - lag_oid = ":".join(lag for lag in lag.split(':')[-1:-3:-1]) - - for lag_member in asic_db_lag_member_list: - if asicdb.hget_key_value(lag_member, "SAI_LAG_MEMBER_ATTR_LAG_ID") == lag_oid: - pytest.fail("lag members {} still exist in lag member table on {}," - " Expected was should be deleted" - .format(pc_members, asic.sonichost.hostname)) - logging.info('Lag members are deleted from {} on {}'.format(asic.asic_index, - asic.sonichost.hostname)) - else: - for lag in asic_lag_list: - if asicdb.hget_key_value(lag, "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: - lag_oid = ":".join(lag for lag in lag.split(':')[-2::1]) - break + for lag in asic_lag_list: + if asicdb.hget_key_value(lag, "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: + lag_oid = ":".join(lag for lag in lag.split(':')[-2::1]) - for lag_member in asic_db_lag_member_list: - if asicdb.hget_key_value(lag_member, "SAI_LAG_MEMBER_ATTR_LAG_ID") == lag_oid: - logging.info('Lag members exist in {} on {}' - .format(asic.asic_index, asic.sonichost.hostname)) - return + count = 0 + for lag_member in asic_db_lag_member_list: + if asicdb.hget_key_value(lag_member, "SAI_LAG_MEMBER_ATTR_LAG_ID") == lag_oid: + count += 1 - pytest.fail('Lag members {} does not exist in {} on {}' - .format(pc_members, asic.asic_index, asic.sonichost.hostname)) + logging.info("Found {} members of LAG in {} asic {} ASIC_DB" + .format(count, asic.sonichost.hostname, asic.asic_index)) + pytest_assert(count == expected, "Found {} LAG members in {} asic{} ASIC_DB, expected {}" + .format(count, asic.sonichost.hostname, asic.asic_index, expected)) -def verify_lag_member_in_remote_asic_db(remote_dut, lag_id, pc_members, deleted=False): - """ - Verifies lag member in remote ASIC DB +def verify_lag_member_status_in_app_db(asic, pc_member, enabled=True): + """Verifies if the status of a LAG member is enabled or disabled in given ASIC APP DB""" + appdb = AppDbCli(asic) + app_db_lag_member_list = appdb.get_app_db_lag_member_list() - """ - for dut in remote_dut: - logging.info('Verifying lag members {} on dut {}'.format(pc_members, dut.hostname)) - verify_lag_member_in_asic_db(dut.asics, lag_id, pc_members, deleted) + pattern = "{}:{}".format(TMP_PC, pc_member) + for lag in app_db_lag_member_list: + if pattern in lag: + status = appdb.hget_key_value(lag, "status") + logging.info("LAG member {} is {} in ASIC APPL_DB".format(pc_member, status)) + fail_msg = "LAG member {} is {} in ASIC APPL_DB when it shouldn't be".format(pc_member, status) + status = True if status == "enabled" else False + pytest_assert(status == enabled, fail_msg) + return + pytest.fail('LAG member {} does not exist in ASIC APPL_DB'.format(TMP_PC)) -def verify_lag_member_in_chassis_db(duthosts, members, deleted=False): - """ - verifies lag members for a lag exist in chassis db - cmd = 'sonic-db-cli CHASSIS_APP_DB KEYS "*SYSTEM_LAG_MEMBER_TABLE*|PortChannel0051*|Ethernet*"' - """ + +def verify_lag_member_status_in_chassis_db(duthosts, pc_member, enabled=False): + """Verifies if the status of a LAG member is enabled or disabled in CHASSIS DB""" for sup in duthosts.supervisor_nodes: voqdb = VoqDbCli(sup) lag_member_list = voqdb.get_lag_member_list() - if deleted: - for member in members: - exist = False - pattern = "{}.*{}".format(TMP_PC, member) - for lag_member in lag_member_list: - if re.search(pattern, lag_member): - exist = True - break - if exist: - pytest.fail('lag member {} not found in system lag member table {}' - .format(member, lag_member_list)) - - logging.info('lag members {} found in system lag member table {}' - .format(members, lag_member_list)) + pattern = "{}.*{}".format(TMP_PC, pc_member) + for lag_member in lag_member_list: + if re.search(pattern, lag_member): + status = voqdb.hget_key_value(lag_member, "status") + logging.info("LAG member {} is {} in CHASSIS_APP_DB".format(pc_member, status)) + fail_msg = "LAG member {} is {} in CHASSIS_APP_DB when it shouldn't be".format(pc_member, status) + status = True if status == "enabled" else False + pytest_assert(status == enabled, fail_msg) + return - else: - for member in members: - exist = False - pattern = "{}.*{}".format(TMP_PC, member) - for lag_member in lag_member_list: - if re.search(pattern, lag_member): - exist = True - logging.info('lag member {} found in system lag member table {}' - .format(member, lag_member)) - break - - if not exist: - pytest.fail('lag member {} not found in system lag member table {}' - .format(member, lag_member_list)) - - -def is_lag_in_app_db(asic): - """ - Returnes True if lag in app db else False - It runs the command e.g. 'sonic-db-cli APPL_DB keys "*LAG_TABLE*"' - Args: - asic: asic - """ - appdb = AppDbCli(asic) - app_db_lag_list = appdb.get_app_db_lag_list() - for lag in app_db_lag_list: - if TMP_PC in lag: - return True + pytest.fail('LAG member {} does not exist in CHASSIS_APP_DB'.format(TMP_PC)) - return False + +def verify_lag_member_status_in_asic_db(asics, lag_id, exp_disabled=0): + """Verifies if expected amount of LAG members are disabled in given ASIC DBs""" + for asic in asics: + asicdb = AsicDbCli(asic) + asic_lag_list = asicdb.get_asic_db_lag_list() + asic_db_lag_member_list = asicdb.get_asic_db_lag_member_list() + lag_oid = None + count = 0 + disabled = 0 + # Find LAG members OIDs from lag id + for lag in asic_lag_list: + if asicdb.hget_key_value(lag, "SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID") == lag_id: + lag_oid = ":".join(lag for lag in lag.split(':')[-2::1]) + break + + # Find LAG members of LAG by OID, one should have disabled status + for lag_member in asic_db_lag_member_list: + if asicdb.hget_key_value(lag_member, "SAI_LAG_MEMBER_ATTR_LAG_ID") == lag_oid: + status = asicdb.hget_key_value(lag_member, "SAI_LAG_MEMBER_ATTR_EGRESS_DISABLE") + count += 1 + if status == "true": + disabled += 1 + + logging.info("Found {} members of LAG in {} asic {} ASIC_DB, {} are disabled" + .format(count, asic.sonichost.hostname, asic.asic_index, disabled)) + pytest_assert(count != 0, "No members matching LAG exist in {} asic {} ASIC_DB" + .format(asic.sonichost.hostname, asic.asic_index)) + pytest_assert(disabled == exp_disabled, + "Found {} disabled members of LAG in {} asic {} ASIC_DB, expected {}" + .format(disabled, asic.sonichost.hostname, asic.asic_index, exp_disabled)) diff --git a/tests/common/innovium_data.py b/tests/common/innovium_data.py deleted file mode 100644 index c0daa5de02b..00000000000 --- a/tests/common/innovium_data.py +++ /dev/null @@ -1,2 +0,0 @@ -def is_innovium_device(dut): - return dut.facts["asic_type"] == "innovium" diff --git a/tests/common/macsec/__init__.py b/tests/common/macsec/__init__.py new file mode 100644 index 00000000000..234c61c8485 --- /dev/null +++ b/tests/common/macsec/__init__.py @@ -0,0 +1,266 @@ +import collections +import json +import logging +import os +import sys +from ipaddress import ip_address, IPv4Address + +import natsort +import pytest + +if sys.version_info.major > 2: + from pathlib import Path + sys.path.insert(0, str(Path(__file__).parent)) + +from .macsec_config_helper import enable_macsec_feature +from .macsec_config_helper import disable_macsec_feature +from .macsec_config_helper import setup_macsec_configuration +from .macsec_config_helper import cleanup_macsec_configuration +# flake8: noqa: F401 +from tests.common.plugins.sanity_check import sanity_check + +logger = logging.getLogger(__name__) + + +class MacsecPlugin(object): + """ + Pytest macsec plugin + """ + + def __init__(self): + with open(os.path.dirname(__file__) + '/profile.json') as f: + self.macsec_profiles = json.load(f) + for k, v in list(self.macsec_profiles.items()): + self.macsec_profiles[k]["name"] = k + # Set default value + if "rekey_period" not in v: + self.macsec_profiles[k]["rekey_period"] = 0 + + def _generate_macsec_profile(self, metafunc): + value = metafunc.config.getoption("macsec_profile") + if value == 'all': + return natsort.natsorted(list(self.macsec_profiles.keys())) + return [x for x in value.split(',') if x in self.macsec_profiles] + + def pytest_generate_tests(self, metafunc): + if 'macsec_profile' in metafunc.fixturenames: + profiles = self._generate_macsec_profile(metafunc) + assert profiles, "Specify valid macsec profile!" + metafunc.parametrize('macsec_profile', + [self.macsec_profiles[x] for x in profiles], + ids=profiles, + scope="module") + + def get_ctrl_nbr_names(self, macsec_duthost, nbrhosts, tbinfo): + return NotImplementedError() + + def downstream_neighbor(self,tbinfo, neighbor): + return NotImplementedError() + + def upstream_neighbor(self,tbinfo, neighbor): + return NotImplementedError() + + @pytest.fixture(scope="module") + def start_macsec_service(self, macsec_duthost, macsec_nbrhosts): + def __start_macsec_service(): + enable_macsec_feature(macsec_duthost, macsec_nbrhosts) + return __start_macsec_service + + @pytest.fixture(scope="module") + def stop_macsec_service(self, macsec_duthost, macsec_nbrhosts): + def __stop_macsec_service(): + disable_macsec_feature(macsec_duthost, macsec_nbrhosts) + return __stop_macsec_service + + @pytest.fixture(scope="module") + def macsec_feature(self, start_macsec_service, stop_macsec_service): + start_macsec_service() + yield + stop_macsec_service() + + @pytest.fixture(scope="module") + def startup_macsec(self, request, macsec_duthost, ctrl_links, macsec_profile, tbinfo): + topo_name = tbinfo['topo']['name'] + def __startup_macsec(): + profile = macsec_profile + if request.config.getoption("neighbor_type") == "eos": + if macsec_duthost.facts["asic_type"] == "vs" and profile['send_sci'] == "false": + # On EOS, portchannel mac is not same as the member port mac (being as SCI), + # then src mac is not equal to SCI in its sending packet. The receiver of vSONIC + # will drop it for macsec kernel module does not correctly handle it. + pytest.skip( + "macsec on dut vsonic, neighbor eos, send_sci false") + if 't2' not in topo_name: + cleanup_macsec_configuration(macsec_duthost, ctrl_links, profile['name']) + setup_macsec_configuration(macsec_duthost, ctrl_links, + profile['name'], profile['priority'], profile['cipher_suite'], + profile['primary_cak'], profile['primary_ckn'], profile['policy'], + profile['send_sci'], profile['rekey_period']) + logger.info( + "Setup MACsec configuration with arguments:\n{}".format(locals())) + return __startup_macsec + + @pytest.fixture(scope="module") + def shutdown_macsec(self, macsec_duthost, ctrl_links, macsec_profile): + def __shutdown_macsec(): + profile = macsec_profile + cleanup_macsec_configuration(macsec_duthost, ctrl_links, profile['name']) + return __shutdown_macsec + + @pytest.fixture(scope="module", autouse=True) + def macsec_setup(self, startup_macsec, shutdown_macsec, macsec_feature): + ''' + setup macsec links + ''' + startup_macsec() + yield + shutdown_macsec() + + @pytest.fixture(scope="module") + def macsec_nbrhosts(self, ctrl_links): + return {nbr["name"]: nbr for nbr in list(ctrl_links.values())} + + @pytest.fixture(scope="module") + def ctrl_links(self, macsec_duthost, tbinfo, nbrhosts): + + if not nbrhosts: + topo_name = tbinfo['topo']['name'] + pytest.skip("None of neighbors on topology {}".format(topo_name)) + + ctrl_nbr_names = self.get_ctrl_nbr_names(macsec_duthost, nbrhosts, tbinfo) + logger.info("Controlled links {}".format(ctrl_nbr_names)) + nbrhosts = {name: nbrhosts[name] for name in ctrl_nbr_names} + return self.find_links_from_nbr(macsec_duthost, tbinfo, nbrhosts) + + @pytest.fixture(scope="module") + def unctrl_links(self, macsec_duthost, tbinfo, nbrhosts, ctrl_links): + unctrl_nbr_names = set(nbrhosts.keys()) + for _, nbr in ctrl_links.items(): + if nbr["name"] in unctrl_nbr_names: + unctrl_nbr_names.remove(nbr["name"]) + + logger.info("Uncontrolled links {}".format(unctrl_nbr_names)) + nbrhosts = {name: nbrhosts[name] for name in unctrl_nbr_names} + return self.find_links_from_nbr(macsec_duthost, tbinfo, nbrhosts) + + @pytest.fixture(scope="module") + def downstream_links(self, macsec_duthost, tbinfo, nbrhosts): + links = collections.defaultdict(dict) + + def filter(interface, neighbor, mg_facts, tbinfo): + if self.downstream_neighbor(tbinfo, neighbor): + port = mg_facts["minigraph_neighbors"][interface]["port"] + if interface not in mg_facts["minigraph_ptf_indices"]: + logger.info("Interface {} not in minigraph_ptf_indices".format(interface)) + return + links[interface] = { + "name": neighbor["name"], + "ptf_port_id": mg_facts["minigraph_ptf_indices"][interface], + "port": port + } + self.find_links(macsec_duthost, tbinfo, filter) + return links + + @pytest.fixture(scope="module") + def upstream_links(self, macsec_duthost, tbinfo, nbrhosts): + links = collections.defaultdict(dict) + + def filter(interface, neighbor, mg_facts, tbinfo): + if self.upstream_neighbor(tbinfo, neighbor): + for item in mg_facts["minigraph_bgp"]: + if item["name"] == neighbor["name"]: + if isinstance(ip_address(item["addr"]), IPv4Address): + # The address of neighbor device + local_ipv4_addr = item["addr"] + # The address of DUT + peer_ipv4_addr = item["peer_addr"] + break + if interface not in mg_facts["minigraph_ptf_indices"]: + logger.info("Interface {} not in minigraph_ptf_indices".format(interface)) + return + port = mg_facts["minigraph_neighbors"][interface]["port"] + links[interface] = { + "name": neighbor["name"], + "ptf_port_id": mg_facts["minigraph_ptf_indices"][interface], + "local_ipv4_addr": local_ipv4_addr, + "peer_ipv4_addr": peer_ipv4_addr, + "port": port, + "host": nbrhosts[neighbor["name"]]["host"] + } + self.find_links(macsec_duthost, tbinfo, filter) + return links + + def find_links(self, duthost, tbinfo, filter): + + mg_facts = duthost.get_extended_minigraph_facts(tbinfo) + for interface, neighbor in mg_facts["minigraph_neighbors"].items(): + filter(interface, neighbor, mg_facts, tbinfo) + + def is_interface_portchannel_member(self, pc, interface): + for pc_name, elements in list(pc.items()): + if interface in elements['members']: + return True + return False + + def find_links_from_nbr(self, duthost, tbinfo, nbrhosts): + links = collections.defaultdict(dict) + def filter(interface, neighbor, mg_facts, tbinfo): + if neighbor["name"] not in list(nbrhosts.keys()): + return + port = mg_facts["minigraph_neighbors"][interface]["port"] + + links[interface] = { + "name": neighbor["name"], + "host": nbrhosts[neighbor["name"]]["host"], + "port": port, + "dut_name": duthost.hostname + } + self.find_links(duthost, tbinfo, filter) + return links + +class MacsecPluginT0(MacsecPlugin): + """ + Pytest macsec plugin + """ + + + def __init__(self): + super(MacsecPluginT0, self).__init__() + + def get_ctrl_nbr_names(self, macsec_duthost, nbrhosts, tbinfo): + ctrl_nbr_names = natsort.natsorted(nbrhosts.keys())[:2] + return ctrl_nbr_names + + def downstream_neighbor(self,tbinfo, neighbor): + if (tbinfo["topo"]["type"] == "t0" and "Server" in neighbor["name"]): + return True + return False + + def upstream_neighbor(self,tbinfo, neighbor): + if (tbinfo["topo"]["type"] == "t0" and "T1" in neighbor["name"]): + return True + return False + +class MacsecPluginT2(MacsecPlugin): + """ + Pytest macsec plugin + """ + + + def __init__(self): + super(MacsecPluginT2, self).__init__() + + def get_ctrl_nbr_names(self, macsec_duthost, nbrhosts, tbinfo): + mg_facts = macsec_duthost.get_extended_minigraph_facts(tbinfo) + ctrl_nbr_names = mg_facts['macsec_neighbors'] + return ctrl_nbr_names + + def downstream_neighbor(self,tbinfo, neighbor): + if ("t2" in tbinfo["topo"]["type"] and "T1" in neighbor["name"]): + return True + return False + + def upstream_neighbor(self,tbinfo, neighbor): + if ("t2" in tbinfo["topo"]["type"] and "T3" in neighbor["name"]): + return True + return False diff --git a/tests/macsec/macsec_config_helper.py b/tests/common/macsec/macsec_config_helper.py similarity index 95% rename from tests/macsec/macsec_config_helper.py rename to tests/common/macsec/macsec_config_helper.py index 87e74afbb76..6ae4a04bc8d 100644 --- a/tests/macsec/macsec_config_helper.py +++ b/tests/common/macsec/macsec_config_helper.py @@ -1,8 +1,8 @@ import logging import time -from .macsec_helper import get_mka_session, getns_prefix, wait_all_complete, submit_async_task -from .macsec_platform_helper import global_cmd, find_portchannel_from_member, get_portchannel +from tests.common.macsec.macsec_helper import get_mka_session, getns_prefix, wait_all_complete, submit_async_task +from tests.common.macsec.macsec_platform_helper import global_cmd, find_portchannel_from_member, get_portchannel from tests.common.devices.eos import EosHost from tests.common.utilities import wait_until @@ -98,18 +98,13 @@ def enable_macsec_port(host, port, profile_name): if dnx_platform and pc: host.command("sudo config portchannel {} member del {} {}".format(getns_prefix(host, port), pc["name"], port)) - time.sleep(2) cmd = "sonic-db-cli {} CONFIG_DB HSET 'PORT|{}' 'macsec' '{}'".format(getns_prefix(host, port), port, profile_name) host.command(cmd) if dnx_platform and pc: - time.sleep(2) host.command("sudo config portchannel {} member add {} {}".format(getns_prefix(host, port), pc["name"], port)) - # wait after macsec enable - time.sleep(2) - def disable_macsec_port(host, port): if isinstance(host, EosHost): @@ -123,18 +118,13 @@ def disable_macsec_port(host, port): if dnx_platform and pc: host.command("sudo config portchannel {} member del {} {}".format(getns_prefix(host, port), pc["name"], port)) - time.sleep(2) cmd = "sonic-db-cli {} CONFIG_DB HDEL 'PORT|{}' 'macsec'".format(getns_prefix(host, port), port) host.command(cmd) if dnx_platform and pc: - time.sleep(2) host.command("sudo config portchannel {} member add {} {}".format(getns_prefix(host, port), pc["name"], port)) - # wait after macsec disable - time.sleep(2) - def enable_macsec_feature(duthost, macsec_nbrhosts): nbrhosts = macsec_nbrhosts @@ -168,6 +158,7 @@ def cleanup_macsec_configuration(duthost, ctrl_links, profile_name): logger.info("Cleanup macsec configuration step1: disable macsec port") for dut_port, nbr in list(ctrl_links.items()): + time.sleep(3) submit_async_task(disable_macsec_port, (duthost, dut_port)) submit_async_task(disable_macsec_port, (nbr["host"], nbr["port"])) devices.add(nbr["host"]) @@ -214,13 +205,14 @@ def setup_macsec_configuration(duthost, ctrl_links, profile_name, default_priori logger.info("Setup macsec configuration step2: enable macsec profile") # 2. Enable macsec profile for dut_port, nbr in list(ctrl_links.items()): + time.sleep(3) submit_async_task(enable_macsec_port, (duthost, dut_port, profile_name)) submit_async_task(enable_macsec_port, (nbr["host"], nbr["port"], profile_name)) wait_all_complete(timeout=180) # 3. Wait for interface's macsec ready for dut_port, nbr in list(ctrl_links.items()): - assert wait_until(20, 3, 0, + assert wait_until(300, 3, 0, lambda: duthost.iface_macsec_ok(dut_port) and nbr["host"].iface_macsec_ok(nbr["port"])) diff --git a/tests/macsec/macsec_helper.py b/tests/common/macsec/macsec_helper.py similarity index 76% rename from tests/macsec/macsec_helper.py rename to tests/common/macsec/macsec_helper.py index da13721f417..91663a90b06 100644 --- a/tests/macsec/macsec_helper.py +++ b/tests/common/macsec/macsec_helper.py @@ -1,5 +1,5 @@ -import ast import binascii +import re import json import logging import struct @@ -15,7 +15,7 @@ import scapy.all as scapy import scapy.contrib.macsec as scapy_macsec -from .macsec_platform_helper import sonic_db_cli +from tests.common.macsec.macsec_platform_helper import sonic_db_cli from tests.common.devices.eos import EosHost __all__ = [ @@ -122,7 +122,12 @@ def get_appl_db(host, host_port_name, peer, peer_port_name): port_table = sonic_db_cli( host, QUERY_MACSEC_PORT.format(getns_prefix(host, host_port_name), host_port_name)) host_sci = get_sci(host.get_dut_iface_mac(host_port_name)) - peer_sci = get_sci(peer.get_dut_iface_mac(peer_port_name)) + if isinstance(peer, EosHost): + re_match = re.search(r'\d+', peer_port_name) + peer_port_identifer = int(re_match.group()) + peer_sci = get_sci(peer.get_dut_iface_mac(peer_port_name), peer_port_identifer) + else: + peer_sci = get_sci(peer.get_dut_iface_mac(peer_port_name)) egress_sc_table = sonic_db_cli( host, QUERY_MACSEC_EGRESS_SC.format(getns_prefix(host, host_port_name), host_port_name, host_sci)) ingress_sc_table = sonic_db_cli( @@ -192,7 +197,8 @@ def get_mka_session(host): ''' Here is an output example of `ip macsec show` admin@vlab-01:~$ ip macsec show - 130: macsec_eth29: protect on validate strict sc off sa off encrypt on send_sci on end_station off scb off replay off + 130: macsec_eth29: protect on validate strict sc off sa off encrypt + on send_sci on end_station off scb off replay off cipher suite: GCM-AES-128, using ICV length 16 TXSC: 52540041303f0001 on SA 0 0: PN 1041, state on, SSCI 16777216, key 0ecddfe0f462491c13400dbf7433465d @@ -200,7 +206,8 @@ def get_mka_session(host): RXSC: 525400b5be690001, state on 0: PN 1041, state on, SSCI 16777216, key 0ecddfe0f462491c13400dbf7433465d 3: PN 0, state on, SSCI 16777216, key 0ecddfe0f462491c13400dbf7433465d - 131: macsec_eth30: protect on validate strict sc off sa off encrypt on send_sci on end_station off scb off replay off + 131: macsec_eth30: protect on validate strict sc off sa off encrypt + on send_sci on end_station off scb off replay off cipher suite: GCM-AES-128, using ICV length 16 TXSC: 52540041303f0001 on SA 0 0: PN 1041, state on, key daa8169cde2fe1e238aaa83672e40279 @@ -438,14 +445,16 @@ def macsec_dp_poll(test, device_number=0, port_number=None, timeout=None, exp_pk ret = __origin_dp_poll( test, device_number=device_number, port_number=port_number, timeout=timeout, exp_pkt=None) timeout -= time.time() - start_time - # Since we call __origin_dp_poll with exp_pkt=None, it should only ever fail if no packets are received at all. In this case, continue normally + # Since we call __origin_dp_poll with exp_pkt=None, it should only ever fail if no packets are received at all. + # In this case, continue normally # until we exceed the timeout value provided to macsec_dp_poll. if isinstance(ret, test.dataplane.PollFailure): if timeout <= 0: break else: continue - # The device number of PTF host is 0, if the target port isn't a injected port(belong to ptf host), Don't need to do MACsec further. + # The device number of PTF host is 0, if the target port isn't a injected port(belong to ptf host), + # Don't need to do MACsec further. if ret.device != 0 or exp_pkt is None: return ret pkt = scapy.Ether(ret.packet) @@ -454,17 +463,22 @@ def macsec_dp_poll(test, device_number=0, port_number=None, timeout=None, exp_pk if ptf.dataplane.match_exp_pkt(exp_pkt, pkt): return ret else: - macsec_info = load_macsec_info(test.duthost, find_portname_from_ptf_id(test.mg_facts, ret.port), force_reload[ret.port]) + macsec_info = load_macsec_info(test.duthost, find_portname_from_ptf_id(test.mg_facts, ret.port), + force_reload[ret.port]) if macsec_info: encrypt, send_sci, xpn_en, sci, an, sak, ssci, salt = macsec_info force_reload[ret.port] = False pkt, decap_success = decap_macsec_pkt(pkt, sci, an, sak, encrypt, send_sci, 0, xpn_en, ssci, salt) if decap_success and ptf.dataplane.match_exp_pkt(exp_pkt, pkt): return ret - # Normally, if __origin_dp_poll returns a PollFailure, the PollFailure object will contain a list of recently received packets - # to help with debugging. However, since we call __origin_dp_poll multiple times, only the packets from the most recent call is retained. - # If we don't find a matching packet (either with or without MACsec decoding), we need to manually store the packet we received. - # Later if we return a PollFailure, we can provide the received packets to emulate the behavior of __origin_dp_poll. + # Normally, if __origin_dp_poll returns a PollFailure, + # the PollFailure object will contain a list of recently received packets + # to help with debugging. However, since we call __origin_dp_poll multiple times, + # only the packets from the most recent call is retained. + # If we don't find a matching packet (either with or without MACsec decoding), + # we need to manually store the packet we received. + # Later if we return a PollFailure, + # we can provide the received packets to emulate the behavior of __origin_dp_poll. recent_packets.append(pkt) packet_count += 1 if timeout <= 0: @@ -472,18 +486,104 @@ def macsec_dp_poll(test, device_number=0, port_number=None, timeout=None, exp_pk return test.dataplane.PollFailure(exp_pkt, recent_packets, packet_count) -def get_macsec_counters(sonic_asic, namespace, name): - lines = [ - 'from swsscommon.swsscommon import DBConnector, CounterTable, MacsecCounter,SonicDBConfig', - 'from sonic_py_common import multi_asic', - 'SonicDBConfig.initializeGlobalConfig() if multi_asic.is_multi_asic() else {}', - 'counterTable = CounterTable(DBConnector("COUNTERS_DB", 0, False, "{}"))'.format(namespace), - '_, values = counterTable.get(MacsecCounter(), "{}")'.format(name), - 'print(dict(values))' - ] - cmd = "python -c '{}'".format(';'.join(lines)) - output = sonic_asic.sonichost.command(cmd)["stdout_lines"][0] - return {k: int(v) for k, v in list(ast.literal_eval(output).items())} +def _parse_show_macsec_counters(text): + ''' + This function takes the output of a show macsec command, and returns a dict + of the counters. + Returns following dict format: + { + 'egress': {}, + 'ingress': {} + } + TODO: enhance show macsec command to output in json directly + + Here is an example of `show macsec Ethernet216` + MACsec port(Ethernet216) + --------------------- --------------- + cipher_suite GCM-AES-XPN-256 + enable true + enable_encrypt true + enable_protect true + enable_replay_protect false + profile MACSEC_PROFILE + replay_window 0 + send_sci true + --------------------- --------------- + MACsec Egress SC (XXX) + ----------- - + encoding_an 1 + ----------- - + MACsec Egress SA (1) + ------------------------------------- ---------------------------------------------------------------- + auth_key XXX + next_pn 1 + sak XXX + salt XXX + ssci 2 + SAI_MACSEC_SA_ATTR_CURRENT_XPN 8 + SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED 28532 + SAI_MACSEC_SA_STAT_OCTETS_PROTECTED 0 + SAI_MACSEC_SA_STAT_OUT_PKTS_ENCRYPTED 7 + SAI_MACSEC_SA_STAT_OUT_PKTS_PROTECTED 0 + ------------------------------------- ---------------------------------------------------------------- + MACsec Ingress SC (XXX) + + MACsec Ingress SA (1) + --------------------------------------- ---------------------------------------------------------------- + active true + auth_key XXX + lowest_acceptable_pn 1 + sak XXX + salt XXX + ssci 1 + SAI_MACSEC_SA_ATTR_CURRENT_XPN 6661 + SAI_MACSEC_SA_STAT_IN_PKTS_DELAYED 0 + SAI_MACSEC_SA_STAT_IN_PKTS_INVALID 0 + SAI_MACSEC_SA_STAT_IN_PKTS_LATE 0 + SAI_MACSEC_SA_STAT_IN_PKTS_NOT_USING_SA 1 + SAI_MACSEC_SA_STAT_IN_PKTS_NOT_VALID 0 + SAI_MACSEC_SA_STAT_IN_PKTS_OK 8 + SAI_MACSEC_SA_STAT_IN_PKTS_UNCHECKED 0 + SAI_MACSEC_SA_STAT_IN_PKTS_UNUSED_SA 0 + SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED 523517 + SAI_MACSEC_SA_STAT_OCTETS_PROTECTED 0 + --------------------------------------- ---------------------------------------------------------------- + ''' + out = {'egress': {}, 'ingress': {}} + stats = None + reg = re.compile(r'(SAI_MACSEC.*?) *(\d+)') + for line in text.splitlines(): + line = line.strip() + + # Found the egress header, following stats will be for egress + if line.startswith("MACsec Egress SA"): + stats = 'egress' + continue + # Found the ingress header, following stats will be for ingress + elif line.startswith("MACsec Ingress SA"): + stats = 'ingress' + continue + # No header yet, so no stats coming + if not stats: + continue + + found = reg.match(line) + if found: + out[stats].update({found.group(1): int(found.group(2))}) + return out + + +def get_macsec_counters(duthost, port): + cmd = f"show macsec {port}" + output = duthost.command(cmd)["stdout"] + + out_dict = _parse_show_macsec_counters(output) + + return (out_dict['egress'], out_dict['ingress']) + + +def clear_macsec_counters(duthost): + assert duthost.command("sonic-clear macsec")["failed"] is False __origin_dp_poll = testutils.dp_poll diff --git a/tests/macsec/macsec_platform_helper.py b/tests/common/macsec/macsec_platform_helper.py similarity index 100% rename from tests/macsec/macsec_platform_helper.py rename to tests/common/macsec/macsec_platform_helper.py diff --git a/tests/macsec/profile.json b/tests/common/macsec/profile.json similarity index 98% rename from tests/macsec/profile.json rename to tests/common/macsec/profile.json index 7feb082f05b..62e8a5add74 100644 --- a/tests/macsec/profile.json +++ b/tests/common/macsec/profile.json @@ -70,7 +70,6 @@ "primary_cak": "207b757a60617745504e5a20747a7c76725e524a450d0d01040a0c75297822227e07554155500e5d5157786d6c2a3d2031425a5e577e7e727f6b6c033124322627", "primary_ckn": "6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435", "policy": "security", - "send_sci": "true", - "rekey_period": 240 + "send_sci": "true" } } diff --git a/tests/common/marvell_teralynx_data.py b/tests/common/marvell_teralynx_data.py new file mode 100644 index 00000000000..1662c3e56e0 --- /dev/null +++ b/tests/common/marvell_teralynx_data.py @@ -0,0 +1,2 @@ +def is_marvell_teralynx_device(dut): + return dut.facts["asic_type"] == "marvell-teralynx" diff --git a/tests/common/mellanox_data.py b/tests/common/mellanox_data.py index 2e08915ebeb..a426f3a547d 100644 --- a/tests/common/mellanox_data.py +++ b/tests/common/mellanox_data.py @@ -6,7 +6,7 @@ SPC2_HWSKUS = ["ACS-MSN3700", "ACS-MSN3700C", "ACS-MSN3800", "Mellanox-SN3800-D112C8", "ACS-MSN3420"] SPC3_HWSKUS = ["ACS-MSN4700", "Mellanox-SN4700-O28", "ACS-MSN4600C", "ACS-MSN4410", "ACS-MSN4600", "Mellanox-SN4600C-D112C8", "Mellanox-SN4600C-C64", "ACS-SN4280", "Mellanox-SN4280-O28"] -SPC4_HWSKUS = ["ACS-SN5600", "Mellanox-SN5600-V256"] +SPC4_HWSKUS = ["ACS-SN5600", "Mellanox-SN5600-V256", "Mellanox-SN5600-C256S1", "Mellanox-SN5600-C224O8"] SWITCH_HWSKUS = SPC1_HWSKUS + SPC2_HWSKUS + SPC3_HWSKUS + SPC4_HWSKUS PSU_CAPABILITIES = [ diff --git a/tests/common/platform/args/advanced_reboot_args.py b/tests/common/platform/args/advanced_reboot_args.py index cf65d29901b..d1aa6cc6e4a 100644 --- a/tests/common/platform/args/advanced_reboot_args.py +++ b/tests/common/platform/args/advanced_reboot_args.py @@ -135,6 +135,12 @@ def add_advanced_reboot_args(parser): help="Specify the target image(s) for upgrade (comma seperated list is allowed)", ) + parser.addoption( + "--multi_hop_upgrade_path", + default="", + help="Specify the multi-hop upgrade path as a comma separated list of image URLs to download", + ) + parser.addoption( "--restore_to_image", default="", diff --git a/tests/common/platform/device_utils.py b/tests/common/platform/device_utils.py index 6676b2f6afa..1a4488650b8 100644 --- a/tests/common/platform/device_utils.py +++ b/tests/common/platform/device_utils.py @@ -6,6 +6,7 @@ import os import json import glob +import http.client from datetime import datetime from collections import OrderedDict from tests.common.utilities import wait_until @@ -341,6 +342,8 @@ def verify_no_coredumps(duthost, pre_existing_cores): 'ls /var/core/ | grep -v python | wc -l')['stdout'] else: coredumps_count = duthost.shell('ls /var/core/ | wc -l')['stdout'] + coredumps = duthost.shell('ls -l /var/core/')['stdout'] + logging.info(f"Found core dumps: {coredumps}") if int(coredumps_count) > int(pre_existing_cores): raise RebootHealthError("Core dumps found. Expected: {} Found: {}".format(pre_existing_cores, coredumps_count)) @@ -735,18 +738,8 @@ def verify_required_events(duthost, event_counters, timing_data, verification_er format(observed_start_count, observed_end_count)) -@pytest.fixture() -def advanceboot_loganalyzer(duthosts, enum_rand_one_per_hwsku_frontend_hostname, request): - """ - Advance reboot log analysis. - This fixture starts log analysis at the beginning of the test. At the end, - the collected expect messages are verified and timing of start/stop is calculated. - - Args: - duthosts : List of DUT hosts - enum_rand_one_per_hwsku_frontend_hostname: hostname of a randomly selected DUT - """ - duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] +def advanceboot_loganalyzer_factory(duthost, request, marker_postfix=None): + """Create pre-reboot and post-reboot analysis functions via `LogAnalyzer` with optional marker postfix""" test_name = request.node.name if "upgrade_path" in test_name: reboot_type_source = request.config.getoption("--upgrade_type") @@ -758,18 +751,13 @@ def advanceboot_loganalyzer(duthosts, enum_rand_one_per_hwsku_frontend_hostname, reboot_type = "fast" else: reboot_type = "unknown" - # Currently, advanced reboot test would skip for kvm platform if the test has no device_type marker for vs. - # Doing the same skip logic in this fixture to avoid running loganalyzer without the test executed - if duthost.facts['platform'] == 'x86_64-kvm_x86_64-r0': - device_marks = [arg for mark in request.node.iter_markers( - name='device_type') for arg in mark.args] - if 'vs' not in device_marks: - pytest.skip('Testcase not supported for kvm') platform = duthost.facts["platform"] logs_in_tmpfs = list() + marker_prefix = "test_advanced_reboot_{}".format(test_name) if not marker_postfix else\ + "test_advanced_reboot_{}_{}".format(test_name, marker_postfix) loganalyzer = LogAnalyzer( - ansible_host=duthost, marker_prefix="test_advanced_reboot_{}".format(test_name)) + ansible_host=duthost, marker_prefix=marker_prefix) base_os_version = list() def bgpd_log_handler(preboot=False): @@ -923,9 +911,63 @@ def post_reboot_analysis(marker, event_counters=None, reboot_oper=None, log_dir= duthost, event_counters, analyze_result, verification_errors) return verification_errors + return pre_reboot_analysis, post_reboot_analysis + + +@pytest.fixture() +def advanceboot_loganalyzer(duthosts, enum_rand_one_per_hwsku_frontend_hostname, request): + """ + Advance reboot log analysis. + This fixture starts log analysis at the beginning of the test. At the end, + the collected expect messages are verified and timing of start/stop is calculated. + + Args: + duthosts : List of DUT hosts + enum_rand_one_per_hwsku_frontend_hostname: hostname of a randomly selected DUT + """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + # Currently, advanced reboot test would skip for kvm platform if the test has no device_type marker for vs. + # Doing the same skip logic in this fixture to avoid running loganalyzer without the test executed + if duthost.facts['platform'] == 'x86_64-kvm_x86_64-r0': + device_marks = [arg for mark in request.node.iter_markers( + name='device_type') for arg in mark.args] + if 'vs' not in device_marks: + pytest.skip('Testcase not supported for kvm') + + pre_reboot_analysis, post_reboot_analysis = advanceboot_loganalyzer_factory(duthost, request) yield pre_reboot_analysis, post_reboot_analysis +@pytest.fixture() +def multihop_advanceboot_loganalyzer_factory(duthosts, enum_rand_one_per_hwsku_frontend_hostname, request): + """ + Advance reboot log analysis involving multiple hops. + This fixture returns a factory function requiring the hop_index to be supplied. + Then, it starts log analysis at the beginning of the test. At the end, + the collected expect messages are verified and timing of start/stop is calculated. + + Args: + duthosts : List of DUT hosts + enum_rand_one_per_hwsku_frontend_hostname: hostname of a randomly selected DUT + request: pytests request fixture + """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + # Currently, advanced reboot test would skip for kvm platform if the test has no device_type marker for vs. + # Doing the same skip logic in this fixture to avoid running loganalyzer without the test executed + if duthost.facts['platform'] == 'x86_64-kvm_x86_64-r0': + device_marks = [arg for mark in request.node.iter_markers( + name='device_type') for arg in mark.args] + if 'vs' not in device_marks: + pytest.skip('Testcase not supported for kvm') + + def _multihop_advanceboot_loganalyzer_factory(hop_index): + pre_reboot_analysis, post_reboot_analysis = advanceboot_loganalyzer_factory( + duthost, request, marker_postfix="hop-{}".format(hop_index)) + return pre_reboot_analysis, post_reboot_analysis + + yield _multihop_advanceboot_loganalyzer_factory + + @pytest.fixture() def advanceboot_neighbor_restore(duthosts, enum_rand_one_per_hwsku_frontend_hostname, nbrhosts, tbinfo): """ @@ -938,3 +980,15 @@ def advanceboot_neighbor_restore(duthosts, enum_rand_one_per_hwsku_frontend_host duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] from tests.common.plugins.sanity_check.recover import neighbor_vm_restore neighbor_vm_restore(duthost, nbrhosts, tbinfo) + + +@pytest.fixture(scope='function') +def platform_api_conn(duthosts, enum_rand_one_per_hwsku_hostname, start_platform_api_service): + duthost = duthosts[enum_rand_one_per_hwsku_hostname] + dut_ip = duthost.mgmt_ip + + conn = http.client.HTTPConnection(dut_ip, 8000) + try: + yield conn + finally: + conn.close() diff --git a/tests/common/platform/interface_utils.py b/tests/common/platform/interface_utils.py index abc27626bd7..1c3c77c9fea 100644 --- a/tests/common/platform/interface_utils.py +++ b/tests/common/platform/interface_utils.py @@ -44,6 +44,9 @@ def parse_intf_status(lines): def check_interface_status_of_up_ports(duthost): + if duthost.facts['asic_type'] == 'vs' and duthost.is_supervisor_node(): + return True + if duthost.is_multi_asic: up_ports = [] for asic in duthost.frontend_asics: diff --git a/tests/common/platform/reboot_timing_constants.py b/tests/common/platform/reboot_timing_constants.py index 186f6f6c58b..c48fef23f2f 100644 --- a/tests/common/platform/reboot_timing_constants.py +++ b/tests/common/platform/reboot_timing_constants.py @@ -56,9 +56,9 @@ "SYNCD_CREATE_SWITCH|End": re.compile( r'.*syncd#syncd.*performWarmRestartSingleSwitch: Warm boot: create switch VID.*'), "FDB_EVENT_OTHER_MAC_EXPIRY|Start": re.compile( - r".* INFO syncd#syncd.*SAI_API_FDB.*fdbEvent: (delete \(0\)|0) for mac (?!00-06-07-08-09-0A).*"), + r".*syncd#syncd.*SAI_API_FDB.*fdbEvent: (delete \(0\)|0) for mac (?!00-06-07-08-09-0A).*"), "FDB_EVENT_SCAPY_MAC_EXPIRY|Start": re.compile( - r".* INFO syncd#syncd.*SAI_API_FDB.*fdbEvent: (delete \(0\)|0) for mac 00-06-07-08-09-0A.*") + r".*syncd#syncd.*SAI_API_FDB.*fdbEvent: (delete \(0\)|0) for mac 00-06-07-08-09-0A.*") }, "MLNX": { "SYNCD_CREATE_SWITCH|Start": re.compile( diff --git a/tests/common/platform/templates/expect_boot_messages b/tests/common/platform/templates/expect_boot_messages index 1ca5986afb4..cd2dbcf5cf6 100644 --- a/tests/common/platform/templates/expect_boot_messages +++ b/tests/common/platform/templates/expect_boot_messages @@ -19,7 +19,7 @@ r, ".* NOTICE syncd#syncd.*performWarmRestart: switches defined in warm restart. r, ".* NOTICE syncd#syncd.*performWarmRestartSingleSwitch: Warm boot: create switch VID.*" r, ".* NOTICE bgp#fpmsyncd.*main: Warm-Restart timer started.*.*" r, ".* NOTICE bgp#fpmsyncd.*main: Warm-Restart reconciliation processed..*" -r, ".* INFO syncd#syncd.*SAI_API_FDB:_brcm_sai_fdb_event_cb.*fdbEvent: (delete \(0\)|0) for mac.*" +r, ".* syncd#syncd.*SAI_API_FDB:_brcm_sai_fdb_event_cb.*fdbEvent: (delete \(0\)|0) for mac.*" r, ".* NOTICE swss#orchagent.*setAgingFDB: Set switch.*fdb_aging_time 0 sec" r, ".* NOTICE swss#orchagent.*do.*Task: Set switch attribute fdb_aging_time to 600" diff --git a/tests/common/plugins/conditional_mark/__init__.py b/tests/common/plugins/conditional_mark/__init__.py index 73e480d18de..28aff15ef6f 100644 --- a/tests/common/plugins/conditional_mark/__init__.py +++ b/tests/common/plugins/conditional_mark/__init__.py @@ -14,6 +14,7 @@ from tests.common.testbed import TestbedInfo from .issue import check_issues +from tests.common.utilities import get_duts_from_host_pattern logger = logging.getLogger(__name__) @@ -157,27 +158,25 @@ def load_dut_basic_facts(inv_name, dut_name): return results -def get_basic_facts(session): - testbed_name = session.config.option.testbed - - testbed_name_cached = session.config.cache.get('TB_NAME', None) - basic_facts_cached = session.config.cache.get('BASIC_FACTS', None) - - if testbed_name_cached != testbed_name: - # clear chche - session.config.cache.set('TB_NAME', None) - session.config.cache.set('BASIC_FACTS', None) +def get_dut_name(session): + host_pattern = session.config.option.ansible_host_pattern + if host_pattern == 'all': + testbed_name = session.config.option.testbed + testbed_file = session.config.option.testbed_file + tbinfo = TestbedInfo(testbed_file).testbed_topo.get(testbed_name, None) + dut_name = tbinfo['duts'][0] + else: + dut_name = get_duts_from_host_pattern(host_pattern)[0] + return dut_name - # get basic facts - basic_facts = load_basic_facts(session) - # update cache - session.config.cache.set('TB_NAME', testbed_name) - session.config.cache.set('BASIC_FACTS', basic_facts) - else: - if not basic_facts_cached: - basic_facts = load_basic_facts(session) - session.config.cache.set('BASIC_FACTS', basic_facts) +def get_basic_facts(session): + dut_name = get_dut_name(session) + cached_facts_name = f'BASIC_FACTS_{dut_name}' + basic_facts_cached = session.config.cache.get(cached_facts_name, None) + if not basic_facts_cached: + basic_facts = load_basic_facts(dut_name, session) + session.config.cache.set(cached_facts_name, basic_facts) def get_http_proxies(inv_name): @@ -340,12 +339,13 @@ def load_console_facts(inv_name, dut_name): return results -def load_basic_facts(session): +def load_basic_facts(dut_name, session): """Load some basic facts that can be used in condition statement evaluation. The facts will be a 1 level dictionary. The dict keys can be used as variables in condition statements evaluation. Args: + dut_name (str): The name of the dut session (obj): Pytest session object. Returns: @@ -361,8 +361,6 @@ def load_basic_facts(session): results['topo_type'] = tbinfo['topo']['type'] results['topo_name'] = tbinfo['topo']['name'] results['testbed'] = testbed_name - - dut_name = tbinfo['duts'][0] if session.config.option.customize_inventory_file: inv_name = session.config.option.customize_inventory_file elif 'inv_name' in list(tbinfo.keys()): @@ -422,7 +420,18 @@ def find_all_matches(nodeid, conditions): for condition in conditions: # condition is a dict which has only one item, so we use condition.keys()[0] to get its key. - if nodeid.startswith(list(condition.keys())[0]): + condition_entry = list(condition.keys())[0] + condition_items = condition[condition_entry] + if "regex" in condition_items.keys(): + assert isinstance(condition_items["regex"], bool), \ + "The value of 'regex' in the mark conditions yaml should be bool type." + if condition_items["regex"] is True: + match = re.search(condition_entry, nodeid) + else: + match = None + else: + match = nodeid.startswith(condition_entry) + if match: all_matches.append(condition) for match in all_matches: @@ -600,7 +609,9 @@ def pytest_collection_modifyitems(session, config, items): logger.debug('No mark condition is defined') return - basic_facts = config.cache.get('BASIC_FACTS', None) + dut_name = get_dut_name(session) + cached_facts_name = f'BASIC_FACTS_{dut_name}' + basic_facts = config.cache.get(cached_facts_name, None) if not basic_facts: logger.debug('No basic facts') return @@ -616,6 +627,8 @@ def pytest_collection_modifyitems(session, config, items): for match in all_matches: # match is a dict which has only one item, so we use match.values()[0] to get its value. for mark_name, mark_details in list(list(match.values())[0].items()): + if mark_name == "regex": + continue conditions_logical_operator = mark_details.get('conditions_logical_operator', 'AND').upper() add_mark = False if not mark_details: diff --git a/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml b/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml index a4737b99dc2..7432c8a871d 100644 --- a/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml +++ b/tests/common/plugins/conditional_mark/tests_mark_conditions.yaml @@ -18,12 +18,6 @@ acl/null_route/test_null_route_helper.py: conditions: - "'dualtor' in topo_name" -acl/test_acl.py: - xfail: - reason: "ACL test is not supported on mellanox platform with dualtor topology " - conditions: - - "asic_type in ['mellanox'] and 'dualtor' in topo_name" - 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 @@ -53,9 +47,9 @@ arp/test_neighbor_mac_noptf.py: arp/test_unknown_mac.py: skip: - reason: "Behavior on cisco-8000 & Innovium(Marvell) platform for unknown MAC is flooding rather than DROP, hence skipping." + reason: "Behavior on cisco-8000 & (Marvell) platform for unknown MAC is flooding rather than DROP, hence skipping." conditions: - - "asic_type in ['cisco-8000','innovium']" + - "asic_type in ['cisco-8000','marvell-teralynx']" arp/test_wr_arp.py: skip: @@ -92,11 +86,11 @@ bfd/test_bfd.py::test_bfd_echo_mode: bfd/test_bfd.py::test_bfd_scale: skip: - reason: "Test not supported for cisco as it doesnt support single hop BFD. + reason: "Test is not verified for cisco-8111 and cisco-8122 yet. and not supported for platforms other than Nvidia 4600c/4700/5600. Skipping the test" conditions_logical_operator: or conditions: - - "platform in ['x86_64-8102_64h_o-r0', 'x86_64-8101_32fh_o-r0', 'x86_64-8111_32eh_o-r0', 'x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" + - "platform in ['x86_64-8111_32eh_o-r0', 'x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" - "platform not in ['x86_64-mlnx_msn4600c-r0', 'x86_64-mlnx_msn4700-r0', 'x86_64-nvidia_sn5600-r0', 'x86_64-8102_64h_o-r0', 'x86_64-8101_32fh_o-r0']" - "release in ['201811', '201911']" @@ -184,6 +178,10 @@ bgp/test_bgpmon.py: conditions: - "'backend' in topo_name or 't2' in topo_name" +bgp/test_bgpmon_v6.py::test_bgpmon_no_ipv6_resolve_via_default: + skip: + reason: "Not applicable for passive bgpmon_v6" + bgp/test_traffic_shift.py::test_load_minigraph_with_traffic_shift_away: skip: reason: "Test is flaky and causing PR test to fail unnecessarily" @@ -212,6 +210,12 @@ cacl/test_cacl_application.py::test_multiasic_cacl_application: conditions: - "not is_multi_asic" +cacl/test_ebtables_application.py: + skip: + reason: "Ebtables shouldn't be installed in KVM which blocks L2 forwarding, skip in PR testing" + conditions: + - "asic_type in ['vs']" + ####################################### ##### configlet ##### ####################################### @@ -262,6 +266,11 @@ copp/test_copp.py::TestCOPP::test_trap_config_save_after_reboot: - "build_version.split('.')[0].isdigit() and int(build_version.split('.')[0]) > 20220531 and hwsku in ['Arista-7050-QX-32S', 'Arista-7050QX32S-Q32', 'Arista-7050-QX32', 'Arista-7050QX-32S-S4Q31', 'Arista-7060CX-32S-D48C8', 'Arista-7060CX-32S-C32', 'Arista-7060CX-32S-Q32', 'Arista-7060CX-32S-C32-T1']" - "(topo_name not in ['ptf32', 'ptf64', 't0', 't0-64', 't0-52', 't0-116', 't1', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 'm0', 'm0-2vlan', 'mx'] and 't2' not in topo_type)" +copp/test_copp.py::TestCOPP::test_trap_neighbor_miss: + skip: + reason: "Copp test_trap_neighbor_miss is not supported on this topology" + conditions: + - "(topo_name not in ['t0', 't0-64', 't0-52', 't0-116'])" ####################################### ##### crm ##### @@ -290,17 +299,17 @@ decap/test_decap.py::test_decap[ttl=pipe, dscp=pipe, vxlan=set_unset]: decap/test_decap.py::test_decap[ttl=pipe, dscp=uniform, vxlan=disable]: skip: conditions_logical_operator: or - reason: "Not supported on backend, broadcom before 202012 release, innovium platform. Skip 7260CX3 T1 topo in 202305 release" + reason: "Not supported on backend, broadcom before 202012 release, marvell-teralynx platform. Skip 7260CX3 T1 topo in 202305 release" conditions: - - "(topo_name in ['t1-backend', 't0-backend']) or (asic_type in ['broadcom'] and release in ['201811', '201911']) or asic_type in ['innovium']" + - "(topo_name in ['t1-backend', 't0-backend']) or (asic_type in ['broadcom'] and release in ['201811', '201911']) or asic_type in ['marvell-teralynx']" - "'7260CX3' in hwsku and release in ['202305'] and 't1' in topo_type" decap/test_decap.py::test_decap[ttl=pipe, dscp=uniform, vxlan=set_unset]: skip: - reason: "Not supported on backend, T2 topologies , broadcom platforms before 202012 release, innovium, x86_64-8111_32eh_o-r0 platform. Skip on mellanox dualtor setups for github issue #9646. Skip on 7260CX3 T1 topo in 202305 release" + reason: "Not supported on backend, T2 topologies , broadcom platforms before 202012 release, marvell-teralynx, x86_64-8111_32eh_o-r0 platform. Skip on mellanox dualtor setups for github issue #9646. Skip on 7260CX3 T1 topo in 202305 release" conditions_logical_operator: or conditions: - - "('t2' in topo_name) or (topo_name in ['t1-backend', 't0-backend']) or (asic_type in ['broadcom'] and release in ['201811', '201911']) or asic_type in ['innovium'] or platform in ['x86_64-8111_32eh_o-r0']" + - "('t2' in topo_name) or (topo_name in ['t1-backend', 't0-backend']) or (asic_type in ['broadcom'] and release in ['201811', '201911']) or asic_type in ['marvell-teralynx'] or platform in ['x86_64-8111_32eh_o-r0']" - "https://github.com/sonic-net/sonic-mgmt/issues/9646 and 'dualtor' in topo_name and asic_type in ['mellanox']" - "'7260CX3' in hwsku and release in ['202305'] and 't1' in topo_type" @@ -322,10 +331,12 @@ decap/test_decap.py::test_decap[ttl=uniform, dscp=uniform, vxlan=set_unset]: decap/test_subnet_decap.py::test_vlan_subnet_decap: skip: - reason: "Supported only on T0 topology with KVM or broadcom td3 asic, and available for 202405 release and later" + reason: "Supported only on T0 topology with KVM or broadcom td3 asic or mellanox asic, and available for 202405 release and later, need to skip on KVM testbed since subnet_decap feature haven't been added into yang model" + conditions_logical_operator: or conditions: - "topo_type not in ['t0']" - - "asic_type not in ['vs'] or asic_gen not in ['td3']" + - "asic_type not in ['vs', 'mellanox'] and asic_gen not in ['td3']" + - "asic_type in ['vs'] and https://github.com/sonic-net/sonic-buildimage/issues/21090" - "release in ['202012', '202205', '202305', '202311']" ####################################### @@ -333,9 +344,9 @@ decap/test_subnet_decap.py::test_vlan_subnet_decap: ####################################### dhcp_relay/test_dhcp_relay.py: skip: - reason: "Need to skip for platform x86_64-8111_32eh_o-r0" + reason: "Need to skip for Cisco backend platform" conditions: - - "platform in ['x86_64-8111_32eh_o-r0']" + - "platform in ['x86_64-8111_32eh_o-r0', 'x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" dhcp_relay/test_dhcp_relay.py::test_dhcp_relay_after_link_flap: skip: @@ -378,12 +389,24 @@ dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress: - "platform in ['armhf-nokia_ixs7215_52x-r0']" - "asic_type in ['vs']" +dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[ack]: + xfail: + reason: "Testcase ignored on dualtor 202405" + conditions: + - "'dualtor' in topo_name and release in ['202405']" + dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[discover]: skip: reason: "Testcase ignored due to github issue: 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]: + xfail: + reason: "Testcase ignored on dualtor 202405" + conditions: + - "'dualtor' in topo_name and release in ['202405']" + dhcp_relay/test_dhcp_relay_stress.py::test_dhcp_relay_stress[request]: skip: reason: "Testcase ignored due to github issue: https://github.com/sonic-net/sonic-mgmt/issues/14851" @@ -448,6 +471,12 @@ dualtor/test_orchagent_mac_move.py: conditions: - "(topo_type not in ['t0']) or ('dualtor' in topo_name)" +dualtor/test_orchagent_slb.py: + skip: + reason: "KVM do not support dualtor tunnel functionality, lower tor bgp verify would fail." + conditions: + - "asic_type in ['vs']" + dualtor/test_orchagent_standby_tor_downstream.py::test_downstream_standby_mux_toggle_active: skip: reason: "This testcase is designed for single tor testbed with mock dualtor config." @@ -472,9 +501,9 @@ dualtor/test_orchagent_standby_tor_downstream.py::test_standby_tor_downstream_bg dualtor/test_orchagent_standby_tor_downstream.py::test_standby_tor_downstream_loopback_route_readded: skip: - reason: "This testcase is designed for single tor testbed with mock dualtor config and dualtor." + reason: "This testcase is designed for single tor testbed with mock dualtor config." conditions: - - "(topo_type not in ['t0'])" + - "(topo_type not in ['t0']) or ('dualtor' in topo_name)" dualtor/test_orchagent_standby_tor_downstream.py::test_standby_tor_downstream_t1_link_recovered: skip: @@ -596,6 +625,18 @@ dualtor_io/test_link_failure.py::test_standby_link_down_upstream: conditions: - "asic_type in ['vs'] or 'dualtor' not in topo_name" +dualtor_io/test_normal_op.py: + skip: + reason: "KVM do not support dualtor tunnel functionality, verify DB status would fail. Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" + +dualtor_io/test_tor_failure.py: + skip: + reason: "This script would toggle PDU, which is not supported on KVM." + conditions: + - "asic_type in ['vs']" + dualtor_mgmt/test_dualtor_bgp_update_delay.py: xfail: reason: "Has flaky issue on kvm testbed" @@ -609,6 +650,12 @@ dualtor_mgmt/test_server_failure.py::test_server_reboot: conditions: - "asic_type in ['vs']" +dualtor_mgmt/test_toggle_mux.py: + skip: + reason: "This testcase has low passing rate in KVM PR test, skip with issue to unblock PR test." + conditions: + - "asic_type in ['vs'] and https://github.com/sonic-net/sonic-mgmt/issues/15958" + ####################################### ##### dut_console ##### ####################################### @@ -618,6 +665,18 @@ dut_console: conditions: - "asic_type in ['vs']" +dut_console/test_console_baud_rate.py::test_baud_rate_boot_connect: + skip: + reason: "Platform linecards do not have console ports" + conditions: + - "asic_type in ['vs'] or 'arista_7800' in platform" + +dut_console/test_console_baud_rate.py::test_baud_rate_sonic_connect: + skip: + reason: "Platform linecards do not have console ports" + conditions: + - "asic_type in ['vs'] or 'arista_7800' in platform" + ####################################### ##### ecmp ##### ####################################### @@ -779,6 +838,18 @@ fib/test_fib.py::test_ipinip_hash: conditions: - "asic_type in ['mellanox']" +fib/test_fib.py::test_nvgre_hash: + skip: + reason: 'Nvgre hash test is not fully supported on VS platform' + conditions: + - "asic_type in ['vs']" + +fib/test_fib.py::test_vxlan_hash: + skip: + reason: 'Vxlan hash test is not fully supported on VS platform' + conditions: + - "asic_type in ['vs']" + ####################################### ##### generic_config_updater ##### ####################################### @@ -788,12 +859,18 @@ generic_config_updater: conditions: - "'t2' in topo_name" +generic_config_updater/test_bgp_prefix.py::test_bgp_prefix_tc1_suite: + skip: + reason: "Cisco 8122 backend compute ai platform is not supported." + conditions: + - "platform in ['x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" + generic_config_updater/test_dhcp_relay.py: skip: - reason: "Need to skip for platform x86_64-8111_32eh_o-r0 or backend topology / generic_config_updater is not a supported feature for T2" + reason: "Need to skip for Cisco backend platform/ generic_config_updater is not a supported feature for T2" conditions_logical_operator: "OR" conditions: - - "platform in ['x86_64-8111_32eh_o-r0']" + - "platform in ['x86_64-8111_32eh_o-r0', 'x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" - "'backend' in topo_name" - "'t2' in topo_name" @@ -869,6 +946,12 @@ generic_config_updater/test_mmu_dynamic_threshold_config_update.py::test_dynamic - "asic_type in ['broadcom', 'cisco-8000'] and release in ['202211']" - "'t2' in topo_name" +generic_config_updater/test_pfcwd_interval.py: + skip: + reason: "This test can only support mellanox platforms" + conditions: + - "asic_type not in ['mellanox']" + generic_config_updater/test_pfcwd_status.py: skip: reason: "This test is not run on this topo type or version or topology currently" @@ -886,9 +969,26 @@ generic_config_updater/test_pg_headroom_update.py: - "topo_type in ['m0', 'mx']" - "'t2' in topo_name" +####################################### +##### gnmi ##### +####################################### +gnmi/test_gnmi_configdb.py: + skip: + reason: "This feature is not supported for multi asic. Skipping these test for T2 and multi asic." + conditions_logical_operator: or + conditions: + - "'t2' in topo_name" + - "is_multi_asic==True" + ####################################### ##### hash ##### ####################################### +hash/test_generic_hash.py: + skip: + reason: "Testcase ignored due to GitHub issue https://github.com/sonic-net/sonic-mgmt/issues/15340 on dualtor aa setup" + conditions: + - "https://github.com/sonic-net/sonic-mgmt/issues/15340 and 'dualtor-aa' in topo_name" + hash/test_generic_hash.py::test_algorithm_config: xfail: reason: "This is a new test cases and doesn't work for platform other than Mellanox, xfail them before the issue is addressed" @@ -912,6 +1012,12 @@ hash/test_generic_hash.py::test_ecmp_and_lag_hash: - "asic_type in ['broadcom']" hash/test_generic_hash.py::test_ecmp_and_lag_hash[CRC-INNER_IP_PROTOCOL: + skip: + reason: "On Mellanox platforms, due to HW limitation, it would not support CRC algorithm on INNER_IP_PROTOCOL field. For broadcom, ECMP hash is not supported in broadcom SAI." + conditions: + - "asic_type in ['broadcom', 'mellanox']" + +hash/test_generic_hash.py::test_ecmp_and_lag_hash[CRC_CCITT-INNER_IP_PROTOCOL: skip: reason: "On Mellanox platforms, due to HW limitation, it would not support CRC algorithm on INNER_IP_PROTOCOL field" conditions: @@ -963,6 +1069,19 @@ hash/test_generic_hash.py::test_lag_member_flap[CRC-INNER_IP_PROTOCOL: conditions: - "asic_type in ['mellanox']" +hash/test_generic_hash.py::test_lag_member_flap[CRC_CCITT-INNER_IP_PROTOCOL: + skip: + reason: "On Mellanox platforms, due to HW limitation, it would not support CRC algorithm on INNER_IP_PROTOCOL field" + conditions: + - "asic_type in ['mellanox']" + +hash/test_generic_hash.py::test_lag_member_flap[CRC_CCITT-IN_PORT: + skip: + reason: "On Mellanox platforms, due to HW limitation, when ecmp and lag hash at the same time, it would not support + setting ecmp hash as CRC_CCITT and lag hash as CRC on ingress port hash field" + conditions: + - "asic_type in ['mellanox']" + hash/test_generic_hash.py::test_lag_member_remove_add: skip: reason: 'On Mellanox SPC1 platforms, due to HW limitation, it would not support CRC_CCITT algorithm. For broadcom, LAG hash not supported in broadcom SAI. For other platforms, skipping due to missing object in SonicHost' @@ -978,6 +1097,19 @@ hash/test_generic_hash.py::test_lag_member_remove_add[CRC-INNER_IP_PROTOCOL: conditions: - "asic_type in ['mellanox']" +hash/test_generic_hash.py::test_lag_member_remove_add[CRC_CCITT-INNER_IP_PROTOCOL: + skip: + reason: "On Mellanox platforms, due to HW limitation, it would not support CRC algorithm on INNER_IP_PROTOCOL field" + conditions: + - "asic_type in ['mellanox']" + +hash/test_generic_hash.py::test_lag_member_remove_add[CRC_CCITT-IN_PORT: + skip: + reason: "On Mellanox platforms, due to HW limitation, when ecmp and lag hash at the same time, it would not support + setting ecmp hash as CRC_CCITT and lag hash as CRC on ingress port hash field" + conditions: + - "asic_type in ['mellanox']" + hash/test_generic_hash.py::test_nexthop_flap: skip: reason: 'On Mellanox SPC1 platforms, due to HW limitation, it would not support CRC_CCITT algorithm. For broadcom, ECMP/LAG hash not supported in broadcom SAI. For other platforms, skipping due to missing object in SonicHost' @@ -993,6 +1125,19 @@ hash/test_generic_hash.py::test_nexthop_flap[CRC-INNER_IP_PROTOCOL: conditions: - "asic_type in ['mellanox']" +hash/test_generic_hash.py::test_nexthop_flap[CRC_CCITT-INNER_IP_PROTOCOL: + skip: + reason: "On Mellanox platforms, due to HW limitation, it would not support CRC algorithm on INNER_IP_PROTOCOL field" + conditions: + - "asic_type in ['mellanox']" + +hash/test_generic_hash.py::test_nexthop_flap[CRC_CCITT-IN_PORT: + skip: + reason: "On Mellanox platforms, due to HW limitation, when ecmp and lag hash at the same time, it would not support + setting ecmp hash as CRC_CCITT and lag hash as CRC on ingress port hash field" + conditions: + - "asic_type in ['mellanox']" + hash/test_generic_hash.py::test_reboot: skip: reason: 'On Mellanox SPC1 platforms, due to HW limitation, it would not support CRC_CCITT algorithm. For broadcom, ECMP/LAG hash not supported in broadcom SAI' @@ -1007,6 +1152,19 @@ hash/test_generic_hash.py::test_reboot[CRC-INNER_IP_PROTOCOL: conditions: - "asic_type in ['mellanox']" +hash/test_generic_hash.py::test_reboot[CRC_CCITT-INNER_IP_PROTOCOL: + skip: + reason: "On Mellanox platforms, due to HW limitation, it would not support CRC algorithm on INNER_IP_PROTOCOL field" + conditions: + - "asic_type in ['mellanox']" + +hash/test_generic_hash.py::test_reboot[CRC_CCITT-IN_PORT: + skip: + reason: "On Mellanox platforms, due to HW limitation, when ecmp and lag hash at the same time, it would not support + setting ecmp hash as CRC_CCITT and lag hash as CRC on ingress port hash field" + conditions: + - "asic_type in ['mellanox']" + ####################################### ##### http ##### ####################################### @@ -1076,11 +1234,12 @@ ip/test_ip_packet.py: 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 + reason: "Broadcom, Cisco, Barefoot, and Marvell Asic will tolorate IP packets with 0xffff checksum / Skipping ip packet test since can't provide enough interfaces" conditions_logical_operator: or conditions: - - "asic_type in ['broadcom', 'cisco-8000', 'marvell', 'barefoot', 'innovium'] and asic_subtype not in ['broadcom-dnx']" + + - "asic_type in ['broadcom', 'cisco-8000', 'marvell', 'barefoot', 'marvell-teralynx'] and asic_subtype not in ['broadcom-dnx']" - "len(minigraph_interfaces) < 2 and len(minigraph_portchannels) < 2" ip/test_ip_packet.py::TestIPPacket::test_forward_ip_packet_with_0xffff_chksum_tolerant: @@ -1122,13 +1281,25 @@ ipfwd/test_mtu.py: - "topo_type not in ['t1', 't2']" ####################################### -####### link_flap ##### +##### k8s ##### ####################################### -link_flap/test_cont_link_flap.py: - xfail: - reason: "system could be not reaching stable status while BGP converged" +k8s/test_config_reload.py: + skip: + reason: "There is no k8s in veos_vtb, skip in PR testing" + conditions: + - "asic_type in ['vs']" + +k8s/test_disable_flag.py: + skip: + reason: "There is no k8s in veos_vtb, skip in PR testing" conditions: - - https://github.com/sonic-net/sonic-mgmt/issues/10955 + - "asic_type in ['vs']" + +k8s/test_join_available_master.py: + skip: + reason: "There is no k8s in veos_vtb, skip in PR testing" + conditions: + - "asic_type in ['vs']" ####################################### ##### lldp ##### @@ -1154,17 +1325,14 @@ macsec/test_dataplane.py::TestDataPlane::test_server_to_neighbor: conditions: - "'t2' in topo_name" -macsec/test_interop_protocol.py::TestInteropProtocol::test_bgp: - skip: - reason: 'test_bgp skip in Brcm based T2, complete portchannel SAI fix planned for 8.1' - conditions: - - "asic_subtype in ['broadcom-dnx']" - -macsec/test_macsec.py: +####################################### +##### mclag ##### +####################################### +mclag/test_mclag_l3.py: skip: - reason: "This test can only run on 7280 CR3" + reason: "Mclag test only support on t0-mclag platform which is not in PR test" conditions: - - "platform not in ['x86_64-arista_7280cr3mk_32d4', 'x86_64-kvm_x86_64-r0']" + - "asic_type in ['vs']" ####################################### ##### mpls ##### @@ -1180,9 +1348,20 @@ mpls/test_mpls.py: ####################################### mvrf: skip: - reason: "M0/MX topo does not support mvrf" + reason: "mvrf is not supported in x86_64-nokia_ixr7250e_36x400g-r0 platform, M0/MX topo" + conditions_logical_operator: or conditions: - "topo_type in ['m0', 'mx']" + - "platform in ['x86_64-nokia_ixr7250e_36x400g-r0']" + +mvrf/test_mgmtvrf.py: + skip: + reason: "mvrf is not supported in x86_64-nokia_ixr7250e_36x400g-r0 platform, M0/MX topo, kvm testbed" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "topo_type in ['m0', 'mx']" + - "platform in ['x86_64-nokia_ixr7250e_36x400g-r0']" ####################################### ##### nat ##### @@ -1193,6 +1372,15 @@ nat: conditions: - "'nat' not in feature_status" +####################################### +##### ospf ##### +####################################### +ospf: + skip: + reason: "Neighbor type must be sonic, skip in PR testing" + conditions: + - "asic_type in ['vs']" + ####################################### ##### override_config_table ##### ####################################### @@ -1325,6 +1513,7 @@ process_monitoring/test_critical_process_monitoring.py::test_orchagent_heartbeat qos: skip: reason: "M0/MX topo does not support qos" + conditions_logical_operator: or conditions: - "topo_type in ['m0', 'mx']" @@ -1342,6 +1531,7 @@ qos/test_buffer.py::test_buffer_model_test: conditions_logical_operator: or conditions: - "asic_type in ['mellanox'] or asic_subtype in ['broadcom-dnx']" + - "asic_type in ['cisco-8000'] or 't2' in topo_name" - "topo_type in ['m0', 'mx']" qos/test_buffer_traditional.py: @@ -1351,6 +1541,25 @@ qos/test_buffer_traditional.py: conditions: - "release not in ['201911']" - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" + +qos/test_ecn_config.py: + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" + +qos/test_pfc_counters.py: + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" + +qos/test_pfc_pause.py: + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" qos/test_pfc_pause.py::test_pfc_pause_lossless: # For this test, we use the fanout connected to the DUT to send PFC pause frames. @@ -1361,6 +1570,17 @@ qos/test_pfc_pause.py::test_pfc_pause_lossless: skip: reason: "Fanout needs to send PFC frames fast enough to completely pause the queue" +qos/test_qos_dscp_mapping.py: + xfail: + reason: "ECN marking in combination with tunnel decap not yet supported" + strict: True + conditions: + - "asic_type in ['cisco-8000'] and platform in ['x86_64-8122_64eh_o-r0']" + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" + qos/test_qos_dscp_mapping.py::TestQoSSaiDSCPQueueMapping_IPIP_Base::test_dscp_to_queue_mapping_pipe_mode: skip: reason: "Pipe decap mode not supported due to either SAI or platform limitation / M0/MX topo does not support qos" @@ -1369,6 +1589,7 @@ qos/test_qos_dscp_mapping.py::TestQoSSaiDSCPQueueMapping_IPIP_Base::test_dscp_to - "asic_type in ['mellanox', 'broadcom', 'cisco-8000']" - https://github.com/sonic-net/sonic-mgmt/issues/12906 - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" qos/test_qos_masic.py: skip: @@ -1377,6 +1598,7 @@ qos/test_qos_masic.py: conditions: - "is_multi_asic==False or topo_name not in ['t1-lag', 't1-64-lag', 't1-56-lag', 't1-backend']" - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" qos/test_qos_sai.py: skip: @@ -1385,6 +1607,7 @@ qos/test_qos_sai.py: conditions: - "asic_type in ['barefoot'] and topo_name in ['t1']" - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai: skip: @@ -1393,99 +1616,123 @@ qos/test_qos_sai.py::TestQosSai: conditions: - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testIPIPQosSaiDscpToPgMapping: skip: - reason: "For DSCP to PG mapping on IPinIP traffic , mellanox device has different behavior to community. For mellanox device, testQosSaiDscpToPgMapping can cover the scenarios / M0/MX topo does not support qos" + reason: "For DSCP to PG mapping on IPinIP traffic , mellanox device has different behavior to community. For mellanox device, testQosSaiDscpToPgMapping can cover the scenarios / Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type in ['mellanox']" - https://github.com/sonic-net/sonic-mgmt/issues/12906 - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testPfcStormWithSharedHeadroomOccupancy: skip: - reason: "This test is only for Mellanox. / M0/MX topo does not support qos" + reason: "This test is only for Mellanox." conditions_logical_operator: or conditions: - "asic_type in ['cisco-8000']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark: skip: - reason: "sai_thrift_read_buffer_pool_watermark are not supported on DNX / M0/MX topo does not support qos" + reason: "sai_thrift_read_buffer_pool_watermark are not supported on DNX / Unsupported testbed type." conditions_logical_operator: or conditions: - "platform in ['x86_64-nokia_ixr7250e_36x400g-r0', 'x86_64-arista_7800r3_48cq2_lc', 'x86_64-arista_7800r3_48cqm2_lc', 'x86_64-arista_7800r3a_36d2_lc', 'x86_64-arista_7800r3a_36dm2_lc','x86_64-arista_7800r3ak_36dm2_lc']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiDot1pPgMapping: skip: - reason: "Dot1p-PG mapping is only supported on backend. / M0/MX topo does not support qos" + reason: "Dot1p-PG mapping is only supported on backend." conditions_logical_operator: or conditions: - "'backend' not in topo_name" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiDot1pQueueMapping: skip: - reason: "Dot1p-queue mapping is only supported on backend. / M0/MX topo does not support qos" + reason: "Dot1p-queue mapping is only supported on backend." conditions_logical_operator: or conditions: - "'backend' not in topo_name" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiDscpQueueMapping: skip: - reason: "Dscp-queue mapping is not supported on backend. / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "'backend' in topo_name" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiDscpToPgMapping: skip: - reason: "Dscp-PG mapping is not supported on backend. / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "'backend' in topo_name" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiDwrrWeightChange: skip: - reason: "Skip DWRR weight change test on Mellanox platform. / M0/MX topo does not support qos" + reason: "Skip DWRR weight change test on Mellanox platform. / Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type in ['mellanox']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiFullMeshTrafficSanity: skip: - reason: "Unsupported platform or testbed type. / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000'] or topo_name not in ['ptf64']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiHeadroomPoolSize: skip: - reason: "Headroom pool size not supported. / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "https://github.com/sonic-net/sonic-mgmt/issues/12292 and hwsku in ['Force10-S6100'] and topo_type in ['t1-64-lag'] and hwsku not in ['Arista-7060CX-32S-C32', 'Celestica-DX010-C32', 'Arista-7260CX3-D108C8', 'Force10-S6100', 'Arista-7260CX3-Q64', 'Arista-7050CX3-32S-C32', 'Arista-7050CX3-32S-D48C8', 'Arista-7060CX-32S-D48C8'] and asic_type not in ['mellanox'] and asic_type in ['cisco-8000']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "'t2' in topo_name and asic_subtype in ['broadcom-dnx']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiHeadroomPoolWatermark: skip: - reason: "sai_thrift_read_buffer_pool_watermark are not supported on DNX / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "platform in ['x86_64-nokia_ixr7250e_36x400g-r0', 'x86_64-arista_7800r3_48cq2_lc', 'x86_64-arista_7800r3_48cqm2_lc', 'x86_64-arista_7800r3a_36d2_lc', 'x86_64-arista_7800r3a_36dm2_lc', 'x86_64-arista_7800r3ak_36dm2_lc'] or asic_type in ['mellanox'] and asic_type in ['cisco-8000'] and https://github.com/sonic-net/sonic-mgmt/issues/12292 and hwsku in ['Force10-S6100'] and topo_type in ['t1-64-lag']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" xfail: reason: "Headroom pool size not supported." conditions: @@ -1493,66 +1740,85 @@ qos/test_qos_sai.py::TestQosSai::testQosSaiHeadroomPoolWatermark: qos/test_qos_sai.py::TestQosSai::testQosSaiLosslessVoq: skip: - reason: "Lossless Voq test is not supported / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000'] or platform in ['x86_64-8122_64eh_o-r0']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueueVoq: skip: - reason: "Lossy Queue Voq test is not supported / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000'] or platform in ['x86_64-8122_64eh_o-r0']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueueVoqMultiSrc: skip: - reason: "Lossy Queue Voq multiple source test is not supported / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000'] or platform in ['x86_64-8122_64eh_o-r0']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiPGDrop: skip: - reason: "PG drop size test is not supported. / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000'] or platform in ['x86_64-8122_64eh_o-r0']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiPgHeadroomWatermark: skip: - reason: "Priority Group Headroom Watermark is not supported on cisco asic. PG drop counter stat is covered as a part of testQosSaiPfcXoffLimit - / M0/MX topo does not support qos" + reason: "Unsupported testbed type." conditions_logical_operator: or conditions: - "asic_type in ['cisco-8000'] and platform not in ['x86_64-8122_64eh_o-r0']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiPgSharedWatermark[None-wm_pg_shared_lossy]: xfail: - reason: "Image issue on Arista platforms" + reason: "Image issue on Arista platforms / Unsupported testbed type." conditions: - "platform in ['x86_64-arista_7050cx3_32s']" qos/test_qos_sai.py::TestQosSai::testQosSaiQWatermarkAllPorts: skip: - reason: "All Port Watermark test is verified only on Cisco Platforms. / M0/MX topo does not support qos" + reason: "All Port Watermark test is verified only on Cisco Platforms." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" qos/test_qos_sai.py::TestQosSai::testQosSaiSharedReservationSize: skip: - reason: "Shared reservation size test is not supported. / M0/MX topo does not support qos" + reason: "Shared reservation size test is not supported." conditions_logical_operator: or conditions: - "asic_type not in ['cisco-8000'] or platform in ['x86_64-8122_64eh_o-r0']" - "topo_type in ['m0', 'mx']" + - "topo_name not in ['t0', 't0-64', 't0-116', 't0-35', 't0-56', 't0-standalone-32', 't0-standalone-64', 't0-standalone-128', 't0-standalone-256', 'dualtor-56', 'dualtor-120', 'dualtor', 't0-80', 't0-backend', 't1-lag', 't1-64-lag', 't1-56-lag', 't1-backend', 't2', 't2_2lc_36p-masic', 't2_2lc_min_ports-masic'] and asic_type not in ['mellanox']" + - "asic_type in ['vs']" + +qos/test_tunnel_qos_remap.py: + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" qos/test_tunnel_qos_remap.py::test_pfc_watermark_extra_lossless_active: xfail: @@ -1583,6 +1849,15 @@ radv/test_radv_ipv6_ra.py::test_unsolicited_router_advertisement_with_m_flag: conditions: - "https://github.com/sonic-net/sonic-mgmt/issues/11322 and 'dualtor-64' in topo_name" +####################################### +##### read_mac ##### +####################################### +read_mac/test_read_mac_metadata.py: + skip: + reason: "Read_mac test needs specific variables and image urls, currently do not support on KVM and regular nightly test." + conditions: + - "asic_type in ['vs']" + ####################################### ##### reset_factory ##### ####################################### @@ -1633,6 +1908,14 @@ route/test_route_flap.py: - "https://github.com/sonic-net/sonic-mgmt/issues/11324 and 'dualtor-64' in topo_name" - "'standalone' in topo_name" +route/test_route_flow_counter.py: + skip: + reason: "Test not supported for cisco-8122 platform / Route flow counter is not supported on vs platform." + conditions_logical_operator: or + conditions: + - "platform in ['x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" + - "asic_type in ['vs']" + route/test_route_perf.py: skip: reason: "Does not apply to standalone topos." @@ -1641,11 +1924,12 @@ route/test_route_perf.py: route/test_static_route.py: skip: - reason: "Test not supported for 201911 images or older. Does not apply to standalone topos." + reason: "Test not supported for 201911 images or older. Does not apply to standalone topos. Not supported on cisco-8122 platform" conditions_logical_operator: OR conditions: - "release in ['201811', '201911']" - "'standalone' in topo_name" + - "platform in ['x86_64-8122_64eh_o-r0', 'x86_64-8122_64ehf_o-r0']" route/test_static_route.py::test_static_route_ecmp_ipv6: # This test case may fail due to a known issue https://github.com/sonic-net/sonic-buildimage/issues/4930. @@ -1658,6 +1942,15 @@ route/test_static_route.py::test_static_route_ecmp_ipv6: - "release in ['201811', '201911']" - "'standalone' in topo_name" +####################################### +##### sflow ##### +####################################### +sflow/test_sflow.py: + skip: + reason: "Sflow feature is default disabled on vs platform" + conditions: + - "asic_type in ['vs']" + ####################################### ##### show_techsupport ##### ####################################### @@ -1734,6 +2027,12 @@ snmp/test_snmp_pfc_counters.py: conditions: - "topo_type in ['m0', 'mx']" +snmp/test_snmp_phy_entity.py: + skip: + reason: "Only supports physical testbed." + conditions: + - "asic_type in ['vs']" + snmp/test_snmp_queue.py: skip: reason: "Interfaces not present on supervisor node or M0/MX topo does not support test_snmp_queue or unsupported platform" @@ -1763,6 +2062,15 @@ span/test_port_mirroring.py: conditions: - "https://github.com/sonic-net/sonic-mgmt/issues/9647 and 'dualtor' in topo_name and asic_type in ['mellanox']" +####################################### +##### srv6 ##### +####################################### +srv6/test_srv6_basic_sanity.py: + skip: + reason: "It's a new test case, skip it for other topologies except cisco vs nodes." + conditions: + - topo_name not in ["ciscovs-7nodes", "ciscovs-5nodes"] + ####################################### ##### ssh ##### ####################################### @@ -1784,7 +2092,7 @@ sub_port_interfaces: skip: reason: "Unsupported platform or asic" conditions: - - "is_multi_asic==True or asic_gen not in ['td2', 'spc1', 'spc2', 'spc3', 'spc4'] and asic_type not in ['barefoot','innovium']" + - "is_multi_asic==True or asic_gen not in ['td2', 'spc1', 'spc2', 'spc3', 'spc4'] and asic_type not in ['barefoot','marvell-teralynx']" sub_port_interfaces/test_show_subinterface.py::test_subinterface_status[port]: skip: @@ -1792,7 +2100,7 @@ sub_port_interfaces/test_show_subinterface.py::test_subinterface_status[port]: conditions_logical_operator: or conditions: - "asic_type in ['vs'] and https://github.com/sonic-net/sonic-buildimage/issues/19735" - - "is_multi_asic==True or asic_gen not in ['td2', 'spc1', 'spc2', 'spc3', 'spc4'] and asic_type not in ['barefoot','innovium']" + - "is_multi_asic==True or asic_gen not in ['td2', 'spc1', 'spc2', 'spc3', 'spc4'] and asic_type not in ['barefoot','marvell-teralynx']" sub_port_interfaces/test_show_subinterface.py::test_subinterface_status[port_in_lag]: skip: @@ -1808,7 +2116,7 @@ sub_port_interfaces/test_sub_port_interfaces.py::TestSubPorts::test_tunneling_be conditions_logical_operator: or conditions: - "asic_type=='cisco-8000'" - - "is_multi_asic==True or asic_gen not in ['td2', 'spc1', 'spc2', 'spc3', 'spc4'] and asic_type not in ['barefoot','innovium']" + - "is_multi_asic==True or asic_gen not in ['td2', 'spc1', 'spc2', 'spc3', 'spc4'] and asic_type not in ['barefoot','marvell-teralynx']" sub_port_interfaces/test_sub_port_interfaces.py::TestSubPorts::test_untagged_packet_not_routed[port_in_lag] : skip: @@ -1853,6 +2161,12 @@ syslog/test_syslog_source_ip.py::TestSSIP::test_syslog_protocol_filter_severity: ####################################### ##### system_health ##### ####################################### +system_health/test_system_health.py: + skip: + reason: "There is no table SYSTEM_HEALTH_INFO in STATE_DB on kvm testbed, skip in PR testing" + conditions: + - "asic_type in ['vs']" + system_health/test_system_health.py::test_service_checker_with_process_exit: xfail: strict: True @@ -1932,6 +2246,7 @@ vlan/test_vlan_ping.py: conditions_logical_operator: OR conditions: - "asic_type in ['broadcom']" + - "https://github.com/sonic-net/sonic-mgmt/issues/15061 and 'dualtor-aa' in topo_name" ####################################### ##### voq ##### @@ -1945,14 +2260,22 @@ voq: voq/test_fabric_cli_and_db.py: skip: reason: "Skip test_fabric_cli_and_db on unsupported testbed." + conditions_logical_operator: "OR" conditions: - - "('t2' not in topo_name) or (asic_subtype not in ['broadcom-dnx']) or ('arista_7800' not in platform) or (asic_type in ['cisco-8000'])" + - "('t2' not in topo_name)" + - "(asic_subtype not in ['broadcom-dnx'])" + - "not any(i in platform for i in ['arista_7800', 'x86_64-nokia_ixr7250e'])" + - "(asic_type in ['cisco-8000'])" voq/test_fabric_reach.py: skip: reason: "Skip test_fabric_reach on unsupported testbed." + conditions_logical_operator: "OR" conditions: - - "('t2' not in topo_name) or (asic_subtype not in ['broadcom-dnx']) or ('arista_7800' not in platform) or (asic_type in ['cisco-8000'])" + - "('t2' not in topo_name)" + - "(asic_subtype not in ['broadcom-dnx'])" + - "not any(i in platform for i in ['arista_7800', 'x86_64-nokia_ixr7250e'])" + - "(asic_type in ['cisco-8000'])" voq/test_voq_fabric_isolation.py: skip: @@ -1963,17 +2286,35 @@ voq/test_voq_fabric_isolation.py: voq/test_voq_fabric_status_all.py: skip: reason: "Skip test_voq_fabric_status_all on unsupported testbed." + conditions_logical_operator: "OR" conditions: - - "('t2' not in topo_name) or (asic_subtype not in ['broadcom-dnx']) or ('arista_7800' not in platform) or (asic_type in ['cisco-8000'])" + - "('t2' not in topo_name)" + - "(asic_subtype not in ['broadcom-dnx'])" + - "not any(i in platform for i in ['arista_7800', 'x86_64-nokia_ixr7250e'])" + - "(asic_type in ['cisco-8000'])" ####################################### ##### vrf ##### ####################################### +vrf/test_vrf.py: + skip: + reason: "Vrf tests are skipped both in nightly and PR testing." + conditions: + - "asic_type in ['vs']" + vrf/test_vrf.py::TestVrfAclRedirect: skip: reason: "Switch does not support ACL REDIRECT_ACTION." + conditions_logical_operator: or conditions: - "len([capabilities for capabilities in switch.values() if 'REDIRECT_ACTION' in capabilities]) == 0" + - "asic_type in ['vs']" + +vrf/test_vrf_attr.py: + skip: + reason: "Vrf tests are skipped both in nightly and PR testing." + conditions: + - "asic_type in ['vs']" ####################################### ##### vrf_attr ##### @@ -2104,6 +2445,12 @@ vxlan/test_vxlan_ecmp_switchover.py: conditions: - "(is_multi_asic == True) or (platform not in ['x86_64-8102_64h_o-r0', 'x86_64-8101_32fh_o-r0', 'x86_64-mlnx_msn4600c-r0', 'x86_64-mlnx_msn2700-r0', 'x86_64-mlnx_msn2700a1-r0', 'x86_64-kvm_x86_64-r0', 'x86_64-mlnx_msn4700-r0', 'x86_64-nvidia_sn4280-r0'])" +vxlan/test_vxlan_route_advertisement.py: + skip: + reason: "VxLAN route advertisement can only run on cisco and mnlx platforms." + conditions: + - "asic_type not in ['cisco-8000', 'mellanox', 'vs']" + ####################################### ##### wan_lacp ##### ####################################### diff --git a/tests/common/plugins/conditional_mark/tests_mark_conditions_drop_packets.yaml b/tests/common/plugins/conditional_mark/tests_mark_conditions_drop_packets.yaml index 222014ab10b..45b3a371e92 100644 --- a/tests/common/plugins/conditional_mark/tests_mark_conditions_drop_packets.yaml +++ b/tests/common/plugins/conditional_mark/tests_mark_conditions_drop_packets.yaml @@ -5,27 +5,32 @@ #Hence, it is not dropped by default in Cisco-8000. For dropping link local address, it should be done through security/DATA ACL drop_packets/test_configurable_drop_counters.py::test_dip_link_local: skip: - reason: "MGFX topos doesn't support drop packets / Cisco 8000 platform and some mlx platforms does not drop DIP link local packets" + reason: "MGFX topos doesn't support drop packets / Cisco 8000 platform and some mlx platforms does not drop DIP link local packets / KVM do not support drop reason in testcase." conditions_logical_operator: or conditions: - "'Mellanox' in hwsku" - asic_type=='cisco-8000' - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" drop_packets/test_configurable_drop_counters.py::test_neighbor_link_down: skip: - reason: "This test case requires a T0 topology because it is mocking a server within VLAN." + reason: "This test case requires a T0 topology because it is mocking a server within VLAN. / KVM do not support drop reason in testcase." + conditions_logical_operator: or conditions: - "topo_type not in ['t0']" + - "asic_type in ['vs']" drop_packets/test_configurable_drop_counters.py::test_sip_link_local: skip: - reason: "MGFX topos doesn't support drop packets / Cisco 8000 platform and some MLX platforms does not drop SIP link local packets" + reason: "MGFX topos doesn't support drop packets / Cisco 8000 platform and some MLX platforms does not drop SIP link local packets / KVM do not support drop reason in testcase." conditions_logical_operator: or conditions: - asic_type=="cisco-8000" - "'Mellanox' in hwsku" - "topo_type in ['m0', 'mx']" + - "asic_type in ['vs']" + ####################################### ##### test_drop_counters.py ##### ####################################### diff --git a/tests/common/plugins/conditional_mark/tests_mark_conditions_platform_tests.yaml b/tests/common/plugins/conditional_mark/tests_mark_conditions_platform_tests.yaml index 87b35da50b4..b66b7c49fd1 100644 --- a/tests/common/plugins/conditional_mark/tests_mark_conditions_platform_tests.yaml +++ b/tests/common/plugins/conditional_mark/tests_mark_conditions_platform_tests.yaml @@ -4,8 +4,10 @@ platform_tests/api: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - "is_multi_asic==True and release in ['201911']" + - "asic_type in ['vs']" ####################################### ##### api/test_chassis.py ##### @@ -13,26 +15,34 @@ platform_tests/api: platform_tests/api/test_chassis.py::TestChassisApi::test_components: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_fan_drawers: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_my_slot: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_presence: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_revision: xfail: @@ -41,25 +51,38 @@ platform_tests/api/test_chassis.py::TestChassisApi::test_get_revision: conditions: - "hwsku in ['Celestica-DX010-C32'] and https://github.com/sonic-net/sonic-mgmt/issues/6512" - "platform in ['x86_64-cel_e1031-r0'] and https://github.com/sonic-net/sonic-buildimage/issues/18229" + skip: + reason: "Unsupported platform API" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_status: # Skip unsupported API test on Mellanox platform skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_supervisor_slot: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_thermal_manager: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - "'sw_to3200k' in hwsku" + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog: skip: @@ -68,12 +91,17 @@ platform_tests/api/test_chassis.py::TestChassisApi::test_get_watchdog: conditions: - "asic_type in ['barefoot'] and hwsku in ['newport']" - "'sw_to3200k' in hwsku" + - "'Force10-S6000' in hwsku" + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis.py::TestChassisApi::test_status_led: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -89,6 +117,12 @@ platform_tests/api/test_chassis_fans.py::TestChassisFans::test_get_direction: conditions: - "hwsku in ['Celestica-DX010-C32']" - https://github.com/sonic-net/sonic-mgmt/issues/6512 + skip: + reason: "Unsupported platform API" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis_fans.py::TestChassisFans::test_get_fans_target_speed: xfail: @@ -96,26 +130,38 @@ platform_tests/api/test_chassis_fans.py::TestChassisFans::test_get_fans_target_s conditions: - "hwsku in ['Celestica-DX010-C32']" - https://github.com/sonic-net/sonic-mgmt/issues/6512 + skip: + reason: "Unsupported platform API" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis_fans.py::TestChassisFans::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis_fans.py::TestChassisFans::test_get_serial: #Fan tray serial numbers cannot be retrieved through software in cisco platform #there is no fan tray idprom skip: reason: "Unsupported platform API in mellanox or retrieving fan tray serial number is not supported in Cisco 8000" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_chassis_fans.py::TestChassisFans::test_set_fans_led: skip: reason: "Unsupported platform API in mellanox or Cisco 8000 platform the leds belong to the fan_tray and are set through the fan_tray API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -125,8 +171,10 @@ platform_tests/api/test_chassis_fans.py::TestChassisFans::test_set_fans_led: platform_tests/api/test_chassis_fans.py::TestChassisFans::test_set_fans_speed: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -139,80 +187,106 @@ platform_tests/api/test_chassis_fans.py::TestChassisFans::test_set_fans_speed: platform_tests/api/test_component.py::TestComponentApi::test_get_available_firmware_version: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_description: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_firmware_update_notification: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_firmware_version: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_name: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_position_in_parent: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_presence: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_serial: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_get_status: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_install_firmware: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or ('sw_to3200k' in hwsku)" + - "asic_type in ['mellanox', 'vs'] or ('sw_to3200k' in hwsku)" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_is_replaceable: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_component.py::TestComponentApi::test_update_firmware: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### api/test_fan_drawer.py ##### @@ -220,8 +294,10 @@ platform_tests/api/test_component.py::TestComponentApi::test_update_firmware: platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_get_maximum_consumed_power: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -231,29 +307,36 @@ platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_get_maximum_consum platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_get_serial: #Fan tray serial numbers cannot be retrieved through software in cisco platform #there is no fan tray idprom skip: reason: "Retrieving fan tray serial number is not supported in Cisco 8000 and mellanox platform" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_get_status: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_set_fan_drawers_led: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or platform in ['armhf-nokia_ixs7215_52x-r0']" - + - "asic_type in ['mellanox', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### api/test_fan_drawer_fans.py ##### @@ -262,28 +345,36 @@ platform_tests/api/test_fan_drawer.py::TestFanDrawerApi::test_set_fan_drawers_le platform_tests/api/test_fan_drawer_fans.py::TestFanDrawerFans::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_fan_drawer_fans.py::TestFanDrawerFans::test_get_serial: #Fan tray serial numbers cannot be retrieved through software in cisco platform #there is no fan tray idprom skip: reason: "Retrieving fan tray serial number is not supported in Cisco 8000 and mellanox platform" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_fan_drawer_fans.py::TestFanDrawerFans::test_set_fans_led: skip: reason: "On Cisco 8000 and mellanox platform, fans do not have their own leds." + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_fan_drawer_fans.py::TestFanDrawerFans::test_set_fans_speed: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -296,8 +387,11 @@ platform_tests/api/test_fan_drawer_fans.py::TestFanDrawerFans::test_set_fans_spe platform_tests/api/test_module.py: skip: reason: "Only support T2" + conditions_logical_operator: or conditions: - "topo_type not in ['t2']" + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_module.py::TestModuleApi::test_get_system_eeprom_info: xfail: @@ -305,7 +399,12 @@ platform_tests/api/test_module.py::TestModuleApi::test_get_system_eeprom_info: conditions: - "hwsku in ['Celestica-DX010-C32']" - https://github.com/sonic-net/sonic-mgmt/issues/6512 - + skip: + reason: "Unsupported platform API" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_module.py::TestModuleApi::test_reboot: skip: @@ -313,8 +412,9 @@ platform_tests/api/test_module.py::TestModuleApi::test_reboot: / Only support T2" conditions_logical_operator: or conditions: - - "asic_type in ['cisco-8000']" + - "asic_type in ['cisco-8000', 'vs']" - "topo_type not in ['t2']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### api/test_psu.py ##### @@ -324,14 +424,17 @@ platform_tests/api/test_psu.py::TestPsuApi::test_fans: reason: "Unsupported platform API" conditions_logical_operator: "OR" conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" - "platform in ['x86_64-cel_e1031-r0'] and https://github.com/sonic-net/sonic-buildimage/issues/18229" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_get_revision: xfail: @@ -340,36 +443,53 @@ platform_tests/api/test_psu.py::TestPsuApi::test_get_revision: conditions: - "hwsku in ['Celestica-DX010-C32'] and https://github.com/sonic-net/sonic-mgmt/issues/6767" - "platform in ['x86_64-cel_e1031-r0'] and https://github.com/sonic-net/sonic-buildimage/issues/18229" + skip: + reason: "Unsupported platform API" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_get_serial: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_get_status: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_led: skip: reason: "On Cisco 8000, mellanox and Nokia 7215 platform, PSU led are unable to be controlled by software" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_power: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or (asic_type in ['barefoot'] and hwsku in ['newport']) or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'vs'] or (asic_type in ['barefoot'] and hwsku in ['newport']) or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu.py::TestPsuApi::test_temperature: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - "platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### api/test_psu_fans.py ##### @@ -377,8 +497,10 @@ platform_tests/api/test_psu.py::TestPsuApi::test_temperature: platform_tests/api/test_psu.py::test_temperature: skip: reason: "Test not supported on Mellanox Platforms." + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu_fans.py::TestPsuFans::test_get_error_description: xfail: @@ -386,30 +508,44 @@ platform_tests/api/test_psu_fans.py::TestPsuFans::test_get_error_description: conditions: - "hwsku in ['Celestica-DX010-C32']" - https://github.com/sonic-net/sonic-mgmt/issues/6518 + skip: + reason: "Unsupported platform API" + conditions_logical_operator: or + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu_fans.py::TestPsuFans::test_get_fans_target_speed: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu_fans.py::TestPsuFans::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu_fans.py::TestPsuFans::test_get_serial: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_psu_fans.py::TestPsuFans::test_set_fans_led: skip: reason: "On Cisco 8000 and mellanox platform, PSU led are unable to be controlled by software" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails on Celestica, raised issue to track" conditions: @@ -419,8 +555,10 @@ platform_tests/api/test_psu_fans.py::TestPsuFans::test_set_fans_led: platform_tests/api/test_psu_fans.py::TestPsuFans::test_set_fans_speed: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### api/test_sfp.py ##### @@ -428,8 +566,10 @@ platform_tests/api/test_psu_fans.py::TestPsuFans::test_set_fans_speed: platform_tests/api/test_sfp.py::TestSfpApi::test_get_error_description: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['nvidia-bluefield']" + - "asic_type in ['nvidia-bluefield', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Platform API 'get_error_description' not implemented" conditions: @@ -439,98 +579,130 @@ platform_tests/api/test_sfp.py::TestSfpApi::test_get_error_description: platform_tests/api/test_sfp.py::TestSfpApi::test_get_model: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_name: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'nvidia-bluefield']" + - "asic_type in ['mellanox', 'nvidia-bluefield', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_position_in_parent: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_reset_status: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'nvidia-bluefield']" + - "asic_type in ['mellanox', 'nvidia-bluefield', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_los: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or (asic_type in ['cisco-8000'] and release in ['202012'])" + - "asic_type in ['mellanox', 'vs'] or (asic_type in ['cisco-8000'] and release in ['202012'])" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_rx_power: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_serial: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_status: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_temperature: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_transceiver_threshold_info: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['cisco-8000'] and release in ['202012']" + - "asic_type in ['cisco-8000', 'vs'] and release in ['202012']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_bias: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_fault: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or (asic_type in ['cisco-8000'] and release in ['202012'])" + - "asic_type in ['mellanox', 'vs'] or (asic_type in ['cisco-8000'] and release in ['202012'])" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_tx_power: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_get_voltage: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_lpmode: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['nvidia-bluefield']" + - "asic_type in ['nvidia-bluefield', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_power_override: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'nvidia-bluefield'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'nvidia-bluefield', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_reset: skip: @@ -539,24 +711,32 @@ platform_tests/api/test_sfp.py::TestSfpApi::test_reset: conditions: - "'sw_to3200k' in hwsku or asic_type in ['nvidia-bluefield']" - "platform in ['x86_64-cel_e1031-r0']" + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_thermals: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_tx_disable: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_sfp.py::TestSfpApi::test_tx_disable_channel: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or (asic_type in ['barefoot'] and hwsku in ['newport']) or platform in ['armhf-nokia_ixs7215_52x-r0', 'x86_64-cel_e1031-r0']" + - "asic_type in ['mellanox', 'vs'] or (asic_type in ['barefoot'] and hwsku in ['newport']) or platform in ['armhf-nokia_ixs7215_52x-r0', 'x86_64-cel_e1031-r0']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### api/test_thermal.py ##### @@ -564,78 +744,102 @@ platform_tests/api/test_sfp.py::TestSfpApi::test_tx_disable_channel: platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_critical_threshold: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "asic_type in ['mellanox', 'vs'] or platform in ['armhf-nokia_ixs7215_52x-r0']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_high_threshold: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_critical_threshold: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_low_threshold: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_maximum_recorded: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_minimum_recorded: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_model: # Hardware components that we use for our sensors does not have IDPROM to store model and serial number details. # Due to this Cisco currently does not expose serial and model number under sysfs path skip: reason: "test_get_model is not supported in cisco and mellanox platform" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_presence: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_serial: # Hardware components that we use for our sensors does not have IDPROM to store model and serial number details. # Due to this Cisco currently does not expose serial and model number under sysfs path skip: reason: "test_get_serial is not supported in cisco and mellanox platform" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox', 'cisco-8000']" + - "asic_type in ['mellanox', 'cisco-8000', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_status: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_get_temperature: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -645,8 +849,10 @@ platform_tests/api/test_thermal.py::TestThermalApi::test_set_high_threshold: platform_tests/api/test_thermal.py::TestThermalApi::test_set_low_threshold: skip: reason: "Unsupported platform API" + conditions_logical_operator: or conditions: - - "asic_type in ['mellanox']" + - "asic_type in ['mellanox', 'vs']" + - "is_multi_asic==True and release in ['201911']" xfail: reason: "Testcase consistently fails, raised issue to track" conditions: @@ -662,7 +868,9 @@ platform_tests/api/test_watchdog.py: conditions_logical_operator: or conditions: - "asic_type in ['barefoot'] and hwsku in ['newport', 'montara'] or ('sw_to3200k' in hwsku)" - - "platform in ['x86_64-nokia_ixr7250e_sup-r0', 'x86_64-nokia_ixr7250e_36x400g-r0']" + - "platform in ['x86_64-nokia_ixr7250e_sup-r0', 'x86_64-nokia_ixr7250e_36x400g-r0', 'x86_64-dell_s6000_s1220-r0']" + - "asic_type in ['vs']" + - "is_multi_asic==True and release in ['201911']" ####################################### ##### broadcom ##### @@ -738,18 +946,28 @@ platform_tests/counterpoll/test_counterpoll_watermark.py::test_counterpoll_queue ####################################### ##### daemon ##### ####################################### +platform_tests/daemon: + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" + platform_tests/daemon/test_chassisd.py: skip: - reason: "chassisd platform daemon introduced in 202106" + reason: "chassisd platform daemon introduced in 202106 / Temporarily skip in PR testing" + conditions_logical_operator: or conditions: - "release in ['201811', '201911', '202012']" + - "asic_type in ['vs']" platform_tests/daemon/test_ledd.py::test_pmon_ledd_kill_and_start_status: skip: - reason: "LEDD daemon auto restart not included in 201911" + reason: "LEDD daemon auto restart not included in 201911 / Temporarily skip in PR testing" + conditions_logical_operator: or conditions: - "release in ['201911']" + - "asic_type in ['vs']" ####################################### ##### fwutil/test_fwutil.py ##### @@ -839,6 +1057,15 @@ platform_tests/test_cont_warm_reboot.py: conditions: - "'dualtor' in topo_name" +####################################### +##### test_intf_fec.py ##### +####################################### +platform_tests/test_intf_fec.py: + skip: + reason: "Temporarily skip in PR testing" + conditions: + - "asic_type in ['vs']" + ####################################### #### test_kdump.py ##### ####################################### @@ -994,7 +1221,7 @@ platform_tests/test_reload_config.py::test_reload_configuration_checks: conditions: - "asic_type in ['barefoot'] and hwsku in ['newport']" - "https://github.com/sonic-net/sonic-buildimage/issues/19879 and asic_type in ['vs']" - - "asic_type in ['cisco-8000'] and release in ['202205', '202211', '202305']" + - "asic_type in ['cisco-8000'] and release in ['202205', '202211', '202305', '202405']" ####################################### ###### test_secure_upgrade.py ####### diff --git a/tests/common/plugins/conditional_mark/tests_mark_conditions_skip_traffic_test.yaml b/tests/common/plugins/conditional_mark/tests_mark_conditions_skip_traffic_test.yaml index c9e35f27883..12cccb05cd6 100644 --- a/tests/common/plugins/conditional_mark/tests_mark_conditions_skip_traffic_test.yaml +++ b/tests/common/plugins/conditional_mark/tests_mark_conditions_skip_traffic_test.yaml @@ -279,6 +279,22 @@ ipfwd/test_dir_bcast.py: conditions: - "asic_type in ['vs']" +ipfwd/test_nhop_group.py: + skip_traffic_test: + reason: "Skip traffic test for KVM testbed" + conditions: + - "asic_type in ['vs']" + +####################################### +##### route ##### +####################################### +route/test_route_perf.py: + skip_traffic_test: + reason: "Skip traffic test for KVM testbed" + conditions: + - "asic_type in ['vs']" + - "is_multi_asic==True" + ####################################### ##### span ##### ####################################### diff --git a/tests/common/plugins/loganalyzer/__init__.py b/tests/common/plugins/loganalyzer/__init__.py index 5723cc5dea5..9a6f38a4d82 100644 --- a/tests/common/plugins/loganalyzer/__init__.py +++ b/tests/common/plugins/loganalyzer/__init__.py @@ -53,7 +53,7 @@ def log_rotate_modular_chassis(duthosts, request): if request.config.getoption("--disable_loganalyzer") or "disable_loganalyzer" in request.keywords: return - is_modular_chassis = duthosts[0].get_facts().get("modular_chassis") + is_modular_chassis = duthosts[0].get_facts().get("modular_chassis") if duthosts else False if not is_modular_chassis: return @@ -73,7 +73,7 @@ def loganalyzer(duthosts, request, log_rotate_modular_chassis): store_la_logs = request.config.getoption("--store_la_logs") analyzers = {} should_rotate_log = request.config.getoption("--loganalyzer_rotate_logs") - is_modular_chassis = duthosts[0].get_facts().get("modular_chassis") + is_modular_chassis = duthosts[0].get_facts().get("modular_chassis") if duthosts else False # We make sure only run logrotate as "function" scope for non-modular chassis for optimisation purpose. # For modular chassis please refer to "log_rotate_modular_chassis" fixture diff --git a/tests/common/plugins/ptfadapter/__init__.py b/tests/common/plugins/ptfadapter/__init__.py index d87c5fbf222..5c0f618e339 100644 --- a/tests/common/plugins/ptfadapter/__init__.py +++ b/tests/common/plugins/ptfadapter/__init__.py @@ -14,6 +14,7 @@ DEFAULT_DEVICE_NUM = 0 ETH_PFX = 'eth' ETHERNET_PFX = "Ethernet" +BACKPLANE = 'backplane' MAX_RETRY_TIME = 3 @@ -65,7 +66,7 @@ def get_ifaces(netdev_output): iface = line.split(':')[0].strip() # Skip not FP interfaces - if ETH_PFX not in iface and ETHERNET_PFX not in iface: + if ETH_PFX not in iface and ETHERNET_PFX not in iface and BACKPLANE != iface: continue ifaces.append(iface) @@ -77,14 +78,25 @@ def get_ifaces_map(ifaces, ptf_port_mapping_mode): """Get interface map.""" sub_ifaces = [] iface_map = {} + used_index = set() + backplane_exist = False for iface in ifaces: iface_suffix = iface.lstrip(ETH_PFX) if "." in iface_suffix: iface_index = int(iface_suffix.split(".")[0]) sub_ifaces.append((iface_index, iface)) + elif iface == BACKPLANE: + backplane_exist = True else: iface_index = int(iface_suffix) iface_map[iface_index] = iface + used_index.add(iface_index) + + count = 1 + while count in used_index: + count = count + 1 + if backplane_exist: + iface_map[count] = "backplane" if ptf_port_mapping_mode == "use_sub_interface": # override those interfaces that has sub interface @@ -148,6 +160,14 @@ def start_ptf_nn_agent(): ptf_nn_agent_port = start_ptf_nn_agent() assert ptf_nn_agent_port is not None + def check_if_use_minigraph_from_tbinfo(tbinfo): + if 'properties' in tbinfo['topo'] and "init_cfg_profile" in tbinfo['topo']['properties']: + # + # Since init_cfg_profile is used, this topology would not use minigraph + # + return False + return True + with PtfTestAdapter(tbinfo['ptf_ip'], ptf_nn_agent_port, 0, list(ifaces_map.keys()), ptfhost) as adapter: if not request.config.option.keep_payload: override_ptf_functions() @@ -155,7 +175,8 @@ def start_ptf_nn_agent(): adapter.payload_pattern = node_id + " " adapter.duthost = duthost - adapter.mg_facts = duthost.get_extended_minigraph_facts(tbinfo) + if check_if_use_minigraph_from_tbinfo(tbinfo): + adapter.mg_facts = duthost.get_extended_minigraph_facts(tbinfo) yield adapter diff --git a/tests/common/port_toggle.py b/tests/common/port_toggle.py index 890288394b7..d387c7229d4 100644 --- a/tests/common/port_toggle.py +++ b/tests/common/port_toggle.py @@ -121,14 +121,16 @@ def default_port_toggle_wait_time(duthost, port_count): port_down_wait_time, port_up_wait_time = 120, 180 asic_type = duthost.facts["asic_type"] - if asic_type == "mellanox": + is_modular_chassis = duthost.get_facts().get("modular_chassis") + + if (asic_type == "mellanox") or (asic_type == "broadcom" and not is_modular_chassis): if port_count <= BASE_PORT_COUNT: port_count = BASE_PORT_COUNT port_count_factor = port_count / BASE_PORT_COUNT port_down_wait_time = int(port_down_wait_time * port_count_factor) port_up_wait_time = int(port_up_wait_time * port_count_factor) - elif duthost.get_facts().get("modular_chassis"): + elif is_modular_chassis: port_down_wait_time = 300 port_up_wait_time = 300 diff --git a/tests/common/reboot.py b/tests/common/reboot.py index 904f22c6c08..e9d9e6ef686 100644 --- a/tests/common/reboot.py +++ b/tests/common/reboot.py @@ -11,7 +11,9 @@ from .platform.interface_utils import check_interface_status_of_up_ports from .platform.processes_utils import wait_critical_processes from .utilities import wait_until, get_plt_reboot_ctrl -from tests.common.helpers.dut_utils import ignore_t2_syslog_msgs +from tests.common.helpers.dut_utils import ignore_t2_syslog_msgs, create_duthost_console, creds_on_dut +from tests.common.fixtures.conn_graph_facts import get_graph_facts + logger = logging.getLogger(__name__) @@ -66,6 +68,7 @@ "command": "fast-reboot", "timeout": 180, "wait": 120, + "warmboot_finalizer_timeout": 180, "cause": "fast-reboot", "test_reboot_cause_only": False }, @@ -116,7 +119,7 @@ "timeout": 300, "wait": 120, # When linecards are rebooted due to supervisor cold reboot - "cause": r"^Reboot from Supervisor$|^reboot from Supervisor$", + "cause": r"Reboot from Supervisor|reboot from Supervisor", "test_reboot_cause_only": False }, REBOOT_TYPE_SUPERVISOR_HEARTBEAT_LOSS: { @@ -188,7 +191,8 @@ def wait_for_startup(duthost, localhost, delay, timeout): timeout=timeout, module_ignore_errors=True) if res.is_failed or ('msg' in res and 'Timeout' in res['msg']): - raise Exception('DUT {} did not startup'.format(hostname)) + collect_mgmt_config_by_console(duthost, localhost) + raise Exception(f'DUT {hostname} did not startup. res: {res}') logger.info('ssh has started up on {}'.format(hostname)) @@ -265,7 +269,10 @@ def reboot(duthost, localhost, reboot_type='cold', delay=10, # Create a temporary file in tmpfs before reboot logger.info('DUT {} create a file /dev/shm/test_reboot before rebooting'.format(hostname)) duthost.command('sudo touch /dev/shm/test_reboot') - + wait_conlsole_connection = 5 + console_thread_res = pool.apply_async( + collect_console_log, args=(duthost, localhost, timeout + wait_conlsole_connection)) + time.sleep(wait_conlsole_connection) reboot_res, dut_datetime = perform_reboot(duthost, pool, reboot_command, reboot_helper, reboot_kwargs, reboot_type) wait_for_shutdown(duthost, localhost, delay, timeout, reboot_res) @@ -276,7 +283,12 @@ def reboot(duthost, localhost, reboot_type='cold', delay=10, # if wait_for_ssh flag is False, do not wait for dut to boot up if not wait_for_ssh: return - wait_for_startup(duthost, localhost, delay, timeout) + try: + wait_for_startup(duthost, localhost, delay, timeout) + except Exception as err: + logger.error('collecting console log thread result: {} on {}'.format(console_thread_res.get(), hostname)) + pool.terminate() + raise Exception(f"dut not start: {err}") logger.info('waiting for switch {} to initialize'.format(hostname)) if safe_reboot: @@ -295,7 +307,7 @@ def reboot(duthost, localhost, reboot_type='cold', delay=10, time.sleep(wait) # Wait warmboot-finalizer service - if reboot_type == REBOOT_TYPE_WARM and wait_warmboot_finalizer: + if (reboot_type == REBOOT_TYPE_WARM or reboot_type == REBOOT_TYPE_FAST) and wait_warmboot_finalizer: logger.info('waiting for warmboot-finalizer service to finish on {}'.format(hostname)) ret = wait_until(warmboot_finalizer_timeout, 5, 0, check_warmboot_finalizer_inactive, duthost) if not ret: @@ -515,3 +527,44 @@ def check_determine_reboot_cause_service(dut): assert active_state == "active", f"Service 'determine-reboot-cause' is not active. Current state: {active_state}" assert sub_state == "exited", f"Service 'determine-reboot-cause' did not exit cleanly. \ Current sub-state: {sub_state}" + + +def try_create_dut_console(duthost, localhost, conn_graph_facts, creds): + try: + dut_sonsole = create_duthost_console(duthost, localhost, conn_graph_facts, creds) + except Exception as err: + logger.warning(f"Fail to create dut console. Please check console config or if console works ro not. {err}") + return None + logger.info("creating dut console succeeds") + return dut_sonsole + + +def collect_console_log(duthost, localhost, timeout): + logger.info("start: collect console log") + creds = creds_on_dut(duthost) + conn_graph_facts = get_graph_facts(duthost, localhost, [duthost.hostname]) + dut_console = try_create_dut_console(duthost, localhost, conn_graph_facts, creds) + if dut_console: + logger.info(f"sleep {timeout} to collect console log....") + time.sleep(timeout) + dut_console.disconnect() + logger.info('end: collect console log') + else: + logger.warning("dut console is not ready, we cannot get log by console") + + +def collect_mgmt_config_by_console(duthost, localhost): + logger.info("check if dut is pingable") + localhost.shell(f"ping -c 5 {duthost.mgmt_ip}", module_ignore_errors=True) + + logger.info("Start: collect mgmt config by console") + creds = creds_on_dut(duthost) + conn_graph_facts = get_graph_facts(duthost, localhost, [duthost.hostname]) + dut_console = try_create_dut_console(duthost, localhost, conn_graph_facts, creds) + if dut_console: + dut_console.send_command("ip a s eth0") + dut_console.send_command("show ip int") + dut_console.disconnect() + logger.info('End: collect mgmt config by console ...') + else: + logger.warning("dut console is not ready, we can get mgmt config by console") diff --git a/tests/snappi_tests/pfc/files/cisco_pfc_packet.py b/tests/common/snappi_tests/cisco_pfc_packet.py similarity index 100% rename from tests/snappi_tests/pfc/files/cisco_pfc_packet.py rename to tests/common/snappi_tests/cisco_pfc_packet.py diff --git a/tests/common/snappi_tests/common_helpers.py b/tests/common/snappi_tests/common_helpers.py index 5521b6c2c97..55ce452b6df 100644 --- a/tests/common/snappi_tests/common_helpers.py +++ b/tests/common/snappi_tests/common_helpers.py @@ -438,7 +438,7 @@ def get_wred_profiles(host_ans, asic_value=None): return None -def config_wred(host_ans, kmin, kmax, pmax, profile=None, asic_value=None): +def config_wred(host_ans, kmin, kmax, pmax, kdrop=None, profile=None, asic_value=None): """ Config a WRED/ECN profile of a SONiC switch Args: @@ -456,10 +456,11 @@ def config_wred(host_ans, kmin, kmax, pmax, profile=None, asic_value=None): asic_type = str(host_ans.facts["asic_type"]) if not isinstance(kmin, int) or \ not isinstance(kmax, int) or \ - not isinstance(pmax, int): + not isinstance(pmax, int) or \ + (kdrop is not None and not isinstance(kdrop, int)): return False - if kmin < 0 or kmax < 0 or pmax < 0 or pmax > 100 or kmin > kmax: + if kmin < 0 or kmax < 0 or pmax < 0 or pmax > 100 or kmin > kmax or (kdrop and (kdrop < 0 or kdrop > 100)): return False profiles = get_wred_profiles(host_ans, asic_value) """ Cannot find any WRED/ECN profiles """ @@ -472,20 +473,22 @@ def config_wred(host_ans, kmin, kmax, pmax, profile=None, asic_value=None): color = 'green' - # Broadcom ASIC only supports RED. - if asic_type == 'broadcom': + # Broadcom DNX ASIC only supports RED. + if "platform_asic" in host_ans.facts and host_ans.facts["platform_asic"] == "broadcom-dnx": color = 'red' - kmax_arg = '-{}max' % color[0] - kmin_arg = '-{}min' % color[0] + kmax_arg = '-{}max'.format(color[0]) + kmin_arg = '-{}min'.format(color[0]) + kdrop_arg = '-{}drop'.format(color[0]) for p in profiles: """ This is not the profile to configure """ if profile is not None and profile != p: continue - kmin_old = int(profiles[p]['{}_min_threshold' % color]) - kmax_old = int(profiles[p]['{}_max_threshold' % color]) + kmin_old = int(profiles[p]['{}_min_threshold'.format(color)]) + kmax_old = int(profiles[p]['{}_max_threshold'.format(color)]) + kdrop_old = int(profiles[p]['{}_drop_probability'.format(color)]) if kmin_old > kmax_old: return False @@ -494,10 +497,12 @@ def config_wred(host_ans, kmin, kmax, pmax, profile=None, asic_value=None): kmax_cmd = ' '.join(['sudo ecnconfig -p {}', kmax_arg, '{}']) kmin_cmd = ' '.join(['sudo ecnconfig -p {}', kmin_arg, '{}']) + kdrop_cmd = ' '.join(['sudo ecnconfig -p {}', kdrop_arg, '{}']) if asic_value is not None: kmax_cmd = ' '.join(['sudo ip netns exec', asic_value, 'ecnconfig -p {}', kmax_arg, '{}']) kmin_cmd = ' '.join(['sudo ip netns exec', asic_value, 'ecnconfig -p {}', kmin_arg, '{}']) + kdrop_cmd = ' '.join(['sudo ip netns exec', asic_value, 'ecnconfig -p {}', kdrop_arg, '{}']) if asic_type == 'broadcom': disable_packet_aging(host_ans, asic_value) @@ -508,6 +513,9 @@ def config_wred(host_ans, kmin, kmax, pmax, profile=None, asic_value=None): host_ans.shell(kmin_cmd.format(p, kmin)) host_ans.shell(kmax_cmd.format(p, kmax)) + if kdrop and kdrop != kdrop_old: + host_ans.shell(kdrop_cmd.format(p, kdrop)) + return True @@ -935,7 +943,9 @@ def get_port_stats(duthost, port, stat): int: port stats """ raw_out = duthost.shell("portstat -ji {}".format(port))['stdout'] - raw_out_stripped = re.sub(r'^.*?\n', '', raw_out, count=1) + # matches all characters until the first line that starts with { + # leaving the JSON intact + raw_out_stripped = re.sub(r'^(?:(?!{).)*\n', '', raw_out, count=1) raw_json = json.loads(raw_out_stripped) port_stats = raw_json[port].get(stat) @@ -988,8 +998,8 @@ def get_egress_queue_count(duthost, port, priority): # If DUT is multi-asic, asic will be used. if duthost.is_multi_asic: asic = duthost.get_port_asic_instance(port).get_asic_namespace() - raw_out = duthost.shell("sudo ip netns exec {} show queue counters {} | sed -n '/UC{}/p'". - format(asic, port, priority))['stdout'] + raw_out = duthost.shell("show queue counters {} -n {} | sed -n '/UC{}/p'". + format(port, asic, priority))['stdout'] total_pkts = "0" if raw_out.split()[2] == "N/A" else raw_out.split()[2] total_bytes = "0" if raw_out.split()[3] == "N/A" else raw_out.split()[3] else: @@ -1137,6 +1147,9 @@ def get_interface_stats(duthost, port): n_out = parse_portstat(duthost.command('portstat -i {}'.format(port))['stdout_lines'])[port] i_stats[duthost.hostname][port] = n_out + for k in ['rx_ok', 'rx_err', 'rx_drp', 'rx_ovr', 'tx_ok', 'tx_err', 'tx_drp', 'tx_ovr']: + i_stats[duthost.hostname][port][k] = int("".join(i_stats[duthost.hostname][port][k].split(','))) + # rx_err, rx_ovr and rx_drp are counted in single counter rx_fail # tx_err, tx_ovr and tx_drp are counted in single counter tx_fail rx_err = ['rx_err', 'rx_ovr', 'rx_drp'] @@ -1144,9 +1157,9 @@ def get_interface_stats(duthost, port): rx_fail = 0 tx_fail = 0 for m in rx_err: - rx_fail = rx_fail + int(n_out[m].replace(',', '')) + rx_fail = rx_fail + n_out[m] for m in tx_err: - tx_fail = tx_fail + int(n_out[m].replace(',', '')) + tx_fail = tx_fail + n_out[m] # Any throughput below 1MBps is measured as 0 for simplicity. thrput = n_out['rx_bps'] @@ -1160,8 +1173,8 @@ def get_interface_stats(duthost, port): else: i_stats[duthost.hostname][port]['rx_thrput_Mbps'] = 0 - i_stats[duthost.hostname][port]['rx_pkts'] = int(n_out['rx_ok'].replace(',', '')) - i_stats[duthost.hostname][port]['tx_pkts'] = int(n_out['tx_ok'].replace(',', '')) + i_stats[duthost.hostname][port]['rx_pkts'] = n_out['rx_ok'] + i_stats[duthost.hostname][port]['tx_pkts'] = n_out['tx_ok'] i_stats[duthost.hostname][port]['rx_fail'] = rx_fail i_stats[duthost.hostname][port]['tx_fail'] = tx_fail diff --git a/tests/common/snappi_tests/multi_dut_params.py b/tests/common/snappi_tests/multi_dut_params.py index 20f7bd5b90d..d0cb0f28265 100644 --- a/tests/common/snappi_tests/multi_dut_params.py +++ b/tests/common/snappi_tests/multi_dut_params.py @@ -16,5 +16,7 @@ def __init__(self): self.duthost1 = None self.duthost2 = None self.multi_dut_ports = None + self.hw_platform = None self.ingress_duthosts = [] self.egress_duthosts = [] + self.flap_details = None diff --git a/tests/common/snappi_tests/qos_fixtures.py b/tests/common/snappi_tests/qos_fixtures.py index b7aa795da02..a7500523c08 100644 --- a/tests/common/snappi_tests/qos_fixtures.py +++ b/tests/common/snappi_tests/qos_fixtures.py @@ -125,7 +125,8 @@ def get_pfcwd_config(duthost): all_configs = [] output = duthost.shell("ip netns | awk '{print $1}'")['stdout'] all_asic_list = output.split("\n") - all_asic_list.append(None) + all_asic_list.sort() + all_asic_list.insert(0, None) for space in all_asic_list: config = get_running_config(duthost, space) if "PFC_WD" in config.keys(): @@ -144,7 +145,8 @@ def reapply_pfcwd(duthost, pfcwd_config): elif type(pfcwd_config) is list: output = duthost.shell("ip netns | awk '{print $1}'")['stdout'] all_asic_list = output.split("\n") - all_asic_list.append(None) + all_asic_list.sort() + all_asic_list.insert(0, None) all_files = [] for index, config in enumerate(pfcwd_config): diff --git a/tests/common/snappi_tests/read_pcap.py b/tests/common/snappi_tests/read_pcap.py index f0a522b9576..fd93b27a420 100644 --- a/tests/common/snappi_tests/read_pcap.py +++ b/tests/common/snappi_tests/read_pcap.py @@ -3,7 +3,7 @@ from dpkt.utils import mac_to_str from tests.common.snappi_tests.pfc_packet import PFCPacket -from tests.snappi_tests.pfc.files.cisco_pfc_packet import CiscoPFCPacket +from tests.common.snappi_tests.cisco_pfc_packet import CiscoPFCPacket logger = logging.getLogger(__name__) diff --git a/tests/common/snappi_tests/snappi_fixtures.py b/tests/common/snappi_tests/snappi_fixtures.py index 6b268b3e409..7a314dd9855 100755 --- a/tests/common/snappi_tests/snappi_fixtures.py +++ b/tests/common/snappi_tests/snappi_fixtures.py @@ -16,9 +16,8 @@ from tests.common.snappi_tests.snappi_helpers import SnappiFanoutManager, get_snappi_port_location from tests.common.snappi_tests.port import SnappiPortConfig, SnappiPortType from tests.common.helpers.assertions import pytest_assert -from tests.snappi_tests.variables import dut_ip_start, snappi_ip_start, prefix_length, \ - dut_ipv6_start, snappi_ipv6_start, v6_prefix_length, pfcQueueGroupSize, \ - pfcQueueValueDict # noqa: F401 +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict, dut_ip_start, snappi_ip_start, \ + prefix_length, dut_ipv6_start, snappi_ipv6_start, v6_prefix_length logger = logging.getLogger(__name__) @@ -552,6 +551,84 @@ def cvg_api(snappi_api_serv_ip, api.assistant.Session.remove() +def snappi_multi_base_config(duthost_list, + snappi_ports, + snappi_api, + setup=True): + """ + Generate snappi API config and port config information for the testbed + This function takes care of mixed-speed interfaces by removing assert and printing info log. + l1_config is added to both the snappi_ports instead of just one. + + Args: + duthost_list (pytest fixture): list of DUTs + snappi_ports: list of snappi ports + snappi_api(pytest fixture): Snappi API fixture + setup (bool): Indicates if functionality is called to create or clear the setup. + Returns: + - config (obj): Snappi API config of the testbed + - port_config_list (list): list of port configuration information + - snappi_ports (list): list of snappi_ports selected for the test. + """ + + """ Generate L1 config """ + + config = snappi_api.config() + tgen_ports = [port['location'] for port in snappi_ports] + + new_snappi_ports = [dict(list(sp.items()) + [('port_id', i)]) + for i, sp in enumerate(snappi_ports) if sp['location'] in tgen_ports] + + # Printing info level if ingress and egress interfaces are of different speeds. + if (len(set([sp['speed'] for sp in new_snappi_ports])) > 1): + logger.info('Rx and Tx ports have different link speeds') + [config.ports.port(name='Port {}'.format(sp['port_id']), location=sp['location']) for sp in new_snappi_ports] + + # Generating L1 config for both the snappi_ports. + for port in config.ports: + for index, snappi_port in enumerate(new_snappi_ports): + if snappi_port['location'] == port.location: + l1_config = config.layer1.layer1()[-1] + l1_config.name = 'L1 config {}'.format(index) + l1_config.port_names = [port.name] + l1_config.speed = 'speed_'+str(int(int(snappi_port['speed'])/1000))+'_gbps' + l1_config.ieee_media_defaults = False + l1_config.auto_negotiate = False + l1_config.auto_negotiation.link_training = False + l1_config.auto_negotiation.rs_fec = True + pfc = l1_config.flow_control.ieee_802_1qbb + pfc.pfc_delay = 0 + if pfcQueueGroupSize == 8: + pfc.pfc_class_0 = 0 + pfc.pfc_class_1 = 1 + pfc.pfc_class_2 = 2 + pfc.pfc_class_3 = 3 + pfc.pfc_class_4 = 4 + pfc.pfc_class_5 = 5 + pfc.pfc_class_6 = 6 + pfc.pfc_class_7 = 7 + elif pfcQueueGroupSize == 4: + pfc.pfc_class_0 = pfcQueueValueDict[0] + pfc.pfc_class_1 = pfcQueueValueDict[1] + pfc.pfc_class_2 = pfcQueueValueDict[2] + pfc.pfc_class_3 = pfcQueueValueDict[3] + pfc.pfc_class_4 = pfcQueueValueDict[4] + pfc.pfc_class_5 = pfcQueueValueDict[5] + pfc.pfc_class_6 = pfcQueueValueDict[6] + pfc.pfc_class_7 = pfcQueueValueDict[7] + else: + pytest_assert(False, 'pfcQueueGroupSize value is not 4 or 8') + + port_config_list = [] + + return (setup_dut_ports( + setup=setup, + duthost_list=duthost_list, + config=config, + port_config_list=port_config_list, + snappi_ports=new_snappi_ports)) + + def snappi_dut_base_config(duthost_list, snappi_ports, snappi_api, @@ -1117,7 +1194,7 @@ def get_snappi_ports_single_dut(duthosts, # noqa: F811 dut_hostname, dut_port = rand_one_dut_portname_oper_up.split('|') pytest_require(rand_one_dut_hostname == dut_hostname, - "Port is not mapped to the expected DUT") + "{} Port is not mapped to the expected DUT".format(rand_one_dut_portname_oper_up)) """ Generate L1 config """ snappi_fanout = get_peer_snappi_chassis(conn_data=conn_graph_facts, diff --git a/tests/common/snappi_tests/traffic_generation.py b/tests/common/snappi_tests/traffic_generation.py index 005f53c0a00..4a407ca9a79 100644 --- a/tests/common/snappi_tests/traffic_generation.py +++ b/tests/common/snappi_tests/traffic_generation.py @@ -4,6 +4,7 @@ import time import logging import random +import re from tests.common.helpers.assertions import pytest_assert from tests.common.snappi_tests.common_helpers import get_egress_queue_count, pfc_class_enable_vector, \ get_lossless_buffer_size, get_pg_dropped_packets, \ @@ -11,7 +12,7 @@ traffic_flow_mode from tests.common.snappi_tests.port import select_ports, select_tx_port from tests.common.snappi_tests.snappi_helpers import wait_for_arp, fetch_snappi_flow_metrics -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from .variables import pfcQueueGroupSize, pfcQueueValueDict from tests.common.cisco_data import is_cisco_device logger = logging.getLogger(__name__) @@ -114,6 +115,13 @@ def generate_test_flows(testbed_config, test_flow_name_dut_rx_port_map = {} test_flow_name_dut_tx_port_map = {} + # Check if flow_rate_percent is a dictionary + if isinstance(data_flow_config["flow_rate_percent"], (int, float)): + # Create a dictionary with priorities as keys and the flow rate percent as the value for each key + data_flow_config["flow_rate_percent"] = { + prio: data_flow_config["flow_rate_percent"] for prio in test_flow_prio_list + } + for prio in test_flow_prio_list: test_flow_name = "{} Prio {}".format(data_flow_config["flow_name"], prio) test_flow = testbed_config.flows.flow(name=test_flow_name)[-1] @@ -141,7 +149,7 @@ def generate_test_flows(testbed_config, ipv4.priority.dscp.ecn.CAPABLE_TRANSPORT_1) test_flow.size.fixed = data_flow_config["flow_pkt_size"] - test_flow.rate.percentage = data_flow_config["flow_rate_percent"] + test_flow.rate.percentage = data_flow_config["flow_rate_percent"][prio] if data_flow_config["flow_traffic_type"] == traffic_flow_mode.FIXED_DURATION: test_flow.duration.fixed_seconds.seconds = data_flow_config["flow_dur_sec"] test_flow.duration.fixed_seconds.delay.nanoseconds = int(sec_to_nanosec @@ -249,7 +257,10 @@ def generate_pause_flows(testbed_config, pause_time = [] for x in range(8): if x in pause_prio_list: - pause_time.append(int('ffff', 16)) + if "flow_quanta" in pause_flow_config: + pause_time.append(pause_flow_config["flow_quanta"]) + else: + pause_time.append(int('ffff', 16)) else: pause_time.append(int('0000', 16)) @@ -278,6 +289,10 @@ def generate_pause_flows(testbed_config, pause_flow.duration.fixed_seconds.seconds = pause_flow_config["flow_dur_sec"] elif pause_flow_config["flow_traffic_type"] == traffic_flow_mode.CONTINUOUS: pause_flow.duration.choice = pause_flow.duration.CONTINUOUS + elif pause_flow_config["flow_traffic_type"] == traffic_flow_mode.FIXED_PACKETS: + pause_flow.duration.fixed_packets.packets = pause_flow_config["flow_pkt_count"] + pause_flow.duration.fixed_packets.delay.nanoseconds = int(sec_to_nanosec + (pause_flow_config["flow_delay_sec"])) pause_flow.metrics.enable = True pause_flow.metrics.loss = True @@ -524,8 +539,19 @@ def verify_basic_test_flow(flow_metrics, pytest_assert(tx_frames == rx_frames, "{} should not have any dropped packet".format(metric.name)) - exp_test_flow_rx_pkts = data_flow_config["flow_rate_percent"] / 100.0 * speed_gbps \ + # Check if flow_rate_percent is a dictionary + if isinstance(data_flow_config["flow_rate_percent"], dict): + # Extract the priority number from metric.name + match = re.search(r'Prio (\d+)', metric.name) + prio = int(match.group(1)) if match else None + flow_rate_percent = data_flow_config["flow_rate_percent"].get(prio, 0) + else: + # Use the flow rate percent as is + flow_rate_percent = data_flow_config["flow_rate_percent"] + + exp_test_flow_rx_pkts = flow_rate_percent / 100.0 * speed_gbps \ * 1e9 * data_flow_config["flow_dur_sec"] / 8.0 / data_flow_config["flow_pkt_size"] + deviation = (rx_frames - exp_test_flow_rx_pkts) / float(exp_test_flow_rx_pkts) pytest_assert(abs(deviation) < tolerance, "{} should receive {} packets (actual {})". @@ -534,7 +560,8 @@ def verify_basic_test_flow(flow_metrics, snappi_extra_params.test_tx_frames = test_tx_frames -def verify_in_flight_buffer_pkts(duthost, +def verify_in_flight_buffer_pkts(egress_duthost, + ingress_duthost, flow_metrics, snappi_extra_params, asic_value=None): """ @@ -542,7 +569,8 @@ def verify_in_flight_buffer_pkts(duthost, for when test traffic is expected to be paused Args: - duthost (obj): DUT host object + egress_duthost (obj): DUT host object for egress. + ingress_duthost (obj): DUT host object for ingress. flow_metrics (list): per-flow statistics snappi_extra_params (SnappiTestParams obj): additional parameters for Snappi traffic Returns: @@ -551,7 +579,7 @@ def verify_in_flight_buffer_pkts(duthost, data_flow_config = snappi_extra_params.traffic_flow_config.data_flow_config tx_frames_total = sum(metric.frames_tx for metric in flow_metrics if data_flow_config["flow_name"] in metric.name) tx_bytes_total = tx_frames_total * data_flow_config["flow_pkt_size"] - dut_buffer_size = get_lossless_buffer_size(host_ans=duthost) + dut_buffer_size = get_lossless_buffer_size(host_ans=ingress_duthost) headroom_test_params = snappi_extra_params.headroom_test_params dut_port_config = snappi_extra_params.base_flow_config["dut_port_config"] pytest_assert(dut_port_config is not None, "Flow port config is not provided") @@ -570,7 +598,7 @@ def verify_in_flight_buffer_pkts(duthost, for peer_port, prios in dut_port_config[0].items(): for prio in prios: - dropped_packets = get_pg_dropped_packets(duthost, peer_port, prio, asic_value) + dropped_packets = get_pg_dropped_packets(egress_duthost, peer_port, prio, asic_value) pytest_assert(dropped_packets > 0, "Total TX dropped packets {} should be more than 0". format(dropped_packets)) @@ -581,7 +609,7 @@ def verify_in_flight_buffer_pkts(duthost, for peer_port, prios in dut_port_config[0].items(): for prio in prios: - dropped_packets = get_pg_dropped_packets(duthost, peer_port, prio, asic_value) + dropped_packets = get_pg_dropped_packets(egress_duthost, peer_port, prio, asic_value) pytest_assert(dropped_packets == 0, "Total TX dropped packets {} should be 0". format(dropped_packets)) diff --git a/tests/common/snappi_tests/variables.py b/tests/common/snappi_tests/variables.py new file mode 100644 index 00000000000..e1b821141bb --- /dev/null +++ b/tests/common/snappi_tests/variables.py @@ -0,0 +1,17 @@ +pfcQueueGroupSize = 8 # can have values 4 or 8 +pfcQueueValueDict = {0: 0, + 1: 1, + 2: 0, + 3: 3, + 4: 2, + 5: 0, + 6: 1, + 7: 0} + +dut_ip_start = '20.1.1.0' +snappi_ip_start = '20.1.1.1' +prefix_length = 31 + +dut_ipv6_start = '2000:1::1' +snappi_ipv6_start = '2000:1::2' +v6_prefix_length = 126 diff --git a/tests/common/system_utils/docker.py b/tests/common/system_utils/docker.py index e6beb2c4730..dc7fdf06a35 100644 --- a/tests/common/system_utils/docker.py +++ b/tests/common/system_utils/docker.py @@ -10,7 +10,7 @@ from tests.common.mellanox_data import is_mellanox_device from tests.common.errors import RunAnsibleModuleFail from tests.common.cisco_data import is_cisco_device -from tests.common.innovium_data import is_innovium_device +from tests.common.marvell_teralynx_data import is_marvell_teralynx_device from tests.common.helpers.constants import DEFAULT_NAMESPACE logger = logging.getLogger(__name__) @@ -244,7 +244,7 @@ def _get_vendor_id(duthost): vendor_id = "mlnx" elif is_cisco_device(duthost): vendor_id = "cisco" - elif is_innovium_device(duthost): + elif is_marvell_teralynx_device(duthost): vendor_id = "invm" else: error_message = '"{}" does not currently support swap_syncd'.format(duthost.facts["asic_type"]) diff --git a/tests/common/utilities.py b/tests/common/utilities.py index 8c8e2d70410..3c2575601f1 100644 --- a/tests/common/utilities.py +++ b/tests/common/utilities.py @@ -662,6 +662,11 @@ def prepareVxlanConfigData(duthost, ptfhost, tbinfo): ) dip = result['stdout'] logger.info('VxLan Sender {0}'.format(dip)) + if not dip: + result = duthost.shell(cmd='ip route show type unicast') + logger.error("VxLan Sender IP not found, the result of ip route show type unicast: {}".format(result['stdout'])) + assert False, "VxLan Sender IP not found" + vxlan_port_out = duthost.shell('redis-cli -n 0 hget "SWITCH_TABLE:switch" "vxlan_port"') if 'stdout' in vxlan_port_out and vxlan_port_out['stdout'].isdigit(): vxlan_port = int(vxlan_port_out['stdout']) @@ -1386,3 +1391,18 @@ def kill_process_by_pid(duthost, container_name, program_name, program_pid): logger.info("Program '{}' in container '{}' was stopped successfully" .format(program_name, container_name)) + + +def get_duts_from_host_pattern(host_pattern): + if ';' in host_pattern: + duts = host_pattern.replace('[', '').replace(']', '').split(';') + else: + duts = host_pattern.split(',') + return duts + + +def get_iface_ip(mg_facts, ifacename): + for loopback in mg_facts['minigraph_lo_interfaces']: + if loopback['name'] == ifacename and ipaddress.ip_address(loopback['addr']).version == 4: + return loopback['addr'] + return None diff --git a/tests/common/vs_data.py b/tests/common/vs_data.py new file mode 100644 index 00000000000..047173d2ce2 --- /dev/null +++ b/tests/common/vs_data.py @@ -0,0 +1,2 @@ +def is_vs_device(dut): + return dut.facts["asic_type"] == "vs" diff --git a/tests/common/vxlan_ecmp_utils.py b/tests/common/vxlan_ecmp_utils.py index 6aa8620ebdc..50d1f9be79d 100644 --- a/tests/common/vxlan_ecmp_utils.py +++ b/tests/common/vxlan_ecmp_utils.py @@ -546,29 +546,50 @@ def create_and_apply_config(self, self.apply_config_in_swss(duthost, str_config, op + "_vnet_route") @classmethod - def create_single_route(cls, vnet, dest, mask, nhs, op, bfd=False, profile=""): + def create_single_route(cls, vnet, dest, mask, nhs, op, bfd=False, profile="", adv_pfx="", adv_pfx_mask=""): ''' Create a single route entry for vnet, for the given dest, through the endpoints:nhs, op:SET/DEL ''' - if bfd: - config = '''{{ - "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ - "endpoint": "{}", - "endpoint_monitor": "{}", - "profile" : "{}" - }}, - "OP": "{}" - }}'''.format(vnet, dest, mask, ",".join(nhs), ",".join(nhs), profile, op) - + if adv_pfx != "" and adv_pfx_mask != "": + if bfd: + config = '''{{ + "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ + "endpoint": "{}", + "endpoint_monitor": "{}", + "profile" : "{}", + "adv_prefix" : "{}/{}" + }}, + "OP": "{}" + }}'''.format(vnet, dest, mask, ",".join(nhs), ",".join(nhs), profile, adv_pfx, adv_pfx_mask, op) + else: + config = '''{{ + "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ + "endpoint": "{}", + "profile" : "{}", + "adv_prefix" : "{}/{}" + }}, + "OP": "{}" + }}'''.format(vnet, dest, mask, ",".join(nhs), profile, adv_pfx, adv_pfx_mask, op) else: - config = '''{{ - "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ - "endpoint": "{}", - "profile" : "{}" - }}, - "OP": "{}" - }}'''.format(vnet, dest, mask, ",".join(nhs), profile, op) + if bfd: + config = '''{{ + "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ + "endpoint": "{}", + "endpoint_monitor": "{}", + "profile" : "{}" + }}, + "OP": "{}" + }}'''.format(vnet, dest, mask, ",".join(nhs), ",".join(nhs), profile, op) + + else: + config = '''{{ + "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ + "endpoint": "{}", + "profile" : "{}" + }}, + "OP": "{}" + }}'''.format(vnet, dest, mask, ",".join(nhs), profile, op) return config @@ -599,7 +620,9 @@ def set_routes_in_dut(self, op, bfd=False, mask="", - profile=""): + profile="", + adv_pfx="", + adv_pfx_mask=""): ''' Configure Vnet routes in the DUT. duthost : AnsibleHost structure for the DUT. @@ -621,7 +644,9 @@ def set_routes_in_dut(self, dest_to_nh_map[vnet][dest], op, bfd=bfd, - profile=profile)) + profile=profile, + adv_pfx=adv_pfx, + adv_pfx_mask=adv_pfx_mask)) full_config = '[' + "\n,".join(config_list) + '\n]' self.apply_config_in_swss(duthost, full_config, op+"_routes") @@ -891,7 +916,10 @@ def create_and_apply_priority_config(self, mask, nhs, primary, - op): + op, + profile="", + adv_pfx="", + adv_pfx_mask=""): ''' Create a single destinatoin->endpoint list mapping, and configure it in the DUT. @@ -904,26 +932,46 @@ def create_and_apply_priority_config(self, op : Operation to be done : SET or DEL. ''' - config = self.create_single_priority_route(vnet, dest, mask, nhs, primary, op) + config = self.create_single_priority_route(vnet, dest, mask, nhs, primary, op, profile, adv_pfx, adv_pfx_mask) str_config = '[\n' + config + '\n]' self.apply_config_in_swss(duthost, str_config, op + "_vnet_route") @classmethod - def create_single_priority_route(cls, vnet, dest, mask, nhs, primary, op): + def create_single_priority_route(cls, vnet, dest, mask, nhs, primary, op, profile="", adv_pfx="", adv_pfx_mask=""): ''' Create a single route entry for vnet, for the given dest, through the endpoints:nhs, op:SET/DEL ''' - config = '''{{ - "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ - "endpoint": "{}", - "endpoint_monitor": "{}", - "primary" : "{}", - "monitoring" : "custom", - "adv_prefix" : "{}/{}" - }}, - "OP": "{}" - }}'''.format(vnet, dest, mask, ",".join(nhs), ",".join(nhs), ",".join(primary), dest, mask, op) + if profile == "": + config = '''{{ + "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ + "endpoint": "{}", + "endpoint_monitor": "{}", + "primary" : "{}", + "monitoring" : "custom", + "adv_prefix" : "{}/{}" + }}, + "OP": "{}" + }}'''.format(vnet, dest, mask, ",".join(nhs), ",".join(nhs), ",".join(primary), + dest if adv_pfx == "" else adv_pfx, + mask if adv_pfx_mask == "" else adv_pfx_mask, + op) + else: + config = '''{{ + "VNET_ROUTE_TUNNEL_TABLE:{}:{}/{}": {{ + "endpoint": "{}", + "endpoint_monitor": "{}", + "primary" : "{}", + "monitoring" : "custom", + "adv_prefix" : "{}/{}", + "profile" : "{}" + }}, + "OP": "{}" + }}'''.format(vnet, dest, mask, ",".join(nhs), ",".join(nhs), ",".join(primary), + dest if adv_pfx == "" else adv_pfx, + mask if adv_pfx_mask == "" else adv_pfx_mask, + profile, + op) return config def set_vnet_monitor_state(self, duthost, dest, mask, nh, state): diff --git a/tests/configlet/test_add_rack.py b/tests/configlet/test_add_rack.py index a2b66d716af..32e568ee529 100644 --- a/tests/configlet/test_add_rack.py +++ b/tests/configlet/test_add_rack.py @@ -4,7 +4,7 @@ import sys from tests.common.utilities import skip_release from .util.base_test import do_test_add_rack, backup_minigraph, restore_orig_minigraph -from .util.helpers import log_info +from tests.common.configlet.helpers import log_info pytestmark = [ pytest.mark.topology("t1") diff --git a/tests/configlet/util/base_test.py b/tests/configlet/util/base_test.py index 60bc3024307..32f60172bbe 100644 --- a/tests/configlet/util/base_test.py +++ b/tests/configlet/util/base_test.py @@ -3,15 +3,16 @@ import json import os -from helpers import set_log_prefix_msg, get_prefix_lvl, set_prefix_lvl, append_log_prefix_msg,\ +from tests.configlet.util import strip +from tests.configlet.util import generic_patch +from tests.configlet.util import configlet +from tests.common.configlet.helpers import set_log_prefix_msg, get_prefix_lvl, set_prefix_lvl, append_log_prefix_msg,\ log_info, log_debug -from common import base_dir, data_dir, orig_db_dir, no_t0_db_dir, clet_db_dir, managed_files,\ - patch_add_t0_dir, patch_rm_t0_dir, files_dir, tor_data, init_data,\ +from tests.common.configlet.utils import base_dir, data_dir, orig_db_dir, no_t0_db_dir, clet_db_dir, managed_files,\ + patch_add_t0_dir, patch_rm_t0_dir, files_dir, tor_data, init_data, \ RELOAD_WAIT_TIME, PAUSE_INTF_DOWN, PAUSE_INTF_UP, PAUSE_CLET_APPLY, DB_COMP_WAIT_TIME,\ do_pause, db_comp, chk_bgp_session, chk_for_pfc_wd, report_error, take_DB_dumps, init_global_data -import strip -import configlet -import generic_patch + if os.path.exists("/etc/sonic/sonic-environment"): from mock_for_switch import config_reload, wait_until diff --git a/tests/configlet/util/configlet.py b/tests/configlet/util/configlet.py index b03b55cfd58..48348c17369 100755 --- a/tests/configlet/util/configlet.py +++ b/tests/configlet/util/configlet.py @@ -3,10 +3,10 @@ import json from tempfile import mkstemp -from helpers import log_info, log_debug -from common import tor_data, init_data, config_db_data_orig, managed_files # noqa F401 +from tests.common.configlet.helpers import log_info, log_debug +from tests.common.configlet.utils import tor_data, init_data, config_db_data_orig, managed_files # noqa F401 -import strip +from tests.configlet.util import strip orig_config = None diff --git a/tests/configlet/util/generic_patch.py b/tests/configlet/util/generic_patch.py index f734f1ff835..ce0833368fe 100644 --- a/tests/configlet/util/generic_patch.py +++ b/tests/configlet/util/generic_patch.py @@ -6,7 +6,7 @@ import os import re -from common import orig_db_dir, no_t0_db_dir, patch_add_t0_dir, patch_rm_t0_dir, tor_data,\ +from tests.common.configlet.utils import orig_db_dir, no_t0_db_dir, patch_add_t0_dir, patch_rm_t0_dir, tor_data,\ RELOAD_WAIT_TIME, PAUSE_INTF_DOWN, PAUSE_INTF_UP, PAUSE_CLET_APPLY, DB_COMP_WAIT_TIME,\ do_pause, db_comp, chk_bgp_session diff --git a/tests/configlet/util/mock_for_switch.py b/tests/configlet/util/mock_for_switch.py index df13b3b420a..7170a3162c9 100644 --- a/tests/configlet/util/mock_for_switch.py +++ b/tests/configlet/util/mock_for_switch.py @@ -11,7 +11,7 @@ import time import traceback -from helpers import log_error, log_info, log_debug +from tests.common.configlet.helpers import log_error, log_info, log_debug class DutHost: diff --git a/tests/configlet/util/run_test_in_switch.py b/tests/configlet/util/run_test_in_switch.py index fc88d0450d5..1c61da8b623 100644 --- a/tests/configlet/util/run_test_in_switch.py +++ b/tests/configlet/util/run_test_in_switch.py @@ -8,7 +8,7 @@ from mock_for_switch import get_duthost from base_test import do_test_add_rack, backup_minigraph, restore_orig_minigraph -from helpers import log_error, set_print +from tests.common.configlet.helpers import log_error, set_print # To run test in switch: # Copy all files in this dir (tests/configlet/util) into switch diff --git a/tests/configlet/util/strip.py b/tests/configlet/util/strip.py index 5a7eb139177..8ac435682b9 100755 --- a/tests/configlet/util/strip.py +++ b/tests/configlet/util/strip.py @@ -4,8 +4,8 @@ import sys import xml.etree.ElementTree as ET -from helpers import log_info, log_debug -from common import tor_data, config_db_data_orig, managed_files, report_error # noqa F401 +from tests.common.configlet.helpers import log_info, log_debug +from tests.common.configlet.utils import tor_data, config_db_data_orig, managed_files, report_error # noqa F401 from tempfile import mkstemp ns_val = "Microsoft.Search.Autopilot.Evolution" diff --git a/tests/conftest.py b/tests/conftest.py index b9ba2c76de9..0382f56874f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,16 +1,13 @@ import concurrent.futures import os -import glob import json import logging import getpass import random -import re from concurrent.futures import as_completed import pytest import yaml -import jinja2 import copy import time import subprocess @@ -18,11 +15,6 @@ from datetime import datetime from ipaddress import ip_interface, IPv4Interface -from tests.common.connections.base_console_conn import ( - CONSOLE_SSH_CISCO_CONFIG, - CONSOLE_SSH_DIGI_CONFIG, - CONSOLE_SSH_SONIC_CONFIG -) from tests.common.fixtures.conn_graph_facts import conn_graph_facts # noqa F401 from tests.common.devices.local import Localhost from tests.common.devices.ptf import PTFHost @@ -58,18 +50,17 @@ from tests.common.utilities import get_test_server_host from tests.common.utilities import str2bool from tests.common.utilities import safe_filename -from tests.common.utilities import get_dut_current_passwd -from tests.common.helpers.dut_utils import is_supervisor_node, is_frontend_node +from tests.common.utilities import get_duts_from_host_pattern +from tests.common.helpers.dut_utils import is_supervisor_node, is_frontend_node, create_duthost_console, creds_on_dut from tests.common.cache import FactsCache from tests.common.config_reload import config_reload -from tests.common.connections.console_host import ConsoleHost from tests.common.helpers.assertions import pytest_assert as pt_assert from tests.common.helpers.inventory_utils import trim_inventory from tests.common.utilities import InterruptableThread from tests.common.plugins.ptfadapter.dummy_testutils import DummyTestUtils try: - from tests.macsec import MacsecPluginT2, MacsecPluginT0 + from tests.common.macsec import MacsecPluginT2, MacsecPluginT0 except ImportError as e: logging.error(e) @@ -232,6 +223,11 @@ def pytest_addoption(parser): parser.addoption("--is_parallel_leader", action="store_true", default=False, help="Is the parallel leader") parser.addoption("--parallel_followers", action="store", default=0, type=int, help="Number of parallel followers") + ############################ + # SmartSwitch options # + ############################ + parser.addoption("--dpu-pattern", action="store", default="all", help="dpu host name") + def pytest_configure(config): if config.getoption("enable_macsec"): @@ -365,10 +361,9 @@ def parallel_run_context(request): ) -def get_specified_duts(request): +def get_specified_device_info(request, device_pattern): """ - Get a list of DUT hostnames specified with the --host-pattern CLI option - or -d if using `run_tests.sh` + Get a list of device hostnames specified with the --host-pattern or --dpu-pattern CLI option """ tbname, tbinfo = get_tbinfo(request) testbed_duts = tbinfo['duts'] @@ -376,14 +371,14 @@ def get_specified_duts(request): if is_parallel_run(request): return [get_target_hostname(request)] - host_pattern = request.config.getoption("--host-pattern") + host_pattern = request.config.getoption(device_pattern) if host_pattern == 'all': + if device_pattern == '--dpu-pattern': + testbed_duts = [dut for dut in testbed_duts if 'dpu' in dut] + logger.info(f"dpu duts: {testbed_duts}") return testbed_duts - - if ';' in host_pattern: - specified_duts = host_pattern.replace('[', '').replace(']', '').split(';') else: - specified_duts = host_pattern.split(',') + specified_duts = get_duts_from_host_pattern(host_pattern) if any([dut not in testbed_duts for dut in specified_duts]): pytest.fail("One of the specified DUTs {} does not belong to the testbed {}".format(specified_duts, tbname)) @@ -396,6 +391,21 @@ def get_specified_duts(request): return duts +def get_specified_duts(request): + """ + Get a list of DUT hostnames specified with the --host-pattern CLI option + or -d if using `run_tests.sh` + """ + return get_specified_device_info(request, "--host-pattern") + + +def get_specified_dpus(request): + """ + Get a list of DUT hostnames specified with the --dpu-pattern CLI option + """ + return get_specified_device_info(request, "--dpu-pattern") + + def pytest_sessionstart(session): # reset all the sonic_custom_msg keys from cache # reset here because this fixture will always be very first fixture to be called @@ -453,6 +463,48 @@ def duthost(duthosts, request): return duthost +@pytest.fixture(name="dpuhosts", scope="session") +def fixture_dpuhosts(enhance_inventory, ansible_adhoc, tbinfo, request): + """ + @summary: fixture to get DPU hosts defined in testbed. + @param ansible_adhoc: Fixture provided by the pytest-ansible package. + Source of the various device objects. It is + mandatory argument for the class constructors. + @param tbinfo: fixture provides information about testbed. + """ + # Before calling dpuhosts, we must enable NAT on NPU. + # E.g. run sonic-dpu-mgmt-traffic.sh on NPU to enable NAT + # sonic-dpu-mgmt-traffic.sh inbound -e --dpus all --ports 5021,5022,5023,5024 + try: + host = DutHosts(ansible_adhoc, tbinfo, request, get_specified_dpus(request), + target_hostname=get_target_hostname(request), is_parallel_leader=is_parallel_leader(request)) + return host + except BaseException as e: + logger.error("Failed to initialize dpuhosts.") + request.config.cache.set("dpuhosts_fixture_failed", True) + pt_assert(False, "!!!!!!!!!!!!!!!! dpuhosts fixture failed !!!!!!!!!!!!!!!!" + "Exception: {}".format(repr(e))) + + +@pytest.fixture(scope="session") +def dpuhost(dpuhosts, request): + ''' + @summary: Shortcut fixture for getting DPU host. For a lengthy test case, test case module can + pass a request to disable sh time out mechanis on dut in order to avoid ssh timeout. + After test case completes, the fixture will restore ssh timeout. + @param duthosts: fixture to get DPU hosts + @param request: request parameters for duphost test fixture + ''' + dpu_index = getattr(request.session, "dpu_index", 0) + assert dpu_index < len(dpuhosts), \ + "DPU index '{0}' is out of bound '{1}'".format(dpu_index, + len(dpuhosts)) + + duthost = dpuhosts[dpu_index] + + return duthost + + @pytest.fixture(scope="session") def mg_facts(duthost): return duthost.minigraph_facts(host=duthost.hostname)['ansible_facts'] @@ -493,6 +545,8 @@ def rand_one_dut_hostname(request): """ """ global rand_one_dut_hostname_var + if rand_one_dut_hostname_var is None: + set_rand_one_dut_hostname(request) return rand_one_dut_hostname_var @@ -507,6 +561,8 @@ def rand_selected_dut(duthosts, rand_one_dut_hostname): @pytest.fixture(scope="module") def selected_rand_dut(request): global rand_one_dut_hostname_var + if rand_one_dut_hostname_var is None: + set_rand_one_dut_hostname(request) return rand_one_dut_hostname_var @@ -761,6 +817,9 @@ def fanouthosts(enhance_inventory, ansible_adhoc, conn_graph_facts, creds, dutho elif os_type == 'eos': fanout_user = creds.get('fanout_network_user', None) fanout_password = creds.get('fanout_network_password', None) + elif os_type == 'onyx': + fanout_user = creds.get('fanout_mlnx_user', None) + fanout_password = creds.get('fanout_mlnx_password', None) elif os_type == 'ixia': # Skip for ixia device which has no fanout continue @@ -848,77 +907,6 @@ def pdu(): return pdu -def creds_on_dut(duthost): - """ read credential information according to the dut inventory """ - groups = duthost.host.options['inventory_manager'].get_host(duthost.hostname).get_vars()['group_names'] - groups.append("fanout") - logger.info("dut {} belongs to groups {}".format(duthost.hostname, groups)) - exclude_regex_patterns = [ - r'topo_.*\.yml', - r'breakout_speed\.yml', - r'lag_fanout_ports_test_vars\.yml', - r'qos\.yml', - r'sku-sensors-data\.yml', - r'mux_simulator_http_port_map\.yml' - ] - files = glob.glob("../ansible/group_vars/all/*.yml") - files += glob.glob("../ansible/vars/*.yml") - for group in groups: - files += glob.glob("../ansible/group_vars/{}/*.yml".format(group)) - filtered_files = [ - f for f in files if not re.search('|'.join(exclude_regex_patterns), f) - ] - - creds = {} - for f in filtered_files: - with open(f) as stream: - v = yaml.safe_load(stream) - if v is not None: - creds.update(v) - else: - logging.info("skip empty var file {}".format(f)) - - cred_vars = [ - "sonicadmin_user", - "sonicadmin_password", - "docker_registry_host", - "docker_registry_username", - "docker_registry_password", - "public_docker_registry_host" - ] - hostvars = duthost.host.options['variable_manager']._hostvars[duthost.hostname] - for cred_var in cred_vars: - if cred_var in creds: - creds[cred_var] = jinja2.Template(creds[cred_var]).render(**hostvars) - # load creds for console - if "console_login" not in list(hostvars.keys()): - console_login_creds = {} - else: - console_login_creds = hostvars["console_login"] - creds["console_user"] = {} - creds["console_password"] = {} - - creds["ansible_altpasswords"] = [] - - # If ansible_altpasswords is empty, add ansible_altpassword to it - if len(creds["ansible_altpasswords"]) == 0: - creds["ansible_altpasswords"].append(hostvars["ansible_altpassword"]) - - passwords = creds["ansible_altpasswords"] + [creds["sonicadmin_password"]] - creds['sonicadmin_password'] = get_dut_current_passwd( - duthost.mgmt_ip, - duthost.mgmt_ipv6, - creds['sonicadmin_user'], - passwords - ) - - for k, v in list(console_login_creds.items()): - creds["console_user"][k] = v["user"] - creds["console_password"][k] = v["passwd"] - - return creds - - @pytest.fixture(scope="session") def creds(duthost): return creds_on_dut(duthost) @@ -1546,7 +1534,7 @@ def generate_priority_lists(request, prio_scope, with_completeness_level=False): # if completeness_level in ["debug"], only select one item # if completeness_level in ["basic", "confident"], select 1 priority per DUT - if completeness_level in ["debug"]: + if completeness_level in ["debug"] and ret: ret = random.sample(ret, 1) elif completeness_level in ["basic", "confident"]: ret = [] @@ -1699,12 +1687,6 @@ def pytest_generate_tests(metafunc): # noqa E302 if dut_fixture_name and "selected_dut" in metafunc.fixturenames: metafunc.parametrize("selected_dut", duts_selected, scope="module", indirect=True) - # When rand_one_dut_hostname used and select a dut for test, initialize rand_one_dut_hostname_var - # rand_one_dut_hostname and rand_selected_dut will use this variable for setup test case - # selected_rand_dut will use this variable for setup TACACS - if "rand_one_dut_hostname" in metafunc.fixturenames: - set_rand_one_dut_hostname(metafunc) - if "enum_dut_portname" in metafunc.fixturenames: metafunc.parametrize("enum_dut_portname", generate_port_lists(metafunc, "all_ports")) @@ -1877,7 +1859,11 @@ def enum_rand_one_frontend_asic_index(request): @pytest.fixture(scope='module') def enum_upstream_dut_hostname(duthosts, tbinfo): - if tbinfo["topo"]["type"] == "t0": + if tbinfo["topo"]["type"] == "m0": + upstream_nbr_type = "M1" + elif tbinfo["topo"]["type"] == "mx": + upstream_nbr_type = "M0" + elif tbinfo["topo"]["type"] == "t0": upstream_nbr_type = "T1" elif tbinfo["topo"]["type"] == "t1": upstream_nbr_type = "T2" @@ -1898,118 +1884,12 @@ def enum_upstream_dut_hostname(duthosts, tbinfo): @pytest.fixture(scope="module") def duthost_console(duthosts, enum_supervisor_dut_hostname, localhost, conn_graph_facts, creds): # noqa F811 duthost = duthosts[enum_supervisor_dut_hostname] - dut_hostname = duthost.hostname - console_host = conn_graph_facts['device_console_info'][dut_hostname]['ManagementIp'] - if "/" in console_host: - console_host = console_host.split("/")[0] - console_port = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['peerport'] - console_type = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['type'] - console_menu_type = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['menu_type'] - console_username = conn_graph_facts['device_console_link'][dut_hostname]['ConsolePort']['proxy'] - - console_type = f"console_{console_type}" - console_menu_type = f"{console_type}_{console_menu_type}" - - # console password and sonic_password are lists, which may contain more than one password - sonicadmin_alt_password = localhost.host.options['variable_manager']._hostvars[dut_hostname].get( - "ansible_altpassword") - sonic_password = [creds['sonicadmin_password'], sonicadmin_alt_password] - - # Attempt to clear the console port - try: - duthost_clear_console_port( - menu_type=console_menu_type, - console_host=console_host, - console_port=console_port, - console_username=console_username, - console_password=creds['console_password'][console_type] - ) - except Exception as e: - logger.warning(f"Issue trying to clear console port: {e}") - - # Set up console host - host = None - for attempt in range(1, 4): - try: - host = ConsoleHost(console_type=console_type, - console_host=console_host, - console_port=console_port, - sonic_username=creds['sonicadmin_user'], - sonic_password=sonic_password, - console_username=console_username, - console_password=creds['console_password'][console_type]) - break - except Exception as e: - logger.warning(f"Attempt {attempt}/3 failed: {e}") - continue - else: - raise Exception("Failed to set up connection to console port. See warning logs for details.") + host = create_duthost_console(duthost, localhost, conn_graph_facts, creds) yield host host.disconnect() -def duthost_clear_console_port( - menu_type: str, - console_host: str, - console_port: str, - console_username: str, - console_password: str -): - """ - Helper function to clear the console port for a given DUT. - Useful when a device has an occupied console port, preventing dut_console tests from running. - - Parameters: - menu_type: Connection type for the console's config menu (as expected by the ConsoleTypeMapper) - console_host: DUT host's console IP address - console_port: DUT host's console port, to be cleared - console_username: Username for the console account (overridden for Digi console) - console_password: Password for the console account - """ - if menu_type == "console_ssh_": - raise Exception("Device does not have a defined Console_menu_type.") - - # Override console user if the configuration menu is Digi, as this requires admin login - console_user = 'admin' if menu_type == CONSOLE_SSH_DIGI_CONFIG else console_username - - duthost_config_menu = ConsoleHost( - console_type=menu_type, - console_host=console_host, - console_port=console_port, - console_username=console_user, - console_password=console_password, - sonic_username=None, - sonic_password=None - ) - - # Command lists for each config menu type - # List of tuples, containing a command to execute, and an optional pattern to wait for - command_list = { - CONSOLE_SSH_DIGI_CONFIG: [ - ('2', None), # Enter serial port config - (console_port, None), # Choose DUT console port - ('a', None), # Enter port management - ('1', f'Port #{console_port} has been reset successfully.') # Reset chosen port - ], - CONSOLE_SSH_SONIC_CONFIG: [ - (f'sudo sonic-clear line {console_port}', None) # Clear DUT console port (requires sudo) - ], - CONSOLE_SSH_CISCO_CONFIG: [ - (f'clear line tty {console_port}', '[confirm]'), # Clear DUT console port - ('', '[OK]') # Confirm selection - ], - } - - for command, wait_for_pattern in command_list[menu_type]: - duthost_config_menu.write_channel(command + duthost_config_menu.RETURN) - duthost_config_menu.read_until_prompt_or_pattern(wait_for_pattern) - - duthost_config_menu.disconnect() - logger.info(f"Successfully cleared console port {console_port}, sleeping for 5 seconds") - time.sleep(5) - - @pytest.fixture(scope='session') def cleanup_cache_for_session(request): """ @@ -2437,6 +2317,9 @@ def core_dump_and_config_check(duthosts, tbinfo, request, check_flag = True if hasattr(request.config.option, 'enable_macsec') and request.config.option.enable_macsec: check_flag = False + if hasattr(request.config.option, 'markexpr') and request.config.option.markexpr: + if "bsl" in request.config.option.markexpr: + check_flag = False for m in request.node.iter_markers(): if m.name == "skip_check_dut_health": check_flag = False diff --git a/tests/copp/conftest.py b/tests/copp/conftest.py index e514e983e56..bc7a2cac3c6 100644 --- a/tests/copp/conftest.py +++ b/tests/copp/conftest.py @@ -32,6 +32,22 @@ def pytest_addoption(parser): ) +@pytest.fixture(params=["4", "6"]) +def ip_versions(request): + """ + Parameterized fixture for IP versions. + """ + yield request.param + + +@pytest.fixture(params=["VlanSubnet", "VlanSubnetIPinIP"]) +def packet_type(request): + """ + Parameterized fixture for packet types used for neighbor miss tests + """ + yield request.param + + @pytest.fixture(autouse=True, scope="module") def is_backend_topology(duthosts, enum_rand_one_per_hwsku_frontend_hostname, tbinfo): """ diff --git a/tests/copp/copp_utils.py b/tests/copp/copp_utils.py index 0b44aa3bca2..3dad9acf8fb 100644 --- a/tests/copp/copp_utils.py +++ b/tests/copp/copp_utils.py @@ -7,6 +7,7 @@ import re import logging import json +import ipaddress from tests.common.config_reload import config_reload @@ -434,3 +435,42 @@ def install_trap(dut, feature_name): feature_name (str): feature name """ enable_feature_entry(dut, feature_name) + + +def get_vlan_ip(duthost, ip_version): + """ + @Summary: Get an IP on the Vlan subnet + @param duthost: Ansible host instance of the device + @return: Return a vlan IP, e.g., "192.168.0.2" + """ + + mg_facts = duthost.minigraph_facts( + host=duthost.hostname)['ansible_facts'] + mg_vlans = mg_facts['minigraph_vlans'] + + if not mg_vlans: + return None + + mg_vlan_intfs = mg_facts['minigraph_vlan_interfaces'] + + if ip_version == "4": + vlan_subnet = ipaddress.ip_network(mg_vlan_intfs[0]['subnet']) + else: + vlan_subnet = ipaddress.ip_network(mg_vlan_intfs[1]['subnet']) + + ip_addr = str(vlan_subnet[2]) + return ip_addr + + +def get_lo_ipv4(duthost): + + loopback_ip = None + mg_facts = duthost.minigraph_facts( + host=duthost.hostname)['ansible_facts'] + + for intf in mg_facts["minigraph_lo_interfaces"]: + if ipaddress.ip_address(intf["addr"]).version == 4: + loopback_ip = intf["addr"] + break + + return loopback_ip diff --git a/tests/copp/scripts/update_copp_config.py b/tests/copp/scripts/update_copp_config.py index 1322a2bce63..6336cfc9d52 100644 --- a/tests/copp/scripts/update_copp_config.py +++ b/tests/copp/scripts/update_copp_config.py @@ -64,7 +64,6 @@ def generate_limited_pps_config(pps_limit, input_config_file, output_config_file config_format (str): The format of the input COPP config file """ - DEFAULT_PPS_LIMIT = "300" with open(input_config_file) as input_stream: copp_config = json.load(input_stream) @@ -84,13 +83,9 @@ def generate_limited_pps_config(pps_limit, input_config_file, output_config_file # # Setting these two values to pps_limit restricts the policer to allowing exactly # that number of packets per second, which is what we want for our tests. - # For default trap, use a different CIR other than 600 to easily identify - # if it is getting hit. For queue4_group3, use the default value in copp + # For queue4_group3, use the default value in copp # configuration as this is lower than 600 PPS - if tg == "default": - group_config["cir"] = DEFAULT_PPS_LIMIT - group_config["cbs"] = DEFAULT_PPS_LIMIT - elif tg == "queue4_group3": + if tg == "queue4_group3": if asic_type == "cisco-8000": group_config["cir"] = "400" group_config["cbs"] = "400" diff --git a/tests/copp/test_copp.py b/tests/copp/test_copp.py index 324a3e6679e..4dd08bd84d9 100644 --- a/tests/copp/test_copp.py +++ b/tests/copp/test_copp.py @@ -51,7 +51,9 @@ "swap_syncd", "topo", "myip", + "myip6", "peerip", + "peerip6", "nn_target_interface", "nn_target_namespace", "send_rate_limit", @@ -81,7 +83,8 @@ class TestCOPP(object): "BGP", "LACP", "LLDP", - "UDLD"]) + "UDLD", + "Default"]) def test_policer(self, protocol, duthosts, enum_rand_one_per_hwsku_frontend_hostname, ptfhost, copp_testbed, dut_type): """ @@ -97,6 +100,21 @@ def test_policer(self, protocol, duthosts, enum_rand_one_per_hwsku_frontend_host copp_testbed, dut_type) + @pytest.mark.disable_loganalyzer + def test_trap_neighbor_miss(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, + ptfhost, check_image_version, copp_testbed, dut_type, + ip_versions, packet_type): # noqa F811 + """ + Validates that neighbor miss (subnet hit) packets are rate-limited + + """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + logger.info("Verify IPV{} {} packets are rate limited".format(ip_versions, packet_type)) + pytest_assert( + wait_until(60, 20, 0, _copp_runner, duthost, ptfhost, packet_type, copp_testbed, dut_type, + ip_version=ip_versions), + "Traffic check for {} packets failed".format(packet_type)) + @pytest.mark.disable_loganalyzer def test_add_new_trap(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, ptfhost, check_image_version, copp_testbed, dut_type, backup_restore_config_db): @@ -273,21 +291,27 @@ def ignore_expected_loganalyzer_exceptions(enum_rand_one_per_hwsku_frontend_host loganalyzer[enum_rand_one_per_hwsku_frontend_hostname].ignore_regex.extend(ignoreRegex) -def _copp_runner(dut, ptf, protocol, test_params, dut_type, has_trap=True): +def _copp_runner(dut, ptf, protocol, test_params, dut_type, has_trap=True, + ip_version="4"): # noqa F811 """ Configures and runs the PTF test cases. """ + is_ipv4 = True if ip_version == "4" else False + params = {"verbose": False, "target_port": test_params.nn_target_port, - "myip": test_params.myip, - "peerip": test_params.peerip, + "myip": test_params.myip if is_ipv4 else test_params.myip6, + "peerip": test_params.peerip if is_ipv4 else test_params.peerip6, + "vlanip": copp_utils.get_vlan_ip(dut, ip_version), + "loopbackip": copp_utils.get_lo_ipv4(dut), "send_rate_limit": test_params.send_rate_limit, "has_trap": has_trap, "hw_sku": dut.facts["hwsku"], "asic_type": dut.facts["asic_type"], "platform": dut.facts["platform"], - "topo_type": test_params.topo_type} + "topo_type": test_params.topo_type, + "ip_version": ip_version} dut_ip = dut.mgmt_ip device_sockets = ["0-{}@tcp://127.0.0.1:10900".format(test_params.nn_target_port), @@ -349,14 +373,19 @@ def _gather_test_params(tbinfo, duthost, request, duts_minigraph_facts): if nn_target_interface not in mg_facts["minigraph_neighbors"]: continue for bgp_peer in mg_facts["minigraph_bgp"]: - if bgp_peer["name"] == mg_facts["minigraph_neighbors"][nn_target_interface]["name"] \ - and ipaddr.IPAddress(bgp_peer["addr"]).version == 4: + if myip is None and \ + bgp_peer["name"] == mg_facts["minigraph_neighbors"][nn_target_interface]["name"] \ + and ipaddr.IPAddress(bgp_peer["addr"]).version == 4: myip = bgp_peer["addr"] peerip = bgp_peer["peer_addr"] nn_target_namespace = mg_facts["minigraph_neighbors"][nn_target_interface]['namespace'] is_backend_topology = mg_facts.get(constants.IS_BACKEND_TOPOLOGY_KEY, False) if is_backend_topology and len(mg_facts["minigraph_vlan_sub_interfaces"]) > 0: nn_target_vlanid = mg_facts["minigraph_vlan_sub_interfaces"][0]["vlan"] + elif bgp_peer["name"] == mg_facts["minigraph_neighbors"][nn_target_interface]["name"] \ + and ipaddr.IPAddress(bgp_peer["addr"]).version == 6: + myip6 = bgp_peer["addr"] + peerip6 = bgp_peer["peer_addr"] break logging.info("nn_target_port {} nn_target_interface {} nn_target_namespace {} nn_target_vlanid {}" @@ -366,7 +395,9 @@ def _gather_test_params(tbinfo, duthost, request, duts_minigraph_facts): swap_syncd=swap_syncd, topo=topo, myip=myip, + myip6=myip6, peerip=peerip, + peerip6=peerip6, nn_target_interface=nn_target_interface, nn_target_namespace=nn_target_namespace, send_rate_limit=send_rate_limit, diff --git a/tests/crm/test_crm.py b/tests/crm/test_crm.py index f2f91499b75..40dabf9cb3e 100755 --- a/tests/crm/test_crm.py +++ b/tests/crm/test_crm.py @@ -888,6 +888,7 @@ def test_crm_nexthop_group(duthosts, enum_rand_one_per_hwsku_frontend_hostname, nexthop_group_num = get_entries_num(new_nexthop_group_used, new_nexthop_group_available) _, nexthop_available_resource_num = get_crm_stats(get_nexthop_group_another_stats, duthost) nexthop_group_num = min(nexthop_group_num, nexthop_available_resource_num) + logger.info(f"Next hop group number: {nexthop_group_num}") # Increase default Linux configuration for ARP cache increase_arp_cache(duthost, nexthop_group_num, 4, "test_crm_nexthop_group") @@ -974,7 +975,7 @@ def verify_acl_crm_stats(duthost, asichost, enum_rand_one_per_hwsku_frontend_hos if used_percent < 1: # Preconfiguration needed for used percentage verification nexthop_group_num = get_entries_num(new_crm_stats_acl_entry_used, new_crm_stats_acl_entry_available) - + logger.info(f"Next hop group number: {nexthop_group_num}") apply_acl_config(duthost, asichost, "test_acl_entry", asic_collector, nexthop_group_num) # Make sure SONIC configure expected entries diff --git a/tests/dash/gnmi_utils.py b/tests/dash/gnmi_utils.py index 95432701dff..8395cabd95c 100644 --- a/tests/dash/gnmi_utils.py +++ b/tests/dash/gnmi_utils.py @@ -237,7 +237,7 @@ def gnmi_set(duthost, ptfhost, delete_list, update_list, replace_list): env = GNMIEnvironment(duthost) ip = duthost.mgmt_ip port = env.gnmi_port - cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd = 'python /root/gnxi/gnmi_cli_py/py_gnmicli.py ' cmd += '--timeout 30 ' cmd += '-t %s -p %u ' % (ip, port) cmd += '-xo sonic-db ' @@ -293,7 +293,7 @@ def gnmi_get(duthost, ptfhost, path_list): env = GNMIEnvironment(duthost) ip = duthost.mgmt_ip port = env.gnmi_port - cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd = 'python /root/gnxi/gnmi_cli_py/py_gnmicli.py ' cmd += '--timeout 30 ' cmd += '-t %s -p %u ' % (ip, port) cmd += '-xo sonic-db ' diff --git a/tests/dhcp_relay/conftest.py b/tests/dhcp_relay/conftest.py index fe504ccd2f1..2b0d58a4067 100644 --- a/tests/dhcp_relay/conftest.py +++ b/tests/dhcp_relay/conftest.py @@ -146,8 +146,10 @@ def dut_dhcp_relay_data(duthosts, rand_one_dut_hostname, ptfhost, tbinfo): def validate_dut_routes_exist(duthosts, rand_one_dut_hostname, dut_dhcp_relay_data): """Fixture to valid a route to each DHCP server exist """ - py_assert(wait_until(120, 5, 0, check_routes_to_dhcp_server, duthosts[rand_one_dut_hostname], - dut_dhcp_relay_data), "Failed to find route for DHCP server") + py_assert(wait_until(360, 5, 0, check_routes_to_dhcp_server, duthosts[rand_one_dut_hostname], + dut_dhcp_relay_data), + "Packets relayed to DHCP server should go through default route via upstream neighbor, but now it's" + + " going through mgmt interface, which means device is in an unhealthy status") @pytest.fixture(scope="module") diff --git a/tests/dhcp_relay/dhcp_relay_utils.py b/tests/dhcp_relay/dhcp_relay_utils.py index 37544150cc0..1ea04c8021b 100644 --- a/tests/dhcp_relay/dhcp_relay_utils.py +++ b/tests/dhcp_relay/dhcp_relay_utils.py @@ -9,6 +9,10 @@ def check_routes_to_dhcp_server(duthost, dut_dhcp_relay_data): """Validate there is route on DUT to each DHCP server """ + output = duthost.shell("show ip bgp sum", module_ignore_errors=True) + logger.info("bgp state: {}".format(output["stdout"])) + output = duthost.shell("show int po", module_ignore_errors=True) + logger.info("portchannel state: {}".format(output["stdout"])) default_gw_ip = dut_dhcp_relay_data[0]['default_gw_ip'] dhcp_servers = set() for dhcp_relay in dut_dhcp_relay_data: diff --git a/tests/dhcp_relay/test_dhcp_relay_stress.py b/tests/dhcp_relay/test_dhcp_relay_stress.py index d7a69d16ffc..907eb3d9143 100644 --- a/tests/dhcp_relay/test_dhcp_relay_stress.py +++ b/tests/dhcp_relay/test_dhcp_relay_stress.py @@ -131,8 +131,10 @@ def check_dhcp_stress_status(duthost, test_duration_seconds): @pytest.mark.parametrize('dhcp_type', ['discover', 'offer', 'request', 'ack']) -def test_dhcp_relay_stress(ptfhost, ptfadapter, dut_dhcp_relay_data, validate_dut_routes_exist, - testing_config, dhcp_type, clean_processes_after_stress_test): +def test_dhcp_relay_stress(ptfhost, ptfadapter, dut_dhcp_relay_data, validate_dut_routes_exist, testing_config, + setup_standby_ports_on_rand_unselected_tor, + toggle_all_simulator_ports_to_rand_selected_tor_m, # noqa F811 + dhcp_type, clean_processes_after_stress_test): """Test DHCP relay functionality on T0 topology and verify that HCP relay service can handle the maximum load without failure. """ diff --git a/tests/dhcp_server/dhcp_server_test_common.py b/tests/dhcp_server/dhcp_server_test_common.py index 5b7407ccab2..1d259a02beb 100644 --- a/tests/dhcp_server/dhcp_server_test_common.py +++ b/tests/dhcp_server/dhcp_server_test_common.py @@ -341,7 +341,8 @@ def validate_dhcp_server_pkts( exp_msg_type, exp_net_mask, exp_gateway, - exp_lease_time=DHCP_DEFAULT_LEASE_TIME + exp_lease_time=DHCP_DEFAULT_LEASE_TIME, + options=None ): def is_expected_pkt(pkt): logging.info("validate_dhcp_server_pkts: %s" % repr(pkt)) @@ -358,6 +359,11 @@ def is_expected_pkt(pkt): return False elif not match_expected_dhcp_options(pkt_dhcp_options, "message-type", exp_msg_type): return False + elif options: + pkt_dhcp_options = pkt[scapy.DHCP].options + for option_id, expected_value in options.items(): + if not match_expected_dhcp_options(pkt_dhcp_options, int(option_id), expected_value): + return False return True pytest_assert(len([pkt for pkt in pkts if is_expected_pkt(pkt)]) == 1, "Didn't got dhcp packet with expected ip and xid") @@ -405,7 +411,8 @@ def verify_discover_and_request_then_release( net_mask, refresh_fdb_ptf_port=None, exp_lease_time=DHCP_DEFAULT_LEASE_TIME, - release_needed=True + release_needed=True, + customized_options=None ): client_mac = ptfadapter.dataplane.get_mac(0, ptf_mac_port_index).decode('utf-8') pkts_validator = validate_dhcp_server_pkts if expected_assigned_ip else validate_no_dhcp_server_pkts @@ -415,7 +422,8 @@ def verify_discover_and_request_then_release( DHCP_MESSAGE_TYPE_OFFER_NUM, net_mask, exp_gateway, - exp_lease_time + exp_lease_time, + customized_options ] if expected_assigned_ip else [test_xid] discover_pkt = create_dhcp_client_packet( src_mac=client_mac, diff --git a/tests/drop_packets/test_drop_counters.py b/tests/drop_packets/test_drop_counters.py index ff12f8ee865..4f0e0ff8c71 100755 --- a/tests/drop_packets/test_drop_counters.py +++ b/tests/drop_packets/test_drop_counters.py @@ -66,6 +66,10 @@ def ignore_expected_loganalyzer_exceptions(duthosts, rand_one_dut_hostname, loga loganalyzer[duthost.hostname].ignore_regex.extend(KVMIgnoreRegex) loganalyzer[duthost.hostname].ignore_regex.extend(SAISwitchIgnoreRegex) loganalyzer[duthost.hostname].ignore_regex.extend(CopperCableIgnoreRegex) + if duthost.sonichost.facts['platform_asic'] == 'broadcom': + ignore_regex = r".* ERR swss#orchagent:\s*.*\s*queryAattributeEnumValuesCapability:\s*returned value " \ + r"\d+ is not allowed on SAI_SWITCH_ATTR_(?:ECMP|LAG)_DEFAULT_HASH_ALGORITHM.*" + loganalyzer[duthost.hostname].ignore_regex.extend([ignore_regex]) @pytest.fixture(autouse=True, scope="module") diff --git a/tests/dualtor/test_orch_stress.py b/tests/dualtor/test_orch_stress.py index edfd008cbd0..94048bbd2de 100644 --- a/tests/dualtor/test_orch_stress.py +++ b/tests/dualtor/test_orch_stress.py @@ -225,6 +225,7 @@ def test_flap_neighbor_entry_active( mock_server_ip_mac_map): dut = rand_selected_dut + asic_type = dut.facts['asic_type'] vlan_interface_name = list(dut.get_extended_minigraph_facts(tbinfo)['minigraph_vlans'].keys())[0] @@ -246,8 +247,9 @@ def test_flap_neighbor_entry_active( logger.info(json.dumps(crm_facts2, indent=4)) unmatched_crm_facts = compare_crm_facts(crm_facts1, crm_facts2) - pytest_assert(len(unmatched_crm_facts) == 0, 'Unmatched CRM facts: {}' - .format(json.dumps(unmatched_crm_facts, indent=4))) + if asic_type != 'vs': + pytest_assert(len(unmatched_crm_facts) == 0, 'Unmatched CRM facts: {}' + .format(json.dumps(unmatched_crm_facts, indent=4))) def test_flap_neighbor_entry_standby( diff --git a/tests/dualtor/test_switchover_failure.py b/tests/dualtor/test_switchover_failure.py index 467790c5400..a6fedfaf8e7 100644 --- a/tests/dualtor/test_switchover_failure.py +++ b/tests/dualtor/test_switchover_failure.py @@ -137,6 +137,11 @@ def common_setup_teardown( rand_selected_dut.shell_cmds(cmds=cmds) + # If the test was skipped then early exit from teardown + if hasattr(request.node, "rep_call") and request.node.rep_call.skipped or \ + hasattr(request.node, "rep_setup") and request.node.rep_setup.skipped: + return + # if the test failed, assume linkmgrd/swss are stuck in a bad state and require a restart if not hasattr(request.node, "rep_call") or request.node.rep_call.failed: logger.warning("Test failed, restarting swss") diff --git a/tests/dualtor/test_switchover_faulty_ycable.py b/tests/dualtor/test_switchover_faulty_ycable.py index c5a47cf43ff..4e68aa14b66 100644 --- a/tests/dualtor/test_switchover_faulty_ycable.py +++ b/tests/dualtor/test_switchover_faulty_ycable.py @@ -21,6 +21,18 @@ ] +@pytest.fixture(autouse=True) +def ignore_expected_loganalyzer_exceptions(duthosts, rand_one_dut_hostname, loganalyzer): + # Ignore in KVM test + KVMIgnoreRegex = [ + ".*Could not establish the active side for Y cable port.*", + ] + duthost = duthosts[rand_one_dut_hostname] + if loganalyzer: # Skip if loganalyzer is disabled + if duthost.facts["asic_type"] == "vs": + loganalyzer[duthost.hostname].ignore_regex.extend(KVMIgnoreRegex) + + @pytest.fixture(scope="module") def simulated_faulty_side(rand_unselected_dut): return rand_unselected_dut diff --git a/tests/dualtor_io/test_tor_bgp_failure.py b/tests/dualtor_io/test_tor_bgp_failure.py index c6643a08134..2ef58a13d52 100644 --- a/tests/dualtor_io/test_tor_bgp_failure.py +++ b/tests/dualtor_io/test_tor_bgp_failure.py @@ -182,7 +182,7 @@ def test_active_tor_shutdown_bgp_sessions_upstream( if cable_type == CableType.active_standby: send_server_to_t1_with_action( upper_tor_host, verify=True, delay=MUX_SIM_ALLOWED_DISRUPTION_SEC, - action=lambda: shutdown_bgp_sessions(upper_tor_host) + action=lambda: shutdown_bgp_sessions(upper_tor_host), random_dst=False ) if cable_type == CableType.active_active: diff --git a/tests/dut_console/test_console_baud_rate.py b/tests/dut_console/test_console_baud_rate.py index a156c6f77d4..3e44554d9e7 100644 --- a/tests/dut_console/test_console_baud_rate.py +++ b/tests/dut_console/test_console_baud_rate.py @@ -41,6 +41,8 @@ def test_console_baud_rate_config(duthost): def console_client_setup_teardown(duthost, conn_graph_facts, creds): pytest_assert(pass_config_test, "Fail due to failure in test_console_baud_rate_config.") dut_hostname = duthost.hostname + if "ManagementIp" not in conn_graph_facts['device_console_info'][dut_hostname]: + pytest.skip("Console port does not exist in console_links.csv file. Skipping {}".format(dut_hostname)) console_host = conn_graph_facts['device_console_info'][dut_hostname]['ManagementIp'] if "/" in console_host: console_host = console_host.split("/")[0] diff --git a/tests/everflow/everflow_test_utilities.py b/tests/everflow/everflow_test_utilities.py index 8377cb40548..fa694220fdc 100644 --- a/tests/everflow/everflow_test_utilities.py +++ b/tests/everflow/everflow_test_utilities.py @@ -862,7 +862,7 @@ def get_expected_mirror_packet(mirror_session, setup, duthost, direction, mirror else: payload = binascii.unhexlify("0" * 44) + bytes(payload) if ( - duthost.facts["asic_type"] in ["barefoot", "cisco-8000", "innovium"] + duthost.facts["asic_type"] in ["barefoot", "cisco-8000", "marvell-teralynx"] or duthost.facts.get("platform_asic") in ["broadcom-dnx"] or duthost.facts["hwsku"] in ["rd98DX35xx", "rd98DX35xx_cn9131", "Nokia-7215-A1"] @@ -893,7 +893,7 @@ def get_expected_mirror_packet(mirror_session, setup, duthost, direction, mirror if duthost.facts["asic_type"] == 'marvell': expected_packet.set_do_not_care_scapy(packet.IP, "id") expected_packet.set_do_not_care_scapy(packet.GRE, "seqnum_present") - if duthost.facts["asic_type"] in ["cisco-8000", "innovium"] or \ + if duthost.facts["asic_type"] in ["cisco-8000", "marvell-teralynx"] or \ duthost.facts.get("platform_asic") in ["broadcom-dnx"]: expected_packet.set_do_not_care_scapy(packet.GRE, "seqnum_present") diff --git a/tests/everflow/test_everflow_testbed.py b/tests/everflow/test_everflow_testbed.py index cfe3c8f109e..114f7549e91 100644 --- a/tests/everflow/test_everflow_testbed.py +++ b/tests/everflow/test_everflow_testbed.py @@ -529,7 +529,7 @@ def test_everflow_dscp_with_policer( hostvars = everflow_dut.host.options['variable_manager']._hostvars[everflow_dut.hostname] everflow_tolerance = 10 - if vendor == 'innovium': + if vendor == 'marvell-teralynx': everflow_tolerance = 11 rate_limit = 100 diff --git a/tests/fdb/test_fdb_mac_learning.py b/tests/fdb/test_fdb_mac_learning.py index e8f192243b4..72bbe69cb4f 100644 --- a/tests/fdb/test_fdb_mac_learning.py +++ b/tests/fdb/test_fdb_mac_learning.py @@ -8,6 +8,7 @@ from tests.common.fixtures.ptfhost_utils import copy_ptftests_directory # noqa F401 from tests.ptf_runner import ptf_runner from .utils import fdb_table_has_dummy_mac_for_interface +from tests.common.helpers.ptf_tests_helper import upstream_links # noqa F401 pytestmark = [ pytest.mark.topology('t0') @@ -15,6 +16,20 @@ logger = logging.getLogger(__name__) +@pytest.fixture(autouse=True) +def ignore_expected_loganalyzer_exception(loganalyzer, duthosts): + + ignore_errors = [ + r".*ERR swss#orchagent: :- update: Failed to get port by bridge port ID.*", + r".* ERR swss#tunnel_packet_handler.py: All portchannels failed to come up within \d+ minutes, exiting.*" + ] + if loganalyzer: + for duthost in duthosts: + loganalyzer[duthost.hostname].ignore_regex.extend(ignore_errors) + + return None + + class TestFdbMacLearning: """ TestFdbMacLearning verifies that stale MAC entries are not present in MAC table after doing sonic-clear fdb all @@ -174,7 +189,52 @@ def dynamic_fdb_oper(self, duthost, tbinfo, ptfhost, dut_ptf_ports): res = duthost.command('show mac') logging.info("show mac {}".format(res['stdout_lines'])) - def testFdbMacLearning(self, ptfadapter, duthosts, rand_one_dut_hostname, ptfhost, tbinfo, request, prepare_test): + def check_mux_status_consistency(self, duthost, ports): + """ + For given ports, verify that muxcable status on duthost is consistent with muxcable server_status. + """ + for port in ports: + res = duthost.show_and_parse(f"show muxcable status {port}") + if not res or res[0]['status'] != res[0]['server_status']: + return False + return True + + def wait_for_interfaces_ready(self, duthost, tbinfo, ports): + """ + Make sure interfaces are ready for sending traffic. + """ + if "dualtor" in tbinfo['topo']['name']: + pytest_assert(wait_until(150, 5, 0, self.check_mux_status_consistency, duthost, ports)) + else: + time.sleep(30) + + def bringup_uplink_ports(self, duthost, upstream_links): # noqa F811 + """ + For active-active dualtor NIC simulator doesn't install OVS flows for downlink ports until the link status + becomes consistent which can happen in this case only if upstream connectivity is restored. + """ + # Get one upstream port + uplink_intf = list(upstream_links.keys())[0] + # Check if it's a LAG member + config_facts = duthost.config_facts(host=duthost.hostname, source="persistent")['ansible_facts'] + portChannels = config_facts['PORTCHANNEL_MEMBER'] + portChannel = None + members = None + for intf in portChannels: + if uplink_intf in portChannels[intf]: + portChannel = intf + members = list(portChannels[intf].keys()) + break + if portChannel: + min_links = int(config_facts['PORTCHANNEL'][portChannel]['min_links']) + # Bringup minimum ports for this port channel to be up + for i in range(min_links): + duthost.shell("sudo config interface startup {}".format(members[i])) + else: + duthost.shell("sudo config interface startup {}".format(uplink_intf)) + + def testFdbMacLearning(self, ptfadapter, duthosts, rand_one_dut_hostname, ptfhost, tbinfo, request, prepare_test, + upstream_links, setup_standby_ports_on_rand_unselected_tor_unconditionally): # noqa F811 """ TestFdbMacLearning verifies stale MAC entries are not present in MAC table after doing sonic-clear fdb all -shut down all ports @@ -197,10 +257,15 @@ def testFdbMacLearning(self, ptfadapter, duthosts, rand_one_dut_hostname, ptfhos res = ptfhost.shell('cat /sys/class/net/{}/address'.format(ptf_port)) ptf_interfaces_mac_addresses.append(res['stdout'].upper()) - # unshut 1 port and populate fdb for that port. make sure fdb entry is populated in mac table + # Bringup uplink connectivity for muxcable status consistency to happen. duthost = duthosts[rand_one_dut_hostname] - duthost.shell("sudo config interface startup {}".format(target_ports_to_ptf_mapping[0][0])) - time.sleep(10) + if "dualtor-aa" in tbinfo['topo']['name']: + self.bringup_uplink_ports(duthost, upstream_links) + + # unshut 1 port and populate fdb for that port. make sure fdb entry is populated in mac table + target_ports = [target_ports_to_ptf_mapping[0][0]] + duthost.shell("sudo config interface startup {}".format(target_ports[0])) + self.wait_for_interfaces_ready(duthost, tbinfo, target_ports) self.dynamic_fdb_oper(duthost, tbinfo, ptfhost, [target_ports_to_ptf_mapping[0]]) pytest_assert(wait_until(300, 2, 1, fdb_table_has_dummy_mac_for_interface, duthost, target_ports_to_ptf_mapping[0][0], self.DUMMY_MAC_PREFIX), "After starting {}" @@ -208,9 +273,13 @@ def testFdbMacLearning(self, ptfadapter, duthosts, rand_one_dut_hostname, ptfhos .format(target_ports_to_ptf_mapping[0][0])) # unshut 3 more ports and populate fdb for those ports - duthost.shell("sudo config interface startup {}-{}".format(target_ports_to_ptf_mapping[1][0], - target_ports_to_ptf_mapping[3][0][8:])) - time.sleep(10) + target_ports = [ + target_ports_to_ptf_mapping[1][0], + target_ports_to_ptf_mapping[2][0], + target_ports_to_ptf_mapping[3][0] + ] + duthost.shell("sudo config interface startup {}-{}".format(target_ports[0], target_ports[2][8:])) + self.wait_for_interfaces_ready(duthost, tbinfo, target_ports) self.dynamic_fdb_oper(duthost, tbinfo, ptfhost, target_ports_to_ptf_mapping[1:]) for i in range(1, len(target_ports_to_ptf_mapping)): pytest_assert(wait_until(300, 2, 1, fdb_table_has_dummy_mac_for_interface, duthost, @@ -221,7 +290,7 @@ def testFdbMacLearning(self, ptfadapter, duthosts, rand_one_dut_hostname, ptfhos # shutdown last 3 ports and make sure corresponding entries are gone from MAC address table for i in range(1, len(target_ports_to_ptf_mapping)): duthost.shell("sudo config interface shutdown {}".format(target_ports_to_ptf_mapping[i][0])) - time.sleep(10) + time.sleep(30) for i in range(1, len(target_ports_to_ptf_mapping)): pytest_assert(not (fdb_table_has_dummy_mac_for_interface(duthost, target_ports_to_ptf_mapping[i][0])), "mac entry present when interface {} is down" diff --git a/tests/fdb/test_fdb_mac_move.py b/tests/fdb/test_fdb_mac_move.py index ce097b77996..24d56f2998c 100644 --- a/tests/fdb/test_fdb_mac_move.py +++ b/tests/fdb/test_fdb_mac_move.py @@ -134,6 +134,7 @@ def test_fdb_mac_move(ptfadapter, duthosts, rand_one_dut_hostname, ptfhost, get_ "FDB Table Add failed") # Flush dataplane ptfadapter.dataplane.flush() + time.sleep(10) fdb_cleanup(duthosts, rand_one_dut_hostname) # Wait for 10 seconds before starting next loop time.sleep(10) diff --git a/tests/fdb/utils.py b/tests/fdb/utils.py index 2b93b5bf46c..877ec74b1ea 100644 --- a/tests/fdb/utils.py +++ b/tests/fdb/utils.py @@ -31,10 +31,12 @@ def IntToMac(intMac): def get_crm_resources(duthost, resource, status): retry_count = 5 count = 0 - while len(duthost.get_crm_resources()) == 0 and count < retry_count: + while len(duthost.get_crm_resources().get("main_resources")) == 0 and count < retry_count: logger.debug("CRM resources not fully populated, retry after 2 seconds: count: {}".format(count)) time.sleep(2) count = count + 1 + pytest_assert(resource in duthost.get_crm_resources().get("main_resources"), + "{} not populated in CRM resources".format(resource)) return duthost.get_crm_resources().get("main_resources").get(resource).get(status) diff --git a/tests/fib/test_fib.py b/tests/fib/test_fib.py index e65b90d81e2..0a4e5fb4bf1 100644 --- a/tests/fib/test_fib.py +++ b/tests/fib/test_fib.py @@ -189,7 +189,7 @@ def hash_keys(duthost): hash_keys.remove('ip-proto') if 'ingress-port' in hash_keys: hash_keys.remove('ingress-port') - if duthost.facts['asic_type'] in ["innovium", "cisco-8000"]: + if duthost.facts['asic_type'] in ["marvell-teralynx", "cisco-8000"]: if 'ip-proto' in hash_keys: hash_keys.remove('ip-proto') # remove the ingress port from multi asic platform @@ -439,3 +439,100 @@ def test_ipinip_hash_negative(add_default_route_to_dut, duthosts, fib_info_files qlen=PTF_QLEN, socket_recv_size=16384, is_python3=True) + + +@pytest.fixture(params=["ipv4-ipv4", "ipv4-ipv6", "ipv6-ipv6", "ipv6-ipv4"]) +def vxlan_ipver(request): + return request.param +def test_vxlan_hash(add_default_route_to_dut, duthost, duthosts, fib_info_files_per_function, # noqa F811 + hash_keys, ptfhost, vxlan_ipver, tbinfo, mux_server_url, # noqa F811 + ignore_ttl, single_fib_for_duts, duts_running_config_facts, # noqa F811 + duts_minigraph_facts): # noqa F811 + # Query the default VxLAN UDP port from switch's APPL_DB + vxlan_dport_check = duthost.shell('redis-cli -n 0 hget "SWITCH_TABLE:switch" "vxlan_port"') + if 'stdout' in vxlan_dport_check and vxlan_dport_check['stdout'].isdigit(): + vxlan_dest_port = int(vxlan_dport_check['stdout']) + else: + vxlan_dest_port = 4789 + # For VxLAN, outer L4 Source port provides entropy + hash_keys = ['outer-src-port'] + timestamp = datetime.now().strftime('%Y-%m-%d-%H:%M:%S') + log_file = "/tmp/hash_test.VxlanHashTest.{}.{}.log".format( + vxlan_ipver, timestamp) + logging.info("PTF log file: %s" % log_file) + if vxlan_ipver == "ipv4-ipv4" or vxlan_ipver == "ipv6-ipv4": + src_ip_range = SRC_IP_RANGE + dst_ip_range = DST_IP_RANGE + else: + src_ip_range = SRC_IPV6_RANGE + dst_ip_range = DST_IPV6_RANGE + ptf_runner(ptfhost, + "ptftests", + "hash_test.VxlanHashTest", + platform_dir="ptftests", + params={"fib_info_files": fib_info_files_per_function[:3], # Test at most 3 DUTs + "ptf_test_port_map": ptf_test_port_map(ptfhost, tbinfo, duthosts, mux_server_url, + duts_running_config_facts, duts_minigraph_facts), + "hash_keys": hash_keys, + "src_ip_range": ",".join(src_ip_range), + "dst_ip_range": ",".join(dst_ip_range), + "vxlan_dest_port": vxlan_dest_port, + "vlan_ids": VLANIDS, + "ignore_ttl": ignore_ttl, + "single_fib_for_duts": single_fib_for_duts, + "ipver": vxlan_ipver + }, + log_file=log_file, + qlen=PTF_QLEN, + socket_recv_size=16384, + is_python3=True) + + +@pytest.fixture(params=["ipv4-ipv4", "ipv4-ipv6", "ipv6-ipv6", "ipv6-ipv4"]) +def nvgre_ipver(request): + return request.param +def test_nvgre_hash(add_default_route_to_dut, duthost, duthosts, fib_info_files_per_function, # noqa F811 + hash_keys, ptfhost, nvgre_ipver, tbinfo, mux_server_url, # noqa F811 + ignore_ttl, single_fib_for_duts, duts_running_config_facts, # noqa F811 + duts_minigraph_facts): # noqa F811 + + # For NVGRE, default hash key is inner 5-tuple. + # Due to current limitation, NVGRE hash keys are updated for different vendors. + # Hash-key will be updated once we get the full support. + hash_keys = ['src-ip', 'dst-ip', 'src-port', 'dst-port', 'src-mac', 'dst-mac'] + if duthost.facts['asic_type'] in ["cisco-8000"]: + logging.info("Cisco: hash-key is src-mac, dst-mac") + hash_keys = ['src-mac', 'dst-mac'] + if duthost.facts['asic_type'] in ["mellanox"]: + logging.info("Mellanox: hash-key is src-ip, dst-ip") + hash_keys = ['src-ip', 'dst-ip'] + + timestamp = datetime.now().strftime('%Y-%m-%d-%H:%M:%S') + log_file = "/tmp/hash_test.NvgreHashTest.{}.{}.log".format( + nvgre_ipver, timestamp) + logging.info("PTF log file: %s" % log_file) + if nvgre_ipver == "ipv4-ipv4" or nvgre_ipver == "ipv6-ipv4": + src_ip_range = SRC_IP_RANGE + dst_ip_range = DST_IP_RANGE + else: + src_ip_range = SRC_IPV6_RANGE + dst_ip_range = DST_IPV6_RANGE + ptf_runner(ptfhost, + "ptftests", + "hash_test.NvgreHashTest", + platform_dir="ptftests", + params={"fib_info_files": fib_info_files_per_function[:3], # Test at most 3 DUTs + "ptf_test_port_map": ptf_test_port_map(ptfhost, tbinfo, duthosts, mux_server_url, + duts_running_config_facts, duts_minigraph_facts), + "hash_keys": hash_keys, + "src_ip_range": ",".join(src_ip_range), + "dst_ip_range": ",".join(dst_ip_range), + "vlan_ids": VLANIDS, + "ignore_ttl": ignore_ttl, + "single_fib_for_duts": single_fib_for_duts, + "ipver": nvgre_ipver + }, + log_file=log_file, + qlen=PTF_QLEN, + socket_recv_size=16384, + is_python3=True) diff --git a/tests/generic_config_updater/gu_utils.py b/tests/generic_config_updater/gu_utils.py index 6032b26145f..6203adaaaf6 100644 --- a/tests/generic_config_updater/gu_utils.py +++ b/tests/generic_config_updater/gu_utils.py @@ -2,6 +2,7 @@ import logging import json from tests.common.gu_utils import apply_patch, generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic BASE_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -39,6 +40,7 @@ def load_and_apply_json_patch(duthost, file_name, setup): with open(os.path.join(TEMPLATES_DIR, file_name)) as file: json_patch = json.load(file) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) duts_to_apply = [duthost] outputs = [] if setup["is_dualtor"]: diff --git a/tests/generic_config_updater/test_aaa.py b/tests/generic_config_updater/test_aaa.py index 52bdaeffa57..802895ab1ea 100644 --- a/tests/generic_config_updater/test_aaa.py +++ b/tests/generic_config_updater/test_aaa.py @@ -5,6 +5,7 @@ from tests.common.fixtures.tacacs import get_aaa_sub_options_value from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload pytestmark = [ @@ -168,6 +169,7 @@ def aaa_tc1_add_config(duthost): "value": aaa_config } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -206,6 +208,7 @@ def aaa_tc1_replace(duthost): "value": "tacacs+" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -243,6 +246,7 @@ def aaa_tc1_add_duplicate(duthost): "value": "tacacs+" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -269,6 +273,7 @@ def aaa_tc1_remove(duthost): "path": "/AAA" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -313,6 +318,7 @@ def tacacs_global_tc2_add_config(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -352,6 +358,7 @@ def tacacs_global_tc2_invalid_input(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -375,6 +382,7 @@ def tacacs_global_tc2_duplicate_input(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -400,6 +408,7 @@ def tacacs_global_tc2_remove(duthost): "path": "/TACPLUS" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -443,6 +452,7 @@ def tacacs_server_tc3_add_init(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -481,6 +491,7 @@ def tacacs_server_tc3_add_max(duthost): } json_patch.append(patch) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -521,6 +532,7 @@ def tacacs_server_tc3_replace_invalid(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -542,6 +554,7 @@ def tacacs_server_tc3_add_duplicate(duthost): "value": TACACS_SERVER_OPTION } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -566,6 +579,7 @@ def tacacs_server_tc3_remove(duthost): "path": "/TACPLUS_SERVER" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_bgp_prefix.py b/tests/generic_config_updater/test_bgp_prefix.py index 3f40de54ed9..84f26560239 100644 --- a/tests/generic_config_updater/test_bgp_prefix.py +++ b/tests/generic_config_updater/test_bgp_prefix.py @@ -5,6 +5,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_failure, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload pytestmark = [ @@ -115,6 +116,7 @@ def bgp_prefix_tc1_add_config(duthost, community, community_table): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -155,6 +157,7 @@ def bgp_prefix_tc1_xfail(duthost, community_table): "value": prefixes_v4 } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -182,6 +185,7 @@ def bgp_prefix_tc1_replace(duthost, community, community_table): "value": PREFIXES_V4_DUMMY } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -215,6 +219,7 @@ def bgp_prefix_tc1_remove(duthost, community): "path": "/BGP_ALLOWED_PREFIXES" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_bgp_sentinel.py b/tests/generic_config_updater/test_bgp_sentinel.py index be35f1a13b4..bfcb14852c7 100644 --- a/tests/generic_config_updater/test_bgp_sentinel.py +++ b/tests/generic_config_updater/test_bgp_sentinel.py @@ -6,6 +6,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload @@ -129,6 +130,7 @@ def bgp_sentinel_tc1_add_config(duthost, lo_intf_ips): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -168,6 +170,7 @@ def bgp_sentinel_tc1_add_dummy_ip_range(duthost): "value": "{}".format(DUMMY_IP_RANGE_V6) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -201,6 +204,7 @@ def bgp_sentinel_tc1_rm_dummy_ip_range(duthost): "path": "/BGP_SENTINELS/{}/ip_range/1".format(BGPSENTINEL_V6) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -235,6 +239,7 @@ def bgp_sentinel_tc1_replace_src_address(duthost): "value": "{}".format(DUMMY_SRC_ADDRESS_V6) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_bgp_speaker.py b/tests/generic_config_updater/test_bgp_speaker.py index 6dcdeda193d..853e17d3e11 100644 --- a/tests/generic_config_updater/test_bgp_speaker.py +++ b/tests/generic_config_updater/test_bgp_speaker.py @@ -6,7 +6,9 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload +from tests.common.gu_utils import get_bgp_speaker_runningconfig pytestmark = [ pytest.mark.topology('t0'), # BGP Speaker is limited to t0 only @@ -56,27 +58,6 @@ def lo_intf_ips(rand_selected_dut, tbinfo): pytest_assert(True, "Required ipv4 and ipv6 to start the test") -def get_bgp_speaker_runningconfig(duthost): - """ Get bgp speaker config that contains src_address and ip_range - - Sample output in t0: - ['\n neighbor BGPSLBPassive update-source 10.1.0.32', - '\n neighbor BGPVac update-source 10.1.0.32', - '\n bgp listen range 10.255.0.0/25 peer-group BGPSLBPassive', - '\n bgp listen range 192.168.0.0/21 peer-group BGPVac'] - """ - cmds = "show runningconfiguration bgp" - output = duthost.shell(cmds) - pytest_assert(not output['rc'], "'{}' failed with rc={}".format(cmds, output['rc'])) - - # Sample: - # neighbor BGPSLBPassive update-source 10.1.0.32 - # bgp listen range 192.168.0.0/21 peer-group BGPVac - bgp_speaker_pattern = r"\s+neighbor.*update-source.*|\s+bgp listen range.*" - bgp_speaker_config = re.findall(bgp_speaker_pattern, output['stdout']) - return bgp_speaker_config - - @pytest.fixture(autouse=True) def setup_env(duthosts, rand_one_dut_hostname): """ @@ -144,6 +125,7 @@ def bgp_speaker_tc1_add_config(duthost, lo_intf_ips, vlan_intf_ip_ranges): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -183,6 +165,7 @@ def bgp_speaker_tc1_add_dummy_ip_range(duthost): "value": "{}".format(DUMMY_IP_RANGE_V6) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -215,6 +198,7 @@ def bgp_speaker_tc1_rm_dummy_ip_range(duthost): "path": "/BGP_PEER_RANGE/{}/ip_range/1".format(BGPSPEAKER_V6) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -249,6 +233,7 @@ def bgp_speaker_tc1_replace_src_address(duthost): "value": "{}".format(DUMMY_SRC_ADDRESS_V6) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_bgpl.py b/tests/generic_config_updater/test_bgpl.py index b42ad26e662..3d8e164bcd8 100644 --- a/tests/generic_config_updater/test_bgpl.py +++ b/tests/generic_config_updater/test_bgpl.py @@ -7,6 +7,7 @@ from tests.common.helpers.generators import generate_ip_through_default_route from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload pytestmark = [ @@ -113,6 +114,7 @@ def bgpmon_tc1_add_init(duthost, bgpmon_setup_info): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -146,6 +148,7 @@ def bgpmon_tc1_add_duplicate(duthost, bgpmon_setup_info): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -170,6 +173,7 @@ def bgpmon_tc1_admin_change(duthost, bgpmon_setup_info): "value": "down" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -212,6 +216,7 @@ def bgpmon_tc1_ip_change(duthost, bgpmon_setup_info): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -234,6 +239,7 @@ def bgpmon_tc1_remove(duthost): "path": "/BGP_MONITORS" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_cacl.py b/tests/generic_config_updater/test_cacl.py index 6c4e3ec968d..f62953d576e 100644 --- a/tests/generic_config_updater/test_cacl.py +++ b/tests/generic_config_updater/test_cacl.py @@ -6,6 +6,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_res_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.utilities import wait_until @@ -165,6 +166,7 @@ def cacl_tc1_add_new_table(duthost, protocol): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -200,6 +202,7 @@ def cacl_tc1_add_duplicate_table(duthost, protocol): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -259,6 +262,7 @@ def cacl_tc1_replace_table_variable(duthost, protocol): } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -305,6 +309,7 @@ def cacl_tc1_add_invalid_table(duthost, protocol): tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) @@ -322,6 +327,7 @@ def cacl_tc1_remove_unexisted_table(duthost): "path": "/ACL_RULE/SSH_ONLY_UNEXISTED" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -345,6 +351,7 @@ def cacl_tc1_remove_table(duthost, protocol): "path": "/ACL_TABLE/{}".format(table_name) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -406,6 +413,7 @@ def cacl_tc2_add_init_rule(duthost, protocol): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -463,6 +471,7 @@ def cacl_tc2_add_duplicate_rule(duthost, protocol): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -502,6 +511,7 @@ def cacl_tc2_replace_rule(duthost, protocol): "value": "8.8.8.8/32" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -544,6 +554,7 @@ def cacl_tc2_add_rule_to_unexisted_table(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -572,6 +583,7 @@ def cacl_tc2_remove_table_before_rule(duthost, protocol): "path": "/ACL_TABLE/{}".format(table) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -600,6 +612,7 @@ def cacl_tc2_remove_unexist_rule(duthost, protocol): "path": "/ACL_RULE/{}|TEST_DROP2".format(table) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) try: @@ -618,6 +631,7 @@ def cacl_tc2_remove_rule(duthost): "path": "/ACL_RULE" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -658,6 +672,7 @@ def cacl_external_client_add_new_table(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_dhcp_relay.py b/tests/generic_config_updater/test_dhcp_relay.py index 9dca17b1cb4..32d0fd5f2e9 100644 --- a/tests/generic_config_updater/test_dhcp_relay.py +++ b/tests/generic_config_updater/test_dhcp_relay.py @@ -7,6 +7,7 @@ utils_vlan_intfs_dict_add, utils_create_test_vlans # noqa F401 from tests.common.gu_utils import apply_patch, expect_op_success, expect_res_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload, rollback pytestmark = [ @@ -257,6 +258,7 @@ def test_dhcp_relay_tc1_rm_nonexist(rand_selected_dut, vlan_intfs_list): "op": "remove", "path": "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/5" }] + dhcp_rm_nonexist_json = format_json_patch_for_multiasic(duthost=rand_selected_dut, json_data=dhcp_rm_nonexist_json) tmpfile = generate_tmpfile(rand_selected_dut) logger.info("tmpfile {}".format(tmpfile)) @@ -277,6 +279,7 @@ def test_dhcp_relay_tc2_add_exist(rand_selected_dut, vlan_intfs_list): "path": "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/0", "value": "192.0." + str(vlan_intfs_list[0]) + ".1" }] + dhcp_add_exist_json = format_json_patch_for_multiasic(duthost=rand_selected_dut, json_data=dhcp_add_exist_json) tmpfile = generate_tmpfile(rand_selected_dut) logger.info("tmpfile {}".format(tmpfile)) @@ -316,6 +319,7 @@ def test_dhcp_relay_tc3_add_and_rm(rand_selected_dut, vlan_intfs_list): "path": "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/4", "value": "192.0." + str(vlan_intfs_list[0]) + ".5" }] + dhcp_add_rm_json = format_json_patch_for_multiasic(duthost=rand_selected_dut, json_data=dhcp_add_rm_json) tmpfile = generate_tmpfile(rand_selected_dut) logger.info("tmpfile {}".format(tmpfile)) @@ -360,6 +364,7 @@ def test_dhcp_relay_tc4_replace(rand_selected_dut, vlan_intfs_list): "path": "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/0", "value": "192.0." + str(vlan_intfs_list[0]) + ".8" }] + dhcp_replace_json = format_json_patch_for_multiasic(duthost=rand_selected_dut, json_data=dhcp_replace_json) tmpfile = generate_tmpfile(rand_selected_dut) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_ecn_config_update.py b/tests/generic_config_updater/test_ecn_config_update.py index a3459253981..bdb2dbb56d5 100644 --- a/tests/generic_config_updater/test_ecn_config_update.py +++ b/tests/generic_config_updater/test_ecn_config_update.py @@ -7,6 +7,7 @@ from tests.common.helpers.dut_utils import verify_orchagent_running_or_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import is_valid_platform_and_version @@ -107,6 +108,7 @@ def test_ecn_config_updates(duthost, ensure_dut_readiness, configdb_field, opera "path": "/WRED_PROFILE/AZURE_LOSSLESS/{}".format(field), "value": "{}".format(value)}) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) if is_valid_platform_and_version(duthost, "WRED_PROFILE", "ECN tuning", operation): diff --git a/tests/generic_config_updater/test_eth_interface.py b/tests/generic_config_updater/test_eth_interface.py index 7d63aaf8a95..c8a6a5a1525 100644 --- a/tests/generic_config_updater/test_eth_interface.py +++ b/tests/generic_config_updater/test_eth_interface.py @@ -7,6 +7,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.utilities import wait_until @@ -146,6 +147,7 @@ def test_remove_lanes(duthosts, rand_one_dut_hostname, ensure_dut_readiness): "path": "/PORT/Ethernet0/lanes" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -173,6 +175,7 @@ def test_replace_lanes(duthosts, rand_one_dut_hostname, ensure_dut_readiness): "value": "{}".format(update_lanes) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -198,6 +201,7 @@ def test_replace_mtu(duthosts, rand_one_dut_hostname, ensure_dut_readiness): "value": "{}".format(target_mtu) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -222,6 +226,7 @@ def test_toggle_pfc_asym(duthosts, rand_one_dut_hostname, ensure_dut_readiness, "value": "{}".format(pfc_asym) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -247,6 +252,7 @@ def test_replace_fec(duthosts, rand_one_dut_hostname, ensure_dut_readiness, fec) "value": "{}".format(fec) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -277,6 +283,7 @@ def test_update_invalid_index(duthosts, rand_one_dut_hostname, ensure_dut_readin "value": "abc1" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -315,6 +322,7 @@ def test_update_valid_index(duthosts, rand_one_dut_hostname, ensure_dut_readines "value": "{}".format(list(interfaces.values())[0]) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -337,6 +345,7 @@ def test_update_speed(duthosts, rand_one_dut_hostname, ensure_dut_readiness): "value": "{}".format(speed) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -364,6 +373,7 @@ def test_update_description(duthosts, rand_one_dut_hostname, ensure_dut_readines "value": "Updated description" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -385,6 +395,7 @@ def test_eth_interface_admin_change(duthosts, rand_one_dut_hostname, admin_statu "value": "{}".format(admin_status) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_incremental_qos.py b/tests/generic_config_updater/test_incremental_qos.py index 7282f251b6f..0384793e005 100644 --- a/tests/generic_config_updater/test_incremental_qos.py +++ b/tests/generic_config_updater/test_incremental_qos.py @@ -9,6 +9,7 @@ from tests.common.gu_utils import apply_patch, expect_op_success, \ expect_op_failure # noqa F401 from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import is_valid_platform_and_version from tests.common.mellanox_data import is_mellanox_device @@ -236,16 +237,22 @@ def test_incremental_qos_config_updates(duthost, tbinfo, ensure_dut_readiness, c "path": "/BUFFER_POOL/{}".format(configdb_field), "value": "{}".format(value) }] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) if op == "replace" and not field_value: + logger.info("{} expects failure when configdb_field: {} does not have value.".format(op, configdb_field)) expect_op_failure(output) - - if is_valid_platform_and_version(duthost, "BUFFER_POOL", "Shared/headroom pool size changes", op, field_value): - expect_op_success(duthost, output) - ensure_application_of_updated_config(duthost, configdb_field, value) else: - expect_op_failure(output) + if is_valid_platform_and_version(duthost, + "BUFFER_POOL", + "Shared/headroom pool size changes", + op, + field_value): + expect_op_success(duthost, output) + ensure_application_of_updated_config(duthost, configdb_field, value) + else: + expect_op_failure(output) finally: delete_tmpfile(duthost, tmpfile) diff --git a/tests/generic_config_updater/test_ip_bgp.py b/tests/generic_config_updater/test_ip_bgp.py index 70b9f318b67..9e3ec8b1c44 100644 --- a/tests/generic_config_updater/test_ip_bgp.py +++ b/tests/generic_config_updater/test_ip_bgp.py @@ -6,6 +6,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload logger = logging.getLogger(__name__) @@ -76,6 +77,7 @@ def add_deleted_ip_neighbor(duthost, ip_version=6): "value": ip_neighbor_config } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -100,6 +102,7 @@ def add_duplicate_ip_neighbor(duthost, ip_version=6): "value": ip_neighbor_config } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -132,6 +135,7 @@ def invalid_ip_neighbor(duthost, ip_version=6): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -157,6 +161,7 @@ def ip_neighbor_admin_change(duthost, ip_version=6): "value": "down" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -183,6 +188,7 @@ def delete_ip_neighbor(duthost, ip_version=6): "path": "/BGP_NEIGHBOR/{}".format(ip_neighbor_address) } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_kubernetes_config.py b/tests/generic_config_updater/test_kubernetes_config.py index 51d4234141d..a36dfeba5ab 100644 --- a/tests/generic_config_updater/test_kubernetes_config.py +++ b/tests/generic_config_updater/test_kubernetes_config.py @@ -5,6 +5,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload @@ -265,6 +266,7 @@ def k8s_config_update(duthost, test_data): for num, (json_patch, target_config, target_table, expected_result) in enumerate(test_data): tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) diff --git a/tests/generic_config_updater/test_lo_interface.py b/tests/generic_config_updater/test_lo_interface.py index 2b04831e87f..97f0aed0b35 100644 --- a/tests/generic_config_updater/test_lo_interface.py +++ b/tests/generic_config_updater/test_lo_interface.py @@ -3,8 +3,11 @@ import ipaddress from tests.common.helpers.assertions import pytest_assert +from tests.common.utilities import wait_until +from tests.common.config_reload import config_reload from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import create_path, check_show_ip_intf, check_vrf_route_for_intf @@ -72,6 +75,14 @@ def setup_env(duthosts, rand_one_dut_hostname, lo_intf): check_show_ip_intf( duthost, DEFAULT_LOOPBACK, [lo_intf["ipv6"].lower()], ["Vrf"], is_ipv4=False) + + # Loopback interface removal will impact default route. Restart bgp to recover routes. + duthost.shell("sudo systemctl restart bgp") + if not wait_until(240, 10, 0, duthost.check_default_route): + logger.warning( + "Default routes not recovered after restart bgp, restoring with `config_reload`" + ) + config_reload(duthost) finally: delete_checkpoint(duthost) @@ -111,6 +122,7 @@ def lo_interface_tc1_add_init(duthost, lo_intf): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -156,6 +168,7 @@ def lo_interface_tc1_add_duplicate(duthost, lo_intf): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -205,6 +218,7 @@ def lo_interface_tc1_xfail(duthost, lo_intf): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -258,6 +272,7 @@ def lo_interface_tc1_replace(duthost, lo_intf): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -283,6 +298,7 @@ def lo_interface_tc1_remove(duthost, lo_intf): "path": "/LOOPBACK_INTERFACE" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -325,6 +341,7 @@ def setup_vrf_config(duthost, lo_intf): "value": "Vrf_01" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -377,6 +394,7 @@ def test_lo_interface_tc2_vrf_change(rand_selected_dut, lo_intf): "value": "Vrf_02" } ] + json_patch = format_json_patch_for_multiasic(duthost=rand_selected_dut, json_data=json_patch) tmpfile = generate_tmpfile(rand_selected_dut) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_mgmt_interface.py b/tests/generic_config_updater/test_mgmt_interface.py index e5d9a220a55..cc31f4127b0 100644 --- a/tests/generic_config_updater/test_mgmt_interface.py +++ b/tests/generic_config_updater/test_mgmt_interface.py @@ -5,6 +5,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, create_path from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.utilities import wait_for_file_changed, FORCED_MGMT_ROUTE_PRIORITY @@ -56,6 +57,7 @@ def update_forced_mgmt_route(duthost, interface_address, interface_key, routes): else: json_patch[0]["op"] = "add" + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) diff --git a/tests/generic_config_updater/test_mmu_dynamic_threshold_config_update.py b/tests/generic_config_updater/test_mmu_dynamic_threshold_config_update.py index 0d80da1ed65..d9d38397f6a 100644 --- a/tests/generic_config_updater/test_mmu_dynamic_threshold_config_update.py +++ b/tests/generic_config_updater/test_mmu_dynamic_threshold_config_update.py @@ -7,6 +7,7 @@ from tests.common.helpers.dut_utils import verify_orchagent_running_or_assert from tests.common.gu_utils import apply_patch, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload pytestmark = [ @@ -122,6 +123,7 @@ def test_dynamic_th_config_updates(duthost, ensure_dut_readiness, operation, ski } json_patch.append(individual_patch) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {} created for json patch of updating dynamic threshold and operation: {}" .format(tmpfile, operation)) diff --git a/tests/generic_config_updater/test_monitor_config.py b/tests/generic_config_updater/test_monitor_config.py index 860a5676558..a184fe52d70 100644 --- a/tests/generic_config_updater/test_monitor_config.py +++ b/tests/generic_config_updater/test_monitor_config.py @@ -4,6 +4,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_res_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback, rollback_or_reload pytestmark = [ @@ -194,6 +195,7 @@ def monitor_config_add_config(duthost, get_valid_acl_ports): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_ntp.py b/tests/generic_config_updater/test_ntp.py index c54ef5a699e..c79c9b862ba 100644 --- a/tests/generic_config_updater/test_ntp.py +++ b/tests/generic_config_updater/test_ntp.py @@ -6,6 +6,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_failure, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.utilities import wait_until @@ -90,7 +91,7 @@ def check_ntp_activestate(duthost): return False return True - if not wait_until(10, 1, 0, check_ntp_activestate, duthost): + if not wait_until(60, 10, 0, check_ntp_activestate, duthost): return False output = duthost.shell("ps -o etimes -p $(systemctl show ntp.service --property ExecMainPID --value) | sed '1d'") @@ -115,6 +116,7 @@ def ntp_server_tc1_add_config(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) json_patch_bc = [ { @@ -125,6 +127,7 @@ def ntp_server_tc1_add_config(duthost): } } ] + json_patch_bc = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch_bc) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -169,6 +172,7 @@ def ntp_server_tc1_xfail(duthost): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -199,6 +203,7 @@ def ntp_server_tc1_replace(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) json_patch_bc = [ { @@ -211,6 +216,7 @@ def ntp_server_tc1_replace(duthost): "value": {} } ] + json_patch_bc = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch_bc) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -245,6 +251,7 @@ def ntp_server_tc1_remove(duthost): "path": "/NTP_SERVER" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_pfcwd_interval.py b/tests/generic_config_updater/test_pfcwd_interval.py index fd6d8d16ec6..5507d9a9d8c 100644 --- a/tests/generic_config_updater/test_pfcwd_interval.py +++ b/tests/generic_config_updater/test_pfcwd_interval.py @@ -6,6 +6,7 @@ from tests.common.utilities import wait_until from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import is_valid_platform_and_version @@ -143,7 +144,14 @@ def get_new_interval(duthost, is_valid): @pytest.mark.parametrize("field_pre_status", ["existing", "nonexistent"]) @pytest.mark.parametrize("is_valid_config_update", [True, False]) def test_pfcwd_interval_config_updates(duthost, ensure_dut_readiness, oper, - field_pre_status, is_valid_config_update): + field_pre_status, is_valid_config_update, loganalyzer): + + if not is_valid_config_update and loganalyzer and loganalyzer[duthost.hostname]: + ignore_regex_list = [ + ".*ERR.*Data Loading Failed:detection_time must be greater than or equal to POLL_INTERVAL.*" + ] + loganalyzer[duthost.hostname].ignore_regex.extend(ignore_regex_list) + new_interval = get_new_interval(duthost, is_valid_config_update) operation_to_new_value_map = {"add": "{}".format(new_interval), "replace": "{}".format(new_interval)} @@ -164,6 +172,7 @@ def test_pfcwd_interval_config_updates(duthost, ensure_dut_readiness, oper, "path": "/PFC_WD/GLOBAL/POLL_INTERVAL", "value": "{}".format(value) }] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) diff --git a/tests/generic_config_updater/test_pfcwd_status.py b/tests/generic_config_updater/test_pfcwd_status.py index 76f5828d6b5..c522c800ef4 100644 --- a/tests/generic_config_updater/test_pfcwd_status.py +++ b/tests/generic_config_updater/test_pfcwd_status.py @@ -9,6 +9,7 @@ from tests.common.helpers.dut_utils import verify_orchagent_running_or_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import is_valid_platform_and_version @@ -213,6 +214,7 @@ def test_stop_pfcwd(duthost, extract_pfcwd_config, ensure_dut_readiness, port): exp_str = interface break + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: tmpfile = generate_tmpfile(duthost) output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) @@ -256,6 +258,7 @@ def test_start_pfcwd(duthost, extract_pfcwd_config, ensure_dut_readiness, stop_p exp_str = interface break + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: tmpfile = generate_tmpfile(duthost) output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) diff --git a/tests/generic_config_updater/test_pg_headroom_update.py b/tests/generic_config_updater/test_pg_headroom_update.py index 16a0b2e6f0c..d72ab4b1fbc 100644 --- a/tests/generic_config_updater/test_pg_headroom_update.py +++ b/tests/generic_config_updater/test_pg_headroom_update.py @@ -7,6 +7,7 @@ from tests.common.helpers.dut_utils import verify_orchagent_running_or_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import is_valid_platform_and_version, get_asic_name @@ -103,6 +104,7 @@ def test_pg_headroom_update(duthost, ensure_dut_readiness, operation, skip_when_ "path": "/BUFFER_PROFILE/{}/xoff".format(profile_name), "value": "{}".format(value)}) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) if is_valid_platform_and_version(duthost, "BUFFER_PROFILE", "PG headroom modification", operation): diff --git a/tests/generic_config_updater/test_portchannel_interface.py b/tests/generic_config_updater/test_portchannel_interface.py index f7f8e0b29c4..a81021fc744 100644 --- a/tests/generic_config_updater/test_portchannel_interface.py +++ b/tests/generic_config_updater/test_portchannel_interface.py @@ -6,6 +6,7 @@ from tests.common.helpers.assertions import pytest_require from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import create_path, check_show_ip_intf @@ -99,6 +100,7 @@ def portchannel_interface_tc1_add_duplicate(duthost, portchannel_table): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -143,6 +145,7 @@ def portchannel_interface_tc1_xfail(duthost): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -185,6 +188,7 @@ def portchannel_interface_tc1_add_and_rm(duthost, portchannel_table): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -263,6 +267,7 @@ def portchannel_interface_tc2_replace(duthost): } json_patch.append(patch) + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -287,6 +292,7 @@ def portchannel_interface_tc2_incremental(duthost): "value": "Description for PortChannel101" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_syslog.py b/tests/generic_config_updater/test_syslog.py index bcf7d54b2f2..565a1404ef7 100644 --- a/tests/generic_config_updater/test_syslog.py +++ b/tests/generic_config_updater/test_syslog.py @@ -4,6 +4,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_res_success, expect_op_failure, expect_op_success from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload pytestmark = [ @@ -125,6 +126,7 @@ def syslog_server_tc1_add_init(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -162,6 +164,7 @@ def syslog_server_tc1_add_duplicate(duthost): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -205,6 +208,7 @@ def syslog_server_tc1_xfail(duthost): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -245,6 +249,7 @@ def syslog_server_tc1_replace(duthost): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -276,6 +281,7 @@ def syslog_server_tc1_remove(duthost): "path": "/SYSLOG_SERVER" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/generic_config_updater/test_vlan_interface.py b/tests/generic_config_updater/test_vlan_interface.py index b0f697534b4..1b4372c308f 100644 --- a/tests/generic_config_updater/test_vlan_interface.py +++ b/tests/generic_config_updater/test_vlan_interface.py @@ -7,6 +7,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.gu_utils import apply_patch, expect_op_success, expect_op_failure from tests.common.gu_utils import generate_tmpfile, delete_tmpfile +from tests.common.gu_utils import format_json_patch_for_multiasic from tests.common.gu_utils import create_checkpoint, delete_checkpoint, rollback_or_reload from tests.common.gu_utils import create_path, check_show_ip_intf @@ -148,6 +149,7 @@ def vlan_interface_tc1_add_duplicate(duthost, vlan_info): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) logger.info("json patch {}".format(json_patch)) @@ -233,6 +235,7 @@ def vlan_interface_tc1_xfail(duthost, vlan_info): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -304,6 +307,7 @@ def vlan_interface_tc1_add_new(duthost): } } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -362,6 +366,7 @@ def vlan_interface_tc1_replace(duthost, vlan_info): "value": {} } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -387,6 +392,7 @@ def vlan_interface_tc1_remove(duthost, vlan_info): "path": "/VLAN_INTERFACE" } ] + json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) tmpfile = generate_tmpfile(duthost) logger.info("tmpfile {}".format(tmpfile)) @@ -430,6 +436,7 @@ def test_vlan_interface_tc2_incremental_change(rand_selected_dut): "value": "incremental test for Vlan{}".format(EXIST_VLAN_ID) } ] + json_patch = format_json_patch_for_multiasic(duthost=rand_selected_dut, json_data=json_patch) tmpfile = generate_tmpfile(rand_selected_dut) logger.info("tmpfile {}".format(tmpfile)) diff --git a/tests/gnmi/conftest.py b/tests/gnmi/conftest.py index f282cbe1748..6a74fc580b9 100644 --- a/tests/gnmi/conftest.py +++ b/tests/gnmi/conftest.py @@ -4,7 +4,7 @@ from tests.common.helpers.assertions import pytest_require as pyrequire from tests.common.helpers.dut_utils import check_container_state -from tests.gnmi.helper import gnmi_container, apply_cert_config, recover_cert_config, create_ext_conf +from tests.gnmi.helper import gnmi_container, apply_cert_config, recover_cert_config, create_ext_conf, create_ca_conf from tests.gnmi.helper import GNMI_SERVER_START_WAIT_TIME from tests.common.gu_utils import create_checkpoint, rollback @@ -34,6 +34,77 @@ def download_gnmi_client(duthosts, rand_one_dut_hostname, localhost): localhost.shell("sudo chmod +x gnmi/%s" % file) +def create_revoked_cert_and_crl(localhost, ptfhost): + # Create client key + local_command = "openssl genrsa -out gnmiclient.revoked.key 2048" + localhost.shell(local_command) + + # Create client CSR + local_command = "openssl req \ + -new \ + -key gnmiclient.revoked.key \ + -subj '/CN=test.client.revoked.gnmi.sonic' \ + -out gnmiclient.revoked.csr" + localhost.shell(local_command) + + # Sign client certificate + crl_url = "http://{}:1234/crl".format(ptfhost.mgmt_ip) + create_ca_conf(crl_url, "crlext.cnf") + local_command = "openssl x509 \ + -req \ + -in gnmiclient.revoked.csr \ + -CA gnmiCA.pem \ + -CAkey gnmiCA.key \ + -CAcreateserial \ + -out gnmiclient.revoked.crt \ + -days 825 \ + -sha256 \ + -extensions req_ext -extfile crlext.cnf" + localhost.shell(local_command) + + # create crl config file + local_command = "rm -f gnmi/crl/index.txt" + localhost.shell(local_command) + local_command = "touch gnmi/crl/index.txt" + localhost.shell(local_command) + + local_command = "rm -f gnmi/crl/sonic_crl_number" + localhost.shell(local_command) + local_command = "echo 00 > gnmi/crl/sonic_crl_number" + localhost.shell(local_command) + + # revoke cert CRL + local_command = "openssl ca \ + -revoke gnmiclient.revoked.crt \ + -keyfile gnmiCA.key \ + -cert gnmiCA.pem \ + -config gnmi/crl/crl.cnf" + + localhost.shell(local_command) + + # re-create CRL + local_command = "openssl ca \ + -gencrl \ + -keyfile gnmiCA.key \ + -cert gnmiCA.pem \ + -out sonic.crl.pem \ + -config gnmi/crl/crl.cnf" + + localhost.shell(local_command) + + # copy to PTF for test + ptfhost.copy(src='gnmiclient.revoked.crt', dest='/root/') + ptfhost.copy(src='gnmiclient.revoked.key', dest='/root/') + ptfhost.copy(src='sonic.crl.pem', dest='/root/') + ptfhost.copy(src='gnmi/crl/crl_server.py', dest='/root/') + + local_command = "rm \ + crlext.cnf \ + gnmi/crl/index.* \ + gnmi/crl/sonic_crl_number.*" + localhost.shell(local_command) + + @pytest.fixture(scope="module", autouse=True) def setup_gnmi_server(duthosts, rand_one_dut_hostname, localhost, ptfhost): ''' @@ -112,6 +183,8 @@ def setup_gnmi_server(duthosts, rand_one_dut_hostname, localhost, ptfhost): -sha256" localhost.shell(local_command) + create_revoked_cert_and_crl(localhost, ptfhost) + # Copy CA certificate, server certificate and client certificate over to the DUT duthost.copy(src='gnmiCA.pem', dest='/etc/sonic/telemetry/') duthost.copy(src='gnmiserver.crt', dest='/etc/sonic/telemetry/') diff --git a/tests/gnmi/crl/crl.cnf b/tests/gnmi/crl/crl.cnf new file mode 100644 index 00000000000..bf0a3cf6ee3 --- /dev/null +++ b/tests/gnmi/crl/crl.cnf @@ -0,0 +1,23 @@ +# OpenSSL configuration for CRL generation +# +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] +database = gnmi/crl/index.txt +crlnumber = gnmi/crl/sonic_crl_number +x509_extensions = added-extensions +crl_extensions = crl_ext + + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + + +[ crl_ext ] +# Extension for CRLs (`man x509v3_config`). +authorityKeyIdentifier=keyid:always diff --git a/tests/gnmi/crl/crl_server.py b/tests/gnmi/crl/crl_server.py new file mode 100644 index 00000000000..a3aaf7d086f --- /dev/null +++ b/tests/gnmi/crl/crl_server.py @@ -0,0 +1,55 @@ +import sys +from http.server import HTTPServer, BaseHTTPRequestHandler + + +crl_content = bytes(0) + + +def log_to_file(filename, message): + with open(filename, 'a') as file: + file.write(message) + + +def load_cert(): + global crl_content + with open('sonic.crl.pem', 'rb') as file: + # Read the entire file content into a string + crl_content = file.read() + + +class writer(object): + def write(self, data): + log_to_file("crl.log", data) + + +class TempHttpServer(BaseHTTPRequestHandler): + + def do_GET(self): + try: + global crl_content + self.send_response(200) + self.send_header("Content-Type", "text/plain") + self.end_headers() + self.wfile.write(crl_content) + except Exception as e: + log_to_file("crl.log", "Handle get request exception: " + str(e)) + + +if __name__ == "__main__": + # nohup will break stderr and cause broken pipe error + sys.stdout = writer() + sys.stderr = writer() + + httpd = HTTPServer(('', 1234), TempHttpServer) + log_to_file("crl.log", "HTTPServer stated\n") + + # load cert + load_cert() + + # handle download CRL request + while True: + try: + log_to_file("crl.log", "Ready handle request\n") + httpd.serve_forever() # For GET request from client + except Exception as e: + log_to_file("crl.log", "Handle request exception: " + str(e)) diff --git a/tests/gnmi/helper.py b/tests/gnmi/helper.py index 5c06ee8c3c1..6cf4131ac07 100644 --- a/tests/gnmi/helper.py +++ b/tests/gnmi/helper.py @@ -18,6 +18,16 @@ def gnmi_container(duthost): return env.gnmi_container +def create_ca_conf(crl, filename): + text = ''' +[ req_ext ] +crlDistributionPoints=URI:%s +''' % crl + with open(filename, 'w') as file: + file.write(text) + return + + def create_ext_conf(ip, filename): text = ''' [ req_ext ] @@ -36,6 +46,7 @@ def dump_gnmi_log(duthost): dut_command = "docker exec %s cat /root/gnmi.log" % (env.gnmi_container) res = duthost.shell(dut_command, module_ignore_errors=True) logger.info("GNMI log: " + res['stdout']) + return res['stdout'] def dump_system_status(duthost): @@ -65,6 +76,10 @@ def del_gnmi_client_common_name(duthost, cname): def apply_cert_config(duthost): env = GNMIEnvironment(duthost, GNMIEnvironment.GNMI_MODE) + # Get subtype + cfg_facts = duthost.config_facts(host=duthost.hostname, source="running")['ansible_facts'] + metadata = cfg_facts["DEVICE_METADATA"]["localhost"] + subtype = metadata.get('subtype', None) # Stop all running program dut_command = "docker exec %s supervisorctl status" % (env.gnmi_container) output = duthost.shell(dut_command, module_ignore_errors=True) @@ -84,11 +99,15 @@ def apply_cert_config(duthost): dut_command += "--server_crt /etc/sonic/telemetry/gnmiserver.crt --server_key /etc/sonic/telemetry/gnmiserver.key " dut_command += "--config_table_name GNMI_CLIENT_CERT " dut_command += "--client_auth cert " + dut_command += "--enable_crl=true " + if subtype == 'SmartSwitch': + dut_command += "--zmq_address=tcp://127.0.0.1:8100 " dut_command += "--ca_crt /etc/sonic/telemetry/gnmiCA.pem -gnmi_native_write=true -v=10 >/root/gnmi.log 2>&1 &\"" duthost.shell(dut_command) # Setup gnmi client cert common name add_gnmi_client_common_name(duthost, "test.client.gnmi.sonic") + add_gnmi_client_common_name(duthost, "test.client.revoked.gnmi.sonic") time.sleep(GNMI_SERVER_START_WAIT_TIME) dut_command = "sudo netstat -nap | grep %d" % env.gnmi_port @@ -118,6 +137,7 @@ def recover_cert_config(duthost): # Remove gnmi client cert common name del_gnmi_client_common_name(duthost, "test.client.gnmi.sonic") + del_gnmi_client_common_name(duthost, "test.client.revoked.gnmi.sonic") assert wait_until(60, 3, 0, check_gnmi_status, duthost), "GNMI service failed to start" @@ -141,7 +161,7 @@ def gnmi_capabilities(duthost, localhost): return 0, output['stdout'] -def gnmi_set(duthost, ptfhost, delete_list, update_list, replace_list): +def gnmi_set(duthost, ptfhost, delete_list, update_list, replace_list, cert=None): """ Send GNMI set request with GNMI client @@ -157,13 +177,17 @@ def gnmi_set(duthost, ptfhost, delete_list, update_list, replace_list): env = GNMIEnvironment(duthost, GNMIEnvironment.GNMI_MODE) ip = duthost.mgmt_ip port = env.gnmi_port - cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd = 'python /root/gnxi/gnmi_cli_py/py_gnmicli.py ' cmd += '--timeout 30 ' cmd += '-t %s -p %u ' % (ip, port) cmd += '-xo sonic-db ' cmd += '-rcert /root/gnmiCA.pem ' - cmd += '-pkey /root/gnmiclient.key ' - cmd += '-cchain /root/gnmiclient.crt ' + if cert: + cmd += '-pkey /root/{}.key '.format(cert) + cmd += '-cchain /root/{}.crt '.format(cert) + else: + cmd += '-pkey /root/gnmiclient.key ' + cmd += '-cchain /root/gnmiclient.crt ' cmd += '-m set-update ' xpath = '' xvalue = '' @@ -217,7 +241,7 @@ def gnmi_get(duthost, ptfhost, path_list): env = GNMIEnvironment(duthost, GNMIEnvironment.GNMI_MODE) ip = duthost.mgmt_ip port = env.gnmi_port - cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd = 'python /root/gnxi/gnmi_cli_py/py_gnmicli.py ' cmd += '--timeout 30 ' cmd += '-t %s -p %u ' % (ip, port) cmd += '-xo sonic-db ' @@ -312,7 +336,7 @@ def gnmi_subscribe_streaming_sample(duthost, ptfhost, path_list, interval_ms, co env = GNMIEnvironment(duthost, GNMIEnvironment.GNMI_MODE) ip = duthost.mgmt_ip port = env.gnmi_port - cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd = 'python /root/gnxi/gnmi_cli_py/py_gnmicli.py ' cmd += '--timeout 30 ' cmd += '-t %s -p %u ' % (ip, port) cmd += '-xo sonic-db ' @@ -351,7 +375,7 @@ def gnmi_subscribe_streaming_onchange(duthost, ptfhost, path_list, count): env = GNMIEnvironment(duthost, GNMIEnvironment.GNMI_MODE) ip = duthost.mgmt_ip port = env.gnmi_port - cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd = 'python /root/gnxi/gnmi_cli_py/py_gnmicli.py ' cmd += '--timeout 30 ' cmd += '-t %s -p %u ' % (ip, port) cmd += '-xo sonic-db ' diff --git a/tests/gnmi/test_gnmi.py b/tests/gnmi/test_gnmi.py index c2203ace33e..eaabe42fcba 100644 --- a/tests/gnmi/test_gnmi.py +++ b/tests/gnmi/test_gnmi.py @@ -1,7 +1,8 @@ import pytest import logging -from .helper import gnmi_capabilities, gnmi_set, add_gnmi_client_common_name, del_gnmi_client_common_name +from .helper import gnmi_capabilities, gnmi_set, add_gnmi_client_common_name, del_gnmi_client_common_name, dump_gnmi_log +from tests.common.utilities import wait_until logger = logging.getLogger(__name__) @@ -37,16 +38,7 @@ def setup_invalid_client_cert_cname(duthosts, rand_one_dut_hostname): add_gnmi_client_common_name(duthost, "test.client.gnmi.sonic") -def test_gnmi_authorize_failed_with_invalid_cname(duthosts, - rand_one_dut_hostname, - ptfhost, - setup_invalid_client_cert_cname): - ''' - Verify GNMI native write, incremental config for configDB - GNMI set request with invalid path - ''' - duthost = duthosts[rand_one_dut_hostname] - +def gnmi_create_vnet(duthost, ptfhost, cert=None): file_name = "vnet.txt" text = "{\"Vnet1\": {\"vni\": \"1000\", \"guid\": \"559c6ce8-26ab-4193-b946-ccc6e8f930b2\"}}" with open(file_name, 'w') as file: @@ -56,9 +48,71 @@ def test_gnmi_authorize_failed_with_invalid_cname(duthosts, update_list = ["/sonic-db:APPL_DB/localhost/DASH_VNET_TABLE:@/root/%s" % (file_name)] msg = "" try: - gnmi_set(duthost, ptfhost, [], update_list, []) + gnmi_set(duthost, ptfhost, [], update_list, [], cert) except Exception as e: logger.info("Failed to set: " + str(e)) msg = str(e) + gnmi_log = dump_gnmi_log(duthost) + + return msg, gnmi_log + + +def test_gnmi_authorize_failed_with_invalid_cname(duthosts, + rand_one_dut_hostname, + ptfhost, + setup_invalid_client_cert_cname): + ''' + Verify GNMI native write, incremental config for configDB + GNMI set request with invalid path + ''' + duthost = duthosts[rand_one_dut_hostname] + msg, gnmi_log = gnmi_create_vnet(duthost, ptfhost) + + assert "Unauthenticated" in msg + assert "Failed to retrieve cert common name mapping" in gnmi_log + + +@pytest.fixture(scope="function") +def setup_crl_server_on_ptf(ptfhost): + ptfhost.shell('rm -f /root/crl.log') + ptfhost.shell('nohup python /root/crl_server.py &') + logger.warning("crl server started") + + # Wait untill HTTP server ready + def server_ready_log_exist(ptfhost): + res = ptfhost.shell("sed -n '/Ready handle request/p' /root/crl.log", module_ignore_errors=True) + logger.debug("crl.log: {}".format(res["stdout_lines"])) + return len(res["stdout_lines"]) > 0 + + wait_until(60, 1, 0, server_ready_log_exist, ptfhost) + logger.warning("crl server ready") + + yield + + # pkill will use the kill signal -9 as exit code, need ignore error + ptfhost.shell("pkill -9 -f 'python /root/crl_server.py'", module_ignore_errors=True) + + +def test_gnmi_authorize_failed_with_revoked_cert(duthosts, + rand_one_dut_hostname, + ptfhost, + setup_crl_server_on_ptf): + ''' + Verify GNMI native write, incremental config for configDB + GNMI set request with invalid path + ''' + duthost = duthosts[rand_one_dut_hostname] + + retry = 3 + msg = "" + gnmi_log = "" + while retry > 0: + retry -= 1 + msg, gnmi_log = gnmi_create_vnet(duthost, ptfhost, "gnmiclient.revoked") + # retry when download crl failed, ptf device network not stable + if "desc = Peer certificate revoked" in gnmi_log: + break + assert "Unauthenticated" in msg + assert "desc = Peer certificate revoked" in gnmi_log diff --git a/tests/gnmi/test_gnmi_configdb.py b/tests/gnmi/test_gnmi_configdb.py index 53e3b47ee06..ddbbafda369 100644 --- a/tests/gnmi/test_gnmi_configdb.py +++ b/tests/gnmi/test_gnmi_configdb.py @@ -51,12 +51,26 @@ def get_interface_status(duthost, field, interface='Ethernet0'): return output["stdout"] +def get_sonic_cfggen_output(duthost, namespace=None): + ''' + Fetch and return the sonic-cfggen output + ''' + cmd = "sonic-cfggen -d --print-data" + if namespace: + cmd = f"sonic-cfggen -n {namespace} -d --print-data" + output = duthost.shell(cmd) + assert (not output['rc']), "No output" + return (json.loads(output["stdout"])) + + def test_gnmi_configdb_incremental_01(duthosts, rand_one_dut_hostname, ptfhost): ''' Verify GNMI native write, incremental config for configDB Toggle interface admin status ''' duthost = duthosts[rand_one_dut_hostname] + if duthost.is_supervisor_node(): + pytest.skip("gnmi test relies on port data not present on supervisor card '%s'" % rand_one_dut_hostname) file_name = "port.txt" interface = get_first_interface(duthost) assert interface is not None, "Invalid interface" @@ -224,12 +238,21 @@ def test_gnmi_configdb_full_01(duthosts, rand_one_dut_hostname, ptfhost): Toggle interface admin status ''' duthost = duthosts[rand_one_dut_hostname] - output = duthost.shell("sonic-cfggen -d --print-data") - assert (not output['rc']), "No output" - dic = json.loads(output["stdout"]) - assert "PORT" in dic, "Failed to read running config" + if duthost.is_supervisor_node(): + pytest.skip("gnmi test relies on port data not present on supervisor card '%s'" % rand_one_dut_hostname) interface = get_first_interface(duthost) assert interface is not None, "Invalid interface" + + # Get ASIC namespace and check interface + if duthost.sonichost.is_multi_asic: + for asic in duthost.frontend_asics: + dic = get_sonic_cfggen_output(duthost, asic.namespace) + if interface in dic["PORT"]: + break + else: + dic = get_sonic_cfggen_output(duthost) + + assert "PORT" in dic, "Failed to read running config" assert interface in dic["PORT"], "Failed to get interface %s" % interface assert "admin_status" in dic["PORT"][interface], "Failed to get interface %s" % interface diff --git a/tests/gnmi/test_gnmi_smartswitch.py b/tests/gnmi/test_gnmi_smartswitch.py new file mode 100644 index 00000000000..6378d8b5233 --- /dev/null +++ b/tests/gnmi/test_gnmi_smartswitch.py @@ -0,0 +1,87 @@ +import json +import logging +import pytest +import uuid +from .helper import gnmi_set +from dash_api.vnet_pb2 import Vnet + +logger = logging.getLogger(__name__) + +pytestmark = [ + pytest.mark.topology('any'), + pytest.mark.disable_loganalyzer +] + + +def get_vnet_proto(vni, guid): + pb = Vnet() + pb.vni = int(vni) + pb.guid.value = bytes.fromhex(uuid.UUID(guid).hex) + return pb.SerializeToString() + + +def test_gnmi_appldb_01(duthosts, rand_one_dut_hostname, ptfhost): + ''' + Verify GNMI native write with ApplDB + Update DASH_VNET_TABLE + ''' + duthost = duthosts[rand_one_dut_hostname] + cfg_facts = duthost.config_facts(host=duthost.hostname, source="running")['ansible_facts'] + metadata = cfg_facts["DEVICE_METADATA"]["localhost"] + subtype = metadata.get('subtype', None) + type = metadata.get('type', None) + logger.info("type {}, subtype {}".format(type, subtype)) + if type != "LeafRouter" or subtype != 'SmartSwitch': + pytest.skip("This test is supported only on smartswitch platforms") + # Locate the first online DPU + # Name Description Physical-Slot Oper-Status Admin-Status Serial + # ------ ------------- --------------- ------------- -------------- -------- + # DPU0 N/A N/A Online up N/A + target = None + result = duthost.shell("show chassis module status") + headers = result['stdout_lines'][0].split() + name_idx = None + oper_status_idx = None + for i, header in enumerate(headers): + if header == "Name": + name_idx = i + if header == "Oper-Status": + oper_status_idx = i + assert name_idx is not None, "Can't locate Name in the headers" + assert oper_status_idx is not None, "Can't locate Oper-Status in the headers" + for line in result['stdout_lines']: + module_status = line.split() + if module_status[oper_status_idx] == "Online": + target = module_status[name_idx].lower() + logger.info("target is {}".format(target)) + break + assert target is not None, "Can't locate online DPU" + # Get redis port + result = duthost.shell("cat /var/run/redis%s/sonic-db/database_config.json" % target) + data = json.loads(result['stdout']) + redis_port = data['INSTANCES']['redis']['port'] + file_name = "vnet.txt" + vni = "1000" + guid = str(uuid.uuid4()) + proto = get_vnet_proto(vni, guid) + with open(file_name, 'wb') as file: + file.write(proto) + ptfhost.copy(src=file_name, dest='/root') + # Add DASH_VNET_TABLE + update_list = ["/sonic-db:APPL_DB/%s/DASH_VNET_TABLE/Vnet1:$/root/%s" % (target, file_name)] + gnmi_set(duthost, ptfhost, [], update_list, []) + # Verify APPL_DB + int_cmd = "redis-cli --raw -p %s -n 0 hget \"DASH_VNET_TABLE:Vnet1\" pb" % redis_port + int_cmd += " | dash_api_utils --table_name DASH_VNET_TABLE" + result = duthost.shell('docker exec database bash -c "%s"' % int_cmd) + vnet_config = json.loads(result["stdout"]) + assert str(vnet_config["vni"]) == vni, "DASH_VNET_TABLE is wrong: " + result["stdout"] + logger.info("DASH_VNET_TABLE is updated: {}".format(result["stdout"])) + # Remove DASH_VNET_TABLE + delete_list = ["/sonic-db:APPL_DB/%s/DASH_VNET_TABLE/Vnet1" % target] + gnmi_set(duthost, ptfhost, delete_list, [], []) + # Verify APPL_DB + int_cmd = "redis-cli --raw -p %s -n 0 hgetall \"DASH_VNET_TABLE:Vnet1\"" % redis_port + result = duthost.shell('docker exec database bash -c "%s"' % int_cmd) + assert "pb" not in result["stdout"], "DASH_VNET_TABLE is wrong: " + result["stdout"] + logger.info("DASH_VNET_TABLE is removed: {}".format(result["stdout"])) diff --git a/tests/gnmi/test_gnoi_killprocess.py b/tests/gnmi/test_gnoi_killprocess.py index fabdf281653..e25c2f7adf2 100644 --- a/tests/gnmi/test_gnoi_killprocess.py +++ b/tests/gnmi/test_gnoi_killprocess.py @@ -4,6 +4,11 @@ from tests.common.helpers.dut_utils import is_container_running +pytestmark = [ + pytest.mark.topology('any') +] + + # This test ensures functionality of KillProcess API to kill and restart a process when a valid process name is passed # When an invalid process name is passed, this test ensures that the expected error is returned @pytest.mark.parametrize("process,is_valid, expected_msg", [ diff --git a/tests/golden_config_infra/templates/sample_golden_config_db.j2 b/tests/golden_config_infra/templates/sample_golden_config_db.j2 index 07a119dd2e5..634711e4225 100644 --- a/tests/golden_config_infra/templates/sample_golden_config_db.j2 +++ b/tests/golden_config_infra/templates/sample_golden_config_db.j2 @@ -1,7 +1,9 @@ {% set portchannels= [] %} -{% for pc, value in PORTCHANNEL.items() %} - {% set _ = portchannels.append(pc) %} -{% endfor %} +{% if PORTCHANNEL is defined %} + {% for pc, value in PORTCHANNEL.items() %} + {% set _ = portchannels.append(pc) %} + {% endfor %} +{% endif %} { "NEW_FEATURE": { diff --git a/tests/hash/generic_hash_helper.py b/tests/hash/generic_hash_helper.py index df1625db8b0..f1977214741 100644 --- a/tests/hash/generic_hash_helper.py +++ b/tests/hash/generic_hash_helper.py @@ -329,6 +329,9 @@ def flap_interfaces(duthost, interfaces, portchannels=[], times=3): for interface in interfaces: shutdown_interface(duthost, interface) startup_interface(duthost, interface) + # TODO: Add sleep time for PR - https://github.com/sonic-net/sonic-buildimage/issues/20381 + # TODO: Need to remove the sleep time after the PR fixed in the future + time.sleep(60) # Check the interfaces status are up for interface in interfaces: pytest_assert(wait_until(30, 2, 0, duthost.is_interface_status_up, interface), @@ -706,7 +709,7 @@ def generate_test_params(duthost, tbinfo, mg_facts, hash_field, ipver, inner_ipv ptf_params['encap_type'] = encap_type if encap_type == 'vxlan': ptf_params['vxlan_port'] = random.choice(vxlan_port_list) - if ecmp_hash and lag_hash and hash_field == "IN_PORT" and duthost.facts['asic_type'] == "mellanox": + if hash_field == "IN_PORT" and duthost.facts['asic_type'] == "mellanox": ptf_params['balancing_range'] = balancing_range_in_port return ptf_params diff --git a/tests/hash/test_generic_hash.py b/tests/hash/test_generic_hash.py index fd9c0191d0d..71d5a0e38b6 100644 --- a/tests/hash/test_generic_hash.py +++ b/tests/hash/test_generic_hash.py @@ -150,7 +150,7 @@ def test_ecmp_hash(duthost, tbinfo, ptfhost, fine_params, mg_facts, global_hash_ with allure.step('Randomly select an ecmp hash field to test and configure the global ecmp and lag hash'): lag_hash_fields = global_hash_capabilities['lag'] lag_hash_fields = lag_hash_fields[:] - lag_hash_fields.remove(ecmp_test_hash_field) + lag_hash_fields.remove(ecmp_test_hash_field) if ecmp_test_hash_field in lag_hash_fields else None # Config the hash fields duthost.set_switch_hash_global('ecmp', [ecmp_test_hash_field]) duthost.set_switch_hash_global('lag', lag_hash_fields) @@ -210,7 +210,7 @@ def test_lag_hash(duthost, ptfhost, tbinfo, fine_params, mg_facts, restore_confi with allure.step('Randomly select a lag hash field to test and configure the global ecmp and lag hash'): ecmp_hash_fields = global_hash_capabilities['ecmp'] ecmp_hash_fields = ecmp_hash_fields[:] - ecmp_hash_fields.remove(lag_test_hash_field) + ecmp_hash_fields.remove(lag_test_hash_field) if lag_test_hash_field in ecmp_hash_fields else None # Get the interfaces for the test, downlink interface is selected randomly uplink_interfaces, downlink_interfaces = get_interfaces_for_test(duthost, mg_facts, lag_test_hash_field) # If the uplinks are not multi-member portchannels, skip the test @@ -610,6 +610,7 @@ def test_lag_member_remove_add(duthost, tbinfo, ptfhost, fine_params, mg_facts, ) +@pytest.mark.disable_loganalyzer def test_reboot(duthost, tbinfo, ptfhost, localhost, fine_params, mg_facts, restore_vxlan_port, # noqa F811 global_hash_capabilities, reboot_type, get_supported_hash_algorithms, # noqa F811 toggle_all_simulator_ports_to_upper_tor): # noqa F811 diff --git a/tests/iface_namingmode/test_iface_namingmode.py b/tests/iface_namingmode/test_iface_namingmode.py index 9c93fce086b..fb23aaecae0 100644 --- a/tests/iface_namingmode/test_iface_namingmode.py +++ b/tests/iface_namingmode/test_iface_namingmode.py @@ -10,7 +10,7 @@ from tests.common.helpers.sonic_db import redis_get_keys pytestmark = [ - pytest.mark.topology('any', 't1-multi-asic') + pytest.mark.topology('any') ] logger = logging.getLogger(__name__) @@ -728,6 +728,20 @@ def setup_check_topo(self, tbinfo): if tbinfo['topo']['type'] not in ['t2', 't1']: pytest.skip('Unsupported topology') + def check_speed_change(self, duthost, asic_index, interface, change_speed): + db_cmd = 'sudo {} CONFIG_DB HGET "PORT|{}" speed'\ + .format(duthost.asic_instance(asic_index).sonic_db_cli, + interface) + speed = duthost.shell('SONIC_CLI_IFACE_MODE={}'.format(db_cmd))['stdout'] + hwsku = duthost.facts['hwsku'] + if hwsku in ["Cisco-88-LC0-36FH-M-O36", "Cisco-88-LC0-36FH-O36"]: + if ( + (int(speed) == 400000 and int(change_speed) <= 100000) or + (int(speed) == 100000 and int(change_speed) > 200000) + ): + return False + return True + @pytest.fixture(scope='class', autouse=True) def reset_config_interface(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, sample_intf): """ @@ -745,6 +759,7 @@ def reset_config_interface(self, duthosts, enum_rand_one_per_hwsku_frontend_host interface_ip = sample_intf['ip'] native_speed = sample_intf['native_speed'] cli_ns_option = sample_intf['cli_ns_option'] + asic_index = sample_intf['asic_index'] yield @@ -752,7 +767,8 @@ def reset_config_interface(self, duthosts, enum_rand_one_per_hwsku_frontend_host duthost.shell('config interface {} ip add {} {}'.format(cli_ns_option, interface, interface_ip)) duthost.shell('config interface {} startup {}'.format(cli_ns_option, interface)) - duthost.shell('config interface {} speed {} {}'.format(cli_ns_option, interface, native_speed)) + if self.check_speed_change(duthost, asic_index, interface, native_speed): + duthost.shell('config interface {} speed {} {}'.format(cli_ns_option, interface, native_speed)) def test_config_interface_ip(self, setup_config_mode, sample_intf): """ @@ -852,6 +868,16 @@ def test_config_interface_speed(self, setup_config_mode, sample_intf, # Set speed to configure configure_speed = supported_speeds[0] if supported_speeds else native_speed + if not self.check_speed_change(duthost, asic_index, interface, configure_speed): + pytest.skip( + "Cisco-88-LC0-36FH-M-O36 and Cisco-88-LC0-36FH-O36 \ + currently does not support\ + speed change from 100G to 400G and vice versa on runtime" + ) + + db_cmd = 'sudo {} CONFIG_DB HGET "PORT|{}" speed'\ + .format(duthost.asic_instance(asic_index).sonic_db_cli, + interface) out = dutHostGuest.shell( 'SONIC_CLI_IFACE_MODE={} sudo config interface {} speed {} {}' .format(ifmode, cli_ns_option, test_intf, configure_speed)) @@ -859,10 +885,6 @@ def test_config_interface_speed(self, setup_config_mode, sample_intf, if out['rc'] != 0: pytest.fail() - db_cmd = 'sudo {} CONFIG_DB HGET "PORT|{}" speed'\ - .format(duthost.asic_instance(asic_index).sonic_db_cli, - interface) - speed = dutHostGuest.shell('SONIC_CLI_IFACE_MODE={} {}'.format(ifmode, db_cmd))['stdout'] logger.info('speed: {}'.format(speed)) diff --git a/tests/ip/test_ip_packet.py b/tests/ip/test_ip_packet.py index ac0ad5ef303..adfa7877325 100644 --- a/tests/ip/test_ip_packet.py +++ b/tests/ip/test_ip_packet.py @@ -12,7 +12,6 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.portstat_utilities import parse_column_positions from tests.common.portstat_utilities import parse_portstat -from tests.common.fixtures.ptfhost_utils import skip_traffic_test # noqa F401 from tests.common.helpers.dut_utils import is_mellanox_fanout @@ -195,12 +194,13 @@ def common_param(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, tbin .format(prefix, selected_peer_ip_ifaces_pairs[1][0]), ptf_port_idx_namespace)) def test_forward_ip_packet_with_0x0000_chksum(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a ip packet with checksum 0x0000(compute from scratch) # WHEN send the packet to DUT # THEN DUT should forward it as normal ip packet duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, ptf_indices, ingress_router_mac) = common_param pkt = testutils.simple_ip_packet( @@ -251,7 +251,8 @@ def test_forward_ip_packet_with_0x0000_chksum(self, duthosts, enum_rand_one_per_ tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -266,12 +267,13 @@ def test_forward_ip_packet_with_0x0000_chksum(self, duthosts, enum_rand_one_per_ .format(tx_ok, match_cnt)) def test_forward_ip_packet_with_0xffff_chksum_tolerant(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a ip packet with checksum 0x0000(compute from scratch) # WHEN manually set checksum as 0xffff and send the packet to DUT # THEN DUT should tolerant packet with 0xffff, forward it as normal packet duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, ptf_indices, ingress_router_mac) = common_param pkt = testutils.simple_ip_packet( @@ -322,7 +324,8 @@ def test_forward_ip_packet_with_0xffff_chksum_tolerant(self, duthosts, enum_rand tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -338,13 +341,14 @@ def test_forward_ip_packet_with_0xffff_chksum_tolerant(self, duthosts, enum_rand def test_forward_ip_packet_with_0xffff_chksum_drop(self, duthosts, localhost, enum_rand_one_per_hwsku_frontend_hostname, ptfadapter, - common_param, tbinfo, skip_traffic_test): # noqa F811 + common_param, tbinfo): # GIVEN a ip packet with checksum 0x0000(compute from scratch) # WHEN manually set checksum as 0xffff and send the packet to DUT # THEN DUT should drop packet with 0xffff and add drop count duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] if is_mellanox_fanout(duthost, localhost): pytest.skip("Not supported at Mellanox fanout") (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, @@ -397,14 +401,15 @@ def test_forward_ip_packet_with_0xffff_chksum_drop(self, duthosts, localhost, tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - # For t2 max topology, increase the tolerance value from 0.1 to 0.2 - # Set the tolerance value to 0.2 if the topology is T2 max, PKT_NUM_ZERO would be set to 200 + # For t2 max topology, increase the tolerance value from 0.1 to 0.4 + # Set the tolerance value to 0.4 if the topology is T2 max, PKT_NUM_ZERO would be set to 400 vms_num = len(tbinfo['topo']['properties']['topology']['VMs']) if tbinfo['topo']['type'] == "t2" and vms_num > 8: logger.info("Setting PKT_NUM_ZERO for t2 max topology with 0.2 tolerance") - self.PKT_NUM_ZERO = self.PKT_NUM * 0.2 + self.PKT_NUM_ZERO = self.PKT_NUM * 0.4 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -419,7 +424,7 @@ def test_forward_ip_packet_with_0xffff_chksum_drop(self, duthosts, localhost, .format(match_cnt)) def test_forward_ip_packet_recomputed_0xffff_chksum(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a ip packet, after forwarded(ttl-1) by DUT, # it's checksum will be 0xffff after wrongly incrementally recomputed # ref to https://datatracker.ietf.org/doc/html/rfc1624 @@ -428,6 +433,7 @@ def test_forward_ip_packet_recomputed_0xffff_chksum(self, duthosts, enum_rand_on # THEN DUT recompute new checksum correctly and forward packet as expected. duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, ptf_indices, ingress_router_mac) = common_param pkt = testutils.simple_ip_packet( @@ -477,7 +483,8 @@ def test_forward_ip_packet_recomputed_0xffff_chksum(self, duthosts, enum_rand_on tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -492,12 +499,13 @@ def test_forward_ip_packet_recomputed_0xffff_chksum(self, duthosts, enum_rand_on .format(tx_ok, match_cnt)) def test_forward_ip_packet_recomputed_0x0000_chksum(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a ip packet, after forwarded(ttl-1) by DUT, it's checksum will be 0x0000 after recompute from scratch # WHEN send the packet to DUT # THEN DUT recompute new checksum as 0x0000 and forward packet as expected. duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, ptf_indices, ingress_router_mac) = common_param pkt = testutils.simple_ip_packet( @@ -547,7 +555,8 @@ def test_forward_ip_packet_recomputed_0x0000_chksum(self, duthosts, enum_rand_on tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -562,11 +571,12 @@ def test_forward_ip_packet_recomputed_0x0000_chksum(self, duthosts, enum_rand_on .format(tx_ok, match_cnt)) def test_forward_normal_ip_packet(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a random normal ip packet # WHEN send the packet to DUT # THEN DUT should forward it as normal ip packet, nothing change but ttl-1 duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, ptf_indices, ingress_router_mac) = common_param pkt = testutils.simple_ip_packet( @@ -610,7 +620,8 @@ def test_forward_normal_ip_packet(self, duthosts, enum_rand_one_per_hwsku_fronte tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -625,11 +636,12 @@ def test_forward_normal_ip_packet(self, duthosts, enum_rand_one_per_hwsku_fronte .format(tx_ok, match_cnt)) def test_drop_ip_packet_with_wrong_0xffff_chksum(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a random normal ip packet, and manually modify checksum to 0xffff # WHEN send the packet to DUT # THEN DUT should drop it and add drop count duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, ptf_indices, ingress_router_mac) = common_param pkt = testutils.simple_ip_packet( @@ -665,8 +677,8 @@ def test_drop_ip_packet_with_wrong_0xffff_chksum(self, duthosts, enum_rand_one_p tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - asic_type = duthost.facts['asic_type'] - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) @@ -678,11 +690,12 @@ def test_drop_ip_packet_with_wrong_0xffff_chksum(self, duthosts, enum_rand_one_p "Dropped {} packets in tx, not in expected range".format(tx_err)) def test_drop_l3_ip_packet_non_dut_mac(self, duthosts, enum_rand_one_per_hwsku_frontend_hostname, - ptfadapter, common_param, skip_traffic_test): # noqa F811 + ptfadapter, common_param): # GIVEN a random normal ip packet, and random dest mac address # WHEN send the packet to DUT with dst_mac != ingress_router_mac to a layer 3 interface # THEN DUT should drop it and add drop count duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts["asic_type"] (peer_ip_ifaces_pair, rif_rx_ifaces, rif_support, ptf_port_idx, pc_ports_map, _, ingress_router_mac) = common_param @@ -721,12 +734,16 @@ def test_drop_l3_ip_packet_non_dut_mac(self, duthosts, enum_rand_one_per_hwsku_f tx_drp = TestIPPacket.sum_ifaces_counts(portstat_out, out_ifaces, "tx_drp") tx_rif_err = TestIPPacket.sum_ifaces_counts(rif_counter_out, out_rif_ifaces, "tx_err") if rif_support else 0 - if skip_traffic_test is True: + if asic_type == "vs": + logger.info("Skipping packet count check on VS platform") return pytest_assert(rx_ok >= self.PKT_NUM_MIN, "Received {} packets in rx, not in expected range".format(rx_ok)) - pytest_assert(rx_drp >= self.PKT_NUM_MIN, - "Dropped {} packets in rx, not in expected range".format(rx_drp)) + asic_type = duthost.facts["asic_type"] + # Packet is dropped silently on Mellanox platform if the destination MAC address is not the router MAC + if asic_type not in ["mellanox", "marvell"]: + pytest_assert(rx_drp >= self.PKT_NUM_MIN, + "Dropped {} packets in rx, not in expected range".format(rx_drp)) pytest_assert(tx_ok <= self.PKT_NUM_ZERO, "Forwarded {} packets in tx, not in expected range".format(tx_ok)) pytest_assert(max(tx_drp, tx_rif_err) <= self.PKT_NUM_ZERO, diff --git a/tests/ipfwd/test_dir_bcast.py b/tests/ipfwd/test_dir_bcast.py index 0e07ce18111..1c462271bb5 100644 --- a/tests/ipfwd/test_dir_bcast.py +++ b/tests/ipfwd/test_dir_bcast.py @@ -2,7 +2,7 @@ import json import logging -from tests.common.fixtures.ptfhost_utils import copy_ptftests_directory, skip_traffic_test # noqa F401 +from tests.common.fixtures.ptfhost_utils import copy_ptftests_directory # noqa F401 from tests.ptf_runner import ptf_runner from datetime import datetime from tests.common.dualtor.mux_simulator_control import toggle_all_simulator_ports_to_rand_selected_tor_m # noqa F401 @@ -65,7 +65,7 @@ def ptf_test_port_map(duthost, ptfhost, mg_facts, testbed_type, tbinfo): def test_dir_bcast(duthosts, rand_one_dut_hostname, ptfhost, tbinfo, - toggle_all_simulator_ports_to_rand_selected_tor_m, skip_traffic_test): # noqa F811 + toggle_all_simulator_ports_to_rand_selected_tor_m): # noqa F811 duthost = duthosts[rand_one_dut_hostname] testbed_type = tbinfo['topo']['name'] @@ -81,8 +81,6 @@ def test_dir_bcast(duthosts, rand_one_dut_hostname, ptfhost, tbinfo, 'ptf_test_port_map': PTF_TEST_PORT_MAP } log_file = "/tmp/dir_bcast.BcastTest.{}.log".format(datetime.now().strftime("%Y-%m-%d-%H:%M:%S")) - if skip_traffic_test is True: - return ptf_runner( ptfhost, 'ptftests', diff --git a/tests/ipfwd/test_nhop_group.py b/tests/ipfwd/test_nhop_group.py index 31711c18098..8f94b836fdb 100644 --- a/tests/ipfwd/test_nhop_group.py +++ b/tests/ipfwd/test_nhop_group.py @@ -14,7 +14,8 @@ from tests.common.helpers.assertions import pytest_require, pytest_assert from tests.common.cisco_data import is_cisco_device from tests.common.mellanox_data import is_mellanox_device, get_chip_type -from tests.common.innovium_data import is_innovium_device +from tests.common.marvell_teralynx_data import is_marvell_teralynx_device +from tests.common.vs_data import is_vs_device from tests.common.utilities import wait_until from tests.common.platform.device_utils import fanout_switch_port_lookup, toggle_one_link @@ -355,7 +356,7 @@ def test_nhop_group_member_count(duthost, tbinfo, loganalyzer): polling_interval = 1 sleep_time = 380 sleep_time_sync_before = 120 - elif is_innovium_device(duthost): + elif is_marvell_teralynx_device(duthost): default_max_nhop_paths = 3 polling_interval = 10 sleep_time = 120 @@ -413,7 +414,7 @@ def test_nhop_group_member_count(duthost, tbinfo, loganalyzer): # Consider both available nhop_grp and nhop_grp_mem before creating nhop_groups nhop_group_mem_count = int((nhop_group_mem_count) / default_max_nhop_paths * CISCO_NHOP_GROUP_FILL_PERCENTAGE) nhop_group_count = min(nhop_group_mem_count, nhop_group_count) - elif is_innovium_device(duthost): + elif is_marvell_teralynx_device(duthost): crm_stat = get_crm_info(duthost, asic) nhop_group_count = crm_stat["available_nhop_grp"] else: @@ -457,6 +458,8 @@ def test_nhop_group_member_count(duthost, tbinfo, loganalyzer): ) elif is_mellanox_device(duthost): logger.info("skip this check on Mellanox as ASIC resources are shared") + elif is_vs_device(duthost): + logger.info("skip this check on VS as no real ASIC") else: pytest_assert( crm_after["available_nhop_grp"] == 0, @@ -516,8 +519,13 @@ def built_and_send_tcp_ip_packet(): for flow_count in range(50): pkt, exp_pkt = build_pkt(rtr_mac, ip_route, ip_ttl, flow_count) testutils.send(ptfadapter, gather_facts['dst_port_ids'][0], pkt, 10) - (_, recv_pkt) = testutils.verify_packet_any_port(test=ptfadapter, pkt=exp_pkt, + verify_result = testutils.verify_packet_any_port(test=ptfadapter, pkt=exp_pkt, ports=gather_facts['src_port_ids']) + if isinstance(verify_result, bool): + logger.info("Using dummy testutils to skip traffic test.") + return + else: + _, recv_pkt = verify_result assert recv_pkt @@ -564,7 +572,8 @@ def built_and_send_tcp_ip_packet(): asic.stop_service("bgp") time.sleep(15) logger.info("Toggle link {} on {}".format(fanout_port, fanout)) - toggle_one_link(duthost, gather_facts['src_port'][0], fanout, fanout_port) + if is_vs_device(duthost) is False: + toggle_one_link(duthost, gather_facts['src_port'][0], fanout, fanout_port) time.sleep(15) built_and_send_tcp_ip_packet() @@ -758,6 +767,36 @@ def built_and_send_tcp_ip_packet(): 45: 'c0:ff:ee:00:00:12', 46: 'c0:ff:ee:00:00:0e', 47: 'c0:ff:ee:00:00:0f', 48: 'c0:ff:ee:00:00:0b', 49: 'c0:ff:ee:00:00:12'} + gr2_asic_flow_map = {0: 'c0:ff:ee:00:00:11', 1: 'c0:ff:ee:00:00:12', + 2: 'c0:ff:ee:00:00:0c', + 3: 'c0:ff:ee:00:00:0f', 4: 'c0:ff:ee:00:00:0b', + 5: 'c0:ff:ee:00:00:10', 6: 'c0:ff:ee:00:00:12', + 7: 'c0:ff:ee:00:00:12', 8: 'c0:ff:ee:00:00:0b', + 9: 'c0:ff:ee:00:00:0e', + 10: 'c0:ff:ee:00:00:10', 11: 'c0:ff:ee:00:00:0c', + 12: 'c0:ff:ee:00:00:0c', 13: 'c0:ff:ee:00:00:11', + 14: 'c0:ff:ee:00:00:0c', + 15: 'c0:ff:ee:00:00:0f', 16: 'c0:ff:ee:00:00:10', + 17: 'c0:ff:ee:00:00:0b', 18: 'c0:ff:ee:00:00:10', + 19: 'c0:ff:ee:00:00:0f', 20: 'c0:ff:ee:00:00:0b', + 21: 'c0:ff:ee:00:00:12', 22: 'c0:ff:ee:00:00:0f', + 23: 'c0:ff:ee:00:00:0d', 24: 'c0:ff:ee:00:00:0c', + 25: 'c0:ff:ee:00:00:0c', + 26: 'c0:ff:ee:00:00:10', 27: 'c0:ff:ee:00:00:0d', + 28: 'c0:ff:ee:00:00:11', 29: 'c0:ff:ee:00:00:12', + 30: 'c0:ff:ee:00:00:0e', 31: 'c0:ff:ee:00:00:11', + 32: 'c0:ff:ee:00:00:0e', 33: 'c0:ff:ee:00:00:0b', + 34: 'c0:ff:ee:00:00:0e', + 35: 'c0:ff:ee:00:00:0b', 36: 'c0:ff:ee:00:00:11', + 37: 'c0:ff:ee:00:00:11', 38: 'c0:ff:ee:00:00:10', + 39: 'c0:ff:ee:00:00:12', + 40: 'c0:ff:ee:00:00:11', 41: 'c0:ff:ee:00:00:0f', + 42: 'c0:ff:ee:00:00:11', 43: 'c0:ff:ee:00:00:0f', + 44: 'c0:ff:ee:00:00:0f', 45: 'c0:ff:ee:00:00:0b', + 46: 'c0:ff:ee:00:00:0f', + 47: 'c0:ff:ee:00:00:0d', 48: 'c0:ff:ee:00:00:0e', + 49: 'c0:ff:ee:00:00:0e'} + # Make sure a given flow always hash to same nexthop/neighbor. This is done to try to find issue # where SAI vendor changes Hash Function across SAI releases. Please note this will not catch the issue every time # as there is always probability even after change of Hash Function same nexthop/neighbor is selected. @@ -768,12 +807,16 @@ def built_and_send_tcp_ip_packet(): "th4": th_asic_flow_map, "td3": td3_asic_flow_map, "gr": gr_asic_flow_map, "spc1": spc_asic_flow_map, "spc2": spc_asic_flow_map, "spc3": spc_asic_flow_map, - "spc4": spc_asic_flow_map} + "spc4": spc_asic_flow_map, "gr2": gr2_asic_flow_map} vendor = duthost.facts["asic_type"] hostvars = duthost.host.options['variable_manager']._hostvars[duthost.hostname] mgFacts = duthost.get_extended_minigraph_facts(tbinfo) dutAsic = None + if vendor == "vs": + logger.info("Skipping following traffic validation on VS platform") + return + for asic, nexthop_map in list(SUPPORTED_ASIC_TO_NEXTHOP_SELECTED_MAP.items()): vendorAsic = "{0}_{1}_hwskus".format(vendor, asic) if vendorAsic in list(hostvars.keys()) and mgFacts["minigraph_hwsku"] in hostvars[vendorAsic]: @@ -836,12 +879,13 @@ def test_nhop_group_interface_flap(duthosts, enum_rand_one_per_hwsku_frontend_ho # Enable kernel flag to not evict ARP entries when the interface goes down # and shut the fanout switch ports. - duthost.shell(arp_noevict_cmd % gather_facts['src_router_intf_name']) + asic.command(arp_noevict_cmd % gather_facts['src_router_intf_name']) for i in range(0, len(gather_facts['src_port'])): fanout, fanout_port = fanout_switch_port_lookup(fanouthosts, duthost.hostname, gather_facts['src_port'][i]) logger.debug("Shut fanout sw: %s, port: %s", fanout, fanout_port) - fanout.shutdown(fanout_port) + if is_vs_device(duthost) is False: + fanout.no_shutdown(fanout_port) nhop.add_ip_route(ip_prefix, ips) nhop.program_routes() @@ -860,13 +904,19 @@ def test_nhop_group_interface_flap(duthosts, enum_rand_one_per_hwsku_frontend_ho fanout, fanout_port = fanout_switch_port_lookup(fanouthosts, duthost.hostname, gather_facts['src_port'][i]) logger.debug("No Shut fanout sw: %s, port: %s", fanout, fanout_port) - fanout.no_shutdown(fanout_port) + if is_vs_device(duthost) is False: + fanout.no_shutdown(fanout_port) time.sleep(20) duthost.shell("portstat -c") ptfadapter.dataplane.flush() testutils.send(ptfadapter, gather_facts['dst_port_ids'][0], pkt, pkt_count) - (_, recv_pkt) = testutils.verify_packet_any_port(test=ptfadapter, pkt=exp_pkt, + verify_result = testutils.verify_packet_any_port(test=ptfadapter, pkt=exp_pkt, ports=gather_facts['src_port_ids']) + if isinstance(verify_result, bool): + logger.info("Using dummy testutils to skip traffic test.") + return + else: + _, recv_pkt = verify_result # Make sure routing is done pytest_assert(scapy.Ether(recv_pkt).ttl == (ip_ttl - 1), "Routed Packet TTL not decremented") pytest_assert(scapy.Ether(recv_pkt).src == rtr_mac, "Routed Packet Source Mac is not router MAC") @@ -876,6 +926,6 @@ def test_nhop_group_interface_flap(duthosts, enum_rand_one_per_hwsku_frontend_ho logger.info("portstats: %s", result['stdout']) finally: - duthost.shell(arp_evict_cmd % gather_facts['src_router_intf_name']) + asic.command(arp_evict_cmd % gather_facts['src_router_intf_name']) nhop.delete_routes() arplist.clean_up() diff --git a/tests/l2/test_l2_configure.py b/tests/l2/test_l2_configure.py index bdb392b9e7f..5c3609a9a2b 100644 --- a/tests/l2/test_l2_configure.py +++ b/tests/l2/test_l2_configure.py @@ -4,15 +4,14 @@ import logging import pytest +import tempfile from tests.common import config_reload from tests.common.platform.processes_utils import wait_critical_processes from tests.common.helpers.assertions import pytest_assert CONFIG_DB = "/etc/sonic/config_db.json" -CONFIG_DB_BAK = "/etc/sonic/config_db.json.bak" -DUT_IMG_PATH = "/tmp/dut-sonic-img.bin" -LOCALHOST_IMG_PATH = "/tmp/localhost-sonic-img.bin" +MINIGRAPH = "/etc/sonic/minigraph.xml" logger = logging.getLogger(__name__) @@ -24,6 +23,20 @@ ] +def generate_backup_filename(prefix): + """ + @summary: Generate a backup filename. + + Args: + prefix: Prefix of the backup filename. + + Returns: + A backup filename. + """ + with tempfile.NamedTemporaryFile(prefix=prefix, suffix=".bak", delete=False) as f: + return f.name + + @pytest.fixture(autouse=True) def setup_env(duthosts, rand_one_dut_hostname): """ @@ -35,6 +48,7 @@ def setup_env(duthosts, rand_one_dut_hostname): rand_selected_dut: The fixture returns a randomly selected DuT. """ duthost = duthosts[rand_one_dut_hostname] + CONFIG_DB_BAK = generate_backup_filename("config_db.json") duthost.shell("sudo cp {} {}".format(CONFIG_DB, CONFIG_DB_BAK)) yield @@ -80,9 +94,10 @@ def get_db_version(duthost): return "" -def test_no_hardcoded_minigraph(duthosts, rand_one_dut_hostname, tbinfo): +def test_no_hardcoded_tables(duthosts, rand_one_dut_hostname, tbinfo): """ - @summary: A testcase asserts no hardcoded minigraph config is imported to config_db during L2 configuration. + @summary: A test case asserting no hardcoded tables (such as TELEMETRY and RESTAPI) + is migrated to config_db during L2 configuration. Args: duthosts: list of DUTs. @@ -99,8 +114,6 @@ def test_no_hardcoded_minigraph(duthosts, rand_one_dut_hostname, tbinfo): mgmt_fact = duthost.get_extended_minigraph_facts(tbinfo)["minigraph_mgmt_interface"] # Step 2: Configure DUT into L2 mode. - # Save original config - duthost.shell("sudo cp {} {}".format(CONFIG_DB, CONFIG_DB_BAK)) # Perform L2 configuration L2_INIT_CFG_FILE = "/tmp/init_l2_cfg.json" MGMT_CFG_FILE = "/tmp/mgmt_cfg.json" @@ -147,12 +160,17 @@ def test_no_hardcoded_minigraph(duthosts, rand_one_dut_hostname, tbinfo): logger.info( "Database version before L2 configuration reload: {}".format(db_version_before) ) + # Move minigraph away to avoid config coming from minigraph. + MINIGRAPH_BAK = generate_backup_filename("minigraph.xml") + duthost.shell("sudo mv {} {}".format(MINIGRAPH, MINIGRAPH_BAK)) config_reload(duthost) wait_critical_processes(duthost) db_version_after = get_db_version(duthost) logger.info( "Database version after L2 configuration reload: {}".format(db_version_after) ) + # Move minigraph back. + duthost.shell("sudo mv {} {}".format(MINIGRAPH_BAK, MINIGRAPH)) # Verify no minigraph config is present. for table in ["TELEMETRY", "RESTAPI"]: diff --git a/tests/lldp/test_lldp_syncd.py b/tests/lldp/test_lldp_syncd.py index 361188f0dc1..a6da6271005 100644 --- a/tests/lldp/test_lldp_syncd.py +++ b/tests/lldp/test_lldp_syncd.py @@ -1,3 +1,4 @@ + # Test plan in docs/testplan/LLDP-syncd-test-plan.md import pytest import json @@ -72,11 +73,15 @@ def get_lldpctl_output(duthost): if duthost.is_multi_asic: resultDict = {} for asic in duthost.asics: - result = duthost.shell("docker exec lldp{} /usr/sbin/lldpctl -f json".format(asic.asic_index))["stdout"] + result = duthost.shell( + "docker exec lldp{} /usr/sbin/lldpctl -f json".format(asic.asic_index) + )["stdout"] if not resultDict: resultDict = json.loads(result) else: - resultDict['lldp']['interface'].extend(json.loads(result)['lldp']['interface']) + resultDict["lldp"]["interface"].extend( + json.loads(result)["lldp"]["interface"] + ) else: result = duthost.shell("docker exec lldp /usr/sbin/lldpctl -f json")["stdout"] resultDict = json.loads(result) @@ -90,10 +95,19 @@ def get_show_lldp_table_output(duthost): return interface_list +def check_lldp_table_keys(duthost, db_instance): + # Check if LLDP_ENTRY_TABLE keys match show lldp table output + lldp_entry_keys = get_lldp_entry_keys(db_instance) + show_lldp_table_int_list = get_show_lldp_table_output(duthost) + return sorted(lldp_entry_keys) == sorted(show_lldp_table_int_list) + + def assert_lldp_interfaces( lldp_entry_keys, show_lldp_table_int_list, lldpctl_interface ): - # Verify LLDP_ENTRY_TABLE keys match show lldp table output + """ + Assert that LLDP_ENTRY_TABLE keys match show lldp table output and lldpctl output + """ pytest_assert( sorted(lldp_entry_keys) == sorted(show_lldp_table_int_list), "LLDP_ENTRY_TABLE keys do not match 'show lldp table' output", @@ -119,6 +133,9 @@ def assert_lldp_interfaces( def assert_lldp_entry_content(interface, entry_content, lldpctl_interface): + """ + Assert that LLDP_ENTRY_TABLE content matches lldpctl output + """ pytest_assert( lldpctl_interface, "No LLDP data found for {} in lldpctl output".format(interface), @@ -149,14 +166,40 @@ def assert_lldp_entry_content(interface, entry_content, lldpctl_interface): entry_content["lldp_rem_port_desc"] == port_info.get("descr", ""), "lldp_rem_port_desc does not match for {}".format(interface), ) + if "," in entry_content["lldp_rem_man_addr"]: + pytest_assert( + entry_content["lldp_rem_man_addr"].split(",") + == chassis_info.get("mgmt-ip", ""), + "lldp_rem_man_addr does not match for {}, data from DB:{}, data from lldpctl:{}".format( + interface, + entry_content["lldp_rem_man_addr"], + chassis_info.get("mgmt-ip", ""), + ), + ) + else: + pytest_assert( + entry_content["lldp_rem_man_addr"] == chassis_info.get("mgmt-ip", ""), + "lldp_rem_man_addr does not match for {}, data from DB:{}, data from lldpctl:{}".format( + interface, + entry_content["lldp_rem_man_addr"], + chassis_info.get("mgmt-ip", ""), + ), + ) + + if interface == "eth0": + expected_sys_cap_supported_result = ( + entry_content["lldp_rem_sys_cap_supported"] == "28 00" + or entry_content["lldp_rem_sys_cap_supported"] == "20 00", + ) + else: + expected_sys_cap_supported_result = ( + entry_content["lldp_rem_sys_cap_supported"] == "28 00" + ) pytest_assert( - entry_content["lldp_rem_man_addr"] == chassis_info.get("mgmt-ip", ""), - "lldp_rem_man_addr does not match for {}".format(interface), - ) - pytest_assert( - entry_content["lldp_rem_sys_cap_supported"] == "28 00", + expected_sys_cap_supported_result, "lldp_rem_sys_cap_supported does not match for {}".format(interface), ) + if interface == "eth0": expected_sys_cap_enable_result = ( entry_content["lldp_rem_sys_cap_enabled"] == "28 00" @@ -174,7 +217,7 @@ def assert_lldp_entry_content(interface, entry_content, lldpctl_interface): def verify_lldp_entry(db_instance, interface): entry_content = get_lldp_entry_content(db_instance, interface) - if entry_content: + if len(entry_content) > 1: return True else: return False @@ -188,52 +231,96 @@ def verify_lldp_table(duthost): return False -# Test case 1: Verify LLDP_ENTRY_TABLE keys match show lldp table output and lldpctl output -def test_lldp_entry_table_keys( - duthosts, enum_rand_one_per_hwsku_frontend_hostname, db_instance -): - duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] - lldp_entry_keys = get_lldp_entry_keys(db_instance) - show_lldp_table_int_list = get_show_lldp_table_output(duthost) - lldpctl_output = get_lldpctl_output(duthost) +def verify_each_interface_lldp_content(db_instance, interface, lldpctl_interfaces): + + entry_content = get_lldp_entry_content(db_instance, interface) + logger.debug("Interface {}, entry_content:{}".format(interface, entry_content)) + if isinstance(lldpctl_interfaces, dict): + lldpctl_interface = lldpctl_interfaces.get(interface) + elif isinstance(lldpctl_interfaces, list): + for iface in lldpctl_interfaces: + if list(iface.keys())[0].lower() == interface.lower(): + lldpctl_interface = iface.get(list(iface.keys())[0]) + break + assert_lldp_entry_content(interface, entry_content, lldpctl_interface) + + +def verify_all_interfaces_lldp_content(db_instance, lldp_entry_keys, lldpctl_output, show_lldp_table_int_list): + """ + Verify LLDP_ENTRY_TABLE content against lldpctl output for interfaces + """ + lldpctl_interfaces = lldpctl_output["lldp"]["interface"] assert_lldp_interfaces( - lldp_entry_keys, show_lldp_table_int_list, lldpctl_output["lldp"]["interface"] + lldp_entry_keys, show_lldp_table_int_list, lldpctl_interfaces ) + for interface in get_lldp_entry_keys(db_instance): + verify_each_interface_lldp_content(db_instance, interface, lldpctl_interfaces) -# Test case 2: Verify LLDP_ENTRY_TABLE content against lldpctl output +# Test case 1: Verify LLDP_ENTRY_TABLE content against lldpctl output def test_lldp_entry_table_content( duthosts, enum_rand_one_per_hwsku_frontend_hostname, db_instance ): duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + lldp_entry_keys = get_lldp_entry_keys(db_instance) lldpctl_output = get_lldpctl_output(duthost) - lldpctl_interfaces = lldpctl_output["lldp"]["interface"] + show_lldp_table_int_list = get_show_lldp_table_output(duthost) - for interface in get_lldp_entry_keys(db_instance): + verify_all_interfaces_lldp_content(db_instance, lldp_entry_keys, lldpctl_output, show_lldp_table_int_list) + + +# Test case 2: Verify LLDP_ENTRY_TABLE after restart syncd and orchagent +@pytest.mark.disable_loganalyzer +def test_lldp_entry_table_after_syncd_orchagent( + duthosts, enum_rand_one_per_hwsku_frontend_hostname, db_instance +): + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + if duthost.facts['asic_type'] == "vs": + pytest.skip("Skip this test case for virtual testbed") + # Verify LLDP_ENTRY_TABLE keys match show lldp table output at the start of test + keys_match = wait_until(30, 5, 0, check_lldp_table_keys, duthost, db_instance) + if not keys_match: + assert keys_match, "LLDP_ENTRY_TABLE keys do not match 'show lldp table' output" + + logging.info("Stop and start syncd and swss on DUT") + duthost.shell("docker restart syncd") + duthost.shell("docker restart swss") + wait_until(150, 5, 60, duthost.critical_services_fully_started) + # Wait until all interfaces are up and lldp entries are populated + lldp_entry_keys = get_lldp_entry_keys(db_instance) + for interface in lldp_entry_keys: + result = wait_until(120, 2, 0, verify_lldp_entry, db_instance, interface) entry_content = get_lldp_entry_content(db_instance, interface) - if isinstance(lldpctl_interfaces, dict): - lldpctl_interface = lldpctl_interfaces.get(interface) - elif isinstance(lldpctl_interfaces, list): - for iface in lldpctl_interfaces: - if list(iface.keys())[0].lower() == interface.lower(): - lldpctl_interface = iface.get(list(iface.keys())[0]) - logger.info("lldpctl_interface: {}".format(lldpctl_interface)) - break - assert_lldp_entry_content(interface, entry_content, lldpctl_interface) + pytest_assert( + result, + "After restart swss and syncd, interface {} LLDP_ENTRY_TABLE entry is not correct:{}".format( + interface, entry_content + ), + ) + # To get lldp entry keys again after all interfaces are up + lldp_entry_keys = get_lldp_entry_keys(db_instance) + lldpctl_output = get_lldpctl_output(duthost) + show_lldp_table_int_list = get_show_lldp_table_output(duthost) - # Add assertions to compare specific fields between LLDP_ENTRY_TABLE and lldpctl output + verify_all_interfaces_lldp_content(db_instance, lldp_entry_keys, lldpctl_output, show_lldp_table_int_list) # Test case 3: Verify LLDP_ENTRY_TABLE after interface flap def test_lldp_entry_table_after_flap( - duthosts, enum_rand_one_per_hwsku_frontend_hostname, db_instance, ignore_expected_loganalyzer_exceptions + duthosts, + enum_rand_one_per_hwsku_frontend_hostname, + db_instance, + ignore_expected_loganalyzer_exceptions, ): duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] # Fetch interfaces from LLDP_ENTRY_TABLE lldp_entry_keys = get_lldp_entry_keys(db_instance) show_lldp_table_int_list = get_show_lldp_table_output(duthost) lldpctl_output = get_lldpctl_output(duthost) - + lldpctl_interfaces = lldpctl_output["lldp"]["interface"] + assert_lldp_interfaces( + lldp_entry_keys, show_lldp_table_int_list, lldpctl_interfaces + ) for interface in lldp_entry_keys: if interface == "eth0": # Skip test for 'eth0' interface @@ -241,7 +328,9 @@ def test_lldp_entry_table_after_flap( # Shutdown and startup the interface asicStr = "" if duthost.is_multi_asic: - asicStr = "-n {}".format(duthost.get_port_asic_instance(interface).get_asic_namespace()) + asicStr = "-n {}".format( + duthost.get_port_asic_instance(interface).get_asic_namespace() + ) duthost.shell("sudo config interface {} shutdown {}".format(asicStr, interface)) duthost.shell("sudo config interface {} startup {}".format(asicStr, interface)) result = wait_until(60, 2, 10, verify_lldp_entry, db_instance, interface) @@ -251,30 +340,7 @@ def test_lldp_entry_table_after_flap( interface ), ) - lldpctl_interfaces = lldpctl_output["lldp"]["interface"] - assert_lldp_interfaces( - lldp_entry_keys, show_lldp_table_int_list, lldpctl_interfaces - ) - entry_content = get_lldp_entry_content(db_instance, interface) - logger.info("entry_content={}".format(entry_content)) - if isinstance(lldpctl_interfaces, dict): - lldpctl_interface = lldpctl_interfaces.get(interface) - logger.info( - "lldpctl_interfaces type dict, lldpctl_interface: {}".format( - lldpctl_interface - ) - ) - elif isinstance(lldpctl_interfaces, list): - for iface in lldpctl_interfaces: - if list(iface.keys())[0].lower() == interface.lower(): - lldpctl_interface = iface.get(list(iface.keys())[0]) - logger.info( - "lldpctl_interfaces type list, lldpctl_interface: {}".format( - lldpctl_interface - ) - ) - break - assert_lldp_entry_content(interface, entry_content, lldpctl_interface) + verify_each_interface_lldp_content(db_instance, interface, lldpctl_interfaces) # Test case 4: Verify LLDP_ENTRY_TABLE after system reboot @@ -288,32 +354,20 @@ def test_lldp_entry_table_after_lldp_restart( # Restart the LLDP service for asic in duthost.asics: - duthost.shell("sudo systemctl restart {}".format(asic.get_service_name('lldp'))) + duthost.shell("sudo systemctl restart {}".format(asic.get_service_name("lldp"))) result = wait_until( 60, 2, 20, verify_lldp_table, duthost ) # Adjust based on LLDP service restart time pytest_assert(result, "no output for show lldp table after restarting lldp") for asic in duthost.asics: - result = duthost.shell("sudo systemctl status {}".format(asic.get_service_name('lldp')))["stdout"] + result = duthost.shell( + "sudo systemctl status {}".format(asic.get_service_name("lldp")) + )["stdout"] pytest_assert( "active (running)" in result, "LLDP service is not running", ) - lldpctl_interfaces = lldpctl_output["lldp"]["interface"] - assert_lldp_interfaces( - lldp_entry_keys, show_lldp_table_int_list, lldpctl_interfaces - ) - for interface in lldp_entry_keys: - entry_content = get_lldp_entry_content(db_instance, interface) - logger.debug("entry_content:{}".format(entry_content)) - if isinstance(lldpctl_interfaces, dict): - lldpctl_interface = lldpctl_interfaces.get(interface) - elif isinstance(lldpctl_interfaces, list): - for iface in lldpctl_interfaces: - if list(iface.keys())[0].lower() == interface.lower(): - lldpctl_interface = iface.get(list(iface.keys())[0]) - break - assert_lldp_entry_content(interface, entry_content, lldpctl_interface) + verify_all_interfaces_lldp_content(db_instance, lldp_entry_keys, lldpctl_output, show_lldp_table_int_list) # Test case 5: Verify LLDP_ENTRY_TABLE after reboot @@ -322,6 +376,7 @@ def test_lldp_entry_table_after_reboot( localhost, duthosts, enum_rand_one_per_hwsku_frontend_hostname, db_instance ): duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + # reboot logging.info("Run cold reboot on DUT") reboot( @@ -333,21 +388,13 @@ def test_lldp_entry_table_after_reboot( safe_reboot=True, check_intf_up_ports=True ) + + # Wait till we have all lldp entries in the DB after reboot. It's found in scaling + # setup this may take some time to happen. + keys_match = wait_until(90, 5, 30, check_lldp_table_keys, duthost, db_instance) + if not keys_match: + assert keys_match, "LLDP_ENTRY_TABLE keys do not match 'show lldp table' output" lldp_entry_keys = get_lldp_entry_keys(db_instance) lldpctl_output = get_lldpctl_output(duthost) show_lldp_table_int_list = get_show_lldp_table_output(duthost) - lldpctl_interfaces = lldpctl_output["lldp"]["interface"] - assert_lldp_interfaces( - lldp_entry_keys, show_lldp_table_int_list, lldpctl_interfaces - ) - for interface in get_lldp_entry_keys(db_instance): - entry_content = get_lldp_entry_content(db_instance, interface) - - if isinstance(lldpctl_interfaces, dict): - lldpctl_interface = lldpctl_interfaces.get(interface) - elif isinstance(lldpctl_interfaces, list): - for iface in lldpctl_interfaces: - if list(iface.keys())[0].lower() == interface.lower(): - lldpctl_interface = iface.get(list(iface.keys())[0]) - break - assert_lldp_entry_content(interface, entry_content, lldpctl_interface) + verify_all_interfaces_lldp_content(db_instance, lldp_entry_keys, lldpctl_output, show_lldp_table_int_list) diff --git a/tests/macsec/__init__.py b/tests/macsec/__init__.py index 234c61c8485..e69de29bb2d 100644 --- a/tests/macsec/__init__.py +++ b/tests/macsec/__init__.py @@ -1,266 +0,0 @@ -import collections -import json -import logging -import os -import sys -from ipaddress import ip_address, IPv4Address - -import natsort -import pytest - -if sys.version_info.major > 2: - from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent)) - -from .macsec_config_helper import enable_macsec_feature -from .macsec_config_helper import disable_macsec_feature -from .macsec_config_helper import setup_macsec_configuration -from .macsec_config_helper import cleanup_macsec_configuration -# flake8: noqa: F401 -from tests.common.plugins.sanity_check import sanity_check - -logger = logging.getLogger(__name__) - - -class MacsecPlugin(object): - """ - Pytest macsec plugin - """ - - def __init__(self): - with open(os.path.dirname(__file__) + '/profile.json') as f: - self.macsec_profiles = json.load(f) - for k, v in list(self.macsec_profiles.items()): - self.macsec_profiles[k]["name"] = k - # Set default value - if "rekey_period" not in v: - self.macsec_profiles[k]["rekey_period"] = 0 - - def _generate_macsec_profile(self, metafunc): - value = metafunc.config.getoption("macsec_profile") - if value == 'all': - return natsort.natsorted(list(self.macsec_profiles.keys())) - return [x for x in value.split(',') if x in self.macsec_profiles] - - def pytest_generate_tests(self, metafunc): - if 'macsec_profile' in metafunc.fixturenames: - profiles = self._generate_macsec_profile(metafunc) - assert profiles, "Specify valid macsec profile!" - metafunc.parametrize('macsec_profile', - [self.macsec_profiles[x] for x in profiles], - ids=profiles, - scope="module") - - def get_ctrl_nbr_names(self, macsec_duthost, nbrhosts, tbinfo): - return NotImplementedError() - - def downstream_neighbor(self,tbinfo, neighbor): - return NotImplementedError() - - def upstream_neighbor(self,tbinfo, neighbor): - return NotImplementedError() - - @pytest.fixture(scope="module") - def start_macsec_service(self, macsec_duthost, macsec_nbrhosts): - def __start_macsec_service(): - enable_macsec_feature(macsec_duthost, macsec_nbrhosts) - return __start_macsec_service - - @pytest.fixture(scope="module") - def stop_macsec_service(self, macsec_duthost, macsec_nbrhosts): - def __stop_macsec_service(): - disable_macsec_feature(macsec_duthost, macsec_nbrhosts) - return __stop_macsec_service - - @pytest.fixture(scope="module") - def macsec_feature(self, start_macsec_service, stop_macsec_service): - start_macsec_service() - yield - stop_macsec_service() - - @pytest.fixture(scope="module") - def startup_macsec(self, request, macsec_duthost, ctrl_links, macsec_profile, tbinfo): - topo_name = tbinfo['topo']['name'] - def __startup_macsec(): - profile = macsec_profile - if request.config.getoption("neighbor_type") == "eos": - if macsec_duthost.facts["asic_type"] == "vs" and profile['send_sci'] == "false": - # On EOS, portchannel mac is not same as the member port mac (being as SCI), - # then src mac is not equal to SCI in its sending packet. The receiver of vSONIC - # will drop it for macsec kernel module does not correctly handle it. - pytest.skip( - "macsec on dut vsonic, neighbor eos, send_sci false") - if 't2' not in topo_name: - cleanup_macsec_configuration(macsec_duthost, ctrl_links, profile['name']) - setup_macsec_configuration(macsec_duthost, ctrl_links, - profile['name'], profile['priority'], profile['cipher_suite'], - profile['primary_cak'], profile['primary_ckn'], profile['policy'], - profile['send_sci'], profile['rekey_period']) - logger.info( - "Setup MACsec configuration with arguments:\n{}".format(locals())) - return __startup_macsec - - @pytest.fixture(scope="module") - def shutdown_macsec(self, macsec_duthost, ctrl_links, macsec_profile): - def __shutdown_macsec(): - profile = macsec_profile - cleanup_macsec_configuration(macsec_duthost, ctrl_links, profile['name']) - return __shutdown_macsec - - @pytest.fixture(scope="module", autouse=True) - def macsec_setup(self, startup_macsec, shutdown_macsec, macsec_feature): - ''' - setup macsec links - ''' - startup_macsec() - yield - shutdown_macsec() - - @pytest.fixture(scope="module") - def macsec_nbrhosts(self, ctrl_links): - return {nbr["name"]: nbr for nbr in list(ctrl_links.values())} - - @pytest.fixture(scope="module") - def ctrl_links(self, macsec_duthost, tbinfo, nbrhosts): - - if not nbrhosts: - topo_name = tbinfo['topo']['name'] - pytest.skip("None of neighbors on topology {}".format(topo_name)) - - ctrl_nbr_names = self.get_ctrl_nbr_names(macsec_duthost, nbrhosts, tbinfo) - logger.info("Controlled links {}".format(ctrl_nbr_names)) - nbrhosts = {name: nbrhosts[name] for name in ctrl_nbr_names} - return self.find_links_from_nbr(macsec_duthost, tbinfo, nbrhosts) - - @pytest.fixture(scope="module") - def unctrl_links(self, macsec_duthost, tbinfo, nbrhosts, ctrl_links): - unctrl_nbr_names = set(nbrhosts.keys()) - for _, nbr in ctrl_links.items(): - if nbr["name"] in unctrl_nbr_names: - unctrl_nbr_names.remove(nbr["name"]) - - logger.info("Uncontrolled links {}".format(unctrl_nbr_names)) - nbrhosts = {name: nbrhosts[name] for name in unctrl_nbr_names} - return self.find_links_from_nbr(macsec_duthost, tbinfo, nbrhosts) - - @pytest.fixture(scope="module") - def downstream_links(self, macsec_duthost, tbinfo, nbrhosts): - links = collections.defaultdict(dict) - - def filter(interface, neighbor, mg_facts, tbinfo): - if self.downstream_neighbor(tbinfo, neighbor): - port = mg_facts["minigraph_neighbors"][interface]["port"] - if interface not in mg_facts["minigraph_ptf_indices"]: - logger.info("Interface {} not in minigraph_ptf_indices".format(interface)) - return - links[interface] = { - "name": neighbor["name"], - "ptf_port_id": mg_facts["minigraph_ptf_indices"][interface], - "port": port - } - self.find_links(macsec_duthost, tbinfo, filter) - return links - - @pytest.fixture(scope="module") - def upstream_links(self, macsec_duthost, tbinfo, nbrhosts): - links = collections.defaultdict(dict) - - def filter(interface, neighbor, mg_facts, tbinfo): - if self.upstream_neighbor(tbinfo, neighbor): - for item in mg_facts["minigraph_bgp"]: - if item["name"] == neighbor["name"]: - if isinstance(ip_address(item["addr"]), IPv4Address): - # The address of neighbor device - local_ipv4_addr = item["addr"] - # The address of DUT - peer_ipv4_addr = item["peer_addr"] - break - if interface not in mg_facts["minigraph_ptf_indices"]: - logger.info("Interface {} not in minigraph_ptf_indices".format(interface)) - return - port = mg_facts["minigraph_neighbors"][interface]["port"] - links[interface] = { - "name": neighbor["name"], - "ptf_port_id": mg_facts["minigraph_ptf_indices"][interface], - "local_ipv4_addr": local_ipv4_addr, - "peer_ipv4_addr": peer_ipv4_addr, - "port": port, - "host": nbrhosts[neighbor["name"]]["host"] - } - self.find_links(macsec_duthost, tbinfo, filter) - return links - - def find_links(self, duthost, tbinfo, filter): - - mg_facts = duthost.get_extended_minigraph_facts(tbinfo) - for interface, neighbor in mg_facts["minigraph_neighbors"].items(): - filter(interface, neighbor, mg_facts, tbinfo) - - def is_interface_portchannel_member(self, pc, interface): - for pc_name, elements in list(pc.items()): - if interface in elements['members']: - return True - return False - - def find_links_from_nbr(self, duthost, tbinfo, nbrhosts): - links = collections.defaultdict(dict) - def filter(interface, neighbor, mg_facts, tbinfo): - if neighbor["name"] not in list(nbrhosts.keys()): - return - port = mg_facts["minigraph_neighbors"][interface]["port"] - - links[interface] = { - "name": neighbor["name"], - "host": nbrhosts[neighbor["name"]]["host"], - "port": port, - "dut_name": duthost.hostname - } - self.find_links(duthost, tbinfo, filter) - return links - -class MacsecPluginT0(MacsecPlugin): - """ - Pytest macsec plugin - """ - - - def __init__(self): - super(MacsecPluginT0, self).__init__() - - def get_ctrl_nbr_names(self, macsec_duthost, nbrhosts, tbinfo): - ctrl_nbr_names = natsort.natsorted(nbrhosts.keys())[:2] - return ctrl_nbr_names - - def downstream_neighbor(self,tbinfo, neighbor): - if (tbinfo["topo"]["type"] == "t0" and "Server" in neighbor["name"]): - return True - return False - - def upstream_neighbor(self,tbinfo, neighbor): - if (tbinfo["topo"]["type"] == "t0" and "T1" in neighbor["name"]): - return True - return False - -class MacsecPluginT2(MacsecPlugin): - """ - Pytest macsec plugin - """ - - - def __init__(self): - super(MacsecPluginT2, self).__init__() - - def get_ctrl_nbr_names(self, macsec_duthost, nbrhosts, tbinfo): - mg_facts = macsec_duthost.get_extended_minigraph_facts(tbinfo) - ctrl_nbr_names = mg_facts['macsec_neighbors'] - return ctrl_nbr_names - - def downstream_neighbor(self,tbinfo, neighbor): - if ("t2" in tbinfo["topo"]["type"] and "T1" in neighbor["name"]): - return True - return False - - def upstream_neighbor(self,tbinfo, neighbor): - if ("t2" in tbinfo["topo"]["type"] and "T3" in neighbor["name"]): - return True - return False diff --git a/tests/macsec/conftest.py b/tests/macsec/conftest.py index 352887c41d3..d7b1bc6b2a6 100644 --- a/tests/macsec/conftest.py +++ b/tests/macsec/conftest.py @@ -1,6 +1,6 @@ import pytest -from .macsec_helper import check_appl_db +from tests.common.macsec.macsec_helper import check_appl_db from tests.common.utilities import wait_until diff --git a/tests/macsec/test_controlplane.py b/tests/macsec/test_controlplane.py index 61ffb58e02b..ad140df323c 100644 --- a/tests/macsec/test_controlplane.py +++ b/tests/macsec/test_controlplane.py @@ -5,9 +5,9 @@ from tests.common.utilities import wait_until from tests.common.devices.eos import EosHost -from .macsec_helper import check_wpa_supplicant_process, check_appl_db, check_mka_session,\ +from tests.common.macsec.macsec_helper import check_wpa_supplicant_process, check_appl_db, check_mka_session,\ get_mka_session, get_sci, get_appl_db, get_ipnetns_prefix -from .macsec_platform_helper import get_platform, get_macsec_ifname +from tests.common.macsec.macsec_platform_helper import get_platform, get_macsec_ifname logger = logging.getLogger(__name__) diff --git a/tests/macsec/test_dataplane.py b/tests/macsec/test_dataplane.py index b70eac40ae9..39bc528d025 100644 --- a/tests/macsec/test_dataplane.py +++ b/tests/macsec/test_dataplane.py @@ -7,9 +7,9 @@ from collections import Counter from tests.common.devices.eos import EosHost -from .macsec_helper import create_pkt, create_exp_pkt, check_macsec_pkt,\ - get_ipnetns_prefix, get_macsec_sa_name, get_macsec_counters -from .macsec_platform_helper import get_portchannel, find_portchannel_from_member +from tests.common.macsec.macsec_helper import create_pkt, create_exp_pkt, check_macsec_pkt,\ + get_ipnetns_prefix, clear_macsec_counters, get_macsec_counters +from tests.common.macsec.macsec_platform_helper import get_portchannel, find_portchannel_from_member logger = logging.getLogger(__name__) @@ -119,6 +119,18 @@ def test_neighbor_to_neighbor(self, duthost, ctrl_links, upstream_links, wait_mk requester["host"].shell("ip route del 0.0.0.0/0 via {}".format( requester["peer_ipv4_addr"]), module_ignore_errors=True) + def _get_counters(self, duthost, up_ports): + egress_counters = Counter() + ingress_counters = Counter() + for up_port in up_ports: + + egress_dict, ingress_dict = get_macsec_counters(duthost, up_port) + + egress_counters += Counter(egress_dict) + ingress_counters += Counter(ingress_dict) + + return (egress_counters, ingress_counters) + def test_counters(self, duthost, ctrl_links, upstream_links, rekey_period, wait_mka_establish): if rekey_period: pytest.skip("Counter increase is not guaranteed in case rekey is happening") @@ -143,21 +155,8 @@ def test_counters(self, duthost, ctrl_links, upstream_links, rekey_period, wait_ else: up_ports = [port_name] - # Sum up start counter - egress_start_counters = Counter() - ingress_start_counters = Counter() - for up_port in up_ports: - assert up_port in ctrl_links - - asic = duthost.get_port_asic_instance(up_port) - ns = duthost.get_namespace_from_asic_id(asic.asic_index) if duthost.is_multi_asic else '' - egress_sa_name = get_macsec_sa_name(asic, up_port, True) - ingress_sa_name = get_macsec_sa_name(asic, up_port, False) - if not egress_sa_name or not ingress_sa_name: - continue - - egress_start_counters += Counter(get_macsec_counters(asic, ns, egress_sa_name)) - ingress_start_counters += Counter(get_macsec_counters(asic, ns, ingress_sa_name)) + # get start counter + egress_start_counters, ingress_start_counters = self._get_counters(duthost, up_ports) # Launch traffic ret = duthost.command( @@ -165,19 +164,8 @@ def test_counters(self, duthost, ctrl_links, upstream_links, rekey_period, wait_ assert not ret['failed'] sleep(10) # wait 10s for polling counters - # Sum up end counter - egress_end_counters = Counter() - ingress_end_counters = Counter() - for up_port in up_ports: - asic = duthost.get_port_asic_instance(up_port) - ns = duthost.get_namespace_from_asic_id(asic.asic_index) if duthost.is_multi_asic else '' - egress_sa_name = get_macsec_sa_name(asic, up_port, True) - ingress_sa_name = get_macsec_sa_name(asic, up_port, False) - if not egress_sa_name or not ingress_sa_name: - continue - - egress_end_counters += Counter(get_macsec_counters(asic, ns, egress_sa_name)) - ingress_end_counters += Counter(get_macsec_counters(asic, ns, ingress_sa_name)) + # get end counter + egress_end_counters, ingress_end_counters = self._get_counters(duthost, up_ports) i = 'SAI_MACSEC_SA_ATTR_CURRENT_XPN' assert egress_end_counters[i] - egress_start_counters[i] >= PKT_NUM @@ -198,3 +186,48 @@ def test_counters(self, duthost, ctrl_links, upstream_links, rekey_period, wait_ assert ingress_end_counters[i] - ingress_start_counters[i] >= PKT_NUM * PKT_OCTET else: assert ingress_end_counters[i] - ingress_start_counters[i] >= PKT_NUM + + def test_clear_counters(self, duthost, ctrl_links, upstream_links, rekey_period, wait_mka_establish): + if rekey_period: + pytest.skip("Counter increase is not guaranteed in case rekey is happening") + + PKT_NUM = 5 + PKT_OCTET = 1024 + + # Select some one macsec link + port_name = list(ctrl_links)[0] + nbr_ip_addr = upstream_links[port_name]['local_ipv4_addr'] + pc = find_portchannel_from_member(port_name, get_portchannel(duthost)) + if pc: + assert pc["status"] == "Up" + up_ports = pc["members"] + else: + up_ports = [port_name] + + # Launch some traffic + ret = duthost.command( + "{} ping -c {} -s {} {}".format(get_ipnetns_prefix(duthost, port_name), PKT_NUM, PKT_OCTET, nbr_ip_addr)) + assert not ret['failed'] + sleep(10) # wait 10s for polling counters + + egress_end_counters, ingress_end_counters = self._get_counters(duthost, up_ports) + + clear_macsec_counters(duthost) + + egress_cleared_counters, ingress_cleared_counters = self._get_counters(duthost, up_ports) + + for counter in egress_end_counters: + if counter.startswith('SAI_MACSEC_SA_STAT'): + if egress_end_counters[counter] != 0: + assert egress_cleared_counters[counter] < egress_end_counters[counter] + else: + # Non stats should not reset + assert egress_cleared_counters[counter] >= egress_end_counters[counter] + + for counter in ingress_end_counters: + if counter.startswith('SAI_MACSEC_SA_STAT'): + if ingress_end_counters[counter] != 0: + assert ingress_cleared_counters[counter] < ingress_end_counters[counter] + else: + # Non stats should not reset + assert ingress_cleared_counters[counter] >= ingress_end_counters[counter] diff --git a/tests/macsec/test_deployment.py b/tests/macsec/test_deployment.py index 58b3278ff02..753434ca2aa 100644 --- a/tests/macsec/test_deployment.py +++ b/tests/macsec/test_deployment.py @@ -3,7 +3,8 @@ from tests.common.utilities import wait_until from tests.common import config_reload -from .macsec_helper import check_appl_db +from tests.common.macsec.macsec_helper import check_appl_db, get_appl_db +from time import sleep logger = logging.getLogger(__name__) pytestmark = [ @@ -13,13 +14,57 @@ class TestDeployment(): + MKA_TIMEOUT = 6 + @pytest.mark.disable_loganalyzer def test_config_reload(self, duthost, ctrl_links, policy, cipher_suite, send_sci, wait_mka_establish): # Save the original config file - duthost.shell("cp /etc/sonic/config_db.json config_db.json") + duthost.shell("cp /etc/sonic/config_db*.json /tmp") # Save the current config file - duthost.shell("sonic-cfggen -d --print-data > /etc/sonic/config_db.json") + duthost.shell("config save -y") config_reload(duthost) assert wait_until(300, 6, 12, check_appl_db, duthost, ctrl_links, policy, cipher_suite, send_sci) # Recover the original config file - duthost.shell("sudo cp config_db.json /etc/sonic/config_db.json") + duthost.shell("sudo mv /tmp/config_db*.json /etc/sonic") + + @pytest.mark.disable_loganalyzer + def test_scale_rekey(self, duthost, ctrl_links, rekey_period, wait_mka_establish): + dut_egress_sa_table_orig = {} + dut_ingress_sa_table_orig = {} + dut_egress_sa_table_current = {} + dut_ingress_sa_table_current = {} + new_dut_egress_sa_table = {} + new_dut_ingress_sa_table = {} + + # Shut the interface and wait for all macsec sessions to be down + for dut_port, nbr in ctrl_links.items(): + _, _, _, dut_egress_sa_table_orig[dut_port], dut_ingress_sa_table_orig[dut_port] = get_appl_db( + duthost, dut_port, nbr["host"], nbr["port"]) + intf_asic = duthost.get_port_asic_instance(dut_port) + intf_asic.shutdown_interface(dut_port) + + sleep(TestDeployment.MKA_TIMEOUT) + + # Unshut the interfaces so that macsec sessions come back up + for dut_port, nbr in ctrl_links.items(): + intf_asic = duthost.get_port_asic_instance(dut_port) + intf_asic.startup_interface(dut_port) + + for dut_port, nbr in ctrl_links.items(): + def check_new_mka_session(): + _, _, _, dut_egress_sa_table_current[dut_port], dut_ingress_sa_table_current[dut_port] = get_appl_db( + duthost, dut_port, nbr["host"], nbr["port"]) + assert dut_egress_sa_table_orig[dut_port] != dut_egress_sa_table_current[dut_port] + assert dut_ingress_sa_table_orig[dut_port] != dut_ingress_sa_table_current[dut_port] + return True + assert wait_until(30, 2, 2, check_new_mka_session) + + # if rekey_period for the profile is valid, Wait for rekey and make sure all sessions are present + if rekey_period != 0: + sleep(rekey_period * 2) + + for dut_port, nbr in ctrl_links.items(): + _, _, _, new_dut_egress_sa_table[dut_port], new_dut_ingress_sa_table[dut_port] = get_appl_db( + duthost, dut_port, nbr["host"], nbr["port"]) + assert dut_egress_sa_table_current[dut_port] != new_dut_egress_sa_table[dut_port] + assert dut_ingress_sa_table_current[dut_port] != new_dut_ingress_sa_table[dut_port] diff --git a/tests/macsec/test_docker_restart.py b/tests/macsec/test_docker_restart.py index a4fa0bd6664..eda0c32278c 100644 --- a/tests/macsec/test_docker_restart.py +++ b/tests/macsec/test_docker_restart.py @@ -2,7 +2,7 @@ import logging from tests.common.utilities import wait_until -from .macsec_helper import check_appl_db +from tests.common.macsec.macsec_helper import check_appl_db logger = logging.getLogger(__name__) diff --git a/tests/macsec/test_fault_handling.py b/tests/macsec/test_fault_handling.py index 53c19007e9c..1d2f94cb92e 100644 --- a/tests/macsec/test_fault_handling.py +++ b/tests/macsec/test_fault_handling.py @@ -4,9 +4,10 @@ from tests.common.utilities import wait_until from tests.common.devices.eos import EosHost -from .macsec_helper import get_appl_db -from .macsec_config_helper import disable_macsec_port, enable_macsec_port, delete_macsec_profile, set_macsec_profile -from .macsec_platform_helper import get_eth_ifname, find_portchannel_from_member, get_portchannel +from tests.common.macsec.macsec_helper import get_appl_db +from tests.common.macsec.macsec_config_helper import disable_macsec_port, \ + enable_macsec_port, delete_macsec_profile, set_macsec_profile +from tests.common.macsec.macsec_platform_helper import get_eth_ifname, find_portchannel_from_member, get_portchannel logger = logging.getLogger(__name__) @@ -96,7 +97,9 @@ def test_mismatch_macsec_configuration(self, duthost, unctrl_links, profile_name, default_priority, cipher_suite, primary_cak, primary_ckn, policy, send_sci, wait_mka_establish): # Only pick one uncontrolled link for mismatch macsec configuration test - assert unctrl_links + if not unctrl_links: + pytest.skip('SKIP this test as there are no uncontrolled links in this dut') + port_name, nbr = list(unctrl_links.items())[0] disable_macsec_port(duthost, port_name) diff --git a/tests/macsec/test_interop_protocol.py b/tests/macsec/test_interop_protocol.py index 78bfd23657d..5d88f16fb5f 100644 --- a/tests/macsec/test_interop_protocol.py +++ b/tests/macsec/test_interop_protocol.py @@ -3,9 +3,10 @@ import ipaddress from tests.common.utilities import wait_until -from .macsec_helper import getns_prefix -from .macsec_config_helper import disable_macsec_port, enable_macsec_port -from .macsec_platform_helper import find_portchannel_from_member, get_portchannel, get_lldp_list, sonic_db_cli +from tests.common.macsec.macsec_helper import getns_prefix +from tests.common.macsec.macsec_config_helper import disable_macsec_port, enable_macsec_port +from tests.common.macsec.macsec_platform_helper import find_portchannel_from_member, \ + get_portchannel, get_lldp_list, sonic_db_cli from tests.common.helpers.snmp_helpers import get_snmp_output logger = logging.getLogger(__name__) @@ -53,6 +54,13 @@ def test_lldp(self, duthost, ctrl_links, profile_name, wait_mka_establish): # select one macsec link for ctrl_port, nbr in list(ctrl_links.items()): + # With dnx platform skip portchannel interfaces. + dnx_platform = duthost.facts.get("platform_asic") == 'broadcom-dnx' + if dnx_platform: + pc = find_portchannel_from_member(ctrl_port, get_portchannel(duthost)) + if pc: + continue + assert wait_until(LLDP_TIMEOUT, LLDP_ADVERTISEMENT_INTERVAL, 0, lambda: nbr["name"] in get_lldp_list(duthost)) @@ -96,6 +104,12 @@ def check_bgp_established(ctrl_port, up_link): # Check the BGP sessions are present after port macsec disabled for ctrl_port, nbr in list(ctrl_links.items()): + # With dnx platform skip portchannel interfaces. + dnx_platform = duthost.facts.get("platform_asic") == 'broadcom-dnx' + if dnx_platform: + pc = find_portchannel_from_member(ctrl_port, get_portchannel(duthost)) + if pc: + continue disable_macsec_port(duthost, ctrl_port) disable_macsec_port(nbr["host"], nbr["port"]) wait_until(BGP_TIMEOUT, 3, 0, @@ -107,6 +121,14 @@ def check_bgp_established(ctrl_port, up_link): # Check the BGP sessions are present after port macsec enabled for ctrl_port, nbr in list(ctrl_links.items()): + + # With dnx platform skip portchannel interfaces. + dnx_platform = duthost.facts.get("platform_asic") == 'broadcom-dnx' + if dnx_platform: + pc = find_portchannel_from_member(ctrl_port, get_portchannel(duthost)) + if pc: + continue + enable_macsec_port(duthost, ctrl_port, profile_name) enable_macsec_port(nbr["host"], nbr["port"], profile_name) wait_until(BGP_TIMEOUT, 3, 0, diff --git a/tests/macsec/test_interop_wan_isis.py b/tests/macsec/test_interop_wan_isis.py index 6e6e80527bc..ab0530aa708 100644 --- a/tests/macsec/test_interop_wan_isis.py +++ b/tests/macsec/test_interop_wan_isis.py @@ -3,9 +3,9 @@ from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert -from .macsec_platform_helper import get_portchannel -from .macsec_platform_helper import find_portchannel_from_member -from .macsec_config_helper import enable_macsec_port, disable_macsec_port +from tests.common.macsec.macsec_platform_helper import get_portchannel +from tests.common.macsec.macsec_platform_helper import find_portchannel_from_member +from tests.common.macsec.macsec_config_helper import enable_macsec_port, disable_macsec_port logger = logging.getLogger(__name__) diff --git a/tests/pc/test_lag_2.py b/tests/pc/test_lag_2.py index f50e1b1cd1a..8be9a6e08c6 100644 --- a/tests/pc/test_lag_2.py +++ b/tests/pc/test_lag_2.py @@ -5,6 +5,7 @@ from tests.common.fixtures.ptfhost_utils import copy_acstests_directory # noqa F401 from tests.common.fixtures.ptfhost_utils import copy_ptftests_directory # noqa F401 +from tests.common.helpers.multi_thread_utils import SafeThreadPoolExecutor from tests.ptf_runner import ptf_runner from tests.common.fixtures.conn_graph_facts import conn_graph_facts # noqa F401 from tests.common.utilities import wait_until @@ -14,7 +15,6 @@ from tests.common.helpers.dut_ports import get_duthost_with_name from tests.common.config_reload import config_reload from tests.common.helpers.constants import DEFAULT_ASIC_ID -from tests.common.helpers.parallel import parallel_run_threaded logger = logging.getLogger(__name__) @@ -34,14 +34,10 @@ def common_setup_teardown(copy_acstests_directory, copy_ptftests_directory, ptfh # takes more than 3 cycles(15mins) to alert, the testcase in the nightly after # the test_lag will suffer from the monit alert, so let's config reload the # device here to reduce any potential impact. - parallel_run_threaded( - target_functions=[ - lambda duthost=_: config_reload( - duthost, config_source='running_golden_config' - ) for _ in duthosts - ], - timeout=300 - ) + + with SafeThreadPoolExecutor(max_workers=8) as executor: + for duthost in duthosts: + executor.submit(config_reload, duthost, config_source="running_golden_config", safe_reload=True) def is_vtestbed(duthost): diff --git a/tests/pc/test_lag_member.py b/tests/pc/test_lag_member.py index b39009adb2c..4d276838465 100644 --- a/tests/pc/test_lag_member.py +++ b/tests/pc/test_lag_member.py @@ -10,7 +10,7 @@ from tests.common.helpers.assertions import pytest_assert, pytest_require from tests.ptf_runner import ptf_runner from tests.common.utilities import wait_until -from tests.common.fixtures.ptfhost_utils import copy_acstests_directory # noqa F401 +from tests.common.fixtures.ptfhost_utils import copy_acstests_directory, copy_ptftests_directory, copy_arp_responder_py # noqa F401 from tests.common.config_reload import config_reload logger = logging.getLogger(__name__) diff --git a/tests/pc/test_po_cleanup.py b/tests/pc/test_po_cleanup.py index 6e8ee9b99eb..d83fb7b20f1 100644 --- a/tests/pc/test_po_cleanup.py +++ b/tests/pc/test_po_cleanup.py @@ -94,7 +94,7 @@ def test_po_cleanup_after_reload(duthosts, enum_rand_one_per_hwsku_frontend_host with loganalyzer: logging.info("Reloading config..") - config_reload(duthost, safe_reload=True, wait_for_bgp=True) + config_reload(duthost, wait=240, safe_reload=True, wait_for_bgp=True) duthost.shell("killall yes") except Exception: diff --git a/tests/pc/test_po_update.py b/tests/pc/test_po_update.py index 53c1ce99aad..99817ba8fa6 100644 --- a/tests/pc/test_po_update.py +++ b/tests/pc/test_po_update.py @@ -11,8 +11,11 @@ from tests.common import config_reload import ipaddress +from tests.common.platform.processes_utils import wait_critical_processes +from tests.common.reboot import wait_for_startup, reboot from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert +from tests.common.helpers.sonic_db import VoqDbCli from tests.common.helpers.voq_helpers import verify_no_routes_from_nexthop pytestmark = [ @@ -374,3 +377,221 @@ def del_add_members(): pytest_assert( has_bgp_neighbors(duthost, pc) and wait_until(120, 10, 0, asichost.check_bgp_statistic, 'ipv4_idle', 0) or wait_until(10, 10, 0, pc_active, asichost, pc)) + + +def increment_lag_id(duthost, upper_lagid_start): + # Retrieve the current free LAG ID from the 'SYSTEM_LAG_IDS_FREE_LIST' in the CHASSIS_APP_DB + current_free_lagid = int(duthost.shell("sonic-db-cli CHASSIS_APP_DB lindex 'SYSTEM_LAG_IDS_FREE_LIST' 0")['stdout']) + # Temporary PortChannel name to be used in the configuration + tmp_pc = "PortChannel999" + # Loop through the range from current_free_lagid to upper_lagid_start (inclusive) + for i in range(current_free_lagid, upper_lagid_start + 1): + # Add the temporary PortChannel to increment the LAG ID + duthost.asics[0].config_portchannel(tmp_pc, "add") + # Remove the temporary PortChannel after incrementing the LAG ID + duthost.asics[0].config_portchannel(tmp_pc, "del") + + # Retrieve the current free LAG ID again after the modifications + current_free_lagid = int( + duthost.shell("sonic-db-cli CHASSIS_APP_DB lindex 'SYSTEM_LAG_IDS_FREE_LIST' 0")['stdout']) + logging.info("SYSTEM_LAG_IDS_FREE_LIST {}".format(current_free_lagid)) + # Assert that the current free LAG ID is greater than or equal to the upper limit (upper_lagid_start) + pytest_assert(current_free_lagid >= upper_lagid_start, + "Increment Lag ID Current:{},> Upper:{}".format(current_free_lagid, upper_lagid_start)) + + +def send_data(dut_mg_facts, duthost, ptfadapter): + # Create a list of tuples for each port channel interface, containing the IP address, peer address, + # port channel name, and its associated namespace. This is filtered for IPv4 addresses only. + peer_ip_pc_pair = [(pc["addr"], pc["peer_addr"], pc["attachto"], + dut_mg_facts["minigraph_portchannels"][pc["attachto"]]['namespace']) + for pc in dut_mg_facts["minigraph_portchannel_interfaces"] + if ipaddress.ip_address(pc['peer_addr']).version == 4] + + # Create a list of tuples where each tuple contains the port channel IP, peer IP, port channel name, + # members of the port channel, and its namespace. + pcs = [(pair[0], pair[1], pair[2], dut_mg_facts["minigraph_portchannels"][pair[2]]["members"], pair[3]) + for pair in peer_ip_pc_pair] + + # Iterate over each port channel pair to send and verify packets between them + for in_pc in pcs: + for out_pc in pcs: + # Skip if the input and output port channels are the same + if in_pc[2] == out_pc[2]: + continue + # Call the function to send and verify the packet between input and output port channels + send_and_verify_packet(in_pc, out_pc, dut_mg_facts, duthost, ptfadapter) + + +def send_and_verify_packet(in_pc, out_pc, dut_mg_facts, duthost, ptfadapter): + # Get the PTF interface index for the first member of the input port channel + in_ptf_index = dut_mg_facts["minigraph_ptf_indices"][in_pc[3][0]] + # Get the PTF interface indices for all members of the output port channel + out_ptf_indices = [dut_mg_facts["minigraph_ptf_indices"][port] for port in out_pc[3]] + + in_peer_ip = in_pc[1] + out_peer_ip = out_pc[1] + # Create a simple IP packet with the source and destination MAC addresses, IP source as input peer IP, + # and IP destination as output peer IP + pkt = testutils.simple_ip_packet( + eth_dst=duthost.asic_instance(duthost.get_asic_id_from_namespace(in_pc[4])).get_router_mac(), + eth_src=ptfadapter.dataplane.get_mac(0, in_ptf_index), + ip_src=in_peer_ip, + ip_dst=out_peer_ip) + + # Make a copy of the packet to define the expected packet + exp_pkt = pkt.copy() + exp_pkt = mask.Mask(exp_pkt) + # Ignore certain fields in the expected packet such as destination MAC, source MAC, IP checksum, and TTL + exp_pkt.set_do_not_care_scapy(packet.Ether, 'dst') + exp_pkt.set_do_not_care_scapy(packet.Ether, 'src') + exp_pkt.set_do_not_care_scapy(packet.IP, 'chksum') + exp_pkt.set_do_not_care_scapy(packet.IP, 'ttl') + + # Flush the dataplane before sending the packet + ptfadapter.dataplane.flush() + # Send the packet through the input port channel + testutils.send(ptfadapter, in_ptf_index, pkt) + # Verify the expected packet is received on any of the output port channel members + testutils.verify_packet_any_port(ptfadapter, exp_pkt, ports=out_ptf_indices) + + +def lag_set_sanity(duthosts): + system_lag_id = {} + # Create a VoqDbCli instance to interact with VOQ DB on the supervisor node + voqdb = VoqDbCli(duthosts.supervisor_nodes[0]) + + # Dump and store the current state of the SYSTEM_LAG_ID_TABLE + system_lag_id["SYSTEM_LAG_ID_TABLE"] = voqdb.dump("SYSTEM_LAG_ID_TABLE")["SYSTEM_LAG_ID_TABLE"]['value'] + # Dump the system LAG ID set, which holds the assigned LAG IDs + SYSTEM_LAG_ID_SET = voqdb.dump("SYSTEM_LAG_ID_SET")["SYSTEM_LAG_ID_SET"]['value'] + # Retrieve the start and end range for system LAG IDs from the database + end = int(voqdb.dump("SYSTEM_LAG_ID_END")["SYSTEM_LAG_ID_END"]['value']) + start = int(voqdb.dump("SYSTEM_LAG_ID_START")["SYSTEM_LAG_ID_START"]['value']) + # Retrieve the list of free LAG IDs from the database + LAG_IDS_FREE_LIST = voqdb.dump("SYSTEM_LAG_IDS_FREE_LIST")["SYSTEM_LAG_IDS_FREE_LIST"]['value'] + + def verify_system_lag_sanity(): + # Combine the free LAG IDs and assigned LAG IDs into a set to check for uniqueness + seen = set(LAG_IDS_FREE_LIST + SYSTEM_LAG_ID_SET) + + # Verify that the number of LAG IDs seen matches the expected range from start to end + if len(seen) != (end - start + 1): + logging.error( + "Missing or extra values are found in SYSTEM_LAG_IDS_FREE_LIST:{} or SYSTEM_LAG_ID_SET:{}".format( + LAG_IDS_FREE_LIST, SYSTEM_LAG_ID_SET)) + return False + + # Check for duplicate values in both the free and assigned LAG ID lists + if any(LAG_IDS_FREE_LIST.count(x) > 1 or SYSTEM_LAG_ID_SET.count( + x) > 1 or x in LAG_IDS_FREE_LIST and x in SYSTEM_LAG_ID_SET for x in seen): + logging.error( + "Duplicate values found in SYSTEM_LAG_IDS_FREE_LIST:{} or SYSTEM_LAG_ID_SET:{}".format( + LAG_IDS_FREE_LIST, SYSTEM_LAG_ID_SET)) + return False + # Log the current system LAG ID set for information purposes + logging.info(SYSTEM_LAG_ID_SET) + return True + + # Assert that the system LAG sanity check passes, using a wait_until function with a timeout + pytest_assert(wait_until(220, 10, 0, verify_system_lag_sanity)) + + +def test_po_update_with_higher_lagids( + duthosts, + enum_rand_one_per_hwsku_frontend_hostname, + tbinfo, + ptfadapter, + reload_testbed_on_failed, localhost): + """ + Test Port Channel Traffic with Higher LAG IDs: + + 1. The test involves rebooting the DUT, + which resets the LAG ID allocation, starting from 1. + 2. After the initial verification of traffic on the port channel (PC) mesh, the + LAG ID allocation is incremented by temporarily adding and deleting port channels. + 3. Verify the LAG set sanity and ensure traffic stability. + 4. Repeat the process for the higher LAG IDs. + """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + + # Check if the device is a modular chassis and the topology is T2 + is_chassis = duthost.get_facts().get("modular_chassis") + if not (is_chassis and tbinfo['topo']['type'] == 't2' and duthost.facts['switch_type'] == "voq"): + # Skip the test if the setup is not T2 Chassis + pytest.skip("Test is Applicable for T2 VOQ Chassis Setup") + + dut_mg_facts = duthost.get_extended_minigraph_facts(tbinfo) + + # Send initial data to the device + send_data(dut_mg_facts, duthost, ptfadapter) + # Get the supervisor node (suphost) for the modular chassis setup + suphost = duthosts.supervisor_nodes[0] + # Get the established BGP neighbors from the DUT + up_bgp_neighbors = duthost.get_bgp_neighbors_per_asic("established") + + # Log information about cold reboot on the supervisor node + logging.info("Cold reboot on supervisor node: %s", suphost.hostname) + + # Reboot the supervisor node and wait for critical processes to restart + reboot(suphost, localhost, wait=240, safe_reboot=True) + logging.info("Wait until all critical processes are fully started") + wait_critical_processes(suphost) + + # Ensure all critical services have started on the supervisor node + pytest_assert(wait_until(330, 20, 0, suphost.critical_services_fully_started), + "All critical services should fully started! {}".format(suphost.hostname)) + + # For each linecard (frontend node), wait for startup and critical processes to start + for linecard in duthosts.frontend_nodes: + wait_for_startup(linecard, localhost, delay=10, timeout=300) + dut_uptime = linecard.get_up_time() + logging.info('DUT {} up since {}'.format(linecard.hostname, dut_uptime)) + + logging.info("Wait until all critical processes are fully started") + wait_critical_processes(linecard) + + # Ensure all critical services have started on the linecard + pytest_assert(wait_until(330, 20, 0, linecard.critical_services_fully_started), + "All critical services should fully started! {}".format(linecard.hostname)) + + # Perform a sanity check on the LAG set + lag_set_sanity(duthosts) + + # Increment LAG IDs up to 500 + increment_lag_id(duthost, 500) + + # Perform a Config Reload to put the new lag ids on Portchannel + config_reload(duthost, safe_reload=True) + + # Ensure BGP sessions are re-established after reload + pytest_assert(wait_until(300, 10, 0, + duthost.check_bgp_session_state_all_asics, up_bgp_neighbors, "established")) + + # Perform another LAG set sanity check + lag_set_sanity(duthosts) + + # Send data after the configuration reload + send_data(dut_mg_facts, duthost, ptfadapter) + + # Get the unique port channels from the minigraph facts + unique_portchannels = set([entry['attachto'] for entry in dut_mg_facts["minigraph_portchannel_interfaces"]]) + + # Calculate the increment value based on available port channels + inc = 1024 - len(unique_portchannels) + + # Increment LAG IDs based on the calculated increment value + increment_lag_id(duthost, inc) + + # Perform a Config Reload to put the new lag ids on Portchannel + config_reload(duthost, safe_reload=True) + + # Ensure BGP sessions are re-established after the second reload + pytest_assert(wait_until(300, 10, 0, + duthost.check_bgp_session_state_all_asics, up_bgp_neighbors, "established")) + + # Perform a final LAG set sanity check + lag_set_sanity(duthosts) + + # Send data one more time after the final sanity check + send_data(dut_mg_facts, duthost, ptfadapter) diff --git a/tests/pc/test_po_voq.py b/tests/pc/test_po_voq.py index 4f0bc7d20ff..a7059ca7bea 100644 --- a/tests/pc/test_po_voq.py +++ b/tests/pc/test_po_voq.py @@ -1,6 +1,10 @@ import pytest +import random import tests.common.helpers.voq_lag as voq_lag from tests.common.helpers.voq_helpers import verify_no_routes_from_nexthop +from tests.common.platform.device_utils import fanout_switch_port_lookup +from tests.common.helpers.assertions import pytest_assert +from tests.common.utilities import wait_until import logging logger = logging.getLogger(__name__) @@ -9,47 +13,52 @@ ] -def get_asic_with_pc(duthost): - """ - Returns Asic with portchannel +def _get_random_asic_with_pc(duthost): + """Returns a random ASIC with portchannel from given duthost Args: - duthost : The duthost object + duthost: A duthost object to probe ASICs Returns: - asic : Asic object - + asic: Random ASIC with PC from the duthost """ + asics_with_pc = [] for asic in duthost.asics: config_facts = duthost.config_facts(source='persistent', asic_index=asic.asic_index)['ansible_facts'] if 'PORTCHANNEL' in config_facts: - return asic + asics_with_pc.append(asic) + + if asics_with_pc: + return random.choice(asics_with_pc) + else: + pytest.fail("{} has no ASICs with portchannels".format(duthost)) @pytest.fixture(scope='module') def setup_teardown(duthosts, enum_rand_one_per_hwsku_frontend_hostname): """ - Prepares dut for the testcase by deleting the existing port channel members and ip, - adds a new portchannel and assignes port channel members and ip - from the previous port channel + Setup: + Create a temporary test portchannel, moves members and IP from an existing portchannel + to the temporary test portchannel - Args: - duthosts : The duthosts object - enum_rand_one_per_hwsku_frontend_hostname : - random per fromtend per hwsku duthost - - Returns: - portchannel_ip : portchannel ip address - portchannle_members : portchannel members + Teardown: + Moves members from temporary test portchannel back to the original portchannel, + deletes temporary test portchannel + Yields: + (asic: ASIC that hosts the portchannel, + portchannel_ip: portchannel ip address, + portchannel_members: portchannel members) """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] - asic = get_asic_with_pc(duthost) + + # Choose a random portchannel and corresponding ASIC + asic = _get_random_asic_with_pc(duthost) config_facts = duthost.config_facts(source='persistent', asic_index=asic.asic_index)['ansible_facts'] - portchannel = list(config_facts['PORTCHANNEL'].keys())[0] + portchannel = random.choice(list(config_facts['PORTCHANNEL'].keys())) portchannel_members = config_facts['PORTCHANNEL'][portchannel].get('members') portchannel_ip = None @@ -63,66 +72,218 @@ def setup_teardown(duthosts, enum_rand_one_per_hwsku_frontend_hostname): if portchannel_ip.split('/')[0] == config_facts['BGP_NEIGHBOR'][addr]['local_addr']: nbr_addr = addr - voq_lag.delete_lag_members_ip(duthost, asic, portchannel_members, portchannel_ip, portchannel) + # Move members and IP from original lag to newly created temporary lag + logging.info("Moving LAG members {} and IP {} from LAG {} to temporary LAG {}" + .format(portchannel_members, portchannel_ip, portchannel, voq_lag.TMP_PC)) + asic.config_ip_intf(portchannel, portchannel_ip, "remove") + for portchannel_member in portchannel_members: + asic.config_portchannel_member(portchannel, portchannel_member, "del") + verify_no_routes_from_nexthop(duthosts, nbr_addr) - voq_lag.add_lag(duthost, asic, portchannel_members, portchannel_ip) + + asic.config_portchannel(voq_lag.TMP_PC, "add") + asic.config_ip_intf(voq_lag.TMP_PC, portchannel_ip, "add") + for portchannel_member in portchannel_members: + asic.config_portchannel_member(voq_lag.TMP_PC, portchannel_member, "add") yield asic, portchannel_ip, portchannel_members - voq_lag.delete_lag_members_ip(duthost, asic, portchannel_members, portchannel_ip) - # remove tmp portchannel - voq_lag.delete_lag(duthost, asic) + # Move members and IP from new temporary LAG back to original lag, delete old LAG + logging.info("Moving LAG members {} and IP {} from temporary LAG {} back to LAG {}" + .format(portchannel_members, portchannel_ip, portchannel, voq_lag.TMP_PC)) + asic.config_ip_intf(voq_lag.TMP_PC, portchannel_ip, "remove") + for portchannel_member in portchannel_members: + asic.config_portchannel_member(voq_lag.TMP_PC, portchannel_member, "del") + asic.config_portchannel(voq_lag.TMP_PC, "del") + verify_no_routes_from_nexthop(duthosts, nbr_addr) - # add only lag members and ip since lag already exist - voq_lag.add_lag(duthost, asic, portchannel_members, portchannel_ip, portchannel, add=False) + + asic.config_ip_intf(portchannel, portchannel_ip, "add") + for portchannel_member in portchannel_members: + asic.config_portchannel_member(portchannel, portchannel_member, "add") def test_voq_po_update(duthosts, enum_rand_one_per_hwsku_frontend_hostname): - """ - test to verify when a LAG is added/deleted via CLI on an ASIC, - It is populated in remote ASIC_DB. - Steps: - 1. On any ASIC, add a new LAG - 2. verify added lag gets a unique lag id in chassis app db - 3. verify added lag exist in app db - 4. verify lag exist in asic db on remote and local asic db - 5. delete the added lag + """Test to verify when a LAG is added/deleted via CLI, it is synced across all DBs + + All DBs = local app db, chassis app db, local & remote asic db """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] - asic = get_asic_with_pc(duthost) + remote_duthosts = [dut_host for dut_host in duthosts.frontend_nodes if dut_host != duthost] + asic = _get_random_asic_with_pc(duthost) + prev_lag_id_list = voq_lag.get_lag_ids_from_chassis_db(duthosts) try: - voq_lag.verify_lag_id_is_unique_in_chassis_db(duthosts, duthost, asic) - voq_lag.verify_lag_in_app_db(asic) + # Add LAG and verify LAG creation is synced across all DBs + logging.info("Add temporary LAG {}".format(voq_lag.TMP_PC)) + asic.config_portchannel(voq_lag.TMP_PC, "add") + + # Verify LAG is created with unique LAG ID in chassis db tmp_lag_id = voq_lag.get_lag_id_from_chassis_db(duthosts) - voq_lag.verify_lag_in_asic_db(duthost.asics, tmp_lag_id) - # to verify lag in remote asic db - remote_duthosts = [dut_host for dut_host in duthosts.frontend_nodes if dut_host != duthost] - voq_lag.verify_lag_in_remote_asic_db(remote_duthosts, tmp_lag_id) - voq_lag.verify_lag_id_deleted_in_chassis_db(duthosts, duthost, asic, tmp_lag_id) - voq_lag.verify_lag_in_app_db(asic, deleted=True) - voq_lag.verify_lag_in_asic_db(duthost.asics, tmp_lag_id, deleted=True) - remote_duthosts = [dut_host for dut_host in duthosts.frontend_nodes if dut_host != duthost] - voq_lag.verify_lag_in_remote_asic_db(remote_duthosts, tmp_lag_id, deleted=True) + pytest_assert(tmp_lag_id not in prev_lag_id_list, "Temporary PC LAG ID {} is not unique") + + voq_lag.verify_lag_in_app_db(asic) + voq_lag.verify_lag_in_chassis_db(duthosts) + voq_lag.verify_lag_id_in_asic_dbs(duthost.asics, tmp_lag_id) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_id_in_asic_dbs(remote_duthost.asics, tmp_lag_id) + + # Delete LAG and verify LAG deletion is synced across all DBs + logging.info("Deleting temporary LAG {}".format(voq_lag.TMP_PC)) + asic.config_portchannel(voq_lag.TMP_PC, "del") + + voq_lag.verify_lag_in_app_db(asic, expected=False) + voq_lag.verify_lag_in_chassis_db(duthosts, expected=False) + voq_lag.verify_lag_id_in_asic_dbs(duthost.asics, tmp_lag_id, expected=False) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_id_in_asic_dbs(remote_duthost.asics, tmp_lag_id, expected=False) finally: if voq_lag.is_lag_in_app_db(asic): - voq_lag.delete_lag(duthost, asic) + logging.info("Deleting temporary LAG {}".format(voq_lag.TMP_PC)) + asic.config_portchannel(voq_lag.TMP_PC, "del") def test_voq_po_member_update(duthosts, enum_rand_one_per_hwsku_frontend_hostname, setup_teardown): + """Test to verify when LAG members are added/deleted via CLI, it is synced across all DBs + + All DBs = local app db, chassis app db, local & remote asic db """ - Test to verify when a LAG members is added/deleted via CLI on an ASIC, - It is synced to remote ASIC_DB. - Steps: - 1. On any ASIC, add LAG members to a lag - 2. verify lag members exist in local asic app db - 3. verify lag members exist in chassis app db - 4. verify lag members exist in local and remote asic db + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + remote_duthosts = [dut_host for dut_host in duthosts.frontend_nodes if dut_host != duthost] + asic, portchannel_ip, portchannel_members = setup_teardown + tmp_lag_id = voq_lag.get_lag_id_from_chassis_db(duthosts) + + # Check that members added to LAG in setup is synced across all DBs + for portchannel_member in portchannel_members: + voq_lag.verify_lag_member_in_app_db(asic, portchannel_member) + voq_lag.verify_lag_member_in_chassis_db(duthosts, portchannel_member) + # For checking LAG member added/deleted in ASIC_DB, + # we check how many members exist in a LAG since we can't identify individual members + voq_lag.verify_lag_member_in_asic_db(duthost.asics, tmp_lag_id, expected=len(portchannel_members)) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_member_in_asic_db(remote_duthost.asics, tmp_lag_id, expected=len(portchannel_members)) + + # Choose a random LAG member to delete, verify deletion is synced across all DBs + del_pc_member = random.choice(portchannel_members) + remaining_pc_members = [pc_member for pc_member in portchannel_members if pc_member != del_pc_member] + try: + logging.info("Deleting LAG member {} from {}".format(del_pc_member, voq_lag.TMP_PC)) + asic.config_portchannel_member(voq_lag.TMP_PC, del_pc_member, "del") + + # Verify other LAG members are still up + for remaining_pc_member in remaining_pc_members: + voq_lag.verify_lag_member_in_app_db(asic, remaining_pc_member) + voq_lag.verify_lag_member_in_chassis_db(duthosts, remaining_pc_member) + + voq_lag.verify_lag_member_in_app_db(asic, del_pc_member, expected=False) + voq_lag.verify_lag_member_in_chassis_db(duthosts, del_pc_member, expected=False) + voq_lag.verify_lag_member_in_asic_db(duthost.asics, tmp_lag_id, expected=len(remaining_pc_members)) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_member_in_asic_db(remote_duthost.asics, tmp_lag_id, expected=len(remaining_pc_members)) + finally: + logging.info("Adding LAG member {} back to {}".format(del_pc_member, voq_lag.TMP_PC)) + asic.config_portchannel_member(voq_lag.TMP_PC, del_pc_member, "add") + + +def test_voq_po_down_via_cli_update(duthosts, enum_rand_one_per_hwsku_frontend_hostname, setup_teardown): + """Test to verify when a LAG goes down on an ASIC via CLI, it is synced across all DBs + + All DBs = local app db, chassis app db, local & remote asic db """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + remote_duthosts = [dut_host for dut_host in duthosts.frontend_nodes if dut_host != duthost] asic, portchannel_ip, portchannel_members = setup_teardown tmp_lag_id = voq_lag.get_lag_id_from_chassis_db(duthosts) - voq_lag.verify_lag_member_in_app_db(asic, portchannel_members) - voq_lag.verify_lag_member_in_chassis_db(duthosts, portchannel_members) - voq_lag.verify_lag_member_in_asic_db(duthost.asics, tmp_lag_id, portchannel_members) + num_portchannels = len(portchannel_members) + + # Make sure LAG is up across all DBs (all PC members are up across all DBs) + for portchannel_member in portchannel_members: + voq_lag.verify_lag_member_status_in_app_db(asic, portchannel_member, enabled=True) + voq_lag.verify_lag_member_status_in_chassis_db(duthosts, portchannel_member, enabled=True) + # For checking LAG member status in ASIC_DB, + # we check how many members are disabled in a LAG since we can't identify individual members + voq_lag.verify_lag_member_status_in_asic_db(duthost.asics, tmp_lag_id, exp_disabled=0) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_member_status_in_asic_db(remote_duthost.asics, tmp_lag_id, exp_disabled=0) + + try: + # Bring down LAG, check that LAG down is synced across all DBs (all PC members are down across all DBs) + logging.info("Disabling {}".format(voq_lag.TMP_PC)) + duthost.shell("config interface {} shutdown {}".format(asic.cli_ns_option, voq_lag.TMP_PC)) + pytest_assert(wait_until(30, 5, 0, lambda: not duthost.check_intf_link_state(voq_lag.TMP_PC)), + "{} is not disabled".format(voq_lag.TMP_PC)) + + for portchannel_member in portchannel_members: + voq_lag.verify_lag_member_status_in_app_db(asic, portchannel_member, enabled=False) + voq_lag.verify_lag_member_status_in_chassis_db(duthosts, portchannel_member, enabled=False) + voq_lag.verify_lag_member_status_in_asic_db(duthost.asics, tmp_lag_id, exp_disabled=num_portchannels) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_member_status_in_asic_db(remote_duthost.asics, tmp_lag_id, exp_disabled=num_portchannels) + finally: + # Bring LAG back up + logging.info("Enabling {}".format(voq_lag.TMP_PC)) + duthost.shell("config interface {} startup {}".format(asic.cli_ns_option, voq_lag.TMP_PC)) + pytest_assert(wait_until(30, 5, 0, lambda: duthost.check_intf_link_state(voq_lag.TMP_PC)), + "{} is not enabled".format(voq_lag.TMP_PC)) + + +@pytest.mark.parametrize("flap_method", ["local", "remote"]) +def test_voq_po_member_down_update(duthosts, enum_rand_one_per_hwsku_frontend_hostname, + setup_teardown, fanouthosts, flap_method): + """ + Test to verify when a LAG member goes down on an ASIC, it is synced across all DBs + + All DBs = local app db, chassis app db, local & remote asic db + """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] remote_duthosts = [dut_host for dut_host in duthosts.frontend_nodes if dut_host != duthost] - voq_lag.verify_lag_member_in_remote_asic_db(remote_duthosts, tmp_lag_id, portchannel_members, deleted=True) + asic, portchannel_ip, portchannel_members = setup_teardown + tmp_lag_id = voq_lag.get_lag_id_from_chassis_db(duthosts) + + # Make sure LAG is up across all DBs (all PC members are up across all DBs) + for portchannel_member in portchannel_members: + voq_lag.verify_lag_member_status_in_app_db(asic, portchannel_member, enabled=True) + voq_lag.verify_lag_member_status_in_chassis_db(duthosts, portchannel_member, enabled=True) + # For checking LAG member status in ASIC_DB, + # we check how many members are disabled in a LAG since we can't identify individual members + voq_lag.verify_lag_member_status_in_asic_db(duthost.asics, tmp_lag_id, exp_disabled=0) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_member_status_in_asic_db(remote_duthost.asics, tmp_lag_id, exp_disabled=0) + + # Choose a random LAG member to bring down, check that LAG member down is synced across all DBs + down_pc_member = random.choice(portchannel_members) + fanout, fanout_port = fanout_switch_port_lookup(fanouthosts, duthost.hostname, down_pc_member) + up_pc_members = [pc_member for pc_member in portchannel_members if pc_member != down_pc_member] + try: + if flap_method == "local": + logging.info("Disabling {} via CLI".format(down_pc_member)) + duthost.shell("config interface {} shutdown {}".format(asic.cli_ns_option, down_pc_member)) + else: + logging.info("Disabling {} via fanout to simulate external flapping".format(down_pc_member)) + logging.info("Disabling {} on {}".format(fanout_port, fanout.hostname)) + fanout.shutdown(fanout_port) + + pytest_assert(wait_until(30, 5, 0, lambda: not duthost.check_intf_link_state(down_pc_member)), + "{} is not disabled".format(down_pc_member)) + + # Verify other LAG members are still up + for up_pc_member in up_pc_members: + voq_lag.verify_lag_member_status_in_app_db(asic, up_pc_member, enabled=True) + voq_lag.verify_lag_member_status_in_chassis_db(duthosts, up_pc_member, enabled=True) + + voq_lag.verify_lag_member_status_in_app_db(asic, down_pc_member, enabled=False) + voq_lag.verify_lag_member_status_in_chassis_db(duthosts, down_pc_member, enabled=False) + voq_lag.verify_lag_member_status_in_asic_db(duthost.asics, tmp_lag_id, exp_disabled=1) + for remote_duthost in remote_duthosts: + voq_lag.verify_lag_member_status_in_asic_db(remote_duthost.asics, tmp_lag_id, exp_disabled=1) + finally: + # Bring LAG member back up + if flap_method == "local": + logging.info("Enabling {} via CLI".format(down_pc_member)) + duthost.shell("config interface {} startup {}".format(asic.cli_ns_option, down_pc_member)) + else: + logging.info("Enabling {} via fanout".format(down_pc_member)) + logging.info("Enabling {} on {}".format(fanout_port, fanout.hostname)) + fanout.no_shutdown(fanout_port) + + pytest_assert(wait_until(30, 5, 0, lambda: duthost.check_intf_link_state(down_pc_member)), + "{} is not enabled".format(down_pc_member)) diff --git a/tests/pfcwd/test_pfcwd_all_port_storm.py b/tests/pfcwd/test_pfcwd_all_port_storm.py index 89fa4589a8f..61c149cebc5 100644 --- a/tests/pfcwd/test_pfcwd_all_port_storm.py +++ b/tests/pfcwd/test_pfcwd_all_port_storm.py @@ -107,6 +107,7 @@ def storm_test_setup_restore(setup_pfc_test, enum_fanout_graph_facts, duthosts, storm_hndle (PFCStorm): class PFCStorm instance """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts['asic_type'] setup_info = setup_pfc_test neighbors = setup_info['neighbors'] port_list = setup_info['port_list'] @@ -115,7 +116,7 @@ def storm_test_setup_restore(setup_pfc_test, enum_fanout_graph_facts, duthosts, pfc_frames_number = 10000000 pfc_wd_detect_time = 200 pfc_wd_restore_time = 200 - peer_params = populate_peer_info(port_list, neighbors, pfc_queue_index, pfc_frames_number) + peer_params = populate_peer_info(asic_type, port_list, neighbors, pfc_queue_index, pfc_frames_number) storm_hndle = set_storm_params(duthost, enum_fanout_graph_facts, fanouthosts, peer_params) start_wd_on_ports(duthost, ports, pfc_wd_restore_time, pfc_wd_detect_time) @@ -125,7 +126,7 @@ def storm_test_setup_restore(setup_pfc_test, enum_fanout_graph_facts, duthosts, storm_hndle.stop_pfc_storm() -def populate_peer_info(port_list, neighbors, q_idx, frames_cnt): +def populate_peer_info(asic_type, port_list, neighbors, q_idx, frames_cnt): """ Build the peer_info map which will be used by the storm generation class @@ -138,19 +139,20 @@ def populate_peer_info(port_list, neighbors, q_idx, frames_cnt): Returns: peer_params (dict): all PFC params needed for each fanout for storm generation """ - peer_port_map = dict() - for port in port_list: - peer_dev = neighbors[port]['peerdevice'] - peer_port = neighbors[port]['peerport'] - peer_port_map.setdefault(peer_dev, []).append(peer_port) - peer_params = dict() - for peer_dev in peer_port_map: - peer_port_map[peer_dev] = (',').join(peer_port_map[peer_dev]) - peer_params[peer_dev] = {'pfc_frames_number': frames_cnt, - 'pfc_queue_index': q_idx, - 'intfs': peer_port_map[peer_dev] - } + if asic_type != 'vs': + peer_port_map = dict() + for port in port_list: + peer_dev = neighbors[port]['peerdevice'] + peer_port = neighbors[port]['peerport'] + peer_port_map.setdefault(peer_dev, []).append(peer_port) + + for peer_dev in peer_port_map: + peer_port_map[peer_dev] = (',').join(peer_port_map[peer_dev]) + peer_params[peer_dev] = {'pfc_frames_number': frames_cnt, + 'pfc_queue_index': q_idx, + 'intfs': peer_port_map[peer_dev] + } return peer_params @@ -191,8 +193,9 @@ def run_test(self, duthost, storm_hndle, expect_regex, syslog_marker, action): reg_exp = loganalyzer.parse_regexp_file(src=ignore_file) loganalyzer.ignore_regex.extend(reg_exp) - loganalyzer.expect_regex = [] - loganalyzer.expect_regex.extend(expect_regex) + if duthost.facts['asic_type'] != 'vs': + loganalyzer.expect_regex = [] + loganalyzer.expect_regex.extend(expect_regex) loganalyzer.match_regex = [] @@ -225,10 +228,11 @@ def test_all_port_storm_restore(self, duthosts, enum_rand_one_per_hwsku_frontend queues = list(set(queues)) selected_test_ports = [] - for intf in fanout_intfs: - test_port = device_conn[intf]['peerport'] - if test_port in setup_pfc_test['test_ports']: - selected_test_ports.append(test_port) + if duthost.facts['asic_type'] != 'vs': + for intf in fanout_intfs: + test_port = device_conn[intf]['peerport'] + if test_port in setup_pfc_test['test_ports']: + selected_test_ports.append(test_port) with send_background_traffic(duthost, ptfhost, queues, selected_test_ports, setup_pfc_test['test_ports']): self.run_test(duthost, diff --git a/tests/pfcwd/test_pfcwd_cli.py b/tests/pfcwd/test_pfcwd_cli.py index e504d782e44..117d7b78c16 100644 --- a/tests/pfcwd/test_pfcwd_cli.py +++ b/tests/pfcwd/test_pfcwd_cli.py @@ -12,8 +12,9 @@ from tests.common import constants from tests.common.dualtor.dual_tor_utils import is_tunnel_qos_remap_enabled, dualtor_ports # noqa F401 from tests.common.dualtor.mux_simulator_control import toggle_all_simulator_ports_to_enum_rand_one_per_hwsku_frontend_host_m # noqa F401, E501 -from tests.common.helpers.pfcwd_helper import send_background_traffic, check_pfc_storm_state, parser_show_pfcwd_stat +from tests.common.helpers.pfcwd_helper import send_background_traffic, verify_pfc_storm_in_expected_state, parser_show_pfcwd_stat # noqa E501 from tests.common.utilities import wait_until +from tests.common.cisco_data import is_cisco_device pytestmark = [ pytest.mark.topology("t0", "t1") @@ -22,6 +23,18 @@ logger = logging.getLogger(__name__) +@pytest.fixture(autouse=True) +def ignore_expected_loganalyzer_exceptions(duthosts, rand_one_dut_hostname, loganalyzer): + # Ignore in KVM test + KVMIgnoreRegex = [ + ".*queryStatsCapability: failed to find switch.*", + ] + duthost = duthosts[rand_one_dut_hostname] + if loganalyzer: # Skip if loganalyzer is disabled + if duthost.facts["asic_type"] == "vs": + loganalyzer[duthost.hostname].ignore_regex.extend(KVMIgnoreRegex) + + @pytest.fixture(scope='function', autouse=True) def stop_pfcwd(duthosts, enum_rand_one_per_hwsku_frontend_hostname): """ @@ -141,11 +154,14 @@ def storm_setup(self, init=False, detect=True): """ # new peer device if not self.peer_dev_list or self.peer_device not in self.peer_dev_list: - peer_info = {'peerdevice': self.peer_device, - 'hwsku': self.fanout_info[self.peer_device]['device_info']['HwSku'], - 'pfc_fanout_interface': self.neighbors[self.pfc_wd['test_port']]['peerport'] - } - self.peer_dev_list[self.peer_device] = peer_info['hwsku'] + if self.dut.facts['asic_type'] == 'vs': + peer_info = {} + else: + peer_info = {'peerdevice': self.peer_device, + 'hwsku': self.fanout_info[self.peer_device]['device_info']['HwSku'], + 'pfc_fanout_interface': self.neighbors[self.pfc_wd['test_port']]['peerport'] + } + self.peer_dev_list[self.peer_device] = peer_info['hwsku'] if self.dut.topo_type == 't2' and self.fanout[self.peer_device].os == 'sonic': gen_file = 'pfc_gen_t2.py' @@ -297,7 +313,7 @@ def storm_detect_path(self, dut, port, action): logger.info("Verify if PFC storm is detected on port {}".format(port)) pytest_assert( - wait_until(30, 2, 5, check_pfc_storm_state, dut, port, self.storm_hndle.pfc_queue_idx, "storm"), + wait_until(30, 2, 5, verify_pfc_storm_in_expected_state, dut, port, self.storm_hndle.pfc_queue_idx, "storm"), # noqa E501 "PFC storm state did not change as expected" ) @@ -316,7 +332,7 @@ def storm_restore_path(self, dut, port): # storm restore logger.info("Verify if PFC storm is restored on port {}".format(port)) pytest_assert( - wait_until(30, 2, 5, check_pfc_storm_state, dut, port, self.storm_hndle.pfc_queue_idx, "restore"), + wait_until(30, 2, 5, verify_pfc_storm_in_expected_state, dut, port, self.storm_hndle.pfc_queue_idx, "restore"), # noqa E501 "PFC storm state did not change as expected" ) @@ -330,6 +346,7 @@ def run_test(self, dut, port, action): port(string) : DUT port action(string) : PTF test action """ + asic_type = dut.facts['asic_type'] pfcwd_stat = self.dut.show_and_parse('show pfcwd stat') logger.info("before storm start: pfcwd_stat {}".format(pfcwd_stat)) @@ -339,56 +356,59 @@ def run_test(self, dut, port, action): pfcwd_stat_init = parser_show_pfcwd_stat(dut, port, self.pfc_wd['queue_index']) logger.debug("pfcwd_stat_init {}".format(pfcwd_stat_init)) - pytest_assert(("storm" in pfcwd_stat_init[0]['status']), "PFC storm status not detected") - pytest_assert( - ((int(pfcwd_stat_init[0]['storm_detect_count']) - int(pfcwd_stat_init[0]['restored_count'])) == 1), - "PFC storm detect count not correct" - ) + if asic_type != 'vs': + pytest_assert(("storm" in pfcwd_stat_init[0]['status']), "PFC storm status not detected") + pytest_assert( + ((int(pfcwd_stat_init[0]['storm_detect_count']) - int(pfcwd_stat_init[0]['restored_count'])) == 1), + "PFC storm detect count not correct" + ) # send traffic to egress port self.traffic_inst.send_tx_egress(self.tx_action, False) pfcwd_stat_after_tx = parser_show_pfcwd_stat(dut, port, self.pfc_wd['queue_index']) logger.debug("pfcwd_stat_after_tx {}".format(pfcwd_stat_after_tx)) - # check count, drop: tx_drop_count; forward: tx_ok_count - if self.tx_action == "drop": - tx_drop_count_init = int(pfcwd_stat_init[0]['tx_drop_count']) - tx_drop_count_check = int(pfcwd_stat_after_tx[0]['tx_drop_count']) - logger.info("tx_drop_count {} -> {}".format(tx_drop_count_init, tx_drop_count_check)) - pytest_assert( - ((tx_drop_count_check - tx_drop_count_init) >= self.pfc_wd['test_pkt_count']), - "PFC storm Tx ok count not correct" - ) - elif self.tx_action == "forward": - tx_ok_count_init = int(pfcwd_stat_init[0]['tx_ok_count']) - tx_ok_count_check = int(pfcwd_stat_after_tx[0]['tx_ok_count']) - logger.info("tx_ok_count {} -> {}".format(tx_ok_count_init, tx_ok_count_check)) - pytest_assert( - ((tx_ok_count_check - tx_ok_count_init) >= self.pfc_wd['test_pkt_count']), - "PFC storm Tx ok count not correct" - ) + if asic_type != 'vs': + # check count, drop: tx_drop_count; forward: tx_ok_count + if self.tx_action == "drop": + tx_drop_count_init = int(pfcwd_stat_init[0]['tx_drop_count']) + tx_drop_count_check = int(pfcwd_stat_after_tx[0]['tx_drop_count']) + logger.info("tx_drop_count {} -> {}".format(tx_drop_count_init, tx_drop_count_check)) + pytest_assert( + ((tx_drop_count_check - tx_drop_count_init) >= self.pfc_wd['test_pkt_count']), + "PFC storm Tx ok count not correct" + ) + elif self.tx_action == "forward": + tx_ok_count_init = int(pfcwd_stat_init[0]['tx_ok_count']) + tx_ok_count_check = int(pfcwd_stat_after_tx[0]['tx_ok_count']) + logger.info("tx_ok_count {} -> {}".format(tx_ok_count_init, tx_ok_count_check)) + pytest_assert( + ((tx_ok_count_check - tx_ok_count_init) >= self.pfc_wd['test_pkt_count']), + "PFC storm Tx ok count not correct" + ) # send traffic to ingress port time.sleep(3) self.traffic_inst.send_rx_ingress(self.rx_action, False) pfcwd_stat_after_rx = parser_show_pfcwd_stat(dut, port, self.pfc_wd['queue_index']) logger.debug("pfcwd_stat_after_rx {}".format(pfcwd_stat_after_rx)) - # check count, drop: rx_drop_count; forward: rx_ok_count - if self.rx_action == "drop": - rx_drop_count_init = int(pfcwd_stat_init[0]['rx_drop_count']) - rx_drop_count_check = int(pfcwd_stat_after_rx[0]['rx_drop_count']) - logger.info("rx_drop_count {} -> {}".format(rx_drop_count_init, rx_drop_count_check)) - pytest_assert( - ((rx_drop_count_check - rx_drop_count_init) >= self.pfc_wd['test_pkt_count']), - "PFC storm Rx drop count not correct" - ) - elif self.rx_action == "forward": - rx_ok_count_init = int(pfcwd_stat_init[0]['rx_ok_count']) - rx_ok_count_check = int(pfcwd_stat_after_rx[0]['rx_ok_count']) - logger.info("rx_ok_count {} -> {}".format(rx_ok_count_init, rx_ok_count_check)) - pytest_assert( - ((rx_ok_count_check - rx_ok_count_init) >= self.pfc_wd['test_pkt_count']), - "PFC storm Rx ok count not correct" - ) + if asic_type != 'vs': + # check count, drop: rx_drop_count; forward: rx_ok_count + if self.rx_action == "drop": + rx_drop_count_init = int(pfcwd_stat_init[0]['rx_drop_count']) + rx_drop_count_check = int(pfcwd_stat_after_rx[0]['rx_drop_count']) + logger.info("rx_drop_count {} -> {}".format(rx_drop_count_init, rx_drop_count_check)) + pytest_assert( + ((rx_drop_count_check - rx_drop_count_init) >= self.pfc_wd['test_pkt_count']), + "PFC storm Rx drop count not correct" + ) + elif self.rx_action == "forward": + rx_ok_count_init = int(pfcwd_stat_init[0]['rx_ok_count']) + rx_ok_count_check = int(pfcwd_stat_after_rx[0]['rx_ok_count']) + logger.info("rx_ok_count {} -> {}".format(rx_ok_count_init, rx_ok_count_check)) + pytest_assert( + ((rx_ok_count_check - rx_ok_count_init) >= self.pfc_wd['test_pkt_count']), + "PFC storm Rx ok count not correct" + ) logger.info("--- Storm restoration path for port {} ---".format(port)) self.storm_restore_path(dut, port) @@ -456,7 +476,10 @@ def test_pfcwd_show_stat(self, request, setup_pfc_test, setup_dut_test_params, e pfc_wd_restore_time_large = request.config.getoption("--restore-time") # wait time before we check the logs for the 'restore' signature. 'pfc_wd_restore_time_large' is in ms. self.timers['pfc_wd_wait_for_restore_time'] = int(pfc_wd_restore_time_large / 1000 * 2) - actions = ['drop', 'forward'] + if is_cisco_device(duthost): + actions = ['drop'] + else: + actions = ['drop', 'forward'] for action in actions: logger.info("--- Pfcwd port {} set action {} ---".format(port, action)) try: diff --git a/tests/pfcwd/test_pfcwd_function.py b/tests/pfcwd/test_pfcwd_function.py index 92c5d12e015..bf8b5a48740 100644 --- a/tests/pfcwd/test_pfcwd_function.py +++ b/tests/pfcwd/test_pfcwd_function.py @@ -230,6 +230,7 @@ def __init__(self, dut, rx_action, tx_action): action(string): PFCwd action for traffic test """ self.dut = dut + self.asic_type = dut.facts['asic_type'] self.rx_action = rx_action self.tx_action = tx_action if self.tx_action != "forward": @@ -267,6 +268,9 @@ def get_pkt_cnts(self, queue_oid, begin=True): begin(bool) : if the counter collection is before or after the test """ + if self.asic_type == 'vs': + logger.info("Skipping get packet cnt on vs") + return test_state = ['end', 'begin'] state = test_state[begin] self.cntr_val["tx_{}".format(state)] = int(PfcCmd.counter_cmd(self.dut, queue_oid, self.pkt_cntrs_tx[0])) @@ -284,6 +288,9 @@ def verify_pkt_cnts(self, port_type, pkt_cnt): port_type(string) : the type of port (eg. portchannel, vlan, interface) pkt_cnt(int) : Number of test packets sent from the PTF """ + if self.asic_type == 'vs': + logger.info("Skipping packet cnt check on vs") + return logger.info("--- Checking Tx {} cntrs ---".format(self.tx_action)) tx_diff = self.cntr_val["tx_end"] - self.cntr_val["tx_begin"] if (port_type in ['vlan', 'interface'] and tx_diff != pkt_cnt) or tx_diff <= 0: @@ -456,15 +463,20 @@ def storm_setup(self, init=False, detect=True): """ # new peer device if not self.peer_dev_list or self.peer_device not in self.peer_dev_list: - peer_info = {'peerdevice': self.peer_device, - 'hwsku': self.fanout_info[self.peer_device]['device_info']['HwSku'], - 'pfc_fanout_interface': self.neighbors[self.pfc_wd['test_port']]['peerport'] - } - self.peer_dev_list[self.peer_device] = peer_info['hwsku'] + if self.dut.facts['asic_type'] == 'vs': + peer_info = {} + else: + peer_info = {'peerdevice': self.peer_device, + 'hwsku': self.fanout_info[self.peer_device]['device_info']['HwSku'], + 'pfc_fanout_interface': self.neighbors[self.pfc_wd['test_port']]['peerport'] + } + self.peer_dev_list[self.peer_device] = peer_info['hwsku'] if self.dut.topo_type == 't2' and self.fanout[self.peer_device].os == 'sonic': gen_file = 'pfc_gen_t2.py' - pfc_send_time = 60 + # We want to set the timer to be high here to keep the storm long enough for manual termination + # in the test instead of having it terminated by itself + pfc_send_time = 240 else: gen_file = 'pfc_gen.py' pfc_send_time = None @@ -516,6 +528,7 @@ def __init__(self, ptf, router_mac, tx_mac, pfc_params, is_dualtor): self.pfc_wd_rx_port_vlan_id = pfc_params['rx_port_vlan_id'] self.port_id_to_type_map = pfc_params['port_id_to_type_map'] self.port_type = pfc_params['port_type'] + self.is_dualtor = is_dualtor if is_dualtor: self.vlan_mac = "00:aa:bb:cc:dd:ee" else: @@ -567,7 +580,7 @@ def verify_rx_ingress(self, action): else: dst_port = "[ " + str(self.pfc_wd_rx_port_id) + " ]" ptf_params = {'router_mac': self.tx_mac, - 'vlan_mac': self.vlan_mac, + 'vlan_mac': self.vlan_mac if self.is_dualtor else self.tx_mac, 'queue_index': self.pfc_queue_index, 'pkt_count': self.pfc_wd_test_pkt_count, 'port_src': self.pfc_wd_test_port_id, @@ -633,7 +646,7 @@ def verify_other_pfc_pg(self): other_pg = self.pfc_queue_index + 1 ptf_params = {'router_mac': self.tx_mac, - 'vlan_mac': self.vlan_mac, + 'vlan_mac': self.vlan_mac if self.is_dualtor else self.tx_mac, 'queue_index': other_pg, 'pkt_count': self.pfc_wd_test_pkt_count, 'port_src': self.pfc_wd_test_port_id, @@ -719,6 +732,10 @@ def storm_detect_path(self, dut, port, action): test_ports_info = {self.pfc_wd['rx_port'][0]: self.pfc_wd} queues = [self.storm_hndle.pfc_queue_idx] + if dut.facts['asic_type'] == "mellanox": + PFC_STORM_TIMEOUT = 30 + pfcwd_stats_before_test = check_pfc_storm_state(dut, port, self.storm_hndle.pfc_queue_idx) + with send_background_traffic(dut, self.ptf, queues, selected_test_ports, test_ports_info): if action != "dontcare": start_wd_on_ports(dut, port, restore_time, detect_time, action) @@ -735,28 +752,19 @@ def storm_detect_path(self, dut, port, action): if self.pfc_wd['fake_storm']: PfcCmd.set_storm_status(dut, self.queue_oid, "enabled") - if dut.facts['asic_type'] == "mellanox": + if dut.facts['asic_type'] == ["mellanox", "cisco-8000"]: # On Mellanox platform, more time is required for PFC storm being triggered # as PFC pause sent from Non-Mellanox leaf fanout is not continuous sometimes. - PFC_STORM_TIMEOUT = 30 - pytest_assert( - wait_until( - PFC_STORM_TIMEOUT, 2, 5, - check_pfc_storm_state, dut, port, self.storm_hndle.pfc_queue_idx, "storm" - ), - "PFC storm state did not change as expected" - ) + pytest_assert(wait_until(PFC_STORM_TIMEOUT, 2, 0, + lambda: check_pfc_storm_state(dut, port, self.storm_hndle.pfc_queue_idx) != pfcwd_stats_before_test), # noqa: E501, E128 + "PFC storm state did not change as expected") # noqa: E127 else: time.sleep(5) # storm detect logger.info("Verify if PFC storm is detected on port {}".format(port)) - if dut.facts['asic_type'] == "cisco-8000": - # The function get_pkt_cnts() works only if pfcwd is triggered. - # When the WD is not triggered, this redis-cli command returns - # (nil), so this function call fails. - self.traffic_inst.verify_tx_egress(self.tx_action) - loganalyzer.analyze(marker) + if dut.facts['asic_type'] != 'vs': + loganalyzer.analyze(marker) self.stats.get_pkt_cnts(self.queue_oid, begin=True) # test pfcwd functionality on a storm @@ -787,7 +795,8 @@ def storm_restore_path(self, dut, loganalyzer, port, action): time.sleep(self.timers['pfc_wd_wait_for_restore_time']) # storm restore logger.info("Verify if PFC storm is restored on port {}".format(port)) - loganalyzer.analyze(marker) + if dut.facts['asic_type'] != 'vs': + loganalyzer.analyze(marker) self.stats.get_pkt_cnts(self.queue_oid, begin=False) def run_test(self, dut, port, action, mmu_action=None, detect=True, restore=True): @@ -843,7 +852,8 @@ def run_no_traffic_test(self, dut, port): self.storm_hndle.start_storm() logger.info("Verify if PFC storm is not detected on port {}".format(port)) - loganalyzer.analyze(marker) + if dut.facts['asic_type'] != 'vs': + loganalyzer.analyze(marker) return loganalyzer def set_traffic_action(self, duthost, action): @@ -921,8 +931,6 @@ def test_pfcwd_actions(self, request, fake_storm, setup_pfc_test, setup_dut_test logger.info("{} on port {}: Tx traffic action {}, Rx traffic action {} ". format(WD_ACTION_MSG_PFX[action], port, self.tx_action, self.rx_action)) self.run_test(self.dut, port, action) - except Exception as e: - pytest.fail(str(e)) finally: if self.storm_hndle: @@ -1011,9 +1019,6 @@ def test_pfcwd_multi_port(self, request, fake_storm, setup_pfc_test, setup_dut_t self.setup_test_params(port, setup_info['vlan'], init=not idx, detect=False, toggle=idx and count) self.run_test(self.dut, port, "drop", detect=False) - except Exception as e: - pytest.fail(str(e)) - finally: logger.info("--- Stop PFC WD ---") self.dut.command("pfcwd stop") @@ -1103,9 +1108,6 @@ def test_pfcwd_mmu_change(self, request, fake_storm, setup_pfc_test, setup_dut_t self.run_test(self.dut, port, "drop", mmu_action=mmu_action) self.dut.command("pfcwd stop") - except Exception as e: - pytest.fail(str(e)) - finally: if self.storm_hndle: logger.info("--- Stop pfc storm on port {}".format(port)) @@ -1211,9 +1213,6 @@ def test_pfcwd_port_toggle(self, request, fake_storm, setup_pfc_test, setup_dut_ if result["total"]["expected_missing_match"] == 0: pytest.fail(result) - except Exception as e: - pytest.fail(str(e)) - finally: if self.storm_hndle: logger.info("--- Stop PFC storm on port {}".format(port)) diff --git a/tests/pfcwd/test_pfcwd_timer_accuracy.py b/tests/pfcwd/test_pfcwd_timer_accuracy.py index 417df2ec2bf..cfbc5bb0d66 100644 --- a/tests/pfcwd/test_pfcwd_timer_accuracy.py +++ b/tests/pfcwd/test_pfcwd_timer_accuracy.py @@ -84,6 +84,7 @@ def pfcwd_timer_setup_restore(setup_pfc_test, enum_fanout_graph_facts, duthosts, storm_handle (PFCStorm): class PFCStorm instance """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + asic_type = duthost.facts['asic_type'] logger.info("--- Pfcwd timer test setup ---") setup_info = setup_pfc_test test_ports = setup_info['test_ports'] @@ -96,7 +97,7 @@ def pfcwd_timer_setup_restore(setup_pfc_test, enum_fanout_graph_facts, duthosts, fanout_info = enum_fanout_graph_facts dut = duthost fanout = fanouthosts - peer_params = populate_peer_info(neighbors, fanout_info, pfc_wd_test_port) + peer_params = populate_peer_info(asic_type, neighbors, fanout_info, pfc_wd_test_port) storm_handle = set_storm_params(dut, fanout_info, fanout, peer_params) timers['pfc_wd_restore_time'] = 400 start_wd_on_ports(dut, pfc_wd_test_port, timers['pfc_wd_restore_time'], @@ -122,7 +123,7 @@ def pfcwd_timer_setup_restore(setup_pfc_test, enum_fanout_graph_facts, duthosts, storm_handle.stop_storm() -def populate_peer_info(neighbors, fanout_info, port): +def populate_peer_info(asic_type, neighbors, fanout_info, port): """ Build the peer_info map which will be used by the storm generation class @@ -134,6 +135,8 @@ def populate_peer_info(neighbors, fanout_info, port): Returns: peer_info (dict): all PFC params needed for fanout for storm generation """ + if asic_type == 'vs': + return {} peer_dev = neighbors[port]['peerdevice'] peer_port = neighbors[port]['peerport'] peer_info = {'peerdevice': peer_dev, @@ -159,7 +162,7 @@ def set_storm_params(dut, fanout_info, fanout, peer_params): logger.info("Setting up storm params") pfc_queue_index = 4 pfc_frames_count = 1000000 - peer_device = peer_params['peerdevice'] + peer_device = peer_params['peerdevice'] if dut.facts['asic_type'] != 'vs' else "" if dut.topo_type == 't2' and fanout[peer_device].os == 'sonic': pfc_gen_file = 'pfc_gen_t2.py' pfc_send_time = 8 @@ -195,6 +198,10 @@ def run_test(self, setup_info): self.storm_handle.stop_storm() time.sleep(16) + if self.dut.facts['asic_type'] == 'vs': + logger.info("Skip time detect for VS") + return + if self.dut.topo_type == 't2' and self.storm_handle.peer_device.os == 'sonic': storm_detect_ms = self.retrieve_timestamp("[d]etected PFC storm") else: @@ -225,6 +232,10 @@ def verify_pfcwd_timers(self): """ Compare the timestamps obtained and verify the timer accuracy """ + if self.dut.facts['asic_type'] == 'vs': + logger.info("Skip timer verify for VS") + return + self.all_detect_time.sort() self.all_restore_time.sort() logger.info("Verify that real detection time is not greater than configured") @@ -285,6 +296,10 @@ def verify_pfcwd_timers_t2(self): """ Compare the timestamps obtained and verify the timer accuracy for t2 chassis """ + if self.dut.facts['asic_type'] == 'vs': + logger.info("Skip timer verify for VS") + return + self.all_dut_detect_restore_time.sort() # Detect to restore elapsed time should always be less than 10 seconds since # storm is sent for 8 seconds diff --git a/tests/pfcwd/test_pfcwd_warm_reboot.py b/tests/pfcwd/test_pfcwd_warm_reboot.py index 67b67c264a0..ac37b746431 100644 --- a/tests/pfcwd/test_pfcwd_warm_reboot.py +++ b/tests/pfcwd/test_pfcwd_warm_reboot.py @@ -187,10 +187,13 @@ def storm_setup(self, port, queue, send_pfc_frame_interval, storm_defer=False): queue(int): The queue on the DUT port which will get stormed storm_defer(bool): if the storm needs to be deferred, default: False """ - peer_info = {'peerdevice': self.peer_device, - 'hwsku': self.fanout_info[self.peer_device]['device_info']['HwSku'], - 'pfc_fanout_interface': self.neighbors[port]['peerport'] - } + if self.dut.facts['asic_type'] == 'vs': + peer_info = {} + else: + peer_info = {'peerdevice': self.peer_device, + 'hwsku': self.fanout_info[self.peer_device]['device_info']['HwSku'], + 'pfc_fanout_interface': self.neighbors[port]['peerport'] + } if storm_defer: self.storm_handle[port][queue] = PFCStorm(self.dut, self.fanout_info, self.fanout, @@ -503,6 +506,7 @@ def pfcwd_wb_helper(self, fake_storm, testcase_actions, setup_pfc_test, enum_fan self.fanout_info = enum_fanout_graph_facts self.ptf = ptfhost self.dut = duthost + self.asic_type = duthost.facts['asic_type'] self.fanout = fanouthosts self.timers = setup_info['pfc_timers'] self.ports = setup_info['selected_test_ports'] @@ -553,8 +557,10 @@ def pfcwd_wb_helper(self, fake_storm, testcase_actions, setup_pfc_test, enum_fan for p_idx, port in enumerate(self.ports): logger.info("") logger.info("--- Testing on {} ---".format(port)) - send_pfc_frame_interval = calculate_send_pfc_frame_interval(duthost, port) \ - if self.fanout[self.ports[port]['peer_device']].os == 'onyx' else 0 + if self.asic_type != 'vs' and self.fanout[self.ports[port]['peer_device']].os == 'onyx': + send_pfc_frame_interval = calculate_send_pfc_frame_interval(duthost, port) + else: + send_pfc_frame_interval = 0 self.setup_test_params(port, setup_info['vlan'], p_idx) for q_idx, queue in enumerate(self.pfc_wd['queue_indices']): if not t_idx or storm_deferred: diff --git a/tests/platform_tests/api/conftest.py b/tests/platform_tests/api/conftest.py index a6471834a8b..5fc3640ffa9 100644 --- a/tests/platform_tests/api/conftest.py +++ b/tests/platform_tests/api/conftest.py @@ -1,6 +1,5 @@ import os import pytest -import http.client from tests.common.plugins.loganalyzer.loganalyzer import LogAnalyzer @@ -86,18 +85,6 @@ def stop_platform_api_service(duthosts): duthost.command(IPTABLES_DELETE_RULE_CMD, module_ignore_errors=True) -@pytest.fixture(scope='function') -def platform_api_conn(duthosts, enum_rand_one_per_hwsku_hostname, start_platform_api_service): - duthost = duthosts[enum_rand_one_per_hwsku_hostname] - dut_ip = duthost.mgmt_ip - - conn = http.client.HTTPConnection(dut_ip, SERVER_PORT) - try: - yield conn - finally: - conn.close() - - @pytest.fixture(autouse=True) def check_not_implemented_warnings(duthosts, enum_rand_one_per_hwsku_hostname): duthost = duthosts[enum_rand_one_per_hwsku_hostname] diff --git a/tests/platform_tests/api/test_chassis.py b/tests/platform_tests/api/test_chassis.py index 7f823331466..698e7f2e34e 100644 --- a/tests/platform_tests/api/test_chassis.py +++ b/tests/platform_tests/api/test_chassis.py @@ -11,6 +11,7 @@ from tests.common.utilities import get_host_visible_vars from tests.common.utilities import skip_release from tests.common.platform.interface_utils import get_physical_port_indices +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from tests.platform_tests.cli.util import get_skip_mod_list from .platform_api_test_base import PlatformApiTestBase @@ -28,8 +29,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] REGEX_MAC_ADDRESS = r'^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$' @@ -121,53 +121,53 @@ def compare_value_with_device_facts(self, duthost, key, value, case_sensitive=Tr # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] name = chassis.get_name(platform_api_conn) pytest_assert(name is not None, "Unable to retrieve chassis name") pytest_assert(isinstance(name, STRING_TYPE), "Chassis name appears incorrect") self.compare_value_with_platform_facts(duthost, 'name', name) - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 presence = chassis.get_presence(platform_api_conn) pytest_assert(presence is not None, "Unable to retrieve chassis presence") pytest_assert(isinstance(presence, bool), "Chassis presence appears incorrect") # Chassis should always be present pytest_assert(presence is True, "Chassis is not present") - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] model = chassis.get_model(platform_api_conn) pytest_assert(model is not None, "Unable to retrieve chassis model") pytest_assert(isinstance(model, STRING_TYPE), "Chassis model appears incorrect") self.compare_value_with_device_facts(duthost, 'model', model) - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] serial = chassis.get_serial(platform_api_conn) pytest_assert(serial is not None, "Unable to retrieve chassis serial number") pytest_assert(isinstance(serial, STRING_TYPE), "Chassis serial number appears incorrect") self.compare_value_with_device_facts(duthost, 'serial', serial) - def test_get_revision(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_revision(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release(duthost, ["201811", "201911", "202012"]) revision = chassis.get_revision(platform_api_conn) pytest_assert(revision is not None, "Unable to retrieve chassis revision") pytest_assert(isinstance(revision, STRING_TYPE), "Revision appears incorrect") - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 status = chassis.get_status(platform_api_conn) pytest_assert(status is not None, "Unable to retrieve chassis status") pytest_assert(isinstance(status, bool), "Chassis status appears incorrect") - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 position = chassis.get_position_in_parent(platform_api_conn) if self.expect(position is not None, "Failed to perform get_position_in_parent"): self.expect(isinstance(position, int), "Position value must be an integer value") self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 replaceable = chassis.is_replaceable(platform_api_conn) if self.expect(replaceable is not None, "Failed to perform is_replaceable"): self.expect(isinstance(replaceable, bool), "Replaceable value must be a bool value") @@ -177,7 +177,7 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in ChassisBase class # - def test_get_base_mac(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_base_mac(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # Ensure the base MAC address is sane duthost = duthosts[enum_rand_one_per_hwsku_hostname] base_mac = chassis.get_base_mac(platform_api_conn) @@ -185,7 +185,8 @@ def test_get_base_mac(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos pytest_assert(re.match(REGEX_MAC_ADDRESS, base_mac), "Base MAC address appears to be incorrect") self.compare_value_with_device_facts(duthost, 'base_mac', base_mac, False) - def test_get_system_eeprom_info(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_system_eeprom_info(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 ''' Test that we can retrieve sane system EEPROM info from the DUT via the platform API ''' # OCP ONIE TlvInfo EEPROM type codes defined here: @@ -258,7 +259,8 @@ def test_get_system_eeprom_info(self, duthosts, enum_rand_one_per_hwsku_hostname format(field, syseeprom_info_dict[field], expected_syseeprom_info_dict[field], duthost.hostname)) - def test_get_reboot_cause(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_reboot_cause(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 # TODO: Compare return values to potential combinations reboot_cause = chassis.get_reboot_cause(platform_api_conn) @@ -268,7 +270,7 @@ def test_get_reboot_cause(self, duthosts, enum_rand_one_per_hwsku_hostname, loca pytest_assert(isinstance(reboot_cause, list) and len(reboot_cause) == 2, "Reboot cause appears to be incorrect") - def test_components(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_components(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] try: @@ -297,7 +299,7 @@ def test_components(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Component {} is incorrect".format(i)) self.assert_expectations() - def test_modules(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_modules(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 try: num_modules = int(chassis.get_num_modules(platform_api_conn)) except Exception: @@ -319,7 +321,7 @@ def test_modules(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, pl self.expect(module_index == i, "Module index {} is not correct".format(module_index)) self.assert_expectations() - def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] try: num_fans = int(chassis.get_num_fans(platform_api_conn)) @@ -344,7 +346,7 @@ def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platf self.expect(fan and fan == fan_list[i], "Fan {} is incorrect".format(i)) self.assert_expectations() - def test_fan_drawers(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_fan_drawers(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] try: num_fan_drawers = int(chassis.get_num_fan_drawers(platform_api_conn)) @@ -371,7 +373,7 @@ def test_fan_drawers(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost "Fan drawer {} is incorrect".format(i)) self.assert_expectations() - def test_psus(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_psus(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] try: num_psus = int(chassis.get_num_psus(platform_api_conn)) @@ -396,7 +398,7 @@ def test_psus(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platf self.expect(psu and psu == psu_list[i], "PSU {} is incorrect".format(i)) self.assert_expectations() - def test_thermals(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_thermals(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] try: num_thermals = int(chassis.get_num_thermals(platform_api_conn)) @@ -424,7 +426,7 @@ def test_thermals(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() def test_sfps(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn, physical_port_indices): + localhost, platform_api_conn, physical_port_indices): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] if duthost.is_supervisor_node(): pytest.skip("skipping for supervisor node") @@ -463,7 +465,7 @@ def test_sfps(self, duthosts, enum_rand_one_per_hwsku_hostname, self.expect(sfp and sfp in sfp_list, "SFP object for PORT{} NOT found".format(index)) self.assert_expectations() - def test_status_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_status_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] # TODO: Get a platform-specific list of available colors for the status LED @@ -537,19 +539,20 @@ def test_status_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_thermal_manager(self, localhost, platform_api_conn, thermal_manager_enabled): + def test_get_thermal_manager(self, localhost, platform_api_conn, thermal_manager_enabled): # noqa F811 thermal_mgr = chassis.get_thermal_manager(platform_api_conn) pytest_assert(thermal_mgr is not None, "Failed to retrieve thermal manager") - def test_get_watchdog(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_watchdog(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 watchdog = chassis.get_watchdog(platform_api_conn) pytest_assert(watchdog is not None, "Failed to retrieve watchdog") - def test_get_eeprom(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_eeprom(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 eeprom = chassis.get_eeprom(platform_api_conn) pytest_assert(eeprom is not None, "Failed to retrieve system EEPROM") - def test_get_supervisor_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_supervisor_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 if chassis.is_modular_chassis(platform_api_conn): sup_slot = chassis.get_supervisor_slot(platform_api_conn) pytest_assert(isinstance(sup_slot, int) or isinstance(sup_slot, STRING_TYPE), @@ -557,7 +560,7 @@ def test_get_supervisor_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, l else: pytest.skip("skipped as this test is applicable to modular chassis only") - def test_get_my_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_my_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 if chassis.is_modular_chassis(platform_api_conn): my_slot = chassis.get_my_slot(platform_api_conn) pytest_assert(isinstance(my_slot, int) or isinstance(my_slot, STRING_TYPE), diff --git a/tests/platform_tests/api/test_chassis_fans.py b/tests/platform_tests/api/test_chassis_fans.py index b94f6b97a12..4962ba8f536 100644 --- a/tests/platform_tests/api/test_chassis_fans.py +++ b/tests/platform_tests/api/test_chassis_fans.py @@ -5,6 +5,7 @@ from tests.common.helpers.platform_api import chassis, fan from .platform_api_test_base import PlatformApiTestBase +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from tests.common.helpers.thermal_control_test_helper import start_thermal_control_daemon, stop_thermal_control_daemon ################################################### @@ -21,8 +22,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] FAN_DIRECTION_INTAKE = "intake" @@ -45,7 +45,8 @@ class TestChassisFans(PlatformApiTestBase): # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, platform_api_conn, duthost): + def setup(self, platform_api_conn, enum_rand_one_per_hwsku_hostname, duthosts): # noqa F811 + duthost = duthosts[enum_rand_one_per_hwsku_hostname] if self.num_fans is None: try: self.num_fans = int(chassis.get_num_fans(platform_api_conn)) @@ -92,7 +93,7 @@ def get_fan_facts(self, duthost, fan_idx, def_value, *keys): # # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for i in range(self.num_fans): name = fan.get_name(platform_api_conn, i) @@ -103,7 +104,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fans): presence = fan.get_presence(platform_api_conn, i) @@ -113,7 +114,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fans): model = fan.get_model(platform_api_conn, i) @@ -122,7 +123,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fans): serial = fan.get_serial(platform_api_conn, i) @@ -131,7 +132,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fans): status = fan.get_status(platform_api_conn, i) @@ -140,14 +141,14 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for i in range(self.num_fans): position = fan.get_position_in_parent(platform_api_conn, i) if self.expect(position is not None, "Failed to perform get_position_in_parent for fan {}".format(i)): self.expect(isinstance(position, int), "Position value must be an integer value for fan {}".format(i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for i in range(self.num_fans): replaceable = fan.is_replaceable(platform_api_conn, i) if self.expect(replaceable is not None, "Failed to perform is_replaceable for fan {}".format(i)): @@ -159,7 +160,7 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in FanBase class # - def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # Ensure the fan speed is sane for i in range(self.num_fans): speed = fan.get_speed(platform_api_conn, i) @@ -170,7 +171,7 @@ def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # Ensure the fan speed is sane FAN_DIRECTION_LIST = [ "intake", @@ -186,7 +187,7 @@ def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localho self.assert_expectations() def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] fans_skipped = 0 @@ -218,7 +219,7 @@ def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() - def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 fans_skipped = 0 duthost = duthosts[enum_rand_one_per_hwsku_hostname] @@ -258,7 +259,7 @@ def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localh self.assert_expectations() - def test_set_fans_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_fans_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 LED_COLOR_LIST = [ "off", "red", diff --git a/tests/platform_tests/api/test_component.py b/tests/platform_tests/api/test_component.py index 826be7eaa53..4c0f38e971b 100644 --- a/tests/platform_tests/api/test_component.py +++ b/tests/platform_tests/api/test_component.py @@ -5,6 +5,7 @@ from tests.common.helpers.platform_api import chassis, component from .platform_api_test_base import PlatformApiTestBase from tests.common.utilities import skip_release_for_platform +from tests.common.platform.device_utils import platform_api_conn # noqa F401 ################################################### # TODO: Remove this after we transition to Python 3 @@ -21,8 +22,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] image_list = [ @@ -41,7 +41,7 @@ class TestComponentApi(PlatformApiTestBase): # it relies on the platform_api_conn fixture, which is scoped at the function # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, platform_api_conn): + def setup(self, platform_api_conn): # noqa F811 if self.num_components is None: try: self.num_components = int(chassis.get_num_components(platform_api_conn)) @@ -73,7 +73,7 @@ def compare_value_with_platform_facts(self, duthost, key, value, component_idx): # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for i in range(self.num_components): @@ -83,8 +83,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.compare_value_with_platform_facts(duthost, 'name', name, i) self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_components): presence = component.get_presence(platform_api_conn, i) if self.expect(presence is not None, "Component {}: Unable to retrieve presence".format(i)): @@ -93,16 +92,14 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.expect(presence is True, "Component {} not present".format(i)) self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_components): model = component.get_model(platform_api_conn, i) if self.expect(model is not None, "Component {}: Unable to retrieve model".format(i)): self.expect(isinstance(model, STRING_TYPE), "Component {}: Model appears incorrect".format(i)) self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_components): serial = component.get_serial(platform_api_conn, i) if self.expect(serial is not None, "Component {}: Unable to retrieve serial number".format(i)): @@ -110,15 +107,14 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Component {}: Serial number appears incorrect".format(i)) self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_components): status = component.get_status(platform_api_conn, i) if self.expect(status is not None, "Component {}: Unable to retrieve status".format(i)): self.expect(isinstance(status, bool), "Component {}: Status appears incorrect".format(i)) self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for i in range(self.num_components): position = component.get_position_in_parent(platform_api_conn, i) if self.expect(position is not None, @@ -127,7 +123,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for component {}".format(i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for i in range(self.num_components): replaceable = component.is_replaceable(platform_api_conn, i) if self.expect(replaceable is not None, @@ -140,8 +136,8 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in ComponentBase class # - def test_get_description(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_description(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_components): description = component.get_description(platform_api_conn, i) if self.expect(description is not None, "Component {}: Failed to retrieve description".format(i)): @@ -149,8 +145,8 @@ def test_get_description(self, duthosts, enum_rand_one_per_hwsku_hostname, local "Component {}: Description appears to be incorrect".format(i)) self.assert_expectations() - def test_get_firmware_version(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_firmware_version(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_components): fw_version = component.get_firmware_version(platform_api_conn, i) if self.expect(fw_version is not None, "Component {}: Failed to retrieve firmware version".format(i)): @@ -159,7 +155,7 @@ def test_get_firmware_version(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() def test_get_available_firmware_version(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["nokia"]) @@ -175,7 +171,7 @@ def test_get_available_firmware_version(self, duthosts, enum_rand_one_per_hwsku_ self.assert_expectations() def test_get_firmware_update_notification(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["nokia"]) @@ -188,7 +184,8 @@ def test_get_firmware_update_notification(self, duthosts, enum_rand_one_per_hwsk "Component {}: Firmware update notification appears to be incorrect from image {}" .format(i, image)) - def test_install_firmware(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_install_firmware(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["nokia"]) @@ -202,7 +199,8 @@ def test_install_firmware(self, duthosts, enum_rand_one_per_hwsku_hostname, loca .format(i, image)) self.assert_expectations() - def test_update_firmware(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_update_firmware(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["nokia"]) diff --git a/tests/platform_tests/api/test_fan_drawer.py b/tests/platform_tests/api/test_fan_drawer.py index f9b67de1cd4..23091d92b40 100644 --- a/tests/platform_tests/api/test_fan_drawer.py +++ b/tests/platform_tests/api/test_fan_drawer.py @@ -3,6 +3,7 @@ import pytest from tests.common.helpers.platform_api import chassis, fan_drawer +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from .platform_api_test_base import PlatformApiTestBase @@ -20,8 +21,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] STATUS_LED_COLOR_GREEN = "green" @@ -39,7 +39,7 @@ class TestFanDrawerApi(PlatformApiTestBase): # it relies on the platform_api_conn fixture, which is scoped at the function # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, duthost, platform_api_conn): + def setup(self, duthost, platform_api_conn): # noqa F811 if self.num_fan_drawers is None: try: self.num_fan_drawers = int(chassis.get_num_fan_drawers(platform_api_conn)) @@ -87,7 +87,7 @@ def get_fan_drawer_facts(self, duthost, fan_drawer_idx, def_value, *keys): # # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for i in range(self.num_fan_drawers): name = fan_drawer.get_name(platform_api_conn, i) @@ -98,7 +98,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): presence = fan_drawer.get_presence(platform_api_conn, i) @@ -108,7 +108,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): model = fan_drawer.get_model(platform_api_conn, i) @@ -117,7 +117,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): serial = fan_drawer.get_serial(platform_api_conn, i) @@ -126,7 +126,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): status = fan_drawer.get_status(platform_api_conn, i) @@ -135,7 +135,7 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): position = fan_drawer.get_position_in_parent(platform_api_conn, i) if self.expect(position is not None, @@ -144,7 +144,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for fan drawer {}".format(i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): replaceable = fan_drawer.is_replaceable(platform_api_conn, i) if self.expect(replaceable is not None, "Failed to perform is_replaceable for fan drawer {}".format(i)): @@ -155,7 +155,7 @@ def test_is_replaceable(self, platform_api_conn): # # Functions to test methods defined in Fan_drawerBase class # - def test_get_num_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_num_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for i in range(self.num_fan_drawers): @@ -166,7 +166,7 @@ def test_get_num_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.compare_value_with_platform_facts(duthost, 'num_fans', num_fans, i) self.assert_expectations() - def test_get_all_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_all_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_fan_drawers): fans_list = fan_drawer.get_all_fans(platform_api_conn, i) @@ -175,7 +175,8 @@ def test_get_all_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos "fan drawer {} list of fans appear to be incorrect".format(i)) self.assert_expectations() - def test_set_fan_drawers_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_fan_drawers_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] FAULT_LED_COLOR_LIST = [ @@ -253,7 +254,7 @@ def test_set_fan_drawers_led(self, duthosts, enum_rand_one_per_hwsku_hostname, l self.assert_expectations() def test_get_maximum_consumed_power(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] max_power_skipped = 0 diff --git a/tests/platform_tests/api/test_fan_drawer_fans.py b/tests/platform_tests/api/test_fan_drawer_fans.py index 03f6f0eac1f..87de022aa5d 100644 --- a/tests/platform_tests/api/test_fan_drawer_fans.py +++ b/tests/platform_tests/api/test_fan_drawer_fans.py @@ -6,6 +6,7 @@ from tests.common.helpers.platform_api import chassis, fan_drawer, fan_drawer_fan from tests.common.helpers.thermal_control_test_helper import start_thermal_control_daemon, stop_thermal_control_daemon +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from .platform_api_test_base import PlatformApiTestBase ################################################### @@ -22,8 +23,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] FAN_DIRECTION_INTAKE = "intake" @@ -46,7 +46,7 @@ class TestFanDrawerFans(PlatformApiTestBase): # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): + def setup(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] if self.num_fan_drawers is None: try: @@ -102,7 +102,7 @@ def get_fan_facts(self, duthost, fan_drawer_idx, fan_idx, def_value, *keys): # # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) @@ -117,7 +117,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) @@ -134,7 +134,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) @@ -148,7 +148,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) @@ -163,7 +163,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) @@ -176,7 +176,7 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) for i in range(num_fans): @@ -187,7 +187,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for drawer {} fan {}".format(j, i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) for i in range(num_fans): @@ -203,7 +203,7 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in FanBase class # - def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_fan_drawers): num_fans = fan_drawer.get_num_fans(platform_api_conn, j) @@ -219,7 +219,7 @@ def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # Ensure the fan speed is sane FAN_DIRECTION_LIST = [ "intake", @@ -239,8 +239,8 @@ def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localho self.assert_expectations() - def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn, - suspend_and_resume_hw_tc_on_mellanox_device): + def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn, suspend_and_resume_hw_tc_on_mellanox_device): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] fan_drawers_skipped = 0 @@ -282,7 +282,7 @@ def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() - def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] fan_drawers_skipped = 0 @@ -327,7 +327,7 @@ def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localh self.assert_expectations() - def test_set_fans_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_fans_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] FAULT_LED_COLOR_LIST = [ STATUS_LED_COLOR_AMBER, diff --git a/tests/platform_tests/api/test_module.py b/tests/platform_tests/api/test_module.py index ff14a37cabd..525d2cdf33b 100644 --- a/tests/platform_tests/api/test_module.py +++ b/tests/platform_tests/api/test_module.py @@ -8,6 +8,7 @@ from .platform_api_test_base import PlatformApiTestBase from tests.common.helpers.assertions import pytest_assert from tests.common.helpers.dut_utils import ignore_t2_syslog_msgs +from tests.common.platform.device_utils import platform_api_conn # noqa F401 ################################################### # TODO: Remove this after we transition to Python 3 @@ -23,8 +24,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] REGEX_MAC_ADDRESS = r'^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$' @@ -67,7 +67,7 @@ class TestModuleApi(PlatformApiTestBase): # it relies on the platform_api_conn_per_supervisor fixture, which is scoped at the function # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, platform_api_conn): + def setup(self, platform_api_conn): # noqa F811 if self.num_modules is None: try: self.num_modules = int(chassis.get_num_modules(platform_api_conn)) @@ -85,14 +85,14 @@ def get_skip_mod_list(self, duthosts, enum_rand_one_per_hwsku_hostname): duthost = duthosts[enum_rand_one_per_hwsku_hostname] self.skip_mod_list = get_skip_mod_list(duthost) - def skip_absent_module(self, module_num, platform_api_conn): + def skip_absent_module(self, module_num, platform_api_conn): # noqa F811 name = module.get_name(platform_api_conn, module_num) if name in self.skip_mod_list: logger.info("Skipping module {} since it is part of skip_mod_list".format(name)) return True return False - def skip_module_other_than_myself(self, module_num, platform_api_conn): + def skip_module_other_than_myself(self, module_num, platform_api_conn): # noqa F811 if chassis.is_modular_chassis(platform_api_conn): name = module.get_name(platform_api_conn, module_num) module_slot = module.get_slot(platform_api_conn, module_num) @@ -103,7 +103,7 @@ def skip_module_other_than_myself(self, module_num, platform_api_conn): return False return False - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -113,7 +113,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.expect(isinstance(name, STRING_TYPE), "Module {} name appears incorrect".format(i)) self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): presence = module.get_presence(platform_api_conn, i) @@ -126,7 +126,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos logger.info("Skipping module {} since it is part of skip_mod_list".format(name)) self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -138,7 +138,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(model, STRING_TYPE), "Module {} model appears incorrect".format(i)) self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -150,7 +150,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(serial, STRING_TYPE), "Module {} serial number appears incorrect".format(i)) self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -160,7 +160,7 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(status, bool), "Module {} status appears incorrect".format(i)) self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): continue @@ -170,7 +170,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for module {}".format(i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): continue @@ -185,7 +185,7 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in ModuleBase class # - def test_get_base_mac(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_base_mac(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # Ensure the base MAC address of each module is sane # TODO: Add expected base MAC address for each module to inventory file and compare against it @@ -206,7 +206,8 @@ def test_get_base_mac(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos "Module {}: Base MAC address appears to be incorrect".format(i)) self.assert_expectations() - def test_get_system_eeprom_info(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_system_eeprom_info(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 """ Test that we can retrieve sane system EEPROM info from each module of the DUT via the platform API """ @@ -286,7 +287,7 @@ def test_get_system_eeprom_info(self, duthosts, enum_rand_one_per_hwsku_hostname "Module {}: Serial number appears to be incorrect".format(i)) self.assert_expectations() - def test_components(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_components(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Ensure the number of components and that the returned list is correct for this platform for mod_idx in range(self.num_modules): @@ -308,7 +309,7 @@ def test_components(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Module {}: Component {} is incorrect".format(mod_idx, comp_idx)) self.assert_expectations() - def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Ensure the number of fans and that the returned list is correct for this platform for mod_idx in range(self.num_modules): @@ -330,7 +331,7 @@ def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platf "Module {}: Fan {} is incorrect".format(mod_idx, fan_idx)) self.assert_expectations() - def test_psus(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_psus(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Ensure the number of PSUs and that the returned list is correct for this platform for mod_idx in range(self.num_modules): @@ -352,7 +353,7 @@ def test_psus(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platf "Module {}: PSU {} is incorrect".format(mod_idx, psu_idx)) self.assert_expectations() - def test_thermals(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_thermals(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Ensure the number of thermals and that the returned list is correct for this platform for mod_idx in range(self.num_modules): @@ -374,7 +375,7 @@ def test_thermals(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p "Thermal {} is incorrect".format(therm_idx)) self.assert_expectations() - def test_sfps(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_sfps(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Ensure the number of SFPs and that the returned list is correct for this platform for mod_idx in range(self.num_modules): @@ -396,7 +397,8 @@ def test_sfps(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platf "Module {}: SFP {} is incorrect".format(mod_idx, sfp_idx)) self.assert_expectations() - def test_get_description(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_description(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -407,7 +409,7 @@ def test_get_description(self, duthosts, enum_rand_one_per_hwsku_hostname, local "Module {} description appears incorrect".format(i)) self.assert_expectations() - def test_get_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -418,7 +420,7 @@ def test_get_slot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p "Module {} slot id is not correct ".format(i)) self.assert_expectations() - def test_get_type(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_type(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -430,7 +432,7 @@ def test_get_type(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() def test_get_maximum_consumed_power(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -441,7 +443,8 @@ def test_get_maximum_consumed_power(self, duthosts, enum_rand_one_per_hwsku_host "Module {} max consumed power format appears incorrect ".format(i)) self.assert_expectations() - def test_get_midplane_ip(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_midplane_ip(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -454,7 +457,8 @@ def test_get_midplane_ip(self, duthosts, enum_rand_one_per_hwsku_hostname, local "Module {} midplane ip appears incorrect".format(i)) self.assert_expectations() - def test_is_midplane_reachable(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_is_midplane_reachable(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -468,7 +472,8 @@ def test_is_midplane_reachable(self, duthosts, enum_rand_one_per_hwsku_hostname, "Module {} midplabe reachability appears incorrect".format(i)) self.assert_expectations() - def test_get_oper_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_oper_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_modules): if self.skip_absent_module(i, platform_api_conn): @@ -479,7 +484,7 @@ def test_get_oper_status(self, duthosts, enum_rand_one_per_hwsku_hostname, local self.expect(status in MODULE_STATUS, "Module {} status {} is invalid value".format(i, status)) self.assert_expectations() - def test_reboot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_reboot(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 reboot_type = 'default' reboot_timeout = 300 diff --git a/tests/platform_tests/api/test_psu.py b/tests/platform_tests/api/test_psu.py index b9ad83b1ea2..a7bcdbe07f1 100644 --- a/tests/platform_tests/api/test_psu.py +++ b/tests/platform_tests/api/test_psu.py @@ -7,6 +7,7 @@ from tests.platform_tests.cli.util import get_skip_mod_list from .platform_api_test_base import PlatformApiTestBase from tests.common.utilities import skip_release_for_platform, wait_until +from tests.common.platform.device_utils import platform_api_conn # noqa F401 ################################################### @@ -24,7 +25,6 @@ pytestmark = [ pytest.mark.topology('any'), - pytest.mark.device_type('physical'), pytest.mark.disable_loganalyzer # disable automatic loganalyzer ] @@ -41,7 +41,7 @@ class TestPsuApi(PlatformApiTestBase): chassis_facts = None @pytest.fixture(scope="function", autouse=True) - def setup(self, platform_api_conn, duthosts, enum_rand_one_per_hwsku_hostname): + def setup(self, platform_api_conn, duthosts, enum_rand_one_per_hwsku_hostname): # noqa F811 if self.num_psus is None: try: self.num_psus = int(chassis.get_num_psus(platform_api_conn)) @@ -82,7 +82,7 @@ def get_psu_facts(self, duthost, psu_idx, def_value, *keys): return def_value - def skip_absent_psu(self, psu_num, platform_api_conn): + def skip_absent_psu(self, psu_num, platform_api_conn): # noqa F811 name = psu.get_name(platform_api_conn, psu_num) if name in self.psu_skip_list: logger.info("Skipping PSU {} since it is part of psu_skip_list".format(name)) @@ -103,7 +103,7 @@ def get_psu_parameter(self, psu_info, psu_parameter, get_data, message): # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for i in range(self.num_psus): if self.skip_absent_psu(i, platform_api_conn): @@ -114,7 +114,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.compare_value_with_platform_facts(duthost, 'name', name, i) self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_psus): presence = psu.get_presence(platform_api_conn, i) name = psu.get_name(platform_api_conn, i) @@ -127,7 +127,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos # that the psu is not present when in the skip list self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_psus): if self.skip_absent_psu(i, platform_api_conn): continue @@ -136,7 +136,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(model, STRING_TYPE), "PSU {} model appears incorrect".format(i)) self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_psus): if self.skip_absent_psu(i, platform_api_conn): continue @@ -145,7 +145,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(serial, STRING_TYPE), "PSU {} serial number appears incorrect".format(i)) self.assert_expectations() - def test_get_revision(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_revision(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release(duthost, ["201811", "201911", "202012"]) for i in range(self.num_psus): @@ -156,7 +156,7 @@ def test_get_revision(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.expect(isinstance(revision, STRING_TYPE), "PSU {} serial number appears incorrect".format(i)) self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_psus): if self.skip_absent_psu(i, platform_api_conn): continue @@ -165,7 +165,7 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(status, bool), "PSU {} status appears incorrect".format(i)) self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for psu_id in range(self.num_psus): if self.skip_absent_psu(psu_id, platform_api_conn): continue @@ -176,7 +176,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for psu id {}".format(psu_id)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for psu_id in range(self.num_psus): if self.skip_absent_psu(psu_id, platform_api_conn): continue @@ -191,7 +191,7 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in PsuBase class # - def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 ''' PSU fan test ''' for psu_id in range(self.num_psus): try: @@ -210,7 +210,7 @@ def test_fans(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platf self.expect(fan and fan == fan_list[i], "Fan {} of PSU {} is incorrect".format(i, psu_id)) self.assert_expectations() - def test_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 ''' PSU power test ''' duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["arista"]) @@ -271,7 +271,7 @@ def check_psu_power(failure_count): self.assert_expectations() - def test_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 ''' PSU temperature test ''' duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["arista"]) @@ -306,7 +306,7 @@ def test_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost self.assert_expectations() - def test_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 ''' PSU status led test ''' duthost = duthosts[enum_rand_one_per_hwsku_hostname] FAULT_LED_COLOR_LIST = [ @@ -397,7 +397,7 @@ def test_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platfo self.assert_expectations() - def test_thermals(self, platform_api_conn): + def test_thermals(self, platform_api_conn): # noqa F811 for psu_id in range(self.num_psus): if self.skip_absent_psu(psu_id, platform_api_conn): continue @@ -418,7 +418,7 @@ def test_thermals(self, platform_api_conn): self.assert_expectations() - def test_master_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_master_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] FAULT_LED_COLOR_LIST = [ STATUS_LED_COLOR_AMBER, diff --git a/tests/platform_tests/api/test_psu_fans.py b/tests/platform_tests/api/test_psu_fans.py index f348ecb40a8..932310c32e3 100644 --- a/tests/platform_tests/api/test_psu_fans.py +++ b/tests/platform_tests/api/test_psu_fans.py @@ -5,6 +5,7 @@ import pytest from tests.common.helpers.platform_api import chassis, psu, psu_fan +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from .platform_api_test_base import PlatformApiTestBase @@ -22,8 +23,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] FAN_DIRECTION_INTAKE = "intake" @@ -46,7 +46,7 @@ class TestPsuFans(PlatformApiTestBase): # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, platform_api_conn): + def setup(self, platform_api_conn): # noqa F811 if self.num_psus is None: try: self.num_psus = chassis.get_num_psus(platform_api_conn) @@ -96,7 +96,7 @@ def get_fan_facts(self, duthost, psu_idx, fan_idx, def_value, *keys): # # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) @@ -133,8 +133,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) @@ -150,8 +149,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) @@ -163,8 +161,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) @@ -177,8 +174,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) @@ -190,7 +186,7 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) for i in range(num_fans): @@ -201,7 +197,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for PSU {} fan {}".format(j, i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) for i in range(num_fans): @@ -217,7 +213,7 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in FanBase class # - def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for j in range(self.num_psus): num_fans = psu.get_num_fans(platform_api_conn, j) @@ -236,7 +232,7 @@ def test_get_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # Ensure the fan speed is sane FAN_DIRECTION_LIST = [ "intake", @@ -255,8 +251,8 @@ def test_get_direction(self, duthosts, enum_rand_one_per_hwsku_hostname, localho self.assert_expectations() - def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] psus_skipped = 0 @@ -296,8 +292,7 @@ def test_get_fans_target_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() - def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): - + def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] psus_skipped = 0 @@ -338,7 +333,7 @@ def test_set_fans_speed(self, duthosts, enum_rand_one_per_hwsku_hostname, localh self.assert_expectations() - def test_set_fans_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_fans_led(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 LED_COLOR_LIST = [ "off", "red", diff --git a/tests/platform_tests/api/test_sfp.py b/tests/platform_tests/api/test_sfp.py index dc170a53d6e..73283ebf75d 100644 --- a/tests/platform_tests/api/test_sfp.py +++ b/tests/platform_tests/api/test_sfp.py @@ -10,6 +10,7 @@ from tests.common.utilities import wait_until from tests.common.fixtures.conn_graph_facts import conn_graph_facts # noqa F401 from tests.common.fixtures.duthost_utils import shutdown_ebgp # noqa F401 +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from .platform_api_test_base import PlatformApiTestBase @@ -27,8 +28,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] @@ -322,7 +322,7 @@ def is_xcvr_support_power_override(self, xcvr_info_dict): # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 expected_sfp_names = self.sfp_setup["sfp_fact_names"] for i in self.sfp_setup["sfp_test_port_indices"]: name = sfp.get_name(platform_api_conn, i) @@ -332,7 +332,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Transceiver name '{}' for PORT{} NOT found in platform.json".format(name, i)) self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in self.sfp_setup["sfp_test_port_indices"]: presence = sfp.get_presence(platform_api_conn, i) if self.expect(presence is not None, "Unable to retrieve transceiver {} presence".format(i)): @@ -340,7 +340,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.expect(presence is True, "Transceiver {} is not present".format(i)) self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -350,7 +350,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.expect(isinstance(model, STRING_TYPE), "Transceiver {} model appears incorrect".format(i)) self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -361,7 +361,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Transceiver {} serial number appears incorrect".format(i)) self.assert_expectations() - def test_is_replaceable(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): + def test_is_replaceable(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) for sfp_id in self.sfp_setup["sfp_test_port_indices"]: @@ -375,7 +375,8 @@ def test_is_replaceable(self, duthosts, enum_rand_one_per_hwsku_hostname, platfo # Functions to test methods defined in SfpBase class # - def test_get_transceiver_info(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_transceiver_info(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 # TODO: Do more sanity checking on transceiver info values for i in self.sfp_setup["sfp_test_port_indices"]: info_dict = sfp.get_transceiver_info(platform_api_conn, i) @@ -430,7 +431,7 @@ def test_get_transceiver_info(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() def test_get_transceiver_bulk_status(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn, port_list_with_flat_memory): + localhost, platform_api_conn, port_list_with_flat_memory): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -454,7 +455,7 @@ def test_get_transceiver_bulk_status(self, duthosts, enum_rand_one_per_hwsku_hos self.assert_expectations() def test_get_transceiver_threshold_info(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 # TODO: Do more sanity checking on transceiver threshold info values duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -495,7 +496,8 @@ def test_get_transceiver_threshold_info(self, duthosts, enum_rand_one_per_hwsku_ False, "Transceiver {} threshold info contains unexpected field '{}'".format(i, key)) self.assert_expectations() - def test_get_reset_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_reset_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -507,7 +509,7 @@ def test_get_reset_status(self, duthosts, enum_rand_one_per_hwsku_hostname, loca "Transceiver {} reset status appears incorrect".format(i)) self.assert_expectations() - def test_get_rx_los(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_rx_los(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Do more sanity checking on the data we retrieve duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -528,7 +530,7 @@ def test_get_rx_los(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Transceiver {} RX loss-of-signal data appears incorrect".format(i)) self.assert_expectations() - def test_get_tx_fault(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_tx_fault(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Do more sanity checking on the data we retrieve duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -548,7 +550,8 @@ def test_get_tx_fault(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos "Transceiver {} TX fault data appears incorrect".format(i)) self.assert_expectations() - def test_get_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 # TODO: Do more sanity checking on the data we retrieve duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -567,7 +570,7 @@ def test_get_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, local self.expect(isinstance(temp, float), "Transceiver {} temperature appears incorrect".format(i)) self.assert_expectations() - def test_get_voltage(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_voltage(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Do more sanity checking on the data we retrieve duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -586,7 +589,7 @@ def test_get_voltage(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost self.expect(isinstance(voltage, float), "Transceiver {} voltage appears incorrect".format(i)) self.assert_expectations() - def test_get_tx_bias(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_tx_bias(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -605,7 +608,7 @@ def test_get_tx_bias(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost "Transceiver {} TX bias data appears incorrect".format(i)) self.assert_expectations() - def test_get_rx_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_rx_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -630,7 +633,7 @@ def test_get_rx_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos "Transceiver {} RX power data appears incorrect".format(i)) self.assert_expectations() - def test_get_tx_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_tx_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Do more sanity checking on the data we retrieve duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -661,7 +664,7 @@ def test_get_tx_power(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos "Transceiver {} TX power data appears incorrect".format(i)) self.assert_expectations() - def test_reset(self, request, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_reset(self, request, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 # TODO: Verify that the transceiver was actually reset duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -678,7 +681,7 @@ def test_reset(self, request, duthosts, enum_rand_one_per_hwsku_hostname, localh self.expect(ret is False, "Resetting transceiver {} succeeded but should have failed".format(i)) self.assert_expectations() - def test_tx_disable(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_tx_disable(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 """This function tests both the get_tx_disable() and tx_disable() APIs""" duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx"]) @@ -705,7 +708,8 @@ def test_tx_disable(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, "Transceiver {} TX disable data is incorrect".format(i)) self.assert_expectations() - def test_tx_disable_channel(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_tx_disable_channel(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 """This function tests both the get_tx_disable_channel() and tx_disable_channel() APIs""" duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx", "nokia"]) @@ -758,10 +762,10 @@ def test_tx_disable_channel(self, duthosts, enum_rand_one_per_hwsku_hostname, lo expected_mask = expected_mask >> 1 self.assert_expectations() - def _check_lpmode_status(self, sfp, platform_api_conn, i, state): + def _check_lpmode_status(self, sfp, platform_api_conn, i, state): # noqa F811 return state == sfp.get_lpmode(platform_api_conn, i) - def test_lpmode(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_lpmode(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 """This function tests both the get_lpmode() and set_lpmode() APIs""" for i in self.sfp_setup["sfp_test_port_indices"]: info_dict = sfp.get_transceiver_info(platform_api_conn, i) @@ -800,7 +804,8 @@ def test_lpmode(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, pla .format(i, "enable" if state is True else "disable")) self.assert_expectations() - def test_power_override(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_power_override(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 """This function tests both the get_power_override() and set_power_override() APIs""" duthost = duthosts[enum_rand_one_per_hwsku_hostname] skip_release_for_platform(duthost, ["202012"], ["arista", "mlnx", "nokia"]) @@ -846,7 +851,8 @@ def test_power_override(self, duthosts, enum_rand_one_per_hwsku_hostname, localh "Transceiver {} power override data is incorrect".format(i)) self.assert_expectations() - def test_get_error_description(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_error_description(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 """This function tests get_error_description() API (supported on 202106 and above)""" skip_release(duthosts[enum_rand_one_per_hwsku_hostname], ["201811", "201911", "202012"]) @@ -865,7 +871,7 @@ def test_get_error_description(self, duthosts, enum_rand_one_per_hwsku_hostname, self.expect(error_description == "OK", "Transceiver {} is not present".format(i)) self.assert_expectations() - def test_thermals(self, platform_api_conn): + def test_thermals(self, platform_api_conn): # noqa F811 for sfp_id in self.sfp_setup["sfp_test_port_indices"]: try: num_thermals = int(sfp.get_num_thermals(platform_api_conn, sfp_id)) diff --git a/tests/platform_tests/api/test_thermal.py b/tests/platform_tests/api/test_thermal.py index 5373320c8ed..503c2b4ab94 100644 --- a/tests/platform_tests/api/test_thermal.py +++ b/tests/platform_tests/api/test_thermal.py @@ -3,6 +3,7 @@ from tests.common.helpers.platform_api import chassis, thermal from tests.common.utilities import skip_release_for_platform +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from .platform_api_test_base import PlatformApiTestBase @@ -20,8 +21,7 @@ pytestmark = [ pytest.mark.disable_loganalyzer, # disable automatic loganalyzer - pytest.mark.topology('any'), - pytest.mark.device_type('physical') + pytest.mark.topology('any') ] @@ -35,7 +35,7 @@ class TestThermalApi(PlatformApiTestBase): # level, so we must do the same here to prevent a scope mismatch. @pytest.fixture(scope="function", autouse=True) - def setup(self, platform_api_conn): + def setup(self, platform_api_conn): # noqa F811 if self.num_thermals is None: try: self.num_thermals = int(chassis.get_num_thermals(platform_api_conn)) @@ -93,7 +93,7 @@ def get_thermal_temperature(self, duthost, def_value, key): # Functions to test methods inherited from DeviceBase class # - def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] for i in range(self.num_thermals): name = thermal.get_name(platform_api_conn, i) @@ -104,7 +104,7 @@ def test_get_name(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, p self.assert_expectations() - def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_thermals): presence = thermal.get_presence(platform_api_conn, i) @@ -114,7 +114,7 @@ def test_get_presence(self, duthosts, enum_rand_one_per_hwsku_hostname, localhos self.assert_expectations() - def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_thermals): model = thermal.get_model(platform_api_conn, i) @@ -123,7 +123,7 @@ def test_get_model(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_thermals): serial = thermal.get_serial(platform_api_conn, i) @@ -132,7 +132,7 @@ def test_get_serial(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): # noqa F811 for i in range(self.num_thermals): status = thermal.get_status(platform_api_conn, i) @@ -141,7 +141,7 @@ def test_get_status(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, self.assert_expectations() - def test_get_position_in_parent(self, platform_api_conn): + def test_get_position_in_parent(self, platform_api_conn): # noqa F811 for i in range(self.num_thermals): position = thermal.get_position_in_parent(platform_api_conn, i) if self.expect(position is not None, "Failed to perform get_position_in_parent for thermal {}".format(i)): @@ -149,7 +149,7 @@ def test_get_position_in_parent(self, platform_api_conn): "Position value must be an integer value for thermal {}".format(i)) self.assert_expectations() - def test_is_replaceable(self, platform_api_conn): + def test_is_replaceable(self, platform_api_conn): # noqa F811 for i in range(self.num_thermals): replaceable = thermal.is_replaceable(platform_api_conn, i) if self.expect(replaceable is not None, "Failed to perform is_replaceable for thermal {}".format(i)): @@ -161,7 +161,8 @@ def test_is_replaceable(self, platform_api_conn): # Functions to test methods defined in ThermalBase class # - def test_get_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 for i in range(self.num_thermals): temperature = thermal.get_temperature(platform_api_conn, i) @@ -169,7 +170,8 @@ def test_get_temperature(self, duthosts, enum_rand_one_per_hwsku_hostname, local self.expect(isinstance(temperature, float), "Thermal {} temperature appears incorrect".format(i)) self.assert_expectations() - def test_get_minimum_recorded(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_minimum_recorded(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 @@ -195,7 +197,8 @@ def test_get_minimum_recorded(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() - def test_get_maximum_recorded(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_maximum_recorded(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 @@ -221,7 +224,8 @@ def test_get_maximum_recorded(self, duthosts, enum_rand_one_per_hwsku_hostname, self.assert_expectations() - def test_get_low_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_low_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 @@ -244,7 +248,8 @@ def test_get_low_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, loc self.assert_expectations() - def test_get_high_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_get_high_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 @@ -268,7 +273,7 @@ def test_get_high_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, lo self.assert_expectations() def test_get_low_critical_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 @@ -292,7 +297,7 @@ def test_get_low_critical_threshold(self, duthosts, enum_rand_one_per_hwsku_host self.assert_expectations() def test_get_high_critical_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn): + localhost, platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 @@ -316,7 +321,8 @@ def test_get_high_critical_threshold(self, duthosts, enum_rand_one_per_hwsku_hos self.assert_expectations() - def test_set_low_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_low_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["arista"]) @@ -349,7 +355,8 @@ def test_set_low_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, loc self.assert_expectations() - def test_set_high_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn): + def test_set_high_threshold(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn): # noqa F811 duthost = duthosts[enum_rand_one_per_hwsku_hostname] thermals_skipped = 0 skip_release_for_platform(duthost, ["202012", "201911", "201811"], ["arista"]) diff --git a/tests/platform_tests/api/test_watchdog.py b/tests/platform_tests/api/test_watchdog.py index 73147b5b8a2..7a79ce9f246 100644 --- a/tests/platform_tests/api/test_watchdog.py +++ b/tests/platform_tests/api/test_watchdog.py @@ -6,6 +6,7 @@ import pytest from tests.common.helpers.platform_api import watchdog from tests.common.helpers.assertions import pytest_assert +from tests.common.platform.device_utils import platform_api_conn # noqa F401 from .platform_api_test_base import PlatformApiTestBase from collections import OrderedDict @@ -40,7 +41,7 @@ class TestWatchdogApi(PlatformApiTestBase): ''' Hardware watchdog platform API test cases ''' @pytest.fixture(scope='function', autouse=True) - def watchdog_not_running(self, platform_api_conn, duthosts, enum_rand_one_per_hwsku_hostname): + def watchdog_not_running(self, platform_api_conn, duthosts, enum_rand_one_per_hwsku_hostname): # noqa F811 ''' Fixture that automatically runs on each test case and verifies that watchdog is not running before the test begins and disables it after the test ends''' @@ -92,7 +93,8 @@ def conf(self, request, duthosts, enum_rand_one_per_hwsku_hostname): return config @pytest.mark.dependency() - def test_arm_disarm_states(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, platform_api_conn, conf): + def test_arm_disarm_states(self, duthosts, enum_rand_one_per_hwsku_hostname, localhost, + platform_api_conn, conf): # noqa F811 ''' arm watchdog with a valid timeout value, verify it is in armed state, disarm watchdog and verify it is in disarmed state ''' @@ -139,7 +141,7 @@ def test_arm_disarm_states(self, duthosts, enum_rand_one_per_hwsku_hostname, loc self.assert_expectations() @pytest.mark.dependency(depends=["test_arm_disarm_states"]) - def test_remaining_time(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): + def test_remaining_time(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): # noqa F811 ''' arm watchdog with a valid timeout and verify that remaining time API works correctly ''' watchdog_timeout = conf['valid_timeout'] @@ -168,7 +170,7 @@ def test_remaining_time(self, duthosts, enum_rand_one_per_hwsku_hostname, platfo self.assert_expectations() @pytest.mark.dependency(depends=["test_arm_disarm_states"]) - def test_periodic_arm(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): + def test_periodic_arm(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): # noqa F811 ''' arm watchdog several times as watchdog deamon would and verify API behaves correctly ''' watchdog_timeout = conf['valid_timeout'] @@ -190,7 +192,8 @@ def test_periodic_arm(self, duthosts, enum_rand_one_per_hwsku_hostname, platform self.assert_expectations() @pytest.mark.dependency(depends=["test_arm_disarm_states"]) - def test_arm_different_timeout_greater(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): + def test_arm_different_timeout_greater(self, duthosts, enum_rand_one_per_hwsku_hostname, + platform_api_conn, conf): # noqa F811 ''' arm the watchdog with greater timeout value and verify new timeout was accepted; If platform accepts only single valid timeout value, @greater_timeout should be None. ''' @@ -212,7 +215,8 @@ def test_arm_different_timeout_greater(self, duthosts, enum_rand_one_per_hwsku_h self.assert_expectations() @pytest.mark.dependency(depends=["test_arm_disarm_states"]) - def test_arm_different_timeout_smaller(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): + def test_arm_different_timeout_smaller(self, duthosts, enum_rand_one_per_hwsku_hostname, + platform_api_conn, conf): # noqa F811 ''' arm the watchdog with smaller timeout value and verify new timeout was accepted; If platform accepts only single valid timeout value, @greater_timeout should be None. ''' @@ -235,7 +239,8 @@ def test_arm_different_timeout_smaller(self, duthosts, enum_rand_one_per_hwsku_h self.assert_expectations() @pytest.mark.dependency(depends=["test_arm_disarm_states"]) - def test_arm_too_big_timeout(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn, conf): + def test_arm_too_big_timeout(self, duthosts, enum_rand_one_per_hwsku_hostname, + platform_api_conn, conf): # noqa F811 ''' try to arm the watchdog with timeout that is too big for hardware watchdog; If no such limitation exist, @too_big_timeout should be None for such platform. ''' @@ -249,7 +254,7 @@ def test_arm_too_big_timeout(self, duthosts, enum_rand_one_per_hwsku_hostname, p self.assert_expectations() @pytest.mark.dependency(depends=["test_arm_disarm_states"]) - def test_arm_negative_timeout(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): + def test_arm_negative_timeout(self, duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): # noqa F811 ''' try to arm the watchdog with negative value ''' watchdog_timeout = -1 diff --git a/tests/platform_tests/daemon/test_fancontrol.py b/tests/platform_tests/daemon/test_fancontrol.py index 62b5a3b5e90..172f52a53c1 100644 --- a/tests/platform_tests/daemon/test_fancontrol.py +++ b/tests/platform_tests/daemon/test_fancontrol.py @@ -19,7 +19,6 @@ pytestmark = [ pytest.mark.topology('any'), - pytest.mark.device_type('physical'), pytest.mark.sanity_check(skip_sanity=True), pytest.mark.disable_loganalyzer ] diff --git a/tests/platform_tests/daemon/test_ledd.py b/tests/platform_tests/daemon/test_ledd.py index 99358488a79..f3445d70f34 100644 --- a/tests/platform_tests/daemon/test_ledd.py +++ b/tests/platform_tests/daemon/test_ledd.py @@ -21,7 +21,6 @@ pytestmark = [ pytest.mark.topology('any'), - pytest.mark.device_type('physical'), pytest.mark.sanity_check(skip_sanity=True), pytest.mark.disable_loganalyzer ] diff --git a/tests/platform_tests/daemon/test_pcied.py b/tests/platform_tests/daemon/test_pcied.py index 8f5d459f3df..9d8e43d36b9 100644 --- a/tests/platform_tests/daemon/test_pcied.py +++ b/tests/platform_tests/daemon/test_pcied.py @@ -21,7 +21,6 @@ pytestmark = [ pytest.mark.topology('any'), - pytest.mark.device_type('physical'), pytest.mark.sanity_check(skip_sanity=True), pytest.mark.disable_loganalyzer ] diff --git a/tests/platform_tests/daemon/test_psud.py b/tests/platform_tests/daemon/test_psud.py index 7c20ca45a88..5f96e2c3120 100644 --- a/tests/platform_tests/daemon/test_psud.py +++ b/tests/platform_tests/daemon/test_psud.py @@ -20,7 +20,6 @@ pytestmark = [ pytest.mark.topology('any'), - pytest.mark.device_type('physical'), pytest.mark.sanity_check(skip_sanity=True), pytest.mark.disable_loganalyzer ] @@ -80,6 +79,13 @@ def check_expected_daemon_status(duthost, expected_daemon_status): return daemon_status == expected_daemon_status +def check_pmon_daemon_id(duthost, daemon_name, expected_id): + _, daemon_id = duthost.get_pmon_daemon_status(daemon_name) + if daemon_id != expected_id: + logger.info(f"{daemon_name} pmon id is {daemon_id} != {expected_id}") + return daemon_id == expected_id + + def collect_data(duthost): keys = duthost.shell( 'sonic-db-cli STATE_DB KEYS "PSU_INFO|*"')['stdout_lines'] @@ -128,6 +134,11 @@ def verify_data(data_before, data_after): for field in data_before['data'][psu_key]: if field not in ignore_fields: value_before = data_before['data'][psu_key][field] + + # This will slowly populate by supervisor. If we dont have this check we will have KeyError + if psu_key not in data_after["data"] or field not in data_after["data"][psu_key]: + return False + value_after = data_after['data'][psu_key][field] if value_before != value_after: logger.info(msg.format(value_before, value_after, field)) @@ -169,8 +180,12 @@ def test_pmon_psud_stop_and_start_status(check_daemon_status, duthosts, logger.info("{} daemon is {} with pid {}".format(daemon_name, pre_daemon_status, pre_daemon_pid)) duthost.stop_pmon_daemon(daemon_name, SIG_STOP_SERVICE) + time.sleep(2) + wait_until(120, 10, 0, check_pmon_daemon_id, duthost, daemon_name, -1) + wait_until(50, 10, 0, check_expected_daemon_status, duthost, expected_stopped_status) + daemon_status, daemon_pid = duthost.get_pmon_daemon_status(daemon_name) pytest_assert(daemon_status == expected_stopped_status, "{} expected stopped status is {} but is {}" @@ -179,9 +194,12 @@ def test_pmon_psud_stop_and_start_status(check_daemon_status, duthosts, "{} expected pid is -1 but is {}".format(daemon_name, daemon_pid)) data = collect_data(duthost) - pytest_assert(not data['keys'], + + pytest_assert(wait_until(60, 10, 0, lambda: not data['keys']), "DB data keys is not cleared on daemon stop") - pytest_assert(not data['data'], "DB data is not cleared on daemon stop") + + pytest_assert(wait_until(60, 10, 0, lambda: not data['data']), + "DB data is not cleared on daemon stop") duthost.start_pmon_daemon(daemon_name) @@ -199,7 +217,12 @@ def test_pmon_psud_stop_and_start_status(check_daemon_status, duthosts, .format(daemon_name, pre_daemon_pid, post_daemon_pid)) # Wait till DB PSU_INFO key values are restored - wait_until(40, 5, 0, get_and_verify_data, duthost, data_before_restart) + + # For T2 it takes around 1 minute for the information to be populated in supervisor + is_modular_chassis = duthost.get_facts().get("modular_chassis") + wait_time = 90 if is_modular_chassis else 40 + + wait_until(wait_time, 5, 0, get_and_verify_data, duthost, data_before_restart) def test_pmon_psud_term_and_start_status(check_daemon_status, duthosts, diff --git a/tests/platform_tests/daemon/test_syseepromd.py b/tests/platform_tests/daemon/test_syseepromd.py index 30057454781..b83238c669b 100644 --- a/tests/platform_tests/daemon/test_syseepromd.py +++ b/tests/platform_tests/daemon/test_syseepromd.py @@ -20,7 +20,6 @@ pytestmark = [ pytest.mark.topology('any'), - pytest.mark.device_type('physical'), pytest.mark.sanity_check(skip_sanity=True), pytest.mark.disable_loganalyzer ] diff --git a/tests/platform_tests/fwutil/conftest.py b/tests/platform_tests/fwutil/conftest.py index 502850b91b0..0db75984071 100644 --- a/tests/platform_tests/fwutil/conftest.py +++ b/tests/platform_tests/fwutil/conftest.py @@ -85,8 +85,6 @@ def extract_fw_data(fw_pkg_path): def random_component(duthost, fw_pkg): chass = list(show_firmware(duthost)["chassis"].keys())[0] components = list(fw_pkg["chassis"].get(chass, {}).get("component", {}).keys()) - if 'ONIE' in components: - components.remove('ONIE') if len(components) == 0: pytest.skip("No suitable components found in config file for platform {}.".format(duthost.facts['platform'])) return components[randrange(len(components))] diff --git a/tests/platform_tests/link_flap/link_flap_utils.py b/tests/platform_tests/link_flap/link_flap_utils.py index 16349b819c0..0942df8e550 100644 --- a/tests/platform_tests/link_flap/link_flap_utils.py +++ b/tests/platform_tests/link_flap/link_flap_utils.py @@ -3,6 +3,7 @@ """ import logging import random +import time from tests.common.platform.device_utils import fanout_switch_port_lookup, __get_dut_if_status @@ -129,3 +130,40 @@ def check_bgp_routes(dut, start_time_ipv4_route_counts, start_time_ipv6_route_co incr_ipv4_route_counts = abs(int(float(start_time_ipv4_route_counts)) - int(float(routesv4))) incr_ipv6_route_counts = abs(int(float(start_time_ipv6_route_counts)) - int(float(routesv6))) return incr_ipv4_route_counts < MAX_DIFF and incr_ipv6_route_counts < MAX_DIFF + + +def get_avg_redis_mem_usage(duthost, interval, num_times): + """ + Redis memory usage is not a stable value. It's fluctuating even when the device is stable stage. + 202205 has larger redis memory usage (~ 5.5M) so the fluctuation of 0.2M is not an issue. + With 202405 redis memory usage is optimized (~ 2.5M) and 0.2M usage could make the test fail + if memory threshold is 5%. + + This API returns the average radis memory usage during a period. + Args: + duthost: DUT host object + interval: time interval to wait for next query + num_times: number of times to query + """ + logger.info("Checking average redis memory usage") + cmd = r"redis-cli info memory | grep used_memory_human | sed -e 's/.*:\(.*\)M/\1/'" + redis_memory = 0.0 + for i in range(num_times): + redis_memory += float(duthost.shell(cmd)["stdout"]) + time.sleep(interval) + return float(redis_memory/num_times) + + +def validate_redis_memory_increase(tbinfo, start_mem, end_mem): + # Calculate diff in Redis memory + incr_redis_memory = end_mem - start_mem + logging.info("Redis memory usage difference: %f", incr_redis_memory) + + # Check redis memory only if it is increased else default to pass + if incr_redis_memory > 0.0: + percent_incr_redis_memory = (incr_redis_memory / start_mem) * 100 + logging.info("Redis Memory percentage Increase: %d", percent_incr_redis_memory) + incr_redis_memory_threshold = 15 if tbinfo["topo"]["type"] in ["m0", "mx"] else 10 + if percent_incr_redis_memory >= incr_redis_memory_threshold: + return False + return True diff --git a/tests/platform_tests/link_flap/test_cont_link_flap.py b/tests/platform_tests/link_flap/test_cont_link_flap.py index 62743ed4cc6..48b8341b18f 100644 --- a/tests/platform_tests/link_flap/test_cont_link_flap.py +++ b/tests/platform_tests/link_flap/test_cont_link_flap.py @@ -16,7 +16,7 @@ from tests.common.helpers.assertions import pytest_assert, pytest_require from tests.common import port_toggle from tests.platform_tests.link_flap.link_flap_utils import build_test_candidates,\ - check_orch_cpu_utilization, check_bgp_routes + check_orch_cpu_utilization, check_bgp_routes, get_avg_redis_mem_usage, validate_redis_memory_increase from tests.common.utilities import wait_until from tests.common.devices.eos import EosHost from tests.common.devices.sonic import SonicHost @@ -65,7 +65,7 @@ def test_cont_link_flap(self, request, duthosts, nbrhosts, enum_rand_one_per_hws 3.) Watch for memory (show system-memory), FRR daemons memory(vtysh -c "show memory bgp/zebra"), orchagent CPU Utilization and Redis_memory. - Pass Criteria: All routes must be re-learned with < 5% increase in Redis/FRR memory usage and + Pass Criteria: All routes must be re-learned with < 10% increase in Redis/FRR memory usage and ORCH agent CPU consumption below threshold after 3 mins after stopping flaps. """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] @@ -77,9 +77,8 @@ def test_cont_link_flap(self, request, duthosts, nbrhosts, enum_rand_one_per_hws logging.info("Memory Status at start: %s", memory_output) # Record Redis Memory at start - start_time_redis_memory = duthost.shell( - r"redis-cli info memory | grep used_memory_human | sed -e 's/.*:\(.*\)M/\1/'")["stdout"] - logging.info("Redis Memory: %s M", start_time_redis_memory) + start_time_redis_memory = get_avg_redis_mem_usage(duthost, 5, 5) + logging.info("Redis Memory: %f M", start_time_redis_memory) # Record ipv4 route counts at start sumv4, sumv6 = duthost.get_ip_route_summary(skip_kernel_tunnel=True) @@ -208,26 +207,17 @@ def test_cont_link_flap(self, request, duthosts, nbrhosts, enum_rand_one_per_hws logging.info("Orchagent PID {0} CPU Util at end: {1}".format(pid, util)) # Record Redis Memory at end - end_time_redis_memory = duthost.shell( - r"redis-cli info memory | grep used_memory_human | sed -e 's/.*:\(.*\)M/\1/'")["stdout"] - logging.info("Redis Memory at start: %s M", start_time_redis_memory) - logging.info("Redis Memory at end: %s M", end_time_redis_memory) - - # Calculate diff in Redis memory - incr_redis_memory = float(end_time_redis_memory) - float(start_time_redis_memory) - logging.info("Redis absolute difference: %d", incr_redis_memory) - - # Check redis memory only if it is increased else default to pass - if incr_redis_memory > 0.0: - percent_incr_redis_memory = (incr_redis_memory / float(start_time_redis_memory)) * 100 - logging.info("Redis Memory percentage Increase: %d", percent_incr_redis_memory) - incr_redis_memory_threshold = 10 if tbinfo["topo"]["type"] in ["m0", "mx"] else 5 - pytest_assert(percent_incr_redis_memory < incr_redis_memory_threshold, - "Redis Memory Increase more than expected: {}".format(percent_incr_redis_memory)) + end_time_redis_memory = get_avg_redis_mem_usage(duthost, 5, 5) + logging.info("Redis Memory at start: %f M", start_time_redis_memory) + logging.info("Redis Memory at end: %f M", end_time_redis_memory) + + result = validate_redis_memory_increase(tbinfo, start_time_redis_memory, end_time_redis_memory) + pytest_assert(result, "Redis Memory Increases more than expected: start {}, end {}" + .format(start_time_redis_memory, end_time_redis_memory)) # Orchagent CPU should consume < orch_cpu_threshold at last. logging.info("watch orchagent CPU utilization when it goes below %d", orch_cpu_threshold) - pytest_assert(wait_until(45, 2, 0, check_orch_cpu_utilization, duthost, orch_cpu_threshold), + pytest_assert(wait_until(120, 5, 0, check_orch_cpu_utilization, duthost, orch_cpu_threshold), "Orch CPU utilization {} > orch cpu threshold {} after link flap" .format(duthost.shell("show processes cpu | grep orchagent | awk '{print $9}'")["stdout"], orch_cpu_threshold)) diff --git a/tests/platform_tests/link_flap/test_link_flap.py b/tests/platform_tests/link_flap/test_link_flap.py index b52320cd3af..952d24ff022 100644 --- a/tests/platform_tests/link_flap/test_link_flap.py +++ b/tests/platform_tests/link_flap/test_link_flap.py @@ -4,7 +4,8 @@ import logging import pytest -from tests.platform_tests.link_flap.link_flap_utils import check_orch_cpu_utilization, build_test_candidates +from tests.platform_tests.link_flap.link_flap_utils import check_orch_cpu_utilization, build_test_candidates, \ + get_avg_redis_mem_usage, validate_redis_memory_increase from tests.common.platform.device_utils import toggle_one_link from tests.common.helpers.assertions import pytest_assert, pytest_require from tests.common.utilities import wait_until @@ -35,9 +36,8 @@ def test_link_flap(request, duthosts, rand_one_dut_hostname, tbinfo, fanouthosts logger.info("Memory Status at start: %s", memory_output) # Record Redis Memory at start - start_time_redis_memory = duthost.shell( - r"redis-cli info memory | grep used_memory_human | sed -e 's/.*:\(.*\)M/\1/'")["stdout"] - logger.info("Redis Memory: %s M", start_time_redis_memory) + start_time_redis_memory = get_avg_redis_mem_usage(duthost, 5, 5) + logging.info("Redis Memory: %f M", start_time_redis_memory) # Make Sure Orch CPU < orch_cpu_threshold before starting test. logger.info("Make Sure orchagent CPU utilization is less that %d before link flap", orch_cpu_threshold) @@ -70,26 +70,17 @@ def test_link_flap(request, duthosts, rand_one_dut_hostname, tbinfo, fanouthosts logger.info("Orchagent CPU Util at end: %s", orch_cpu) # Record Redis Memory at end - end_time_redis_memory = duthost.shell( - r"redis-cli info memory | grep used_memory_human | sed -e 's/.*:\(.*\)M/\1/'")["stdout"] - logger.info("Redis Memory at start: %s M", start_time_redis_memory) - logger.info("Redis Memory at end: %s M", end_time_redis_memory) - - # Calculate diff in Redis memory - incr_redis_memory = float(end_time_redis_memory) - float(start_time_redis_memory) - logger.info("Redis absolute difference: %d", incr_redis_memory) - - # Check redis memory only if it is increased else default to pass - if incr_redis_memory > 0.0: - percent_incr_redis_memory = (incr_redis_memory / float(start_time_redis_memory)) * 100 - logger.info("Redis Memory percentage Increase: %d", percent_incr_redis_memory) - incr_redis_memory_threshold = 10 if tbinfo["topo"]["type"] in ["m0", "mx"] else 5 - pytest_assert(percent_incr_redis_memory < incr_redis_memory_threshold, - "Redis Memory Increase more than expected: {}".format(percent_incr_redis_memory)) + end_time_redis_memory = get_avg_redis_mem_usage(duthost, 5, 5) + logging.info("Redis Memory at start: %f M", start_time_redis_memory) + logging.info("Redis Memory at end: %f M", end_time_redis_memory) + + result = validate_redis_memory_increase(tbinfo, start_time_redis_memory, end_time_redis_memory) + pytest_assert(result, "Redis Memory increases more than expected: start {}, end {}" + .format(start_time_redis_memory, end_time_redis_memory)) # Orchagent CPU should consume < orch_cpu_threshold at last. logger.info("watch orchagent CPU utilization when it goes below %d", orch_cpu_threshold) - pytest_assert(wait_until(45, 2, 0, check_orch_cpu_utilization, duthost, orch_cpu_threshold), + pytest_assert(wait_until(120, 5, 0, check_orch_cpu_utilization, duthost, orch_cpu_threshold), "Orch CPU utilization {} > orch cpu threshold {} before link flap" .format(duthost.shell("show processes cpu | grep orchagent | awk '{print $9}'")["stdout"], orch_cpu_threshold)) diff --git a/tests/platform_tests/sensors_utils/psu_sensors.json b/tests/platform_tests/sensors_utils/psu_sensors.json index 1188d5411a2..811a381137f 100644 --- a/tests/platform_tests/sensors_utils/psu_sensors.json +++ b/tests/platform_tests/sensors_utils/psu_sensors.json @@ -316,11 +316,11 @@ "i2c-1-mux (chan_id 3)" ], "chip": { - "dps460-i2c-*-58": [ + "dps460-i2c-*-59": [ "1", "L" ], - "dps460-i2c-*-59": [ + "dps460-i2c-*-58": [ "2", "R" ] @@ -332,11 +332,11 @@ "i2c-1-mux (chan_id 3)" ], "chip": { - "dps460-i2c-*-58": [ + "dps460-i2c-*-59": [ "1", "L" ], - "dps460-i2c-*-59": [ + "dps460-i2c-*-58": [ "2", "R" ] diff --git a/tests/platform_tests/sfp/test_sfputil.py b/tests/platform_tests/sfp/test_sfputil.py index 472394df318..f088a360b8f 100644 --- a/tests/platform_tests/sfp/test_sfputil.py +++ b/tests/platform_tests/sfp/test_sfputil.py @@ -7,7 +7,7 @@ import logging import time import copy - +from natsort import natsorted import pytest from .util import parse_eeprom @@ -15,12 +15,27 @@ from .util import get_dev_conn from tests.common.utilities import skip_release, wait_until from tests.common.fixtures.duthost_utils import shutdown_ebgp # noqa F401 +from tests.common.port_toggle import default_port_toggle_wait_time +from tests.common.platform.interface_utils import get_physical_port_indices cmd_sfp_presence = "sudo sfputil show presence" cmd_sfp_eeprom = "sudo sfputil show eeprom" cmd_sfp_reset = "sudo sfputil reset" cmd_sfp_show_lpmode = "sudo sfputil show lpmode" cmd_sfp_set_lpmode = "sudo sfputil lpmode" +cmd_config_intf_dom = "config interface {} transceiver dom {} {}" +cmd_config_intf_action = "config interface {} {} {}" +cmd_intf_startup = "startup" +cmd_intf_shutdown = "shutdown" +cmd_dom_disable = "disable" +cmd_dom_enable = "enable" +db_cmd_dom_polling = "sonic-db-cli {} CONFIG_DB {} 'PORT|{}' 'dom_polling' {}" +DOM_DISABLED = "disabled" +DOM_ENABLED = "enabled" +DOM_POLLING_CONFIG_VALUES = [DOM_DISABLED, DOM_ENABLED] + +I2C_WAIT_TIME_AFTER_SFP_RESET = 5 # in seconds +WAIT_TIME_AFTER_LPMODE_SET = 3 # in seconds logger = logging.getLogger(__name__) @@ -30,6 +45,167 @@ ] +class LogicalInterfaceDisabler: + """ + Disable the given logical interface and restore afterwards. + """ + def __init__(self, duthost, enum_frontend_asic_index, logical_intf, phy_intf, + is_admin_up, skip_dom_polling_handle=False): + self.duthost = duthost + self.logical_intf = logical_intf + self.phy_intf = phy_intf + self.skip_dom_polling_handle = skip_dom_polling_handle + self.wait_after_dom_config = 5 + + self.namespace_cmd_opt = get_namespace_cmd_option(duthost, + enum_frontend_asic_index) + self.cmd_down = cmd_config_intf_action.format(self.namespace_cmd_opt, + cmd_intf_shutdown, logical_intf) + self.cmd_up = cmd_config_intf_action.format(self.namespace_cmd_opt, + cmd_intf_startup, logical_intf) + self.cmd_disable_dom = cmd_config_intf_dom.format(self.namespace_cmd_opt, + logical_intf, cmd_dom_disable) + self.cmd_enable_dom = cmd_config_intf_dom.format(self.namespace_cmd_opt, + logical_intf, cmd_dom_enable) + self.cmd_sfp_presence = "{} -p {}".format(cmd_sfp_presence, logical_intf) + self.db_cmd_dom_polling_clear = db_cmd_dom_polling.format(self.namespace_cmd_opt, + "HDEL", + logical_intf, + "") + self.db_cmd_dom_polling_get = db_cmd_dom_polling.format(self.namespace_cmd_opt, + "HGET", + logical_intf, + "") + self.orig_dom_polling_value = None + self.is_admin_up = is_admin_up + + def disable(self): + """ + Disable a logical interface by doing below: + * Disable DOM polling + * Shutdown port + """ + if not self.skip_dom_polling_handle: + orig_dom_get_result = self.duthost.command(self.db_cmd_dom_polling_get) + if orig_dom_get_result["stdout"] in DOM_POLLING_CONFIG_VALUES: + self.orig_dom_polling_value = orig_dom_get_result["stdout"] + logging.info("Disable DOM polling to avoid race condition during sfp reset" + " for {}".format(self.logical_intf)) + disable_dom_result = self.duthost.command(self.cmd_disable_dom) + assert disable_dom_result["rc"] == 0, \ + "Disable DOM polling failed for {}".format(self.logical_intf) + time.sleep(self.wait_after_dom_config) + + if not self.is_admin_up: + logging.info("Skip shutdown {} as it's already admin down pre-test".format(self.logical_intf)) + return + # It's needed to shutdown ports before reset and startup ports after reset, + # to get config/state machine/etc replayed, so that the modules can be fully + # restored. + logging.info("Shutdown {} before sfp reset".format(self.logical_intf)) + shutdown_result = self.duthost.command(self.cmd_down) + assert shutdown_result["rc"] == 0, "Shutdown {} failed".format(self.logical_intf) + assert check_interface_status(self.duthost, [self.logical_intf], expect_up=False) + + def restore(self): + """ + Restore a logical interface from disabled state by doing below: + * Startup port + * Enable DOM polling + """ + if self.is_admin_up: + logging.info("Startup {} after sfp reset to restore module".format(self.logical_intf)) + startup_result = self.duthost.command(self.cmd_up) + assert startup_result["rc"] == 0, "Startup {} failed".format(self.logical_intf) + assert check_interface_status(self.duthost, [self.logical_intf], expect_up=True) + else: + logging.info("Skip startup {} after sfp reset as it's admin down pre-test".format(self.logical_intf)) + + if not self.skip_dom_polling_handle: + logging.info("Restore DOM polling to {} after sfp reset for {}".format(self.orig_dom_polling_value, + self.logical_intf)) + if not self.orig_dom_polling_value: + restore_dom_result = self.duthost.command(self.db_cmd_dom_polling_clear) + else: + restore_dom_result = self.duthost.command(db_cmd_dom_polling.format(self.namespace_cmd_opt, + "HSET", + self.logical_intf, + self.orig_dom_polling_value)) + assert restore_dom_result["rc"] == 0, "Restore DOM polling failed for {}".format(self.logical_intf) + + +class DisablePhysicalInterface: + """ + Context manager to disable the given physical interface (as wells as its + logical interfaces if needed) and restore afterwards. + + Disable/enable port includes: + * Disable/enable DOM polling + * Shutdown/startup port + """ + def __init__(self, duthost, enum_frontend_asic_index, phy_intf, logical_intfs_dict): + self.duthost = duthost + self.phy_intf = phy_intf + self.original_lpmode_state = None + self.wait_after_dom_config = 1 + self.logical_intf_disablers = \ + [LogicalInterfaceDisabler(duthost, + enum_frontend_asic_index, + logical_intf, + phy_intf, + is_admin_up, + skip_dom_polling_handle=(i != 0)) + for i, (logical_intf, is_admin_up) in enumerate(logical_intfs_dict.items())] + + def __enter__(self): + """ + Disable a physical port by doing below: + * Disable DOM polling + * Shutdown port + """ + for logical_intf_disabler in self.logical_intf_disablers: + logical_intf_disabler.disable() + + def __exit__(self, exc_type, exc_val, exc_tb): + """ + Restore a physical port from disabled state by doing below: + * Startup port + * Enable DOM polling + """ + for logical_intf_disabler in self.logical_intf_disablers: + logical_intf_disabler.restore() + + +def get_transceiver_info(duthost, enum_frontend_asic_index, logical_intf): + namespace_cmd_opt = get_namespace_cmd_option(duthost, enum_frontend_asic_index) + cmd = "sonic-db-cli {} STATE_DB HGETALL 'TRANSCEIVER_INFO|{}'".format(namespace_cmd_opt, logical_intf) + xcvr_info_output = duthost.command(cmd)["stdout"] + return xcvr_info_output + + +def is_cmis_module(duthost, enum_frontend_asic_index, logical_intf): + return "cmis_rev" in get_transceiver_info(duthost, enum_frontend_asic_index, logical_intf) + + +def is_power_class_1_module(duthost, enum_frontend_asic_index, logical_intf): + return "Power Class 1" in get_transceiver_info(duthost, enum_frontend_asic_index, logical_intf) + + +def set_lpmode(duthost, logical_intf, lpmode): + """ + Set the low power mode of the given interface. + + Args: + duthost: DUT host object + logical_intf: Logical interface to set lpmode + lpmode: Low power mode to set, 'on' or 'off' + """ + cmd = "{} {} {}".format(cmd_sfp_set_lpmode, lpmode, logical_intf) + lpmode_set_result = duthost.command(cmd) + assert lpmode_set_result["rc"] == 0, "'{}' failed".format(cmd) + time.sleep(WAIT_TIME_AFTER_LPMODE_SET) + + def check_interfaces_up(duthost, namespace, up_ports): logging.info("Checking interface status") intf_facts = duthost.interface_facts(namespace=namespace, up_ports=up_ports)["ansible_facts"] @@ -40,6 +216,100 @@ def check_interfaces_up(duthost, namespace, up_ports): return False +def get_namespace_cmd_option(duthost, asic_index): + """Get the namespace option used in the command""" + namespace = duthost.get_namespace_from_asic_id(asic_index) + return "-n {}".format(namespace) if namespace else "" + + +def get_down_ports(duthost, ports): + """Check and return the down ports among the given ports.""" + return duthost.show_interface(command="status", up_ports=ports)["ansible_facts"][ + "ansible_interface_link_down_ports"] + + +def is_interface_status_expected(duthost, ports, expect_up=True): + """Check if the given ports are up or down as expected.""" + if expect_up: + return len(get_down_ports(duthost, ports)) == 0 + else: + return len(get_down_ports(duthost, ports)) == len(ports) + + +def check_interface_status(duthost, ports, expect_up=True, wait_time=None): + """ + Check if the given ports are up or down as expected. + + Args: + duthost: DUT host object + ports: List of ports to check + expect_up: True if the ports are expected to be up, False if down + wait_time: Time to wait for the ports to come up or down + """ + expect_status_str = "up" if expect_up else "down" + err_msg = "" + + if wait_time is None: + port_down_wait_time, port_up_wait_time = \ + default_port_toggle_wait_time(duthost, len(ports)) + if expect_up: + wait_time = port_up_wait_time + else: + wait_time = port_down_wait_time + + logging.info("Wait for ports to come {}: {}".format(expect_status_str, ports)) + is_ok = wait_until(wait_time, 1, 0, + is_interface_status_expected, + duthost, ports, expect_up) + + if not is_ok: + down_ports = get_down_ports(duthost, ports) + if expect_up: + problematic_ports = down_ports + else: + problematic_ports = set(ports) - down_ports + + err_msg = "Some ports did not come {} as expected: {}".format( + expect_status_str, str(problematic_ports)) + return is_ok, err_msg + + +def get_phy_intfs_to_test_per_asic(duthost, + conn_graph_facts, + enum_frontend_asic_index, + xcvr_skip_list): + """ + Get the interfaces to test for given asic, excluding the skipped ones. + + return: + dict of all physical interfaces to test (key: physical port number, + value: dict of logical interfaces under this physical port whose value + is True if the interface is admin-up) + """ + _, dev_conn = get_dev_conn(duthost, + conn_graph_facts, + enum_frontend_asic_index) + physical_port_idx_map = get_physical_port_indices(duthost, logical_intfs=dev_conn) + phy_intfs_to_test_per_asic = {} + + pre_test_intf_status_dict = duthost.show_interface(command="status")["ansible_facts"]["int_status"] + for logical_intf in dev_conn: + # Skip the interfaces in the skip list + if logical_intf in xcvr_skip_list[ans_host.hostname]: + continue + physical_port_idx = physical_port_idx_map[logical_intf] + phy_intfs_to_test_per_asic.setdefault(physical_port_idx, {})[logical_intf] = \ + pre_test_intf_status_dict.get(logical_intf, {}).get("admin_state", "down") == "up" + # sort physical interfaces + for phy_intf, logical_intfs_dict in sorted(phy_intfs_to_test_per_asic.items()): + # sort logical interfaces within the same physical interface + phy_intfs_to_test_per_asic[phy_intf] = {lintf: logical_intfs_dict[lintf] + for lintf in natsorted(logical_intfs_dict)} + logging.info("Interfaces to test for asic {}: {}".format(enum_frontend_asic_index, + phy_intfs_to_test_per_asic)) + return phy_intfs_to_test_per_asic + + def test_check_sfputil_presence(duthosts, enum_rand_one_per_hwsku_frontend_hostname, enum_frontend_asic_index, conn_graph_facts, xcvr_skip_list): """ @@ -122,54 +392,61 @@ def test_check_sfputil_eeprom(duthosts, enum_rand_one_per_hwsku_frontend_hostnam def test_check_sfputil_reset(duthosts, enum_rand_one_per_hwsku_frontend_hostname, enum_frontend_asic_index, conn_graph_facts, - tbinfo, xcvr_skip_list, shutdown_ebgp, stop_xcvrd): # noqa F811 + tbinfo, xcvr_skip_list, shutdown_ebgp): # noqa F811 """ - @summary: Check SFP presence using 'sfputil show presence' + @summary: Check SFP reset using 'sfputil reset' """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] global ans_host ans_host = duthost - portmap, dev_conn = get_dev_conn(duthost, conn_graph_facts, enum_frontend_asic_index) - tested_physical_ports = set() - for intf in dev_conn: - if intf not in xcvr_skip_list[duthost.hostname]: - phy_intf = portmap[intf][0] - if phy_intf in tested_physical_ports: - logging.info( - "skip tested SFPs {} to avoid repeating operating physical interface {}".format(intf, phy_intf)) - continue - tested_physical_ports.add(phy_intf) - logging.info("resetting {} physical interface {}".format(intf, phy_intf)) - reset_result = duthost.command("{} {}".format(cmd_sfp_reset, intf)) - assert reset_result["rc"] == 0, "'{} {}' failed".format(cmd_sfp_reset, intf) - time.sleep(5) - sleep_time = 60 - if duthost.shell("show interfaces transceiver eeprom | grep 400ZR", module_ignore_errors=True)['rc'] == 0: - sleep_time = 90 - - logging.info("Wait some time for SFP to fully recover after reset") - time.sleep(sleep_time) - - logging.info("Check sfp presence again after reset") - sfp_presence = duthost.command(cmd_sfp_presence, module_ignore_errors=True) - - # For vs testbed, we will get expected Error code `ERROR_CHASSIS_LOAD = 2` here. - if duthost.facts["asic_type"] == "vs" and sfp_presence['rc'] == 2: - pass - else: - assert sfp_presence['rc'] == 0, "Run command '{}' failed".format(cmd_sfp_presence) - - parsed_presence = parse_output(sfp_presence["stdout_lines"][2:]) - for intf in dev_conn: - if intf not in xcvr_skip_list[duthost.hostname]: - assert intf in parsed_presence, "Interface is not in output of '{}'".format(cmd_sfp_presence) - assert parsed_presence[intf] == "Present", "Interface presence is not 'Present'" - - logging.info("Check interface status") - mg_facts = duthost.get_extended_minigraph_facts(tbinfo) - intf_facts = duthost.interface_facts(up_ports=mg_facts["minigraph_ports"])["ansible_facts"] - assert len(intf_facts["ansible_interface_link_down_ports"]) == 0, \ - "Some interfaces are down: {}".format(intf_facts["ansible_interface_link_down_ports"]) + phy_intfs_to_test_per_asic = get_phy_intfs_to_test_per_asic(duthost, + conn_graph_facts, + enum_frontend_asic_index, + xcvr_skip_list) + for phy_intf, logical_intfs_dict in phy_intfs_to_test_per_asic.items(): + # Only reset the first logical interface, since sfputil command acts on this physical port entirely. + logical_intf = list(logical_intfs_dict.keys())[0] + with DisablePhysicalInterface(duthost, enum_frontend_asic_index, phy_intf, logical_intfs_dict): + cmd_sfp_presence_per_intf = cmd_sfp_presence + " -p {}".format(logical_intf) + + cmd_sfp_reset_intf = "{} {}".format(cmd_sfp_reset, logical_intf) + logging.info("resetting {} physical interface {}".format(logical_intf, phy_intf)) + reset_result = duthost.command(cmd_sfp_reset_intf) + assert reset_result["rc"] == 0, "'{}' failed".format(cmd_sfp_reset_intf) + time.sleep(I2C_WAIT_TIME_AFTER_SFP_RESET) + + if not is_cmis_module(duthost, enum_frontend_asic_index, logical_intf) and \ + not is_power_class_1_module(duthost, enum_frontend_asic_index, logical_intf): + # On platforms where LowPwrRequestHW=DEASSERTED, module will not get reset to low power. + logging.info("Force {} (physical interface {}) to go through the sequence of lpmode on/off".format( + logical_intf, phy_intf)) + set_lpmode(duthost, logical_intf, "on") + time.sleep(WAIT_TIME_AFTER_LPMODE_SET) + set_lpmode(duthost, logical_intf, "off") + time.sleep(WAIT_TIME_AFTER_LPMODE_SET) + + logging.info("Check sfp presence again after reset") + sfp_presence = duthost.command(cmd_sfp_presence_per_intf, module_ignore_errors=True) + + # For vs testbed, we will get expected Error code `ERROR_CHASSIS_LOAD = 2` here. + if duthost.facts["asic_type"] == "vs" and sfp_presence['rc'] == 2: + pass + else: + assert sfp_presence['rc'] == 0, \ + "Run command '{}' failed".format(cmd_sfp_presence_per_intf) + + parsed_presence = parse_output(sfp_presence["stdout_lines"][2:]) + assert logical_intf in parsed_presence, \ + "Interface is not in output of '{}'".format(cmd_sfp_presence_per_intf) + assert parsed_presence[logical_intf] == "Present", \ + "Interface presence is not 'Present' for {}".format(logical_intf) + + # Check interface status for all interfaces in the end just in case + assert check_interface_status(duthost, + [logical_intf + for logical_intfs_dict in phy_intfs_to_test_per_asic.values() + for logical_intf, is_admin_up in logical_intfs_dict.items() if is_admin_up], + expect_up=True) def test_check_sfputil_low_power_mode(duthosts, enum_rand_one_per_hwsku_frontend_hostname, diff --git a/tests/platform_tests/test_cpu_memory_usage.py b/tests/platform_tests/test_cpu_memory_usage.py index 9948d23f2f4..636859e2bc1 100644 --- a/tests/platform_tests/test_cpu_memory_usage.py +++ b/tests/platform_tests/test_cpu_memory_usage.py @@ -35,11 +35,14 @@ def setup_thresholds(duthosts, enum_rand_one_per_hwsku_hostname): memory_threshold = 60 high_cpu_consume_procs = {} is_asan = is_asan_image(duthosts, enum_rand_one_per_hwsku_hostname) + if ('arista_7800' in duthost.facts['platform'].lower()): + memory_threshold = 75 if duthost.facts['platform'] in ('x86_64-arista_7050_qx32', 'x86_64-kvm_x86_64-r0', 'x86_64-arista_7050_qx32s', 'x86_64-cel_e1031-r0', 'x86_64-arista_7800r3a_36dm2_lc') or is_asan: memory_threshold = 90 - if duthost.facts['platform'] in ('x86_64-mlnx_msn4600c-r0', 'x86_64-mlnx_msn3800-r0'): - memory_threshold = 65 + if duthost.facts['platform'] in ('x86_64-mlnx_msn4600c-r0', 'x86_64-mlnx_msn3800-r0', + 'x86_64-mlnx_msn2700-r0', 'x86_64-mlnx_msn2700a1-r0'): + memory_threshold = 70 if duthost.facts['platform'] in ('x86_64-arista_7260cx3_64'): high_cpu_consume_procs['syncd'] = 80 # The CPU usage of `sx_sdk` on mellanox is expected to be higher, and the actual CPU usage @@ -255,9 +258,14 @@ def update_cpu_usage_desired_program(proc, program_to_check, program_to_check_cp def check_memory(i, memory_threshold, monit_result, outstanding_mem_polls): used_memory_percent = monit_result.memory['used_percent'] + logging.debug( + "System memory usage: %d%% (%s %d%%) - Result: %s", + used_memory_percent, + "exceed" if used_memory_percent > memory_threshold else "below", + memory_threshold, + monit_result.memory + ) if used_memory_percent > memory_threshold: - logging.debug("system memory usage %d%% exceeds %d%%: %s", - used_memory_percent, memory_threshold, monit_result.memory) outstanding_mem_polls[i] = monit_result.memory diff --git a/tests/platform_tests/test_intf_fec.py b/tests/platform_tests/test_intf_fec.py index 88b6fcdc557..7447ff13e56 100644 --- a/tests/platform_tests/test_intf_fec.py +++ b/tests/platform_tests/test_intf_fec.py @@ -11,7 +11,8 @@ SUPPORTED_PLATFORMS = [ "mlnx_msn", "8101_32fh", - "8111_32eh" + "8111_32eh", + "arista" ] SUPPORTED_SPEEDS = [ @@ -35,6 +36,9 @@ def test_verify_fec_oper_mode(duthosts, enum_rand_one_per_hwsku_frontend_hostnam """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + if "broadcom" in duthost.facts.get('platform_asic'): + pytest.skip("Skipping this test on platforms with Broadcom ASICs") + logging.info("Get output of '{}'".format("show interface status")) intf_status = duthost.show_and_parse("show interface status") @@ -63,6 +67,9 @@ def test_config_fec_oper_mode(duthosts, enum_rand_one_per_hwsku_frontend_hostnam """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + if "broadcom" in duthost.facts.get('platform_asic'): + pytest.skip("Skipping this test on platforms with Broadcom ASICs") + logging.info("Get output of '{}'".format("show interface status")) intf_status = duthost.show_and_parse("show interface status") @@ -119,6 +126,17 @@ def test_verify_fec_stats_counters(duthosts, enum_rand_one_per_hwsku_frontend_ho logging.info("Get output of 'show interfaces counters fec-stats'") intf_status = duthost.show_and_parse("show interfaces counters fec-stats") + def skip_ber_counters_test(intf_status: dict) -> bool: + """ + Check whether the BER fields (Pre-FEC and Post-FEC BER) + exists in the "show interfaces counters fec-stats" + CLI output + """ + if intf_status.get('fec_pre_ber') is None or intf_status.get('fec_post_ber') is None: + pytest.fail("Pre-FEC and Port-FEC BER fields missing on interface. intf_status: {}".format(intf_status)) + return True + return False + for intf in intf_status: intf_name = intf['iface'] speed = get_interface_speed(duthost, intf_name) @@ -147,3 +165,17 @@ def test_verify_fec_stats_counters(duthosts, enum_rand_one_per_hwsku_frontend_ho if fec_symbol_err_int > fec_corr_int: pytest.fail("FEC symbol errors:{} are higher than FEC correctable errors:{} for interface {}" .format(intf_name, fec_symbol_err_int, fec_corr_int)) + + if skip_ber_counters_test(intf): + continue + fec_pre_ber = intf.get('fec_pre_ber', '').lower() + fec_post_ber = intf.get('fec_post_ber', '').lower() + try: + if fec_pre_ber != "n/a": + float(fec_pre_ber) + if fec_post_ber != "n/a": + float(fec_post_ber) + except ValueError: + pytest.fail("Pre-FEC and Post-FEC BER are not valid floats for interface {}, \ + fec_pre_ber: {} fec_post_ber: {}" + .format(intf_name, fec_pre_ber, fec_post_ber)) diff --git a/tests/platform_tests/test_platform_info.py b/tests/platform_tests/test_platform_info.py index c4a8c23e5f8..89ad43eeece 100644 --- a/tests/platform_tests/test_platform_info.py +++ b/tests/platform_tests/test_platform_info.py @@ -11,6 +11,7 @@ from retry.api import retry_call from tests.common.helpers.assertions import pytest_assert, pytest_require +from tests.common.helpers.psu_helpers import turn_on_all_outlets, get_grouped_pdus_by_psu from tests.common.plugins.loganalyzer.loganalyzer import LogAnalyzer from tests.common.utilities import wait_until, get_sup_node_or_random_node from tests.common.platform.device_utils import get_dut_psu_line_pattern @@ -28,6 +29,7 @@ CMD_PLATFORM_TEMPER = "show platform temperature" PDU_WAIT_TIME = 20 +MODULAR_CHASSIS_PDU_WAIT_TIME = 60 THERMAL_CONTROL_TEST_WAIT_TIME = 65 THERMAL_CONTROL_TEST_CHECK_INTERVAL = 5 @@ -70,7 +72,8 @@ '.*ERR pmon#psud:.*Fail to read model number: No key PN_VPD_FIELD in.*', '.*ERR pmon#psud:.*Fail to read serial number: No key SN_VPD_FIELD in.*', '.*ERR pmon#psud:.*Fail to read revision: No key REV_VPD_FIELD in.*', - r'.*ERR pmon#psud: Failed to read from file /var/run/hw-management/power/psu\d_volt.*'] + r'.*ERR pmon#psud: Failed to read from file /var/run/hw-management/power/psu\d_volt.*', + r'.*ERR pmon#thermalctld: Failed to read from file \/var\/run\/hw-management\/thermal\/.*FileNotFoundError.*'] SKIP_ERROR_LOG_SHOW_PLATFORM_TEMP.extend(SKIP_ERROR_LOG_COMMON) SKIP_ERROR_LOG_PSU_ABSENCE.extend(SKIP_ERROR_LOG_COMMON) @@ -204,17 +207,6 @@ def check_vendor_specific_psustatus(dut, psu_status_line, psu_line_pattern): check_psu_sysfs(dut, psu_id, psu_status) -def turn_all_outlets_on(pdu_ctrl): - all_outlet_status = pdu_ctrl.get_outlet_status() - pytest_require(all_outlet_status and len(all_outlet_status) >= 2, - 'Skip the test, cannot to get at least 2 outlet status: {}'.format(all_outlet_status)) - for outlet in all_outlet_status: - if not outlet["outlet_on"]: - pdu_ctrl.turn_on_outlet(outlet) - time.sleep(5) - time.sleep(5) - - def check_all_psu_on(dut, psu_test_results): """ @summary: check all PSUs are in 'OK' status. @@ -249,13 +241,16 @@ def check_all_psu_on(dut, psu_test_results): @pytest.mark.disable_loganalyzer @pytest.mark.parametrize('ignore_particular_error_log', [SKIP_ERROR_LOG_PSU_ABSENCE], indirect=True) -def test_turn_on_off_psu_and_check_psustatus(duthosts, +def test_turn_on_off_psu_and_check_psustatus(duthosts, enum_rand_one_per_hwsku_hostname, get_pdu_controller, ignore_particular_error_log, tbinfo): """ @summary: Turn off/on PSU and check PSU status using 'show platform psustatus' """ - duthost = get_sup_node_or_random_node(duthosts) + is_modular_chassis = duthosts[0].get_facts().get("modular_chassis") + if is_modular_chassis and not duthosts[enum_rand_one_per_hwsku_hostname].is_supervisor_node(): + pytest.skip("Skip the PSU check test on Line card on modular chassis") + duthost = get_sup_node_or_random_node(duthosts) psu_line_pattern = get_dut_psu_line_pattern(duthost) psu_num = get_healthy_psu_num(duthost) @@ -272,7 +267,7 @@ def test_turn_on_off_psu_and_check_psustatus(duthosts, logging.info( "To avoid DUT being shutdown, need to turn on PSUs that are not powered") - turn_all_outlets_on(pdu_ctrl) + turn_on_all_outlets(pdu_ctrl) logging.info("Initialize test results") psu_test_results = {} @@ -281,7 +276,12 @@ def test_turn_on_off_psu_and_check_psustatus(duthosts, pytest_assert( len(list(psu_test_results.keys())) == psu_num, - "In consistent PSU number output by '%s' and '%s'" % (CMD_PLATFORM_PSUSTATUS, "sudo psuutil numpsus")) + "Inconsistent PSU number output by '%s' and '%s'" % (CMD_PLATFORM_PSUSTATUS, "sudo psuutil numpsus")) + + # Increase pdu_wait_time for modular chassis + pdu_wait_time = PDU_WAIT_TIME + if is_modular_chassis: + pdu_wait_time = MODULAR_CHASSIS_PDU_WAIT_TIME logging.info("Start testing turn off/on PSUs") all_outlet_status = pdu_ctrl.get_outlet_status() @@ -291,39 +291,49 @@ def test_turn_on_off_psu_and_check_psustatus(duthosts, all_outlet_status = all_outlet_status[0:-2] logging.info( "DUT is MgmtTsToR, the last 2 outlets are reserved for Console Switch and are not visible from DUT.") - for outlet in all_outlet_status: - psu_under_test = None - if outlet['outlet_on'] is False: - continue - logging.info("Turn off outlet {}".format(outlet)) - pdu_ctrl.turn_off_outlet(outlet) - time.sleep(PDU_WAIT_TIME) + # Group outlets/PDUs by PSU and toggle PDUs by PSU + psu_to_pdus = get_grouped_pdus_by_psu(pdu_ctrl) - cli_psu_status = duthost.command(CMD_PLATFORM_PSUSTATUS) - for line in cli_psu_status["stdout_lines"][2:]: - psu_match = psu_line_pattern.match(line) - pytest_assert(psu_match, "Unexpected PSU status output") - # also make sure psustatus is not 'NOT PRESENT', which cannot be turned on/off - if psu_match.group(2) != "OK" and psu_match.group(2) != "NOT PRESENT": - psu_under_test = psu_match.group(1) - check_vendor_specific_psustatus(duthost, line, psu_line_pattern) - pytest_assert(psu_under_test is not None, "No PSU is turned off") - - logging.info("Turn on outlet {}".format(outlet)) - pdu_ctrl.turn_on_outlet(outlet) - time.sleep(PDU_WAIT_TIME) - - cli_psu_status = duthost.command(CMD_PLATFORM_PSUSTATUS) - for line in cli_psu_status["stdout_lines"][2:]: - psu_match = psu_line_pattern.match(line) - pytest_assert(psu_match, "Unexpected PSU status output") - if psu_match.group(1) == psu_under_test: - pytest_assert(psu_match.group(2) == "OK", - "Unexpected PSU status after turned it on") - check_vendor_specific_psustatus(duthost, line, psu_line_pattern) - - psu_test_results[psu_under_test] = True + try: + for psu in psu_to_pdus.keys(): + outlets = psu_to_pdus[psu] + psu_under_test = None + + logging.info("Turning off {} PDUs connected to {}".format(len(outlets), psu)) + for outlet in outlets: + pdu_ctrl.turn_off_outlet(outlet) + time.sleep(pdu_wait_time) + + # Check that PSU is turned off + cli_psu_status = duthost.command(CMD_PLATFORM_PSUSTATUS) + + for line in cli_psu_status["stdout_lines"][2:]: + psu_match = psu_line_pattern.match(line) + pytest_assert(psu_match, "Unexpected PSU status output") + # also make sure psustatus is not 'NOT PRESENT', which cannot be turned on/off + if psu_match.group(2) != "OK" and psu_match.group(2) != "NOT PRESENT": + psu_under_test = psu_match.group(1) + check_vendor_specific_psustatus(duthost, line, psu_line_pattern) + pytest_assert(psu_under_test is not None, "No PSU is turned off") + + for outlet in outlets: + logging.info("Turn on outlet {}".format(outlet)) + pdu_ctrl.turn_on_outlet(outlet) + time.sleep(pdu_wait_time) + + cli_psu_status = duthost.command(CMD_PLATFORM_PSUSTATUS) + for line in cli_psu_status["stdout_lines"][2:]: + psu_match = psu_line_pattern.match(line) + pytest_assert(psu_match, "Unexpected PSU status output") + if psu_match.group(1) == psu_under_test: + pytest_assert(psu_match.group(2) == "OK", + "Unexpected PSU status after turned it on") + check_vendor_specific_psustatus(duthost, line, psu_line_pattern) + + psu_test_results[psu_under_test] = True + finally: + turn_on_all_outlets(pdu_ctrl) for psu in psu_test_results: pytest_assert(psu_test_results[psu], diff --git a/tests/platform_tests/test_reboot.py b/tests/platform_tests/test_reboot.py index 6ec391d2b26..97be66e0bf8 100644 --- a/tests/platform_tests/test_reboot.py +++ b/tests/platform_tests/test_reboot.py @@ -111,6 +111,10 @@ def check_interfaces_and_services(dut, interfaces, xcvr_skip_list, if interfaces_wait_time is None: interfaces_wait_time = MAX_WAIT_TIME_FOR_INTERFACES + # Interface bring up time is longer for FORCE10-S6000 platform + if "6000" in dut.facts['hwsku']: + interfaces_wait_time = MAX_WAIT_TIME_FOR_INTERFACES * 8 + if dut.is_supervisor_node(): logging.info("skipping interfaces related check for supervisor") else: diff --git a/tests/platform_tests/test_reload_config.py b/tests/platform_tests/test_reload_config.py index 1beed69b2d3..63b8d239621 100644 --- a/tests/platform_tests/test_reload_config.py +++ b/tests/platform_tests/test_reload_config.py @@ -70,7 +70,7 @@ def test_reload_configuration(duthosts, enum_rand_one_per_hwsku_hostname, logging.info("Wait some time for all the transceivers to be detected") max_wait_time_for_transceivers = 300 - if duthost.facts["platform"] == "x86_64-cel_e1031-r0": + if duthost.facts["platform"] in ["x86_64-cel_e1031-r0", "x86_64-88_lc0_36fh_m-r0"]: max_wait_time_for_transceivers = 900 assert wait_until(max_wait_time_for_transceivers, 20, 0, check_all_interface_information, duthost, interfaces, xcvr_skip_list), "Not all transceivers are detected \ @@ -158,7 +158,12 @@ def test_reload_configuration_checks(duthosts, enum_rand_one_per_hwsku_hostname, if not config_force_option_supported(duthost): return + timeout = 0 + if duthost.get_facts().get("modular_chassis"): + timeout = 420 + reboot(duthost, localhost, reboot_type="cold", wait=5, + timeout=timeout, plt_reboot_ctrl_overwrite=False) # Check if all database containers have started diff --git a/tests/ptf_runner.py b/tests/ptf_runner.py index ab87aa8e4b3..0cd90dda466 100644 --- a/tests/ptf_runner.py +++ b/tests/ptf_runner.py @@ -12,14 +12,18 @@ logger = logging.getLogger(__name__) -def ptf_collect(host, log_file, skip_pcap=False): +def ptf_collect(host, log_file, skip_pcap=False, dst_dir='./logs/ptf_collect/'): + """ + Collect PTF log and pcap files from PTF container to sonic-mgmt container. + Optionally, save the files to a sub-directory in the destination. + """ pos = log_file.rfind('.') filename_prefix = log_file[0:pos] if pos > -1 else log_file pos = filename_prefix.rfind('/') + 1 rename_prefix = filename_prefix[pos:] if pos > 0 else filename_prefix suffix = str(datetime.utcnow()).replace(' ', '.') - filename_log = './logs/ptf_collect/' + rename_prefix + '.' + suffix + '.log' + filename_log = dst_dir + rename_prefix + '.' + suffix + '.log' host.fetch(src=log_file, dest=filename_log, flat=True, fail_on_missing=False) allure.attach.file(filename_log, 'ptf_log: ' + filename_log, allure.attachment_type.TEXT) if skip_pcap: @@ -31,7 +35,7 @@ def ptf_collect(host, log_file, skip_pcap=False): compressed_pcap_file = pcap_file + '.tar.gz' host.archive(path=pcap_file, dest=compressed_pcap_file, format='gz') # Copy compressed file from ptf to sonic-mgmt - filename_pcap = './logs/ptf_collect/' + rename_prefix + '.' + suffix + '.pcap.tar.gz' + filename_pcap = dst_dir + rename_prefix + '.' + suffix + '.pcap.tar.gz' host.fetch(src=compressed_pcap_file, dest=filename_pcap, flat=True, fail_on_missing=False) allure.attach.file(filename_pcap, 'ptf_pcap: ' + filename_pcap, allure.attachment_type.PCAP) @@ -46,7 +50,7 @@ def get_dut_type(host): else: logger.warning("DUT type file is empty.") else: - logger.warning("DUT type file doesn't exist.") + logger.info("DUT type file doesn't exist.") return "Unknown" @@ -101,9 +105,10 @@ def is_py3_compat(test_fpath): def ptf_runner(host, testdir, testname, platform_dir=None, params={}, platform="remote", qlen=0, relax=True, debug_level="info", - socket_recv_size=None, log_file=None, device_sockets=[], timeout=0, custom_options="", + socket_recv_size=None, log_file=None, + ptf_collect_dir="./logs/ptf_collect/", + device_sockets=[], timeout=0, custom_options="", module_ignore_errors=False, is_python3=None, async_mode=False, pdb=False): - dut_type = get_dut_type(host) kvm_support = params.get("kvm_support", False) if dut_type == "kvm" and kvm_support is False: @@ -201,7 +206,7 @@ def ptf_runner(host, testdir, testname, platform_dir=None, params={}, result = host.shell(cmd, chdir="/root", module_ignore_errors=module_ignore_errors, module_async=async_mode) if not async_mode: if log_file: - ptf_collect(host, log_file) + ptf_collect(host, log_file, dst_dir=ptf_collect_dir) if result: allure.attach(json.dumps(result, indent=4), 'ptf_console_result', allure.attachment_type.TEXT) if module_ignore_errors: @@ -209,7 +214,7 @@ def ptf_runner(host, testdir, testname, platform_dir=None, params={}, return result except Exception: if log_file: - ptf_collect(host, log_file) + ptf_collect(host, log_file, dst_dir=ptf_collect_dir) traceback_msg = traceback.format_exc() allure.attach(traceback_msg, 'ptf_runner_exception_traceback', allure.attachment_type.TEXT) logger.error("Exception caught while executing case: {}. Error message: {}".format(testname, traceback_msg)) diff --git a/tests/qos/files/mellanox/special_qos_config.yml b/tests/qos/files/mellanox/special_qos_config.yml index 23581fb8230..04a16ebf856 100644 --- a/tests/qos/files/mellanox/special_qos_config.yml +++ b/tests/qos/files/mellanox/special_qos_config.yml @@ -5,34 +5,34 @@ qos_params: profile: pkts_num_leak_out: 1 xoff_1: - packet_size: 600 + packet_size: 800 xoff_2: - packet_size: 600 + packet_size: 800 xoff_3: - packet_size: 600 + packet_size: 800 xoff_4: - packet_size: 600 + packet_size: 800 wm_pg_headroom: - packet_size: 600 + packet_size: 800 wm_q_shared_lossless: - packet_size: 600 + packet_size: 700 hdrm_pool_size: - packet_size: 600 + packet_size: 800 xon_1: - packet_size: 600 + packet_size: 800 xon_2: - packet_size: 600 + packet_size: 800 xon_3: - packet_size: 600 + packet_size: 800 xon_4: - packet_size: 600 + packet_size: 800 lossy_queue_1: - packet_size: 600 + packet_size: 800 wm_pg_shared_lossless: - packet_size: 600 + packet_size: 800 pkts_num_margin: 7 wm_pg_shared_lossy: - packet_size: 600 + packet_size: 800 pkts_num_margin: 5 wm_q_shared_lossy: - packet_size: 600 + packet_size: 800 diff --git a/tests/qos/files/qos_params.gb.yaml b/tests/qos/files/qos_params.gb.yaml index 0a098ddee99..4d83f6054d2 100644 --- a/tests/qos/files/qos_params.gb.yaml +++ b/tests/qos/files/qos_params.gb.yaml @@ -414,7 +414,7 @@ qos_params: wm_q_wm_all_ports: ecn: 1 pkt_count: 3000 - pkts_num_margin: 1024 + pkts_num_margin: 3072 cell_size: 384 xon_1: dscp: 3 @@ -538,7 +538,7 @@ qos_params: wm_q_wm_all_ports: ecn: 1 pkt_count: 3000 - pkts_num_margin: 1024 + pkts_num_margin: 3072 cell_size: 384 packet_size: 1350 xon_1: @@ -729,7 +729,7 @@ qos_params: wm_q_wm_all_ports: ecn: 1 pkt_count: 855 - pkts_num_margin: 1024 + pkts_num_margin: 3072 cell_size: 6144 packet_size: 6144 400000_120000m: diff --git a/tests/qos/files/qos_params.j2c.yaml b/tests/qos/files/qos_params.j2c.yaml index 9b569efaca0..3de0faa1c68 100644 --- a/tests/qos/files/qos_params.j2c.yaml +++ b/tests/qos/files/qos_params.j2c.yaml @@ -427,6 +427,113 @@ qos_params: pkts_num_trig_egr_drp: 2396745 pkts_num_fill_egr_min: 0 cell_size: 4096 + 400000_2000m: + pkts_num_leak_out: 140 + internal_hdr_size: 48 + xoff_1: + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_trig_pfc: 657523 + pkts_num_trig_ingr_drp: 670430 + pkts_num_margin: 100 + xoff_2: + dscp: 4 + ecn: 1 + pg: 4 + pkts_num_trig_pfc: 657523 + pkts_num_trig_ingr_drp: 670430 + pkts_num_margin: 100 + hdrm_pool_size: + dscps: [ 3, 4 ] + ecn: 1 + pgs: [ 3, 4 ] + src_port_ids: [ 0, 2, 4, 6, 8, 10, 12, 14, 16 ] + dst_port_id: 18 + pgs_num: 18 + pkts_num_trig_pfc: 657523 + pkts_num_hdrm_full: 622850 + pkts_num_hdrm_partial: 622750 + margin: 300 + wm_pg_headroom: + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_trig_pfc: 657523 + pkts_num_trig_ingr_drp: 670430 + cell_size: 4096 + pkts_num_margin: 30 + xon_1: + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_trig_pfc: 657523 + pkts_num_dismiss_pfc: 12985 + pkts_num_margin: 150 + xon_2: + dscp: 4 + ecn: 1 + pg: 4 + pkts_num_trig_pfc: 657523 + pkts_num_dismiss_pfc: 12985 + pkts_num_margin: 150 + lossy_queue_1: + dscp: 8 + ecn: 1 + pg: 0 + pkts_num_trig_egr_drp: 2179770 + pkts_num_margin: 100 + wm_pg_shared_lossless: + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_fill_min: 0 + pkts_num_trig_pfc: 657523 + packet_size: 64 + cell_size: 4096 + pkts_num_margin: 40 + wm_pg_shared_lossy: + dscp: 8 + ecn: 1 + pg: 0 + pkts_num_fill_min: 0 + pkts_num_trig_egr_drp: 2179770 + packet_size: 64 + cell_size: 4096 + pkts_num_margin: 40 + wm_q_shared_lossless: + dscp: 3 + ecn: 1 + queue: 3 + pkts_num_fill_min: 0 + pkts_num_trig_ingr_drp: 670430 + cell_size: 4096 + wm_buf_pool_lossless: + dscp: 3 + ecn: 1 + pg: 3 + queue: 3 + pkts_num_fill_ingr_min: 0 + pkts_num_trig_pfc: 28160 + pkts_num_trig_ingr_drp: 750848 + pkts_num_fill_egr_min: 8 + cell_size: 4096 + wm_q_shared_lossy: + dscp: 8 + ecn: 1 + queue: 0 + pkts_num_fill_min: 0 + pkts_num_trig_egr_drp: 2179770 + cell_size: 4096 + wm_buf_pool_lossy: + dscp: 8 + ecn: 1 + pg: 0 + queue: 0 + pkts_num_fill_ingr_min: 0 + pkts_num_trig_egr_drp: 2396745 + pkts_num_fill_egr_min: 0 + cell_size: 4096 400000_120000m: pkts_num_leak_out: 140 internal_hdr_size: 48 diff --git a/tests/qos/files/qos_params.th5.yaml b/tests/qos/files/qos_params.th5.yaml new file mode 100644 index 00000000000..2e3c537a098 --- /dev/null +++ b/tests/qos/files/qos_params.th5.yaml @@ -0,0 +1,201 @@ +qos_params: + th5: + topo-t0-standalone: &topo-t0-standalone + cell_size: 254 + hdrm_pool_wm_multiplier: 1 + 200000_5m: + hdrm_pool_size: + dscps: + - 3 + - 4 + dst_port_id: 0 + ecn: 1 + margin: 2 + pgs: + - 3 + - 4 + pgs_num: 50 + pkts_num_hdrm_full: 1185 + pkts_num_hdrm_partial: 47 + pkts_num_trig_pfc: 120117 + pkts_num_trig_pfc_multi: + - 120117 + - 60096 + - 30085 + - 15079 + - 7577 + - 3825 + - 1950 + - 1012 + - 543 + - 308 + - 191 + - 133 + - 103 + - 89 + - 81 + - 78 + - 76 + - 75 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + - 74 + src_port_ids: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15 + - 16 + - 17 + - 18 + - 19 + - 20 + - 21 + - 22 + - 23 + - 24 + - 25 + lossy_queue_1: + dscp: 8 + ecn: 1 + pg: 0 + pkts_num_margin: 2 + pkts_num_trig_egr_drp: 120051 + pkts_num_egr_mem: 238 + pkts_num_leak_out: 0 + wm_pg_headroom: + cell_size: 254 + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_margin: 2 + pkts_num_trig_ingr_drp: 121302 + pkts_num_trig_pfc: 120117 + wm_pg_shared_lossless: + cell_size: 254 + dscp: 3 + ecn: 1 + packet_size: 64 + pg: 3 + pkts_num_fill_min: 74 + pkts_num_margin: 2 + pkts_num_trig_pfc: 120117 + wm_pg_shared_lossy: + cell_size: 254 + dscp: 8 + ecn: 1 + packet_size: 64 + pg: 0 + pkts_num_fill_min: 7 + pkts_num_margin: 2 + pkts_num_trig_egr_drp: 120051 + wm_q_shared_lossless: + cell_size: 254 + dscp: 3 + ecn: 1 + pkts_num_fill_min: 0 + pkts_num_margin: 2 + pkts_num_trig_ingr_drp: 121302 + queue: 3 + wm_q_shared_lossy: + cell_size: 254 + dscp: 8 + ecn: 1 + pkts_num_fill_min: 7 + pkts_num_margin: 2 + pkts_num_trig_egr_drp: 120051 + queue: 0 + xoff_1: + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_margin: 2 + pkts_num_trig_ingr_drp: 121302 + pkts_num_trig_pfc: 120117 + xoff_2: + dscp: 4 + ecn: 1 + pg: 4 + pkts_num_margin: 2 + pkts_num_trig_ingr_drp: 121302 + pkts_num_trig_pfc: 120117 + xon_1: + dscp: 3 + ecn: 1 + pg: 3 + pkts_num_dismiss_pfc: 14 + pkts_num_margin: 2 + pkts_num_trig_pfc: 120117 + xon_2: + dscp: 4 + ecn: 1 + pg: 4 + pkts_num_dismiss_pfc: 14 + pkts_num_margin: 2 + pkts_num_trig_pfc: 120117 + wrr: + ecn: 1 + q0_num_of_pkts: 140 + q1_num_of_pkts: 140 + q2_num_of_pkts: 140 + q3_num_of_pkts: 150 + q4_num_of_pkts: 150 + q5_num_of_pkts: 140 + q6_num_of_pkts: 140 + q7_num_of_pkts: 140 + limit: 80 + wrr_chg: + ecn: 1 + q0_num_of_pkts: 80 + q1_num_of_pkts: 80 + q2_num_of_pkts: 80 + q3_num_of_pkts: 300 + q4_num_of_pkts: 300 + q5_num_of_pkts: 80 + q6_num_of_pkts: 80 + q7_num_of_pkts: 80 + limit: 80 + lossy_weight: 8 + lossless_weight: 30 + topo-t0-standalone-256: *topo-t0-standalone + topo-t0-standalone-32: *topo-t0-standalone diff --git a/tests/qos/qos_sai_base.py b/tests/qos/qos_sai_base.py index 1b2c5d92a66..ef6cb0ef6f5 100644 --- a/tests/qos/qos_sai_base.py +++ b/tests/qos/qos_sai_base.py @@ -18,7 +18,7 @@ from tests.common.cisco_data import is_cisco_device from tests.common.dualtor.dual_tor_utils import upper_tor_host, lower_tor_host, dualtor_ports, is_tunnel_qos_remap_enabled # noqa F401 from tests.common.dualtor.mux_simulator_control \ - import toggle_all_simulator_ports, get_mux_status, check_mux_status, validate_check_result # noqa F401 + import toggle_all_simulator_ports, check_mux_status, validate_check_result # noqa F401 from tests.common.dualtor.constants import UPPER_TOR, LOWER_TOR # noqa F401 from tests.common.utilities import check_qos_db_fv_reference_with_table from tests.common.fixtures.duthost_utils import dut_qos_maps, separated_dscp_to_tc_map_on_uplink # noqa F401 @@ -27,6 +27,7 @@ from tests.common.system_utils import docker # noqa F401 from tests.common.errors import RunAnsibleModuleFail from tests.common import config_reload +from tests.common.devices.eos import EosHost logger = logging.getLogger(__name__) @@ -35,9 +36,10 @@ class QosBase: """ Common APIs """ - SUPPORTED_T0_TOPOS = ["t0", "t0-56-po2vlan", "t0-64", "t0-116", "t0-35", "dualtor-56", "dualtor-64", "dualtor-120", - "dualtor", "dualtor-64-breakout", "t0-120", "t0-80", "t0-backend", "t0-56-o8v48", "t0-8-lag", - "t0-standalone-32", "t0-standalone-64", "t0-standalone-128", "t0-standalone-256", "t0-28"] + SUPPORTED_T0_TOPOS = ["t0", "t0-56", "t0-56-po2vlan", "t0-64", "t0-116", "t0-35", "dualtor-56", "dualtor-64", + "dualtor-120", "dualtor", "dualtor-64-breakout", "t0-120", "t0-80", "t0-backend", + "t0-56-o8v48", "t0-8-lag", "t0-standalone-32", "t0-standalone-64", "t0-standalone-128", + "t0-standalone-256", "t0-28"] SUPPORTED_T1_TOPOS = ["t1-lag", "t1-64-lag", "t1-56-lag", "t1-backend", "t1-28-lag", "t1-32-lag"] SUPPORTED_PTF_TOPOS = ['ptf32', 'ptf64'] SUPPORTED_ASIC_LIST = ["pac", "gr", "gr2", "gb", "td2", "th", "th2", "spc1", "spc2", "spc3", "spc4", "td3", "th3", @@ -146,7 +148,7 @@ def runPtfTest(self, ptfhost, testCase='', testParams={}, relax=False, pdb=False qlen=10000, is_python3=True, relax=relax, - timeout=1200, + timeout=1850, socket_recv_size=16384, custom_options=custom_options, pdb=pdb @@ -561,8 +563,8 @@ def __assignTestPortIps(self, mgFacts, topo): return dutPortIps - @pytest.fixture(scope='class') - def swapSyncd_on_selected_duts(self, request, duthosts, get_src_dst_asic_and_duts, creds, tbinfo, lower_tor_host): # noqa F811 + @pytest.fixture(scope='module') + def swapSyncd_on_selected_duts(self, request, duthosts, creds, tbinfo, lower_tor_host): # noqa F811 """ Swap syncd on DUT host @@ -573,6 +575,10 @@ def swapSyncd_on_selected_duts(self, request, duthosts, get_src_dst_asic_and_dut Returns: None """ + if 'dualtor' in tbinfo['topo']['name']: + dut_list = [lower_tor_host] + else: + dut_list = duthosts.frontend_nodes swapSyncd = request.config.getoption("--qos_swap_syncd") public_docker_reg = request.config.getoption("--public_docker_registry") try: @@ -584,12 +590,12 @@ def swapSyncd_on_selected_duts(self, request, duthosts, get_src_dst_asic_and_dut new_creds['docker_registry_password'] = '' else: new_creds = creds - for duthost in get_src_dst_asic_and_duts["all_duts"]: + for duthost in dut_list: docker.swap_syncd(duthost, new_creds) yield finally: if swapSyncd: - for duthost in get_src_dst_asic_and_duts["all_duts"]: + for duthost in dut_list: docker.restore_default_syncd(duthost, new_creds) @pytest.fixture(scope='class', name="select_src_dst_dut_and_asic", @@ -634,12 +640,18 @@ def select_src_dst_dut_and_asic(self, duthosts, request, tbinfo, lower_tor_host) dst_asic_index = 0 elif test_port_selection_criteria == "single_dut_multi_asic": + found_multi_asic_dut = False if topo in self.SUPPORTED_T0_TOPOS or isMellanoxDevice(duthost): pytest.skip("single_dut_multi_asic is not supported on T0 topologies") if topo not in self.SUPPORTED_T1_TOPOS and shortlink_indices: - src_dut_index = random.choice(shortlink_indices) + random.shuffle(shortlink_indices) + for idx in shortlink_indices: + a_dut = duthosts.frontend_nodes[idx] + if a_dut.sonichost.is_multi_asic: + src_dut_index = idx + found_multi_asic_dut = True + break else: - found_multi_asic_dut = False for a_dut_index in range(len(duthosts.frontend_nodes)): a_dut = duthosts.frontend_nodes[a_dut_index] if a_dut.sonichost.is_multi_asic: @@ -647,9 +659,9 @@ def select_src_dst_dut_and_asic(self, duthosts, request, tbinfo, lower_tor_host) found_multi_asic_dut = True logger.info("Using dut {} for single_dut_multi_asic testing".format(a_dut.hostname)) break - if not found_multi_asic_dut: - pytest.skip( - "Did not find any frontend node that is multi-asic - so can't run single_dut_multi_asic tests") + if not found_multi_asic_dut: + pytest.skip( + "Did not find any frontend node that is multi-asic - so can't run single_dut_multi_asic tests") dst_dut_index = src_dut_index src_asic_index = 0 dst_asic_index = 1 @@ -1381,8 +1393,6 @@ def updateDockerService(host, docker="", action="", service=""): # noqa: F811 src_services = [ {"docker": src_asic.get_docker_name("lldp"), "service": "lldp-syncd"}, {"docker": src_asic.get_docker_name("lldp"), "service": "lldpd"}, - {"docker": src_asic.get_docker_name("bgp"), "service": "bgpd"}, - {"docker": src_asic.get_docker_name("bgp"), "service": "bgpmon"}, {"docker": src_asic.get_docker_name("radv"), "service": "radvd"}, {"docker": src_asic.get_docker_name("swss"), "service": "arp_update"} ] @@ -1391,8 +1401,6 @@ def updateDockerService(host, docker="", action="", service=""): # noqa: F811 dst_services = [ {"docker": dst_asic.get_docker_name("lldp"), "service": "lldp-syncd"}, {"docker": dst_asic.get_docker_name("lldp"), "service": "lldpd"}, - {"docker": dst_asic.get_docker_name("bgp"), "service": "bgpd"}, - {"docker": dst_asic.get_docker_name("bgp"), "service": "bgpmon"}, {"docker": dst_asic.get_docker_name("radv"), "service": "radvd"}, {"docker": dst_asic.get_docker_name("swss"), "service": "arp_update"} ] @@ -1405,17 +1413,22 @@ def updateDockerService(host, docker="", action="", service=""): # noqa: F811 disable_container_autorestart(src_dut, testcase="test_qos_sai", feature_list=feature_list) for service in src_services: updateDockerService(src_dut, action="stop", **service) + src_dut.shell("sudo config bgp shutdown all") if src_asic != dst_asic: disable_container_autorestart(dst_dut, testcase="test_qos_sai", feature_list=feature_list) for service in dst_services: updateDockerService(dst_dut, action="stop", **service) + dst_dut.shell("sudo config bgp shutdown all") + yield for service in src_services: updateDockerService(src_dut, action="start", **service) + src_dut.shell("sudo config bgp start all") if src_asic != dst_asic: for service in dst_services: updateDockerService(dst_dut, action="start", **service) + dst_dut.shell("sudo config bgp start all") """ Start mux conatiner for dual ToR """ if 'dualtor' in tbinfo['topo']['name']: @@ -1617,6 +1630,9 @@ def dutQosConfig( if 'platform_asic' in duthost.facts and duthost.facts['platform_asic'] == 'broadcom-dnx': logger.info("THDI_BUFFER_CELL_LIMIT_SP is not valid for broadcom DNX - ignore dynamic buffer config") qosParams = qosConfigs['qos_params'][dutAsic][dutTopo] + elif dutAsic == 'th5': + logger.info("Generator script not implemented for TH5") + qosParams = qosConfigs['qos_params'][dutAsic][dutTopo] else: bufferConfig = self.dutBufferConfig(duthost, dut_asic) pytest_assert(len(bufferConfig) == 4, @@ -1861,11 +1877,15 @@ def populateArpEntries( yield return - @pytest.fixture(scope='class', autouse=True) - def dut_disable_ipv6(self, duthosts, get_src_dst_asic_and_duts, tbinfo, lower_tor_host, # noqa F811 - swapSyncd_on_selected_duts): + @pytest.fixture(scope='module', autouse=True) + def dut_disable_ipv6(self, duthosts, tbinfo, lower_tor_host, swapSyncd_on_selected_duts): # noqa F811 + if 'dualtor' in tbinfo['topo']['name']: + dut_list = [lower_tor_host] + else: + dut_list = duthosts.frontend_nodes + all_docker0_ipv6_addrs = {} - for duthost in get_src_dst_asic_and_duts['all_duts']: + for duthost in dut_list: try: all_docker0_ipv6_addrs[duthost.hostname] = \ duthost.shell("sudo ip -6 addr show dev docker0 | grep global" + " | awk '{print $2}'")[ @@ -1880,14 +1900,14 @@ def dut_disable_ipv6(self, duthosts, get_src_dst_asic_and_duts, tbinfo, lower_to yield - for duthost in get_src_dst_asic_and_duts['all_duts']: + for duthost in dut_list: duthost.shell("sysctl -w net.ipv6.conf.all.disable_ipv6=0") if all_docker0_ipv6_addrs[duthost.hostname] is not None: logger.info("Adding docker0's IPv6 address since it was removed when disabing IPv6") duthost.shell("ip -6 addr add {} dev docker0".format(all_docker0_ipv6_addrs[duthost.hostname])) # TODO: parallelize this step.. Do we really need this ? - for duthost in get_src_dst_asic_and_duts['all_duts']: + for duthost in dut_list: config_reload(duthost, config_source='config_db', safe_reload=True, check_intf_up_ports=True) @pytest.fixture(scope='class', autouse=True) @@ -2550,11 +2570,10 @@ def skip_longlink(self, dutQosConfig): def tc_to_dscp_count(self, get_src_dst_asic_and_duts): duthost = get_src_dst_asic_and_duts['src_dut'] tc_to_dscp_count_map = {} - for tc in range(8): - tc_to_dscp_count_map[tc] = 0 config_facts = duthost.asic_instance().config_facts(source="running")["ansible_facts"] dscp_to_tc_map = config_facts['DSCP_TO_TC_MAP']['AZURE'] for dscp, tc in dscp_to_tc_map.items(): + tc_to_dscp_count_map.setdefault(int(tc), 0) tc_to_dscp_count_map[int(tc)] += 1 yield tc_to_dscp_count_map @@ -2572,3 +2591,106 @@ def isLonglink(self, dut_host): if cable_length >= 120000: return True return False + + @pytest.fixture(scope="function", autouse=False) + def change_lag_lacp_timer(self, duthosts, get_src_dst_asic_and_duts, tbinfo, nbrhosts, dutConfig, dutTestParams, + request): + if request.config.getoption("--neighbor_type") == "sonic": + yield + return + + if ('platform_asic' in dutTestParams["basicParams"] and + dutTestParams["basicParams"]["platform_asic"] == "broadcom-dnx"): + src_dut = get_src_dst_asic_and_duts['src_dut'] + dst_dut = get_src_dst_asic_and_duts['dst_dut'] + if src_dut.sonichost.is_multi_asic and dst_dut.sonichost.is_multi_asic: + dst_mgfacts = dst_dut.get_extended_minigraph_facts(tbinfo) + dst_port_id = dutConfig['testPorts']['dst_port_id'] + dst_interface = dutConfig['dutInterfaces'][dst_port_id] + lag_name = '' + for port_ch, port_intf in dst_mgfacts['minigraph_portchannels'].items(): + if dst_interface in port_intf['members']: + lag_name = port_ch + break + if lag_name == '': + yield + return + lag_facts = dst_dut.lag_facts(host=dst_dut.hostname)['ansible_facts']['lag_facts'] + po_interfaces = lag_facts['lags'][lag_name]['po_config']['ports'] + vm_neighbors = dst_mgfacts['minigraph_neighbors'] + neighbor_lag_intfs = [vm_neighbors[po_intf]['port'] for po_intf in po_interfaces] + neigh_intf = next(iter(po_interfaces.keys())) + peer_device = vm_neighbors[neigh_intf]['name'] + vm_host = nbrhosts[peer_device]['host'] + num = 600 + for neighbor_lag_member in neighbor_lag_intfs: + logger.info( + "Changing lacp timer multiplier to 600 for %s in %s" % (neighbor_lag_member, peer_device)) + if isinstance(vm_host, EosHost): + vm_host.set_interface_lacp_time_multiplier(neighbor_lag_member, num) + + yield + if ('platform_asic' in dutTestParams["basicParams"] and + dutTestParams["basicParams"]["platform_asic"] == "broadcom-dnx"): + if src_dut.sonichost.is_multi_asic and dst_dut.sonichost.is_multi_asic: + for neighbor_lag_member in neighbor_lag_intfs: + logger.info( + "Changing lacp timer multiplier to default for %s in %s" % (neighbor_lag_member, peer_device)) + vm_host.no_lacp_time_multiplier(neighbor_lag_member) + + def copy_and_run_set_cir_script_cisco_8000(self, dut, ports, asic="", speed="10000000"): + if dut.facts['asic_type'] != "cisco-8000": + raise RuntimeError("This function should have been called only for cisco-8000.") + dshell_script = ''' +from common import * +from sai_utils import * + +def set_port_cir(interface, rate): + mp = get_mac_port(interface) + sch = mp.get_scheduler() + sch.set_credit_cir(rate) + sch.set_credit_eir_or_pir(rate, False) + +''' + + for intf in ports: + dshell_script += f'\nset_port_cir("{intf}", {speed})' + + script_path = "/tmp/set_scheduler.py" + dut.copy(content=dshell_script, dest=script_path) + dut.docker_copy_to_all_asics( + container_name=f"syncd{asic}", + src=script_path, + dst="/") + + @pytest.fixture(scope="function", autouse=False) + def set_cir_change(self, get_src_dst_asic_and_duts, dutConfig): + dst_port = dutConfig['dutInterfaces'][dutConfig["testPorts"]["dst_port_id"]] + dst_dut = get_src_dst_asic_and_duts['dst_dut'] + dst_asic = get_src_dst_asic_and_duts['dst_asic'] + dst_index = dst_asic.asic_index + + if dst_dut.facts['asic_type'] != "cisco-8000": + yield + return + + interfaces = [dst_port] + output = dst_asic.shell(f"show interface portchannel | grep {dst_port}", module_ignore_errors=True)['stdout'] + if output != '': + output = output.replace('(S)', '') + pattern = ' *[0-9]* *PortChannel[0-9]* *LACP\\(A\\)\\(Up\\) *(Ethernet[0-9]*.*)' + import re + match = re.match(pattern, output) + if not match: + raise RuntimeError(f"Couldn't find required interfaces out of the output:{output}") + interfaces = match.group(1).split(' ') + + # Set scheduler to 5 Gbps. + self.copy_and_run_set_cir_script_cisco_8000( + dut=dst_dut, + ports=interfaces, + asic=dst_index, + speed=5 * 1000 * 1000 * 1000) + + yield + return diff --git a/tests/qos/test_buffer.py b/tests/qos/test_buffer.py index 9aa43b2cca9..b858392524b 100644 --- a/tests/qos/test_buffer.py +++ b/tests/qos/test_buffer.py @@ -11,8 +11,8 @@ from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert, pytest_require from tests.common.fixtures.conn_graph_facts import conn_graph_facts # noqa F401 +from tests.common.marvell_teralynx_data import is_marvell_teralynx_device from tests.common.mellanox_data import is_mellanox_device, get_chip_type -from tests.common.innovium_data import is_innovium_device from tests.common.plugins.loganalyzer.loganalyzer import LogAnalyzer from tests.common.utilities import check_qos_db_fv_reference_with_table from tests.common.utilities import skip_release @@ -203,8 +203,11 @@ def load_lossless_headroom_data(duthost): dut_platform = duthost.facts["platform"] skudir = "/usr/share/sonic/device/{}/{}/".format( dut_platform, dut_hwsku) + asic_index = "" + if duthost.is_multi_asic: + asic_index = duthost.asic_instance().asic_index lines = duthost.shell( - 'cat {}/pg_profile_lookup.ini'.format(skudir))["stdout"] + f'cat {skudir}/{asic_index}/pg_profile_lookup.ini')["stdout"] DEFAULT_LOSSLESS_HEADROOM_DATA = {} for line in lines.split('\n'): if line[0] == '#': @@ -329,7 +332,7 @@ def setup_module(duthosts, rand_one_dut_hostname, request): duthost = duthosts[rand_one_dut_hostname] detect_buffer_model(duthost) - if not is_mellanox_device(duthost) and not is_innovium_device(duthost): + if not is_mellanox_device(duthost) and not is_marvell_teralynx_device(duthost): load_lossless_headroom_data(duthost) yield return @@ -2384,11 +2387,10 @@ def _get_max_speed_from_list(speed_list_str): @pytest.mark.disable_loganalyzer -def test_exceeding_headroom(duthosts, rand_one_dut_hostname, conn_graph_facts, port_to_test): # noqa F811 - """The test case for maximum headroom - - If the accumulative headroom of a port exceeds the maximum value, - the new configuation causing the violation should not be applied to prevent orchagent from exiting +@pytest.mark.parametrize("disable_shp", [True, False]) +def test_exceeding_headroom(duthosts, rand_one_dut_hostname, conn_graph_facts, port_to_test, disable_shp): # noqa F811 + """The test case is to verify If the accumulative headroom(shared headroom) of a port exceeds the maximum threshold, + the relevant configuration should not be applied successfully, and there will are the corresponding error logs. Args: port_to_test: Port to run the test @@ -2396,12 +2398,13 @@ def test_exceeding_headroom(duthosts, rand_one_dut_hostname, conn_graph_facts, p The flow of the test case: 1. Find the longest possible cable length the port can support. It will also verify whether a super long cable will be applied - The test will be skipped if such limit isn't found after the cable length has been increased to 2km. + The test will be skipped if such limit isn't found after the cable length has been increased to 10km. 2. Add extra PGs to a port, which causes the accumulative headroom exceed the limit - 3. Configure a headroom-override on a port and then enlarge the size of the profile. - Verify whether the large size is applied. - 4. Configure a long cable length with shared headroom pool enabled. - Verify the size in the profile is updated when shared headroom pool is disabled. + 3. Configure a headroom-override on a port and then enlarge the headroom of the profile(when SHP is disabled, + the headroom is size. When SHP is enabled, the headroom is xoff). + Verify the config cannot be applied to the profile + 4. Configure a violating cable length which causing the headroom exceed the limit threshold. + Verify the relevant pg table for the violating cable length doesn't exist in app db In each step, it also checks whether the expected error message is found. """ @@ -2428,13 +2431,15 @@ def test_exceeding_headroom(duthosts, rand_one_dut_hostname, conn_graph_facts, p 'redis-cli hget BUFFER_POOL_TABLE:ingress_lossless_pool xoff')['stdout'] try: - # Test case runs with shared headroom pool disabled - # because the headroom size is very small with shared headroom pool enabled - if original_over_subscribe_ratio and original_over_subscribe_ratio != '0': - duthost.shell( - 'config buffer shared-headroom-pool over-subscribe-ratio 0') - if original_configured_shp_size and original_configured_shp_size != '0': - duthost.shell('config buffer shared-headroom-pool size 0') + if disable_shp: + logging.info("shp is disabled") + if original_over_subscribe_ratio and original_over_subscribe_ratio != '0': + duthost.shell( + 'config buffer shared-headroom-pool over-subscribe-ratio 0') + if original_configured_shp_size and original_configured_shp_size != '0': + duthost.shell('config buffer shared-headroom-pool size 0') + else: + duthost.shell('config buffer shared-headroom-pool over-subscribe-ratio 2') # 1. Find the longest possible cable length the port can support. loganalyzer, marker = init_log_analyzer( @@ -2585,16 +2590,23 @@ def test_exceeding_headroom(duthosts, rand_one_dut_hostname, conn_graph_facts, p ['BUFFER_PROFILE .* cannot be updated because .* referencing it violates the resource limitation', 'Unable to update profile for port .*. Accumulative headroom size exceeds limit']) - logging.info('[Update headroom override to a larger size]') - duthost.shell( - 'config buffer profile set test-headroom --size {}'.format(int(maximum_profile['size']) * 2)) + def _update_headroom_exceed_Larger_size(param_name): + logging.info( + '[Update headroom exceed the headroom threshold with the 2*maximum_profile[param_name]]') + duthost.shell( + f'config buffer profile set test-headroom --{param_name} {int(maximum_profile[param_name]) * 2}') - # This should make it exceed the limit, so the profile should not applied to the APPL_DB - time.sleep(20) - size_in_appldb = duthost.shell( - 'redis-cli hget "BUFFER_PROFILE_TABLE:test-headroom" size')['stdout'] - pytest_assert(size_in_appldb == maximum_profile['size'], - 'The profile with a large size was applied to APPL_DB, which can make headroom exceeding') + # This should make it exceed the limit, so the profile should not applied to the APPL_DB + time.sleep(20) + size_in_appldb = duthost.shell( + f'redis-cli hget "BUFFER_PROFILE_TABLE:test-headroom" {param_name}')['stdout'] + pytest_assert(size_in_appldb == maximum_profile[param_name], + f'The profile with a large size was applied to APPL_DB, which can make headroom exceeding. ' + f'size_in_appldb:{size_in_appldb}, ' + f'maximum_profile_{param_name}: {maximum_profile[param_name]}') + + param_name = "size" if disable_shp else "xoff" + _update_headroom_exceed_Larger_size(param_name) # Check log check_log_analyzer(loganalyzer, marker) @@ -2604,36 +2616,28 @@ def test_exceeding_headroom(duthosts, rand_one_dut_hostname, conn_graph_facts, p 'config interface buffer priority-group lossless set {} {}'.format(port_to_test, '3-4')) duthost.shell('config buffer profile remove test-headroom') - # 4. Configure a long cable length with shared headroom pool enabled. loganalyzer, marker = init_log_analyzer( duthost, 'Toggle shared headroom pool', - ['BUFFER_PROFILE .* cannot be updated because .* referencing it violates the resource limitation', - 'Unable to update profile for port .*. Accumulative headroom size exceeds limit', - 'refreshSharedHeadroomPool: Failed to update buffer profile .* when toggle shared headroom pool']) + ['.*Unable to update profile for port .*. Accumulative headroom size exceeds limit', + '.*ERR swss#buffermgrd: :- doTask: Failed to process table update.*', + '.*ERR swss#buffermgrd: :- refreshPgsForPort: Update speed .* and cable length .* for port.* failed,' + ' accumulative headroom size exceeds the limit.*']) - # Enable shared headroom pool - duthost.shell( - 'config buffer shared-headroom-pool over-subscribe-ratio 2') - time.sleep(20) # And then configure the cable length which causes the accumulative headroom exceed the limit duthost.shell( 'config interface cable-length {} {}m'.format(port_to_test, violating_cable_length)) expected_profile = make_expected_profile_name( original_speed, '{}m'.format(violating_cable_length)) - check_pg_profile( - duthost, 'BUFFER_PG_TABLE:{}:3-4'.format(port_to_test), expected_profile) - # Disable shared headroom pool - duthost.shell( - 'config buffer shared-headroom-pool over-subscribe-ratio 0') time.sleep(20) - # Make sure the size isn't updated - profile_appldb = _compose_dict_from_cli(duthost.shell( - 'redis-cli hgetall BUFFER_PROFILE_TABLE:{}'.format(expected_profile))['stdout'].split('\n')) - assert profile_appldb['xon'] == profile_appldb['size'] - - # Check log + # Make sure the profile isn't updated + # This pg table for the violating cable length doesn't exist in app db + excepted_pg_table = 'BUFFER_PG_TABLE:{}:3-4'.format(port_to_test) + pg_table_in_app_db = check_pg_profile( + duthost, excepted_pg_table, expected_profile, fail_test=False) + assert not pg_table_in_app_db, f"{expected_profile} should not exist in {excepted_pg_table} in app db" + # Check syslog includes relevant error log check_log_analyzer(loganalyzer, marker) finally: logging.info('[Clean up]') @@ -2926,7 +2930,7 @@ def _check_port_buffer_info_and_return(dut_db_info, table, ids, port, expected_p buffer_items_to_check_dict = { "up": buffer_table_up, "down": buffer_table_down} - if is_innovium_device(duthost): + if is_marvell_teralynx_device(duthost): buffer_items_to_check_dict["up"][KEY_2_LOSSLESS_QUEUE][3] = ( 'BUFFER_QUEUE_TABLE', '5-7', '[BUFFER_PROFILE_TABLE:egress_lossy_profile]') buffer_items_to_check_dict["down"][KEY_2_LOSSLESS_QUEUE][3] = ( diff --git a/tests/qos/test_qos_sai.py b/tests/qos/test_qos_sai.py index 270799e8f02..8983bace982 100644 --- a/tests/qos/test_qos_sai.py +++ b/tests/qos/test_qos_sai.py @@ -69,7 +69,7 @@ def ignore_expected_loganalyzer_exception(get_src_dst_asic_and_duts, loganalyzer # The following error log is related to the bug of https://github.com/sonic-net/sonic-buildimage/issues/13265 ".*ERR lldp[0-9]*#lldpmgrd.*Command failed.*lldpcli.*configure.*ports.*unable to connect to socket.*", ".*ERR lldp[0-9]*#lldpmgrd.*Command failed.*lldpcli.*configure.*ports.*lldp.*unknown command from argument" - ".*configure.*command was failed.*times, disabling retry.*" + ".*configure.*command was failed.*times, disabling retry.*", # Error related to syncd socket-timeout intermittenly ".*ERR syncd[0-9]*#dsserve: _ds2tty broken pipe.*" ] @@ -120,6 +120,22 @@ def check_skip_shared_res_test( " Pls see qos.yaml for the port idx's that are needed.") +def get_portspeed_cablelen(asic_instance): + config_facts = asic_instance.config_facts(source="running")["ansible_facts"] + buffer_pg = config_facts["BUFFER_PG"] + for intf, value_of_intf in buffer_pg.items(): + if "Ethernet-BP" in intf: + continue + for _, v in value_of_intf.items(): + if "pg_lossless" in v['profile']: + profileName = v['profile'] + logger.info("Lossless Buffer profile is {}".format(profileName)) + m = re.search("^pg_lossless_([0-9]+_[0-9]+m)_profile", profileName) + pytest_assert(m.group(1), "Cannot find port speed cable length") + return m.group(1) + return "" + + class TestQosSai(QosSaiBase): """TestQosSai derives from QosSaiBase and contains collection of QoS SAI test cases. @@ -325,8 +341,9 @@ def testParameter( def testQosSaiPfcXoffLimit( self, xoffProfile, duthosts, get_src_dst_asic_and_duts, ptfhost, dutTestParams, dutConfig, dutQosConfig, - ingressLosslessProfile, egressLosslessProfile + ingressLosslessProfile, egressLosslessProfile, change_lag_lacp_timer ): + # NOTE: this test will be skipped for t2 cisco 8800 if it's not xoff_1 or xoff_2 """ Test QoS SAI XOFF limits @@ -430,6 +447,7 @@ def testPfcStormWithSharedHeadroomOccupancy( Raises: RunAnsibleModuleFail if ptf test fails """ + # NOTE: this is a mellanox test only and will be skipped for cisco 8800 normal_profile = ["xon_1", "xon_2"] if not dutConfig["dualTor"] and xonProfile not in normal_profile: pytest.skip( @@ -590,6 +608,7 @@ def testQosSaiPfcXonLimit( self, get_src_dst_asic_and_duts, xonProfile, ptfhost, dutTestParams, dutConfig, dutQosConfig, ingressLosslessProfile ): + # NOTE: cisco 8800 will skip this test if it's not xon_1 or xon_2 """ Test QoS SAI XON limits @@ -761,8 +780,9 @@ def testQosSaiLosslessVoq( def testQosSaiHeadroomPoolSize( self, get_src_dst_asic_and_duts, ptfhost, dutTestParams, dutConfig, dutQosConfig, - ingressLosslessProfile + ingressLosslessProfile, disable_ipv6 ): + # NOTE: cisco-8800 will skip this test since there are no headroom pool """ Test QoS SAI Headroom pool size @@ -875,6 +895,7 @@ def testQosSaiSharedReservationSize( self, sharedResSizeKey, ptfhost, dutTestParams, dutConfig, dutQosConfig, get_src_dst_asic_and_duts, check_skip_shared_res_test ): + # NOTE: Cisco T2 skip due to reduced number of port in multi asic """ Test QoS SAI shared reservation size Args: @@ -892,9 +913,11 @@ def testQosSaiSharedReservationSize( if ('modular_chassis' in get_src_dst_asic_and_duts['src_dut'].facts and get_src_dst_asic_and_duts['src_dut'].facts["modular_chassis"]): if dutConfig['dstDutAsic'] != "pac": + # Skipped due to reduced number of ports in multi-asic platforms pytest.skip("This test is skipped since not enough ports on cisco-8000 " "T2 Q200.") if "shared_res_size_2" in sharedResSizeKey: + # Skipped due to reduced number of ports in multi-asic platforms pytest.skip("This test is skipped since on cisco-8000 Q100, " "SQG thresholds have no impact on XOFF thresholds.") @@ -948,6 +971,7 @@ def testQosSaiHeadroomPoolWatermark( dutConfig, dutQosConfig, ingressLosslessProfile, sharedHeadroomPoolSize, resetWatermark ): + # NOTE: cisco 8800 will skip this test since there is no headroom pool """ Test QoS SAI Headroom pool watermark @@ -1054,7 +1078,8 @@ def testQosSaiHeadroomPoolWatermark( @pytest.mark.parametrize("bufPool", ["wm_buf_pool_lossless", "wm_buf_pool_lossy"]) def testQosSaiBufferPoolWatermark( self, request, get_src_dst_asic_and_duts, bufPool, ptfhost, dutTestParams, dutConfig, dutQosConfig, - ingressLosslessProfile, egressLossyProfile, resetWatermark, _skip_watermark_multi_DUT + ingressLosslessProfile, egressLossyProfile, resetWatermark, + skip_src_dst_different_asic ): """ Test QoS SAI Queue buffer pool watermark for lossless/lossy traffic @@ -1085,6 +1110,12 @@ def testQosSaiBufferPoolWatermark( portSpeedCableLength = dutQosConfig["portSpeedCableLength"] if "wm_buf_pool_lossless" in bufPool: + if dutTestParams["basicParams"]["sonic_asic_type"] == 'cisco-8000': + dstPortSpeedCableLength = get_portspeed_cablelen( + get_src_dst_asic_and_duts['dst_asic']) + if dstPortSpeedCableLength != portSpeedCableLength: + pytest.skip("Skip buffer pool watermark lossless test since port speed " + "cable length is different between src and dst asic") qosConfig = dutQosConfig["param"][portSpeedCableLength] triggerDrop = qosConfig[bufPool]["pkts_num_trig_pfc"] fillMin = qosConfig[bufPool]["pkts_num_fill_ingr_min"] @@ -1139,7 +1170,7 @@ def testQosSaiBufferPoolWatermark( def testQosSaiLossyQueue( self, ptfhost, get_src_dst_asic_and_duts, dutTestParams, dutConfig, dutQosConfig, - ingressLossyProfile, skip_src_dst_different_asic + ingressLossyProfile, skip_src_dst_different_asic, change_lag_lacp_timer ): """ Test QoS SAI Lossy queue, shared buffer dynamic allocation @@ -1214,6 +1245,7 @@ def testQosSaiLossyQueueVoq( ingressLossyProfile, duthost, localhost, get_src_dst_asic_and_duts, skip_src_dst_different_asic, dut_qos_maps # noqa: F811 ): + # NOTE: cisco 8800 will skip this test, this test only for single asic with long link """ Test QoS SAI Lossy queue with non_default voq and default voq Args: @@ -1368,6 +1400,7 @@ def testQosSaiDscpQueueMapping( @pytest.mark.parametrize("direction", ["downstream", "upstream"]) def testQosSaiSeparatedDscpQueueMapping(self, duthost, ptfhost, dutTestParams, dutConfig, direction, dut_qos_maps): # noqa F811 + # NOTE: cisco t2 8800 will skip this test since because of the topology """ Test QoS SAI DSCP to queue mapping. We will have separated DSCP_TO_TC_MAP for uplink/downlink ports on T1 if PCBB enabled. @@ -1430,6 +1463,7 @@ def testQosSaiSeparatedDscpQueueMapping(self, duthost, ptfhost, dutTestParams, def testQosSaiDot1pQueueMapping( self, ptfhost, dutTestParams, dutConfig ): + # NOTE: cisco 8800 will skip this test Dot1p-PG mapping is only supported on backend """ Test QoS SAI Dot1p to queue mapping @@ -1468,6 +1502,7 @@ def testQosSaiDot1pQueueMapping( def testQosSaiDot1pPgMapping( self, ptfhost, dutTestParams, dutConfig ): + # NOTE: cisco 8800 will skip this test Dot1p-PG mapping is only supported on backend """ Test QoS SAI Dot1p to PG mapping Args: @@ -1505,7 +1540,7 @@ def testQosSaiDot1pPgMapping( def testQosSaiDwrr( self, ptfhost, duthosts, get_src_dst_asic_and_duts, dutTestParams, dutConfig, dutQosConfig, change_port_speed, - skip_src_dst_different_asic + skip_src_dst_different_asic, set_cir_change ): """ Test QoS SAI DWRR @@ -1560,6 +1595,9 @@ def testQosSaiDwrr( else: testParams["ecn"] = qosConfig["lossy_queue_1"]["ecn"] + if "pkts_num_egr_mem" in list(qosConfig[portSpeedCableLength].keys()): + testParams["pkts_num_egr_mem"] = qosConfig[portSpeedCableLength]["pkts_num_egr_mem"] + # To overcome this case: # When the previous test case just sends a large of packets only by one queue such as queue1, # then Dwrr test might fail, because queue1 has got much chance to send packets before, @@ -1579,7 +1617,7 @@ def testQosSaiDwrr( @pytest.mark.parametrize("pgProfile", ["wm_pg_shared_lossless", "wm_pg_shared_lossy"]) def testQosSaiPgSharedWatermark( self, pgProfile, ptfhost, get_src_dst_asic_and_duts, dutTestParams, dutConfig, dutQosConfig, - resetWatermark, _skip_watermark_multi_DUT, skip_src_dst_different_asic + resetWatermark, skip_src_dst_different_asic, change_lag_lacp_timer ): """ Test QoS SAI PG shared watermark test for lossless/lossy traffic @@ -1623,6 +1661,12 @@ def testQosSaiPgSharedWatermark( pytest.skip( "PGSharedWatermark: Lossy test is not applicable in " "cisco-8000 Q100 platform.") + if not get_src_dst_asic_and_duts['single_asic_test'] and \ + dutTestParams["basicParams"].get("platform_asic", None) \ + == "cisco-8000": + pytest.skip( + "PGSharedWatermark: Lossy test is not applicable in " + "cisco-8000 multi_asic scenarios.") pktsNumFillShared = int( qosConfig[pgProfile]["pkts_num_trig_egr_drp"]) - 1 @@ -1671,7 +1715,7 @@ def testQosSaiPgSharedWatermark( def testQosSaiPgHeadroomWatermark( self, ptfhost, get_src_dst_asic_and_duts, dutTestParams, dutConfig, dutQosConfig, resetWatermark, - ): + change_lag_lacp_timer): """ Test QoS SAI PG headroom watermark test @@ -1781,7 +1825,7 @@ def testQosSaiPGDrop( @pytest.mark.parametrize("queueProfile", ["wm_q_shared_lossless", "wm_q_shared_lossy"]) def testQosSaiQSharedWatermark( self, get_src_dst_asic_and_duts, queueProfile, ptfhost, dutTestParams, dutConfig, dutQosConfig, - resetWatermark, _skip_watermark_multi_DUT, skip_pacific_dst_asic + resetWatermark, skip_src_dst_different_asic, skip_pacific_dst_asic, change_lag_lacp_timer ): """ Test QoS SAI Queue shared watermark test for lossless/lossy traffic @@ -1804,18 +1848,18 @@ def testQosSaiQSharedWatermark( portSpeedCableLength = dutQosConfig["portSpeedCableLength"] if queueProfile == "wm_q_shared_lossless": + if dutTestParams["basicParams"]["sonic_asic_type"] == 'cisco-8000': + dstPortSpeedCableLength = get_portspeed_cablelen( + get_src_dst_asic_and_duts['dst_asic']) + if dstPortSpeedCableLength != portSpeedCableLength: + pytest.skip("Skip queue watermark lossless test since port speed " + "cable length is different between src and dst asic") if dutTestParams['hwsku'] in self.BREAKOUT_SKUS and 'backend' not in dutTestParams['topo']: qosConfig = dutQosConfig["param"][portSpeedCableLength]["breakout"] else: qosConfig = dutQosConfig["param"][portSpeedCableLength] triggerDrop = qosConfig[queueProfile]["pkts_num_trig_ingr_drp"] else: - if not get_src_dst_asic_and_duts['single_asic_test'] and \ - dutTestParams["basicParams"].get("platform_asic", None) \ - == "cisco-8000": - pytest.skip( - "Lossy test is not applicable in multiple ASIC case" - " in cisco-8000 platform.") if queueProfile in list(dutQosConfig["param"][portSpeedCableLength].keys()): qosConfig = dutQosConfig["param"][portSpeedCableLength] else: @@ -1989,6 +2033,7 @@ def testIPIPQosSaiDscpToPgMapping( @pytest.mark.parametrize("direction", ["downstream", "upstream"]) def testQosSaiSeparatedDscpToPgMapping(self, duthost, request, ptfhost, dutTestParams, dutConfig, direction, dut_qos_maps): # noqa F811 + # NOTE: cisco 8800 will skip this test for both upstream and downstream """ Test QoS SAI DSCP to PG mapping ptf test. Since we are using different DSCP_TO_TC_MAP on uplink/downlink port, the test case also need to @@ -2048,7 +2093,7 @@ def testQosSaiSeparatedDscpToPgMapping(self, duthost, request, ptfhost, def testQosSaiDwrrWeightChange( self, get_src_dst_asic_and_duts, ptfhost, dutTestParams, dutConfig, dutQosConfig, - updateSchedProfile, skip_src_dst_different_asic + updateSchedProfile, skip_src_dst_different_asic, set_cir_change ): """ Test QoS SAI DWRR runtime weight change @@ -2098,6 +2143,9 @@ def testQosSaiDwrrWeightChange( else: testParams["platform_asic"] = None + if "pkts_num_egr_mem" in list(qosConfig[portSpeedCableLength].keys()): + testParams["pkts_num_egr_mem"] = qosConfig[portSpeedCableLength]["pkts_num_egr_mem"] + self.runPtfTest( ptfhost, testCase="sai_qos_tests.WRRtest", testParams=testParams ) @@ -2178,7 +2226,9 @@ def testQosSaiQWatermarkAllPorts( "src_port_id": src_port_id, "src_port_ip": src_port_ip, "src_port_vlan": dutConfig["testPorts"]["src_port_vlan"], - "pkts_num_leak_out": qosConfig[queueProfile]["pkts_num_leak_out"], + "pkts_num_leak_out": qosConfig[queueProfile]["pkts_num_leak_out"] + if ("pkts_num_leak_out" in qosConfig[queueProfile]) else + qosConfig["pkts_num_leak_out"], "pkt_count": qosConfig[queueProfile]["pkt_count"], "cell_size": qosConfig[queueProfile]["cell_size"], "hwsku": dutTestParams['hwsku'], @@ -2205,6 +2255,7 @@ def testQosSaiLossyQueueVoqMultiSrc( self, ptfhost, dutTestParams, dutConfig, dutQosConfig, get_src_dst_asic_and_duts, skip_longlink ): + # NOTE: testQosSaiLossyQueueVoqMultiSrc[lossy_queue_voq_3] will be skipped for t2 cisco since it's multi-asic """ Test QoS SAI Lossy queue with multiple source ports, applicable for fair-voq and split-voq Args: @@ -2280,6 +2331,7 @@ def testQosSaiFullMeshTrafficSanity( get_src_dst_asic_and_duts, dut_qos_maps, # noqa F811 set_static_route_ptf64 ): + # NOTE: this test will skip for t2 cisco 8800 since it requires ptf64 topo """ Test QoS SAI traffic sanity Args: diff --git a/tests/qos/tunnel_qos_remap_base.py b/tests/qos/tunnel_qos_remap_base.py index cf982637ccf..33d543d1a9d 100644 --- a/tests/qos/tunnel_qos_remap_base.py +++ b/tests/qos/tunnel_qos_remap_base.py @@ -1,6 +1,5 @@ import copy -import ipaddress import pytest import logging import json @@ -15,6 +14,7 @@ from tests.common.dualtor.mux_simulator_control import mux_server_url, toggle_all_simulator_ports # noqa F401 from tests.common.fixtures.duthost_utils import dut_qos_maps_module # noqa F401 from tests.common.fixtures.ptfhost_utils import ptf_portmap_file_module # noqa F401 +from tests.common.utilities import get_iface_ip logger = logging.getLogger(__name__) @@ -196,13 +196,6 @@ def tunnel_qos_maps(rand_selected_dut, dut_qos_maps_module): # noqa F811 return ret -def get_iface_ip(mg_facts, ifacename): - for loopback in mg_facts['minigraph_lo_interfaces']: - if loopback['name'] == ifacename and ipaddress.ip_address(loopback['addr']).version == 4: - return loopback['addr'] - return None - - @pytest.fixture(scope='module') def dut_config(rand_selected_dut, rand_unselected_dut, tbinfo, ptf_portmap_file_module): # noqa F811 ''' diff --git a/tests/restapi/test_restapi_vxlan_ecmp.py b/tests/restapi/test_restapi_vxlan_ecmp.py index 249d03608bd..b98f3f5bce2 100644 --- a/tests/restapi/test_restapi_vxlan_ecmp.py +++ b/tests/restapi/test_restapi_vxlan_ecmp.py @@ -9,7 +9,7 @@ logger = logging.getLogger(__name__) pytestmark = [ - pytest.mark.topology('t1'), + pytest.mark.topology('t0', 't1'), pytest.mark.disable_loganalyzer ] @@ -70,7 +70,7 @@ def test_vxlan_ecmp_multirequest(construct_url, vlan_members): expected = [{"nexthop": "100.78.60.37,100.78.61.37", "ip_prefix": "10.1.0.1/32"}, {"nexthop": "100.78.60.41,100.78.61.41", "ip_prefix": "10.1.0.5/32"}] for route in expected: - pytest_assert(route in r.json()) + pytest_assert(route in r.json(), "i={}, {} not in r.json".format(i, route)) logger.info("Routes with vnid: 703 to VNET vnet-default have been added successfully") # Add 3 more routes @@ -93,7 +93,7 @@ def test_vxlan_ecmp_multirequest(construct_url, vlan_members): {"nexthop": "100.78.60.40,100.78.61.40", "ip_prefix": "10.1.0.4/32"}, {"nexthop": "100.78.60.41,100.78.61.41", "ip_prefix": "10.1.0.5/32"}] for route in expected: - pytest_assert(route in r.json()) + pytest_assert(route in r.json(), "j={}, {} not in r.json".format(j, route)) logger.info("Routes with vnid: 703 to VNET vnet-default have been added successfully") # Delete the 3 added routes @@ -113,7 +113,7 @@ def test_vxlan_ecmp_multirequest(construct_url, vlan_members): {"nexthop": "100.78.60.41,100.78.61.41", "ip_prefix": "10.1.0.5/32"}] for route in expected: - pytest_assert(route in r.json()) + pytest_assert(route in r.json(), "{} not in r.json".format(route)) logger.info("Routes with vnid: 703 to VNET vnet-default have been added successfully") # Delete routes diff --git a/tests/route/test_route_bgp_ecmp.py b/tests/route/test_route_bgp_ecmp.py index 4b18b61aefe..aaa23a26a98 100644 --- a/tests/route/test_route_bgp_ecmp.py +++ b/tests/route/test_route_bgp_ecmp.py @@ -34,7 +34,7 @@ def change_route(operation, ptfip, route, nexthop, port, aspath): url = "http://%s:%d" % (ptfip, port) data = { "command": "%s route %s next-hop %s as-path [ %s ]" % (operation, route, nexthop, aspath)} - r = requests.post(url, data=data, timeout=30) + r = requests.post(url, data=data, timeout=30, proxies={"http": None, "https": None}) if r.status_code != 200: raise Exception( "Change routes failed: url={}, data={}, r.status_code={}, r.reason={}, r.headers={}, r.text={}".format( diff --git a/tests/route/test_route_consistency.py b/tests/route/test_route_consistency.py index f106951688d..3b7148b33a8 100644 --- a/tests/route/test_route_consistency.py +++ b/tests/route/test_route_consistency.py @@ -79,7 +79,7 @@ def retrieve_route_snapshot(asic, prefix_snapshot, dut_instance_name, signal_que for idx, dut in enumerate(duthosts.frontend_nodes): for asic in dut.asics: dut_instance_name = dut.hostname + '-' + str(asic.asic_index) - if dut.facts['switch_type'] == "voq" and idx == 0: + if dut.facts['switch_type'] in ["voq", "chassis-packet"] and idx == 0: dut_instance_name = dut_instance_name + "UpstreamLc" threading.Thread(target=retrieve_route_snapshot, args=(asic, prefix_snapshot, dut_instance_name, signal_queue)).start() diff --git a/tests/route/test_route_flap.py b/tests/route/test_route_flap.py index 14b61b9f57f..9d58affb11e 100644 --- a/tests/route/test_route_flap.py +++ b/tests/route/test_route_flap.py @@ -77,7 +77,7 @@ def change_route(operation, ptfip, route, nexthop, port, aspath): url = "http://%s:%d" % (ptfip, port) data = { "command": "%s route %s next-hop %s as-path [ %s ]" % (operation, route, nexthop, aspath)} - r = requests.post(url, data=data) + r = requests.post(url, data=data, proxies={"http": None, "https": None}) assert r.status_code == 200 @@ -257,8 +257,19 @@ def send_recv_ping_packet(ptfadapter, ptf_send_port, ptf_recv_ports, dst_mac, ex logger.info('send ping request packet send port {}, recv port {}, dmac: {}, dip: {}'.format( ptf_send_port, ptf_recv_ports, dst_mac, dst_ip)) testutils.send(ptfadapter, ptf_send_port, pkt) - testutils.verify_packet_any_port( - ptfadapter, masked_exp_pkt, ptf_recv_ports, timeout=WAIT_EXPECTED_PACKET_TIMEOUT) + try: + testutils.verify_packet_any_port( + ptfadapter, masked_exp_pkt, ptf_recv_ports, timeout=WAIT_EXPECTED_PACKET_TIMEOUT) + except AssertionError: + logging.error("Traffic wasn't sent successfully, trying again") + for _ in range(5): + logger.info('re-send ping request packet send port {}, recv port {}, dmac: {}, dip: {}'. + format(ptf_send_port, ptf_recv_ports, dst_mac, dst_ip)) + testutils.send(ptfadapter, ptf_send_port, pkt) + time.sleep(0.1) + + testutils.verify_packet_any_port( + ptfadapter, masked_exp_pkt, ptf_recv_ports, timeout=WAIT_EXPECTED_PACKET_TIMEOUT) def filter_routes(iproute_info, route_prefix_len): @@ -401,6 +412,10 @@ def test_route_flap(duthosts, tbinfo, ptfhost, ptfadapter, # On dual-tor, vlan mac is different with dut_mac. U0/L0 use same vlan mac for AR response # On single tor, vlan mac (if exists) is same as dut_mac dut_mac = duthost.facts['router_mac'] + # Each Asic has different MAC in multi-asic system. Traffic should be sent with asichost DMAC + # in multi-asic scenarios + if duthost.is_multi_asic: + dut_mac = asichost.get_router_mac().lower() vlan_mac = "" if is_dualtor(tbinfo): # Just let it crash if missing vlan configs on dual-tor @@ -440,7 +455,7 @@ def test_route_flap(duthosts, tbinfo, ptfhost, ptfadapter, logger.info("route_nums = %d" % route_nums) # choose one ptf port to send msg - ptf_send_port = get_ptf_send_ports(duthost, tbinfo, dev_port) + ptf_send_port = get_ptf_send_ports(asichost, tbinfo, dev_port) # Get the list of ptf ports to receive msg, even for multi-dut scenario neighbor_type = get_neighbor_info(duthost, dev_port, tbinfo) diff --git a/tests/route/test_route_flow_counter.py b/tests/route/test_route_flow_counter.py index 0fbfd189828..1061d252fc3 100644 --- a/tests/route/test_route_flow_counter.py +++ b/tests/route/test_route_flow_counter.py @@ -10,8 +10,7 @@ allure.logger = logger pytestmark = [ - pytest.mark.topology("any"), - pytest.mark.device_type('physical') + pytest.mark.topology("any") ] test_update_route_pattern_para = [ diff --git a/tests/route/test_route_perf.py b/tests/route/test_route_perf.py index 3488792e9d8..82460215a8c 100644 --- a/tests/route/test_route_perf.py +++ b/tests/route/test_route_perf.py @@ -3,6 +3,7 @@ import time import re import random +import json import ptf.testutils as testutils import ptf.mask as mask import ptf.packet as packet @@ -60,12 +61,16 @@ def check_config(duthosts, enum_rand_one_per_hwsku_frontend_hostname, enum_rand_ return duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + if (duthost.facts.get('platform_asic') == 'broadcom-dnx'): + # CS00012377343 - l3_alpm_enable isn't supported on dnx + return + asic = duthost.facts["asic_type"] asic_id = enum_rand_one_frontend_asic_index if (asic == "broadcom"): broadcom_cmd = "bcmcmd -n " + str(asic_id) if duthost.is_multi_asic else "bcmcmd" - alpm_cmd = "{} {}".format(broadcom_cmd, "conf show l3_alpm_enable") + alpm_cmd = "{} {}".format(broadcom_cmd, '"conf show l3_alpm_enable"') alpm_enable = duthost.command(alpm_cmd)["stdout_lines"][2].strip() logger.info("Checking config: {}".format(alpm_enable)) pytest_assert(alpm_enable == "l3_alpm_enable=2", "l3_alpm_enable is not set for route scaling") @@ -243,6 +248,8 @@ def test_perf_add_remove_routes( asichost, NUM_NEIGHS, ip_versions, mg_facts, is_backend_topology ) + crm_facts = duthost.get_crm_facts() + logger.info(json.dumps(crm_facts, indent=4)) route_tag = "ipv{}_route".format(ip_versions) used_routes_count = asichost.count_crm_resources( "main_resources", route_tag, "used" @@ -335,11 +342,12 @@ def test_perf_add_remove_routes( if ip_versions == 4: ip_dst = generate_ips(1, dst_nw, []) send_and_verify_traffic( - duthost, ptfadapter, tbinfo, ip_dst, ptf_dst_ports, ptf_src_port + asichost, duthost, ptfadapter, tbinfo, ip_dst, ptf_dst_ports, ptf_src_port ) else: ip_dst = dst_nw.split("/")[0] + "1" send_and_verify_traffic( + asichost, duthost, ptfadapter, tbinfo, @@ -366,11 +374,11 @@ def test_perf_add_remove_routes( def send_and_verify_traffic( - duthost, ptfadapter, tbinfo, ip_dst, expected_ports, ptf_src_port, ipv6=False + asichost, duthost, ptfadapter, tbinfo, ip_dst, expected_ports, ptf_src_port, ipv6=False ): if ipv6: pkt = testutils.simple_tcpv6_packet( - eth_dst=duthost.facts["router_mac"], + eth_dst=asichost.get_router_mac().lower(), eth_src=ptfadapter.dataplane.get_mac(0, ptf_src_port), ipv6_src="2001:db8:85a3::8a2e:370:7334", ipv6_dst=ip_dst, @@ -380,7 +388,7 @@ def send_and_verify_traffic( ) else: pkt = testutils.simple_tcp_packet( - eth_dst=duthost.facts["router_mac"], + eth_dst=asichost.get_router_mac().lower(), eth_src=ptfadapter.dataplane.get_mac(0, ptf_src_port), ip_src="1.1.1.1", ip_dst=ip_dst, diff --git a/tests/saitests/py3/sai_qos_tests.py b/tests/saitests/py3/sai_qos_tests.py index 2d649a4221e..bfd06eb47c5 100755 --- a/tests/saitests/py3/sai_qos_tests.py +++ b/tests/saitests/py3/sai_qos_tests.py @@ -941,9 +941,12 @@ def runTest(self): # queue 7 0 1 1 1 1 # noqa E501 if tc_to_dscp_count_map: - for tc in range(7): - assert (queue_results[tc] == tc_to_dscp_count_map[tc] + queue_results_base[tc]) - assert (queue_results[7] >= tc_to_dscp_count_map[7] + queue_results_base[7]) + for tc in tc_to_dscp_count_map.keys(): + if tc == 7: + # LAG ports can have LACP packets on queue 7, hence using >= comparison + assert (queue_results[tc] >= tc_to_dscp_count_map[tc] + queue_results_base[tc]) + else: + assert (queue_results[tc] == tc_to_dscp_count_map[tc] + queue_results_base[tc]) else: assert (queue_results[QUEUE_0] == 1 + queue_results_base[QUEUE_0]) assert (queue_results[QUEUE_3] == 1 + queue_results_base[QUEUE_3]) @@ -1775,7 +1778,7 @@ def runTest(self): pkts_num_leak_out = 0 # send packets short of triggering pfc - if hwsku == 'DellEMC-Z9332f-M-O16C64' or hwsku == 'DellEMC-Z9332f-O32': + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): # send packets short of triggering pfc send_packet(self, src_port_id, pkt, (pkts_num_egr_mem + pkts_num_leak_out + @@ -2573,7 +2576,7 @@ def runTest(self): if check_leackout_compensation_support(asic_type, hwsku): pkts_num_leak_out = 0 - if hwsku == 'DellEMC-Z9332f-M-O16C64' or hwsku == 'DellEMC-Z9332f-O32': + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): send_packet( self, src_port_id, pkt, (pkts_num_egr_mem + pkts_num_leak_out + pkts_num_trig_pfc - @@ -2615,7 +2618,7 @@ def runTest(self): xmit_2_counters_base, _ = sai_thrift_read_port_counters( self.dst_client, asic_type, port_list['dst'][dst_port_2_id] ) - if hwsku == 'DellEMC-Z9332f-M-O16C64' or hwsku == 'DellEMC-Z9332f-O32': + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): send_packet( self, src_port_id, pkt2, (pkts_num_egr_mem + pkts_num_leak_out + pkts_num_dismiss_pfc + @@ -2664,7 +2667,7 @@ def runTest(self): log_message('step {}: {}\n'.format(step_id, step_desc), to_stderr=True) xmit_3_counters_base, _ = sai_thrift_read_port_counters( self.dst_client, asic_type, port_list['dst'][dst_port_3_id]) - if hwsku == 'DellEMC-Z9332f-M-O16C64' or hwsku == 'DellEMC-Z9332f-O32': + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): send_packet(self, src_port_id, pkt3, pkts_num_egr_mem + pkts_num_leak_out + 1) elif 'cisco-8000' in asic_type: @@ -2710,7 +2713,8 @@ def runTest(self): # & may give inconsistent test results # Adding COUNTER_MARGIN to provide room to 2 pkt incase, extra traffic received for cntr in ingress_counters: - if platform_asic and platform_asic == "broadcom-dnx": + if (platform_asic and + platform_asic in ["broadcom-dnx", "cisco-8000"]): qos_test_assert( self, recv_counters[cntr] <= recv_counters_base[cntr] + COUNTER_MARGIN, 'unexpectedly ingress drop on recv port (counter: {}), at step {} {}'.format( @@ -3042,7 +3046,7 @@ def runTest(self): ip_ttl=64) hwsku = self.test_params['hwsku'] - if (hwsku == 'DellEMC-Z9332f-M-O16C64' or hwsku == 'DellEMC-Z9332f-O32'): + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): send_packet( self, self.src_port_ids[sidx], pkt, pkts_num_egr_mem + self.pkts_num_leak_out) else: @@ -3157,6 +3161,9 @@ def runTest(self): sys.stderr.flush() upper_bound = 2 * margin + 1 + if (hwsku == 'Arista-7260CX3-D108C8' and self.testbed_type in ('t0-116', 'dualtor-120')) \ + or (hwsku == 'Arista-7260CX3-C64' and self.testbed_type in ('dualtor-aa-56', 't1-64-lag')): + upper_bound = 2 * margin + self.pgs_num if self.wm_multiplier: hdrm_pool_wm = sai_thrift_read_headroom_pool_watermark( self.src_client, self.buf_pool_roid) @@ -3222,7 +3229,7 @@ def runTest(self): print("pkts sent: %d, lower bound: %d, actual headroom pool watermark: %d, upper_bound: %d" % ( wm_pkt_num, expected_wm, hdrm_pool_wm, upper_bound_wm), file=sys.stderr) - if 'innovium' not in self.asic_type: + if 'marvell-teralynx' not in self.asic_type: assert (expected_wm <= hdrm_pool_wm) assert (hdrm_pool_wm <= upper_bound_wm) if self.platform_asic and self.platform_asic == "broadcom-dnx": @@ -3287,7 +3294,7 @@ def runTest(self): self.src_client, self.buf_pool_roid) sys.stderr.write('After PG headroom filled, actual headroom pool watermark {}, upper_bound {}\n'.format( hdrm_pool_wm, upper_bound_wm)) - if 'innovium' not in self.asic_type: + if 'marvell-teralynx' not in self.asic_type: assert (expected_wm <= hdrm_pool_wm) assert (hdrm_pool_wm <= upper_bound_wm) # at this point headroom pool should be full. send few more packets to continue causing drops @@ -3474,22 +3481,23 @@ def get_pfc_tx_cnt(src_port_id, pg_cntr_idx): # Verify no ingress/egress drops for all ports pg_drop_counters = {port_id: sai_thrift_read_pg_drop_counters( self.src_client, port_list['src'][port_id]) for port_id in uniq_srcs} - for src_port_id in uniq_srcs: - for pg in range(len(pg_drop_counters[src_port_id])): - drops = pg_drop_counters[src_port_id][pg] - pg_drop_counters_bases[src_port_id][pg] + for uniq_src_port_id in uniq_srcs: + for pg in range(len(pg_drop_counters[uniq_src_port_id])): + drops = pg_drop_counters[uniq_src_port_id][pg] - pg_drop_counters_bases[uniq_src_port_id][pg] if pg in [3, 4]: - assert drops == 0, "Detected %d lossless drops on PG %d src port %d" % (drops, pg, src_port_id) + assert drops == 0, \ + "Detected %d lossless drops on PG %d src port %d" % (drops, pg, uniq_src_port_id) elif drops > 0: # When memory is full, any new lossy background traffic is dropped. print("Observed lossy drops %d on PG %d src port %d, expected." % - (drops, pg, src_port_id), file=sys.stderr) + (drops, pg, uniq_src_port_id), file=sys.stderr) xmit_counters_list = {port_id: sai_thrift_read_port_counters( self.dst_client, self.asic_type, port_list['dst'][port_id])[0] for port_id in uniq_dsts} - for dst_port_id in uniq_dsts: + for uniq_dst_port_id in uniq_dsts: for cntr in self.egress_counters: - drops = xmit_counters_list[dst_port_id][cntr] - \ - xmit_counters_bases[dst_port_id][cntr] - assert drops == 0, "Detected %d egress drops on dst port id %d" % (drops, dst_port_id) + drops = xmit_counters_list[uniq_dst_port_id][cntr] - \ + xmit_counters_bases[uniq_dst_port_id][cntr] + assert drops == 0, "Detected %d egress drops on dst port id %d" % (drops, uniq_dst_port_id) first_port_id = self.dst_port_ids[0] last_port_id = self.dst_port_ids[-1] @@ -3698,6 +3706,9 @@ def runTest(self): queue_7_num_of_pkts = int(self.test_params.get('q7_num_of_pkts', 0)) limit = int(self.test_params['limit']) pkts_num_leak_out = int(self.test_params['pkts_num_leak_out']) + pkts_num_egr_mem = int(self.test_params.get('pkts_num_egr_mem', 0)) + lossless_weight = int(self.test_params.get('lossless_weight', 1)) + lossy_weight = int(self.test_params.get('lossy_weight', 1)) topo = self.test_params['topo'] platform_asic = self.test_params['platform_asic'] prio_list = self.test_params.get('dscp_list', []) @@ -3773,6 +3784,31 @@ def runTest(self): send_packet(self, src_port_id, pkt, pkts_num_leak_out) + if 'hwsku' in self.test_params and self.test_params['hwsku'] in ('Arista-7060X6-64PE-256x200G'): + + prio_lossless = (3, 4) + prio_lossy = tuple(set(prio_list) - set(prio_lossless)) + pkts_egr_lossless = int(pkts_num_egr_mem * (lossless_weight / (lossless_weight + lossy_weight))) + pkts_egr_lossy = int(pkts_num_egr_mem - pkts_egr_lossless) + pkts_egr_lossless, mod_lossless = divmod(pkts_egr_lossless, len(prio_lossless)) + pkts_egr_lossy, mod_lossy = divmod(pkts_egr_lossy, len(prio_lossy)) + pkts_egr = {prio: pkts_egr_lossless if prio in prio_lossless else pkts_egr_lossy for prio in prio_list} + for prio in prio_lossless[:mod_lossless] + prio_lossy[:mod_lossy]: + pkts_egr[prio] += 1 + + for prio in prio_list: + pkt = construct_ip_pkt(64, + pkt_dst_mac, + src_port_mac, + src_port_ip, + dst_port_ip, + prio, + src_port_vlan, + ip_id=exp_ip_id + 1, + ecn=ecn, + ttl=64) + send_packet(self, src_port_id, pkt, pkts_egr[prio]) + # Get a snapshot of counter values port_counters_base, queue_counters_base = sai_thrift_read_port_counters( self.dst_client, asic_type, port_list['dst'][dst_port_id]) @@ -3810,8 +3846,25 @@ def runTest(self): break recv_pkt = scapy.Ether(received.packet) - # Release port - self.sai_thrift_port_tx_enable(self.dst_client, asic_type, [dst_port_id], enable_port_by_unblock_queue=False) + if asic_type == 'cisco-8000': + cmd_opt = "" + if 'dst_asic_index' in self.test_params: + cmd_opt = "-n asic{}".format(self.test_params['dst_asic_index']) + cmd = "sudo show platform npu script {} -s set_scheduler.py".format(cmd_opt) + out, err, ret = self.exec_cmd_on_dut( + self.dst_server_ip, + self.test_params['dut_username'], + self.test_params['dut_password'], + cmd) + if err != "" and out == "": + raise RuntimeError("cmd({}) might have failed in the DUT. Error:{}".format(cmd, err)) + else: + # Release port + self.sai_thrift_port_tx_enable( + self.dst_client, + asic_type, + [dst_port_id], + enable_port_by_unblock_queue=False) cnt = 0 pkts = [] @@ -3836,6 +3889,14 @@ def runTest(self): # Ignore captured non-IP packet continue + if asic_type == 'cisco-8000': + # Release port + self.sai_thrift_port_tx_enable( + self.dst_client, + asic_type, + [dst_port_id], + enable_port_by_unblock_queue=False) + queue_pkt_counters = [0] * (max(prio_list) + 1) queue_num_of_pkts = [0] * (max(prio_list) + 1) for prio, q_cnt in zip(prio_list, q_pkt_cnt): @@ -3999,7 +4060,7 @@ def runTest(self): pkts_num_leak_out = 0 # send packets short of triggering egress drop - if hwsku == 'DellEMC-Z9332f-O32' or hwsku == 'DellEMC-Z9332f-M-O16C64': + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): # send packets short of triggering egress drop send_packet(self, src_port_id, pkt, pkts_num_egr_mem + pkts_num_leak_out + pkts_num_trig_egr_drp - 1 - margin) @@ -4464,6 +4525,9 @@ def runTest(self): pg_min_pkts_num = pkts_num_egr_mem + \ pkts_num_leak_out + pkts_num_fill_min + margin send_packet(self, src_port_id, pkt, pg_min_pkts_num) + elif hwsku == 'Arista-7060X6-64PE-256x200G': + pg_min_pkts_num = pkts_num_egr_mem + pkts_num_fill_min + send_packet(self, src_port_id, pkt, pg_min_pkts_num) elif 'cisco-8000' in asic_type: fill_leakout_plus_one( self, src_port_id, dst_port_id, pkt, pg, asic_type, pkts_num_egr_mem) @@ -4499,6 +4563,8 @@ def runTest(self): if platform_asic and platform_asic == "broadcom-dnx": assert (pg_shared_wm_res[pg] <= ((pkts_num_leak_out + pkts_num_fill_min) * (packet_length + internal_hdr_size))) + elif hwsku == 'Arista-7060X6-64PE-256x200G': + assert (pg_shared_wm_res[pg] <= margin * cell_size) else: assert (pg_shared_wm_res[pg] == 0) else: @@ -4700,7 +4766,7 @@ def runTest(self): pkts_num_leak_out = 0 # send packets to trigger pfc but not trek into headroom - if hwsku == 'DellEMC-Z9332f-O32' or hwsku == 'DellEMC-Z9332f-M-O16C64': + if hwsku in ('DellEMC-Z9332f-M-O16C64', 'DellEMC-Z9332f-O32', 'Arista-7060X6-64PE-256x200G'): send_packet(self, src_port_id, pkt, (pkts_num_egr_mem + pkts_num_leak_out + pkts_num_trig_pfc) // cell_occupancy - margin) elif 'cisco-8000' in asic_type: @@ -5084,7 +5150,7 @@ def runTest(self): # so if queue min is zero, it will directly trek into shared pool by 1 # TH2 uses scheduler-based TX enable, this does not require sending packets # to leak out - if hwsku == 'DellEMC-Z9332f-O32' or hwsku == 'DellEMC-Z9332f-M-O16C64': + if hwsku in ('DellEMC-Z9332f-O32', 'DellEMC-Z9332f-M-O16C64', 'Arista-7060X6-64PE-256x200G'): que_min_pkts_num = pkts_num_egr_mem + pkts_num_leak_out + pkts_num_fill_min send_packet(self, src_port_id, pkt, que_min_pkts_num) else: @@ -5116,7 +5182,9 @@ def runTest(self): None, pg_cntrs, None, None, None, None, None, pg_shared_wm_res, pg_headroom_wm_res, q_wm_res) - if pkts_num_fill_min: + if hwsku == 'Arista-7060X6-64PE-256x200G': + assert (q_wm_res[queue] <= (margin + 1) * cell_size) + elif pkts_num_fill_min: assert (q_wm_res[queue] == 0) elif 'cisco-8000' in asic_type or "SN5600" in hwsku or "SN5400" in hwsku: assert (q_wm_res[queue] <= (margin + 1) * cell_size) diff --git a/tests/show_techsupport/tech_support_cmds.py b/tests/show_techsupport/tech_support_cmds.py index e93a41a2d05..187cde520cb 100644 --- a/tests/show_techsupport/tech_support_cmds.py +++ b/tests/show_techsupport/tech_support_cmds.py @@ -1,5 +1,3 @@ -import re - ignore_list = { "cp_proc_files": {}, } @@ -115,10 +113,6 @@ "vtysh{} -c 'show bgp ipv4 labeled-unicast'", "vtysh{} -c 'show bgp ipv6 labeled-unicast'", "vtysh{} -c 'show bgp mac hash'", - re.compile(r'vtysh{}\s+-c "show ip bgp neighbors .* advertised-routes"'), - re.compile(r'vtysh{}\s+-c "show ip bgp neighbors .* routes"'), - re.compile(r'vtysh{}\s+-c "show bgp ipv6 neighbors .* advertised-routes"'), - re.compile(r'vtysh{}\s+-c "show bgp ipv6 neighbors .* routes"'), ] evpn_cmds = [ diff --git a/tests/show_techsupport/test_auto_techsupport.py b/tests/show_techsupport/test_auto_techsupport.py index db448726536..87af57b838a 100644 --- a/tests/show_techsupport/test_auto_techsupport.py +++ b/tests/show_techsupport/test_auto_techsupport.py @@ -410,6 +410,12 @@ def test_max_limit(self, test_mode, global_rate_limit_zero, feature_rate_limit_z with allure.step('Get used space in mount point: {}'.format(validation_folder)): total, used, avail, used_percent = get_partition_usage_info(self.duthost, validation_folder) + with allure.step('Get /tmp Filesystem Type'): + tmp_fstype = is_tmp_on_tmpfs(self.duthost) + + if test_mode == 'core' and tmp_fstype == 'tmpfs': + pytest.skip('Test skipped due to known sonic-buildimage issues #20950 and #15101') + if used_percent > 50: pytest.skip('System uses more than 50% of space. ' 'Test required at least 50% of free space in {}'.format(validation_folder)) @@ -1091,6 +1097,11 @@ def trigger_auto_techsupport(duthost, docker): return core_file_name +def is_tmp_on_tmpfs(duthost): + out = duthost.command("df -h /tmp --output='fstype'")['stdout_lines'] + return out[1].strip() if len(out) == 2 else None + + def get_partition_usage_info(duthost, partition='/'): """ Get info about partition diff --git a/tests/smartswitch/common/device_utils_dpu.py b/tests/smartswitch/common/device_utils_dpu.py index 9b80882dd66..b75335428e0 100644 --- a/tests/smartswitch/common/device_utils_dpu.py +++ b/tests/smartswitch/common/device_utils_dpu.py @@ -4,14 +4,14 @@ import logging import pytest from tests.common.devices.sonic import * # noqa: F401,F403 -from tests.platform_tests.api.conftest import * # noqa: F401,F403 +from tests.common.platform.device_utils import platform_api_conn # noqa: F401,F403 from tests.common.helpers.platform_api import chassis, module from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_assert @pytest.fixture(scope='function') -def num_dpu_modules(platform_api_conn): +def num_dpu_modules(platform_api_conn): # noqa F811 """ Returns the number of DPU modules """ @@ -23,9 +23,8 @@ def num_dpu_modules(platform_api_conn): @pytest.fixture(scope='function', autouse=True) -def check_smartswitch_and_dark_mode(duthosts, - enum_rand_one_per_hwsku_hostname, - platform_api_conn, num_dpu_modules): +def check_smartswitch_and_dark_mode(duthosts, enum_rand_one_per_hwsku_hostname, + platform_api_conn, num_dpu_modules): # noqa F811 """ Checks whether given testbed is running 202405 image or below versions @@ -40,14 +39,13 @@ def check_smartswitch_and_dark_mode(duthosts, if "DPUS" not in duthost.facts: pytest.skip("Test is not supported for this testbed") - darkmode = is_dark_mode_enabled(duthost, platform_api_conn, - num_dpu_modules) + darkmode = is_dark_mode_enabled(duthost, platform_api_conn, num_dpu_modules) # noqa F811 if darkmode: dpu_power_on(duthost, platform_api_conn, num_dpu_modules) -def is_dark_mode_enabled(duthost, platform_api_conn, num_dpu_modules): +def is_dark_mode_enabled(duthost, platform_api_conn, num_dpu_modules): # noqa F811 """ Checks the liveliness of DPU Returns: @@ -76,7 +74,7 @@ def is_dark_mode_enabled(duthost, platform_api_conn, num_dpu_modules): return False -def dpu_power_on(duthost, platform_api_conn, num_dpu_modules): +def dpu_power_on(duthost, platform_api_conn, num_dpu_modules): # noqa F811 """ Executes power on all DPUs Returns: diff --git a/tests/smartswitch/platform_tests/test_reload_dpu.py b/tests/smartswitch/platform_tests/test_reload_dpu.py index 1e8e7518f33..ac97d435b91 100644 --- a/tests/smartswitch/platform_tests/test_reload_dpu.py +++ b/tests/smartswitch/platform_tests/test_reload_dpu.py @@ -14,7 +14,7 @@ from tests.common.config_reload import config_force_option_supported, config_system_checks_passed # noqa: F401, E501 from tests.smartswitch.common.device_utils_dpu import * # noqa: F401,F403,E501 from tests.common.helpers.platform_api import chassis, module # noqa: F401 -from tests.platform_tests.api.conftest import * # noqa: F401,F403 +from tests.common.platform.device_utils import platform_api_conn # noqa: F401,F403 pytestmark = [ pytest.mark.topology('smartswitch') @@ -22,8 +22,7 @@ def test_dpu_ping_after_reboot(duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn, - num_dpu_modules): + localhost, platform_api_conn, num_dpu_modules): # noqa F811 """ @summary: Verify output of `config chassis modules startup ` """ @@ -52,8 +51,7 @@ def test_dpu_ping_after_reboot(duthosts, enum_rand_one_per_hwsku_hostname, def test_show_ping_int_after_reload(duthosts, enum_rand_one_per_hwsku_hostname, - localhost, platform_api_conn, - num_dpu_modules): + localhost, platform_api_conn, num_dpu_modules): # noqa F811 """ @summary: To Check Ping between NPU and DPU after configuration reload on NPU diff --git a/tests/smartswitch/platform_tests/test_show_platform_dpu.py b/tests/smartswitch/platform_tests/test_show_platform_dpu.py index 5049975b67d..74951e9826a 100644 --- a/tests/smartswitch/platform_tests/test_show_platform_dpu.py +++ b/tests/smartswitch/platform_tests/test_show_platform_dpu.py @@ -8,7 +8,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.smartswitch.common.device_utils_dpu import * # noqa: F403,F401,E501 from tests.common.helpers.platform_api import chassis, module # noqa: F401 -from tests.platform_tests.api.conftest import * # noqa: F401,F403 +from tests.common.platform.device_utils import platform_api_conn # noqa: F401,F403 from tests.common.devices.sonic import * # noqa: 403 pytestmark = [ @@ -16,8 +16,7 @@ ] -def test_midplane_ip(duthosts, enum_rand_one_per_hwsku_hostname, - platform_api_conn): +def test_midplane_ip(duthosts, enum_rand_one_per_hwsku_hostname, platform_api_conn): # noqa F811 """ @summary: Verify `Midplane ip address between NPU and DPU` """ @@ -39,7 +38,7 @@ def test_midplane_ip(duthosts, enum_rand_one_per_hwsku_hostname, def test_shutdown_power_up_dpu(duthosts, enum_rand_one_per_hwsku_hostname, - platform_api_conn, num_dpu_modules): + platform_api_conn, num_dpu_modules): # noqa F811 """ @summary: Verify `shut down and power up DPU` """ @@ -63,7 +62,7 @@ def test_shutdown_power_up_dpu(duthosts, enum_rand_one_per_hwsku_hostname, def test_reboot_cause(duthosts, enum_rand_one_per_hwsku_hostname, - platform_api_conn, num_dpu_modules): + platform_api_conn, num_dpu_modules): # noqa F811 """ @summary: Verify `Reboot Cause` """ @@ -88,7 +87,7 @@ def test_reboot_cause(duthosts, enum_rand_one_per_hwsku_hostname, def test_pcie_link(duthosts, enum_rand_one_per_hwsku_hostname, - platform_api_conn, num_dpu_modules): + platform_api_conn, num_dpu_modules): # noqa F811 """ @summary: Verify `PCIe link` """ diff --git a/tests/snappi_tests/files/helper.py b/tests/snappi_tests/files/helper.py index 60be345f6d3..9cf024a1cee 100644 --- a/tests/snappi_tests/files/helper.py +++ b/tests/snappi_tests/files/helper.py @@ -8,8 +8,9 @@ from tests.common.reboot import reboot from tests.common.helpers.parallel import parallel_run from tests.common.utilities import wait_until +from tests.common.platform.interface_utils import check_interface_status_of_up_ports from tests.common.snappi_tests.snappi_fixtures import get_snappi_ports_for_rdma, \ - snappi_dut_base_config + snappi_dut_base_config, is_snappi_multidut logger = logging.getLogger(__name__) @@ -101,12 +102,15 @@ def setup_ports_and_dut( "testbed {}, subtype {} in variables.py".format( MULTIDUT_TESTBED, testbed_subtype)) logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - snappi_ports = get_snappi_ports_for_rdma( - get_snappi_ports, - rdma_ports, - tx_port_count, - rx_port_count, - MULTIDUT_TESTBED) + if is_snappi_multidut(duthosts): + snappi_ports = get_snappi_ports_for_rdma( + get_snappi_ports, + rdma_ports, + tx_port_count, + rx_port_count, + MULTIDUT_TESTBED) + else: + snappi_ports = get_snappi_ports testbed_config, port_config_list, snappi_ports = snappi_dut_base_config( duthosts, snappi_ports, snappi_api, setup=True) @@ -125,17 +129,19 @@ def reboot_duts(setup_ports_and_dut, localhost, request): skip_warm_reboot(snappi_ports[1]['duthost'], reboot_type) def save_config_and_reboot(node, results=None): + up_bgp_neighbors = node.get_bgp_neighbors_per_asic("established") logger.info("Issuing a {} reboot on the dut {}".format(reboot_type, node.hostname)) node.shell("mkdir /etc/sonic/orig_configs; mv /etc/sonic/config_db* /etc/sonic/orig_configs/") node.shell("sudo config save -y") reboot(node, localhost, reboot_type=reboot_type, safe_reboot=True) logger.info("Wait until the system is stable") wait_until(180, 20, 0, node.critical_services_fully_started) + wait_until(180, 20, 0, check_interface_status_of_up_ports, node) + wait_until(300, 10, 0, node.check_bgp_session_state_all_asics, up_bgp_neighbors, "established") # Convert the list of duthosts into a list of tuples as required for parallel func. args = set((snappi_ports[0]['duthost'], snappi_ports[1]['duthost'])) parallel_run(save_config_and_reboot, {}, {}, list(args), timeout=900) - yield def revert_config_and_reload(node, results=None): @@ -145,3 +151,38 @@ def revert_config_and_reload(node, results=None): # parallel_run(revert_config_and_reload, {}, {}, list(args), timeout=900) for duthost in args: revert_config_and_reload(node=duthost) + + +@pytest.fixture(autouse=True) +def enable_debug_shell(setup_ports_and_dut): # noqa: F811 + _, _, snappi_ports = setup_ports_and_dut + rx_duthost = snappi_ports[0]['duthost'] + + if is_cisco_device(rx_duthost): + dutport = snappi_ports[0]['peer_port'] + asic_namespace_string = "" + syncd_string = "syncd" + if rx_duthost.is_multi_asic: + asic = rx_duthost.get_port_asic_instance(dutport) + asic_namespace_string = " -n " + asic.namespace + asic_id = rx_duthost.get_asic_id_from_namespace(asic.namespace) + syncd_string += str(asic_id) + + dshell_status = "".join(rx_duthost.shell("docker exec {} supervisorctl status dshell_client | \ + grep \"dshell_client.*RUNNING\"".format(syncd_string), + module_ignore_errors=True)["stdout_lines"]) + if 'RUNNING' not in dshell_status: + debug_shell_enable = rx_duthost.command("docker exec {} supervisorctl start dshell_client". + format(syncd_string)) + logging.info(debug_shell_enable) + + def is_debug_shell_enabled(): + output = "".join(rx_duthost.shell("sudo show platform npu voq voq_globals -i {}{}".format( + dutport, asic_namespace_string))["stdout_lines"]) + if "cisco sdk-debug enable" in output: + return False + return True + + wait_until(360, 5, 0, is_debug_shell_enabled) + yield + pass diff --git a/tests/snappi_tests/multidut/bgp/files/bgp_outbound_helper.py b/tests/snappi_tests/multidut/bgp/files/bgp_outbound_helper.py index b77345db203..42a945fe956 100755 --- a/tests/snappi_tests/multidut/bgp/files/bgp_outbound_helper.py +++ b/tests/snappi_tests/multidut/bgp/files/bgp_outbound_helper.py @@ -14,19 +14,41 @@ from tests.common.helpers.assertions import pytest_assert # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import create_ip_list # noqa: F401 from tests.snappi_tests.variables import T1_SNAPPI_AS_NUM, T2_SNAPPI_AS_NUM, T1_DUT_AS_NUM, T2_DUT_AS_NUM, t1_ports, \ - t2_uplink_portchannel_members, t1_t2_dut_ipv4_list, v4_prefix_length, v6_prefix_length, \ - t1_t2_dut_ipv6_list, t1_t2_snappi_ipv4_list, portchannel_count, \ + t2_uplink_portchannel_members, t1_t2_dut_ipv4_list, v4_prefix_length, \ + t1_t2_dut_ipv6_list, t1_t2_snappi_ipv4_list, t1_t2_device_hostnames, portchannel_count, \ t1_t2_snappi_ipv6_list, t2_dut_portchannel_ipv4_list, t2_dut_portchannel_ipv6_list, \ snappi_portchannel_ipv4_list, snappi_portchannel_ipv6_list, AS_PATHS, \ BGP_TYPE, t1_side_interconnected_port, t2_side_interconnected_port, router_ids, \ snappi_community_for_t1, snappi_community_for_t2, SNAPPI_TRIGGER, DUT_TRIGGER, \ fanout_presence, t2_uplink_fanout_info # noqa: F401 +from tests.common.snappi_tests.variables import v6_prefix_length logger = logging.getLogger(__name__) total_routes = 0 fanout_uplink_snappi_info = [] +def get_hw_platform(hostnames): + """ + Get the hardware platform of the DUT + + Args: + hostnames (list): List of DUT hostnames + + Returns: + hw_platform (str): Hardware platform of the T2 DUT from the variables file + """ + hw_platform = None + t2_dut = hostnames[1] + for hw_pltfm in t1_t2_device_hostnames: + devices = t1_t2_device_hostnames[hw_pltfm] + if t2_dut in devices: + hw_platform = hw_pltfm + break + + return hw_platform + + def run_dut_configuration(snappi_extra_params): """ Configures the dut for the test @@ -37,10 +59,12 @@ def run_dut_configuration(snappi_extra_params): duthost2 = snappi_extra_params.multi_dut_params.duthost2 duthost3 = snappi_extra_params.multi_dut_params.duthost3 duthosts = [duthost1, duthost2, duthost3] + hw_platform = snappi_extra_params.multi_dut_params.hw_platform test_name = snappi_extra_params.test_name snappi_ports = snappi_extra_params.multi_dut_params.multi_dut_ports duthost_bgp_config(duthosts, + hw_platform, snappi_ports, test_name) @@ -63,6 +87,7 @@ def run_bgp_outbound_uplink_blackout_test(api, duthost2 = snappi_extra_params.multi_dut_params.duthost2 duthost3 = snappi_extra_params.multi_dut_params.duthost3 duthosts = [duthost1, duthost2, duthost3] + hw_platform = snappi_extra_params.multi_dut_params.hw_platform route_ranges = snappi_extra_params.ROUTE_RANGES snappi_ports = snappi_extra_params.multi_dut_params.multi_dut_ports blackout_percentage = snappi_extra_params.multi_dut_params.BLACKOUT_PERCENTAGE @@ -76,11 +101,13 @@ def run_bgp_outbound_uplink_blackout_test(api, traffic_type.append(key) snappi_bgp_config = __snappi_bgp_config(api, duthosts, + hw_platform, snappi_ports, traffic_type, route_range) get_convergence_for_blackout(duthosts, + hw_platform, api, snappi_bgp_config, traffic_type, @@ -110,6 +137,7 @@ def run_bgp_outbound_tsa_tsb_test(api, duthost3 = snappi_extra_params.multi_dut_params.duthost3 duthost4 = snappi_extra_params.multi_dut_params.duthost4 duthosts = [duthost1, duthost2, duthost3, duthost4] + hw_platform = snappi_extra_params.multi_dut_params.hw_platform route_ranges = snappi_extra_params.ROUTE_RANGES snappi_ports = snappi_extra_params.multi_dut_params.multi_dut_ports device_name = snappi_extra_params.device_name @@ -123,6 +151,7 @@ def run_bgp_outbound_tsa_tsb_test(api, traffic_type.append(key) snappi_bgp_config = __snappi_bgp_config(api, duthosts, + hw_platform, snappi_ports, traffic_type, route_range) @@ -158,6 +187,7 @@ def run_bgp_outbound_process_restart_test(api, duthost2 = snappi_extra_params.multi_dut_params.duthost2 duthost3 = snappi_extra_params.multi_dut_params.duthost3 duthosts = [duthost1, duthost2, duthost3] + hw_platform = snappi_extra_params.multi_dut_params.hw_platform route_ranges = snappi_extra_params.ROUTE_RANGES snappi_ports = snappi_extra_params.multi_dut_params.multi_dut_ports process_names = snappi_extra_params.multi_dut_params.process_names @@ -167,6 +197,7 @@ def run_bgp_outbound_process_restart_test(api, """ Create bgp config on dut """ duthost_bgp_config(duthosts, + hw_platform, snappi_ports, test_name) @@ -177,6 +208,7 @@ def run_bgp_outbound_process_restart_test(api, traffic_type.append(key) snappi_bgp_config = __snappi_bgp_config(api, duthosts, + hw_platform, snappi_ports, traffic_type, route_range) @@ -211,6 +243,7 @@ def run_bgp_outbound_link_flap_test(api, duthost2 = snappi_extra_params.multi_dut_params.duthost2 duthost3 = snappi_extra_params.multi_dut_params.duthost3 duthosts = [duthost1, duthost2, duthost3] + hw_platform = snappi_extra_params.multi_dut_params.hw_platform route_ranges = snappi_extra_params.ROUTE_RANGES snappi_ports = snappi_extra_params.multi_dut_params.multi_dut_ports iteration = snappi_extra_params.iteration @@ -219,6 +252,7 @@ def run_bgp_outbound_link_flap_test(api, """ Create bgp config on dut """ duthost_bgp_config(duthosts, + hw_platform, snappi_ports, test_name) @@ -229,11 +263,13 @@ def run_bgp_outbound_link_flap_test(api, traffic_type.append(key) snappi_bgp_config = __snappi_bgp_config(api, duthosts, + hw_platform, snappi_ports, traffic_type, route_range) get_convergence_for_link_flap(duthosts, + hw_platform, api, snappi_bgp_config, flap_details, @@ -245,6 +281,7 @@ def run_bgp_outbound_link_flap_test(api, def duthost_bgp_config(duthosts, + hw_platform, snappi_ports, test_name): """ @@ -264,7 +301,7 @@ def duthost_bgp_config(duthosts, loopback_interfaces.update({"Loopback0": {}}) loopback_interfaces.update({"Loopback0|1.1.1.1/32": {}}) loopback_interfaces.update({"Loopback0|1::1/128": {}}) - for index, custom_port in enumerate(t1_ports[duthosts[0].hostname]): + for index, custom_port in enumerate(t1_ports[hw_platform][duthosts[0].hostname]): interface_name = {custom_port: {}} v4_interface = {f"{custom_port}|{t1_t2_dut_ipv4_list[index]}/{v4_prefix_length}": {}} v6_interface = {f"{custom_port}|{t1_t2_dut_ipv6_list[index]}/{v6_prefix_length}": {}} @@ -278,7 +315,7 @@ def duthost_bgp_config(duthosts, bgp_neighbors = dict() device_neighbors = dict() device_neighbor_metadatas = dict() - for index, custom_port in enumerate(t1_ports[duthosts[0].hostname]): + for index, custom_port in enumerate(t1_ports[hw_platform][duthosts[0].hostname]): for snappi_port in snappi_ports: if custom_port == snappi_port['peer_port'] and snappi_port['peer_device'] == duthosts[0].hostname: bgp_neighbor = \ @@ -329,16 +366,16 @@ def duthost_bgp_config(duthosts, logger.info('\n') logger.info('---------------T1 Inter-Connectivity Section --------------------') logger.info('\n') - index = len(t1_ports[duthosts[0].hostname]) - interface_name = {t1_side_interconnected_port: {}} - v4_interface = {f"{t1_side_interconnected_port}|{t1_t2_dut_ipv4_list[index]}/{v4_prefix_length}": {}} - v6_interface = {f"{t1_side_interconnected_port}|{t1_t2_dut_ipv6_list[index]}/{v6_prefix_length}": {}} + index = len(t1_ports[hw_platform][duthosts[0].hostname]) + interface_name = {t1_side_interconnected_port[hw_platform]: {}} + v4_interface = {f"{t1_side_interconnected_port[hw_platform]}|{t1_t2_dut_ipv4_list[index]}/{v4_prefix_length}": {}} + v6_interface = {f"{t1_side_interconnected_port[hw_platform]}|{t1_t2_dut_ipv6_list[index]}/{v6_prefix_length}": {}} interfaces.update(interface_name) interfaces.update(v4_interface) interfaces.update(v6_interface) logger.info('Configuring IP {}/{} , {}/{} on {} in {} for the T1 interconnectivity'. format(t1_t2_dut_ipv4_list[index], v4_prefix_length, - t1_t2_dut_ipv6_list[index], v6_prefix_length, t1_side_interconnected_port, + t1_t2_dut_ipv6_list[index], v6_prefix_length, t1_side_interconnected_port[hw_platform], duthosts[0].hostname)) logger.info('Configuring BGP in T1 by writing into config_db') @@ -368,7 +405,7 @@ def duthost_bgp_config(duthosts, } bgp_neighbors.update(bgp_neighbor) device_neighbor = { - t1_side_interconnected_port: + t1_side_interconnected_port[hw_platform]: { "name": "T2", "port": "Ethernet1" @@ -429,19 +466,21 @@ def duthost_bgp_config(duthosts, loopback_interfaces.update({"Loopback0": {}}) loopback_interfaces.update({"Loopback0|2.2.2.2/32": {}}) loopback_interfaces.update({"Loopback0|2::2/128": {}}) - index = len(t1_ports[duthosts[0].hostname]) - interface_name = {t2_side_interconnected_port['port_name']: {}} + index = len(t1_ports[hw_platform][duthosts[0].hostname]) + interface_name = {t2_side_interconnected_port[hw_platform]['port_name']: {}} v4_interface = { - f"{t2_side_interconnected_port['port_name']}|{t1_t2_snappi_ipv4_list[index]}/{v4_prefix_length}": {} + f"{t2_side_interconnected_port[hw_platform]['port_name']}|" + f"{t1_t2_snappi_ipv4_list[index]}/{v4_prefix_length}": {} } v6_interface = { - f"{t2_side_interconnected_port['port_name']}|{t1_t2_snappi_ipv6_list[index]}/{v6_prefix_length}": {} + f"{t2_side_interconnected_port[hw_platform]['port_name']}|" + f"{t1_t2_snappi_ipv6_list[index]}/{v6_prefix_length}": {} } interfaces.update(interface_name) interfaces.update(v4_interface) interfaces.update(v6_interface) device_neighbor = { - t2_side_interconnected_port['port_name']: + t2_side_interconnected_port[hw_platform]['port_name']: { "name": "T1", "port": "Ethernet1" @@ -481,10 +520,10 @@ def duthost_bgp_config(duthosts, }, } - if t2_side_interconnected_port['asic_value'] is not None: - config_db = 'config_db'+list(t2_side_interconnected_port['asic_value'])[-1]+'.json' + if t2_side_interconnected_port[hw_platform]['asic_value'] is not None: + config_db = 'config_db'+list(t2_side_interconnected_port[hw_platform]['asic_value'])[-1]+'.json' t2_config_db = json.loads(duthosts[2].shell("sonic-cfggen -d -n {} --print-data". - format(t2_side_interconnected_port['asic_value']))['stdout']) + format(t2_side_interconnected_port[hw_platform]['asic_value']))['stdout']) else: config_db = 'config_db.json' t2_config_db = json.loads(duthosts[2].shell("sonic-cfggen -d --print-data")['stdout']) @@ -496,7 +535,7 @@ def duthost_bgp_config(duthosts, logger.info('Configuring IP {}/{} , {}/{} on {} in {} for the T1 interconnectivity'. format(t1_t2_snappi_ipv4_list[index], v4_prefix_length, t1_t2_snappi_ipv6_list[index], v6_prefix_length, - t2_side_interconnected_port['port_name'], duthosts[2].hostname)) + t2_side_interconnected_port[hw_platform]['port_name'], duthosts[2].hostname)) if "LOOPBACK_INTERFACE" not in t2_config_db.keys(): t2_config_db["LOOPBACK_INTERFACE"] = loopback_interfaces else: @@ -537,7 +576,7 @@ def duthost_bgp_config(duthosts, loopback_interfaces.update({"Loopback0|3::3/128": {}}) index = 0 index_2 = 0 - for asic_value, portchannel_info in t2_uplink_portchannel_members[duthosts[1].hostname].items(): + for asic_value, portchannel_info in t2_uplink_portchannel_members[hw_platform][duthosts[1].hostname].items(): bgp_neighbors = dict() device_neighbors = dict() device_neighbor_metadatas = dict() @@ -678,6 +717,7 @@ def generate_mac_address(): def __snappi_bgp_config(api, duthosts, + hw_platform, snappi_ports, traffic_type, route_range): @@ -698,10 +738,10 @@ def __snappi_bgp_config(api, total_routes = 0 config = api.config() # get all the t1 and uplink ports from variables - t1_variable_ports = t1_ports[duthosts[0].hostname] + t1_variable_ports = t1_ports[hw_platform][duthosts[0].hostname] t2_variable_ports = [] port_tuple = [] - for asic_value, portchannel_info in t2_uplink_portchannel_members[duthosts[1].hostname].items(): + for asic_value, portchannel_info in t2_uplink_portchannel_members[hw_platform][duthosts[1].hostname].items(): for portchannel, ports in portchannel_info.items(): port_tuple.append(ports) for port in ports: @@ -726,7 +766,7 @@ def __snappi_bgp_config(api, for _, snappi_test_port in enumerate(snappi_t2_ports): po = 1 - for asic_value, portchannel_info in t2_uplink_portchannel_members[duthosts[1].hostname].items(): + for asic_value, portchannel_info in t2_uplink_portchannel_members[hw_platform][duthosts[1].hostname].items(): for portchannel, portchannel_members in portchannel_info.items(): for index, mem_port in enumerate(portchannel_members, 1): if snappi_test_port['peer_port'] == mem_port and \ @@ -985,6 +1025,7 @@ def flap_single_fanout_port(fanout_ip, creds, port_name, state): def get_convergence_for_link_flap(duthosts, + hw_platform, api, bgp_config, flap_details, @@ -1075,7 +1116,7 @@ def get_convergence_for_link_flap(duthosts, for port in fanout_uplink_snappi_info: if flap_details['port_name'] == port['name']: uplink_port = port['peer_port'] - for fanout_info in t2_uplink_fanout_info: + for fanout_info in t2_uplink_fanout_info[hw_platform]: for port_mapping in fanout_info['port_mapping']: if uplink_port == port_mapping['uplink_port']: fanout_port = port_mapping['fanout_port'] @@ -1600,6 +1641,7 @@ def add_value_to_key(dictionary, key, value): def get_convergence_for_blackout(duthosts, + hw_platform, api, snappi_bgp_config, traffic_type, @@ -1675,7 +1717,7 @@ def get_convergence_for_blackout(duthosts, # Link Down portchannel_dict = {} - for asic_value, portchannel_info in t2_uplink_portchannel_members[duthosts[1].hostname].items(): + for asic_value, portchannel_info in t2_uplink_portchannel_members[hw_platform][duthosts[1].hostname].items(): portchannel_dict.update(portchannel_info) number_of_po = math.ceil(blackout_percentage * len(portchannel_dict)/100) snappi_port_names = [] @@ -1696,7 +1738,7 @@ def get_convergence_for_blackout(duthosts, else: required_fanout_mapping = {} for uplink_port in uplink_ports: - for fanout_info in t2_uplink_fanout_info: + for fanout_info in t2_uplink_fanout_info[hw_platform]: for port_mapping in fanout_info['port_mapping']: if uplink_port == port_mapping['uplink_port']: fanout_ip = fanout_info['fanout_ip'] diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_port_flap.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_port_flap.py index 2c5b48533c1..4d62e5247e6 100755 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_port_flap.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_port_flap.py @@ -5,20 +5,15 @@ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 -from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 +from tests.snappi_tests.variables import t1_side_interconnected_port, t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_link_flap_test) # noqa: F401 + get_hw_platform, run_bgp_outbound_link_flap_test) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen')] -FLAP_DETAILS = { - 'device_name': t1_t2_device_hostnames[0], - 'port_name': 'Ethernet120' - } - ITERATION = 1 ROUTE_RANGES = [{ 'IPv4': [ @@ -65,32 +60,40 @@ def test_bgp_outbound_downlink_port_flap(snappi_api, snappi_extra_params = SnappiTestParams() snappi_extra_params.ROUTE_RANGES = ROUTE_RANGES snappi_extra_params.iteration = ITERATION - snappi_extra_params.multi_dut_params.flap_details = FLAP_DETAILS snappi_extra_params.test_name = "T1 Interconnectivity flap" - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.flap_details = { + 'device_name': t1_t2_device_hostnames[hw_platform][0], + 'port_name': t1_side_interconnected_port[hw_platform] + } + snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp + snappi_extra_params.multi_dut_params.hw_platform = hw_platform run_bgp_outbound_link_flap_test(api=snappi_api, creds=creds, snappi_extra_params=snappi_extra_params) diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_process_crash.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_process_crash.py index a0ac0f9f15e..424ea4e2ad3 100755 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_process_crash.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_downlink_process_crash.py @@ -7,7 +7,7 @@ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_process_restart_test) # noqa: F401 + get_hw_platform, run_bgp_outbound_process_restart_test) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) @@ -64,31 +64,34 @@ def test_bgp_outbound_downlink_process_crash(snappi_api, 'swss': "/usr/bin/orchagent", 'syncd': "/usr/bin/syncd", } - snappi_extra_params.multi_dut_params.host_name = t1_t2_device_hostnames[2] - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") - ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.host_name = t1_t2_device_hostnames[hw_platform][2] snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp + snappi_extra_params.multi_dut_params.hw_platform = hw_platform run_bgp_outbound_process_restart_test(api=snappi_api, creds=creds, snappi_extra_params=snappi_extra_params) diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_tsa.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_tsa.py index 2db762e9dc3..718ae4e6e82 100644 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_tsa.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_tsa.py @@ -7,7 +7,7 @@ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_tsa_tsb_test, run_dut_configuration) # noqa: F401 + get_hw_platform, run_bgp_outbound_tsa_tsb_test, run_dut_configuration) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) @@ -37,10 +37,10 @@ }] -def test_dut_configuration(multidut_snappi_ports_for_bgp, # noqa: F811 +def test_dut_configuration(multidut_snappi_ports_for_bgp, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 - duthosts): # noqa: F811 + duthosts): # noqa: F811 """ Configures BGP in T1, T2 Uplink and T2 Downlink @@ -58,21 +58,28 @@ def test_dut_configuration(multidut_snappi_ports_for_bgp, # noq ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unable to get the hardware platform") + logger.info("hw_platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.hw_platform = hw_platform snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp run_dut_configuration(snappi_extra_params) @@ -100,33 +107,36 @@ def test_bgp_outbound_uplink_tsa(snappi_api, snappi_extra_params.ROUTE_RANGES = ROUTE_RANGES snappi_extra_params.iteration = ITERATION snappi_extra_params.test_name = "Uplink" - snappi_extra_params.device_name = t1_t2_device_hostnames[1] - - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost - elif t1_t2_device_hostnames[3] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][3] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost4 = duthost else: continue + snappi_extra_params.device_name = t1_t2_device_hostnames[hw_platform][1] + snappi_extra_params.multi_dut_params.hw_platform = hw_platform snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp run_bgp_outbound_tsa_tsb_test(api=snappi_api, @@ -158,33 +168,36 @@ def test_bgp_outbound_downlink_tsa(snappi_api, snappi_extra_params.ROUTE_RANGES = ROUTE_RANGES snappi_extra_params.iteration = ITERATION snappi_extra_params.test_name = "Downlink" - snappi_extra_params.device_name = t1_t2_device_hostnames[2] - - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost - elif t1_t2_device_hostnames[3] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][3] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost4 = duthost else: continue + snappi_extra_params.device_name = t1_t2_device_hostnames[hw_platform][2] + snappi_extra_params.multi_dut_params.hw_platform = hw_platform snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp run_bgp_outbound_tsa_tsb_test(api=snappi_api, snappi_extra_params=snappi_extra_params, @@ -214,33 +227,36 @@ def test_bgp_outbound_supervisor_tsa(snappi_api, snappi_extra_params.ROUTE_RANGES = ROUTE_RANGES snappi_extra_params.iteration = ITERATION snappi_extra_params.test_name = "Supervisor" - snappi_extra_params.device_name = t1_t2_device_hostnames[3] - - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost - elif t1_t2_device_hostnames[3] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][3] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost4 = duthost else: continue + snappi_extra_params.device_name = t1_t2_device_hostnames[hw_platform][3] + snappi_extra_params.multi_dut_params.hw_platform = hw_platform snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp run_bgp_outbound_tsa_tsb_test(api=snappi_api, snappi_extra_params=snappi_extra_params, diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_multi_po_flap.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_multi_po_flap.py index a983e3642d1..9d18f57f926 100644 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_multi_po_flap.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_multi_po_flap.py @@ -7,7 +7,7 @@ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_uplink_blackout_test, run_dut_configuration) # noqa: F401 + run_bgp_outbound_uplink_blackout_test, run_dut_configuration, get_hw_platform) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) @@ -58,22 +58,30 @@ def test_dut_configuration(multidut_snappi_ports_for_bgp, # noq ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp + snappi_extra_params.multi_dut_params.hw_platform = hw_platform run_dut_configuration(snappi_extra_params) @@ -102,28 +110,32 @@ def test_bgp_outbound_uplink_complete_blackout(snappi_api, snappi_extra_params.test_name = "T2 Uplink Complete Blackout" snappi_extra_params.multi_dut_params.BLACKOUT_PERCENTAGE = 100 - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") - ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.hw_platform = hw_platform snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp run_bgp_outbound_uplink_blackout_test(api=snappi_api, creds=creds, @@ -155,28 +167,32 @@ def test_bgp_outbound_uplink_partial_blackout(snappi_api, snappi_extra_params.test_name = "T2 Uplink Partial Blackout" snappi_extra_params.multi_dut_params.BLACKOUT_PERCENTAGE = 50 - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") - ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.hw_platform = hw_platform snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp run_bgp_outbound_uplink_blackout_test(api=snappi_api, creds=creds, diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_flap.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_flap.py index 59fa935e80d..77a62b02b5e 100755 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_flap.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_flap.py @@ -7,7 +7,7 @@ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_link_flap_test) # noqa: F401 + get_hw_platform, run_bgp_outbound_link_flap_test) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) @@ -67,29 +67,33 @@ def test_bgp_outbound_uplink_po_flap(snappi_api, snappi_extra_params.test_name = "T2 Uplink Portchannel Flap" snappi_extra_params.multi_dut_params.flap_details = FLAP_DETAILS - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") - ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unknown HW Platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp + snappi_extra_params.multi_dut_params.hw_platform = hw_platform run_bgp_outbound_link_flap_test(api=snappi_api, creds=creds, snappi_extra_params=snappi_extra_params) diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_member_flap.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_member_flap.py index 3c273641a7a..b705b3dafec 100755 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_member_flap.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_po_member_flap.py @@ -5,9 +5,9 @@ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 -from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 +from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_link_flap_test) # noqa: F401 + get_hw_platform, run_bgp_outbound_link_flap_test) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) @@ -67,28 +67,32 @@ def test_bgp_outbound_uplink_po_member_flap(snappi_api, snappi_extra_params.test_name = "T2 Uplink Portchannel Member Flap" snappi_extra_params.multi_dut_params.flap_details = FLAP_DETAILS - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") - ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Failed to get the hardware platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp + snappi_extra_params.multi_dut_params.hw_platform = hw_platform run_bgp_outbound_link_flap_test(api=snappi_api, creds=creds, snappi_extra_params=snappi_extra_params) diff --git a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_process_crash.py b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_process_crash.py index d27cde536b7..8c4067d5c40 100755 --- a/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_process_crash.py +++ b/tests/snappi_tests/multidut/bgp/test_bgp_outbound_uplink_process_crash.py @@ -7,7 +7,7 @@ snappi_api, multidut_snappi_ports_for_bgp # noqa: F401 from tests.snappi_tests.variables import t1_t2_device_hostnames # noqa: F401 from tests.snappi_tests.multidut.bgp.files.bgp_outbound_helper import ( - run_bgp_outbound_process_restart_test) # noqa: F401 + get_hw_platform, run_bgp_outbound_process_restart_test) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 logger = logging.getLogger(__name__) @@ -64,31 +64,35 @@ def test_bgp_outbound_uplink_process_crash(snappi_api, 'swss': "/usr/bin/orchagent", 'syncd': "/usr/bin/syncd", } - snappi_extra_params.multi_dut_params.host_name = t1_t2_device_hostnames[1] - if (len(t1_t2_device_hostnames) < 3) or (len(duthosts) < 3): - pytest_assert(False, "Need minimum of 3 devices : One T1 and Two T2 line cards") ansible_dut_hostnames = [] for duthost in duthosts: ansible_dut_hostnames.append(duthost.hostname) - for device_hostname in t1_t2_device_hostnames: + hw_platform = get_hw_platform(ansible_dut_hostnames) + if hw_platform is None: + pytest_require(False, "Unable to get the hardware platform") + logger.info("HW Platform: {}".format(hw_platform)) + + for device_hostname in t1_t2_device_hostnames[hw_platform]: if device_hostname not in ansible_dut_hostnames: logger.info('!!!!! Attention: {} not in : {} derived from ansible dut hostnames'. format(device_hostname, ansible_dut_hostnames)) - pytest_assert(False, "Mismatch between the dut hostnames in ansible and in variables.py files") + pytest_require(False, "Mismatch between the dut hostnames in ansible and in variables.py files") for duthost in duthosts: - if t1_t2_device_hostnames[0] in duthost.hostname: + if t1_t2_device_hostnames[hw_platform][0] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost1 = duthost - elif t1_t2_device_hostnames[1] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][1] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost2 = duthost - elif t1_t2_device_hostnames[2] in duthost.hostname: + elif t1_t2_device_hostnames[hw_platform][2] in duthost.hostname: snappi_extra_params.multi_dut_params.duthost3 = duthost else: continue + snappi_extra_params.multi_dut_params.host_name = t1_t2_device_hostnames[hw_platform][1] snappi_extra_params.multi_dut_params.multi_dut_ports = multidut_snappi_ports_for_bgp + snappi_extra_params.multi_dut_params.hw_platform = hw_platform run_bgp_outbound_process_restart_test(api=snappi_api, creds=creds, snappi_extra_params=snappi_extra_params) diff --git a/tests/snappi_tests/multidut/ecn/files/multidut_helper.py b/tests/snappi_tests/multidut/ecn/files/multidut_helper.py index 76c27031316..28bbc18906d 100644 --- a/tests/snappi_tests/multidut/ecn/files/multidut_helper.py +++ b/tests/snappi_tests/multidut/ecn/files/multidut_helper.py @@ -1,16 +1,20 @@ import logging +import time +import csv +import os from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ snappi_api # noqa: F401 from tests.common.snappi_tests.snappi_helpers import get_dut_port_id from tests.common.snappi_tests.common_helpers import pfc_class_enable_vector, config_wred, \ - enable_ecn, config_ingress_lossless_buffer_alpha, stop_pfcwd, disable_packet_aging, \ + enable_ecn, config_ingress_lossless_buffer_alpha, stop_pfcwd, disable_packet_aging,\ config_capture_pkt, traffic_flow_mode, calc_pfc_pause_flow_rate # noqa: F401 from tests.common.snappi_tests.read_pcap import get_ipv4_pkts from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import setup_base_traffic_config, generate_test_flows, \ generate_pause_flows, run_traffic # noqa: F401 +import json logger = logging.getLogger(__name__) @@ -21,6 +25,142 @@ DATA_FLOW_NAME = 'Data Flow' +def get_npu_voq_queue_counters(duthost, interface, priority, clear=False): + + asic_namespace_string = "" + if duthost.is_multi_asic: + asic = duthost.get_port_asic_instance(interface) + asic_namespace_string = " -n " + asic.namespace + + clear_cmd = "" + if clear: + clear_cmd = " -c" + + full_line = "".join(duthost.shell( + "show platform npu voq queue_counters -t {} -i {} -d{}{}". + format(priority, interface, asic_namespace_string, clear_cmd))['stdout_lines']) + dict_output = json.loads(full_line) + for entry, value in zip(dict_output['stats_name'], dict_output['counters']): + dict_output[entry] = value + + return dict_output + + +def verify_ecn_counters(ecn_counters, link_state_toggled=False): + + toggle_msg = " post link state toggle" if link_state_toggled else "" + # verify that each flow had packets + init_ctr_3, post_ctr_3 = ecn_counters[0] + init_ctr_4, post_ctr_4 = ecn_counters[1] + flow3_total = post_ctr_3['SAI_QUEUE_STAT_PACKETS'] - init_ctr_3['SAI_QUEUE_STAT_PACKETS'] + + pytest_assert(flow3_total > 0, + 'Queue 3 counters at start {} at end {} did not increment{}'.format( + init_ctr_3['SAI_QUEUE_STAT_PACKETS'], post_ctr_3['SAI_QUEUE_STAT_PACKETS'], toggle_msg)) + + flow4_total = post_ctr_4['SAI_QUEUE_STAT_PACKETS'] - init_ctr_4['SAI_QUEUE_STAT_PACKETS'] + + pytest_assert(flow4_total > 0, + 'Queue 4 counters at start {} at end {} did not increment{}'.format( + init_ctr_4['SAI_QUEUE_STAT_PACKETS'], post_ctr_4['SAI_QUEUE_STAT_PACKETS'], toggle_msg)) + + flow3_ecn = post_ctr_3['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] -\ + init_ctr_3['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] + flow4_ecn = post_ctr_4['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] -\ + init_ctr_4['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] + + pytest_assert(flow3_ecn > 0, + 'Must have ecn marked packets on flow 3{}'. + format(toggle_msg)) + + pytest_assert(flow4_ecn > 0, + 'Must have ecn marked packets on flow 4{}'. + format(toggle_msg)) + + +def verify_ecn_counters_for_flow_percent(ecn_counters, test_flow_percent): + + # verify that each flow had packets + init_ctr_3, post_ctr_3 = ecn_counters[0] + init_ctr_4, post_ctr_4 = ecn_counters[1] + flow3_total = post_ctr_3['SAI_QUEUE_STAT_PACKETS'] - init_ctr_3['SAI_QUEUE_STAT_PACKETS'] + + drop_ctr_3 = post_ctr_3['SAI_QUEUE_STAT_DROPPED_PACKETS'] -\ + init_ctr_3['SAI_QUEUE_STAT_DROPPED_PACKETS'] + wred_drop_ctr_3 = post_ctr_3['SAI_QUEUE_STAT_WRED_DROPPED_PACKETS'] -\ + init_ctr_3['SAI_QUEUE_STAT_WRED_DROPPED_PACKETS'] + + drop_ctr_4 = post_ctr_4['SAI_QUEUE_STAT_DROPPED_PACKETS'] -\ + init_ctr_4['SAI_QUEUE_STAT_DROPPED_PACKETS'] + wred_drop_ctr_4 = post_ctr_4['SAI_QUEUE_STAT_WRED_DROPPED_PACKETS'] -\ + init_ctr_4['SAI_QUEUE_STAT_WRED_DROPPED_PACKETS'] + + pytest_assert(drop_ctr_3 == 0 and wred_drop_ctr_3 == 0, 'Queue 3 Drop not expected') + + pytest_assert(drop_ctr_4 == 0 and wred_drop_ctr_4 == 0, 'Queue 4 Drop not expected') + + pytest_assert(flow3_total > 0, + 'Queue 3 counters at start {} at end {} did not increment'.format( + init_ctr_3['SAI_QUEUE_STAT_PACKETS'], post_ctr_3['SAI_QUEUE_STAT_PACKETS'])) + + flow4_total = post_ctr_4['SAI_QUEUE_STAT_PACKETS'] - init_ctr_4['SAI_QUEUE_STAT_PACKETS'] + + pytest_assert(flow4_total > 0, + 'Queue 4 counters at start {} at end {} did not increment'.format( + init_ctr_4['SAI_QUEUE_STAT_PACKETS'], post_ctr_4['SAI_QUEUE_STAT_PACKETS'])) + + flow3_ecn = post_ctr_3['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] -\ + init_ctr_3['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] + flow4_ecn = post_ctr_4['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] -\ + init_ctr_4['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] + + if sum(test_flow_percent) < 100: + pytest_assert( + flow3_ecn == 0, + 'Must have no ecn marked packets on flow 3 without congestion, percent {}'. + format(test_flow_percent)) + pytest_assert( + flow4_ecn == 0, + 'Must have no ecn marked packets on flow 4 without congestion, percent {}'. + format(test_flow_percent)) + elif sum(test_flow_percent) >= 100: + if test_flow_percent[0] > 50: + pytest_assert( + flow3_ecn > 0, + 'Must have ecn marked packets on flow 3, percent {}'. + format(test_flow_percent)) + + if test_flow_percent[1] > 50: + pytest_assert( + flow4_ecn > 0, + 'Must have ecn marked packets on flow 4, percent {}'. + format(test_flow_percent)) + + if test_flow_percent[0] < 50: + pytest_assert( + flow3_ecn == 0, + 'Must not have ecn marked packets on flow 3, percent {}'. + format(test_flow_percent)) + + if test_flow_percent[1] < 50: + pytest_assert( + flow4_ecn == 0, + 'Must not have ecn marked packets on flow 4, percent {}'. + format(test_flow_percent)) + + if test_flow_percent[0] >= 50 and test_flow_percent[1] >= 50: + pytest_assert( + flow3_ecn > 0 and flow4_ecn > 0, + 'Must have ecn marked packets on flows 3, 4, percent {}'. + format(test_flow_percent)) + flow_ecn_ratio = round(float(flow3_ecn/flow4_ecn), 2) + pytest_assert( + round(abs(flow_ecn_ratio - 1), 3) <= 0.05, + "The packet flow ecn ratio {} deviation more than tolerance for \ + flow percent {} flow 3 ecn -> {} flow 4 ecn -> {}". + format(flow_ecn_ratio, test_flow_percent, flow3_ecn, flow4_ecn)) + + def run_ecn_test(api, testbed_config, port_config_list, @@ -181,3 +321,498 @@ def run_ecn_test(api, result.append(get_ipv4_pkts(snappi_extra_params.packet_capture_file + ".pcapng")) return result + + +def toggle_dut_port_state(api): + # Get the current configuration + config = api.get_config() + # Collect all port names + port_names = [port.name for port in config.ports] + # Create a link state object for all ports + link_state = api.link_state() + # Apply the state to all ports + link_state.port_names = port_names + # Set all ports down (shut) + link_state.state = link_state.DOWN + api.set_link_state(link_state) + logger.info("All Snappi ports are set to DOWN") + time.sleep(0.2) + # Unshut all ports + link_state.state = link_state.UP + api.set_link_state(link_state) + logger.info("All Snappi ports are set to UP") + + +def run_ecn_marking_port_toggle_test( + api, + testbed_config, + port_config_list, + dut_port, + test_prio_list, + prio_dscp_map, + snappi_extra_params=None): + + """ + Run a ECN test + Args: + api (obj): snappi session + testbed_config (obj): testbed L1/L2/L3 configuration + port_config_list (list): list of port configuration + conn_data (dict): the dictionary returned by conn_graph_fact. + fanout_data (dict): the dictionary returned by fanout_graph_fact. + dut_port (str): DUT port to test + test_prio_list (list): priorities of test flows + prio_dscp_map (dict): Priority vs. DSCP map (key = priority). + snappi_extra_params (SnappiTestParams obj): additional parameters for Snappi traffic + Returns: + N/A + """ + + pytest_assert(testbed_config is not None, 'Fail to get L2/3 testbed config') + pytest_assert(len(test_prio_list) >= 2, 'Must have atleast two lossless priorities') + + test_flow_percent = [99.98] * len(test_prio_list) + + TEST_FLOW_NAME = ['Test Flow 3', 'Test Flow 4'] + DATA_FLOW_PKT_SIZE = 1350 + DATA_FLOW_DURATION_SEC = 2 + DATA_FLOW_DELAY_SEC = 1 + + if snappi_extra_params is None: + snappi_extra_params = SnappiTestParams() + + # Traffic flow: + # tx_port (TGEN) --- ingress DUT --- egress DUT --- rx_port (TGEN) + + rx_port = snappi_extra_params.multi_dut_params.multi_dut_ports[0] + egress_duthost = rx_port['duthost'] + + duthost = egress_duthost + + init_ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + init_ctr_4 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[1]) + + port_id = 0 + # Generate base traffic config + base_flow_config1 = setup_base_traffic_config(testbed_config=testbed_config, + port_config_list=port_config_list, + port_id=port_id) + port_config_list2 = [x for x in port_config_list if x != base_flow_config1['tx_port_config']] + base_flow_config2 = setup_base_traffic_config(testbed_config=testbed_config, + port_config_list=port_config_list2, + port_id=port_id) + + # Create a dictionary with priorities as keys and flow rates as values + flow_rate_dict = { + prio: round(flow / len(test_prio_list), 2) for prio, flow in zip(test_prio_list, test_flow_percent) + } + + snappi_extra_params.base_flow_config = base_flow_config1 + + # Set default traffic flow configs if not set + if snappi_extra_params.traffic_flow_config.data_flow_config is None: + snappi_extra_params.traffic_flow_config.data_flow_config = { + "flow_name": TEST_FLOW_NAME[0], + "flow_dur_sec": DATA_FLOW_DURATION_SEC, + "flow_rate_percent": flow_rate_dict, + "flow_rate_pps": None, + "flow_rate_bps": None, + "flow_pkt_size": DATA_FLOW_PKT_SIZE, + "flow_pkt_count": None, + "flow_delay_sec": DATA_FLOW_DELAY_SEC, + "flow_traffic_type": traffic_flow_mode.FIXED_DURATION + } + + generate_test_flows(testbed_config=testbed_config, + test_flow_prio_list=test_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + + snappi_extra_params.base_flow_config = base_flow_config2 + + snappi_extra_params.traffic_flow_config.data_flow_config = { + "flow_name": TEST_FLOW_NAME[1], + "flow_dur_sec": DATA_FLOW_DURATION_SEC, + "flow_rate_percent": flow_rate_dict, + "flow_rate_pps": None, + "flow_rate_bps": None, + "flow_pkt_size": DATA_FLOW_PKT_SIZE, + "flow_pkt_count": None, + "flow_delay_sec": DATA_FLOW_DELAY_SEC, + "flow_traffic_type": traffic_flow_mode.FIXED_DURATION + } + generate_test_flows(testbed_config=testbed_config, + test_flow_prio_list=test_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + + flows = testbed_config.flows + + all_flow_names = [flow.name for flow in flows] + data_flow_names = [flow.name for flow in flows if PAUSE_FLOW_NAME not in flow.name] + + # Clear PFC and queue counters before traffic run + duthost.command("sonic-clear pfccounters") + duthost.command("sonic-clear queuecounters") + + """ Run traffic """ + _tgen_flow_stats, _switch_flow_stats, _in_flight_flow_metrics = run_traffic( + duthost, + api=api, + config=testbed_config, + data_flow_names=data_flow_names, + all_flow_names=all_flow_names, + exp_dur_sec=DATA_FLOW_DURATION_SEC + + DATA_FLOW_DELAY_SEC, + snappi_extra_params=snappi_extra_params) + + post_ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + post_ctr_4 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[1]) + + ecn_counters = [ + (init_ctr_3, post_ctr_3), + (init_ctr_4, post_ctr_4) + ] + + verify_ecn_counters(ecn_counters) + + toggle_dut_port_state(api) + + init_ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + init_ctr_4 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[1]) + + """ Run traffic """ + _tgen_flow_stats, _switch_flow_stats, _in_flight_flow_metrics = run_traffic( + duthost, + api=api, + config=testbed_config, + data_flow_names=data_flow_names, + all_flow_names=all_flow_names, + exp_dur_sec=DATA_FLOW_DURATION_SEC + + DATA_FLOW_DELAY_SEC, + snappi_extra_params=snappi_extra_params) + + post_ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + post_ctr_4 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[1]) + + ecn_counters = [ + (init_ctr_3, post_ctr_3), + (init_ctr_4, post_ctr_4) + ] + + verify_ecn_counters(ecn_counters, link_state_toggled=True) + + +def run_ecn_marking_test(api, + testbed_config, + port_config_list, + dut_port, + test_prio_list, + prio_dscp_map, + test_flow_percent, + snappi_extra_params=None): + + """ + Run a ECN test + Args: + api (obj): snappi session + testbed_config (obj): testbed L1/L2/L3 configuration + port_config_list (list): list of port configuration + conn_data (dict): the dictionary returned by conn_graph_fact. + fanout_data (dict): the dictionary returned by fanout_graph_fact. + dut_port (str): DUT port to test + test_prio_list (list): priorities of test flows + prio_dscp_map (dict): Priority vs. DSCP map (key = priority). + snappi_extra_params (SnappiTestParams obj): additional parameters for Snappi traffic + + Returns: + N/A + """ + + pytest_assert(testbed_config is not None, 'Fail to get L2/3 testbed config') + pytest_assert(len(test_prio_list) >= 2, 'Must have atleast two lossless priorities') + + pytest_assert(len(test_flow_percent) == len(test_prio_list), + "The length of test_flow_percent must match the length of test_prio_list") + + TEST_FLOW_NAME = ['Test Flow 3', 'Test Flow 4'] + DATA_FLOW_PKT_SIZE = 1350 + DATA_FLOW_DURATION_SEC = 2 + DATA_FLOW_DELAY_SEC = 1 + + if snappi_extra_params is None: + snappi_extra_params = SnappiTestParams() + + # Traffic flow: + # tx_port (TGEN) --- ingress DUT --- egress DUT --- rx_port (TGEN) + + rx_port = snappi_extra_params.multi_dut_params.multi_dut_ports[0] + egress_duthost = rx_port['duthost'] + + duthost = egress_duthost + + init_ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + init_ctr_4 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[1]) + + port_id = 0 + # Generate base traffic config + base_flow_config1 = setup_base_traffic_config(testbed_config=testbed_config, + port_config_list=port_config_list, + port_id=port_id) + port_config_list2 = [x for x in port_config_list if x != base_flow_config1['tx_port_config']] + base_flow_config2 = setup_base_traffic_config(testbed_config=testbed_config, + port_config_list=port_config_list2, + port_id=port_id) + + # Create a dictionary with priorities as keys and flow rates as values + flow_rate_dict = { + prio: round(flow / len(test_prio_list), 2) for prio, flow in zip(test_prio_list, test_flow_percent) + } + + snappi_extra_params.base_flow_config = base_flow_config1 + + # Set default traffic flow configs if not set + if snappi_extra_params.traffic_flow_config.data_flow_config is None: + snappi_extra_params.traffic_flow_config.data_flow_config = { + "flow_name": TEST_FLOW_NAME[0], + "flow_dur_sec": DATA_FLOW_DURATION_SEC, + "flow_rate_percent": flow_rate_dict, + "flow_rate_pps": None, + "flow_rate_bps": None, + "flow_pkt_size": DATA_FLOW_PKT_SIZE, + "flow_pkt_count": None, + "flow_delay_sec": DATA_FLOW_DELAY_SEC, + "flow_traffic_type": traffic_flow_mode.FIXED_DURATION + } + + generate_test_flows(testbed_config=testbed_config, + test_flow_prio_list=test_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + + snappi_extra_params.base_flow_config = base_flow_config2 + + snappi_extra_params.traffic_flow_config.data_flow_config = { + "flow_name": TEST_FLOW_NAME[1], + "flow_dur_sec": DATA_FLOW_DURATION_SEC, + "flow_rate_percent": flow_rate_dict, + "flow_rate_pps": None, + "flow_rate_bps": None, + "flow_pkt_size": DATA_FLOW_PKT_SIZE, + "flow_pkt_count": None, + "flow_delay_sec": DATA_FLOW_DELAY_SEC, + "flow_traffic_type": traffic_flow_mode.FIXED_DURATION + } + generate_test_flows(testbed_config=testbed_config, + test_flow_prio_list=test_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + + flows = testbed_config.flows + + all_flow_names = [flow.name for flow in flows] + data_flow_names = [flow.name for flow in flows if PAUSE_FLOW_NAME not in flow.name] + + # Clear PFC and queue counters before traffic run + duthost.command("sonic-clear pfccounters") + duthost.command("sonic-clear queuecounters") + + """ Run traffic """ + _tgen_flow_stats, _switch_flow_stats, _in_flight_flow_metrics = run_traffic( + duthost, + api=api, + config=testbed_config, + data_flow_names=data_flow_names, + all_flow_names=all_flow_names, + exp_dur_sec=DATA_FLOW_DURATION_SEC + + DATA_FLOW_DELAY_SEC, + snappi_extra_params=snappi_extra_params) + + post_ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + post_ctr_4 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[1]) + + ecn_counters = [ + (init_ctr_3, post_ctr_3), + (init_ctr_4, post_ctr_4) + ] + + verify_ecn_counters_for_flow_percent(ecn_counters, test_flow_percent) + + +def run_ecn_marking_with_pfc_quanta_variance( + api, + testbed_config, + port_config_list, + dut_port, + test_prio_list, + prio_dscp_map, + test_ecn_config, + log_dir=None, + snappi_extra_params=None): + + pytest_assert(testbed_config is not None, 'Fail to get L2/3 testbed config') + pytest_assert(len(test_prio_list) >= 1, 'Must have atleast two lossless priorities') + + DATA_FLOW_PKT_SIZE = 1350 + DATA_FLOW_DURATION_SEC = 5 + DATA_FLOW_DELAY_SEC = 0 + + if snappi_extra_params is None: + snappi_extra_params = SnappiTestParams() + + # Traffic flow: + # tx_port (TGEN) --- ingress DUT --- egress DUT --- rx_port (TGEN) + + rx_port = snappi_extra_params.multi_dut_params.multi_dut_ports[0] + egress_duthost = rx_port['duthost'] + + duthost = egress_duthost + + port_id = 0 + # Generate base traffic config + base_flow_config = setup_base_traffic_config(testbed_config=testbed_config, + port_config_list=port_config_list, + port_id=port_id) + + snappi_extra_params.base_flow_config = base_flow_config + + # Set default traffic flow configs if not set + if snappi_extra_params.traffic_flow_config.data_flow_config is None: + snappi_extra_params.traffic_flow_config.data_flow_config = { + "flow_name": DATA_FLOW_NAME, + "flow_dur_sec": DATA_FLOW_DURATION_SEC, + "flow_rate_percent": 50, + "flow_rate_pps": None, + "flow_rate_bps": None, + "flow_pkt_size": DATA_FLOW_PKT_SIZE, + "flow_pkt_count": None, + "flow_delay_sec": DATA_FLOW_DELAY_SEC, + "flow_traffic_type": traffic_flow_mode.FIXED_DURATION + } + + generate_test_flows(testbed_config=testbed_config, + test_flow_prio_list=[test_prio_list[0]], + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + + PAUSE_FLOW_NAME = "Pause flow" + + # 10 PFC frames at 2 frames/sec. + # The pauses caused by each PFC frame do not overlap. + + PAUSE_FLOW_PKT_COUNT = 10 + PAUSE_FLOW_DELAY_SEC = 1 + + if snappi_extra_params.traffic_flow_config.pause_flow_config is None: + snappi_extra_params.traffic_flow_config.pause_flow_config = { + "flow_name": PAUSE_FLOW_NAME, + "flow_dur_sec": None, + "flow_rate_percent": None, + "flow_rate_pps": 2, + "flow_rate_bps": None, + "flow_pkt_size": 64, + "flow_pkt_count": PAUSE_FLOW_PKT_COUNT, + "flow_delay_sec": PAUSE_FLOW_DELAY_SEC, + "flow_traffic_type": traffic_flow_mode.FIXED_PACKETS + } + + asic_namespace = None + if duthost.is_multi_asic: + asic = duthost.get_port_asic_instance(dut_port) + asic_namespace = asic.namespace + gmin, gmax, gdrop = test_ecn_config + + # Configure WRED/ECN thresholds + logger.info("Configuring WRED and ECN thresholds gmin {}MB gmax {}MB gdrop {}%".format(gmin, gmax, gdrop)) + + config_result = config_wred(host_ans=duthost, + kmin=gmin * 1024 * 1024, + kmax=gmax * 1024 * 1024, + pmax=0, + kdrop=gdrop, + asic_value=asic_namespace) + + pytest_assert(config_result is True, 'Failed to configure WRED/ECN at the DUT') + + start_quanta = 500 + end_quanta = 65000 + n = 15 # Number of quanta values + + step = (end_quanta - start_quanta) // (n - 1) + # Generate all but the last value + pause_quanta_list = [start_quanta + i * step for i in range(n - 1)] + # The last value is exactly `end_quanta` + pause_quanta_list.append(end_quanta) + + logging.info("PFC quanta list: {}".format(pause_quanta_list)) + + _ = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0], True) + results = [] + for quanta in pause_quanta_list: + snappi_extra_params.traffic_flow_config.pause_flow_config["flow_quanta"] = quanta + + # Remove any existing pause flow + for index, flow in enumerate(testbed_config.flows): + if PAUSE_FLOW_NAME in flow.name: + testbed_config.flows.remove(index) + + # Generate pause flow config + generate_pause_flows(testbed_config=testbed_config, + pause_prio_list=[test_prio_list[0]], + global_pause=False, + snappi_extra_params=snappi_extra_params) + + flows = testbed_config.flows + + all_flow_names = [flow.name for flow in flows] + data_flow_names = [flow.name for flow in flows if PAUSE_FLOW_NAME not in flow.name] + + """ Run traffic """ + _tgen_flow_stats, _switch_flow_stats, _in_flight_flow_metrics = run_traffic( + duthost, + api=api, + config=testbed_config, + data_flow_names=data_flow_names, + all_flow_names=all_flow_names, + exp_dur_sec=DATA_FLOW_DURATION_SEC + + DATA_FLOW_DELAY_SEC, + snappi_extra_params=snappi_extra_params) + + ctr_3 = get_npu_voq_queue_counters(duthost, dut_port, test_prio_list[0]) + stats_only = {key: ctr_3[key] for key in ctr_3['stats_name']} + results.append((quanta, stats_only)) + + file_name = "xoff_quanta_variance_results_{}_{}_{}.csv".format(gmin, gmax, gdrop) + if log_dir: + file_name = os.path.join(log_dir, file_name) + + with open(file_name, 'w', newline='') as csvfile: + if results: + first_ctr = results[0][1] + fieldnames = ['quanta'] + list(first_ctr.keys()) + ['AVERAGE_ECN_MARKING'] + + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + + prev_ecn_marked = 0 + for quanta, ctr in results: + row = {'quanta': quanta} + row.update(ctr) + current_ecn_marked = ctr.get('SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS', 0) + average_ecn_marking = round((current_ecn_marked - prev_ecn_marked) / PAUSE_FLOW_PKT_COUNT) + row['AVERAGE_ECN_MARKING'] = average_ecn_marking + prev_ecn_marked = current_ecn_marked + writer.writerow(row) + + for i in range(len(results) - 1): + ecn_i = results[i][1]['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] + ecn_i_plus_1 = results[i + 1][1]['SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS'] + + if ecn_i > 0: + pytest_assert(ecn_i_plus_1 > ecn_i, + "ecn marked {} at quanta {} should be less than ecn marked {} at quanta {}". + format(ecn_i, results[i][0], ecn_i_plus_1, results[i+1][0])) + else: + pytest_assert(ecn_i_plus_1 >= ecn_i, + "ecn marked {} at quanta {} should not be greater than ecn marked {} at quanta {}". + format(ecn_i, results[i][0], ecn_i_plus_1, results[i+1][0])) diff --git a/tests/snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_pfc_quanta_variance_with_snappi.py b/tests/snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_pfc_quanta_variance_with_snappi.py new file mode 100644 index 00000000000..5bc4fd46428 --- /dev/null +++ b/tests/snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_pfc_quanta_variance_with_snappi.py @@ -0,0 +1,75 @@ +import pytest +import logging +import os +from tabulate import tabulate # noqa F401 +from tests.common.helpers.assertions import pytest_assert # noqa: F401 +from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ + fanout_graph_facts_multidut # noqa: F401 +from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ + snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config, \ + is_snappi_multidut, get_snappi_ports_multi_dut, get_snappi_ports_single_dut # noqa: F401 +from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ + lossless_prio_list, disable_pfcwd # noqa F401 +from tests.snappi_tests.files.helper import multidut_port_info, setup_ports_and_dut, enable_debug_shell # noqa: F401 +from tests.snappi_tests.multidut.ecn.files.multidut_helper import run_ecn_marking_with_pfc_quanta_variance +from tests.common.snappi_tests.snappi_test_params import SnappiTestParams +logger = logging.getLogger(__name__) +pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] + + +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (1, 1) + + +# tuple of -gmin in MB, -gmax in MB and -gdrop in percentage +test_ecn_config = [(1, 4, 5), (1, 4, 10), (2, 4, 5), (2, 4, 10)] + + +@pytest.mark.parametrize("test_ecn_config", test_ecn_config) +def test_ecn_marking_with_pfc_quanta_variance( + request, + snappi_api, # noqa: F811 + conn_graph_facts, # noqa: F811 + fanout_graph_facts_multidut, # noqa: F811 + duthosts, + lossless_prio_list, # noqa: F811 + tbinfo, # noqa: F811 + test_ecn_config, + prio_dscp_map, # noqa: F811 + setup_ports_and_dut): # noqa: F811 + + """ + Verify ECN marking on lossless prio with varying XOFF quanta + + Args: + request (pytest fixture): pytest request object + snappi_api (pytest fixture): SNAPPI session + conn_graph_facts (pytest fixture): connection graph + fanout_graph_facts (pytest fixture): fanout graph + duthosts (pytest fixture): list of DUTs + lossless_prio_list (pytest fixture): list of all the lossless priorities + prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). + tbinfo (pytest fixture): fixture provides information about testbed + test_flow_percent: Percentage of flow rate used for the two lossless prio + Returns: + N/A + """ + + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut + log_file_path = request.config.getoption("--log-file", default=None) + + logger.info("Snappi Ports : {}".format(snappi_ports)) + snappi_extra_params = SnappiTestParams() + snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + + run_ecn_marking_with_pfc_quanta_variance( + api=snappi_api, + testbed_config=testbed_config, + port_config_list=port_config_list, + dut_port=snappi_ports[0]['peer_port'], + test_prio_list=lossless_prio_list, + prio_dscp_map=prio_dscp_map, + log_dir=os.path.dirname(log_file_path) if log_file_path else None, + test_ecn_config=test_ecn_config, + snappi_extra_params=snappi_extra_params) diff --git a/tests/snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_snappi.py b/tests/snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_snappi.py new file mode 100644 index 00000000000..2a0472c4329 --- /dev/null +++ b/tests/snappi_tests/multidut/ecn/test_multidut_ecn_marking_with_snappi.py @@ -0,0 +1,167 @@ +import pytest +import logging +from tabulate import tabulate # noqa F401 +from tests.common.helpers.assertions import pytest_assert, pytest_require # noqa: F401 +from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ + fanout_graph_facts_multidut # noqa: F401 +from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ + snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config, \ + is_snappi_multidut, get_snappi_ports_multi_dut, get_snappi_ports_single_dut # noqa: F401 +from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ + lossless_prio_list, disable_pfcwd # noqa F401 +from tests.snappi_tests.files.helper import multidut_port_info, setup_ports_and_dut, enable_debug_shell # noqa: F401 +from tests.snappi_tests.multidut.ecn.files.multidut_helper import run_ecn_marking_test, run_ecn_marking_port_toggle_test +from tests.common.snappi_tests.snappi_test_params import SnappiTestParams +from tests.common.cisco_data import is_cisco_device +logger = logging.getLogger(__name__) +pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] + + +def validate_snappi_ports(snappi_ports): + + if not is_cisco_device(snappi_ports[0]['duthost']): + return True + + ''' + One ingress port and the egress port should be on the same DUT and asic. + The second ingress port can be on diff asic or DUT. + This is needed to avoid tail drops caused by use of default voq in case + both the BP ports of egress port are on the same slice + + All ingress and egress port on the same DUT and asic is fine. + ''' + + # Extract duthost and peer_port values for rx_dut and tx_dut configurations + rx_dut = snappi_ports[0]['duthost'] + rx_peer_port = snappi_ports[0]['peer_port'] + tx_dut_1 = snappi_ports[1]['duthost'] + tx_peer_port_1 = snappi_ports[1]['peer_port'] + tx_dut_2 = snappi_ports[2]['duthost'] + tx_peer_port_2 = snappi_ports[2]['peer_port'] + + # get the ASIC namespace for a given duthost and peer_port + def get_asic(duthost, peer_port): + return duthost.get_port_asic_instance(peer_port).namespace + + # Retrieve ASIC namespace + rx_asic = get_asic(rx_dut, rx_peer_port) + tx_asic_1 = get_asic(tx_dut_1, tx_peer_port_1) + tx_asic_2 = get_asic(tx_dut_2, tx_peer_port_2) + + # Check if all duthosts and their ASICs are the same + if (rx_dut == tx_dut_1 == tx_dut_2) and (rx_asic == tx_asic_1 == tx_asic_2): + return True + + # Check if rx_dut and its ASIC matches either of the tx_dut and their ASIC + if (rx_dut == tx_dut_1 and rx_asic == tx_asic_1) or (rx_dut == tx_dut_2 and rx_asic == tx_asic_2): + return True + + return False + + +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + +def test_ecn_marking_port_toggle( + snappi_api, # noqa: F811 + conn_graph_facts, # noqa: F811 + fanout_graph_facts_multidut, # noqa: F811 + duthosts, + lossless_prio_list, # noqa: F811 + get_snappi_ports, # noqa: F811 + tbinfo, # noqa: F811 + disable_pfcwd, # noqa: F811 + setup_ports_and_dut, # noqa: F811 + prio_dscp_map): # noqa: F811 + """ + Verify ECN marking both pre and post port shut/no shut toggle + Args: + request (pytest fixture): pytest request object + snappi_api (pytest fixture): SNAPPI session + conn_graph_facts (pytest fixture): connection graph + fanout_graph_facts (pytest fixture): fanout graph + duthosts (pytest fixture): list of DUTs + lossless_prio_list (pytest fixture): list of all the lossless priorities + prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). + prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). + tbinfo (pytest fixture): fixture provides information about testbed + get_snappi_ports (pytest fixture): gets snappi ports and connected DUT port info and returns as a list + Returns: + N/A + """ + + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut + + logger.info("Snappi Ports : {}".format(snappi_ports)) + snappi_extra_params = SnappiTestParams() + snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + + try: + run_ecn_marking_port_toggle_test( + api=snappi_api, + testbed_config=testbed_config, + port_config_list=port_config_list, + dut_port=snappi_ports[0]['peer_port'], + test_prio_list=lossless_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + finally: + cleanup_config(duthosts, snappi_ports) + + +test_flow_percent_list = [[90, 15], [53, 49], [15, 90], [49, 49], [50, 50], [60, 60], [60, 90], [90, 60]] + + +@pytest.mark.parametrize("test_flow_percent", test_flow_percent_list) +def test_ecn_marking_lossless_prio( + snappi_api, # noqa: F811 + conn_graph_facts, # noqa: F811 + fanout_graph_facts_multidut, # noqa: F811 + duthosts, + lossless_prio_list, # noqa: F811 + get_snappi_ports, # noqa: F811 + tbinfo, # noqa: F811 + disable_pfcwd, # noqa: F811 + test_flow_percent, + prio_dscp_map, # noqa: F811 + setup_ports_and_dut): # noqa: F811 + """ + Verify ECN marking on lossless prio with same DWRR weight + + Args: + request (pytest fixture): pytest request object + snappi_api (pytest fixture): SNAPPI session + conn_graph_facts (pytest fixture): connection graph + fanout_graph_facts (pytest fixture): fanout graph + duthosts (pytest fixture): list of DUTs + lossless_prio_list (pytest fixture): list of all the lossless priorities + prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). + tbinfo (pytest fixture): fixture provides information about testbed + test_flow_percent: Percentage of flow rate used for the two lossless prio + get_snappi_ports (pytest fixture): gets snappi ports and connected DUT port info and returns as a list + Returns: + N/A + """ + + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut + + pytest_require(validate_snappi_ports(snappi_ports), "Invalid combination of duthosts or ASICs in snappi_ports") + + logger.info("Snappi Ports : {}".format(snappi_ports)) + snappi_extra_params = SnappiTestParams() + snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + + try: + run_ecn_marking_test( + api=snappi_api, + testbed_config=testbed_config, + port_config_list=port_config_list, + dut_port=snappi_ports[0]['peer_port'], + test_prio_list=lossless_prio_list, + prio_dscp_map=prio_dscp_map, + test_flow_percent=test_flow_percent, + snappi_extra_params=snappi_extra_params) + finally: + cleanup_config(duthosts, snappi_ports) diff --git a/tests/snappi_tests/multidut/pfc/files/lossless_response_to_external_pause_storms_helper.py b/tests/snappi_tests/multidut/pfc/files/lossless_response_to_external_pause_storms_helper.py index fb139f3f255..4a86c12e257 100644 --- a/tests/snappi_tests/multidut/pfc/files/lossless_response_to_external_pause_storms_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/lossless_response_to_external_pause_storms_helper.py @@ -15,7 +15,7 @@ from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import run_traffic, verify_pause_flow, \ setup_base_traffic_config # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) TEST_FLOW_NAME = 'Test Flow' @@ -82,10 +82,10 @@ def run_lossless_response_to_external_pause_storms_test(api, tx_port = [snappi_extra_params.multi_dut_params.multi_dut_ports[1], snappi_extra_params.multi_dut_params.multi_dut_ports[2]] - ingress_duthost = tx_port[0]['duthost'] # Append the ingress here for run_traffic to clear its counters - snappi_extra_params.multi_dut_params.ingress_duthosts.append(ingress_duthost) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[0]['duthost']) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[1]['duthost']) tx_port_id_list = [tx_port[0]["port_id"], tx_port[1]["port_id"]] # add ingress DUT into the set @@ -138,12 +138,14 @@ def run_lossless_response_to_external_pause_storms_test(api, snappi_extra_params=snappi_extra_params) dut_tx_port = rx_port['peer_port'] - dut_rx_port1 = tx_port[0]['peer_port'] - dut_rx_port2 = tx_port[1]['peer_port'] + ingress_dut1 = tx_port[0]['duthost'] + ingress_dut2 = tx_port[1]['duthost'] + ingress_port1 = tx_port[0]['peer_port'] + ingress_port2 = tx_port[1]['peer_port'] # Fetch relevant statistics - pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[ingress_duthost.hostname][dut_tx_port]['tx_drp'] - rx_pkts_1 = get_interface_stats(ingress_duthost, dut_rx_port1)[ingress_duthost.hostname][dut_rx_port1]['rx_ok'] - rx_pkts_2 = get_interface_stats(ingress_duthost, dut_rx_port2)[ingress_duthost.hostname][dut_rx_port2]['rx_ok'] + pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[egress_duthost.hostname][dut_tx_port]['tx_drp'] + rx_pkts_1 = get_interface_stats(ingress_dut1, ingress_port1)[ingress_dut1.hostname][ingress_port1]['rx_ok'] + rx_pkts_2 = get_interface_stats(ingress_dut2, ingress_port2)[ingress_dut2.hostname][ingress_port2]['rx_ok'] # Calculate the total received packets total_rx_pkts = rx_pkts_1 + rx_pkts_2 # Calculate the drop percentage diff --git a/tests/snappi_tests/multidut/pfc/files/lossless_response_to_throttling_pause_storms_helper.py b/tests/snappi_tests/multidut/pfc/files/lossless_response_to_throttling_pause_storms_helper.py index b177fd58282..58c7bc26512 100644 --- a/tests/snappi_tests/multidut/pfc/files/lossless_response_to_throttling_pause_storms_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/lossless_response_to_throttling_pause_storms_helper.py @@ -16,7 +16,7 @@ from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import run_traffic, verify_pause_flow, \ setup_base_traffic_config # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) @@ -88,10 +88,10 @@ def run_lossless_response_to_throttling_pause_storms_test(api, tx_port = [snappi_extra_params.multi_dut_params.multi_dut_ports[1], snappi_extra_params.multi_dut_params.multi_dut_ports[2]] - ingress_duthost = tx_port[0]['duthost'] # Append the ingress here for run_traffic to clear its counters - snappi_extra_params.multi_dut_params.ingress_duthosts.append(ingress_duthost) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[0]['duthost']) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[1]['duthost']) tx_port_id_list = [tx_port[0]["port_id"], tx_port[1]["port_id"]] # add ingress DUT into the set @@ -145,12 +145,14 @@ def run_lossless_response_to_throttling_pause_storms_test(api, snappi_extra_params=snappi_extra_params) dut_tx_port = rx_port['peer_port'] - dut_rx_port1 = tx_port[0]['peer_port'] - dut_rx_port2 = tx_port[1]['peer_port'] + ingress_dut1 = tx_port[0]['duthost'] + ingress_dut2 = tx_port[1]['duthost'] + ingress_port1 = tx_port[0]['peer_port'] + ingress_port2 = tx_port[1]['peer_port'] # Fetch relevant statistics - pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[ingress_duthost.hostname][dut_tx_port]['tx_drp'] - rx_pkts_1 = get_interface_stats(ingress_duthost, dut_rx_port1)[ingress_duthost.hostname][dut_rx_port1]['rx_ok'] - rx_pkts_2 = get_interface_stats(ingress_duthost, dut_rx_port2)[ingress_duthost.hostname][dut_rx_port2]['rx_ok'] + pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[egress_duthost.hostname][dut_tx_port]['tx_drp'] + rx_pkts_1 = get_interface_stats(ingress_dut1, ingress_port1)[ingress_dut1.hostname][ingress_port1]['rx_ok'] + rx_pkts_2 = get_interface_stats(ingress_dut2, ingress_port2)[ingress_dut2.hostname][ingress_port2]['rx_ok'] # Calculate the total received packets total_rx_pkts = rx_pkts_1 + rx_pkts_2 # Calculate the drop percentage diff --git a/tests/snappi_tests/multidut/pfc/files/m2o_fluctuating_lossless_helper.py b/tests/snappi_tests/multidut/pfc/files/m2o_fluctuating_lossless_helper.py index 5da4ec7d6bf..2e31df6280c 100644 --- a/tests/snappi_tests/multidut/pfc/files/m2o_fluctuating_lossless_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/m2o_fluctuating_lossless_helper.py @@ -1,5 +1,4 @@ import logging # noqa: F401 -import random from math import ceil from tests.common.helpers.assertions import pytest_assert, pytest_require # noqa: F401 from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts # noqa: F401 @@ -10,7 +9,7 @@ from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import run_traffic, \ setup_base_traffic_config # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) PAUSE_FLOW_NAME = 'Pause Storm' @@ -22,6 +21,7 @@ DATA_FLOW_DURATION_SEC = 10 DATA_FLOW_DELAY_SEC = 5 SNAPPI_POLL_DELAY_SEC = 2 +UDP_PORT_START = 5000 def run_m2o_fluctuating_lossless_test(api, @@ -75,10 +75,10 @@ def run_m2o_fluctuating_lossless_test(api, tx_port = [snappi_extra_params.multi_dut_params.multi_dut_ports[1], snappi_extra_params.multi_dut_params.multi_dut_ports[2]] - ingress_duthost = tx_port[0]['duthost'] # Append the ingress here for run_traffic to clear its counters - snappi_extra_params.multi_dut_params.ingress_duthosts.append(ingress_duthost) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[0]['duthost']) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[1]['duthost']) tx_port_id_list = [tx_port[0]["port_id"], tx_port[1]["port_id"]] # add ingress DUT into the set @@ -127,12 +127,14 @@ def run_m2o_fluctuating_lossless_test(api, snappi_extra_params=snappi_extra_params) dut_tx_port = rx_port['peer_port'] - dut_rx_port1 = tx_port[0]['peer_port'] - dut_rx_port2 = tx_port[1]['peer_port'] + ingress_dut1 = tx_port[0]['duthost'] + ingress_dut2 = tx_port[1]['duthost'] + ingress_port1 = tx_port[0]['peer_port'] + ingress_port2 = tx_port[1]['peer_port'] # Fetch relevant statistics - pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[ingress_duthost.hostname][dut_tx_port]['tx_drp'] - rx_pkts_1 = get_interface_stats(ingress_duthost, dut_rx_port1)[ingress_duthost.hostname][dut_rx_port1]['rx_ok'] - rx_pkts_2 = get_interface_stats(ingress_duthost, dut_rx_port2)[ingress_duthost.hostname][dut_rx_port2]['rx_ok'] + pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[egress_duthost.hostname][dut_tx_port]['tx_drp'] + rx_pkts_1 = get_interface_stats(ingress_dut1, ingress_port1)[ingress_dut1.hostname][ingress_port1]['rx_ok'] + rx_pkts_2 = get_interface_stats(ingress_dut2, ingress_port2)[ingress_dut2.hostname][ingress_port2]['rx_ok'] # Calculate the total received packets total_rx_pkts = rx_pkts_1 + rx_pkts_2 # Calculate the drop percentage @@ -320,10 +322,6 @@ def __gen_data_flow(testbed_config, flow.tx_rx.port.tx_name = testbed_config.ports[src_port_id].name flow.tx_rx.port.rx_name = testbed_config.ports[dst_port_id].name eth, ipv4, udp = flow.packet.ethernet().ipv4().udp() - src_port = random.randint(5000, 6000) - udp.src_port.increment.start = src_port - udp.src_port.increment.step = 1 - udp.src_port.increment.count = 1 eth.src.value = tx_mac eth.dst.value = rx_mac @@ -343,6 +341,13 @@ def __gen_data_flow(testbed_config, elif 'Test Flow 2 -> 0' in flow.name: eth.pfc_queue.value = pfcQueueValueDict[flow_prio[1]] + global UDP_PORT_START + src_port = UDP_PORT_START + UDP_PORT_START += 1 + udp.src_port.increment.start = src_port + udp.src_port.increment.step = 1 + udp.src_port.increment.count = 1 + ipv4.src.value = tx_port_config.ip ipv4.dst.value = rx_port_config.ip ipv4.priority.choice = ipv4.priority.DSCP diff --git a/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_helper.py b/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_helper.py index 3f34d6a341b..0a536d39664 100644 --- a/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_helper.py @@ -5,7 +5,6 @@ # Compiled at: 2023-02-10 09:15:26 from math import ceil # noqa: F401 import logging # noqa: F401 -import random from tests.common.helpers.assertions import pytest_assert, pytest_require # noqa: F401 from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts # noqa: F401 from tests.common.snappi_tests.snappi_helpers import get_dut_port_id # noqa: F401 @@ -15,19 +14,20 @@ from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import setup_base_traffic_config, \ run_traffic # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) PAUSE_FLOW_NAME = 'Pause Storm' TEST_FLOW_NAME = 'Test Flow' -TEST_FLOW_AGGR_RATE_PERCENT = 30 +TEST_FLOW_AGGR_RATE_PERCENT = 35 BG_FLOW_NAME = 'Background Flow' -BG_FLOW_AGGR_RATE_PERCENT = 25 +BG_FLOW_AGGR_RATE_PERCENT = 22.5 DATA_PKT_SIZE = 1024 DATA_FLOW_DURATION_SEC = 10 DATA_FLOW_DELAY_SEC = 5 SNAPPI_POLL_DELAY_SEC = 2 TOLERANCE_THRESHOLD = 0.05 +UDP_PORT_START = 5000 def run_m2o_oversubscribe_lossless_test(api, @@ -76,10 +76,10 @@ def run_m2o_oversubscribe_lossless_test(api, tx_port = [snappi_extra_params.multi_dut_params.multi_dut_ports[1], snappi_extra_params.multi_dut_params.multi_dut_ports[2]] - ingress_duthost = tx_port[0]['duthost'] # Append the ingress here for run_traffic to clear its counters - snappi_extra_params.multi_dut_params.ingress_duthosts.append(ingress_duthost) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[0]['duthost']) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[1]['duthost']) tx_port_id_list = [tx_port[0]["port_id"], tx_port[1]["port_id"]] # add ingress DUT into the set @@ -130,12 +130,14 @@ def run_m2o_oversubscribe_lossless_test(api, snappi_extra_params=snappi_extra_params) dut_tx_port = rx_port['peer_port'] - dut_rx_port1 = tx_port[0]['peer_port'] - dut_rx_port2 = tx_port[1]['peer_port'] + ingress_dut1 = tx_port[0]['duthost'] + ingress_dut2 = tx_port[1]['duthost'] + ingress_port1 = tx_port[0]['peer_port'] + ingress_port2 = tx_port[1]['peer_port'] # Fetch relevant statistics - pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[ingress_duthost.hostname][dut_tx_port]['tx_drp'] - rx_pkts_1 = get_interface_stats(ingress_duthost, dut_rx_port1)[ingress_duthost.hostname][dut_rx_port1]['rx_ok'] - rx_pkts_2 = get_interface_stats(ingress_duthost, dut_rx_port2)[ingress_duthost.hostname][dut_rx_port2]['rx_ok'] + pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[egress_duthost.hostname][dut_tx_port]['tx_drp'] + rx_pkts_1 = get_interface_stats(ingress_dut1, ingress_port1)[ingress_dut1.hostname][ingress_port1]['rx_ok'] + rx_pkts_2 = get_interface_stats(ingress_dut2, ingress_port2)[ingress_dut2.hostname][ingress_port2]['rx_ok'] # Calculate the total received packets total_rx_pkts = rx_pkts_1 + rx_pkts_2 # Calculate the drop percentage @@ -295,10 +297,6 @@ def __gen_data_flow(testbed_config, flow.tx_rx.port.tx_name = testbed_config.ports[src_port_id].name flow.tx_rx.port.rx_name = testbed_config.ports[dst_port_id].name eth, ipv4, udp = flow.packet.ethernet().ipv4().udp() - src_port = random.randint(5000, 6000) - udp.src_port.increment.start = src_port - udp.src_port.increment.step = 1 - udp.src_port.increment.count = 1 eth.src.value = tx_mac eth.dst.value = rx_mac @@ -318,6 +316,13 @@ def __gen_data_flow(testbed_config, elif 'Test Flow 2 -> 0' in flow.name: eth.pfc_queue.value = pfcQueueValueDict[flow_prio[1]] + global UDP_PORT_START + src_port = UDP_PORT_START + UDP_PORT_START += 1 + udp.src_port.increment.start = src_port + udp.src_port.increment.step = 1 + udp.src_port.increment.count = 1 + ipv4.src.value = tx_port_config.ip ipv4.dst.value = rx_port_config.ip ipv4.priority.choice = ipv4.priority.DSCP diff --git a/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_lossy_helper.py b/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_lossy_helper.py index 302ea6b852a..0ab1ffb53c7 100644 --- a/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_lossy_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossless_lossy_helper.py @@ -15,7 +15,7 @@ from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import run_traffic, \ setup_base_traffic_config # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict from tests.common.portstat_utilities import parse_portstat # noqa: F401 logger = logging.getLogger(__name__) @@ -83,10 +83,10 @@ def run_pfc_m2o_oversubscribe_lossless_lossy_test(api, tx_port = [snappi_extra_params.multi_dut_params.multi_dut_ports[1], snappi_extra_params.multi_dut_params.multi_dut_ports[2]] - ingress_duthost = tx_port[0]['duthost'] # Append the ingress here for run_traffic to clear its counters - snappi_extra_params.multi_dut_params.ingress_duthosts.append(ingress_duthost) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[0]['duthost']) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[1]['duthost']) tx_port_id_list = [tx_port[0]["port_id"], tx_port[1]["port_id"]] # add ingress DUT into the set @@ -134,13 +134,15 @@ def run_pfc_m2o_oversubscribe_lossless_lossy_test(api, exp_dur_sec=DATA_FLOW_DURATION_SEC + DATA_FLOW_DELAY_SEC, snappi_extra_params=snappi_extra_params) - dut_rx_port1 = tx_port[0]['peer_port'] - dut_rx_port2 = tx_port[1]['peer_port'] dut_tx_port = rx_port['peer_port'] + ingress_dut1 = tx_port[0]['duthost'] + ingress_dut2 = tx_port[1]['duthost'] + ingress_port1 = tx_port[0]['peer_port'] + ingress_port2 = tx_port[1]['peer_port'] # Fetch relevant statistics - pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[ingress_duthost.hostname][dut_tx_port]['tx_drp'] - rx_pkts_1 = get_interface_stats(ingress_duthost, dut_rx_port1)[ingress_duthost.hostname][dut_rx_port1]['rx_ok'] - rx_pkts_2 = get_interface_stats(ingress_duthost, dut_rx_port2)[ingress_duthost.hostname][dut_rx_port2]['rx_ok'] + pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[egress_duthost.hostname][dut_tx_port]['tx_drp'] + rx_pkts_1 = get_interface_stats(ingress_dut1, ingress_port1)[ingress_dut1.hostname][ingress_port1]['rx_ok'] + rx_pkts_2 = get_interface_stats(ingress_dut2, ingress_port2)[ingress_dut2.hostname][ingress_port2]['rx_ok'] # Calculate the total received packets total_rx_pkts = rx_pkts_1 + rx_pkts_2 # Calculate the drop percentage diff --git a/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossy_helper.py b/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossy_helper.py index 9bacdc7ade5..d12a29a7dab 100644 --- a/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossy_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/m2o_oversubscribe_lossy_helper.py @@ -5,7 +5,6 @@ # Compiled at: 2023-02-10 09:15:26 from math import ceil # noqa: F401 import logging # noqa: F401 -import random from tests.common.helpers.assertions import pytest_assert, pytest_require # noqa: F401 from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts # noqa: F401 from tests.common.snappi_tests.snappi_helpers import get_dut_port_id # noqa: F401 @@ -15,7 +14,7 @@ from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.common.snappi_tests.traffic_generation import setup_base_traffic_config, \ run_traffic # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) PAUSE_FLOW_NAME = 'Pause Storm' @@ -28,6 +27,7 @@ DATA_FLOW_DELAY_SEC = 5 SNAPPI_POLL_DELAY_SEC = 2 TOLERANCE_THRESHOLD = 0.05 +UDP_PORT_START = 5000 def run_pfc_m2o_oversubscribe_lossy_test(api, @@ -81,10 +81,10 @@ def run_pfc_m2o_oversubscribe_lossy_test(api, tx_port = [snappi_extra_params.multi_dut_params.multi_dut_ports[1], snappi_extra_params.multi_dut_params.multi_dut_ports[2]] - ingress_duthost = tx_port[0]['duthost'] # Append the ingress here for run_traffic to clear its counters - snappi_extra_params.multi_dut_params.ingress_duthosts.append(ingress_duthost) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[0]['duthost']) + snappi_extra_params.multi_dut_params.ingress_duthosts.append(tx_port[1]['duthost']) tx_port_id_list = [tx_port[0]["port_id"], tx_port[1]["port_id"]] # add ingress DUT into the set @@ -136,12 +136,13 @@ def run_pfc_m2o_oversubscribe_lossy_test(api, snappi_extra_params=snappi_extra_params) dut_tx_port = rx_port['peer_port'] - dut_rx_port1 = tx_port[0]['peer_port'] - dut_rx_port2 = tx_port[1]['peer_port'] - - pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[ingress_duthost.hostname][dut_tx_port]['tx_drp'] - rx_pkts_1 = get_interface_stats(ingress_duthost, dut_rx_port1)[ingress_duthost.hostname][dut_rx_port1]['rx_ok'] - rx_pkts_2 = get_interface_stats(ingress_duthost, dut_rx_port2)[ingress_duthost.hostname][dut_rx_port2]['rx_ok'] + ingress_dut1 = tx_port[0]['duthost'] + ingress_dut2 = tx_port[1]['duthost'] + ingress_port1 = tx_port[0]['peer_port'] + ingress_port2 = tx_port[1]['peer_port'] + pkt_drop = get_interface_stats(egress_duthost, dut_tx_port)[egress_duthost.hostname][dut_tx_port]['tx_drp'] + rx_pkts_1 = get_interface_stats(ingress_dut1, ingress_port1)[ingress_dut1.hostname][ingress_port1]['rx_ok'] + rx_pkts_2 = get_interface_stats(ingress_dut2, ingress_port2)[ingress_dut2.hostname][ingress_port2]['rx_ok'] # Calculate the total received packets total_rx_pkts = rx_pkts_1 + rx_pkts_2 # Calculate the drop percentage @@ -318,10 +319,6 @@ def __gen_data_flow(testbed_config, flow.tx_rx.port.tx_name = testbed_config.ports[src_port_id].name flow.tx_rx.port.rx_name = testbed_config.ports[dst_port_id].name eth, ipv4, udp = flow.packet.ethernet().ipv4().udp() - src_port = random.randint(5000, 6000) - udp.src_port.increment.start = src_port - udp.src_port.increment.step = 1 - udp.src_port.increment.count = 1 eth.src.value = tx_mac eth.dst.value = rx_mac @@ -341,6 +338,13 @@ def __gen_data_flow(testbed_config, elif 'Background Flow 2 -> 0' in flow.name: eth.pfc_queue.value = pfcQueueValueDict[flow_prio[1]] + global UDP_PORT_START + src_port = UDP_PORT_START + UDP_PORT_START += 1 + udp.src_port.increment.start = src_port + udp.src_port.increment.step = 1 + udp.src_port.increment.count = 1 + ipv4.src.value = tx_port_config.ip ipv4.dst.value = rx_port_config.ip ipv4.priority.choice = ipv4.priority.DSCP diff --git a/tests/snappi_tests/multidut/pfc/files/multidut_helper.py b/tests/snappi_tests/multidut/pfc/files/multidut_helper.py index fbd84fbf08a..268301c626d 100644 --- a/tests/snappi_tests/multidut/pfc/files/multidut_helper.py +++ b/tests/snappi_tests/multidut/pfc/files/multidut_helper.py @@ -8,7 +8,7 @@ get_lossless_buffer_size, get_pg_dropped_packets,\ disable_packet_aging, enable_packet_aging, sec_to_nanosec,\ get_pfc_frame_count, packet_capture, config_capture_pkt,\ - traffic_flow_mode, calc_pfc_pause_flow_rate # noqa F401 + traffic_flow_mode, calc_pfc_pause_flow_rate, get_tx_frame_count # noqa F401 from tests.common.snappi_tests.port import select_ports, select_tx_port # noqa F401 from tests.common.snappi_tests.snappi_helpers import wait_for_arp # noqa F401 from tests.common.snappi_tests.traffic_generation import setup_base_traffic_config, generate_test_flows, \ @@ -49,7 +49,9 @@ def run_pfc_test(api, bg_prio_list, prio_dscp_map, test_traffic_pause, - snappi_extra_params=None): + test_flow_is_lossless=True, + snappi_extra_params=None, + flow_factor=1): """ Run a multidut PFC test Args: @@ -98,8 +100,8 @@ def run_pfc_test(api, port_id = 0 # Rate percent must be an integer - bg_flow_rate_percent = int(BG_FLOW_AGGR_RATE_PERCENT / len(bg_prio_list)) - test_flow_rate_percent = int(TEST_FLOW_AGGR_RATE_PERCENT / len(test_prio_list)) + bg_flow_rate_percent = int((BG_FLOW_AGGR_RATE_PERCENT / flow_factor) / len(bg_prio_list)) + test_flow_rate_percent = int((TEST_FLOW_AGGR_RATE_PERCENT / flow_factor) / len(test_prio_list)) # Generate base traffic config snappi_extra_params.base_flow_config = setup_base_traffic_config(testbed_config=testbed_config, @@ -195,10 +197,16 @@ def run_pfc_test(api, snappi_extra_params.traffic_flow_config.pause_flow_config["flow_traffic_type"] = \ traffic_flow_mode.FIXED_DURATION + no_of_streams = 1 + if egress_duthost.facts['asic_type'] == "cisco-8000": + if not test_flow_is_lossless: + no_of_streams = 6 + # Generate test flow config generate_test_flows(testbed_config=testbed_config, test_flow_prio_list=test_prio_list, prio_dscp_map=prio_dscp_map, + number_of_streams=no_of_streams, snappi_extra_params=snappi_extra_params) if snappi_extra_params.gen_background_traffic: @@ -283,7 +291,8 @@ def run_pfc_test(api, if test_traffic_pause: # Verify in flight TX packets count relative to switch buffer size - verify_in_flight_buffer_pkts(duthost=egress_duthost, + verify_in_flight_buffer_pkts(egress_duthost=egress_duthost, + ingress_duthost=ingress_duthost, flow_metrics=in_flight_flow_metrics, snappi_extra_params=snappi_extra_params, asic_value=tx_port['asic_value']) @@ -302,3 +311,109 @@ def run_pfc_test(api, # and only test traffic flows are generated verify_rx_frame_count_dut(duthost=duthost, snappi_extra_params=snappi_extra_params) + + +def run_tx_drop_counter( + api, + testbed_config, + port_config_list, + dut_port, + test_prio_list, + prio_dscp_map, + snappi_extra_params=None): + + pytest_assert(testbed_config is not None, 'Failed to get L2/3 testbed config') + + if snappi_extra_params is None: + snappi_extra_params = SnappiTestParams() + + rx_port = snappi_extra_params.multi_dut_params.multi_dut_ports[0] + duthost = rx_port['duthost'] + port_id = 0 + + # Generate base traffic config + snappi_extra_params.base_flow_config = setup_base_traffic_config(testbed_config=testbed_config, + port_config_list=port_config_list, + port_id=port_id) + + test_flow_rate_percent = int(TEST_FLOW_AGGR_RATE_PERCENT / len(test_prio_list)) + + # Set default traffic flow configs if not set + if snappi_extra_params.traffic_flow_config.data_flow_config is None: + snappi_extra_params.traffic_flow_config.data_flow_config = { + "flow_name": TEST_FLOW_NAME, + "flow_dur_sec": DATA_FLOW_DURATION_SEC, + "flow_rate_percent": test_flow_rate_percent, + "flow_rate_pps": None, + "flow_rate_bps": None, + "flow_pkt_size": data_flow_pkt_size, + "flow_pkt_count": None, + "flow_delay_sec": data_flow_delay_sec, + "flow_traffic_type": traffic_flow_mode.FIXED_DURATION + } + + # Generate test flow config + generate_test_flows(testbed_config=testbed_config, + test_flow_prio_list=test_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params) + + flows = testbed_config.flows + + all_flow_names = [flow.name for flow in flows] + data_flow_names = [flow.name for flow in flows if PAUSE_FLOW_NAME not in flow.name] + + duthost.command("sonic-clear counters") + duthost.command("sonic-clear queuecounters") + # Collect metrics from DUT before traffic + tx_ok_frame_count, tx_dut_drop_frames = get_tx_frame_count(duthost, dut_port) + + """ Run traffic """ + tgen_flow_stats, _, _ = run_traffic( + duthost=duthost, + api=api, + config=testbed_config, + data_flow_names=data_flow_names, + all_flow_names=all_flow_names, + exp_dur_sec=DATA_FLOW_DURATION_SEC + + data_flow_delay_sec, + snappi_extra_params=snappi_extra_params) + link_state = None + try: + time.sleep(1) + # Collect metrics from DUT once again + tx_ok_frame_count_1, tx_dut_drop_frames_1 = get_tx_frame_count(duthost, dut_port) + + pytest_assert(tx_ok_frame_count_1 > tx_ok_frame_count and tx_dut_drop_frames_1 == tx_dut_drop_frames, + "DUT Port {} : TX ok counter before {} after {}, Tx drop counter before {} after {} not expected". + format(dut_port, tx_ok_frame_count, tx_ok_frame_count_1, + tx_dut_drop_frames, tx_dut_drop_frames_1)) + + # Set port name of the Ixia port connected to dut_port + port_names = snappi_extra_params.base_flow_config["rx_port_name"] + # Create a link state object for ports + link_state = api.link_state() + # Apply the state to port + link_state.port_names = [port_names] + # Set port down (shut) + link_state.state = link_state.DOWN + api.set_link_state(link_state) + logger.info("Snappi port {} is set to DOWN".format(port_names)) + time.sleep(1) + # Collect metrics from DUT again + _, tx_dut_drop_frames = get_tx_frame_count(duthost, dut_port) + + logger.info("Sleeping for 90 seconds") + time.sleep(90) + # Collect metrics from DUT once again + _, tx_dut_drop_frames_1 = get_tx_frame_count(duthost, dut_port) + + pytest_assert(tx_dut_drop_frames == tx_dut_drop_frames_1, + "Mismatch in TX drop counters post DUT port {} oper down".format(dut_port)) + finally: + if link_state: + # Bring the link back up + link_state.state = link_state.UP + api.set_link_state(link_state) + logger.info("Snappi port {} is set to UP".format(port_names)) + return diff --git a/tests/snappi_tests/multidut/pfc/test_lossless_response_to_external_pause_storms.py b/tests/snappi_tests/multidut/pfc/test_lossless_response_to_external_pause_storms.py index 24310fba42d..1241de71c90 100644 --- a/tests/snappi_tests/multidut/pfc/test_lossless_response_to_external_pause_storms.py +++ b/tests/snappi_tests/multidut/pfc/test_lossless_response_to_external_pause_storms.py @@ -1,6 +1,5 @@ import pytest import logging -from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ @@ -8,8 +7,8 @@ get_snappi_ports_multi_dut, is_snappi_multidut, \ snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config # noqa: F401 from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ - lossless_prio_list # noqa: F401 -from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED + lossless_prio_list, disable_pfcwd # noqa: F401 +from tests.snappi_tests.files.helper import multidut_port_info, setup_ports_and_dut, reboot_duts # noqa: F401 from tests.snappi_tests.multidut.pfc.files.lossless_response_to_external_pause_storms_helper import ( run_lossless_response_to_external_pause_storms_test, ) @@ -18,7 +17,11 @@ pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] -@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED]) +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + def test_lossless_response_to_external_pause_storms_test(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 @@ -27,8 +30,9 @@ def test_lossless_response_to_external_pause_storms_test(snappi_api, lossless_prio_list, # noqa: F811 tbinfo, # noqa: F811 get_snappi_ports, # noqa: F811 - multidut_port_info, - ): # noqa: F811 + setup_ports_and_dut, # noqa: F811 + disable_pfcwd # noqa: F811 + ): """ Run PFC lossless response to external pause storm with many to one traffic pattern @@ -57,31 +61,8 @@ def test_lossless_response_to_external_pause_storms_test(snappi_api, Returns: N/A """ - for testbed_subtype, rdma_ports in multidut_port_info.items(): - tx_port_count = 2 - rx_port_count = 1 - snappi_port_list = get_snappi_ports - pytest_assert(len(snappi_port_list) >= tx_port_count + rx_port_count, - "Need Minimum of 3 ports defined in ansible/files/*links.csv file") - - pytest_assert(len(rdma_ports['tx_ports']) >= tx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut - pytest_assert(len(rdma_ports['rx_ports']) >= rx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - if is_snappi_multidut(duthosts): - snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports, - tx_port_count, rx_port_count, MULTIDUT_TESTBED) - else: - snappi_ports = get_snappi_ports - testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts, - snappi_ports, - snappi_api) all_prio_list = prio_dscp_map.keys() test_prio_list = lossless_prio_list pause_prio_list = test_prio_list diff --git a/tests/snappi_tests/multidut/pfc/test_lossless_response_to_throttling_pause_storms.py b/tests/snappi_tests/multidut/pfc/test_lossless_response_to_throttling_pause_storms.py index 443f25a7ec7..a535178c656 100644 --- a/tests/snappi_tests/multidut/pfc/test_lossless_response_to_throttling_pause_storms.py +++ b/tests/snappi_tests/multidut/pfc/test_lossless_response_to_throttling_pause_storms.py @@ -1,6 +1,5 @@ import pytest import logging -from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ @@ -8,17 +7,21 @@ get_snappi_ports_multi_dut, is_snappi_multidut, \ snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config # noqa: F401 from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ - lossless_prio_list # noqa: F401 -from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED + lossless_prio_list, disable_pfcwd # noqa: F401 from tests.snappi_tests.multidut.pfc.files.lossless_response_to_throttling_pause_storms_helper import ( run_lossless_response_to_throttling_pause_storms_test) from tests.common.snappi_tests.snappi_test_params import SnappiTestParams -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict # noqa: F401 +from tests.snappi_tests.files.helper import setup_ports_and_dut, multidut_port_info # noqa: F401 +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict # noqa: F401 logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] -@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED]) +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + def test_lossless_response_to_throttling_pause_storms(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 @@ -27,7 +30,8 @@ def test_lossless_response_to_throttling_pause_storms(snappi_api, lossless_prio_list, # noqa: F811 get_snappi_ports, # noqa: F811 tbinfo, # noqa: F811 - multidut_port_info): # noqa: F811 + disable_pfcwd, # noqa: F811 + setup_ports_and_dut): # noqa: F811 """ Run PFC lossless response to throttling pause storms @@ -59,31 +63,7 @@ def test_lossless_response_to_throttling_pause_storms(snappi_api, Returns: N/A """ - for testbed_subtype, rdma_ports in multidut_port_info.items(): - tx_port_count = 2 - rx_port_count = 1 - snappi_port_list = get_snappi_ports - pytest_assert(len(snappi_port_list) >= tx_port_count + rx_port_count, - "Need Minimum of 3 ports defined in ansible/files/*links.csv file") - - pytest_assert(len(rdma_ports['tx_ports']) >= tx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - - pytest_assert(len(rdma_ports['rx_ports']) >= rx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - if is_snappi_multidut(duthosts): - snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports, - tx_port_count, rx_port_count, MULTIDUT_TESTBED) - else: - snappi_ports = get_snappi_ports - testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts, - snappi_ports, - snappi_api) + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut all_prio_list = prio_dscp_map.keys() test_prio_list = lossless_prio_list diff --git a/tests/snappi_tests/multidut/pfc/test_m2o_fluctuating_lossless.py b/tests/snappi_tests/multidut/pfc/test_m2o_fluctuating_lossless.py index 8a1f2b841d8..c1c66acea59 100644 --- a/tests/snappi_tests/multidut/pfc/test_m2o_fluctuating_lossless.py +++ b/tests/snappi_tests/multidut/pfc/test_m2o_fluctuating_lossless.py @@ -1,6 +1,5 @@ import pytest import logging -from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ @@ -8,15 +7,19 @@ get_snappi_ports_multi_dut, is_snappi_multidut, \ snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config # noqa: F401 from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ - lossless_prio_list # noqa: F401 -from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED + lossless_prio_list, disable_pfcwd # noqa: F401 +from tests.snappi_tests.files.helper import multidut_port_info, setup_ports_and_dut # noqa: F401 from tests.snappi_tests.multidut.pfc.files.m2o_fluctuating_lossless_helper import run_m2o_fluctuating_lossless_test from tests.common.snappi_tests.snappi_test_params import SnappiTestParams logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] -@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED]) +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + def test_m2o_fluctuating_lossless(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 @@ -25,7 +28,8 @@ def test_m2o_fluctuating_lossless(snappi_api, # noqa: F811 lossless_prio_list, # noqa: F811 get_snappi_ports, # noqa: F811 tbinfo, # noqa: F811 - multidut_port_info): # noqa: F811 + disable_pfcwd, # noqa: F811 + setup_ports_and_dut): # noqa: F811 """ Run PFC Fluctuating Lossless Traffic Congestion with many to one traffic pattern @@ -56,31 +60,7 @@ def test_m2o_fluctuating_lossless(snappi_api, # noqa: F811 Returns: N/A """ - for testbed_subtype, rdma_ports in multidut_port_info.items(): - tx_port_count = 2 - rx_port_count = 1 - snappi_port_list = get_snappi_ports - pytest_assert(len(snappi_port_list) >= tx_port_count + rx_port_count, - "Need Minimum of 3 ports defined in ansible/files/*links.csv file") - - pytest_assert(len(rdma_ports['tx_ports']) >= tx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - - pytest_assert(len(rdma_ports['rx_ports']) >= rx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - if is_snappi_multidut(duthosts): - snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports, - tx_port_count, rx_port_count, MULTIDUT_TESTBED) - else: - snappi_ports = get_snappi_ports - testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts, - snappi_ports, - snappi_api) + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut all_prio_list = prio_dscp_map.keys() test_prio_list = lossless_prio_list diff --git a/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless.py b/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless.py index 63ab26a2f9e..001801dd856 100644 --- a/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless.py +++ b/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless.py @@ -1,6 +1,5 @@ import pytest import logging -from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ @@ -8,17 +7,21 @@ get_snappi_ports_multi_dut, is_snappi_multidut, \ snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config # noqa: F401 from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ - lossless_prio_list # noqa: F401 -from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED + lossless_prio_list, disable_pfcwd # noqa: F401 from tests.snappi_tests.multidut.pfc.files.m2o_oversubscribe_lossless_helper import ( run_m2o_oversubscribe_lossless_test ) from tests.common.snappi_tests.snappi_test_params import SnappiTestParams +from tests.snappi_tests.files.helper import setup_ports_and_dut, multidut_port_info # noqa: F401 logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] -@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED]) +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + def test_m2o_oversubscribe_lossless(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 @@ -27,7 +30,8 @@ def test_m2o_oversubscribe_lossless(snappi_api, # n lossless_prio_list, # noqa: F811 get_snappi_ports, # noqa: F811 tbinfo, - multidut_port_info): # noqa: F811 + disable_pfcwd, # noqa: F811 + setup_ports_and_dut): # noqa: F811 """ Run PFC oversubsription lossless for many to one traffic pattern @@ -56,31 +60,7 @@ def test_m2o_oversubscribe_lossless(snappi_api, # n Returns: N/A """ - for testbed_subtype, rdma_ports in multidut_port_info.items(): - tx_port_count = 2 - rx_port_count = 1 - snappi_port_list = get_snappi_ports - pytest_assert(len(snappi_port_list) >= tx_port_count + rx_port_count, - "Need Minimum of 3 ports defined in ansible/files/*links.csv file") - - pytest_assert(len(rdma_ports['tx_ports']) >= tx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - - pytest_assert(len(rdma_ports['rx_ports']) >= rx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - if is_snappi_multidut(duthosts): - snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports, - tx_port_count, rx_port_count, MULTIDUT_TESTBED) - else: - snappi_ports = get_snappi_ports - testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts, - snappi_ports, - snappi_api) + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut all_prio_list = prio_dscp_map.keys() test_prio_list = lossless_prio_list diff --git a/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless_lossy.py b/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless_lossy.py index 19321a14edd..f9255a21679 100644 --- a/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless_lossy.py +++ b/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossless_lossy.py @@ -1,6 +1,5 @@ import pytest import logging -from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ @@ -8,18 +7,22 @@ get_snappi_ports_multi_dut, is_snappi_multidut, \ snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config # noqa: F401 from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ - lossless_prio_list # noqa: F401 -from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED + lossless_prio_list, disable_pfcwd # noqa: F401 from tests.snappi_tests.multidut.pfc.files.m2o_oversubscribe_lossless_lossy_helper import ( run_pfc_m2o_oversubscribe_lossless_lossy_test ) # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams # noqa: F401 -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict # noqa: F401 +from tests.snappi_tests.files.helper import setup_ports_and_dut, multidut_port_info # noqa: F401 +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict # noqa: F401 logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] -@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED]) +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + def test_m2o_oversubscribe_lossless_lossy(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 @@ -28,7 +31,8 @@ def test_m2o_oversubscribe_lossless_lossy(snappi_api, # noqa: lossless_prio_list, # noqa: F811 get_snappi_ports, # noqa: F811 tbinfo, - multidut_port_info): # noqa: F811 + disable_pfcwd, # noqa: F811 + setup_ports_and_dut): # noqa: F811 """ Run PFC Oversubscribe Lossless Lossy for many to one traffic pattern @@ -58,31 +62,7 @@ def test_m2o_oversubscribe_lossless_lossy(snappi_api, # noqa: Returns: N/A """ - for testbed_subtype, rdma_ports in multidut_port_info.items(): - tx_port_count = 2 - rx_port_count = 1 - snappi_port_list = get_snappi_ports - pytest_assert(len(snappi_port_list) >= tx_port_count + rx_port_count, - "Need Minimum of 3 ports defined in ansible/files/*links.csv file") - - pytest_assert(len(rdma_ports['tx_ports']) >= tx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - - pytest_assert(len(rdma_ports['rx_ports']) >= rx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - if is_snappi_multidut(duthosts): - snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports, - tx_port_count, rx_port_count, MULTIDUT_TESTBED) - else: - snappi_ports = get_snappi_ports - testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts, - snappi_ports, - snappi_api) + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut all_prio_list = prio_dscp_map.keys() test_prio_list = lossless_prio_list diff --git a/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossy.py b/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossy.py index 8847a859dd4..8e62e705175 100644 --- a/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossy.py +++ b/tests/snappi_tests/multidut/pfc/test_m2o_oversubscribe_lossy.py @@ -1,6 +1,5 @@ import pytest import logging -from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \ fanout_graph_facts_multidut # noqa: F401 from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ @@ -8,24 +7,29 @@ get_snappi_ports_multi_dut, is_snappi_multidut, \ snappi_api, snappi_dut_base_config, get_snappi_ports, get_snappi_ports_for_rdma, cleanup_config # noqa: F401 from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ - lossless_prio_list # noqa: F401 -from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED + lossless_prio_list, disable_pfcwd # noqa: F401 from tests.snappi_tests.multidut.pfc.files.m2o_oversubscribe_lossy_helper import run_pfc_m2o_oversubscribe_lossy_test from tests.common.snappi_tests.snappi_test_params import SnappiTestParams +from tests.snappi_tests.files.helper import setup_ports_and_dut, multidut_port_info # noqa: F401 logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] -@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED]) +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (2, 1) + + def test_m2o_oversubscribe_lossy(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 duthosts, prio_dscp_map, # noqa: F811 lossless_prio_list, # noqa: F811 - get_snappi_ports, # noqa: F811o + get_snappi_ports, # noqa: F811 tbinfo, - multidut_port_info): # noqa: F811 + disable_pfcwd, # noqa: F811 + setup_ports_and_dut): # noqa: F811 """ Run PFC oversubscription lossy test under many to one traffic pattern Args: @@ -53,31 +57,7 @@ def test_m2o_oversubscribe_lossy(snappi_api, # Returns: N/A """ - for testbed_subtype, rdma_ports in multidut_port_info.items(): - tx_port_count = 2 - rx_port_count = 1 - snappi_port_list = get_snappi_ports - pytest_assert(len(snappi_port_list) >= tx_port_count + rx_port_count, - "Need Minimum of 3 ports defined in ansible/files/*links.csv file") - - pytest_assert(len(rdma_ports['tx_ports']) >= tx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - - pytest_assert(len(rdma_ports['rx_ports']) >= rx_port_count, - 'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \ - testbed {}, subtype {} in variables.py'. - format(MULTIDUT_TESTBED, testbed_subtype)) - logger.info('Running test for testbed subtype: {}'.format(testbed_subtype)) - if is_snappi_multidut(duthosts): - snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports, - tx_port_count, rx_port_count, MULTIDUT_TESTBED) - else: - snappi_ports = get_snappi_ports - testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts, - snappi_ports, - snappi_api) + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut all_prio_list = prio_dscp_map.keys() bg_prio_list = lossless_prio_list diff --git a/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossless_with_snappi.py b/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossless_with_snappi.py index a3e40541bb5..f1346df8ba0 100644 --- a/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossless_with_snappi.py +++ b/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossless_with_snappi.py @@ -93,6 +93,7 @@ def test_pfc_pause_multi_lossless_prio(snappi_api, # noqa: F81 lossless_prio_list, # noqa: F811 get_snappi_ports, # noqa: F811 tbinfo, + disable_pfcwd, # noqa: F811 setup_ports_and_dut): # noqa: F811 """ @@ -141,12 +142,12 @@ def test_pfc_pause_single_lossless_prio_reboot(snappi_api, # n fanout_graph_facts_multidut, # noqa: F811 duthosts, localhost, + enum_dut_lossless_prio_with_completeness_level, # noqa: F811 prio_dscp_map, # noqa: F811 lossless_prio_list, # noqa: F811 all_prio_list, # noqa: F811 get_snappi_ports, # noqa: F811 tbinfo, # noqa: F811 - enum_dut_lossless_prio_with_completeness_level, # noqa: F811 setup_ports_and_dut, # noqa: F811 disable_pfcwd, # noqa: F811 reboot_duts): # noqa: F811 @@ -159,10 +160,10 @@ def test_pfc_pause_single_lossless_prio_reboot(snappi_api, # n fanout_graph_facts_multidut (pytest fixture): fanout graph duthosts (pytest fixture): list of DUTs localhost (pytest fixture): localhost handle + enum_dut_lossless_prio_with_completeness_level (str): lossless priority to test, e.g., 's6100-1|3' all_prio_list (pytest fixture): list of all the priorities prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). lossless_prio_list (pytest fixture): list of all the lossless priorities - enum_dut_lossless_prio_with_completeness_level (str): lossless priority to test, e.g., 's6100-1|3' tbinfo (pytest fixture): fixture provides information about testbed get_snappi_ports (pytest fixture): gets snappi ports and connected DUT port info and returns as a list Returns: diff --git a/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossy_with_snappi.py b/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossy_with_snappi.py index 8a03b72ac0e..ac1e0458f9b 100644 --- a/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossy_with_snappi.py +++ b/tests/snappi_tests/multidut/pfc/test_multidut_pfc_pause_lossy_with_snappi.py @@ -67,6 +67,11 @@ def test_pfc_pause_single_lossy_prio(snappi_api, # noqa: F811 snappi_extra_params = SnappiTestParams() snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + flow_factor = 1 + + if snappi_ports[0]['asic_type'] == 'cisco-8000' and int(snappi_ports[0]['speed']) > 200000: + flow_factor = int(snappi_ports[0]['speed']) / 200000 + run_pfc_test(api=snappi_api, testbed_config=testbed_config, port_config_list=port_config_list, @@ -78,7 +83,9 @@ def test_pfc_pause_single_lossy_prio(snappi_api, # noqa: F811 bg_prio_list=bg_prio_list, prio_dscp_map=prio_dscp_map, test_traffic_pause=False, - snappi_extra_params=snappi_extra_params) + test_flow_is_lossless=False, + snappi_extra_params=snappi_extra_params, + flow_factor=flow_factor) def test_pfc_pause_multi_lossy_prio(snappi_api, # noqa: F811 @@ -116,6 +123,11 @@ def test_pfc_pause_multi_lossy_prio(snappi_api, # noqa: F811 snappi_extra_params = SnappiTestParams() snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + flow_factor = 1 + + if snappi_ports[0]['asic_type'] == 'cisco-8000' and int(snappi_ports[0]['speed']) > 200000: + flow_factor = int(snappi_ports[0]['speed']) / 200000 + run_pfc_test(api=snappi_api, testbed_config=testbed_config, port_config_list=port_config_list, @@ -127,7 +139,9 @@ def test_pfc_pause_multi_lossy_prio(snappi_api, # noqa: F811 bg_prio_list=bg_prio_list, prio_dscp_map=prio_dscp_map, test_traffic_pause=False, - snappi_extra_params=snappi_extra_params) + test_flow_is_lossless=False, + snappi_extra_params=snappi_extra_params, + flow_factor=flow_factor) @pytest.mark.disable_loganalyzer @@ -136,7 +150,7 @@ def test_pfc_pause_single_lossy_prio_reboot(snappi_api, # noqa: F811 fanout_graph_facts_multidut, # noqa: F811 duthosts, localhost, - enum_dut_lossy_prio, + enum_dut_lossy_prio_with_completeness_level, prio_dscp_map, # noqa: F811 lossy_prio_list, # noqa: F811 all_prio_list, # noqa: F811 @@ -154,7 +168,7 @@ def test_pfc_pause_single_lossy_prio_reboot(snappi_api, # noqa: F811 fanout_graph_facts_multidut (pytest fixture): fanout graph duthosts (pytest fixture): list of DUTs localhost (pytest fixture): localhost handle - enum_dut_lossy_prio (str): name of lossy priority to test, e.g., 's6100-1|2' + enum_dut_lossy_prio_with_completeness_level (str): name of lossy priority to test, e.g., 's6100-1|2' prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). lossy_prio_list (pytest fixture): list of all the lossy priorities all_prio_list (pytest fixture): list of all the priorities @@ -166,7 +180,7 @@ def test_pfc_pause_single_lossy_prio_reboot(snappi_api, # noqa: F811 """ testbed_config, port_config_list, snappi_ports = setup_ports_and_dut - _, lossy_prio = enum_dut_lossy_prio.split('|') + _, lossy_prio = enum_dut_lossy_prio_with_completeness_level.split('|') lossy_prio = int(lossy_prio) pause_prio_list = [lossy_prio] test_prio_list = [lossy_prio] @@ -176,6 +190,11 @@ def test_pfc_pause_single_lossy_prio_reboot(snappi_api, # noqa: F811 snappi_extra_params = SnappiTestParams() snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + flow_factor = 1 + + if snappi_ports[0]['asic_type'] == 'cisco-8000' and int(snappi_ports[0]['speed']) > 200000: + flow_factor = int(snappi_ports[0]['speed']) / 200000 + run_pfc_test(api=snappi_api, testbed_config=testbed_config, port_config_list=port_config_list, @@ -187,7 +206,9 @@ def test_pfc_pause_single_lossy_prio_reboot(snappi_api, # noqa: F811 bg_prio_list=bg_prio_list, prio_dscp_map=prio_dscp_map, test_traffic_pause=False, - snappi_extra_params=snappi_extra_params) + test_flow_is_lossless=False, + snappi_extra_params=snappi_extra_params, + flow_factor=flow_factor) @pytest.mark.disable_loganalyzer @@ -231,6 +252,11 @@ def test_pfc_pause_multi_lossy_prio_reboot(snappi_api, # noqa: F811 snappi_extra_params = SnappiTestParams() snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + flow_factor = 1 + + if snappi_ports[0]['asic_type'] == 'cisco-8000' and int(snappi_ports[0]['speed']) > 200000: + flow_factor = int(snappi_ports[0]['speed']) / 200000 + run_pfc_test(api=snappi_api, testbed_config=testbed_config, port_config_list=port_config_list, @@ -242,4 +268,6 @@ def test_pfc_pause_multi_lossy_prio_reboot(snappi_api, # noqa: F811 bg_prio_list=bg_prio_list, prio_dscp_map=prio_dscp_map, test_traffic_pause=False, - snappi_extra_params=snappi_extra_params) + test_flow_is_lossless=False, + snappi_extra_params=snappi_extra_params, + flow_factor=flow_factor) diff --git a/tests/snappi_tests/multidut/pfc/test_tx_drop_counter_with_snappi.py b/tests/snappi_tests/multidut/pfc/test_tx_drop_counter_with_snappi.py new file mode 100644 index 00000000000..a4baa17e558 --- /dev/null +++ b/tests/snappi_tests/multidut/pfc/test_tx_drop_counter_with_snappi.py @@ -0,0 +1,70 @@ +import pytest +import logging + +from tests.common.helpers.assertions import pytest_require # noqa: F401 +from tests.common.fixtures.conn_graph_facts import conn_graph_facts,\ + fanout_graph_facts, fanout_graph_facts_multidut # noqa F401 +from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \ + snappi_api, snappi_dut_base_config, get_snappi_ports_for_rdma, cleanup_config, get_snappi_ports_multi_dut, \ + snappi_testbed_config, get_snappi_ports_single_dut, \ + get_snappi_ports, is_snappi_multidut # noqa F401 +from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \ + lossless_prio_list # noqa F401 +from tests.snappi_tests.multidut.pfc.files.multidut_helper import run_tx_drop_counter +from tests.common.snappi_tests.snappi_test_params import SnappiTestParams +from tests.snappi_tests.files.helper import multidut_port_info, setup_ports_and_dut # noqa: F401 + +logger = logging.getLogger(__name__) +pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] + + +@pytest.fixture(autouse=True) +def number_of_tx_rx_ports(): + yield (1, 1) + + +def test_tx_drop_counter( + snappi_api, # noqa F811 + lossless_prio_list, # noqa F811 + prio_dscp_map,# noqa F811 + setup_ports_and_dut # noqa F811 + ): + """ + Test if device under test (DUT) is incrementing + the tx_drop counter of the egress port when oper down + + Topology: + snappi (1) -> DUT -> snappi (2) + + Test steps: + 1) Bring the egress DUT port to oper down state by changing the IXIA port to down state + 2) With lossless priority configured on the egress port the Xon frames or any control plane pkts + previously being sent out shouldnt be sent and also it shouldn't be accounted for as tx drop counter + + Args: + snappi_api (pytest fixture): SNAPPI session + lossless_prio_list (pytest fixture): list of all the lossless priorities + prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority). + + Returns: + N/A + """ + + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut + + logger.info("Snappi Ports : {}".format(snappi_ports)) + + test_prio_list = lossless_prio_list + + snappi_extra_params = SnappiTestParams() + snappi_extra_params.multi_dut_params.multi_dut_ports = snappi_ports + + run_tx_drop_counter( + api=snappi_api, + testbed_config=testbed_config, + port_config_list=port_config_list, + dut_port=snappi_ports[0]['peer_port'], + test_prio_list=test_prio_list, + prio_dscp_map=prio_dscp_map, + snappi_extra_params=snappi_extra_params + ) diff --git a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_basic_helper.py b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_basic_helper.py index 93995f72bda..ebb62a3cf1f 100644 --- a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_basic_helper.py +++ b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_basic_helper.py @@ -1,7 +1,6 @@ import time from math import ceil import logging -import random from tests.common.helpers.assertions import pytest_assert from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts # noqa: F401 @@ -12,7 +11,7 @@ from tests.common.snappi_tests.port import select_ports, select_tx_port # noqa: F401 from tests.common.snappi_tests.snappi_helpers import wait_for_arp # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) @@ -24,6 +23,7 @@ DATA_PKT_SIZE = 1024 SNAPPI_POLL_DELAY_SEC = 2 DEVIATION = 0.3 +UDP_PORT_START = 5000 def run_pfcwd_basic_test(api, @@ -143,8 +143,8 @@ def run_pfcwd_basic_test(api, data_pkt_size=DATA_PKT_SIZE, prio_list=prio_list, prio_dscp_map=prio_dscp_map, - traffic_rate=99.98 if cisco_platform else 100.0, - number_of_streams=2 if cisco_platform else 1) + traffic_rate=49.99 if cisco_platform else 100.0, + number_of_streams=1) flows = testbed_config.flows @@ -313,10 +313,6 @@ def __gen_traffic(testbed_config, data_flow.tx_rx.port.rx_name = rx_port_name eth, ipv4, udp = data_flow.packet.ethernet().ipv4().udp() - src_port = random.randint(5000, 6000) - udp.src_port.increment.start = src_port - udp.src_port.increment.step = 1 - udp.src_port.increment.count = number_of_streams eth.src.value = tx_mac eth.dst.value = rx_mac @@ -325,6 +321,13 @@ def __gen_traffic(testbed_config, else: eth.pfc_queue.value = pfcQueueValueDict[prio] + global UDP_PORT_START + src_port = UDP_PORT_START + UDP_PORT_START += number_of_streams + udp.src_port.increment.start = src_port + udp.src_port.increment.step = 1 + udp.src_port.increment.count = number_of_streams + ipv4.src.value = tx_port_config.ip ipv4.dst.value = rx_port_config.ip ipv4.priority.choice = ipv4.priority.DSCP diff --git a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_burst_storm_helper.py b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_burst_storm_helper.py index daa2048a2af..afa8feff005 100644 --- a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_burst_storm_helper.py +++ b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_burst_storm_helper.py @@ -10,7 +10,7 @@ from tests.common.snappi_tests.port import select_ports, select_tx_port # noqa: F401 from tests.common.snappi_tests.snappi_helpers import wait_for_arp from tests.common.snappi_tests.snappi_test_params import SnappiTestParams -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) diff --git a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_multi_node_helper.py b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_multi_node_helper.py index f1e4fd6f2c9..4a20224615f 100644 --- a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_multi_node_helper.py +++ b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_multi_node_helper.py @@ -12,16 +12,14 @@ from tests.common.snappi_tests.port import select_ports # noqa: F401 from tests.common.snappi_tests.snappi_helpers import wait_for_arp # noqa: F401 from tests.common.snappi_tests.snappi_test_params import SnappiTestParams -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) PAUSE_FLOW_NAME = 'Pause Storm' WARM_UP_TRAFFIC_NAME = "Warm Up Traffic" TEST_FLOW_NAME = 'Test Flow' -TEST_FLOW_AGGR_RATE_PERCENT = 45 BG_FLOW_NAME = 'Background Flow' -BG_FLOW_AGGR_RATE_PERCENT = 45 WARM_UP_TRAFFIC_DUR = 1 DATA_PKT_SIZE = 1024 SNAPPI_POLL_DELAY_SEC = 2 @@ -112,10 +110,10 @@ def run_pfcwd_multi_node_test(api, speed_str = testbed_config.layer1[0].speed speed_gbps = int(speed_str.split('_')[1]) + TEST_FLOW_AGGR_RATE_PERCENT = 45 + BG_FLOW_AGGR_RATE_PERCENT = 45 # Backplane is 200G in Cisco platforms. if speed_gbps > 200 and cisco_platform: - global TEST_FLOW_AGGR_RATE_PERCENT - global BG_FLOW_AGGR_RATE_PERCENT TEST_FLOW_AGGR_RATE_PERCENT = TEST_FLOW_AGGR_RATE_PERCENT * 200 / speed_gbps BG_FLOW_AGGR_RATE_PERCENT = BG_FLOW_AGGR_RATE_PERCENT * 200 / speed_gbps diff --git a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_runtime_traffic_helper.py b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_runtime_traffic_helper.py index 8e97d4f62df..73c1bf53cf2 100644 --- a/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_runtime_traffic_helper.py +++ b/tests/snappi_tests/multidut/pfcwd/files/pfcwd_multidut_runtime_traffic_helper.py @@ -1,6 +1,5 @@ import time import logging -import random from tests.common.helpers.assertions import pytest_assert from tests.common.snappi_tests.snappi_helpers import get_dut_port_id # noqa: F401 @@ -8,7 +7,7 @@ from tests.common.snappi_tests.port import select_ports, select_tx_port # noqa: F401 from tests.common.snappi_tests.snappi_helpers import wait_for_arp from tests.common.snappi_tests.snappi_test_params import SnappiTestParams -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict DATA_FLOW_NAME = "Data Flow" DATA_PKT_SIZE = 1024 @@ -16,6 +15,7 @@ PFCWD_START_DELAY_SEC = 3 SNAPPI_POLL_DELAY_SEC = 2 TOLERANCE_THRESHOLD = 0.05 +UDP_PORT_START = 5000 logger = logging.getLogger(__name__) @@ -146,10 +146,6 @@ def __gen_traffic(testbed_config, data_flow.tx_rx.port.rx_name = rx_port_name eth, ipv4, udp = data_flow.packet.ethernet().ipv4().udp() - src_port = random.randint(5000, 6000) - udp.src_port.increment.start = src_port - udp.src_port.increment.step = 1 - udp.src_port.increment.count = 1 eth.src.value = tx_mac eth.dst.value = rx_mac @@ -158,6 +154,11 @@ def __gen_traffic(testbed_config, else: eth.pfc_queue.value = pfcQueueValueDict[prio] + src_port = UDP_PORT_START + eth.pfc_queue.value + udp.src_port.increment.start = src_port + udp.src_port.increment.step = 1 + udp.src_port.increment.count = 1 + ipv4.src.value = tx_port_config.ip ipv4.dst.value = rx_port_config.ip ipv4.priority.choice = ipv4.priority.DSCP diff --git a/tests/snappi_tests/multidut/pfcwd/test_multidut_pfcwd_basic_with_snappi.py b/tests/snappi_tests/multidut/pfcwd/test_multidut_pfcwd_basic_with_snappi.py index daf00e18751..1584c00fdd6 100644 --- a/tests/snappi_tests/multidut/pfcwd/test_multidut_pfcwd_basic_with_snappi.py +++ b/tests/snappi_tests/multidut/pfcwd/test_multidut_pfcwd_basic_with_snappi.py @@ -1,6 +1,7 @@ import pytest import random import logging +import time import re from collections import defaultdict from tests.common.helpers.assertions import pytest_require, pytest_assert # noqa: F401 @@ -13,10 +14,12 @@ from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, lossless_prio_list # noqa F401 from tests.common.reboot import reboot # noqa: F401 from tests.common.utilities import wait_until # noqa: F401 +from tests.common.config_reload import config_reload +from tests.common.platform.interface_utils import check_interface_status_of_up_ports from tests.snappi_tests.multidut.pfcwd.files.pfcwd_multidut_basic_helper import run_pfcwd_basic_test from tests.common.snappi_tests.snappi_test_params import SnappiTestParams from tests.snappi_tests.files.helper import skip_pfcwd_test, reboot_duts, \ - setup_ports_and_dut # noqa: F401 + setup_ports_and_dut, multidut_port_info # noqa: F401 logger = logging.getLogger(__name__) pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')] @@ -29,6 +32,26 @@ def number_of_tx_rx_ports(): yield (1, 1) +@pytest.fixture(autouse=False) +def save_restore_config(setup_ports_and_dut): + testbed_config, port_config_list, snappi_ports = setup_ports_and_dut + timestamp = time.time() + dest = f'~/{timestamp}' + + for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): + duthost.shell(f"sudo mkdir {dest}; sudo cp /etc/sonic/config*.json {dest}") + duthost.shell("sudo config save -y") + + yield + + for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): + duthost.shell(f"sudo cp {dest}/config_db*json /etc/sonic/") + duthost.shell("sudo config save -y") + + for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): + config_reload(duthost) + + @pytest.mark.parametrize("trigger_pfcwd", [True, False]) def test_pfcwd_basic_single_lossless_prio(snappi_api, # noqa: F811 conn_graph_facts, # noqa: F811 @@ -170,10 +193,10 @@ def test_pfcwd_basic_multi_lossless_prio_reboot(snappi_api, # no conn_graph_facts, # noqa F811 fanout_graph_facts_multidut, # noqa F811 localhost, - duthosts, - enum_dut_lossless_prio_with_completeness_level, # noqa: F811 + lossless_prio_list, # noqa F811 tbinfo, # noqa: F811 prio_dscp_map, # noqa F811 + setup_ports_and_dut, # noqa: F811 reboot_duts, # noqa: F811 trigger_pfcwd): """ @@ -221,7 +244,8 @@ def test_pfcwd_basic_single_lossless_prio_service_restart(snappi_api, prio_dscp_map, # noqa: F811 restart_service, trigger_pfcwd, - setup_ports_and_dut): # noqa: F811 + setup_ports_and_dut, # noqa: F811 + save_restore_config): """ Verify PFC watchdog basic test works on a single lossless priority after various service restarts @@ -251,6 +275,7 @@ def test_pfcwd_basic_single_lossless_prio_service_restart(snappi_api, logger.info('Port dictionary:{}'.format(ports_dict)) for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): + up_bgp_neighbors = duthost.get_bgp_neighbors_per_asic("established") # Record current state of critical services. duthost.critical_services_fully_started() @@ -264,6 +289,11 @@ def test_pfcwd_basic_single_lossless_prio_service_restart(snappi_api, logger.info("Wait until the system is stable") pytest_assert(wait_until(WAIT_TIME, INTERVAL, 0, duthost.critical_services_fully_started), "Not all critical services are fully started") + pytest_assert(wait_until(WAIT_TIME, INTERVAL, 0, check_interface_status_of_up_ports, duthost), + "Not all interfaces are up.") + pytest_assert(wait_until( + WAIT_TIME, INTERVAL, 0, duthost.check_bgp_session_state_all_asics, up_bgp_neighbors, "established")) + else: for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): logger.info("Issuing a restart of service {} on the dut {}".format(restart_service, duthost.hostname)) @@ -300,7 +330,8 @@ def test_pfcwd_basic_multi_lossless_prio_restart_service(snappi_api, prio_dscp_map, # noqa F811 restart_service, setup_ports_and_dut, # noqa: F811 - trigger_pfcwd): + trigger_pfcwd, + save_restore_config): """ Verify PFC watchdog basic test works on multiple lossless priorities after various service restarts @@ -330,16 +361,26 @@ def test_pfcwd_basic_multi_lossless_prio_restart_service(snappi_api, logger.info('Port dictionary:{}'.format(ports_dict)) for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): + up_bgp_neighbors = duthost.get_bgp_neighbors_per_asic("established") + # Record current state of critical services. + duthost.critical_services_fully_started() + asic_list = ports_dict[duthost.hostname] - for asic in asic_list: - asic_id = re.match(r"(asic)(\d+)", asic).group(2) - proc = 'swss@' + asic_id - logger.info("Issuing a restart of service {} on the dut {}".format(proc, duthost.hostname)) - duthost.command("sudo systemctl reset-failed {}".format(proc)) - duthost.command("sudo systemctl restart {}".format(proc)) - logger.info("Wait until the system is stable") - pytest_assert(wait_until(WAIT_TIME, INTERVAL, 0, duthost.critical_services_fully_started), - "Not all critical services are fully started") + asic = random.sample(asic_list, 1)[0] + asic_id = re.match(r"(asic)(\d+)", asic).group(2) + proc = 'swss@' + asic_id + + logger.info("Issuing a restart of service {} on the dut {}".format(proc, duthost.hostname)) + duthost.command("sudo systemctl reset-failed {}".format(proc)) + duthost.command("sudo systemctl restart {}".format(proc)) + logger.info("Wait until the system is stable") + pytest_assert(wait_until(WAIT_TIME, INTERVAL, 0, duthost.critical_services_fully_started), + "Not all critical services are fully started") + pytest_assert(wait_until(WAIT_TIME, INTERVAL, 0, check_interface_status_of_up_ports, duthost), + "Not all interfaces are up.") + pytest_assert(wait_until( + WAIT_TIME, INTERVAL, 0, duthost.check_bgp_session_state_all_asics, up_bgp_neighbors, "established")) + else: for duthost in list(set([snappi_ports[0]['duthost'], snappi_ports[1]['duthost']])): logger.info("Issuing a restart of service {} on the dut {}".format(restart_service, duthost.hostname)) diff --git a/tests/snappi_tests/pfc/files/helper.py b/tests/snappi_tests/pfc/files/helper.py index 89216bf0b96..564b352076d 100644 --- a/tests/snappi_tests/pfc/files/helper.py +++ b/tests/snappi_tests/pfc/files/helper.py @@ -290,7 +290,8 @@ def run_pfc_test(api, if test_traffic_pause: # Verify in flight TX packets count relative to switch buffer size - verify_in_flight_buffer_pkts(duthost=duthost, + verify_in_flight_buffer_pkts(egress_duthost=duthost, + ingress_duthost=duthost, flow_metrics=in_flight_flow_metrics, snappi_extra_params=snappi_extra_params) else: diff --git a/tests/snappi_tests/pfcwd/files/pfcwd_basic_helper.py b/tests/snappi_tests/pfcwd/files/pfcwd_basic_helper.py index da163989f58..ea1abc8458c 100644 --- a/tests/snappi_tests/pfcwd/files/pfcwd_basic_helper.py +++ b/tests/snappi_tests/pfcwd/files/pfcwd_basic_helper.py @@ -11,7 +11,7 @@ enable_packet_aging, start_pfcwd, sec_to_nanosec from tests.common.snappi_tests.port import select_ports, select_tx_port from tests.common.snappi_tests.snappi_helpers import wait_for_arp -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) diff --git a/tests/snappi_tests/pfcwd/files/pfcwd_burst_storm_helper.py b/tests/snappi_tests/pfcwd/files/pfcwd_burst_storm_helper.py index d6f9a18f2d2..a13a20fe74a 100644 --- a/tests/snappi_tests/pfcwd/files/pfcwd_burst_storm_helper.py +++ b/tests/snappi_tests/pfcwd/files/pfcwd_burst_storm_helper.py @@ -9,7 +9,7 @@ enable_packet_aging, start_pfcwd, sec_to_nanosec from tests.common.snappi_tests.port import select_ports, select_tx_port from tests.common.snappi_tests.snappi_helpers import wait_for_arp -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) diff --git a/tests/snappi_tests/pfcwd/files/pfcwd_multi_node_helper.py b/tests/snappi_tests/pfcwd/files/pfcwd_multi_node_helper.py index 4cdfe5b7228..e6aeb6202be 100644 --- a/tests/snappi_tests/pfcwd/files/pfcwd_multi_node_helper.py +++ b/tests/snappi_tests/pfcwd/files/pfcwd_multi_node_helper.py @@ -10,7 +10,7 @@ start_pfcwd, enable_packet_aging, get_pfcwd_poll_interval, get_pfcwd_detect_time, sec_to_nanosec from tests.common.snappi_tests.port import select_ports from tests.common.snappi_tests.snappi_helpers import wait_for_arp -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict logger = logging.getLogger(__name__) diff --git a/tests/snappi_tests/pfcwd/files/pfcwd_runtime_traffic_helper.py b/tests/snappi_tests/pfcwd/files/pfcwd_runtime_traffic_helper.py index 14452d6cc41..832ffc991ea 100644 --- a/tests/snappi_tests/pfcwd/files/pfcwd_runtime_traffic_helper.py +++ b/tests/snappi_tests/pfcwd/files/pfcwd_runtime_traffic_helper.py @@ -6,7 +6,7 @@ from tests.common.snappi_tests.common_helpers import start_pfcwd, stop_pfcwd, sec_to_nanosec from tests.common.snappi_tests.port import select_ports, select_tx_port from tests.common.snappi_tests.snappi_helpers import wait_for_arp -from tests.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict +from tests.common.snappi_tests.variables import pfcQueueGroupSize, pfcQueueValueDict DATA_FLOW_NAME = "Data Flow" WARM_UP_TRAFFIC_NAME = "Warm Up Traffic" diff --git a/tests/snappi_tests/variables.py b/tests/snappi_tests/variables.py index c862c0c2f3b..35b22d784a6 100644 --- a/tests/snappi_tests/variables.py +++ b/tests/snappi_tests/variables.py @@ -76,24 +76,6 @@ } } -dut_ip_start = '20.1.1.0' -snappi_ip_start = '20.1.1.1' -prefix_length = 31 - -dut_ipv6_start = '2000:1::1' -snappi_ipv6_start = '2000:1::2' -v6_prefix_length = 126 - -pfcQueueGroupSize = 8 # can have values 4 or 8 -pfcQueueValueDict = {0: 0, - 1: 1, - 2: 0, - 3: 3, - 4: 2, - 5: 0, - 6: 1, - 7: 0} - def create_ip_list(value, count, mask=32, incr=0): ''' @@ -153,7 +135,6 @@ def get_host_addresses(subnet, count): T2_SNAPPI_AS_NUM = 65400 T2_DUT_AS_NUM = 65100 BGP_TYPE = 'ebgp' -t1_t2_device_hostnames = ["sonic-t1", "sonic-t2-uplink", "sonic-t2-downlink"] SNAPPI_TRIGGER = 60 # timeout value for snappi operation DUT_TRIGGER = 180 # timeout value for dut operation @@ -162,18 +143,6 @@ def get_host_addresses(subnet, count): v4_prefix_length = int(ipv4_subnet.split('/')[1]) v6_prefix_length = int(ipv6_subnet.split('/')[1]) -# *********** Performance case variables **************** -# asic_value is None if it's non-chassis based or single line card -PERFORMANCE_PORTS = { - 'Traffic_Tx_Ports': [ - {'port_name': 'Ethernet0', 'hostname': t1_t2_device_hostnames[1], 'asic_value': 'asic0'}, - {'port_name': 'Ethernet88', 'hostname': t1_t2_device_hostnames[1], 'asic_value': 'asic0'}, - ], - 'Uplink BGP Session': [ - {'port_name': 'Ethernet192', 'hostname': t1_t2_device_hostnames[1], 'asic_value': 'asic1'}, - {'port_name': 'Ethernet144', 'hostname': t1_t2_device_hostnames[1], 'asic_value': 'asic1'}, - ] - } # *********** Outbound case variables **************** # Expect the T1 and T2 ports to be routed ports and not part of any portchannel. T1_SNAPPI_AS_NUM = 65300 @@ -184,53 +153,75 @@ def get_host_addresses(subnet, count): snappi_community_for_t2 = ["8075:316", "8075:10400"] fanout_presence = True # Note: Increase the MaxSessions in /etc/ssh/sshd_config if the number of fanout ports used is more than 10 -t2_uplink_fanout_info = [ - { - 'fanout_ip': '152.148.150.143', - 'port_mapping': [{'fanout_port': 'Ethernet0', 'uplink_port': 'Ethernet0'}, - {'fanout_port': 'Ethernet88', 'uplink_port': 'Ethernet88'}, - {'fanout_port': 'Ethernet192', 'uplink_port': 'Ethernet192'}, - {'fanout_port': 'Ethernet144', 'uplink_port': 'Ethernet144'}] - }, - { - 'fanout_ip': '152.148.150.142', - 'port_mapping': [{'fanout_port': 'Ethernet2', 'uplink_port': 'Ethernet2'}, - {'fanout_port': 'Ethernet3', 'uplink_port': 'Ethernet3'}, - {'fanout_port': 'Ethernet4', 'uplink_port': 'Ethernet4'}, - {'fanout_port': 'Ethernet5', 'uplink_port': 'Ethernet5'}] - } - ] +t2_uplink_fanout_info = { + 'HW_PLATFORM1': { + 'fanout_ip': '10.3.146.9', + 'port_mapping': [ + {'fanout_port': 'Ethernet64', 'uplink_port': 'Ethernet0'}, + {'fanout_port': 'Ethernet68', 'uplink_port': 'Ethernet8'}, + {'fanout_port': 'Ethernet72', 'uplink_port': 'Ethernet16'}, + {'fanout_port': 'Ethernet76', 'uplink_port': 'Ethernet24'} + ] + }, + 'HW_PLATFORM2': {} +} + # The order of hostname is very important for the outbound test (T1, T2 Uplink, T2 Downlink and Supervisor) -t1_t2_device_hostnames = ["sonic-t1", "sonic-t2-uplink", "sonic-t2-downlink", "sonic-t2-supervisor"] +t1_t2_device_hostnames = { + 'HW_PLATFORM1': [ + "sonic-t1", "sonic-t2-uplink", "sonic-t2-downlink", "sonic-t2-supervisor" + ], + 'HW_PLATFORM2': [ + ] +} + t1_ports = { - t1_t2_device_hostnames[0]: - [ - 'Ethernet8', - 'Ethernet16' - ] - } + 'HW_PLATFORM1': { + t1_t2_device_hostnames['HW_PLATFORM1'][0]: + [ + 'Ethernet24', + 'Ethernet28' + ] + }, + 'HW_PLATFORM2': { + } +} # asic_value is None if it's non-chassis based or single line card t2_uplink_portchannel_members = { - t1_t2_device_hostnames[1]: - { - 'asic0': - { - 'PortChannel0': ['Ethernet0', 'Ethernet88'] - }, - 'asic1': - { - 'PortChannel1': ['Ethernet192', 'Ethernet144'] - } - } - } -# TODO: Multiple interconnected ports scenario -t1_side_interconnected_port = 'Ethernet120' -t2_side_interconnected_port = {'port_name': 'Ethernet272', 'asic_value': 'asic1'} + 'HW_PLATFORM1': { + t1_t2_device_hostnames['HW_PLATFORM1'][1]: { + 'asic0': { + 'PortChannel0': ['Ethernet0'], + 'PortChannel1': ['Ethernet8'], + 'PortChannel2': ['Ethernet16'], + 'PortChannel3': ['Ethernet24'], + }, + 'asic1': { + } + } + }, + 'HW_PLATFORM2': { + + } +} -routed_port_count = 1+len(t1_ports[t1_t2_device_hostnames[0]]) +# TODO: Multiple interconnected ports scenario +t1_side_interconnected_port = { + 'HW_PLATFORM1': 'Ethernet0', + 'HW_PLATFORM2': None +} + +t2_side_interconnected_port = { + 'HW_PLATFORM1': {'port_name': 'Ethernet272', 'asic_value': 'asic1'}, + 'HW_PLATFORM2': {} +} + +routed_port_count = 1+len(t1_ports[list(t1_ports.keys())[0]][ + t1_t2_device_hostnames[list(t1_t2_device_hostnames.keys())[0]][0]]) portchannel_count = sum([len(portchannel_info) for _, portchannel_info in - t2_uplink_portchannel_members[t1_t2_device_hostnames[1]].items()]) + t2_uplink_portchannel_members[list(t2_uplink_portchannel_members.keys())[0]][ + t1_t2_device_hostnames[list(t1_t2_device_hostnames.keys())[0]][1]].items()]) def generate_ips_for_bgp_case(ipv4_subnet, ipv6_subnet): @@ -261,9 +252,4 @@ def generate_ips_for_bgp_case(ipv4_subnet, ipv6_subnet): t2_dut_portchannel_ipv6_list = ipv6[routed_port_count:] snappi_portchannel_ipv6_list = peer_ipv6[routed_port_count:] -t2_dut_ipv4_list = ip[:len(PERFORMANCE_PORTS['Traffic_Tx_Ports'] + PERFORMANCE_PORTS['Uplink BGP Session'])] -t2_dut_ipv6_list = ipv6[:len(PERFORMANCE_PORTS['Traffic_Tx_Ports'] + PERFORMANCE_PORTS['Uplink BGP Session'])] -t2_snappi_ipv4_list = peer_ip[:len(PERFORMANCE_PORTS['Traffic_Tx_Ports'] + PERFORMANCE_PORTS['Uplink BGP Session'])] -t2_snappi_ipv6_list = peer_ipv6[:len(PERFORMANCE_PORTS['Traffic_Tx_Ports'] + PERFORMANCE_PORTS['Uplink BGP Session'])] - # END --------------------- T2 BGP Case ------------------- diff --git a/tests/snmp/conftest.py b/tests/snmp/conftest.py index 15d47cebd3c..88db6acec52 100644 --- a/tests/snmp/conftest.py +++ b/tests/snmp/conftest.py @@ -68,14 +68,15 @@ def setup_check_snmp_ready(duthosts, localhost): if 'LOCATION' not in snmp_location_redis_vals: duthost.shell(f'sudo config snmp location add {yaml_snmp_location}') # set snmp cli - yield + yield + for duthost in duthosts: # rollback configuration rollback(duthost, SETUP_ENV_CP) - # remove snmp files downloaded - local_command = "find ./snmp/ -type f -name 'snmp.yml' -exec rm -f {} +" - localhost.shell(local_command) + # remove snmp files downloaded + local_command = "find ./snmp/ -type f -name 'snmp.yml' -exec rm -f {} +" + localhost.shell(local_command) def extract_redis_keys(item): diff --git a/tests/snmp/test_snmp_default_route.py b/tests/snmp/test_snmp_default_route.py index 63d0250a0b7..dbf50c3e66a 100644 --- a/tests/snmp/test_snmp_default_route.py +++ b/tests/snmp/test_snmp_default_route.py @@ -31,7 +31,7 @@ def test_snmp_default_route(duthosts, enum_rand_one_per_hwsku_frontend_hostname, for line in dut_result['stdout_lines']: if 'via' in line: ip, interface = line.split('via') - ip = ip.strip("*, ") + ip = ip.strip("*, ,recursive") interface = interface.strip("*, ") if interface != "eth0" and 'Ethernet-BP' not in interface: dut_result_nexthops.append(ip) diff --git a/tests/snmp/test_snmp_phy_entity.py b/tests/snmp/test_snmp_phy_entity.py index 18421fbb693..9a9650f56d5 100644 --- a/tests/snmp/test_snmp_phy_entity.py +++ b/tests/snmp/test_snmp_phy_entity.py @@ -3,10 +3,13 @@ import pytest import re import time +import random from enum import Enum, unique from tests.common.utilities import wait_until from tests.common.helpers.assertions import pytest_require from tests.common.helpers.snmp_helpers import get_snmp_facts +from tests.common.helpers.assertions import pytest_assert +from tests.common.helpers.psu_helpers import turn_on_all_outlets, check_outlet_status, get_grouped_pdus_by_psu from tests.common.helpers.thermal_control_test_helper import mocker_factory # noqa F401 pytestmark = [ @@ -634,31 +637,36 @@ def test_turn_off_psu_and_check_psu_info(duthosts, enum_supervisor_dut_hostname, pdu_controller = get_pdu_controller(duthost) if not pdu_controller: pytest.skip('psu_controller is None, skipping this test') + outlet_status = pdu_controller.get_outlet_status() if len(outlet_status) < 2: pytest.skip( 'At least 2 PSUs required for rest of the testing in this case') - # turn on all PSU - for outlet in outlet_status: - if not outlet['outlet_on']: - pdu_controller.turn_on_outlet(outlet) - time.sleep(5) - - outlet_status = pdu_controller.get_outlet_status() - for outlet in outlet_status: - if not outlet['outlet_on']: - pytest.skip( - 'Not all outlet are powered on, skip rest of the testing in this case') - - # turn off the first PSU - first_outlet = outlet_status[0] - pdu_controller.turn_off_outlet(first_outlet) - assert wait_until(30, 5, 0, check_outlet_status, - pdu_controller, first_outlet, False) - # wait for psud update the database - assert wait_until(180, 20, 5, _check_psu_status_after_power_off, - duthost, localhost, creds_all_duts) + # Turn on all PDUs + logging.info("Turning all outlets on before test") + turn_on_all_outlets(pdu_controller) + + psu_to_pdus = get_grouped_pdus_by_psu(pdu_controller) + try: + logging.info("Turning off PDUs connected to a random PSU") + # Get a random PSU's related PDUs to turn off + off_psu = random.choice(list(psu_to_pdus.keys())) + outlets = psu_to_pdus[off_psu] + logging.info("Toggling {} PDUs connected to {}".format(len(outlets), off_psu)) + for outlet in outlets: + pdu_controller.turn_off_outlet(outlet) + pytest_assert(wait_until(30, 5, 0, check_outlet_status, + pdu_controller, outlet, False), + "Outlet {} did not turn off".format(outlet['pdu_name'])) + + logging.info("Checking that turning off these outlets affects PSUs") + # wait for psud update the database + pytest_assert(wait_until(900, 20, 5, _check_psu_status_after_power_off, + duthost, localhost, creds_all_duts), + "No PSUs turned off") + finally: + turn_on_all_outlets(pdu_controller) def _check_psu_status_after_power_off(duthost, localhost, creds_all_duts): @@ -844,15 +852,3 @@ def is_null_str(value): :return: True if a string is None or 'None' or 'N/A' """ return not value or value == str(None) or value == 'N/A' - - -def check_outlet_status(pdu_controller, outlet, expect_status): - """ - Check if a given PSU is at expect status - :param pdu_controller: PDU controller - :param outlet: PDU outlet - :param expect_status: Expect bool status, True means on, False means off - :return: True if a given PSU is at expect status - """ - status = pdu_controller.get_outlet_status(outlet) - return 'outlet_on' in status[0] and status[0]['outlet_on'] == expect_status diff --git a/tests/snmp/test_snmp_queue.py b/tests/snmp/test_snmp_queue.py index e80b53c4b18..3194e8f90fc 100644 --- a/tests/snmp/test_snmp_queue.py +++ b/tests/snmp/test_snmp_queue.py @@ -7,6 +7,10 @@ ] +def is_port_active(v): + return v['adminstatus'] == 'up' and v['operstatus'] == 'up' + + def test_snmp_queues(duthosts, enum_rand_one_per_hwsku_hostname, localhost, creds_all_duts, collect_techsupport_all_duts): duthost = duthosts[enum_rand_one_per_hwsku_hostname] @@ -70,7 +74,7 @@ def test_snmp_queues(duthosts, enum_rand_one_per_hwsku_hostname, localhost, cred for k, v in snmp_facts['snmp_interfaces'].items(): # v['name'] is alias for example Ethernet1/1 - if v['name'] in alias_port_name_map: + if v['name'] in alias_port_name_map and is_port_active(v): intf = alias_port_name_map[v['name']] # Expect all interfaces to have queue counters diff --git a/tests/snmp/test_snmp_queue_counters.py b/tests/snmp/test_snmp_queue_counters.py index 83824ea80ec..9c55561cb60 100644 --- a/tests/snmp/test_snmp_queue_counters.py +++ b/tests/snmp/test_snmp_queue_counters.py @@ -2,12 +2,12 @@ import json from tests.common import config_reload from tests.common.helpers.assertions import pytest_assert +from tests.common.utilities import wait_until CFG_DB_PATH = "/etc/sonic/config_db.json" ORIG_CFG_DB = "/etc/sonic/orig_config_db.json" UNICAST_CTRS = 4 MULTICAST_CTRS = 4 -BUFFER_QUEUES_REMOVED = 2 pytestmark = [ pytest.mark.topology('any', 't1-multi-asic'), @@ -17,13 +17,30 @@ def load_new_cfg(duthost, data): duthost.copy(content=json.dumps(data, indent=4), dest=CFG_DB_PATH) - config_reload(duthost, config_source='config_db', safe_reload=True) + config_reload(duthost, config_source='config_db', safe_reload=True, check_intf_up_ports=True, wait_for_bgp=True) def get_queue_ctrs(duthost, cmd): return len(duthost.shell(cmd)["stdout_lines"]) +def get_queuestat_ctrs(duthost, cmd): + cmd_output = duthost.shell(cmd)["stdout_lines"] + queue_cnt = 0 + for line in cmd_output: + if "UC" in line or "MC" in line: + queue_cnt = queue_cnt + 1 + return queue_cnt + + +def check_snmp_cmd_output(duthost, cmd): + out_len = len(duthost.shell(cmd)["stdout_lines"]) + if out_len > 1: + return True + else: + return False + + def get_queue_cntrs_oid(interface): """ @summary: Returns queue_cntrs_oid value based on the interface chosen @@ -58,7 +75,7 @@ def get_asic_interface(inter_facts): def test_snmp_queue_counters(duthosts, enum_rand_one_per_hwsku_frontend_hostname, enum_frontend_asic_index, - creds_all_duts, teardown): + creds_all_duts, loganalyzer): """ Test SNMP queue counters - Set "create_only_config_db_buffers" to true in config db, to create @@ -73,6 +90,10 @@ def test_snmp_queue_counters(duthosts, """ duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + if duthost.sonichost.facts['platform_asic'] == 'broadcom': + ignore_regex = r".* ERR swss#orchagent:\s*.*\s*queryAattributeEnumValuesCapability:\s*returned value " \ + r"\d+ is not allowed on SAI_SWITCH_ATTR_(?:ECMP|LAG)_DEFAULT_HASH_ALGORITHM.*" + loganalyzer[duthost.hostname].ignore_regex.extend([ignore_regex]) global ORIG_CFG_DB, CFG_DB_PATH hostip = duthost.host.options['inventory_manager'].get_host( duthost.hostname).vars['ansible_host'] @@ -82,15 +103,18 @@ def test_snmp_queue_counters(duthosts, if interface is None: pytest.skip("No active interface present on the asic {}".format(asic)) queue_cntrs_oid = get_queue_cntrs_oid(interface) + + get_queue_stat_cmd = "queuestat -p {}".format(interface) get_bfr_queue_cntrs_cmd \ = "docker exec snmp snmpwalk -v2c -c {} {} {}".format( creds_all_duts[duthost.hostname]['snmp_rocommunity'], hostip, queue_cntrs_oid) - # Generate sonic-cfggen commands for multi-asic and single-asic duts + # Generate sonic-cfggen and queue stat commands for multi-asic and single-asic duts if duthost.sonichost.is_multi_asic and asic is not None: ORIG_CFG_DB = "/etc/sonic/orig_config_db{}.json".format(asic.asic_index) CFG_DB_PATH = "/etc/sonic/config_db{}.json".format(asic.asic_index) cmd = "sonic-cfggen -n {} -d --print-data > {}".format(asic.namespace, ORIG_CFG_DB) + get_queue_stat_cmd = "queuestat -n {} -p {}".format(asic.namespace, interface) else: cmd = "sonic-cfggen -d --print-data > {}".format(ORIG_CFG_DB) @@ -98,17 +122,14 @@ def test_snmp_queue_counters(duthosts, data = json.loads(duthost.shell("cat {}".format(ORIG_CFG_DB), verbose=False)['stdout']) buffer_queue_to_del = None - # Get appropriate buffer queue value to delete in case of multi-asic - if duthost.sonichost.is_multi_asic: - buffer_queues = list(data['BUFFER_QUEUE'].keys()) - iface_to_check = buffer_queues[0].split('|')[0] - iface_buffer_queues = [bq for bq in buffer_queues if any(val in iface_to_check for val in bq.split('|'))] - for queue in iface_buffer_queues: - if asic.namespace in queue and queue.split('|')[-1] == '3-4' and queue.split('|')[-2] == interface: - buffer_queue_to_del = queue - break + + # Get appropriate buffer queue value to delete + buffer_queues = list(data['BUFFER_QUEUE'].keys()) + iface_buffer_queues = [bq for bq in buffer_queues if any(val in interface for val in bq.split('|'))] + if iface_buffer_queues: + buffer_queue_to_del = iface_buffer_queues[0] else: - buffer_queue_to_del = "{}|3-4".format(interface) + pytest_assert(False, "Buffer Queue list can't be empty if valid interface is selected.") # Add create_only_config_db_buffers entry to device metadata to enable # counters optimization and get number of queue counters of Ethernet0 prior @@ -116,13 +137,24 @@ def test_snmp_queue_counters(duthosts, data['DEVICE_METADATA']["localhost"]["create_only_config_db_buffers"] \ = "true" load_new_cfg(duthost, data) + stat_queue_counters_cnt_pre = get_queuestat_ctrs(duthost, get_queue_stat_cmd) * UNICAST_CTRS + wait_until(60, 20, 0, check_snmp_cmd_output, duthost, get_bfr_queue_cntrs_cmd) queue_counters_cnt_pre = get_queue_ctrs(duthost, get_bfr_queue_cntrs_cmd) - # Remove buffer queue and reload and get number of queue counters of - # Ethernet0 after removing two buffer queues + # snmpwalk output should get info for same number of buffers as queuestat -p dose + pytest_assert((queue_counters_cnt_pre == stat_queue_counters_cnt_pre), + "Snmpwalk Queue counters actual count {} differs from expected queue stat count values {}". + format(queue_counters_cnt_pre, stat_queue_counters_cnt_pre)) + + # Remove buffer queue and reload and get number of queue counters of selected interface del data['BUFFER_QUEUE'][buffer_queue_to_del] load_new_cfg(duthost, data) + stat_queue_counters_cnt_post = get_queuestat_ctrs(duthost, get_queue_stat_cmd) * UNICAST_CTRS + wait_until(60, 20, 0, check_snmp_cmd_output, duthost, get_bfr_queue_cntrs_cmd) queue_counters_cnt_post = get_queue_ctrs(duthost, get_bfr_queue_cntrs_cmd) + pytest_assert((queue_counters_cnt_post == stat_queue_counters_cnt_post), + "Snmpwalk Queue counters actual count {} differs from expected queue stat count values {}". + format(queue_counters_cnt_post, stat_queue_counters_cnt_post)) # For broadcom-dnx voq chassis, number of voq are fixed (static), which cannot be modified dynamically # Hence, make sure the queue counters before deletion and after deletion are same for broadcom-dnx voq chassis @@ -132,8 +164,13 @@ def test_snmp_queue_counters(duthosts, format(queue_counters_cnt_post, queue_counters_cnt_pre)) # check for other duts else: - unicast_expected_diff = BUFFER_QUEUES_REMOVED * UNICAST_CTRS - multicast_expected_diff = unicast_expected_diff + (BUFFER_QUEUES_REMOVED + range_str = str(buffer_queue_to_del.split('|')[-1]) + if '-' in range_str: + buffer_queues_removed = int(range_str.split('-')[1]) - int(range_str.split('-')[0]) + 1 + else: + buffer_queues_removed = 1 + unicast_expected_diff = buffer_queues_removed * UNICAST_CTRS + multicast_expected_diff = unicast_expected_diff + (buffer_queues_removed * MULTICAST_CTRS) pytest_assert((queue_counters_cnt_pre - queue_counters_cnt_post) in [unicast_expected_diff, multicast_expected_diff], @@ -142,12 +179,13 @@ def test_snmp_queue_counters(duthosts, (queue_counters_cnt_pre - multicast_expected_diff))) -@pytest.fixture(scope="module") -def teardown(duthost): +@pytest.fixture(autouse=True, scope="module") +def teardown(duthosts, enum_rand_one_per_hwsku_frontend_hostname): """ Teardown procedure for all test function - :param duthost: DUT host object + param duthosts: duthosts object """ + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] yield # Cleanup duthost.copy(src=ORIG_CFG_DB, dest=CFG_DB_PATH, remote_src=True) diff --git a/tests/span/conftest.py b/tests/span/conftest.py index 8b80de1135e..d9705b870c8 100644 --- a/tests/span/conftest.py +++ b/tests/span/conftest.py @@ -153,6 +153,9 @@ def setup_session(duthosts, rand_one_dut_hostname, session_info): session_info["session_source_ports"], session_info["session_direction"] )) + mirror_session_output = duthost.shell("show mirror_session") + assert session_info["session_name"] in mirror_session_output['stdout'] + yield { 'source1_index': session_info['source1_index'], 'source2_index': session_info['source2_index'], diff --git a/tests/srv6/common_utils.py b/tests/srv6/common_utils.py new file mode 100644 index 00000000000..377a39a6225 --- /dev/null +++ b/tests/srv6/common_utils.py @@ -0,0 +1,104 @@ +import subprocess +import logging +import getpass + +logger = logging.getLogger(__name__) + +# +# Flags used at run time +# +run_inside_docker = False +debug_flag = False + + +def set_debug_flag(flag): + global debug_flag + debug_flag = flag + + +def get_debug_flag(): + return debug_flag + + +def set_run_inside_docker(flag): + global run_inside_docker + run_inside_docker = flag + + +def get_run_inside_docker(): + global run_inside_docker + return run_inside_docker + + +# +# This is the IP to accessing host from sonic-mgmt +# +def get_hostip_and_user(): + hostip, hostuser = "172.17.0.1", getpass.getuser() + return hostip, hostuser + + +# +# Debug print util function for printing out debug information +# +def debug_print(msg, force=False): + if not get_debug_flag() and not force: + return + logger.info(msg) + print(msg) + + +# +# a util function to run command. add ssh if it is running inside sonic-mgmt docker. +# +def run_command_with_return(cmd, force=False): + if get_run_inside_docker(): + # add host access + hostip, user = get_hostip_and_user() + cmd1 = "ssh -q -o \"UserKnownHostsFile=/dev/null\" -o \"StrictHostKeyChecking=no\" " + cmd2 = "{}@{} \"{}\"".format(user, hostip, cmd) + cmd = cmd1 + cmd2 + process = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + universal_newlines=True + ) + output, stderr = process.communicate() + if stderr != "" and stderr is not None: + # It is an error, use force print + debug_print("{} : get error {}".format(cmd, stderr), force=True) + + debug_print("cmd : {}, stderr : {}, output : {}".format(cmd, stderr, output), force) + return output, stderr + + +# +# Goal is to run the following command to set up tcpdump +# For example +# ssh ubuntu@172.17.0.1 "nohup tcpdump -i VM0100-t0 -w /tmp/Vm0100-t0.pcap > /tmp/tcpdump.log 2>&1 &" +# +def enable_tcpdump(intf_list, file_loc, prefix, use_docker=False, set_debug=False): + # Enable flags baased on input flags + set_run_inside_docker(use_docker) + set_debug_flag(set_debug) + for intf in intf_list: + cmd = ( + "tcpdump -i {} -w {}/{}_{}.pcap > /tmp/{}_{}.log 2>&1 &" + .format(intf, file_loc, prefix, intf, prefix, intf) + ) + if get_run_inside_docker(): + cmd = "nohup {}".format(cmd) + debug_print("Run {}".format(cmd), force=True) + run_command_with_return(cmd) + run_command_with_return("ps aux | grep tcpdump", force=True) + # Disable flags + set_debug_flag(False) + set_run_inside_docker(False) + + +# +# Remove all existing tcpdump sessions +# +def disable_tcpdump(use_docker=False, set_debug=False): + set_run_inside_docker(use_docker) + run_command_with_return("pkill tcpdump") + set_run_inside_docker(False) diff --git a/tests/srv6/srv6_utils.py b/tests/srv6/srv6_utils.py index b0219ffe18e..a9c1c319176 100755 --- a/tests/srv6/srv6_utils.py +++ b/tests/srv6/srv6_utils.py @@ -1,9 +1,18 @@ import logging +import time import requests +import ptf.packet as scapy +import ptf.testutils as testutils + from tests.common.helpers.assertions import pytest_assert logger = logging.getLogger(__name__) +# +# log directory inside each vsonic. vsonic starts with admin as user. +# +test_log_dir = "/home/admin/testlogs/" + # # Helper func for print a set of lines @@ -35,7 +44,7 @@ def change_route(operation, ptfip, neighbor, route, nexthop, port): # Skip some BGP neighbor check # def skip_bgp_neighbor_check(neighbor): - skip_addresses = ['2064:100::1d', '2064:200::1e', '2064:300::1f'] + skip_addresses = [] for addr in skip_addresses: if neighbor == addr: return True @@ -101,3 +110,178 @@ def find_node_interfaces(nbrhost): found = found + 1 return found, hwsku + + +# +# Send receive packets +# +def runSendReceive(pkt, src_port, exp_pkt, dst_ports, pkt_expected, ptfadapter): + """ + @summary Send packet and verify it is received/not received on the expected ports + @param pkt: The packet that will be injected into src_port + @param src_ports: The port into which the pkt will be injected + @param exp_pkt: The packet that will be received on one of the dst_ports + @param dst_ports: The ports on which the exp_pkt may be received + @param pkt_expected: Indicated whether it is expected to receive the exp_pkt on one of the dst_ports + @param ptfadapter: The ptfadapter fixture + """ + # Send the packet and poll on destination ports + testutils.send(ptfadapter, src_port, pkt, 1) + logger.debug("Sent packet: " + pkt.summary()) + (index, rcv_pkt) = testutils.verify_packet_any_port(ptfadapter, exp_pkt, dst_ports) + received = False + if rcv_pkt: + received = True + pytest_assert(received is True) + logger.debug('index=%s, received=%s' % (str(index), str(received))) + if received: + logger.debug("Received packet: " + scapy.Ether(rcv_pkt).summary()) + if pkt_expected: + logger.debug('Expected packet on dst_ports') + passed = True if received else False + logger.debug('Received: ' + str(received)) + else: + logger.debug('No packet expected on dst_ports') + passed = False if received else True + logger.debug('Received: ' + str(received)) + logger.debug('Passed: ' + str(passed)) + return passed + + +# +# Helper func to check if a list of IPs go via a given set of next hop +# +def check_routes_func(nbrhost, ips, nexthops, vrf="", is_v6=False): + # Check remote learnt dual homing routes + vrf_str = "" + if vrf != "": + vrf_str = "vrf {}".format(vrf) + ip_str = "ip" + if is_v6: + ip_str = "ipv6" + for ip in ips: + cmd = "show {} route {} {} nexthop-group".format(ip_str, vrf_str, ip) + res = nbrhost.command(cmd)["stdout_lines"] + print_lines(res) + found = 0 + for nexthop in nexthops: + for line in res: + if nexthop in line: + found = found + 1 + if len(nexthops) != found: + return False + return True + + +# +# check if a list of IPs go via a given set of next hop +# +def check_routes(nbrhost, ips, nexthops, vrf="", is_v6=False): + # Add retry for debugging purpose + count = 0 + ret = False + + # + # Sleep 10 sec before retrying + # + sleep_duration_for_retry = 10 + + # retry 3 times before claiming failure + while count < 3 and not ret: + ret = check_routes_func(nbrhost, ips, nexthops, vrf, is_v6) + if not ret: + count = count + 1 + # sleep make sure all forwarding structures are settled down. + time.sleep(sleep_duration_for_retry) + logger.info("Sleep {} seconds to retry round {}".format(sleep_duration_for_retry, count)) + + pytest_assert(ret) + + +# +# Record fwding chain to a file +# +def recording_fwding_chain(nbrhost, fname, comments): + + filename = "{}{}".format(test_log_dir, fname) + + cmd = "mkdir -p {}".format(test_log_dir) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "sudo touch /etc/sonic/frr/vtysh.conf" + nbrhost.shell(cmd, module_ignore_errors=True) + + cmd = "date >> {} ".format(filename) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "echo ' {}' >> {} ".format(comments, filename) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "vtysh -c 'show bgp summary' >> {} ".format(filename) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "vtysh -c 'show ip route vrf Vrf1 192.100.1.0 nexthop-group' >> {} ".format(filename) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "vtysh -c 'show ipv6 route fd00:201:201:fff1:11:: nexthop-group' >> {} ".format(filename) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "vtysh -c 'show ipv6 route fd00:202:202:fff2:22:: nexthop-group' >> {} ".format(filename) + nbrhost.shell(cmd, module_ignore_errors=True) + + cmd = "echo '' >> {} ".format(filename) + nbrhost.shell(cmd, module_ignore_errors=True) + + +# +# Debug commands for FRR zebra +# +debug_cmds = [ + 'debug zebra events', + 'debug zebra rib', + 'debug zebra rib detailed', + 'debug zebra nht', + 'debug zebra nht detailed', + 'debug zebra dplane', + 'debug zebra nexthop', + 'debug zebra nexthop detail', + 'debug zebra packet', + 'debug zebra packet detail' +] + + +# +# Turn on/off FRR debug to a file +# +def turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, filename, vm, is_on=True): + nbrhost = nbrhosts[vm]['host'] + # save frr log to a file + pfxstr = " " + if not is_on: + pfxstr = " no " + + cmd = "vtysh -c 'configure terminal' -c '{} log file {}'".format(pfxstr, filename) + nbrhost.command(cmd) + + # + # Change frr debug flags + # + for dcmd in debug_cmds: + cmd = "vtysh -c '" + pfxstr + dcmd + "'" + nbrhost.command(cmd) + + # + # Check debug flags + # + cmd = "vtysh -c 'show debug'" + nbrhost.shell(cmd, module_ignore_errors=True) + # + # Check log file + # + cmd = "vtysh -c 'show run' | grep log" + nbrhost.shell(cmd, module_ignore_errors=True) + + +# +# Collect file from bgp docker +# +def collect_frr_debugfile(duthosts, rand_one_dut_hostname, nbrhosts, filename, vm): + nbrhost = nbrhosts[vm]['host'] + cmd = "mkdir -p {}".format(test_log_dir) + nbrhost.shell(cmd, module_ignore_errors=True) + cmd = "docker cp bgp:{} {}".format(filename, test_log_dir) + nbrhost.shell(cmd, module_ignore_errors=True) diff --git a/tests/srv6/test_srv6_basic_sanity.py b/tests/srv6/test_srv6_basic_sanity.py index ca5e7a98c0e..3360babc70e 100644 --- a/tests/srv6/test_srv6_basic_sanity.py +++ b/tests/srv6/test_srv6_basic_sanity.py @@ -1,7 +1,10 @@ import time import logging import pytest +import ptf.packet as scapy +from ptf.testutils import simple_tcp_packet +from ptf.mask import Mask from tests.common.helpers.assertions import pytest_assert from tests.common.utilities import wait_until @@ -9,6 +12,14 @@ from srv6_utils import find_node_interfaces from srv6_utils import check_bgp_neighbors from srv6_utils import check_bgp_neighbors_func +from srv6_utils import runSendReceive +from srv6_utils import check_routes +from srv6_utils import recording_fwding_chain +from srv6_utils import turn_on_off_frr_debug +from srv6_utils import collect_frr_debugfile + +from common_utils import enable_tcpdump +from common_utils import disable_tcpdump logger = logging.getLogger(__name__) @@ -26,9 +37,45 @@ test_vm_names = ["PE1", "PE2", "PE3", "P2", "P3", "P4"] +# +# Sender PE3's MAC +# +sender_mac = "52:54:00:df:1c:5e" + +# +# The port used by ptf to connect with backplane. This number is different from 3 ndoe case. +# +ptf_port_for_backplane = 18 + # The number of routes published by each CE num_ce_routes = 10 +# +# Routes learnt from pe1 and pe2 +# +route_prefix_for_pe1_and_pe2 = "192.100.0" + +# +# Routes learnt from pe3 +# +route_prefix_for_pe3 = "192.200.0" + +# +# This 10 sec sleep is used for make sure software programming is finished +# It has enough buffer zone. +# +sleep_duration = 10 + +# +# BGP neighbor up waiting time, waiting up to 180 sec +# +bgp_neighbor_up_wait_time = 180 + +# +# BGP neighbor down waiting time, waiting up to 30 sec +# +bgp_neighbor_down_wait_time = 30 + # # Initialize the testbed @@ -44,6 +91,7 @@ def setup_config(duthosts, rand_one_dut_hostname, nbrhosts, ptfhost): # Publish to PE2 neighbor2 = "10.10.246.30" route_prefix_for_pe1_and_pe2 = "192.100.0" + for x in range(1, num_ce_routes+1): route = "{}.{}/32".format(route_prefix_for_pe1_and_pe2, x) announce_route(ptfip, neighbor, route, nexthop, port_num[0]) @@ -51,7 +99,6 @@ def setup_config(duthosts, rand_one_dut_hostname, nbrhosts, ptfhost): # Publish to PE3 neighbor = "10.10.246.31" - route_prefix_for_pe3 = "192.200.0" for x in range(1, num_ce_routes+1): route = "{}.{}/32".format(route_prefix_for_pe3, x) announce_route(ptfip, neighbor, route, nexthop, port_num[2]) @@ -126,3 +173,308 @@ def test_check_bgp_neighbors(duthosts, rand_one_dut_hostname, nbrhosts): # From P4 nbrhost = nbrhosts["P4"]['host'] check_bgp_neighbors(nbrhost, ['fc01::86', 'fc04::2', 'fc07::2', 'fc06::1']) + + +# +# Test Case: Check VPN routes both local learnt and remote learnt and core routes +# +def test_check_routes(duthosts, rand_one_dut_hostname, nbrhosts): + global_route = "" + is_v6 = True + + # From PE3 + nbrhost = nbrhosts["PE3"]['host'] + logger.info("Check learnt vpn routes") + # check remote learnt VPN routes via two PE1 and PE2 + dut1_ips = [] + for x in range(1, num_ce_routes+1): + ip = "{}.{}/32".format(route_prefix_for_pe1_and_pe2, x) + dut1_ips.append(ip) + check_routes(nbrhost, dut1_ips, ["2064:100::1d", "2064:200::1e"], "Vrf1") + + # check local learnt VPN routes via local PE + dut2_ips = [] + for x in range(1, num_ce_routes+1): + ip = "{}.{}/32".format(route_prefix_for_pe3, x) + dut2_ips.append(ip) + check_routes(nbrhost, dut2_ips, ["10.10.246.254"], "Vrf1") + # Check core routes + check_routes( + nbrhost, ["fd00:201:201:fff1:11::", "fd00:202:202:fff2:22::"], + ["fc08::2", "fc06::2"], global_route, is_v6 + ) + + +# +# Test Case : Traffic check in Normal Case +# +def test_traffic_check(tbinfo, duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, ptfadapter): + # + # Create a packet sending to 192.100.0.1 + # + # establish_and_configure_bfd(nbrhosts) + tcp_pkt0 = simple_tcp_packet( + ip_src="192.200.0.1", + ip_dst="192.100.0.1", + tcp_sport=8888, + tcp_dport=6666, + ip_ttl=64 + ) + pkt = tcp_pkt0.copy() + pkt['Ether'].dst = sender_mac + + exp_pkt = tcp_pkt0.copy() + exp_pkt['IP'].ttl -= 4 + masked2recv = Mask(exp_pkt) + masked2recv.set_do_not_care_scapy(scapy.Ether, "dst") + masked2recv.set_do_not_care_scapy(scapy.Ether, "src") + + # Enable tcpdump for debugging purpose, file_loc is host file location + intf_list = ["VM0102-t1", "VM0102-t3"] + file_loc = "~/sonic-mgmt/tests/logs/" + prefix = "test_traffic_check" + enable_tcpdump(intf_list, file_loc, prefix, True, True) + + # Add retry for debugging purpose + count = 0 + done = False + while count < 10 and done is False: + try: + runSendReceive(pkt, ptf_port_for_backplane, masked2recv, [ptf_port_for_backplane], True, ptfadapter) + logger.info("Done with traffic run") + done = True + except Exception as e: + count = count + 1 + logger.info("Retry round {}, Excetpion {}".format(count, e)) + # sleep make sure all forwarding structures are settled down. + sleep_duration_for_retry = 60 + time.sleep(sleep_duration_for_retry) + logger.info( + "Sleep {} seconds to make sure all forwarding structures are settled down" + .format(sleep_duration_for_retry) + ) + + # Disable tcpdump + disable_tcpdump(True) + + logger.info("Done {} count {}".format(done, count)) + if not done: + raise Exception("Traffic test failed") + + +# +# Test Case : Local Link flap test with zebra debug log collecting +# +def test_traffic_check_local_link_fail_case(tbinfo, duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, ptfadapter): + filename = "zebra_case_1_locallink_down.txt" + docker_filename = "/tmp/{}".format(filename) + vm = "PE3" + pe3 = nbrhosts[vm]['host'] + p2 = nbrhosts["P2"]['host'] + + logname = "zebra_case_1_locallink_down_running_log.txt" + # Recording + recording_fwding_chain(pe3, logname, "Before starting local link fail case") + # + # Turn on frr debug + # + turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm, True) + # + # shut down the link between PE3 and P2 + # + cmd = "sudo ifconfig Ethernet4 down" + pe3.command(cmd) + cmd = "sudo ifconfig Ethernet12 down" + p2.command(cmd) + time.sleep(sleep_duration) + # expect remaining BGP session are up on PE3 + ret1 = wait_until( + bgp_neighbor_down_wait_time, + 10, 0, check_bgp_neighbors_func, + pe3, ['2064:100::1d', '2064:200::1e', 'fc06::2']) + + # Recording + recording_fwding_chain(pe3, logname, "After local link down") + + # + # Recover local links + # + cmd = "sudo ifconfig Ethernet4 up" + pe3.command(cmd) + cmd = "sudo ifconfig Ethernet12 up" + p2.command(cmd) + time.sleep(sleep_duration) + + # Recording + recording_fwding_chain(pe3, logname, "After the local link gets recovered") + + # + # Turn off frr debug and collect debug log + # + turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm, False) + collect_frr_debugfile(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm) + + # expect remaining BGP session are up on PE3 + pytest_assert(ret1, "wait for PE3 BGP neighbors to settle down") + # expect All BGP session are up on PE3 + pytest_assert(wait_until( + bgp_neighbor_up_wait_time, + 10, 0, + check_bgp_neighbors_func, pe3, + ['2064:100::1d', '2064:200::1e', 'fc08::2', 'fc06::2']), + "wait for PE3 BGP neighbors up") + + +# +# Test Case : remote IGP Link flap test with zebra debug log collecting +# +def test_traffic_check_remote_igp_fail_case(tbinfo, duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, ptfadapter): + filename = "zebra_case_2_remotelink_down.txt" + docker_filename = "/tmp/{}".format(filename) + vm = "PE3" + pe3 = nbrhosts[vm]['host'] + + logname = "zebra_case_2_remotelink_down_running_log.txt" + # Recording + recording_fwding_chain(pe3, logname, "Before starting remote link fail case") + # + # Turn on frr debug + # + turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm, True) + # + # shut down the link between P3 and P1, P2, P4 + # + p1 = duthosts[rand_one_dut_hostname] + p2 = nbrhosts["P2"]['host'] + p3 = nbrhosts["P3"]['host'] + p4 = nbrhosts["P4"]['host'] + + cmd = "sudo ifconfig Ethernet124 down" + p1.command(cmd) + cmd = "sudo ifconfig Ethernet4 down" + p2.command(cmd) + cmd = "sudo ifconfig Ethernet4 down" + p4.command(cmd) + + cmd = "sudo ifconfig Ethernet0 down" + p3.command(cmd) + cmd = "sudo ifconfig Ethernet12 down" + p3.command(cmd) + cmd = "sudo ifconfig Ethernet16 down" + p3.command(cmd) + + time.sleep(sleep_duration) + # expect no BGP session change on PE3 + ret1 = wait_until( + 5, 1, 0, check_bgp_neighbors_func, + pe3, ['2064:100::1d', '2064:200::1e', 'fc08::2', 'fc06::2'] + ) + + # Recording + recording_fwding_chain(pe3, logname, "After the remote IGP link is down") + # + # Recover back + # + cmd = "sudo ifconfig Ethernet124 up" + p1.command(cmd) + cmd = "sudo ifconfig Ethernet4 up" + p2.command(cmd) + cmd = "sudo ifconfig Ethernet4 up" + p4.command(cmd) + + cmd = "sudo ifconfig Ethernet0 up" + p3.command(cmd) + cmd = "sudo ifconfig Ethernet12 up" + p3.command(cmd) + cmd = "sudo ifconfig Ethernet16 up" + p3.command(cmd) + time.sleep(sleep_duration) + + # Recording + recording_fwding_chain(pe3, logname, "After the remote IGP link gets recovered") + # + # Turn off frr debug and collect debug log + # + turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm, False) + collect_frr_debugfile(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm) + + # expect no BGP session change on PE3 + pytest_assert(ret1, "no change in BGP sessions") + + # expect no BGP session change on PE3 + pytest_assert(wait_until( + 5, 1, 0, + check_bgp_neighbors_func, pe3, + ['2064:100::1d', '2064:200::1e', 'fc08::2', 'fc06::2']), "wait for PE3 BGP neighbors up") + + +# +# Test Case : BGP remote PE failure with zebra debug log collecting +# +def test_traffic_check_remote_bgp_fail_case(tbinfo, duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, ptfadapter): + filename = "zebra_case_3_remote_peer_down.txt" + docker_filename = "/tmp/{}".format(filename) + vm = "PE3" + pe3 = nbrhosts[vm]['host'] + + logname = "zebra_case_3_remote_peer_down_running_log.txt" + # Recording + recording_fwding_chain(pe3, logname, "Before starting remote PE failure case") + # + # Turn on frr debug + # + turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm, True) + # + # shut down the link between PE1 and P1, P3 + # + p1 = duthosts[rand_one_dut_hostname] + pe1 = nbrhosts["PE1"]['host'] + p3 = nbrhosts["P3"]['host'] + + cmd = "sudo ifconfig Ethernet112 down" + p1.command(cmd) + cmd = "sudo ifconfig Ethernet4 down" + p3.command(cmd) + cmd = "sudo ifconfig Ethernet0 down" + pe1.command(cmd) + cmd = "sudo ifconfig Ethernet4 down" + pe1.command(cmd) + time.sleep(sleep_duration) + # expect BGP session change on PE3 + ret1 = wait_until( + bgp_neighbor_down_wait_time, 10, 0, + check_bgp_neighbors_func, pe3, + ['2064:100::1d', '2064:200::1e', 'fc08::2', 'fc06::2']) + + # Recording + recording_fwding_chain(pe3, logname, "After shutting down the remote BGP peer") + # + # Recover back + # + cmd = "sudo ifconfig Ethernet112 up" + p1.command(cmd) + cmd = "sudo ifconfig Ethernet4 up" + p3.command(cmd) + cmd = "sudo ifconfig Ethernet0 up" + pe1.command(cmd) + cmd = "sudo ifconfig Ethernet4 up" + pe1.command(cmd) + time.sleep(sleep_duration) + + # Recording + recording_fwding_chain(pe3, logname, "After recovering the remote BGP peer") + + # + # Turn off frr debug and collect debug log + # + turn_on_off_frr_debug(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm, False) + collect_frr_debugfile(duthosts, rand_one_dut_hostname, nbrhosts, docker_filename, vm) + + # expect BGP session change on PE3 + pytest_assert(ret1, "Remote BGP PE down") + # expect no BGP session change on PE3 + pytest_assert(wait_until( + bgp_neighbor_up_wait_time, 10, 0, + check_bgp_neighbors_func, pe3, + ['2064:100::1d', '2064:200::1e', 'fc08::2', 'fc06::2']), + "wait for PE3 BGP neighbors up") diff --git a/tests/sub_port_interfaces/sub_ports_helpers.py b/tests/sub_port_interfaces/sub_ports_helpers.py index f92730b54b4..f509b6a8abc 100644 --- a/tests/sub_port_interfaces/sub_ports_helpers.py +++ b/tests/sub_port_interfaces/sub_ports_helpers.py @@ -86,7 +86,7 @@ def create_packet(eth_dst, eth_src, ip_dst, ip_src, vlan_vid, tr_type, ttl, dl_v def generate_and_verify_traffic(duthost, ptfadapter, src_port, dst_port, ptfhost=None, ip_src='', ip_dst='', pkt_action=None, type_of_traffic='ICMP', ttl=64, pktlen=100, ip_tunnel=None, - skip_traffic_test=False, **kwargs): + **kwargs): """ Send packet from PTF to DUT and verify that DUT sends/doesn't packet to PTF. @@ -105,9 +105,6 @@ def generate_and_verify_traffic(duthost, ptfadapter, src_port, dst_port, ptfhost pktlen: packet length ip_tunnel: Tunnel IP address of DUT """ - if skip_traffic_test is True: - logger.info("Skipping traffic test") - return type_of_traffic = [type_of_traffic] if not isinstance(type_of_traffic, list) else type_of_traffic for tr_type in type_of_traffic: @@ -150,6 +147,7 @@ def generate_and_verify_tcp_udp_traffic(duthost, ptfadapter, src_port, dst_port, src_dl_vlan_enable = False dst_dl_vlan_enable = False router_mac = duthost.facts['router_mac'] + asic_type = duthost.facts['asic_type'] src_port_number = int(get_port_number(src_port)) dst_port_number = int(get_port_number(dst_port)) src_mac = ptfadapter.dataplane.get_mac(0, src_port_number).decode() @@ -198,7 +196,8 @@ def generate_and_verify_tcp_udp_traffic(duthost, ptfadapter, src_port, dst_port, pkt_in_buffer = pkt_filter.filter_pkt_in_buffer() - pytest_assert(pkt_in_buffer is True, "Expected packet not available:\n{}".format(pkt_in_buffer)) + if asic_type != 'vs': + pytest_assert(pkt_in_buffer is True, "Expected packet not available:\n{}".format(pkt_in_buffer)) def generate_and_verify_icmp_traffic(duthost, ptfadapter, src_port, dst_port, ip_src, ip_dst, pkt_action, tr_type, @@ -288,6 +287,7 @@ def generate_and_verify_decap_traffic(duthost, ptfadapter, src_port, dst_port, i ip_tunnel: Tunnel IP address of DUT """ router_mac = duthost.facts['router_mac'] + asic_type = duthost.facts['asic_type'] src_port_number = int(get_port_number(src_port)) dst_port_number = int(get_port_number(dst_port)) @@ -327,7 +327,8 @@ def generate_and_verify_decap_traffic(duthost, ptfadapter, src_port, dst_port, i pkt_in_buffer = pkt_filter.filter_pkt_in_buffer() - pytest_assert(pkt_in_buffer is True, "Expected packet not available:\n{}".format(pkt_in_buffer)) + if asic_type != 'vs': + pytest_assert(pkt_in_buffer is True, "Expected packet not available:\n{}".format(pkt_in_buffer)) def generate_and_verify_balancing_traffic(duthost, ptfhost, ptfadapter, src_port, dst_port, ip_src, ip_dst, @@ -347,6 +348,7 @@ def generate_and_verify_balancing_traffic(duthost, ptfhost, ptfadapter, src_port ttl: Time to live """ router_mac = duthost.facts['router_mac'] + asic_type = duthost.facts['asic_type'] src_port_number = int(get_port_number(src_port)) src_mac = ptfadapter.dataplane.get_mac(0, src_port_number) ip_src = '10.0.0.1' @@ -403,9 +405,10 @@ def generate_and_verify_balancing_traffic(duthost, ptfhost, ptfadapter, src_port pkt_in_buffer = pkt_filter.filter_pkt_in_buffer() - pytest_assert(pkt_in_buffer is True, "Expected packet not available:\n{}".format(pkt_in_buffer)) - pytest_assert(check_balancing(pkt_filter.matched_index), - "Balancing error:\n{}".format(pkt_filter.matched_index)) + if asic_type != 'vs': + pytest_assert(pkt_in_buffer is True, "Expected packet not available:\n{}".format(pkt_in_buffer)) + pytest_assert(check_balancing(pkt_filter.matched_index), + "Balancing error:\n{}".format(pkt_filter.matched_index)) def shutdown_port(duthost, interface): diff --git a/tests/sub_port_interfaces/test_sub_port_interfaces.py b/tests/sub_port_interfaces/test_sub_port_interfaces.py index c3bba0e73d5..bde70b883f9 100644 --- a/tests/sub_port_interfaces/test_sub_port_interfaces.py +++ b/tests/sub_port_interfaces/test_sub_port_interfaces.py @@ -15,7 +15,6 @@ from sub_ports_helpers import check_sub_port from sub_ports_helpers import remove_sub_port from sub_ports_helpers import create_sub_port_on_dut -from tests.common.fixtures.ptfhost_utils import skip_traffic_test # noqa F401 pytestmark = [ pytest.mark.topology('t0', 't1') @@ -347,7 +346,7 @@ def test_routing_between_sub_ports_and_port(self, request, type_of_traffic, duth pktlen=pktlen) def test_tunneling_between_sub_ports(self, duthost, ptfadapter, apply_tunnel_table_to_dut, - apply_route_config, skip_traffic_test): # noqa F811 + apply_route_config): """ Validates that packets are routed between sub-ports. @@ -380,11 +379,10 @@ def test_tunneling_between_sub_ports(self, duthost, ptfadapter, apply_tunnel_tab ip_tunnel=sub_ports[src_port]['ip'], pkt_action='fwd', type_of_traffic='decap', - ttl=63, - skip_traffic_test=skip_traffic_test) + ttl=63) def test_balancing_sub_ports(self, duthost, ptfhost, ptfadapter, - apply_balancing_config, skip_traffic_test): # noqa F811 + apply_balancing_config): """ Validates load-balancing when sub-port is part of ECMP Test steps: @@ -417,13 +415,12 @@ def test_balancing_sub_ports(self, duthost, ptfhost, ptfadapter, dst_port=dst_ports, ip_dst=ip_dst, type_of_traffic='balancing', - ttl=63, - skip_traffic_test=skip_traffic_test) + ttl=63) class TestSubPortsNegative(object): def test_packet_routed_with_invalid_vlan(self, duthost, ptfadapter, apply_config_on_the_dut, - apply_config_on_the_ptf, skip_traffic_test): # noqa F811 + apply_config_on_the_ptf): """ Validates that packet aren't routed if sub-ports have invalid VLAN ID. @@ -447,13 +444,12 @@ def test_packet_routed_with_invalid_vlan(self, duthost, ptfadapter, apply_config ip_src=value['neighbor_ip'], dst_port=sub_port, ip_dst=value['ip'], - pkt_action='drop', - skip_traffic_test=skip_traffic_test) + pkt_action='drop') class TestSubPortStress(object): def test_max_numbers_of_sub_ports(self, duthost, ptfadapter, apply_config_on_the_dut, - apply_config_on_the_ptf, skip_traffic_test): # noqa F811 + apply_config_on_the_ptf): """ Validates that 256 sub-ports can be created per port or LAG @@ -486,5 +482,4 @@ def test_max_numbers_of_sub_ports(self, duthost, ptfadapter, apply_config_on_the ip_src=value['neighbor_ip'], dst_port=sub_port, ip_dst=value['ip'], - pkt_action='fwd', - skip_traffic_test=skip_traffic_test) + pkt_action='fwd') diff --git a/tests/syslog/test_logrotate.py b/tests/syslog/test_logrotate.py index cabfaab71ab..dba9f650d1f 100644 --- a/tests/syslog/test_logrotate.py +++ b/tests/syslog/test_logrotate.py @@ -243,6 +243,8 @@ def get_pending_entries(duthost, ignore_list=None): pending_entries.remove(entry) except ValueError: continue + except KeyError: + continue pending_entries = list(pending_entries) logger.info('Pending entries in APPL_DB: {}'.format(pending_entries)) return pending_entries diff --git a/tests/syslog/test_syslog_source_ip.py b/tests/syslog/test_syslog_source_ip.py index ce418b0371e..0ffad65dd00 100644 --- a/tests/syslog/test_syslog_source_ip.py +++ b/tests/syslog/test_syslog_source_ip.py @@ -85,9 +85,19 @@ def is_support_ssip(duthosts, enum_rand_one_per_hwsku_frontend_hostname): @pytest.fixture(scope="module", autouse=True) -def restore_config_by_config_reload(duthosts, enum_rand_one_per_hwsku_frontend_hostname): +def restore_config_by_config_reload(duthosts, enum_rand_one_per_hwsku_frontend_hostname, localhost): yield - config_reload(duthosts[enum_rand_one_per_hwsku_frontend_hostname]) + duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname] + + if is_mgmt_vrf_enabled(duthost): + # when removing mgmt vrf, dut connection will be lost for a while. So, before config reload, + # we need remove mgmt vrf, otherwise it will cause host unreachable + remove_vrf(duthost, VRF_LIST[2]) + localhost.wait_for(host=duthost.mgmt_ip, port=SONIC_SSH_PORT, search_regex=SONIC_SSH_REGEX, + state='absent', delay=1, timeout=30) + localhost.wait_for(host=duthost.mgmt_ip, port=SONIC_SSH_PORT, search_regex=SONIC_SSH_REGEX, + state='started', delay=2, timeout=180) + config_reload(duthost) @pytest.fixture(autouse=True) diff --git a/tests/tacacs/test_accounting.py b/tests/tacacs/test_accounting.py index 26667af9a0d..885360d0ec1 100644 --- a/tests/tacacs/test_accounting.py +++ b/tests/tacacs/test_accounting.py @@ -50,7 +50,7 @@ def flush_log(host, log_file): host_run_command(host, "sync {0}".format(log_file)) -def wait_for_log(host, log_file, pattern, timeout=20, check_interval=1): +def wait_for_log(host, log_file, pattern, timeout=80, check_interval=1): wait_time = 0 while wait_time <= timeout: flush_log(host, log_file) @@ -83,11 +83,11 @@ def check_tacacs_server_log_exist(ptfhost, tacacs_creds, command): def check_tacacs_server_no_other_user_log(ptfhost, tacacs_creds): username = tacacs_creds['tacacs_rw_user'] """ - Find logs not run by tacacs_rw_user from tac_plus.acct: - Remove all tacacs_rw_user's log with /D command. - Print logs not removed by /D command, which are not run by tacacs_rw_user. + Find logs not run by tacacs_rw_user & admin from tac_plus.acct: + Remove all tacacs_rw_user's and admin's log with /D command. + Print logs not removed by /D command, which are not run by tacacs_rw_user and admin. """ - log_pattern = "/ {0} /D;/.*/P".format(username) + log_pattern = "/ {0} /D;/ {1} /D;/.*/P".format(username, "admin") logs = wait_for_log(ptfhost, "/var/log/tac_plus.acct", log_pattern) pytest_assert(len(logs) == 0, "Expected to find no accounting logs but found: {}".format(logs)) diff --git a/tests/tacacs/test_ro_disk.py b/tests/tacacs/test_ro_disk.py index 94010538311..65dc5ee0bc7 100644 --- a/tests/tacacs/test_ro_disk.py +++ b/tests/tacacs/test_ro_disk.py @@ -2,6 +2,7 @@ import logging import os import time +import re from ansible.errors import AnsibleConnectionFailure from pytest_ansible.errors import AnsibleConnectionFailure as PytestAnsibleConnectionFailure @@ -160,14 +161,13 @@ def log_rotate(duthost): try: duthost.shell("logrotate --force /etc/logrotate.d/rsyslog") except RunAnsibleModuleFail as e: - if "logrotate does not support parallel execution on the same set of logfiles" in e.message: - # command will failed when log already in rotating - logger.warning("logrotate command failed: {}".format(e)) - elif "error: stat of /var/log/auth.log failed: Bad message" in e.message: - # command will failed because auth.log missing - logger.warning("logrotate command failed: {}".format(e)) - elif "du: cannot access '/var/log/auth.log': Bad message" in e.message: - # command will failed because auth.log missing + message = str(e) + state_failed_pattern = r"error: stat of \S* failed: Bad message" + can_not_access_pattern = r"du: cannot access \S*: Bad message" + if ("logrotate does not support parallel execution on the same set of logfiles" in message) or \ + re.match(state_failed_pattern, message) or \ + re.match(can_not_access_pattern, message) or \ + ("failed to compress log" in message): logger.warning("logrotate command failed: {}".format(e)) else: raise e diff --git a/tests/tacacs/test_ro_user.py b/tests/tacacs/test_ro_user.py index 847ee573100..1def4711877 100644 --- a/tests/tacacs/test_ro_user.py +++ b/tests/tacacs/test_ro_user.py @@ -81,18 +81,6 @@ def test_ro_user(localhost, duthosts, enum_rand_one_per_hwsku_hostname, tacacs_c check_output(res, 'test', 'remote_user') -def test_ro_user_ipv6(localhost, ptfhost, duthosts, enum_rand_one_per_hwsku_hostname, tacacs_creds, check_tacacs_v6): - duthost = duthosts[enum_rand_one_per_hwsku_hostname] - dutip = duthost.mgmt_ip - - res = ssh_remote_run_retry(localhost, dutip, ptfhost, - tacacs_creds['tacacs_ro_user'], - tacacs_creds['tacacs_ro_user_passwd'], - "cat /etc/passwd") - - check_output(res, 'testadmin', 'remote_user_su') - - def test_ro_user_allowed_command(localhost, duthosts, enum_rand_one_per_hwsku_hostname, tacacs_creds, check_tacacs): duthost = duthosts[enum_rand_one_per_hwsku_hostname] dutip = duthost.mgmt_ip @@ -214,3 +202,15 @@ def test_ro_user_banned_command(localhost, duthosts, enum_rand_one_per_hwsku_hos banned = ssh_remote_ban_run(localhost, dutip, tacacs_creds['tacacs_ro_user'], tacacs_creds['tacacs_ro_user_passwd'], command) pytest_assert(banned, "command '{}' authorized".format(command)) + + +def test_ro_user_ipv6(localhost, ptfhost, duthosts, enum_rand_one_per_hwsku_hostname, tacacs_creds, check_tacacs_v6): + duthost = duthosts[enum_rand_one_per_hwsku_hostname] + dutip = duthost.mgmt_ip + + res = ssh_remote_run_retry(localhost, dutip, ptfhost, + tacacs_creds['tacacs_ro_user'], + tacacs_creds['tacacs_ro_user_passwd'], + "cat /etc/passwd") + + check_output(res, 'testadmin', 'remote_user_su') diff --git a/tests/tacacs/utils.py b/tests/tacacs/utils.py index b3424cc04b3..3d398102826 100644 --- a/tests/tacacs/utils.py +++ b/tests/tacacs/utils.py @@ -66,7 +66,7 @@ def log_exist(ptfhost, sed_command): def get_auditd_config_reload_timestamp(duthost): - res = duthost.shell("sudo journalctl -u auditd --boot | grep 'audisp-tacplus re-initializing configuration'") + res = duthost.shell("sudo journalctl -u auditd --boot --no-pager | grep 'audisp-tacplus re-initializing configuration'") # noqa E501 logger.info("aaa config file timestamp {}".format(res["stdout_lines"])) if len(res["stdout_lines"]) == 0: diff --git a/tests/telemetry/events/dhcp-relay_events.py b/tests/telemetry/events/dhcp-relay_events.py index 331cdeaece2..17621eb914b 100644 --- a/tests/telemetry/events/dhcp-relay_events.py +++ b/tests/telemetry/events/dhcp-relay_events.py @@ -8,7 +8,7 @@ from tests.common.helpers.assertions import pytest_assert as py_assert from tests.common.utilities import wait_until from run_events_test import run_test -from event_utils import find_test_vlan, find_test_port_and_mac, create_dhcp_discover_packet +from event_utils import find_test_vlan, find_test_client_port_and_mac, create_dhcp_discover_packet logger = logging.getLogger(__name__) tag = "sonic-events-dhcp-relay" @@ -18,6 +18,10 @@ def test_event(duthost, gnxi_path, ptfhost, ptfadapter, data_dir, validate_yang) features_states, succeeded = duthost.get_feature_status() if not succeeded or features_states["dhcp_relay"] != "enabled": pytest.skip("dhcp_relay is not enabled, skipping dhcp_relay events") + device_metadata = duthost.config_facts(host=duthost.hostname, source="running")['ansible_facts']['DEVICE_METADATA'] + switch_role = device_metadata['localhost'].get('type', '') + if switch_role == 'BmcMgmtToRRouter': + pytest.skip("Skipping dhcp_relay events for mx topologies") logger.info("Beginning to test dhcp-relay events") run_test(duthost, gnxi_path, ptfhost, data_dir, validate_yang, trigger_dhcp_relay_discard, "dhcp_relay_discard.json", "sonic-events-dhcp-relay:dhcp-relay-discard", tag, False, 30, ptfadapter) @@ -92,7 +96,7 @@ def send_dhcp_discover_packets(duthost, ptfadapter, packets_to_send=5, interval= # Send packets # results contains up to 5 tuples of member interfaces from vlan (port, mac address) - results = find_test_port_and_mac(duthost, member_interfaces, 5) + results = find_test_client_port_and_mac(ptfadapter, duthost, member_interfaces, 5) for i in range(packets_to_send): result = results[i % len(results)] diff --git a/tests/telemetry/events/event_utils.py b/tests/telemetry/events/event_utils.py index d71aaa5e543..7cae368f651 100644 --- a/tests/telemetry/events/event_utils.py +++ b/tests/telemetry/events/event_utils.py @@ -144,19 +144,18 @@ def find_test_vlan(duthost): return {} -def find_test_port_and_mac(duthost, members, count): - # Will return up to count many up ports with their port index and mac address +def find_test_client_port_and_mac(ptfadapter, duthost, members, count): + # Will return up to count many up ports with their port index and mac address of ptf results = [] interf_status = duthost.show_interface(command="status")['ansible_facts']['int_status'] for member_interface in members: if len(results) == count: return results if interf_status[member_interface]['admin_state'] == "up": - mac = duthost.get_dut_iface_mac(member_interface) minigraph_info = duthost.minigraph_facts(host=duthost.hostname)['ansible_facts'] port_index = minigraph_info['minigraph_port_indices'][member_interface] - if mac != "" and port_index != "": - results.append([int(port_index), mac]) + if port_index != "": + results.append([int(port_index), ptfadapter.dataplane.get_mac(0, port_index).decode()]) return results diff --git a/tests/telemetry/events/host_events.py b/tests/telemetry/events/host_events.py index 24cacc521d6..2fff42780f2 100644 --- a/tests/telemetry/events/host_events.py +++ b/tests/telemetry/events/host_events.py @@ -25,7 +25,7 @@ def test_event(duthost, gnxi_path, ptfhost, ptfadapter, data_dir, validate_yang) duthost, [ "> 90% for 10 times within 20 cycles then alert repeat every 1 cycles", - "> 2% for 1 times within 5 cycles then alert repeat every 1 cycles" + "> 1% for 1 times within 5 cycles then alert repeat every 1 cycles" ] ) try: diff --git a/tests/telemetry/test_telemetry.py b/tests/telemetry/test_telemetry.py index c975f532fd4..b6b4e23212f 100644 --- a/tests/telemetry/test_telemetry.py +++ b/tests/telemetry/test_telemetry.py @@ -8,6 +8,7 @@ from tests.common.helpers.assertions import pytest_assert from tests.common.utilities import wait_until from tests.common.helpers.gnmi_utils import GNMIEnvironment +from tests.common.helpers.telemetry_helper import setup_telemetry_forpyclient from telemetry_utils import assert_equal, get_list_stdout, get_dict_stdout, skip_201911_and_older from telemetry_utils import generate_client_cli, parse_gnmi_output, check_gnmi_cli_running from tests.common import config_reload @@ -30,7 +31,9 @@ def load_new_cfg(duthost, data): duthost.copy(content=json.dumps(data, indent=4), dest=CFG_DB_PATH) - config_reload(duthost, config_source='config_db', safe_reload=True) + config_reload(duthost, config_source='config_db', safe_reload=True, check_intf_up_ports=True, wait_for_bgp=True) + # config reload overrides testing telemetry config, ensure testing config exists + setup_telemetry_forpyclient(duthost) def get_buffer_queues_cnt(ptfhost, gnxi_path, dut_ip, iface, gnmi_port): @@ -49,6 +52,14 @@ def get_buffer_queues_cnt(ptfhost, gnxi_path, dut_ip, iface, gnmi_port): return cnt +def check_buffer_queues_cnt_cmd_output(ptfhost, gnxi_path, dut_ip, iface_to_check, gnmi_port): + cnt = get_buffer_queues_cnt(ptfhost, gnxi_path, dut_ip, iface_to_check, gnmi_port) + if cnt > 0: + return True + else: + return False + + def test_config_db_parameters(duthosts, enum_rand_one_per_hwsku_hostname): """Verifies required telemetry parameters from config_db. """ @@ -129,6 +140,7 @@ def test_telemetry_ouput(duthosts, enum_rand_one_per_hwsku_hostname, ptfhost, @pytest.mark.parametrize('setup_streaming_telemetry', [False], indirect=True) +@pytest.mark.disable_loganalyzer def test_telemetry_queue_buffer_cnt(duthosts, enum_rand_one_per_hwsku_hostname, ptfhost, setup_streaming_telemetry, gnxi_path): """ @@ -165,11 +177,15 @@ def test_telemetry_queue_buffer_cnt(duthosts, enum_rand_one_per_hwsku_hostname, data['DEVICE_METADATA']["localhost"]["create_only_config_db_buffers"] \ = "true" load_new_cfg(duthost, data) + wait_until(60, 20, 0, check_buffer_queues_cnt_cmd_output, ptfhost, gnxi_path, + dut_ip, iface_to_check, env.gnmi_port) pre_del_cnt = get_buffer_queues_cnt(ptfhost, gnxi_path, dut_ip, iface_to_check, env.gnmi_port) # Remove buffer queue and reload and get new number of queue counters del data['BUFFER_QUEUE'][iface_buffer_queues[0]] load_new_cfg(duthost, data) + wait_until(60, 20, 0, check_buffer_queues_cnt_cmd_output, ptfhost, gnxi_path, + dut_ip, iface_to_check, env.gnmi_port) post_del_cnt = get_buffer_queues_cnt(ptfhost, gnxi_path, dut_ip, iface_to_check, env.gnmi_port) pytest_assert(pre_del_cnt > post_del_cnt, diff --git a/tests/test_parallel_modes.json b/tests/test_parallel_modes.json index 6d443f8c631..a33b3669293 100644 --- a/tests/test_parallel_modes.json +++ b/tests/test_parallel_modes.json @@ -8,7 +8,6 @@ "iface_namingmode/test_iface_namingmode.py": "FULL_PARALLEL", "lldp/test_lldp.py": "FULL_PARALLEL", "memory_checker/test_memory_checker.py": "FULL_PARALLEL", - "override_config_table/test_override_config_table_masic.py": "FULL_PARALLEL", "passw_hardening/test_passw_hardening.py": "FULL_PARALLEL", "pc/test_po_cleanup.py": "FULL_PARALLEL", "platform_tests/api/test_chassis.py": "FULL_PARALLEL", diff --git a/tests/test_parallel_modes/cisco_t2_8800.json b/tests/test_parallel_modes/cisco_t2_8800.json new file mode 100644 index 00000000000..6d443f8c631 --- /dev/null +++ b/tests/test_parallel_modes/cisco_t2_8800.json @@ -0,0 +1,31 @@ +{ + "arp/test_neighbor_mac_noptf.py": "FULL_PARALLEL", + "autorestart/test_container_autorestart.py": "RP_FIRST", + "bgp/test_bgp_fact.py": "FULL_PARALLEL", + "bgp/test_bgp_session_flap.py": "FULL_PARALLEL", + "container_checker/test_container_checker.py": "RP_FIRST", + "crm/test_crm.py": "FULL_PARALLEL", + "iface_namingmode/test_iface_namingmode.py": "FULL_PARALLEL", + "lldp/test_lldp.py": "FULL_PARALLEL", + "memory_checker/test_memory_checker.py": "FULL_PARALLEL", + "override_config_table/test_override_config_table_masic.py": "FULL_PARALLEL", + "passw_hardening/test_passw_hardening.py": "FULL_PARALLEL", + "pc/test_po_cleanup.py": "FULL_PARALLEL", + "platform_tests/api/test_chassis.py": "FULL_PARALLEL", + "platform_tests/api/test_module.py": "FULL_PARALLEL", + "platform_tests/api/test_sfp.py": "FULL_PARALLEL", + "platform_tests/api/test_thermal.py": "FULL_PARALLEL", + "platform_tests/cli/test_show_chassis_module.py": "FULL_PARALLEL", + "platform_tests/link_flap/test_cont_link_flap.py": "FULL_PARALLEL", + "platform_tests/sfp/test_sfputil.py": "FULL_PARALLEL", + "platform_tests/test_memory_exhaustion.py": "RP_FIRST", + "platform_tests/test_reboot.py": "RP_FIRST", + "platform_tests/test_reload_config.py": "RP_FIRST", + "platform_tests/test_sequential_restart.py": "FULL_PARALLEL", + "show_techsupport/test_techsupport.py": "FULL_PARALLEL", + "show_techsupport/test_techsupport_no_secret.py": "FULL_PARALLEL", + "snmp/test_snmp_cpu.py": "FULL_PARALLEL", + "snmp/test_snmp_interfaces.py": "FULL_PARALLEL", + "snmp/test_snmp_link_local.py": "FULL_PARALLEL", + "snmp/test_snmp_queue.py": "RP_FIRST" +} diff --git a/tests/test_parallel_modes/default.json b/tests/test_parallel_modes/default.json new file mode 100644 index 00000000000..e82a6fb6a77 --- /dev/null +++ b/tests/test_parallel_modes/default.json @@ -0,0 +1,5 @@ +{ + "bgp/test_bgp_fact.py": "FULL_PARALLEL", + "lldp/test_lldp.py": "FULL_PARALLEL", + "snmp/test_snmp_interfaces.py": "FULL_PARALLEL" +} diff --git a/tests/test_pretest.py b/tests/test_pretest.py index 9fbc147f96a..65aa73e2a41 100644 --- a/tests/test_pretest.py +++ b/tests/test_pretest.py @@ -168,6 +168,7 @@ def test_disable_rsyslog_rate_limit(duthosts, enum_dut_hostname): output = duthost.command('config syslog --help')['stdout'] manually_enable_feature = False + feature_exception_dict = dict() if 'rate-limit-feature' in output: # in 202305, the feature is disabled by default for warmboot/fastboot # performance, need manually enable it via command @@ -184,9 +185,14 @@ def test_disable_rsyslog_rate_limit(duthosts, enum_dut_hostname): output = duthost.shell("docker images", module_ignore_errors=True)['stdout'] if "sonic-telemetry" not in output: continue - duthost.modify_syslog_rate_limit(feature_name, rl_option='disable') + try: + duthost.modify_syslog_rate_limit(feature_name, rl_option='disable') + except Exception as e: + feature_exception_dict[feature_name] = str(e) if manually_enable_feature: duthost.command('config syslog rate-limit-feature disable') + if feature_exception_dict: + pytest.fail(f"The test failed on some of the dockers. feature_exception_dict = {feature_exception_dict}") def collect_dut_lossless_prio(dut): diff --git a/tests/upgrade_path/conftest.py b/tests/upgrade_path/conftest.py index 415da345d61..f2f9773c610 100644 --- a/tests/upgrade_path/conftest.py +++ b/tests/upgrade_path/conftest.py @@ -4,6 +4,9 @@ def pytest_runtest_setup(item): from_list = item.config.getoption('base_image_list') to_list = item.config.getoption('target_image_list') + multi_hop_upgrade_path = item.config.getoption('multi_hop_upgrade_path') + if multi_hop_upgrade_path: + return if not from_list or not to_list: pytest.skip("base_image_list or target_image_list is empty") diff --git a/tests/upgrade_path/test_multi_hop_upgrade_path.py b/tests/upgrade_path/test_multi_hop_upgrade_path.py new file mode 100644 index 00000000000..839802c5f41 --- /dev/null +++ b/tests/upgrade_path/test_multi_hop_upgrade_path.py @@ -0,0 +1,76 @@ +import pytest +import logging +from tests.common.fixtures.advanced_reboot import get_advanced_reboot # noqa F401 +from tests.common.fixtures.consistency_checker.consistency_checker import consistency_checker_provider # noqa F401 +from tests.common.helpers.assertions import pytest_assert +from tests.common.reboot import get_reboot_cause +from tests.common.utilities import wait_until +from tests.common.platform.device_utils import check_neighbors, \ + multihop_advanceboot_loganalyzer_factory, verify_dut_health # noqa F401 +from tests.common.helpers.upgrade_helpers import SYSTEM_STABILIZE_MAX_TIME, check_copp_config, check_reboot_cause, \ + check_services, install_sonic, multi_hop_warm_upgrade_test_helper, check_asic_and_db_consistency +from tests.upgrade_path.utilities import cleanup_prev_images, boot_into_base_image +from tests.common.fixtures.ptfhost_utils import copy_ptftests_directory # noqa F401 + +pytestmark = [ + pytest.mark.topology('any'), + pytest.mark.sanity_check(skip_sanity=True), + pytest.mark.disable_loganalyzer, + pytest.mark.skip_check_dut_health +] +logger = logging.getLogger(__name__) + + +def test_multi_hop_upgrade_path(localhost, duthosts, rand_one_dut_hostname, ptfhost, tbinfo, request, + get_advanced_reboot, multihop_advanceboot_loganalyzer_factory, # noqa F811 + verify_dut_health, consistency_checker_provider): # noqa F811 + duthost = duthosts[rand_one_dut_hostname] + multi_hop_upgrade_path = request.config.getoption('multi_hop_upgrade_path') + upgrade_type = request.config.getoption('upgrade_type') + assert upgrade_type == "warm", "test_multi_hop_upgrade_path only supports warm upgrade" + enable_cpa = request.config.getoption('enable_cpa') + upgrade_path_urls = multi_hop_upgrade_path.split(",") + if len(upgrade_path_urls) < 2: + pytest.skip("Need atleast 2 URLs to test multi-hop upgrade path") + + def base_image_setup(): + """Run only once, to boot the device into the base image""" + base_image = upgrade_path_urls[0] + logger.info("Setting up base image {}".format(base_image)) + cleanup_prev_images(duthost) + + # Install base image + boot_into_base_image(duthost, localhost, base_image, tbinfo) + logger.info("Base image setup complete") + + def pre_hop_setup(hop_index): + """Run before each hop in the multi-hop upgrade path""" + # Install target image + to_image = upgrade_path_urls[hop_index] + logger.info("Installing hop {} image {}".format(hop_index, to_image)) + install_sonic(duthost, to_image, tbinfo) + logger.info("Finished setup for hop {} image {}".format(hop_index, to_image)) + + def post_hop_teardown(hop_index): + """Run after each hop in the multi-hop upgrade path""" + to_image = upgrade_path_urls[hop_index] + logger.info("Starting post hop teardown for hop {} image {}".format(hop_index, to_image)) + + logger.info("Check reboot cause of hop {}. Expected cause {}".format(hop_index, upgrade_type)) + networking_uptime = duthost.get_networking_uptime().seconds + timeout = max((SYSTEM_STABILIZE_MAX_TIME - networking_uptime), 1) + pytest_assert(wait_until(timeout, 5, 0, check_reboot_cause, duthost, upgrade_type), + "Reboot cause {} did not match the trigger - {}".format(get_reboot_cause(duthost), upgrade_type)) + check_services(duthost) + check_neighbors(duthost, tbinfo) + check_copp_config(duthost) + check_asic_and_db_consistency(request.config, duthost, consistency_checker_provider) + logger.info("Finished post hop teardown for hop {} image {}".format(hop_index, to_image)) + + multi_hop_warm_upgrade_test_helper( + duthost, localhost, ptfhost, tbinfo, get_advanced_reboot, upgrade_type, + upgrade_path_urls, + multihop_advanceboot_loganalyzer_factory=multihop_advanceboot_loganalyzer_factory, + base_image_setup=base_image_setup, + pre_hop_setup=pre_hop_setup, post_hop_teardown=post_hop_teardown, + enable_cpa=enable_cpa) diff --git a/tests/upgrade_path/test_upgrade_path.py b/tests/upgrade_path/test_upgrade_path.py index c0a41ad37c1..f0a0cb4638a 100644 --- a/tests/upgrade_path/test_upgrade_path.py +++ b/tests/upgrade_path/test_upgrade_path.py @@ -1,10 +1,8 @@ import pytest import logging -import re -from tests.common import reboot -from tests.common.helpers.upgrade_helpers import install_sonic, check_sonic_version,\ - upgrade_test_helper, check_asic_and_db_consistency +from tests.common.helpers.upgrade_helpers import install_sonic, upgrade_test_helper, check_asic_and_db_consistency from tests.common.helpers.upgrade_helpers import restore_image # noqa F401 +from tests.upgrade_path.utilities import cleanup_prev_images, boot_into_base_image from tests.common.fixtures.advanced_reboot import get_advanced_reboot # noqa F401 from tests.common.fixtures.consistency_checker.consistency_checker import consistency_checker_provider # noqa F401 from tests.common.platform.device_utils import verify_dut_health # noqa F401 @@ -14,7 +12,6 @@ from tests.common.fixtures.ptfhost_utils import change_mac_addresses # noqa F401 from tests.common.fixtures.ptfhost_utils import remove_ip_addresses # noqa F401 from tests.common.fixtures.ptfhost_utils import copy_arp_responder_py # noqa F401 -from tests.common.errors import RunAnsibleModuleFail from tests.common.platform.warmboot_sad_cases import get_sad_case_list, SAD_CASE_LIST @@ -44,47 +41,16 @@ def upgrade_path_lists(request): return upgrade_type, from_list, to_list, restore_to_image, enable_cpa -def cleanup_prev_images(duthost): - logger.info("Cleaning up previously installed images on DUT") - current_os_version = duthost.shell('sonic_installer list | grep Current | cut -f2 -d " "')['stdout'] - duthost.shell("sonic_installer set_next_boot {}".format(current_os_version), module_ignore_errors=True) - duthost.shell("sonic_installer set-next-boot {}".format(current_os_version), module_ignore_errors=True) - duthost.shell("sonic_installer cleanup -y", module_ignore_errors=True) - - def setup_upgrade_test(duthost, localhost, from_image, to_image, tbinfo, upgrade_type, modify_reboot_script=None, allow_fail=False): logger.info("Test upgrade path from {} to {}".format(from_image, to_image)) cleanup_prev_images(duthost) # Install base image - logger.info("Installing {}".format(from_image)) - try: - target_version = install_sonic(duthost, from_image, tbinfo) - except RunAnsibleModuleFail as err: - migration_err_regexp = r"Traceback.*migrate_sonic_packages.*SonicRuntimeException" - msg = err.results['msg'].replace('\n', '') - if re.search(migration_err_regexp, msg): - logger.info( - "Ignore the package migration error when downgrading to from_image") - target_version = duthost.shell( - "cat /tmp/downloaded-sonic-image-version")['stdout'] - else: - raise err - # Remove old config_db before rebooting the DUT in case it is not successfully - # removed in install_sonic due to migration error - logger.info("Remove old config_db file if exists, to load minigraph from scratch") - if duthost.shell("ls /host/old_config/minigraph.xml", module_ignore_errors=True)['rc'] == 0: - duthost.shell("rm -f /host/old_config/config_db.json") - # Perform a cold reboot - logger.info("Cold reboot the DUT to make the base image as current") - # for 6100 devices, sometimes cold downgrade will not work, use soft-reboot here - reboot_type = 'soft' if "s6100" in duthost.facts["platform"] else 'cold' - reboot(duthost, localhost, reboot_type=reboot_type) - check_sonic_version(duthost, target_version) + boot_into_base_image(duthost, localhost, from_image, tbinfo) # Install target image logger.info("Upgrading to {}".format(to_image)) - target_version = install_sonic(duthost, to_image, tbinfo) + install_sonic(duthost, to_image, tbinfo) if allow_fail and modify_reboot_script: # add fail step to reboot script diff --git a/tests/upgrade_path/utilities.py b/tests/upgrade_path/utilities.py new file mode 100644 index 00000000000..c43a04bcd16 --- /dev/null +++ b/tests/upgrade_path/utilities.py @@ -0,0 +1,41 @@ +import logging +import re +from tests.common.errors import RunAnsibleModuleFail +from tests.common.helpers.upgrade_helpers import install_sonic, reboot, check_sonic_version + +logger = logging.getLogger(__name__) + + +def boot_into_base_image(duthost, localhost, base_image, tbinfo): + logger.info("Installing {}".format(base_image)) + try: + target_version = install_sonic(duthost, base_image, tbinfo) + except RunAnsibleModuleFail as err: + migration_err_regexp = r"Traceback.*migrate_sonic_packages.*SonicRuntimeException" + msg = err.results['msg'].replace('\n', '') + if re.search(migration_err_regexp, msg): + logger.info( + "Ignore the package migration error when downgrading to base_image") + target_version = duthost.shell( + "cat /tmp/downloaded-sonic-image-version")['stdout'] + else: + raise err + # Remove old config_db before rebooting the DUT in case it is not successfully + # removed in install_sonic due to migration error + logger.info("Remove old config_db file if exists, to load minigraph from scratch") + if duthost.shell("ls /host/old_config/minigraph.xml", module_ignore_errors=True)['rc'] == 0: + duthost.shell("rm -f /host/old_config/config_db.json") + # Perform a cold reboot + logger.info("Cold reboot the DUT to make the base image as current") + # for 6100 devices, sometimes cold downgrade will not work, use soft-reboot here + reboot_type = 'soft' if "s6100" in duthost.facts["platform"] else 'cold' + reboot(duthost, localhost, reboot_type=reboot_type) + check_sonic_version(duthost, target_version) + + +def cleanup_prev_images(duthost): + logger.info("Cleaning up previously installed images on DUT") + current_os_version = duthost.shell('sonic_installer list | grep Current | cut -f2 -d " "')['stdout'] + duthost.shell("sonic_installer set_next_boot {}".format(current_os_version), module_ignore_errors=True) + duthost.shell("sonic_installer set-next-boot {}".format(current_os_version), module_ignore_errors=True) + duthost.shell("sonic_installer cleanup -y", module_ignore_errors=True) diff --git a/tests/vlan/test_autostate_disabled.py b/tests/vlan/test_autostate_disabled.py index 91e0cd82c02..f9d4dd91afa 100644 --- a/tests/vlan/test_autostate_disabled.py +++ b/tests/vlan/test_autostate_disabled.py @@ -48,6 +48,7 @@ def test_autostate_disabled(self, duthosts, enum_frontend_dut_hostname): """ Verify vlan interface autostate is disabled on SONiC. """ + pytest.skip("Temporarily skipped to let the sonic-swss submodule be updated.") duthost = duthosts[enum_frontend_dut_hostname] dut_hostname = duthost.hostname diff --git a/tests/vlan/test_vlan_ping.py b/tests/vlan/test_vlan_ping.py index fd19021c88f..5dead0e8efd 100644 --- a/tests/vlan/test_vlan_ping.py +++ b/tests/vlan/test_vlan_ping.py @@ -10,6 +10,7 @@ from tests.common.helpers.assertions import pytest_assert as py_assert from tests.common.dualtor.mux_simulator_control import toggle_all_simulator_ports_to_rand_selected_tor_m # noqa F401 from tests.common.dualtor.dual_tor_utils import lower_tor_host # noqa F401 +from tests.vlan.test_vlan import populate_mac_table # noqa F401 logger = logging.getLogger(__name__) @@ -60,15 +61,15 @@ def vlan_ping_setup(duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, tbinfo, vm_host_info = {} vm_name, vm_info = None, None - topo_name = tbinfo["topo"]["name"] + topo_type = tbinfo["topo"]["type"] for nbr_name, nbr_info in list(nbrhosts.items()): - if topo_name != "m0" or (topo_name == "m0" and "M1" in nbr_name): + if topo_type != "m0" or (topo_type == "m0" and "M1" in nbr_name): vm_name = nbr_name vm_info = nbr_info break py_assert(vm_name is not None, "Can't get neighbor vm") - if topo_name == "mx": + if topo_type == "mx": vm_ip_with_prefix = six.ensure_text(vm_info['conf']['interfaces']['Ethernet1']['ipv4']) output = vm_info['host'].command("ip addr show dev eth1") else: @@ -104,7 +105,7 @@ def vlan_ping_setup(duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, tbinfo, # Get the bgp neighbor connected to the selected VM if a_bgp_nbr['name'] == vm_name and a_bgp_nbr['addr'] == str(vm_host_info['ipv4']): # Find the interface that connects to the selected VM - if topo_name == "mx": + if topo_type == "mx": for intf in mg_facts['minigraph_interfaces']: if intf['peer_addr'] == str(vm_host_info['ipv4']): vm_host_info['port_index_list'] = [mg_facts['minigraph_ptf_indices'][intf['attachto']]] @@ -126,7 +127,6 @@ def vlan_ping_setup(duthosts, rand_one_dut_hostname, ptfhost, nbrhosts, tbinfo, portchannel = intf['attachto'] for iface in mg_facts['minigraph_portchannels'][portchannel]['members']: ifaces_list.append(mg_facts['minigraph_ptf_indices'][iface]) - break vm_host_info['port_index_list'] = ifaces_list break @@ -220,7 +220,7 @@ def verify_icmp_packet(dut_mac, src_port, dst_port, ptfadapter, tbinfo, def test_vlan_ping(vlan_ping_setup, duthosts, rand_one_dut_hostname, ptfadapter, tbinfo, - toggle_all_simulator_ports_to_rand_selected_tor_m): # noqa F811 + toggle_all_simulator_ports_to_rand_selected_tor_m, populate_mac_table): # noqa F811 """ test for checking connectivity of statically added ipv4 and ipv6 arp entries """ diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC10.yaml new file mode 120000 index 00000000000..ccc8461ebcc --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC10.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC10.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC3.yaml new file mode 120000 index 00000000000..6c5274f5fb5 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC3.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC3.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC4.yaml new file mode 120000 index 00000000000..71dae096349 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC4.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC4.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC5.yaml new file mode 120000 index 00000000000..1a65a32c453 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC5.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC5.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC6.yaml new file mode 120000 index 00000000000..ebc425f09bc --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC6.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC6.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC7.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC7.yaml new file mode 120000 index 00000000000..e54ce24eae1 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC7.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC7.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC8.yaml new file mode 120000 index 00000000000..26a28fb18f8 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC8.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC8.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC9.yaml new file mode 120000 index 00000000000..2ae92be2cec --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C36_Arista-7808R3A-FM_LC9.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC9.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC10.yaml index d9e015581ce..4576964bf3c 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC10.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC10.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '74' peer slot: '6' + 112: + peer asic: '0' + peer lk: '75' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '93' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '90' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '76' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '95' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '56' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '66' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '78' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '90' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '95' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '77' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '82' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '84' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '72' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '79' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '75' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '73' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '87' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '79' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '93' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '81' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '34' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '82' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '95' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '94' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '84' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '34' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '90' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '78' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '88' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '76' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '88' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '56' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '76' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '64' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '74' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '34' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '93' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '33' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '33' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '70' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '72' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '74' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '66' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '77' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '64' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '75' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '73' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '70' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '75' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '87' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '66' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '56' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '84' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '82' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '79' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '78' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '91' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '92' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '89' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '83' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '73' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '80' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '77' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '91' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '78' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '73' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '86' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '32' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '93' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '84' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '86' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '86' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '92' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '74' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '32' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '84' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '79' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '77' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '85' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '71' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '91' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '78' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '76' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '67' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '58' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '32' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '77' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '69' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '73' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '92' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '84' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '86' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '65' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '83' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '91' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '68' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '78' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '72' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '72' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '86' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '93' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '79' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '80' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '74' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '89' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '68' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '71' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '83' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '85' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '69' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '80' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '76' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '65' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '93' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '67' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '73' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '86' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '58' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '32' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '67' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '68' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '65' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '69' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '71' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '68' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '65' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '72' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '58' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '67' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '85' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '78' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '76' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '79' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '69' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '58' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '74' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '72' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '93' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '73' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '71' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '76' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '32' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '86' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '91' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '86' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '85' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '80' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '77' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '79' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '83' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '74' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '84' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '77' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '92' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '86' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '93' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '84' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '89' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '86' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '80' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '83' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '68' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '72' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '89' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '58' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '32' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '73' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '72' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '67' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '68' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '74' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '65' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '65' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '79' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '69' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '78' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '69' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '71' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '93' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '58' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '76' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '83' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '67' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '85' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '91' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '71' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '86' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '92' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '76' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '80' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '86' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '74' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '89' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '79' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '84' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '77' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '89' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '85' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '92' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC3.yaml index afd1e8e9a91..8baa27973de 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC3.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC3.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '20' peer slot: '6' + 112: + peer asic: '0' + peer lk: '81' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '25' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '31' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '43' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '28' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '82' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '88' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '40' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '31' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '28' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '42' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '39' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '34' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '46' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '22' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '44' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '45' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '33' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '22' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '25' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '36' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '41' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '39' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '28' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '27' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '34' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '41' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '31' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '40' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '24' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '43' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '24' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '82' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '43' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '94' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '20' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '41' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '25' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '21' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '21' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '89' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '46' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '20' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '88' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '42' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '94' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '81' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '45' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '89' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '44' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '33' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '88' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '82' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '34' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '39' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '22' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '32' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '29' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '25' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '30' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '38' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '45' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '37' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '42' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '29' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '32' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '45' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '35' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '44' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '26' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '39' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '35' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '35' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '25' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '47' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '44' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '39' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '40' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '42' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '43' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '90' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '29' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '32' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '41' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '91' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '83' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '44' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '42' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '95' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '45' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '25' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '39' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '35' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '24' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '38' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '29' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '47' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '32' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '46' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '46' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '35' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '26' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '40' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '37' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '47' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '30' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '47' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '90' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '38' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '43' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '95' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '37' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '41' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '24' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '26' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '91' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '45' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '35' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '83' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '44' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '91' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '47' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '24' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '95' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '90' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '47' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '24' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '46' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '83' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '91' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '43' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '32' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '41' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '40' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '95' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '83' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '47' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '46' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '26' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '45' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '90' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '41' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '44' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '35' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '29' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '35' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '43' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '37' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '42' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '40' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '38' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '47' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '39' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '42' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '25' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '35' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '26' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '39' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '30' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '35' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '37' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '38' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '47' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '46' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '30' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '83' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '44' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '45' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '46' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '91' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '47' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '47' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '24' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '24' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '40' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '95' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '32' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '95' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '90' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '26' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '83' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '41' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '38' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '91' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '43' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '29' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '90' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '35' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '25' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '41' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '37' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '35' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '47' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '30' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '40' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '39' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '42' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '30' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '43' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '25' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC4.yaml index efaa375433d..7922ab5eabd 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC4.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC4.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '17' peer slot: '6' + 112: + peer asic: '0' + peer lk: '37' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '23' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '6' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '8' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '0' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '36' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '29' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '10' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '6' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '0' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '22' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '12' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '11' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '19' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '11' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '16' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '17' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '9' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '11' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '23' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '13' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '154' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '12' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '0' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '3' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '11' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '154' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '6' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '10' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '7' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '8' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '7' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '36' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '8' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '18' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '17' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '154' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '23' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '153' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '153' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '30' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '19' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '17' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '29' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '22' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '18' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '37' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '17' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '30' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '16' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '9' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '29' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '36' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '11' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '12' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '11' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '10' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '5' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '2' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '4' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '14' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '19' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '15' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '9' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '5' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '10' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '19' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '13' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '152' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '1' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '14' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '8' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '13' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '2' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '18' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '152' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '14' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '21' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '9' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '23' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '28' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '5' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '10' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '20' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '31' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '38' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '152' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '9' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '27' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '19' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '2' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '14' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '13' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '26' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '14' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '5' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '16' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '10' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '12' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '12' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '8' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '1' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '21' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '15' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '18' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '4' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '16' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '28' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '14' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '23' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '27' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '15' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '20' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '26' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '1' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '31' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '19' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '8' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '38' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '152' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '31' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '16' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '26' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '27' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '28' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '16' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '26' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '12' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '38' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '31' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '23' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '10' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '20' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '21' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '27' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '38' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '18' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '12' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '1' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '19' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '28' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '20' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '152' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '8' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '5' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '13' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '23' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '15' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '9' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '21' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '14' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '18' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '14' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '9' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '2' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '13' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '1' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '14' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '4' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '8' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '15' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '14' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '16' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '12' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '4' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '38' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '152' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '19' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '12' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '31' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '16' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '18' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '26' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '26' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '21' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '27' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '10' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '27' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '28' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '1' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '38' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '20' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '14' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '31' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '23' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '5' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '28' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '8' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '2' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '20' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '15' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '13' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '18' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '4' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '21' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '14' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '9' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '4' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '23' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '2' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC5.yaml index 43e13ca2377..790c7eae288 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC5.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC5.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '147' peer slot: '6' + 112: + peer asic: '0' + peer lk: '5' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '155' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '167' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '158' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '160' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '6' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '0' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '150' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '167' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '160' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '149' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '152' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '159' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '145' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '149' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '146' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '144' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '158' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '149' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '155' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '154' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '171' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '152' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '160' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '163' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '159' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '171' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '167' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '150' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '164' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '158' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '164' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '6' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '158' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '145' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '147' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '171' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '155' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '161' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '161' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '3' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '145' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '147' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '0' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '149' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '145' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '5' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '144' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '3' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '146' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '158' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '0' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '6' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '159' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '152' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '149' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '156' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '166' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '161' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '165' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '155' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '146' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '153' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '159' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '166' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '156' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '146' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '157' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '167' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '162' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '156' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '157' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '157' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '161' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '147' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '167' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '156' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '148' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '159' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '150' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '7' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '166' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '156' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '151' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '4' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '15' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '167' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '159' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '1' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '146' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '161' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '156' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '157' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '2' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '155' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '166' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '144' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '156' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '148' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '148' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '157' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '162' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '148' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '153' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '147' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '165' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '144' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '7' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '155' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '150' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '1' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '153' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '151' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '2' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '162' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '4' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '146' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '157' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '15' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '167' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '4' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '144' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '2' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '1' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '7' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '144' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '2' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '148' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '15' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '4' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '150' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '156' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '151' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '148' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '1' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '15' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '147' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '148' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '162' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '146' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '7' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '151' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '167' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '157' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '166' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '157' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '150' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '153' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '159' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '148' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '155' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '147' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '156' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '159' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '161' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '157' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '162' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '156' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '165' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '157' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '153' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '155' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '144' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '148' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '165' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '15' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '167' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '146' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '148' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '4' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '144' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '147' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '2' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '2' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '148' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '1' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '156' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '1' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '7' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '162' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '15' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '151' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '155' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '4' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '150' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '166' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '7' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '157' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '161' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '151' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '153' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '157' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '147' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '165' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '148' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '156' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '159' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '165' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '150' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '161' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC6.yaml index 95af19beb6a..62873226008 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC6.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC6.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '172' peer slot: '6' + 112: + peer asic: '0' + peer lk: '164' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '173' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '187' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '176' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '190' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '166' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '160' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '183' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '187' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '190' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '173' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '176' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '181' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '172' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '180' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '171' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '169' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '182' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '180' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '173' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '177' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '184' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '176' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '190' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '188' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '181' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '184' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '187' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '183' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '184' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '176' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '184' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '166' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '176' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '169' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '172' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '184' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '173' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '186' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '186' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '162' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '172' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '172' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '160' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '173' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '169' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '164' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '169' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '162' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '171' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '182' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '160' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '166' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '181' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '176' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '180' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '183' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '186' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '189' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '185' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '179' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '182' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '178' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '177' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '186' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '183' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '182' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '179' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '175' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '191' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '178' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '180' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '179' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '189' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '170' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '175' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '178' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '174' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '177' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '175' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '163' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '186' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '183' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '168' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '165' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '151' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '175' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '177' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '168' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '182' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '189' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '178' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '179' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '170' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '179' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '186' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '174' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '183' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '181' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '181' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '180' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '191' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '174' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '178' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '170' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '185' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '174' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '163' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '179' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '175' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '168' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '178' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '168' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '170' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '191' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '165' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '182' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '180' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '151' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '175' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '165' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '174' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '170' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '168' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '163' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '174' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '170' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '181' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '151' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '165' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '175' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '183' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '168' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '174' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '168' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '151' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '170' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '181' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '191' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '182' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '163' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '168' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '175' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '180' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '186' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '179' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '175' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '178' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '177' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '174' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '179' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '170' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '178' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '177' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '189' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '179' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '191' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '178' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '185' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '180' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '178' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '179' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '174' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '181' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '185' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '151' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '175' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '182' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '181' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '165' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '174' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '170' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '170' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '170' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '174' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '168' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '183' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '168' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '163' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '191' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '151' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '168' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '179' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '165' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '175' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '186' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '163' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '180' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '189' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '168' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '178' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '179' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '170' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '185' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '174' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '178' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '177' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '185' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '175' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '189' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC8.yaml index a3b58dfa083..f4623dd8eec 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC8.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC8.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '115' peer slot: '6' + 112: + peer asic: '0' + peer lk: '121' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '105' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '101' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '111' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '97' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '120' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '113' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '106' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '101' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '97' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '116' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '108' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '105' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '112' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '104' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '114' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '113' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '107' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '104' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '105' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '111' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '54' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '108' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '97' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '98' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '105' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '54' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '101' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '106' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '100' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '111' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '100' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '120' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '111' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '114' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '115' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '54' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '105' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '50' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '50' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '117' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '112' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '115' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '113' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '116' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '114' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '121' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '113' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '117' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '114' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '107' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '113' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '120' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '105' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '108' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '104' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '104' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '102' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '96' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '103' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '110' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '123' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '109' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '107' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '102' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '104' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '123' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '109' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '110' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '99' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '108' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '106' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '109' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '96' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '115' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '110' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '108' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '118' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '107' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '119' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '112' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '102' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '104' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '117' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '122' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '135' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '110' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '107' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '118' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '123' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '96' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '108' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '109' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '116' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '110' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '102' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '119' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '104' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '126' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '126' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '106' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '99' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '118' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '109' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '115' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '103' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '119' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '112' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '110' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '119' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '118' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '109' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '117' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '116' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '99' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '122' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '123' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '106' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '135' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '110' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '122' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '119' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '116' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '118' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '112' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '119' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '116' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '126' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '135' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '122' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '119' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '104' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '117' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '118' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '118' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '135' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '115' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '126' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '99' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '123' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '112' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '117' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '110' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '106' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '102' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '109' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '119' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '109' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '107' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '118' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '110' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '115' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '108' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '107' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '96' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '109' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '99' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '108' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '103' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '106' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '109' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '110' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '119' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '126' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '103' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '135' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '110' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '123' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '126' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '122' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '119' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '115' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '116' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '116' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '118' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '118' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '104' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '118' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '112' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '99' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '135' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '117' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '110' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '122' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '119' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '102' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '112' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '106' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '96' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '117' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '109' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '109' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '115' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '103' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '118' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '108' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '107' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '103' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '119' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '96' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC9.yaml index e8b0be09583..d8c7a91eced 100644 --- a/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC9.yaml +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC9.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '52' peer slot: '6' + 112: + peer asic: '0' + peer lk: '103' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '87' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '71' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '61' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '64' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '102' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '96' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '62' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '71' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '64' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '54' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '57' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '62' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '49' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '63' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '48' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '50' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '61' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '63' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '87' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '59' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '92' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '57' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '64' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '67' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '62' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '92' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '71' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '62' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '68' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '61' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '68' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '102' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '61' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '49' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '52' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '92' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '87' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '80' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '80' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '97' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '49' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '52' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '96' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '54' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '49' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '103' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '50' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '97' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '48' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '61' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '96' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '102' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '62' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '57' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '63' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '60' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '70' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '65' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '69' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '58' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '53' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '56' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '60' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '70' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '60' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '53' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '57' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '85' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '66' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '59' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '63' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '57' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '65' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '51' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '85' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '59' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '55' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '60' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '53' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '99' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '70' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '60' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '52' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '101' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '100' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '85' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '60' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '51' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '53' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '65' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '59' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '57' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '98' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '58' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '70' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '48' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '60' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '55' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '55' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '63' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '66' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '55' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '56' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '51' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '69' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '48' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '99' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '58' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '53' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '51' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '56' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '52' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '98' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '66' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '101' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '53' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '63' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '100' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '85' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '101' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '48' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '98' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '51' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '99' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '48' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '98' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '55' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '100' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '101' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '53' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '60' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '52' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '55' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '51' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '100' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '51' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '55' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '66' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '53' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '99' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '52' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '85' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '63' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '70' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '57' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '53' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '56' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '60' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '55' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '58' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '51' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '59' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '60' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '65' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '57' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '66' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '59' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '69' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '63' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '56' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '58' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '48' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '55' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '69' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '100' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '85' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '53' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '55' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '101' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '48' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '51' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '98' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '98' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '55' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '51' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '60' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '51' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '99' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '66' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '100' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '52' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '58' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '101' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '53' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '70' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '99' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '63' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '65' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '52' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '56' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '57' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '51' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '69' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '55' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '59' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '60' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '69' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '53' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '65' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC10.yaml new file mode 120000 index 00000000000..ccc8461ebcc --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC10.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC10.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC3.yaml new file mode 120000 index 00000000000..6c5274f5fb5 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC3.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC3.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC4.yaml new file mode 120000 index 00000000000..71dae096349 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC4.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC4.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC5.yaml new file mode 120000 index 00000000000..1a65a32c453 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC5.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC5.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC6.yaml new file mode 120000 index 00000000000..ebc425f09bc --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC6.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC6.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC7.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC7.yaml new file mode 120000 index 00000000000..e54ce24eae1 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC7.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC7.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC8.yaml new file mode 120000 index 00000000000..26a28fb18f8 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC8.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC8.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC9.yaml new file mode 120000 index 00000000000..2ae92be2cec --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36D2-D36_Arista-7808R3A-FM_LC9.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36D2-C72_Arista-7808R3A-FM_LC9.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC10.yaml new file mode 120000 index 00000000000..22e699904ce --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC10.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC10.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC3.yaml new file mode 120000 index 00000000000..ebea1f6539b --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC3.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC3.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC4.yaml new file mode 120000 index 00000000000..f4eb424026a --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC4.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC4.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC5.yaml new file mode 120000 index 00000000000..30100aefb0f --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC5.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC5.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC6.yaml new file mode 120000 index 00000000000..de31f38afff --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC6.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC6.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC7.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC7.yaml new file mode 120000 index 00000000000..4c692763fe9 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC7.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC7.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC8.yaml new file mode 120000 index 00000000000..22f097aae2f --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC8.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC8.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC9.yaml new file mode 120000 index 00000000000..ef724282b74 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-C72_Arista-7808R3A-FM_LC9.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC9.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC10.yaml new file mode 120000 index 00000000000..22e699904ce --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC10.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC10.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC3.yaml new file mode 120000 index 00000000000..ebea1f6539b --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC3.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC3.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC4.yaml new file mode 120000 index 00000000000..f4eb424026a --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC4.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC4.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC5.yaml new file mode 120000 index 00000000000..30100aefb0f --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC5.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC5.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC6.yaml new file mode 120000 index 00000000000..de31f38afff --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC6.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC6.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC7.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC7.yaml new file mode 120000 index 00000000000..4c692763fe9 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC7.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC7.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC8.yaml new file mode 120000 index 00000000000..22f097aae2f --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC8.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC8.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC9.yaml new file mode 120000 index 00000000000..ef724282b74 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3A-36DM2-D36_Arista-7808R3A-FM_LC9.yaml @@ -0,0 +1 @@ +Arista-7800R3A-36DM2-C36_Arista-7808R3A-FM_LC9.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC10.yaml index d9e015581ce..4576964bf3c 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC10.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC10.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '74' peer slot: '6' + 112: + peer asic: '0' + peer lk: '75' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '93' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '90' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '76' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '95' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '56' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '66' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '78' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '90' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '95' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '77' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '82' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '84' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '72' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '79' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '75' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '73' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '87' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '79' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '93' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '81' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '34' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '82' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '95' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '94' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '84' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '34' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '90' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '78' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '88' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '76' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '88' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '56' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '76' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '64' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '74' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '34' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '93' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '33' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '33' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '70' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '72' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '74' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '66' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '77' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '64' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '75' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '73' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '70' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '75' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '87' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '66' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '56' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '84' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '82' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '79' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '78' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '91' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '92' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '89' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '83' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '73' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '80' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '77' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '91' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '78' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '73' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '86' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '32' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '93' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '84' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '86' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '86' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '92' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '74' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '32' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '84' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '79' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '77' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '85' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '71' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '91' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '78' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '76' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '67' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '58' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '32' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '77' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '69' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '73' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '92' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '84' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '86' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '65' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '83' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '91' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '68' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '78' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '72' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '72' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '86' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '93' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '79' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '80' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '74' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '89' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '68' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '71' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '83' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '85' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '69' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '80' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '76' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '65' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '93' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '67' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '73' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '86' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '58' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '32' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '67' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '68' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '65' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '69' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '71' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '68' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '65' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '72' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '58' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '67' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '85' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '78' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '76' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '79' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '69' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '58' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '74' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '72' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '93' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '73' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '71' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '76' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '32' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '86' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '91' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '86' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '85' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '80' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '77' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '79' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '83' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '74' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '84' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '77' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '92' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '86' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '93' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '84' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '89' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '86' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '80' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '83' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '68' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '72' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '89' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '58' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '32' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '73' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '72' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '67' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '68' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '74' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '65' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '65' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '79' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '69' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '78' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '69' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '71' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '93' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '58' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '76' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '83' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '67' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '85' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '91' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '71' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '86' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '92' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '76' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '80' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '86' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '74' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '89' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '79' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '84' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '77' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '89' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '85' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '92' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC3.yaml index afd1e8e9a91..8baa27973de 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC3.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC3.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '20' peer slot: '6' + 112: + peer asic: '0' + peer lk: '81' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '25' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '31' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '43' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '28' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '82' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '88' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '40' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '31' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '28' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '42' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '39' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '34' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '46' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '22' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '44' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '45' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '33' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '22' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '25' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '36' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '41' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '39' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '28' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '27' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '34' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '41' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '31' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '40' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '24' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '43' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '24' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '82' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '43' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '94' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '20' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '41' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '25' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '21' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '21' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '89' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '46' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '20' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '88' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '42' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '94' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '81' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '45' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '89' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '44' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '33' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '88' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '82' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '34' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '39' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '22' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '32' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '29' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '25' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '30' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '38' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '45' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '37' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '42' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '29' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '32' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '45' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '35' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '44' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '26' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '39' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '35' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '35' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '25' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '47' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '44' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '39' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '40' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '42' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '43' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '90' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '29' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '32' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '41' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '91' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '83' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '44' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '42' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '95' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '45' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '25' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '39' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '35' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '24' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '38' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '29' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '47' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '32' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '46' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '46' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '35' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '26' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '40' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '37' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '47' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '30' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '47' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '90' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '38' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '43' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '95' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '37' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '41' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '24' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '26' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '91' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '45' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '35' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '83' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '44' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '91' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '47' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '24' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '95' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '90' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '47' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '24' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '46' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '83' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '91' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '43' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '32' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '41' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '40' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '95' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '83' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '47' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '46' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '26' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '45' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '90' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '41' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '44' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '35' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '29' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '35' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '43' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '37' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '42' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '40' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '38' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '47' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '39' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '42' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '25' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '35' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '26' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '39' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '30' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '35' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '37' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '38' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '47' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '46' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '30' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '83' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '44' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '45' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '46' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '91' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '47' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '47' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '24' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '24' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '40' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '95' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '32' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '95' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '90' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '26' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '83' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '41' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '38' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '91' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '43' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '29' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '90' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '35' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '25' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '41' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '37' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '35' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '47' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '30' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '40' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '39' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '42' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '30' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '43' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '25' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC4.yaml index efaa375433d..7922ab5eabd 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC4.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC4.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '17' peer slot: '6' + 112: + peer asic: '0' + peer lk: '37' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '23' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '6' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '8' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '0' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '36' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '29' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '10' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '6' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '0' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '22' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '12' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '11' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '19' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '11' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '16' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '17' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '9' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '11' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '23' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '13' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '154' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '12' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '0' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '3' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '11' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '154' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '6' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '10' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '7' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '8' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '7' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '36' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '8' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '18' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '17' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '154' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '23' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '153' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '153' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '30' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '19' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '17' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '29' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '22' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '18' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '37' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '17' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '30' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '16' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '9' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '29' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '36' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '11' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '12' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '11' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '10' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '5' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '2' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '4' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '14' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '19' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '15' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '9' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '5' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '10' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '19' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '13' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '152' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '1' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '14' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '8' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '13' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '2' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '18' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '152' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '14' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '21' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '9' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '23' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '28' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '5' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '10' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '20' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '31' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '38' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '152' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '9' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '27' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '19' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '2' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '14' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '13' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '26' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '14' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '5' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '16' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '10' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '12' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '12' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '8' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '1' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '21' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '15' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '18' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '4' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '16' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '28' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '14' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '23' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '27' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '15' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '20' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '26' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '1' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '31' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '19' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '8' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '38' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '152' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '31' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '16' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '26' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '27' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '28' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '16' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '26' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '12' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '38' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '31' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '23' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '10' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '20' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '21' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '27' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '38' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '18' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '12' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '1' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '19' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '28' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '20' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '152' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '8' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '5' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '13' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '23' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '15' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '9' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '21' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '14' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '18' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '14' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '9' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '2' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '13' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '1' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '14' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '4' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '8' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '15' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '14' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '16' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '12' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '4' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '38' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '152' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '19' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '12' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '31' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '16' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '18' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '26' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '26' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '21' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '27' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '10' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '27' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '28' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '1' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '38' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '20' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '14' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '31' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '23' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '5' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '28' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '8' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '2' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '20' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '15' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '13' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '18' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '4' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '21' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '14' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '9' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '4' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '23' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '2' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC5.yaml index 43e13ca2377..790c7eae288 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC5.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC5.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '147' peer slot: '6' + 112: + peer asic: '0' + peer lk: '5' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '155' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '167' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '158' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '160' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '6' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '0' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '150' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '167' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '160' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '149' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '152' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '159' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '145' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '149' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '146' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '144' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '158' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '149' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '155' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '154' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '171' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '152' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '160' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '163' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '159' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '171' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '167' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '150' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '164' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '158' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '164' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '6' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '158' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '145' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '147' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '171' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '155' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '161' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '161' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '3' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '145' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '147' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '0' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '149' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '145' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '5' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '144' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '3' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '146' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '158' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '0' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '6' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '159' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '152' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '149' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '156' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '166' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '161' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '165' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '155' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '146' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '153' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '159' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '166' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '156' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '146' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '157' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '167' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '162' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '156' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '157' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '157' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '161' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '147' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '167' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '156' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '148' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '159' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '150' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '7' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '166' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '156' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '151' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '4' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '15' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '167' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '159' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '1' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '146' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '161' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '156' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '157' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '2' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '155' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '166' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '144' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '156' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '148' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '148' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '157' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '162' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '148' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '153' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '147' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '165' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '144' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '7' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '155' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '150' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '1' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '153' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '151' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '2' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '162' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '4' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '146' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '157' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '15' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '167' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '4' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '144' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '2' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '1' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '7' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '144' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '2' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '148' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '15' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '4' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '150' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '156' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '151' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '148' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '1' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '15' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '147' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '148' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '162' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '146' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '7' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '151' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '167' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '157' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '166' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '157' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '150' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '153' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '159' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '148' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '155' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '147' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '156' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '159' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '161' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '157' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '162' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '156' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '165' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '157' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '153' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '155' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '144' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '148' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '165' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '15' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '167' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '146' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '148' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '4' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '144' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '147' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '2' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '2' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '148' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '1' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '156' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '1' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '7' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '162' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '15' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '151' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '155' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '4' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '150' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '166' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '7' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '157' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '161' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '151' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '153' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '157' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '147' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '165' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '148' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '156' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '159' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '165' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '150' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '161' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC6.yaml index 95af19beb6a..62873226008 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC6.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC6.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '172' peer slot: '6' + 112: + peer asic: '0' + peer lk: '164' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '173' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '187' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '176' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '190' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '166' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '160' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '183' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '187' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '190' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '173' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '176' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '181' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '172' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '180' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '171' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '169' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '182' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '180' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '173' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '177' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '184' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '176' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '190' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '188' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '181' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '184' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '187' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '183' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '184' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '176' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '184' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '166' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '176' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '169' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '172' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '184' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '173' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '186' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '186' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '162' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '172' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '172' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '160' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '173' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '169' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '164' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '169' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '162' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '171' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '182' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '160' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '166' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '181' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '176' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '180' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '183' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '186' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '189' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '185' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '179' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '182' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '178' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '177' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '186' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '183' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '182' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '179' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '175' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '191' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '178' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '180' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '179' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '189' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '170' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '175' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '178' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '174' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '177' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '175' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '163' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '186' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '183' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '168' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '165' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '151' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '175' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '177' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '168' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '182' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '189' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '178' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '179' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '170' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '179' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '186' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '174' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '183' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '181' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '181' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '180' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '191' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '174' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '178' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '170' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '185' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '174' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '163' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '179' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '175' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '168' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '178' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '168' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '170' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '191' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '165' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '182' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '180' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '151' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '175' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '165' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '174' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '170' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '168' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '163' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '174' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '170' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '181' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '151' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '165' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '175' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '183' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '168' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '174' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '168' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '151' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '170' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '181' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '191' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '182' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '163' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '168' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '175' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '180' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '186' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '179' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '175' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '178' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '177' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '174' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '179' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '170' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '178' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '177' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '189' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '179' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '191' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '178' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '185' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '180' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '178' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '179' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '174' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '181' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '185' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '151' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '175' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '182' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '181' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '165' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '174' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '170' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '170' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '170' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '174' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '168' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '183' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '168' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '163' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '191' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '151' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '168' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '179' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '165' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '175' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '186' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '163' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '180' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '189' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '168' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '178' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '179' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '170' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '185' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '174' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '178' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '177' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '185' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '175' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '189' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC8.yaml index a3b58dfa083..f4623dd8eec 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC8.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC8.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '115' peer slot: '6' + 112: + peer asic: '0' + peer lk: '121' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '105' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '101' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '111' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '97' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '120' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '113' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '106' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '101' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '97' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '116' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '108' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '105' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '112' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '104' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '114' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '113' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '107' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '104' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '105' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '111' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '54' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '108' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '97' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '98' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '105' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '54' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '101' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '106' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '100' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '111' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '100' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '120' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '111' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '114' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '115' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '54' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '105' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '50' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '50' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '117' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '112' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '115' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '113' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '116' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '114' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '121' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '113' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '117' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '114' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '107' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '113' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '120' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '105' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '108' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '104' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '104' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '102' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '96' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '103' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '110' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '123' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '109' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '107' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '102' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '104' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '123' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '109' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '110' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '99' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '108' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '106' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '109' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '96' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '115' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '110' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '108' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '118' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '107' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '119' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '112' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '102' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '104' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '117' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '122' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '135' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '110' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '107' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '118' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '123' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '96' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '108' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '109' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '116' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '110' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '102' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '119' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '104' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '126' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '126' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '106' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '99' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '118' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '109' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '115' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '103' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '119' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '112' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '110' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '119' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '118' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '109' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '117' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '116' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '99' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '122' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '123' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '106' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '135' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '110' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '122' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '119' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '116' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '118' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '112' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '119' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '116' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '126' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '135' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '122' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '119' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '104' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '117' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '118' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '118' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '135' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '115' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '126' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '99' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '123' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '112' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '117' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '110' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '106' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '102' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '109' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '119' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '109' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '107' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '118' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '110' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '115' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '108' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '107' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '96' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '109' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '99' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '108' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '103' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '106' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '109' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '110' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '119' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '126' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '103' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '135' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '110' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '123' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '126' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '122' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '119' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '115' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '116' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '116' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '118' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '118' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '104' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '118' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '112' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '99' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '135' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '117' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '110' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '122' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '119' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '102' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '112' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '106' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '96' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '117' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '109' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '109' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '115' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '103' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '118' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '108' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '107' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '103' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '119' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '96' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC9.yaml index e8b0be09583..d8c7a91eced 100644 --- a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC9.yaml +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-C72_Arista-7808R3A-FM_LC9.yaml @@ -352,3 +352,804 @@ asic0: peer asic: '0' peer lk: '52' peer slot: '6' + 112: + peer asic: '0' + peer lk: '103' + peer slot: '6' + 113: + peer asic: '0' + peer lk: '87' + peer slot: '5' + 114: + peer asic: '1' + peer lk: '71' + peer slot: '6' + 115: + peer asic: '0' + peer lk: '61' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '64' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '102' + peer slot: '6' + 118: + peer asic: '0' + peer lk: '96' + peer slot: '6' + 119: + peer asic: '0' + peer lk: '62' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '71' + peer slot: '5' + 129: + peer asic: '1' + peer lk: '64' + peer slot: '5' + 130: + peer asic: '1' + peer lk: '54' + peer slot: '6' + 131: + peer asic: '1' + peer lk: '57' + peer slot: '5' + 132: + peer asic: '1' + peer lk: '62' + peer slot: '5' + 133: + peer asic: '1' + peer lk: '49' + peer slot: '6' + 134: + peer asic: '0' + peer lk: '63' + peer slot: '5' + 135: + peer asic: '1' + peer lk: '48' + peer slot: '6' + 144: + peer asic: '1' + peer lk: '50' + peer slot: '6' + 145: + peer asic: '1' + peer lk: '61' + peer slot: '6' + 146: + peer asic: '0' + peer lk: '63' + peer slot: '4' + 147: + peer asic: '0' + peer lk: '87' + peer slot: '4' + 148: + peer asic: '1' + peer lk: '59' + peer slot: '6' + 149: + peer asic: '0' + peer lk: '92' + peer slot: '4' + 150: + peer asic: '1' + peer lk: '57' + peer slot: '4' + 151: + peer asic: '1' + peer lk: '64' + peer slot: '4' + 152: + peer asic: '1' + peer lk: '67' + peer slot: '6' + 153: + peer asic: '1' + peer lk: '62' + peer slot: '4' + 154: + peer asic: '0' + peer lk: '92' + peer slot: '6' + 155: + peer asic: '1' + peer lk: '71' + peer slot: '4' + 156: + peer asic: '0' + peer lk: '62' + peer slot: '4' + 157: + peer asic: '1' + peer lk: '68' + peer slot: '6' + 158: + peer asic: '0' + peer lk: '61' + peer slot: '3' + 159: + peer asic: '1' + peer lk: '68' + peer slot: '4' + 168: + peer asic: '0' + peer lk: '102' + peer slot: '3' + 169: + peer asic: '0' + peer lk: '61' + peer slot: '5' + 170: + peer asic: '0' + peer lk: '49' + peer slot: '3' + 171: + peer asic: '0' + peer lk: '52' + peer slot: '3' + 172: + peer asic: '0' + peer lk: '92' + peer slot: '5' + 173: + peer asic: '0' + peer lk: '87' + peer slot: '3' + 174: + peer asic: '0' + peer lk: '80' + peer slot: '3' + 175: + peer asic: '0' + peer lk: '80' + peer slot: '5' + 176: + peer asic: '0' + peer lk: '97' + peer slot: '3' + 177: + peer asic: '1' + peer lk: '49' + peer slot: '3' + 178: + peer asic: '0' + peer lk: '52' + peer slot: '5' + 179: + peer asic: '0' + peer lk: '96' + peer slot: '3' + 180: + peer asic: '1' + peer lk: '54' + peer slot: '3' + 181: + peer asic: '0' + peer lk: '49' + peer slot: '5' + 182: + peer asic: '0' + peer lk: '103' + peer slot: '3' + 183: + peer asic: '1' + peer lk: '50' + peer slot: '3' + 184: + peer asic: '0' + peer lk: '97' + peer slot: '5' + 185: + peer asic: '1' + peer lk: '48' + peer slot: '3' + 186: + peer asic: '1' + peer lk: '61' + peer slot: '3' + 187: + peer asic: '0' + peer lk: '96' + peer slot: '5' + 188: + peer asic: '0' + peer lk: '102' + peer slot: '5' + 189: + peer asic: '1' + peer lk: '62' + peer slot: '3' + 190: + peer asic: '1' + peer lk: '57' + peer slot: '3' + 191: + peer asic: '0' + peer lk: '63' + peer slot: '3' +asic1: + 8: + peer asic: '1' + peer lk: '60' + peer slot: '1' + 9: + peer asic: '1' + peer lk: '70' + peer slot: '1' + 10: + peer asic: '1' + peer lk: '65' + peer slot: '1' + 11: + peer asic: '1' + peer lk: '69' + peer slot: '1' + 12: + peer asic: '1' + peer lk: '58' + peer slot: '1' + 13: + peer asic: '0' + peer lk: '53' + peer slot: '1' + 14: + peer asic: '1' + peer lk: '56' + peer slot: '1' + 15: + peer asic: '0' + peer lk: '60' + peer slot: '1' + 16: + peer asic: '1' + peer lk: '70' + peer slot: '2' + 17: + peer asic: '1' + peer lk: '60' + peer slot: '2' + 18: + peer asic: '0' + peer lk: '53' + peer slot: '2' + 19: + peer asic: '0' + peer lk: '57' + peer slot: '1' + 20: + peer asic: '0' + peer lk: '85' + peer slot: '1' + 21: + peer asic: '1' + peer lk: '66' + peer slot: '1' + 22: + peer asic: '0' + peer lk: '59' + peer slot: '1' + 23: + peer asic: '1' + peer lk: '63' + peer slot: '1' + 32: + peer asic: '0' + peer lk: '57' + peer slot: '2' + 33: + peer asic: '1' + peer lk: '65' + peer slot: '2' + 34: + peer asic: '1' + peer lk: '51' + peer slot: '1' + 35: + peer asic: '0' + peer lk: '85' + peer slot: '2' + 36: + peer asic: '0' + peer lk: '59' + peer slot: '2' + 37: + peer asic: '1' + peer lk: '55' + peer slot: '1' + 38: + peer asic: '0' + peer lk: '60' + peer slot: '2' + 39: + peer asic: '1' + peer lk: '53' + peer slot: '1' + 44: + peer asic: '0' + peer lk: '99' + peer slot: '1' + 45: + peer asic: '1' + peer lk: '70' + peer slot: '3' + 46: + peer asic: '1' + peer lk: '60' + peer slot: '3' + 47: + peer asic: '1' + peer lk: '52' + peer slot: '1' + 48: + peer asic: '0' + peer lk: '101' + peer slot: '1' + 49: + peer asic: '0' + peer lk: '100' + peer slot: '1' + 50: + peer asic: '0' + peer lk: '85' + peer slot: '3' + 51: + peer asic: '0' + peer lk: '60' + peer slot: '3' + 52: + peer asic: '0' + peer lk: '51' + peer slot: '1' + 53: + peer asic: '0' + peer lk: '53' + peer slot: '3' + 54: + peer asic: '1' + peer lk: '65' + peer slot: '3' + 55: + peer asic: '0' + peer lk: '59' + peer slot: '3' + 60: + peer asic: '0' + peer lk: '57' + peer slot: '3' + 61: + peer asic: '0' + peer lk: '98' + peer slot: '1' + 62: + peer asic: '1' + peer lk: '58' + peer slot: '4' + 63: + peer asic: '1' + peer lk: '70' + peer slot: '4' + 64: + peer asic: '0' + peer lk: '48' + peer slot: '1' + 65: + peer asic: '1' + peer lk: '60' + peer slot: '4' + 66: + peer asic: '0' + peer lk: '55' + peer slot: '4' + 67: + peer asic: '0' + peer lk: '55' + peer slot: '1' + 68: + peer asic: '1' + peer lk: '63' + peer slot: '4' + 69: + peer asic: '1' + peer lk: '66' + peer slot: '4' + 70: + peer asic: '1' + peer lk: '55' + peer slot: '4' + 71: + peer asic: '1' + peer lk: '56' + peer slot: '4' + 72: + peer asic: '1' + peer lk: '51' + peer slot: '4' + 73: + peer asic: '1' + peer lk: '69' + peer slot: '2' + 74: + peer asic: '0' + peer lk: '48' + peer slot: '4' + 75: + peer asic: '0' + peer lk: '99' + peer slot: '4' + 76: + peer asic: '1' + peer lk: '58' + peer slot: '2' + 77: + peer asic: '1' + peer lk: '53' + peer slot: '4' + 78: + peer asic: '0' + peer lk: '51' + peer slot: '4' + 79: + peer asic: '1' + peer lk: '56' + peer slot: '2' + 80: + peer asic: '1' + peer lk: '52' + peer slot: '4' + 81: + peer asic: '0' + peer lk: '98' + peer slot: '4' + 82: + peer asic: '1' + peer lk: '66' + peer slot: '2' + 83: + peer asic: '0' + peer lk: '101' + peer slot: '4' + 84: + peer asic: '0' + peer lk: '53' + peer slot: '4' + 85: + peer asic: '1' + peer lk: '63' + peer slot: '2' + 86: + peer asic: '0' + peer lk: '100' + peer slot: '4' + 87: + peer asic: '0' + peer lk: '85' + peer slot: '4' + 96: + peer asic: '0' + peer lk: '101' + peer slot: '6' + 97: + peer asic: '0' + peer lk: '48' + peer slot: '6' + 98: + peer asic: '0' + peer lk: '98' + peer slot: '3' + 99: + peer asic: '0' + peer lk: '51' + peer slot: '6' + 100: + peer asic: '0' + peer lk: '99' + peer slot: '6' + 101: + peer asic: '0' + peer lk: '48' + peer slot: '3' + 102: + peer asic: '0' + peer lk: '98' + peer slot: '6' + 103: + peer asic: '0' + peer lk: '55' + peer slot: '3' + 104: + peer asic: '0' + peer lk: '100' + peer slot: '6' + 112: + peer asic: '0' + peer lk: '101' + peer slot: '3' + 113: + peer asic: '1' + peer lk: '53' + peer slot: '6' + 114: + peer asic: '1' + peer lk: '60' + peer slot: '6' + 115: + peer asic: '1' + peer lk: '52' + peer slot: '6' + 116: + peer asic: '1' + peer lk: '55' + peer slot: '6' + 117: + peer asic: '0' + peer lk: '51' + peer slot: '3' + 118: + peer asic: '0' + peer lk: '100' + peer slot: '3' + 119: + peer asic: '1' + peer lk: '51' + peer slot: '6' + 120: + peer asic: '0' + peer lk: '55' + peer slot: '6' + 121: + peer asic: '1' + peer lk: '66' + peer slot: '6' + 122: + peer asic: '0' + peer lk: '53' + peer slot: '6' + 123: + peer asic: '0' + peer lk: '99' + peer slot: '3' + 124: + peer asic: '1' + peer lk: '52' + peer slot: '3' + 125: + peer asic: '0' + peer lk: '85' + peer slot: '6' + 127: + peer asic: '1' + peer lk: '63' + peer slot: '6' + 128: + peer asic: '1' + peer lk: '70' + peer slot: '6' + 129: + peer asic: '0' + peer lk: '57' + peer slot: '6' + 130: + peer asic: '1' + peer lk: '53' + peer slot: '3' + 131: + peer asic: '1' + peer lk: '56' + peer slot: '6' + 132: + peer asic: '0' + peer lk: '60' + peer slot: '6' + 133: + peer asic: '1' + peer lk: '55' + peer slot: '3' + 134: + peer asic: '1' + peer lk: '58' + peer slot: '6' + 135: + peer asic: '1' + peer lk: '51' + peer slot: '3' + 136: + peer asic: '0' + peer lk: '59' + peer slot: '5' + 137: + peer asic: '0' + peer lk: '60' + peer slot: '5' + 138: + peer asic: '1' + peer lk: '65' + peer slot: '6' + 139: + peer asic: '0' + peer lk: '57' + peer slot: '5' + 140: + peer asic: '1' + peer lk: '66' + peer slot: '3' + 141: + peer asic: '0' + peer lk: '59' + peer slot: '6' + 142: + peer asic: '1' + peer lk: '69' + peer slot: '6' + 143: + peer asic: '1' + peer lk: '63' + peer slot: '3' + 144: + peer asic: '1' + peer lk: '56' + peer slot: '3' + 145: + peer asic: '1' + peer lk: '58' + peer slot: '3' + 146: + peer asic: '0' + peer lk: '48' + peer slot: '5' + 147: + peer asic: '0' + peer lk: '55' + peer slot: '5' + 148: + peer asic: '1' + peer lk: '69' + peer slot: '3' + 149: + peer asic: '0' + peer lk: '100' + peer slot: '5' + 150: + peer asic: '0' + peer lk: '85' + peer slot: '5' + 151: + peer asic: '0' + peer lk: '53' + peer slot: '5' + 152: + peer asic: '0' + peer lk: '55' + peer slot: '2' + 153: + peer asic: '0' + peer lk: '101' + peer slot: '5' + 154: + peer asic: '0' + peer lk: '48' + peer slot: '2' + 155: + peer asic: '1' + peer lk: '51' + peer slot: '5' + 156: + peer asic: '0' + peer lk: '98' + peer slot: '5' + 157: + peer asic: '0' + peer lk: '98' + peer slot: '2' + 158: + peer asic: '1' + peer lk: '55' + peer slot: '5' + 159: + peer asic: '0' + peer lk: '51' + peer slot: '5' + 168: + peer asic: '1' + peer lk: '60' + peer slot: '5' + 169: + peer asic: '0' + peer lk: '51' + peer slot: '2' + 170: + peer asic: '0' + peer lk: '99' + peer slot: '5' + 171: + peer asic: '1' + peer lk: '66' + peer slot: '5' + 172: + peer asic: '0' + peer lk: '100' + peer slot: '2' + 173: + peer asic: '1' + peer lk: '52' + peer slot: '5' + 174: + peer asic: '1' + peer lk: '58' + peer slot: '5' + 175: + peer asic: '0' + peer lk: '101' + peer slot: '2' + 176: + peer asic: '1' + peer lk: '53' + peer slot: '5' + 177: + peer asic: '1' + peer lk: '70' + peer slot: '5' + 178: + peer asic: '0' + peer lk: '99' + peer slot: '2' + 179: + peer asic: '1' + peer lk: '63' + peer slot: '5' + 180: + peer asic: '1' + peer lk: '65' + peer slot: '5' + 181: + peer asic: '1' + peer lk: '52' + peer slot: '2' + 182: + peer asic: '1' + peer lk: '56' + peer slot: '5' + 183: + peer asic: '0' + peer lk: '57' + peer slot: '4' + 184: + peer asic: '1' + peer lk: '51' + peer slot: '2' + 185: + peer asic: '1' + peer lk: '69' + peer slot: '5' + 186: + peer asic: '1' + peer lk: '55' + peer slot: '2' + 187: + peer asic: '0' + peer lk: '59' + peer slot: '4' + 188: + peer asic: '0' + peer lk: '60' + peer slot: '4' + 189: + peer asic: '1' + peer lk: '69' + peer slot: '4' + 190: + peer asic: '1' + peer lk: '53' + peer slot: '2' + 191: + peer asic: '1' + peer lk: '65' + peer slot: '4' diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC10.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC10.yaml new file mode 120000 index 00000000000..fe37c04b942 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC10.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC10.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC3.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC3.yaml new file mode 120000 index 00000000000..6453c583b45 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC3.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC3.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC4.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC4.yaml new file mode 120000 index 00000000000..382ce871bbc --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC4.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC4.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC5.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC5.yaml new file mode 120000 index 00000000000..d565e1f87cd --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC5.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC5.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC6.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC6.yaml new file mode 120000 index 00000000000..0ea8a172828 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC6.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC6.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC7.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC7.yaml new file mode 120000 index 00000000000..391cb33ed08 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC7.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC7.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC8.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC8.yaml new file mode 120000 index 00000000000..ac7e706bc37 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC8.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC8.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC9.yaml b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC9.yaml new file mode 120000 index 00000000000..3d5be0e9990 --- /dev/null +++ b/tests/voq/fabric_data/Arista-7800R3AK-36DM2-D36_Arista-7808R3A-FM_LC9.yaml @@ -0,0 +1 @@ +Arista-7800R3AK-36DM2-C36_Arista-7808R3A-FM_LC9.yaml \ No newline at end of file diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC1.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC1.yaml new file mode 100644 index 00000000000..8db68f3996d --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC1.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '97' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '101' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '128' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '98' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '128' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '130' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '130' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '96' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '100' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '129' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '131' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '131' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '100' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '102' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '103' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '129' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '49' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '48' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '132' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '132' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '135' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '101' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '135' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '99' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '133' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '96' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '134' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '133' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '124' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '103' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '134' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '102' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '97' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '125' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '51' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '98' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '51' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '50' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '50' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '124' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '48' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '127' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '126' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '127' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '49' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '126' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '125' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '99' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '131' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '129' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '102' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '131' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '100' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '103' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '129' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '130' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '96' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '100' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '128' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '98' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '130' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '97' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '101' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '128' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '135' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '99' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '101' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '132' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '49' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '135' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '48' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '132' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '134' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '102' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '134' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '133' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '133' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '103' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '96' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '124' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '124' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '50' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '98' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '50' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '51' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '97' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '51' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '125' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '125' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '99' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '49' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '126' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '126' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '127' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '127' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '48' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '96' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '50' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '50' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '98' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '51' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '51' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '125' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '125' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '97' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '126' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '127' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '49' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '99' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '127' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '48' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '126' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '133' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '134' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '134' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '102' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '133' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '103' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '124' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '124' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '97' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '99' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '132' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '49' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '135' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '135' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '132' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '48' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '96' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '130' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '130' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '98' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '128' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '128' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '101' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '101' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '131' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '131' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '129' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '129' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '102' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '100' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '100' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '103' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '48' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '127' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '49' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '127' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '126' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '99' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '126' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '125' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '125' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '97' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '98' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '51' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '51' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '96' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '50' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '50' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '124' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '103' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '124' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '133' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '102' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '133' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '134' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '134' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '48' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '132' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '132' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '49' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '135' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '99' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '97' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '101' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '135' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '128' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '98' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '101' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '130' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '96' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '128' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '130' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '100' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '100' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '103' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '129' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '129' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '131' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '131' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '102' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '60' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '52' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '121' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '62' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '121' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '122' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '122' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '61' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '53' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '120' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '123' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '123' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '53' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '55' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '54' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '120' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '58' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '59' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '117' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '117' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '118' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '52' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '118' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '63' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '116' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '61' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '119' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '116' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '112' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '54' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '119' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '55' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '60' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '113' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '56' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '62' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '56' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '57' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '57' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '112' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '59' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '114' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '115' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '114' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '58' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '115' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '113' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '63' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '123' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '120' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '55' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '123' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '53' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '54' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '120' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '122' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '61' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '53' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '121' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '62' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '122' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '60' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '52' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '121' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '118' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '63' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '52' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '117' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '58' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '118' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '59' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '117' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '119' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '55' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '119' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '116' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '116' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '54' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '61' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '112' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '112' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '57' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '62' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '57' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '56' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '60' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '56' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '113' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '113' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '63' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '58' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '115' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '115' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '114' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '114' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '59' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '61' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '57' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '57' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '62' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '56' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '56' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '113' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '113' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '60' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '115' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '114' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '58' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '63' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '114' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '59' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '115' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '116' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '119' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '119' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '55' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '116' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '54' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '112' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '112' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '60' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '63' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '117' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '58' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '118' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '118' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '117' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '59' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '61' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '122' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '122' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '62' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '121' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '121' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '52' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '52' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '123' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '123' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '120' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '120' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '55' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '53' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '53' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '54' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '59' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '114' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '58' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '114' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '115' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '63' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '115' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '113' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '113' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '60' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '62' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '56' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '56' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '61' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '57' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '57' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '112' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '54' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '112' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '116' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '55' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '116' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '119' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '119' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '59' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '117' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '117' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '58' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '118' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '63' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '60' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '52' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '118' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '121' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '62' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '52' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '122' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '61' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '121' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '122' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '53' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '53' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '54' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '120' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '120' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '123' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '123' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '55' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC2.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC2.yaml new file mode 100644 index 00000000000..5c3aa6ab008 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC2.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '121' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '126' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '180' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '123' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '180' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '182' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '182' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '120' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '127' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '181' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '183' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '183' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '127' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '125' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '124' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '181' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '113' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '112' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '176' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '176' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '179' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '126' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '179' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '122' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '177' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '120' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '178' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '177' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '184' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '124' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '178' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '125' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '121' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '185' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '115' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '123' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '115' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '114' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '114' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '184' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '112' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '186' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '187' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '186' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '113' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '187' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '185' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '122' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '183' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '181' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '125' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '183' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '127' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '124' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '181' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '182' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '120' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '127' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '180' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '123' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '182' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '121' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '126' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '180' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '179' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '122' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '126' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '176' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '113' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '179' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '112' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '176' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '178' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '125' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '178' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '177' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '177' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '124' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '120' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '184' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '184' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '114' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '123' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '114' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '115' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '121' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '115' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '185' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '185' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '122' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '113' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '187' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '187' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '186' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '186' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '112' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '120' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '114' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '114' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '123' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '115' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '115' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '185' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '185' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '121' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '187' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '186' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '113' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '122' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '186' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '112' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '187' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '177' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '178' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '178' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '125' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '177' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '124' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '184' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '184' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '121' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '122' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '176' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '113' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '179' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '179' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '176' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '112' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '120' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '182' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '182' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '123' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '180' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '180' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '126' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '126' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '183' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '183' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '181' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '181' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '125' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '127' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '127' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '124' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '112' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '186' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '113' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '186' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '187' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '122' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '187' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '185' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '185' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '121' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '123' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '115' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '115' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '120' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '114' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '114' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '184' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '124' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '184' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '177' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '125' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '177' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '178' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '178' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '112' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '176' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '176' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '113' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '179' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '122' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '121' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '126' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '179' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '180' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '123' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '126' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '182' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '120' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '180' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '182' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '127' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '127' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '124' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '181' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '181' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '183' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '183' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '125' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '107' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '118' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '189' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '105' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '189' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '190' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '190' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '106' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '119' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '188' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '191' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '191' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '119' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '116' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '117' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '188' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '109' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '108' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '137' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '137' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '139' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '118' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '139' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '104' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '136' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '106' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '138' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '136' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '140' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '117' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '138' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '116' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '107' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '141' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '111' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '105' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '111' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '110' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '110' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '140' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '108' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '143' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '142' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '143' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '109' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '142' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '141' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '104' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '191' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '188' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '116' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '191' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '119' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '117' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '188' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '190' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '106' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '119' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '189' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '105' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '190' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '107' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '118' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '189' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '139' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '104' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '118' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '137' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '109' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '139' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '108' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '137' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '138' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '116' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '138' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '136' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '136' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '117' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '106' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '140' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '140' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '110' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '105' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '110' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '111' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '107' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '111' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '141' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '141' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '104' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '109' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '142' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '142' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '143' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '143' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '108' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '106' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '110' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '110' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '105' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '111' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '111' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '141' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '141' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '107' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '142' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '143' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '109' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '104' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '143' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '108' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '142' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '136' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '138' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '138' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '116' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '136' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '117' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '140' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '140' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '107' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '104' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '137' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '109' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '139' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '139' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '137' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '108' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '106' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '190' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '190' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '105' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '189' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '189' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '118' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '118' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '191' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '191' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '188' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '188' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '116' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '119' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '119' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '117' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '108' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '143' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '109' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '143' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '142' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '104' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '142' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '141' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '141' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '107' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '105' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '111' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '111' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '106' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '110' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '110' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '140' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '117' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '140' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '136' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '116' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '136' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '138' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '138' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '108' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '137' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '137' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '109' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '139' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '104' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '107' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '118' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '139' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '189' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '105' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '118' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '190' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '106' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '189' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '190' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '119' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '119' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '117' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '188' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '188' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '191' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '191' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '116' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC3.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC3.yaml new file mode 100644 index 00000000000..5a57849e0c4 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC3.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '184' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '143' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '159' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '186' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '159' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '156' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '156' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '185' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '142' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '158' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '157' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '157' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '142' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '140' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '141' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '158' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '188' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '189' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '153' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '153' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '155' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '143' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '155' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '187' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '152' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '185' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '154' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '152' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '164' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '141' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '154' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '140' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '184' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '165' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '190' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '186' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '190' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '191' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '191' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '164' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '189' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '166' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '167' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '166' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '188' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '167' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '165' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '187' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '157' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '158' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '140' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '157' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '142' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '141' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '158' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '156' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '185' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '142' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '159' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '186' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '156' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '184' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '143' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '159' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '155' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '187' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '143' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '153' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '188' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '155' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '189' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '153' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '154' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '140' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '154' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '152' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '152' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '141' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '185' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '164' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '164' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '191' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '186' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '191' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '190' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '184' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '190' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '165' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '165' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '187' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '188' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '167' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '167' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '166' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '166' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '189' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '185' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '191' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '191' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '186' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '190' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '190' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '165' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '165' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '184' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '167' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '166' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '188' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '187' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '166' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '189' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '167' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '152' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '154' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '154' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '140' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '152' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '141' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '164' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '164' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '184' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '187' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '153' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '188' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '155' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '155' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '153' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '189' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '185' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '156' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '156' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '186' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '159' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '159' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '143' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '143' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '157' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '157' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '158' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '158' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '140' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '142' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '142' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '141' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '189' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '166' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '188' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '166' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '167' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '187' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '167' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '165' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '165' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '184' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '186' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '190' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '190' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '185' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '191' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '191' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '164' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '141' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '164' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '152' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '140' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '152' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '154' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '154' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '189' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '153' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '153' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '188' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '155' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '187' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '184' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '143' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '155' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '159' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '186' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '143' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '156' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '185' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '159' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '156' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '142' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '142' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '141' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '158' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '158' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '157' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '157' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '140' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '129' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '135' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '161' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '130' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '161' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '162' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '162' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '128' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '134' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '160' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '163' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '163' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '134' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '133' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '132' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '160' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '136' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '137' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '173' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '173' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '174' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '135' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '174' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '131' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '172' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '128' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '175' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '172' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '168' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '132' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '175' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '133' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '129' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '169' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '139' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '130' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '139' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '138' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '138' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '168' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '137' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '170' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '171' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '170' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '136' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '171' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '169' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '131' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '163' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '160' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '133' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '163' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '134' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '132' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '160' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '162' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '128' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '134' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '161' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '130' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '162' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '129' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '135' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '161' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '174' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '131' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '135' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '173' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '136' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '174' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '137' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '173' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '175' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '133' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '175' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '172' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '172' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '132' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '128' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '168' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '168' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '138' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '130' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '138' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '139' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '129' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '139' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '169' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '169' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '131' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '136' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '171' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '171' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '170' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '170' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '137' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '128' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '138' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '138' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '130' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '139' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '139' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '169' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '169' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '129' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '171' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '170' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '136' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '131' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '170' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '137' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '171' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '172' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '175' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '175' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '133' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '172' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '132' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '168' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '168' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '129' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '131' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '173' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '136' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '174' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '174' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '173' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '137' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '128' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '162' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '162' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '130' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '161' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '161' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '135' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '135' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '163' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '163' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '160' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '160' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '133' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '134' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '134' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '132' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '137' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '170' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '136' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '170' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '171' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '131' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '171' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '169' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '169' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '129' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '130' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '139' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '139' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '128' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '138' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '138' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '168' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '132' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '168' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '172' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '133' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '172' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '175' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '175' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '137' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '173' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '173' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '136' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '174' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '131' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '129' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '135' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '174' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '161' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '130' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '135' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '162' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '128' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '161' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '162' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '134' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '134' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '132' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '160' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '160' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '163' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '163' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '133' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC4.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC4.yaml new file mode 100644 index 00000000000..aded237395a --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC4.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '164' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '170' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '8' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '166' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '8' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '10' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '10' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '165' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '171' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '9' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '11' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '11' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '171' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '168' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '169' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '9' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '160' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '161' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '15' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '15' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '12' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '170' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '12' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '167' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '14' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '165' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '13' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '14' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '4' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '169' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '13' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '168' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '164' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '5' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '162' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '166' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '162' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '163' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '163' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '4' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '161' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '7' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '6' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '7' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '160' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '6' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '5' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '167' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '11' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '9' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '168' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '11' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '171' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '169' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '9' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '10' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '165' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '171' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '8' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '166' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '10' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '164' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '170' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '8' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '12' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '167' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '170' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '15' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '160' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '12' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '161' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '15' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '13' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '168' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '13' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '14' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '14' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '169' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '165' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '4' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '4' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '163' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '166' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '163' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '162' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '164' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '162' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '5' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '5' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '167' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '160' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '6' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '6' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '7' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '7' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '161' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '165' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '163' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '163' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '166' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '162' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '162' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '5' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '5' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '164' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '6' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '7' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '160' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '167' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '7' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '161' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '6' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '14' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '13' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '13' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '168' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '14' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '169' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '4' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '4' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '164' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '167' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '15' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '160' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '12' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '12' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '15' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '161' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '165' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '10' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '10' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '166' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '8' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '8' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '170' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '170' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '11' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '11' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '9' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '9' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '168' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '171' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '171' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '169' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '161' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '7' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '160' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '7' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '6' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '167' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '6' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '5' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '5' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '164' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '166' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '162' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '162' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '165' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '163' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '163' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '4' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '169' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '4' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '14' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '168' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '14' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '13' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '13' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '161' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '15' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '15' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '160' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '12' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '167' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '164' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '170' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '12' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '8' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '166' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '170' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '10' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '165' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '8' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '10' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '171' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '171' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '169' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '9' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '9' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '11' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '11' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '168' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '181' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '179' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '3' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '182' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '3' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '1' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '1' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '180' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '178' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '2' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '0' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '0' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '178' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '177' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '176' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '2' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '172' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '173' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '149' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '149' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '150' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '179' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '150' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '183' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '148' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '180' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '151' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '148' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '147' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '176' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '151' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '177' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '181' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '146' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '174' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '182' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '174' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '175' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '175' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '147' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '173' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '145' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '144' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '145' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '172' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '144' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '146' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '183' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '0' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '2' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '177' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '0' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '178' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '176' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '2' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '1' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '180' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '178' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '3' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '182' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '1' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '181' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '179' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '3' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '150' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '183' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '179' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '149' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '172' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '150' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '173' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '149' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '151' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '177' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '151' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '148' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '148' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '176' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '180' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '147' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '147' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '175' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '182' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '175' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '174' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '181' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '174' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '146' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '146' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '183' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '172' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '144' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '144' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '145' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '145' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '173' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '180' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '175' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '175' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '182' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '174' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '174' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '146' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '146' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '181' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '144' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '145' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '172' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '183' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '145' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '173' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '144' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '148' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '151' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '151' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '177' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '148' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '176' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '147' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '147' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '181' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '183' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '149' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '172' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '150' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '150' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '149' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '173' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '180' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '1' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '1' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '182' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '3' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '3' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '179' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '179' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '0' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '0' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '2' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '2' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '177' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '178' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '178' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '176' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '173' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '145' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '172' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '145' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '144' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '183' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '144' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '146' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '146' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '181' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '182' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '174' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '174' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '180' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '175' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '175' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '147' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '176' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '147' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '148' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '177' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '148' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '151' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '151' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '173' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '149' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '149' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '172' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '150' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '183' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '181' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '179' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '150' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '3' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '182' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '179' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '1' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '180' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '3' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '1' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '178' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '178' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '176' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '2' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '2' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '0' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '0' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '177' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC5.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC5.yaml new file mode 100644 index 00000000000..a6d5f5d26fe --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC5.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '4' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '145' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '32' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '7' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '32' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '35' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '35' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '5' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '144' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '33' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '34' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '34' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '144' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '147' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '146' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '33' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '2' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '3' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '36' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '36' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '38' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '145' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '38' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '6' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '37' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '5' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '39' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '37' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '28' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '146' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '39' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '147' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '4' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '29' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '1' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '7' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '1' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '0' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '0' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '28' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '3' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '30' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '31' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '30' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '2' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '31' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '29' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '6' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '34' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '33' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '147' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '34' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '144' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '146' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '33' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '35' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '5' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '144' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '32' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '7' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '35' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '4' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '145' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '32' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '38' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '6' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '145' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '36' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '2' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '38' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '3' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '36' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '39' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '147' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '39' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '37' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '37' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '146' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '5' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '28' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '28' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '0' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '7' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '0' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '1' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '4' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '1' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '29' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '29' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '6' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '2' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '31' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '31' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '30' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '30' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '3' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '5' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '0' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '0' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '7' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '1' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '1' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '29' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '29' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '4' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '31' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '30' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '2' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '6' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '30' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '3' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '31' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '37' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '39' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '39' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '147' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '37' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '146' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '28' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '28' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '4' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '6' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '36' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '2' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '38' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '38' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '36' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '3' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '5' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '35' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '35' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '7' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '32' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '32' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '145' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '145' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '34' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '34' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '33' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '33' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '147' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '144' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '144' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '146' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '3' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '30' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '2' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '30' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '31' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '6' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '31' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '29' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '29' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '4' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '7' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '1' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '1' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '5' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '0' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '0' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '28' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '146' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '28' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '37' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '147' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '37' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '39' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '39' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '3' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '36' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '36' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '2' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '38' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '6' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '4' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '145' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '38' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '32' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '7' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '145' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '35' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '5' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '32' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '35' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '144' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '144' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '146' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '33' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '33' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '34' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '34' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '147' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '158' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '155' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '25' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '156' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '25' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '26' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '26' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '159' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '154' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '24' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '27' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '27' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '154' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '152' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '153' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '24' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '148' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '149' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '21' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '21' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '22' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '155' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '22' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '157' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '20' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '159' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '23' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '20' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '16' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '153' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '23' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '152' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '158' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '17' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '150' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '156' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '150' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '151' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '151' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '16' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '149' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '18' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '19' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '18' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '148' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '19' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '17' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '157' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '27' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '24' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '152' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '27' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '154' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '153' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '24' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '26' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '159' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '154' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '25' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '156' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '26' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '158' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '155' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '25' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '22' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '157' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '155' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '21' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '148' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '22' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '149' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '21' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '23' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '152' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '23' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '20' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '20' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '153' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '159' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '16' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '16' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '151' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '156' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '151' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '150' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '158' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '150' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '17' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '17' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '157' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '148' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '19' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '19' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '18' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '18' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '149' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '159' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '151' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '151' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '156' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '150' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '150' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '17' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '17' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '158' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '19' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '18' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '148' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '157' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '18' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '149' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '19' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '20' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '23' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '23' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '152' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '20' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '153' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '16' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '16' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '158' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '157' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '21' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '148' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '22' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '22' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '21' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '149' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '159' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '26' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '26' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '156' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '25' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '25' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '155' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '155' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '27' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '27' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '24' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '24' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '152' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '154' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '154' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '153' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '149' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '18' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '148' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '18' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '19' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '157' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '19' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '17' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '17' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '158' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '156' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '150' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '150' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '159' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '151' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '151' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '16' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '153' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '16' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '20' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '152' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '20' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '23' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '23' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '149' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '21' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '21' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '148' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '22' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '157' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '158' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '155' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '22' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '25' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '156' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '155' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '26' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '159' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '25' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '26' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '154' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '154' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '153' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '24' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '24' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '27' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '27' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '152' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC6.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC6.yaml new file mode 100644 index 00000000000..3d0ec9cb9b7 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC6.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '28' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '18' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '84' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '30' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '84' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '87' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '87' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '29' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '19' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '85' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '86' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '86' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '19' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '16' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '17' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '85' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '24' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '25' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '80' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '80' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '83' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '18' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '83' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '31' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '81' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '29' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '82' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '81' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '88' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '17' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '82' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '16' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '28' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '89' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '26' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '30' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '26' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '27' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '27' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '88' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '25' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '90' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '91' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '90' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '24' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '91' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '89' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '31' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '86' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '85' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '16' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '86' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '19' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '17' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '85' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '87' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '29' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '19' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '84' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '30' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '87' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '28' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '18' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '84' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '83' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '31' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '18' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '80' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '24' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '83' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '25' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '80' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '82' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '16' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '82' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '81' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '81' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '17' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '29' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '88' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '88' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '27' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '30' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '27' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '26' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '28' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '26' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '89' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '89' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '31' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '24' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '91' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '91' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '90' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '90' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '25' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '29' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '27' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '27' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '30' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '26' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '26' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '89' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '89' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '28' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '91' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '90' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '24' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '31' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '90' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '25' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '91' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '81' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '82' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '82' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '16' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '81' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '17' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '88' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '88' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '28' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '31' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '80' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '24' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '83' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '83' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '80' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '25' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '29' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '87' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '87' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '30' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '84' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '84' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '18' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '18' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '86' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '86' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '85' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '85' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '16' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '19' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '19' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '17' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '25' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '90' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '24' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '90' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '91' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '31' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '91' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '89' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '89' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '28' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '30' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '26' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '26' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '29' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '27' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '27' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '88' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '17' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '88' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '81' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '16' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '81' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '82' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '82' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '25' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '80' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '80' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '24' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '83' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '31' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '28' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '18' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '83' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '84' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '30' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '18' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '87' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '29' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '84' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '87' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '19' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '19' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '17' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '85' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '85' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '86' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '86' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '16' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '9' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '12' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '93' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '10' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '93' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '95' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '95' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '8' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '13' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '92' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '94' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '94' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '13' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '14' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '15' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '92' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '20' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '21' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '41' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '41' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '42' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '12' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '42' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '11' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '40' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '8' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '43' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '40' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '44' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '15' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '43' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '14' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '9' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '45' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '22' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '10' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '22' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '23' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '23' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '44' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '21' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '46' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '47' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '46' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '20' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '47' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '45' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '11' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '94' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '92' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '14' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '94' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '13' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '15' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '92' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '95' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '8' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '13' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '93' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '10' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '95' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '9' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '12' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '93' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '42' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '11' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '12' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '41' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '20' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '42' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '21' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '41' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '43' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '14' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '43' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '40' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '40' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '15' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '8' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '44' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '44' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '23' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '10' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '23' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '22' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '9' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '22' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '45' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '45' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '11' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '20' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '47' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '47' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '46' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '46' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '21' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '8' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '23' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '23' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '10' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '22' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '22' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '45' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '45' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '9' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '47' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '46' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '20' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '11' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '46' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '21' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '47' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '40' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '43' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '43' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '14' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '40' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '15' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '44' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '44' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '9' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '11' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '41' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '20' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '42' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '42' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '41' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '21' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '8' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '95' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '95' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '10' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '93' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '93' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '12' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '12' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '94' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '94' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '92' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '92' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '14' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '13' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '13' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '15' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '21' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '46' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '20' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '46' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '47' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '11' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '47' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '45' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '45' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '9' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '10' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '22' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '22' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '8' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '23' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '23' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '44' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '15' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '44' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '40' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '14' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '40' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '43' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '43' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '21' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '41' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '41' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '20' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '42' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '11' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '9' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '12' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '42' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '93' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '10' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '12' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '95' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '8' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '93' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '95' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '13' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '13' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '15' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '92' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '92' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '94' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '94' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '14' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC7.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC7.yaml new file mode 100644 index 00000000000..d6a06f3bc18 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC7.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '88' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '46' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '69' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '90' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '69' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '71' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '71' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '89' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '47' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '68' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '70' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '70' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '47' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '44' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '45' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '68' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '92' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '93' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '58' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '58' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '57' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '46' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '57' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '91' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '59' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '89' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '56' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '59' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '61' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '45' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '56' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '44' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '88' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '60' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '95' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '90' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '95' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '94' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '94' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '61' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '93' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '63' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '62' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '63' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '92' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '62' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '60' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '91' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '70' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '68' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '44' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '70' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '47' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '45' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '68' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '71' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '89' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '47' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '69' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '90' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '71' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '88' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '46' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '69' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '57' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '91' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '46' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '58' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '92' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '57' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '93' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '58' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '56' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '44' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '56' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '59' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '59' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '45' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '89' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '61' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '61' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '94' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '90' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '94' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '95' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '88' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '95' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '60' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '60' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '91' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '92' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '62' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '62' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '63' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '63' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '93' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '89' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '94' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '94' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '90' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '95' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '95' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '60' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '60' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '88' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '62' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '63' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '92' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '91' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '63' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '93' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '62' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '59' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '56' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '56' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '44' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '59' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '45' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '61' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '61' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '88' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '91' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '58' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '92' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '57' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '57' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '58' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '93' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '89' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '71' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '71' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '90' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '69' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '69' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '46' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '46' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '70' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '70' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '68' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '68' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '44' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '47' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '47' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '45' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '93' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '63' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '92' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '63' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '62' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '91' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '62' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '60' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '60' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '88' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '90' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '95' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '95' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '89' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '94' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '94' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '61' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '45' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '61' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '59' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '44' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '59' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '56' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '56' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '93' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '58' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '58' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '92' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '57' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '91' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '88' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '46' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '57' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '69' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '90' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '46' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '71' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '89' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '69' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '71' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '47' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '47' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '45' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '68' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '68' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '70' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '70' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '44' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '33' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '38' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '76' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '35' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '76' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '78' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '78' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '32' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '39' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '77' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '79' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '79' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '39' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '37' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '36' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '77' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '40' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '41' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '72' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '72' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '75' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '38' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '75' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '34' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '73' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '32' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '74' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '73' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '65' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '36' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '74' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '37' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '33' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '64' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '42' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '35' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '42' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '43' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '43' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '65' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '41' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '67' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '66' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '67' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '40' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '66' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '64' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '34' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '79' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '77' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '37' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '79' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '39' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '36' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '77' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '78' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '32' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '39' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '76' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '35' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '78' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '33' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '38' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '76' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '75' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '34' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '38' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '72' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '40' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '75' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '41' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '72' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '74' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '37' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '74' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '73' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '73' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '36' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '32' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '65' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '65' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '43' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '35' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '43' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '42' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '33' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '42' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '64' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '64' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '34' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '40' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '66' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '66' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '67' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '67' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '41' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '32' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '43' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '43' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '35' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '42' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '42' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '64' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '64' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '33' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '66' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '67' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '40' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '34' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '67' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '41' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '66' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '73' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '74' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '74' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '37' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '73' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '36' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '65' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '65' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '33' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '34' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '72' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '40' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '75' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '75' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '72' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '41' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '32' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '78' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '78' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '35' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '76' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '76' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '38' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '38' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '79' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '79' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '77' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '77' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '37' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '39' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '39' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '36' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '41' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '67' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '40' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '67' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '66' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '34' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '66' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '64' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '64' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '33' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '35' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '42' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '42' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '32' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '43' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '43' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '65' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '36' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '65' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '73' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '37' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '73' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '74' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '74' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '41' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '72' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '72' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '40' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '75' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '34' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '33' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '38' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '75' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '76' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '35' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '38' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '78' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '32' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '76' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '78' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '39' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '39' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '36' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '77' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '77' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '79' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '79' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '37' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC8.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC8.yaml new file mode 100644 index 00000000000..29ede67d808 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x100G_Nokia-IXR7250E-SUP-10_LC8.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '68' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '74' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '102' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '71' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '102' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '100' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '100' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '69' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '75' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '103' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '101' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '101' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '75' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '72' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '73' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '103' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '64' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '65' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '109' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '109' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '110' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '74' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '110' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '70' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '108' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '69' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '111' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '108' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '106' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '73' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '111' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '72' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '68' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '107' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '66' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '71' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '66' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '67' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '67' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '106' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '65' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '104' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '105' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '104' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '64' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '105' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '107' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '70' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '101' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '103' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '72' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '101' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '75' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '73' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '103' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '100' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '69' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '75' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '102' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '71' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '100' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '68' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '74' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '102' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '110' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '70' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '74' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '109' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '64' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '110' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '65' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '109' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '111' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '72' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '111' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '108' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '108' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '73' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '69' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '106' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '106' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '67' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '71' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '67' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '66' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '68' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '66' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '107' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '107' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '70' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '64' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '105' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '105' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '104' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '104' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '65' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '69' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '67' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '67' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '71' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '66' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '66' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '107' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '107' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '68' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '105' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '104' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '64' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '70' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '104' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '65' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '105' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '108' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '111' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '111' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '72' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '108' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '73' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '106' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '106' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '68' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '70' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '109' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '64' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '110' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '110' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '109' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '65' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '69' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '100' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '100' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '71' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '102' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '102' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '74' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '74' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '101' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '101' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '103' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '103' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '72' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '75' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '75' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '73' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '65' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '104' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '64' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '104' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '105' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '70' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '105' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '107' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '107' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '68' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '71' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '66' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '66' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '69' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '67' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '67' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '106' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '73' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '106' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '108' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '72' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '108' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '111' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '111' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '65' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '109' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '109' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '64' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '110' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '70' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '68' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '74' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '110' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '102' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '71' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '74' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '100' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '69' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '102' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '100' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '75' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '75' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '73' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '103' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '103' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '101' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '101' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '72' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '85' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '83' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '55' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '87' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '55' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '53' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '53' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '84' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '82' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '54' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '52' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '52' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '82' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '81' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '80' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '54' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '76' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '77' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '48' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '48' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '51' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '83' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '51' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '86' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '49' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '84' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '50' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '49' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '97' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '80' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '50' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '81' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '85' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '96' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '79' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '87' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '79' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '78' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '78' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '97' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '77' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '99' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '98' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '99' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '76' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '98' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '96' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '86' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '52' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '54' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '81' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '52' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '82' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '80' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '54' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '53' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '84' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '82' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '55' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '87' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '53' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '85' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '83' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '55' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '51' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '86' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '83' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '48' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '76' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '51' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '77' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '48' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '50' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '81' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '50' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '49' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '49' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '80' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '84' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '97' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '97' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '78' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '87' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '78' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '79' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '85' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '79' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '96' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '96' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '86' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '76' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '98' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '98' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '99' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '99' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '77' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '84' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '78' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '78' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '87' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '79' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '79' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '96' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '96' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '85' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '98' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '99' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '76' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '86' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '99' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '77' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '98' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '49' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '50' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '50' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '81' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '49' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '80' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '97' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '97' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '85' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '86' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '48' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '76' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '51' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '51' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '48' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '77' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '84' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '53' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '53' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '87' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '55' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '55' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '83' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '83' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '52' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '52' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '54' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '54' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '81' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '82' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '82' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '80' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '77' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '99' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '76' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '99' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '98' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '86' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '98' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '96' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '96' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '85' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '87' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '79' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '79' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '84' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '78' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '78' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '97' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '80' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '97' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '49' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '81' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '49' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '50' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '50' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '77' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '48' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '48' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '76' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '51' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '86' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '85' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '83' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '51' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '55' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '87' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '83' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '53' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '84' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '55' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '53' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '82' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '82' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '80' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '54' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '54' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '52' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '52' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '81' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC1.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC1.yaml new file mode 100644 index 00000000000..8db68f3996d --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC1.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '97' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '101' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '128' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '98' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '128' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '130' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '130' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '96' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '100' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '129' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '131' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '131' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '100' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '102' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '103' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '129' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '49' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '48' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '132' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '132' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '135' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '101' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '135' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '99' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '133' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '96' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '134' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '133' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '124' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '103' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '134' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '102' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '97' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '125' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '51' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '98' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '51' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '50' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '50' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '124' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '48' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '127' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '126' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '127' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '49' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '126' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '125' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '99' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '131' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '129' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '102' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '131' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '100' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '103' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '129' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '130' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '96' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '100' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '128' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '98' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '130' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '97' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '101' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '128' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '135' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '99' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '101' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '132' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '49' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '135' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '48' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '132' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '134' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '102' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '134' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '133' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '133' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '103' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '96' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '124' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '124' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '50' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '98' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '50' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '51' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '97' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '51' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '125' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '125' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '99' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '49' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '126' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '126' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '127' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '127' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '48' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '96' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '50' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '50' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '98' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '51' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '51' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '125' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '125' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '97' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '126' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '127' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '49' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '99' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '127' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '48' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '126' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '133' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '134' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '134' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '102' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '133' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '103' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '124' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '124' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '97' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '99' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '132' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '49' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '135' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '135' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '132' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '48' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '96' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '130' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '130' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '98' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '128' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '128' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '101' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '101' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '131' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '131' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '129' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '129' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '102' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '100' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '100' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '103' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '48' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '127' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '49' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '127' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '126' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '99' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '126' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '125' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '125' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '97' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '98' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '51' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '51' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '96' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '50' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '50' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '124' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '103' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '124' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '133' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '102' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '133' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '134' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '134' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '48' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '132' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '132' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '49' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '135' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '99' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '97' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '101' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '135' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '128' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '98' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '101' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '130' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '96' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '128' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '130' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '100' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '100' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '103' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '129' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '129' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '131' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '131' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '102' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '60' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '52' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '121' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '62' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '121' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '122' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '122' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '61' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '53' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '120' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '123' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '123' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '53' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '55' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '54' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '120' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '58' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '59' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '117' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '117' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '118' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '52' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '118' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '63' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '116' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '61' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '119' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '116' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '112' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '54' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '119' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '55' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '60' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '113' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '56' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '62' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '56' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '57' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '57' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '112' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '59' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '114' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '115' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '114' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '58' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '115' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '113' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '63' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '123' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '120' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '55' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '123' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '53' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '54' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '120' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '122' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '61' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '53' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '121' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '62' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '122' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '60' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '52' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '121' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '118' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '63' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '52' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '117' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '58' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '118' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '59' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '117' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '119' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '55' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '119' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '116' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '116' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '54' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '61' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '112' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '112' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '57' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '62' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '57' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '56' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '60' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '56' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '113' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '113' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '63' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '58' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '115' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '115' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '114' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '114' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '59' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '61' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '57' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '57' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '62' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '56' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '56' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '113' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '113' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '60' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '115' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '114' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '58' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '63' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '114' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '59' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '115' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '116' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '119' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '119' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '55' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '116' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '54' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '112' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '112' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '60' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '63' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '117' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '58' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '118' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '118' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '117' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '59' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '61' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '122' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '122' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '62' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '121' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '121' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '52' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '52' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '123' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '123' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '120' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '120' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '55' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '53' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '53' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '54' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '59' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '114' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '58' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '114' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '115' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '63' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '115' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '113' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '113' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '60' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '62' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '56' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '56' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '61' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '57' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '57' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '112' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '54' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '112' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '116' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '55' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '116' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '119' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '119' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '59' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '117' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '117' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '58' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '118' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '63' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '60' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '52' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '118' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '121' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '62' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '52' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '122' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '61' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '121' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '122' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '53' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '53' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '54' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '120' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '120' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '123' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '123' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '55' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC2.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC2.yaml new file mode 100644 index 00000000000..5c3aa6ab008 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC2.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '121' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '126' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '180' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '123' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '180' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '182' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '182' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '120' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '127' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '181' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '183' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '183' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '127' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '125' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '124' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '181' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '113' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '112' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '176' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '176' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '179' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '126' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '179' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '122' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '177' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '120' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '178' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '177' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '184' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '124' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '178' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '125' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '121' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '185' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '115' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '123' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '115' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '114' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '114' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '184' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '112' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '186' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '187' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '186' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '113' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '187' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '185' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '122' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '183' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '181' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '125' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '183' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '127' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '124' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '181' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '182' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '120' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '127' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '180' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '123' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '182' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '121' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '126' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '180' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '179' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '122' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '126' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '176' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '113' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '179' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '112' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '176' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '178' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '125' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '178' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '177' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '177' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '124' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '120' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '184' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '184' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '114' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '123' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '114' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '115' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '121' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '115' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '185' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '185' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '122' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '113' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '187' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '187' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '186' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '186' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '112' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '120' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '114' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '114' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '123' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '115' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '115' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '185' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '185' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '121' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '187' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '186' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '113' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '122' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '186' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '112' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '187' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '177' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '178' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '178' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '125' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '177' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '124' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '184' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '184' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '121' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '122' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '176' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '113' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '179' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '179' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '176' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '112' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '120' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '182' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '182' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '123' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '180' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '180' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '126' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '126' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '183' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '183' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '181' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '181' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '125' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '127' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '127' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '124' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '112' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '186' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '113' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '186' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '187' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '122' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '187' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '185' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '185' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '121' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '123' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '115' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '115' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '120' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '114' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '114' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '184' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '124' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '184' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '177' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '125' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '177' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '178' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '178' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '112' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '176' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '176' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '113' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '179' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '122' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '121' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '126' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '179' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '180' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '123' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '126' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '182' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '120' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '180' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '182' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '127' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '127' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '124' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '181' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '181' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '183' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '183' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '125' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '107' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '118' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '189' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '105' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '189' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '190' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '190' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '106' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '119' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '188' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '191' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '191' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '119' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '116' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '117' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '188' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '109' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '108' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '137' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '137' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '139' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '118' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '139' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '104' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '136' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '106' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '138' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '136' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '140' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '117' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '138' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '116' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '107' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '141' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '111' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '105' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '111' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '110' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '110' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '140' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '108' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '143' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '142' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '143' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '109' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '142' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '141' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '104' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '191' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '188' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '116' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '191' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '119' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '117' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '188' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '190' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '106' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '119' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '189' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '105' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '190' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '107' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '118' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '189' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '139' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '104' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '118' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '137' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '109' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '139' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '108' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '137' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '138' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '116' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '138' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '136' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '136' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '117' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '106' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '140' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '140' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '110' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '105' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '110' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '111' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '107' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '111' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '141' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '141' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '104' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '109' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '142' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '142' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '143' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '143' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '108' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '106' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '110' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '110' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '105' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '111' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '111' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '141' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '141' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '107' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '142' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '143' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '109' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '104' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '143' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '108' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '142' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '136' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '138' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '138' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '116' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '136' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '117' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '140' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '140' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '107' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '104' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '137' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '109' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '139' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '139' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '137' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '108' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '106' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '190' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '190' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '105' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '189' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '189' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '118' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '118' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '191' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '191' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '188' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '188' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '116' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '119' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '119' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '117' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '108' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '143' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '109' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '143' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '142' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '104' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '142' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '141' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '141' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '107' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '105' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '111' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '111' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '106' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '110' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '110' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '140' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '117' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '140' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '136' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '116' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '136' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '138' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '138' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '108' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '137' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '137' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '109' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '139' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '104' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '107' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '118' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '139' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '189' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '105' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '118' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '190' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '106' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '189' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '190' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '119' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '119' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '117' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '188' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '188' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '191' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '191' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '116' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC3.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC3.yaml new file mode 100644 index 00000000000..5a57849e0c4 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC3.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '184' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '143' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '159' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '186' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '159' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '156' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '156' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '185' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '142' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '158' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '157' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '157' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '142' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '140' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '141' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '158' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '188' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '189' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '153' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '153' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '155' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '143' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '155' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '187' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '152' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '185' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '154' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '152' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '164' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '141' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '154' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '140' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '184' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '165' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '190' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '186' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '190' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '191' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '191' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '164' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '189' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '166' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '167' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '166' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '188' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '167' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '165' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '187' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '157' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '158' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '140' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '157' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '142' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '141' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '158' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '156' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '185' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '142' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '159' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '186' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '156' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '184' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '143' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '159' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '155' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '187' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '143' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '153' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '188' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '155' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '189' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '153' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '154' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '140' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '154' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '152' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '152' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '141' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '185' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '164' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '164' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '191' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '186' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '191' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '190' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '184' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '190' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '165' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '165' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '187' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '188' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '167' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '167' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '166' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '166' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '189' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '185' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '191' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '191' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '186' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '190' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '190' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '165' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '165' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '184' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '167' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '166' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '188' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '187' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '166' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '189' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '167' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '152' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '154' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '154' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '140' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '152' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '141' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '164' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '164' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '184' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '187' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '153' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '188' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '155' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '155' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '153' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '189' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '185' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '156' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '156' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '186' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '159' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '159' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '143' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '143' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '157' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '157' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '158' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '158' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '140' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '142' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '142' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '141' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '189' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '166' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '188' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '166' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '167' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '187' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '167' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '165' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '165' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '184' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '186' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '190' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '190' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '185' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '191' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '191' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '164' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '141' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '164' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '152' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '140' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '152' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '154' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '154' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '189' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '153' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '153' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '188' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '155' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '187' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '184' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '143' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '155' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '159' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '186' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '143' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '156' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '185' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '159' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '156' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '142' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '142' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '141' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '158' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '158' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '157' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '157' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '140' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '129' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '135' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '161' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '130' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '161' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '162' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '162' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '128' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '134' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '160' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '163' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '163' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '134' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '133' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '132' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '160' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '136' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '137' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '173' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '173' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '174' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '135' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '174' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '131' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '172' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '128' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '175' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '172' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '168' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '132' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '175' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '133' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '129' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '169' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '139' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '130' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '139' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '138' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '138' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '168' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '137' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '170' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '171' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '170' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '136' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '171' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '169' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '131' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '163' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '160' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '133' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '163' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '134' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '132' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '160' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '162' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '128' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '134' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '161' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '130' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '162' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '129' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '135' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '161' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '174' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '131' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '135' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '173' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '136' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '174' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '137' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '173' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '175' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '133' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '175' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '172' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '172' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '132' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '128' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '168' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '168' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '138' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '130' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '138' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '139' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '129' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '139' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '169' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '169' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '131' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '136' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '171' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '171' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '170' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '170' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '137' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '128' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '138' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '138' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '130' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '139' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '139' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '169' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '169' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '129' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '171' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '170' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '136' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '131' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '170' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '137' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '171' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '172' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '175' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '175' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '133' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '172' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '132' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '168' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '168' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '129' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '131' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '173' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '136' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '174' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '174' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '173' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '137' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '128' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '162' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '162' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '130' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '161' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '161' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '135' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '135' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '163' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '163' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '160' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '160' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '133' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '134' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '134' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '132' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '137' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '170' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '136' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '170' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '171' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '131' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '171' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '169' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '169' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '129' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '130' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '139' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '139' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '128' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '138' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '138' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '168' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '132' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '168' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '172' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '133' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '172' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '175' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '175' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '137' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '173' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '173' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '136' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '174' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '131' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '129' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '135' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '174' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '161' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '130' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '135' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '162' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '128' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '161' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '162' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '134' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '134' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '132' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '160' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '160' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '163' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '163' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '133' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC4.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC4.yaml new file mode 100644 index 00000000000..aded237395a --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC4.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '164' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '170' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '8' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '166' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '8' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '10' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '10' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '165' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '171' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '9' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '11' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '11' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '171' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '168' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '169' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '9' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '160' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '161' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '15' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '15' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '12' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '170' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '12' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '167' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '14' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '165' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '13' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '14' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '4' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '169' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '13' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '168' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '164' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '5' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '162' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '166' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '162' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '163' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '163' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '4' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '161' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '7' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '6' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '7' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '160' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '6' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '5' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '167' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '11' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '9' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '168' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '11' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '171' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '169' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '9' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '10' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '165' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '171' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '8' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '166' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '10' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '164' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '170' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '8' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '12' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '167' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '170' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '15' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '160' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '12' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '161' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '15' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '13' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '168' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '13' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '14' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '14' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '169' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '165' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '4' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '4' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '163' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '166' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '163' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '162' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '164' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '162' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '5' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '5' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '167' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '160' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '6' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '6' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '7' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '7' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '161' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '165' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '163' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '163' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '166' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '162' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '162' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '5' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '5' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '164' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '6' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '7' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '160' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '167' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '7' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '161' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '6' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '14' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '13' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '13' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '168' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '14' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '169' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '4' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '4' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '164' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '167' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '15' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '160' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '12' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '12' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '15' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '161' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '165' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '10' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '10' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '166' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '8' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '8' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '170' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '170' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '11' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '11' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '9' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '9' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '168' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '171' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '171' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '169' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '161' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '7' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '160' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '7' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '6' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '167' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '6' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '5' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '5' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '164' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '166' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '162' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '162' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '165' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '163' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '163' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '4' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '169' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '4' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '14' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '168' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '14' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '13' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '13' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '161' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '15' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '15' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '160' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '12' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '167' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '164' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '170' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '12' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '8' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '166' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '170' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '10' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '165' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '8' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '10' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '171' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '171' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '169' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '9' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '9' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '11' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '11' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '168' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '181' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '179' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '3' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '182' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '3' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '1' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '1' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '180' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '178' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '2' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '0' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '0' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '178' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '177' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '176' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '2' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '172' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '173' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '149' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '149' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '150' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '179' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '150' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '183' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '148' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '180' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '151' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '148' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '147' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '176' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '151' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '177' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '181' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '146' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '174' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '182' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '174' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '175' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '175' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '147' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '173' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '145' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '144' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '145' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '172' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '144' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '146' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '183' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '0' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '2' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '177' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '0' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '178' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '176' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '2' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '1' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '180' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '178' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '3' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '182' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '1' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '181' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '179' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '3' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '150' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '183' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '179' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '149' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '172' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '150' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '173' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '149' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '151' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '177' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '151' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '148' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '148' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '176' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '180' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '147' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '147' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '175' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '182' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '175' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '174' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '181' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '174' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '146' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '146' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '183' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '172' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '144' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '144' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '145' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '145' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '173' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '180' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '175' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '175' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '182' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '174' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '174' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '146' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '146' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '181' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '144' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '145' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '172' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '183' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '145' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '173' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '144' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '148' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '151' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '151' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '177' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '148' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '176' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '147' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '147' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '181' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '183' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '149' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '172' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '150' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '150' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '149' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '173' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '180' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '1' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '1' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '182' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '3' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '3' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '179' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '179' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '0' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '0' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '2' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '2' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '177' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '178' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '178' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '176' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '173' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '145' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '172' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '145' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '144' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '183' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '144' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '146' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '146' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '181' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '182' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '174' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '174' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '180' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '175' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '175' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '147' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '176' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '147' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '148' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '177' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '148' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '151' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '151' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '173' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '149' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '149' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '172' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '150' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '183' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '181' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '179' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '150' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '3' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '182' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '179' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '1' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '180' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '3' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '1' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '178' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '178' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '176' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '2' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '2' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '0' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '0' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '177' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC5.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC5.yaml new file mode 100644 index 00000000000..a6d5f5d26fe --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC5.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '4' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '145' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '32' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '7' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '32' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '35' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '35' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '5' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '144' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '33' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '34' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '34' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '144' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '147' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '146' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '33' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '2' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '3' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '36' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '36' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '38' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '145' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '38' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '6' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '37' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '5' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '39' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '37' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '28' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '146' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '39' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '147' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '4' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '29' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '1' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '7' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '1' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '0' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '0' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '28' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '3' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '30' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '31' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '30' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '2' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '31' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '29' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '6' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '34' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '33' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '147' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '34' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '144' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '146' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '33' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '35' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '5' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '144' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '32' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '7' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '35' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '4' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '145' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '32' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '38' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '6' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '145' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '36' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '2' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '38' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '3' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '36' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '39' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '147' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '39' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '37' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '37' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '146' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '5' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '28' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '28' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '0' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '7' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '0' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '1' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '4' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '1' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '29' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '29' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '6' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '2' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '31' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '31' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '30' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '30' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '3' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '5' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '0' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '0' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '7' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '1' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '1' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '29' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '29' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '4' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '31' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '30' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '2' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '6' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '30' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '3' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '31' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '37' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '39' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '39' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '147' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '37' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '146' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '28' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '28' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '4' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '6' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '36' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '2' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '38' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '38' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '36' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '3' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '5' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '35' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '35' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '7' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '32' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '32' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '145' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '145' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '34' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '34' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '33' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '33' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '147' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '144' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '144' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '146' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '3' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '30' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '2' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '30' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '31' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '6' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '31' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '29' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '29' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '4' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '7' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '1' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '1' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '5' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '0' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '0' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '28' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '146' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '28' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '37' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '147' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '37' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '39' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '39' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '3' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '36' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '36' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '2' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '38' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '6' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '4' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '145' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '38' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '32' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '7' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '145' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '35' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '5' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '32' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '35' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '144' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '144' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '146' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '33' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '33' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '34' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '34' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '147' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '158' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '155' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '25' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '156' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '25' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '26' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '26' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '159' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '154' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '24' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '27' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '27' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '154' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '152' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '153' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '24' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '148' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '149' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '21' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '21' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '22' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '155' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '22' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '157' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '20' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '159' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '23' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '20' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '16' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '153' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '23' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '152' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '158' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '17' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '150' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '156' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '150' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '151' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '151' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '16' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '149' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '18' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '19' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '18' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '148' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '19' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '17' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '157' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '27' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '24' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '152' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '27' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '154' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '153' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '24' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '26' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '159' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '154' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '25' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '156' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '26' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '158' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '155' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '25' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '22' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '157' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '155' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '21' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '148' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '22' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '149' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '21' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '23' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '152' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '23' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '20' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '20' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '153' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '159' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '16' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '16' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '151' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '156' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '151' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '150' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '158' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '150' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '17' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '17' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '157' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '148' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '19' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '19' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '18' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '18' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '149' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '159' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '151' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '151' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '156' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '150' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '150' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '17' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '17' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '158' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '19' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '18' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '148' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '157' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '18' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '149' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '19' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '20' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '23' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '23' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '152' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '20' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '153' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '16' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '16' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '158' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '157' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '21' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '148' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '22' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '22' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '21' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '149' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '159' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '26' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '26' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '156' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '25' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '25' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '155' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '155' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '27' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '27' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '24' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '24' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '152' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '154' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '154' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '153' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '149' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '18' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '148' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '18' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '19' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '157' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '19' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '17' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '17' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '158' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '156' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '150' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '150' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '159' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '151' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '151' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '16' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '153' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '16' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '20' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '152' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '20' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '23' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '23' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '149' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '21' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '21' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '148' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '22' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '157' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '158' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '155' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '22' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '25' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '156' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '155' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '26' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '159' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '25' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '26' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '154' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '154' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '153' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '24' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '24' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '27' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '27' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '152' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC6.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC6.yaml new file mode 100644 index 00000000000..3d0ec9cb9b7 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC6.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '28' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '18' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '84' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '30' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '84' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '87' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '87' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '29' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '19' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '85' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '86' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '86' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '19' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '16' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '17' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '85' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '24' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '25' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '80' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '80' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '83' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '18' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '83' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '31' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '81' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '29' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '82' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '81' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '88' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '17' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '82' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '16' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '28' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '89' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '26' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '30' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '26' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '27' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '27' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '88' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '25' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '90' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '91' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '90' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '24' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '91' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '89' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '31' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '86' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '85' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '16' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '86' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '19' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '17' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '85' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '87' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '29' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '19' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '84' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '30' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '87' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '28' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '18' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '84' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '83' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '31' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '18' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '80' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '24' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '83' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '25' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '80' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '82' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '16' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '82' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '81' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '81' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '17' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '29' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '88' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '88' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '27' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '30' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '27' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '26' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '28' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '26' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '89' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '89' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '31' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '24' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '91' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '91' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '90' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '90' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '25' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '29' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '27' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '27' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '30' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '26' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '26' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '89' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '89' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '28' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '91' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '90' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '24' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '31' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '90' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '25' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '91' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '81' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '82' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '82' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '16' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '81' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '17' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '88' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '88' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '28' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '31' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '80' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '24' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '83' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '83' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '80' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '25' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '29' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '87' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '87' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '30' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '84' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '84' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '18' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '18' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '86' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '86' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '85' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '85' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '16' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '19' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '19' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '17' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '25' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '90' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '24' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '90' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '91' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '31' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '91' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '89' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '89' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '28' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '30' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '26' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '26' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '29' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '27' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '27' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '88' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '17' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '88' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '81' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '16' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '81' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '82' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '82' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '25' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '80' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '80' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '24' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '83' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '31' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '28' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '18' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '83' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '84' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '30' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '18' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '87' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '29' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '84' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '87' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '19' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '19' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '17' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '85' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '85' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '86' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '86' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '16' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '9' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '12' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '93' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '10' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '93' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '95' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '95' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '8' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '13' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '92' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '94' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '94' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '13' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '14' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '15' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '92' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '20' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '21' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '41' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '41' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '42' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '12' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '42' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '11' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '40' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '8' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '43' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '40' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '44' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '15' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '43' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '14' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '9' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '45' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '22' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '10' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '22' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '23' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '23' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '44' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '21' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '46' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '47' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '46' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '20' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '47' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '45' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '11' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '94' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '92' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '14' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '94' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '13' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '15' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '92' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '95' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '8' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '13' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '93' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '10' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '95' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '9' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '12' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '93' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '42' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '11' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '12' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '41' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '20' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '42' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '21' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '41' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '43' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '14' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '43' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '40' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '40' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '15' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '8' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '44' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '44' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '23' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '10' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '23' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '22' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '9' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '22' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '45' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '45' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '11' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '20' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '47' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '47' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '46' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '46' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '21' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '8' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '23' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '23' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '10' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '22' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '22' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '45' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '45' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '9' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '47' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '46' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '20' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '11' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '46' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '21' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '47' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '40' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '43' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '43' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '14' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '40' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '15' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '44' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '44' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '9' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '11' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '41' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '20' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '42' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '42' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '41' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '21' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '8' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '95' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '95' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '10' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '93' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '93' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '12' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '12' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '94' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '94' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '92' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '92' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '14' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '13' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '13' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '15' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '21' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '46' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '20' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '46' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '47' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '11' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '47' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '45' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '45' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '9' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '10' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '22' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '22' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '8' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '23' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '23' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '44' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '15' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '44' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '40' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '14' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '40' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '43' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '43' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '21' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '41' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '41' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '20' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '42' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '11' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '9' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '12' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '42' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '93' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '10' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '12' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '95' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '8' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '93' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '95' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '13' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '13' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '15' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '92' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '92' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '94' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '94' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '14' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC7.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC7.yaml new file mode 100644 index 00000000000..d6a06f3bc18 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC7.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '88' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '46' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '69' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '90' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '69' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '71' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '71' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '89' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '47' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '68' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '70' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '70' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '47' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '44' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '45' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '68' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '92' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '93' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '58' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '58' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '57' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '46' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '57' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '91' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '59' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '89' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '56' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '59' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '61' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '45' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '56' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '44' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '88' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '60' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '95' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '90' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '95' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '94' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '94' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '61' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '93' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '63' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '62' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '63' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '92' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '62' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '60' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '91' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '70' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '68' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '44' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '70' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '47' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '45' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '68' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '71' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '89' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '47' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '69' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '90' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '71' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '88' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '46' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '69' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '57' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '91' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '46' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '58' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '92' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '57' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '93' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '58' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '56' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '44' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '56' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '59' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '59' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '45' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '89' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '61' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '61' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '94' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '90' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '94' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '95' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '88' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '95' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '60' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '60' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '91' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '92' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '62' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '62' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '63' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '63' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '93' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '89' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '94' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '94' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '90' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '95' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '95' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '60' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '60' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '88' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '62' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '63' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '92' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '91' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '63' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '93' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '62' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '59' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '56' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '56' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '44' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '59' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '45' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '61' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '61' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '88' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '91' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '58' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '92' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '57' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '57' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '58' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '93' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '89' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '71' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '71' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '90' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '69' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '69' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '46' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '46' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '70' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '70' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '68' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '68' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '44' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '47' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '47' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '45' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '93' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '63' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '92' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '63' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '62' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '91' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '62' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '60' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '60' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '88' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '90' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '95' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '95' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '89' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '94' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '94' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '61' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '45' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '61' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '59' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '44' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '59' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '56' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '56' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '93' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '58' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '58' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '92' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '57' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '91' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '88' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '46' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '57' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '69' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '90' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '46' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '71' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '89' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '69' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '71' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '47' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '47' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '45' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '68' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '68' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '70' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '70' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '44' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '33' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '38' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '76' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '35' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '76' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '78' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '78' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '32' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '39' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '77' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '79' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '79' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '39' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '37' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '36' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '77' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '40' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '41' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '72' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '72' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '75' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '38' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '75' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '34' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '73' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '32' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '74' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '73' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '65' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '36' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '74' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '37' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '33' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '64' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '42' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '35' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '42' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '43' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '43' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '65' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '41' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '67' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '66' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '67' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '40' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '66' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '64' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '34' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '79' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '77' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '37' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '79' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '39' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '36' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '77' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '78' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '32' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '39' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '76' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '35' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '78' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '33' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '38' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '76' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '75' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '34' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '38' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '72' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '40' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '75' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '41' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '72' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '74' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '37' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '74' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '73' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '73' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '36' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '32' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '65' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '65' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '43' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '35' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '43' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '42' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '33' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '42' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '64' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '64' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '34' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '40' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '66' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '66' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '67' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '67' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '41' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '32' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '43' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '43' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '35' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '42' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '42' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '64' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '64' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '33' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '66' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '67' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '40' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '34' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '67' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '41' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '66' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '73' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '74' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '74' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '37' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '73' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '36' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '65' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '65' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '33' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '34' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '72' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '40' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '75' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '75' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '72' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '41' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '32' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '78' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '78' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '35' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '76' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '76' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '38' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '38' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '79' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '79' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '77' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '77' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '37' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '39' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '39' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '36' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '41' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '67' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '40' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '67' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '66' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '34' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '66' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '64' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '64' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '33' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '35' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '42' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '42' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '32' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '43' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '43' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '65' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '36' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '65' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '73' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '37' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '73' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '74' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '74' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '41' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '72' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '72' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '40' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '75' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '34' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '33' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '38' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '75' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '76' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '35' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '38' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '78' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '32' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '76' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '78' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '39' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '39' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '36' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '77' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '77' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '79' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '79' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '37' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC8.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC8.yaml new file mode 100644 index 00000000000..29ede67d808 --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-36x400G_Nokia-IXR7250E-SUP-10_LC8.yaml @@ -0,0 +1,1538 @@ +asic1: + 0: + peer slot: '1' + peer lk: '68' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '74' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '102' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '71' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '102' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '100' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '100' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '69' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '75' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '103' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '101' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '101' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '75' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '72' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '73' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '103' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '64' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '65' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '109' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '109' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '110' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '74' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '110' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '70' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '108' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '69' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '111' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '108' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '106' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '73' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '111' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '72' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '68' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '107' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '66' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '71' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '66' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '67' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '67' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '106' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '65' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '104' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '105' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '104' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '64' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '105' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '107' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '70' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '101' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '103' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '72' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '101' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '75' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '73' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '103' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '100' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '69' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '75' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '102' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '71' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '100' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '68' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '74' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '102' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '110' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '70' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '74' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '109' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '64' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '110' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '65' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '109' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '111' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '72' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '111' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '108' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '108' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '73' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '69' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '106' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '106' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '67' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '71' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '67' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '66' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '68' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '66' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '107' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '107' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '70' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '64' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '105' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '105' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '104' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '104' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '65' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '69' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '67' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '67' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '71' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '66' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '66' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '107' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '107' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '68' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '105' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '104' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '64' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '70' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '104' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '65' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '105' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '108' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '111' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '111' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '72' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '108' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '73' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '106' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '106' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '68' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '70' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '109' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '64' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '110' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '110' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '109' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '65' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '69' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '100' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '100' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '71' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '102' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '102' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '74' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '74' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '101' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '101' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '103' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '103' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '72' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '75' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '75' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '73' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '65' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '104' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '64' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '104' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '105' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '70' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '105' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '107' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '107' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '68' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '71' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '66' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '66' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '69' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '67' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '67' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '106' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '73' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '106' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '108' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '72' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '108' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '111' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '111' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '65' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '109' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '109' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '64' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '110' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '70' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '68' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '74' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '110' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '102' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '71' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '74' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '100' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '69' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '102' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '100' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '75' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '75' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '73' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '103' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '103' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '101' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '101' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '72' + peer asic: '0' +asic0: + 0: + peer slot: '1' + peer lk: '85' + peer asic: '0' + 1: + peer slot: '1' + peer lk: '83' + peer asic: '0' + 2: + peer slot: '5' + peer lk: '55' + peer asic: '1' + 3: + peer slot: '1' + peer lk: '87' + peer asic: '0' + 4: + peer slot: '1' + peer lk: '55' + peer asic: '1' + 5: + peer slot: '5' + peer lk: '53' + peer asic: '1' + 6: + peer slot: '1' + peer lk: '53' + peer asic: '1' + 7: + peer slot: '1' + peer lk: '84' + peer asic: '0' + 8: + peer slot: '5' + peer lk: '82' + peer asic: '0' + 9: + peer slot: '5' + peer lk: '54' + peer asic: '1' + 10: + peer slot: '1' + peer lk: '52' + peer asic: '1' + 11: + peer slot: '5' + peer lk: '52' + peer asic: '1' + 12: + peer slot: '1' + peer lk: '82' + peer asic: '0' + 13: + peer slot: '1' + peer lk: '81' + peer asic: '0' + 14: + peer slot: '1' + peer lk: '80' + peer asic: '0' + 15: + peer slot: '1' + peer lk: '54' + peer asic: '1' + 16: + peer slot: '1' + peer lk: '76' + peer asic: '0' + 17: + peer slot: '1' + peer lk: '77' + peer asic: '0' + 18: + peer slot: '5' + peer lk: '48' + peer asic: '1' + 19: + peer slot: '1' + peer lk: '48' + peer asic: '1' + 20: + peer slot: '5' + peer lk: '51' + peer asic: '1' + 21: + peer slot: '5' + peer lk: '83' + peer asic: '0' + 22: + peer slot: '1' + peer lk: '51' + peer asic: '1' + 23: + peer slot: '1' + peer lk: '86' + peer asic: '0' + 24: + peer slot: '5' + peer lk: '49' + peer asic: '1' + 25: + peer slot: '2' + peer lk: '84' + peer asic: '0' + 26: + peer slot: '5' + peer lk: '50' + peer asic: '1' + 27: + peer slot: '1' + peer lk: '49' + peer asic: '1' + 28: + peer slot: '1' + peer lk: '97' + peer asic: '1' + 29: + peer slot: '2' + peer lk: '80' + peer asic: '0' + 30: + peer slot: '1' + peer lk: '50' + peer asic: '1' + 31: + peer slot: '2' + peer lk: '81' + peer asic: '0' + 32: + peer slot: '2' + peer lk: '85' + peer asic: '0' + 33: + peer slot: '1' + peer lk: '96' + peer asic: '1' + 34: + peer slot: '5' + peer lk: '79' + peer asic: '0' + 35: + peer slot: '2' + peer lk: '87' + peer asic: '0' + 36: + peer slot: '1' + peer lk: '79' + peer asic: '0' + 37: + peer slot: '5' + peer lk: '78' + peer asic: '0' + 38: + peer slot: '1' + peer lk: '78' + peer asic: '0' + 39: + peer slot: '5' + peer lk: '97' + peer asic: '1' + 40: + peer slot: '2' + peer lk: '77' + peer asic: '0' + 41: + peer slot: '5' + peer lk: '99' + peer asic: '1' + 42: + peer slot: '5' + peer lk: '98' + peer asic: '1' + 43: + peer slot: '1' + peer lk: '99' + peer asic: '1' + 44: + peer slot: '2' + peer lk: '76' + peer asic: '0' + 45: + peer slot: '1' + peer lk: '98' + peer asic: '1' + 46: + peer slot: '5' + peer lk: '96' + peer asic: '1' + 47: + peer slot: '2' + peer lk: '86' + peer asic: '0' + 48: + peer slot: '2' + peer lk: '52' + peer asic: '1' + 49: + peer slot: '2' + peer lk: '54' + peer asic: '1' + 50: + peer slot: '3' + peer lk: '81' + peer asic: '0' + 51: + peer slot: '6' + peer lk: '52' + peer asic: '1' + 52: + peer slot: '2' + peer lk: '82' + peer asic: '0' + 53: + peer slot: '3' + peer lk: '80' + peer asic: '0' + 54: + peer slot: '6' + peer lk: '54' + peer asic: '1' + 55: + peer slot: '2' + peer lk: '53' + peer asic: '1' + 56: + peer slot: '3' + peer lk: '84' + peer asic: '0' + 57: + peer slot: '6' + peer lk: '82' + peer asic: '0' + 58: + peer slot: '2' + peer lk: '55' + peer asic: '1' + 59: + peer slot: '3' + peer lk: '87' + peer asic: '0' + 60: + peer slot: '6' + peer lk: '53' + peer asic: '1' + 61: + peer slot: '3' + peer lk: '85' + peer asic: '0' + 62: + peer slot: '2' + peer lk: '83' + peer asic: '0' + 63: + peer slot: '6' + peer lk: '55' + peer asic: '1' + 64: + peer slot: '2' + peer lk: '51' + peer asic: '1' + 65: + peer slot: '3' + peer lk: '86' + peer asic: '0' + 66: + peer slot: '6' + peer lk: '83' + peer asic: '0' + 67: + peer slot: '2' + peer lk: '48' + peer asic: '1' + 68: + peer slot: '3' + peer lk: '76' + peer asic: '0' + 69: + peer slot: '6' + peer lk: '51' + peer asic: '1' + 70: + peer slot: '3' + peer lk: '77' + peer asic: '0' + 71: + peer slot: '6' + peer lk: '48' + peer asic: '1' + 72: + peer slot: '6' + peer lk: '50' + peer asic: '1' + 73: + peer slot: '4' + peer lk: '81' + peer asic: '0' + 74: + peer slot: '2' + peer lk: '50' + peer asic: '1' + 75: + peer slot: '6' + peer lk: '49' + peer asic: '1' + 76: + peer slot: '2' + peer lk: '49' + peer asic: '1' + 77: + peer slot: '4' + peer lk: '80' + peer asic: '0' + 78: + peer slot: '4' + peer lk: '84' + peer asic: '0' + 79: + peer slot: '2' + peer lk: '97' + peer asic: '1' + 80: + peer slot: '6' + peer lk: '97' + peer asic: '1' + 81: + peer slot: '6' + peer lk: '78' + peer asic: '0' + 82: + peer slot: '4' + peer lk: '87' + peer asic: '0' + 83: + peer slot: '2' + peer lk: '78' + peer asic: '0' + 84: + peer slot: '6' + peer lk: '79' + peer asic: '0' + 85: + peer slot: '4' + peer lk: '85' + peer asic: '0' + 86: + peer slot: '2' + peer lk: '79' + peer asic: '0' + 87: + peer slot: '2' + peer lk: '96' + peer asic: '1' + 88: + peer slot: '6' + peer lk: '96' + peer asic: '1' + 89: + peer slot: '4' + peer lk: '86' + peer asic: '0' + 90: + peer slot: '4' + peer lk: '76' + peer asic: '0' + 91: + peer slot: '2' + peer lk: '98' + peer asic: '1' + 92: + peer slot: '6' + peer lk: '98' + peer asic: '1' + 93: + peer slot: '2' + peer lk: '99' + peer asic: '1' + 94: + peer slot: '6' + peer lk: '99' + peer asic: '1' + 95: + peer slot: '4' + peer lk: '77' + peer asic: '0' + 96: + peer slot: '8' + peer lk: '84' + peer asic: '0' + 97: + peer slot: '8' + peer lk: '78' + peer asic: '0' + 98: + peer slot: '4' + peer lk: '78' + peer asic: '0' + 99: + peer slot: '8' + peer lk: '87' + peer asic: '0' + 100: + peer slot: '8' + peer lk: '79' + peer asic: '0' + 101: + peer slot: '4' + peer lk: '79' + peer asic: '0' + 102: + peer slot: '8' + peer lk: '96' + peer asic: '1' + 103: + peer slot: '4' + peer lk: '96' + peer asic: '1' + 104: + peer slot: '8' + peer lk: '85' + peer asic: '0' + 105: + peer slot: '4' + peer lk: '98' + peer asic: '1' + 106: + peer slot: '4' + peer lk: '99' + peer asic: '1' + 107: + peer slot: '8' + peer lk: '76' + peer asic: '0' + 108: + peer slot: '8' + peer lk: '86' + peer asic: '0' + 109: + peer slot: '8' + peer lk: '99' + peer asic: '1' + 110: + peer slot: '8' + peer lk: '77' + peer asic: '0' + 111: + peer slot: '8' + peer lk: '98' + peer asic: '1' + 112: + peer slot: '8' + peer lk: '49' + peer asic: '1' + 113: + peer slot: '4' + peer lk: '50' + peer asic: '1' + 114: + peer slot: '8' + peer lk: '50' + peer asic: '1' + 115: + peer slot: '8' + peer lk: '81' + peer asic: '0' + 116: + peer slot: '4' + peer lk: '49' + peer asic: '1' + 117: + peer slot: '8' + peer lk: '80' + peer asic: '0' + 118: + peer slot: '8' + peer lk: '97' + peer asic: '1' + 119: + peer slot: '4' + peer lk: '97' + peer asic: '1' + 120: + peer slot: '7' + peer lk: '85' + peer asic: '0' + 121: + peer slot: '7' + peer lk: '86' + peer asic: '0' + 122: + peer slot: '4' + peer lk: '48' + peer asic: '1' + 123: + peer slot: '7' + peer lk: '76' + peer asic: '0' + 124: + peer slot: '4' + peer lk: '51' + peer asic: '1' + 125: + peer slot: '8' + peer lk: '51' + peer asic: '1' + 126: + peer slot: '8' + peer lk: '48' + peer asic: '1' + 127: + peer slot: '7' + peer lk: '77' + peer asic: '0' + 128: + peer slot: '7' + peer lk: '84' + peer asic: '0' + 129: + peer slot: '8' + peer lk: '53' + peer asic: '1' + 130: + peer slot: '4' + peer lk: '53' + peer asic: '1' + 131: + peer slot: '7' + peer lk: '87' + peer asic: '0' + 132: + peer slot: '8' + peer lk: '55' + peer asic: '1' + 133: + peer slot: '4' + peer lk: '55' + peer asic: '1' + 134: + peer slot: '8' + peer lk: '83' + peer asic: '0' + 135: + peer slot: '4' + peer lk: '83' + peer asic: '0' + 136: + peer slot: '4' + peer lk: '52' + peer asic: '1' + 137: + peer slot: '8' + peer lk: '52' + peer asic: '1' + 138: + peer slot: '8' + peer lk: '54' + peer asic: '1' + 139: + peer slot: '4' + peer lk: '54' + peer asic: '1' + 140: + peer slot: '7' + peer lk: '81' + peer asic: '0' + 141: + peer slot: '4' + peer lk: '82' + peer asic: '0' + 142: + peer slot: '8' + peer lk: '82' + peer asic: '0' + 143: + peer slot: '7' + peer lk: '80' + peer asic: '0' + 144: + peer slot: '6' + peer lk: '77' + peer asic: '0' + 145: + peer slot: '3' + peer lk: '99' + peer asic: '1' + 146: + peer slot: '6' + peer lk: '76' + peer asic: '0' + 147: + peer slot: '7' + peer lk: '99' + peer asic: '1' + 148: + peer slot: '3' + peer lk: '98' + peer asic: '1' + 149: + peer slot: '6' + peer lk: '86' + peer asic: '0' + 150: + peer slot: '7' + peer lk: '98' + peer asic: '1' + 151: + peer slot: '7' + peer lk: '96' + peer asic: '1' + 152: + peer slot: '3' + peer lk: '96' + peer asic: '1' + 153: + peer slot: '6' + peer lk: '85' + peer asic: '0' + 154: + peer slot: '6' + peer lk: '87' + peer asic: '0' + 155: + peer slot: '3' + peer lk: '79' + peer asic: '0' + 156: + peer slot: '7' + peer lk: '79' + peer asic: '0' + 157: + peer slot: '6' + peer lk: '84' + peer asic: '0' + 158: + peer slot: '3' + peer lk: '78' + peer asic: '0' + 159: + peer slot: '7' + peer lk: '78' + peer asic: '0' + 160: + peer slot: '3' + peer lk: '97' + peer asic: '1' + 161: + peer slot: '6' + peer lk: '80' + peer asic: '0' + 162: + peer slot: '7' + peer lk: '97' + peer asic: '1' + 163: + peer slot: '3' + peer lk: '49' + peer asic: '1' + 164: + peer slot: '6' + peer lk: '81' + peer asic: '0' + 165: + peer slot: '7' + peer lk: '49' + peer asic: '1' + 166: + peer slot: '3' + peer lk: '50' + peer asic: '1' + 167: + peer slot: '7' + peer lk: '50' + peer asic: '1' + 168: + peer slot: '5' + peer lk: '77' + peer asic: '0' + 169: + peer slot: '7' + peer lk: '48' + peer asic: '1' + 170: + peer slot: '3' + peer lk: '48' + peer asic: '1' + 171: + peer slot: '5' + peer lk: '76' + peer asic: '0' + 172: + peer slot: '7' + peer lk: '51' + peer asic: '1' + 173: + peer slot: '5' + peer lk: '86' + peer asic: '0' + 174: + peer slot: '5' + peer lk: '85' + peer asic: '0' + 175: + peer slot: '7' + peer lk: '83' + peer asic: '0' + 176: + peer slot: '3' + peer lk: '51' + peer asic: '1' + 177: + peer slot: '7' + peer lk: '55' + peer asic: '1' + 178: + peer slot: '5' + peer lk: '87' + peer asic: '0' + 179: + peer slot: '3' + peer lk: '83' + peer asic: '0' + 180: + peer slot: '7' + peer lk: '53' + peer asic: '1' + 181: + peer slot: '5' + peer lk: '84' + peer asic: '0' + 182: + peer slot: '3' + peer lk: '55' + peer asic: '1' + 183: + peer slot: '3' + peer lk: '53' + peer asic: '1' + 184: + peer slot: '7' + peer lk: '82' + peer asic: '0' + 185: + peer slot: '3' + peer lk: '82' + peer asic: '0' + 186: + peer slot: '5' + peer lk: '80' + peer asic: '0' + 187: + peer slot: '3' + peer lk: '54' + peer asic: '1' + 188: + peer slot: '7' + peer lk: '54' + peer asic: '1' + 189: + peer slot: '3' + peer lk: '52' + peer asic: '1' + 190: + peer slot: '7' + peer lk: '52' + peer asic: '1' + 191: + peer slot: '5' + peer lk: '81' + peer asic: '0' diff --git a/tests/voq/fabric_data/Nokia-IXR7250E-SUP-10.yaml b/tests/voq/fabric_data/Nokia-IXR7250E-SUP-10.yaml new file mode 100644 index 00000000000..bd9ea4076dc --- /dev/null +++ b/tests/voq/fabric_data/Nokia-IXR7250E-SUP-10.yaml @@ -0,0 +1,3 @@ +--- +moduleIdBase: '0' +asicPerSlot: '2' diff --git a/tests/voq/test_voq_chassis_app_db_consistency.py b/tests/voq/test_voq_chassis_app_db_consistency.py index 507615e7673..df7ee5287d3 100644 --- a/tests/voq/test_voq_chassis_app_db_consistency.py +++ b/tests/voq/test_voq_chassis_app_db_consistency.py @@ -40,11 +40,6 @@ def verify_data_in_db(post_change_db_dump, tmp_pc, pc_members, duthosts, pc_nbr_ key = "SYSTEM_INTERFACE|{}*{}".format(duthost.sonichost.hostname, tmp_pc) pytest_assert(voqdb.get_keys(key), "SYSTEM_INTERFACE in Chasiss_APP_DB is missing for portchannel {}".format(tmp_pc)) - # Verfication on SYSTEM_LAG_ID_SET - if lag_id not in post_change_db_dump["SYSTEM_LAG_ID_SET"]: - pytest.fail( - "Portchannel Lag id {} is not allocatioed to tmp portchannel {} in SYSTEM_LAG_ID_SET".format(pc_nbr_ip, - tmp_pc)) @pytest.mark.parametrize("test_case", ["dut_reboot", "config_reload_with_config_save", "config_reload_no_config_save"]) @@ -252,11 +247,34 @@ def get_db_dump(duthosts, duthost): """ chassis_app_db_sysparams = {} + system_lag_id = {} key = "*SYSTEM*|*" + duthost.sonichost.hostname + "*" chassis_app_db_result = redis_get_keys(duthosts.supervisor_nodes[0], "CHASSIS_APP_DB", key) if chassis_app_db_result is not None: chassis_app_db_sysparams["CHASSIS_APP_DB"] = chassis_app_db_result voqdb = VoqDbCli(duthosts.supervisor_nodes[0]) - chassis_app_db_sysparams["SYSTEM_LAG_ID_TABLE"] = voqdb.dump("SYSTEM_LAG_ID_TABLE")["SYSTEM_LAG_ID_TABLE"]['value'] - chassis_app_db_sysparams["SYSTEM_LAG_ID_SET"] = voqdb.dump("SYSTEM_LAG_ID_SET")["SYSTEM_LAG_ID_SET"]['value'] + system_lag_id["SYSTEM_LAG_ID_TABLE"] = voqdb.dump("SYSTEM_LAG_ID_TABLE")["SYSTEM_LAG_ID_TABLE"]['value'] + SYSTEM_LAG_ID_SET = voqdb.dump("SYSTEM_LAG_ID_SET")["SYSTEM_LAG_ID_SET"]['value'] + end = int(voqdb.dump("SYSTEM_LAG_ID_END")["SYSTEM_LAG_ID_END"]['value']) + start = int(voqdb.dump("SYSTEM_LAG_ID_START")["SYSTEM_LAG_ID_START"]['value']) + LAG_IDS_FREE_LIST = voqdb.dump("SYSTEM_LAG_IDS_FREE_LIST")["SYSTEM_LAG_IDS_FREE_LIST"]['value'] + + def verify_system_lag_sanity(): + seen = set(LAG_IDS_FREE_LIST + SYSTEM_LAG_ID_SET) + if len(seen) != (end - start + 1): + logging.error( + "Missing or extra values are found in SYSTEM_LAG_IDS_FREE_LIST:{} or SYSTEM_LAG_ID_SET:{}". + format(LAG_IDS_FREE_LIST, SYSTEM_LAG_ID_SET)) + return False + if any(LAG_IDS_FREE_LIST.count(x) > 1 or SYSTEM_LAG_ID_SET.count( + x) > 1 or (x in LAG_IDS_FREE_LIST and x in SYSTEM_LAG_ID_SET) for x in seen): + logging.error( + "Duplicate values found in SYSTEM_LAG_IDS_FREE_LIST:{} or SYSTEM_LAG_ID_SET:{}". + format(LAG_IDS_FREE_LIST, SYSTEM_LAG_ID_SET)) + return False + + return True + + pytest_assert(wait_until(220, 10, 0, verify_system_lag_sanity)) + return {k: sorted(v) for k, v in chassis_app_db_sysparams.items()} diff --git a/tests/voq/test_voq_disrupts.py b/tests/voq/test_voq_disrupts.py index f4269e343d7..61e84d84efd 100644 --- a/tests/voq/test_voq_disrupts.py +++ b/tests/voq/test_voq_disrupts.py @@ -22,6 +22,7 @@ logger = logging.getLogger(__name__) pytestmark = [ + pytest.mark.disable_loganalyzer, pytest.mark.topology('t2') ] diff --git a/tests/voq/test_voq_fabric_isolation.py b/tests/voq/test_voq_fabric_isolation.py index a2b4454ad2a..1862f9de862 100644 --- a/tests/voq/test_voq_fabric_isolation.py +++ b/tests/voq/test_voq_fabric_isolation.py @@ -109,5 +109,9 @@ def check_fabric_link_status(host, asicName, port, state): auto_isolated = cmd_output[0] if auto_isolated == state: return True + elif auto_isolated == '' and state == '0': + # AUTO_ISOLATED attribute may be missing from the table if it's the first time it's been isolated, + # missing means the port is not isolated + return True else: return False diff --git a/tests/vxlan/bfd_notifier.py b/tests/vxlan/bfd_notifier.py new file mode 100644 index 00000000000..f1ab0b15c91 --- /dev/null +++ b/tests/vxlan/bfd_notifier.py @@ -0,0 +1,63 @@ + +''' +# Description: This script is used to force notify the BFD state change to Orchagent. +This script can be called as +>>python script.py +{'363:1d0:e:88d::64c:ed8': 'oid:0x45000000000ae7', '203:1d0:e:288::64c:e18': 'oid:0x45000000000adc'} +>>python script.py --set "oid:0x45000000000ae7, oid:0x45000000000adc" "Up" +>>python script.py --set "oid:0x45000000000ae7, oid:0x45000000000adc" "Down" +>>python script.py --set "oid:0x45000000000ae7, oid:0x45000000000adc" "Init" +>>python script.py --set "oid:0x45000000000ae7, oid:0x45000000000adc" "Admin_Down" + +''' +import swsscommon.swsscommon as swsscommon +import argparse + + +def main(): + parser = argparse.ArgumentParser(description="BFD Notifier Script") + parser.add_argument("--set", nargs=2, metavar=('KEYLIST', 'STATE'), help="Comma separated key list and state") + args = parser.parse_args() + + notifier = BFDNotifier() + if args.set: + key_list_str, state = args.set + key_list = key_list_str.split(',') + key_list = [key.strip() for key in key_list] + notifier.update_bfds_state(key_list, state) + else: + result = notifier.get_asic_db_bfd_session_id() + print(result) + + +class BFDNotifier: + def get_asic_db_bfd_session_id(self): + asic_db = swsscommon.DBConnector("ASIC_DB", 0, True) + tbl = swsscommon.Table(asic_db, "ASIC_STATE:SAI_OBJECT_TYPE_BFD_SESSION") + entries = set(tbl.getKeys()) + result = {} + for entry in entries: + status, fvs = tbl.get(entry) + fvs = dict(fvs) + assert status, "Got an error when get a key" + result[fvs["SAI_BFD_SESSION_ATTR_DST_IP_ADDRESS"]] = entry + return result + + def update_bfds_state(self, bfd_ids, state): + bfd_sai_state = { + "Admin_Down": "SAI_BFD_SESSION_STATE_ADMIN_DOWN", + "Down": "SAI_BFD_SESSION_STATE_DOWN", + "Init": "SAI_BFD_SESSION_STATE_INIT", + "Up": "SAI_BFD_SESSION_STATE_UP" + } + + asic_db = swsscommon.DBConnector("ASIC_DB", 0, True) + ntf = swsscommon.NotificationProducer(asic_db, "NOTIFICATIONS") + fvp = swsscommon.FieldValuePairs() + for bfd_id in bfd_ids: + ntf_data = "[{\"bfd_session_id\":\""+bfd_id+"\",\"session_state\":\""+bfd_sai_state[state]+"\"}]" + ntf.send("bfd_session_state_change", ntf_data, fvp) + + +if __name__ == "__main__": + main() diff --git a/tests/vxlan/test_vnet_bgp_route_precedence.py b/tests/vxlan/test_vnet_bgp_route_precedence.py new file mode 100644 index 00000000000..5ff29a869e9 --- /dev/null +++ b/tests/vxlan/test_vnet_bgp_route_precedence.py @@ -0,0 +1,1161 @@ +#! /usr/bin/env python3 +''' + These tests check the Vnet route precedence over bgp learnt route. Further details are + provided with each test. +''' + +import time +import logging +import pytest +from tests.common.helpers.assertions import pytest_assert as py_assert +import ptf.testutils as testutils +from ptf import mask +from scapy.all import Ether, IP, VXLAN, IPv6, UDP +from tests.common.vxlan_ecmp_utils import Ecmp_Utils +from collections import defaultdict + + +Logger = logging.getLogger(__name__) +ecmp_utils = Ecmp_Utils() +WAIT_TIME = 2 +WAIT_TIME_EXTRA = 5 +prefix_offset = 19 + +# This is the list of encapsulations that will be tested in this script. +SUPPORTED_ENCAP_TYPES = ['v4_in_v4', 'v6_in_v4'] +SUPPORTED_ROUTES_TYPES = ['precise_route', 'subnet_route'] +SUPPORTED_MONITOR_TYPES = ['custom', 'BFD'] +SUPPORTED_INIT_NEXTHOP_STATE = ['initially_up', 'initially_down'] + +pytestmark = [ + # This script supports any T1 topology: t1, t1-64-lag, t1-56-lag, t1-lag. + pytest.mark.topology("t1") +] + + +@pytest.fixture( + name="encap_type", + scope="module", + params=SUPPORTED_ENCAP_TYPES) +def fixture_encap_type(request): + ''' + This fixture forces the script to perform one encap_type at a time. + So this script doesn't support multiple encap types at the same. + ''' + return request.param + + +@pytest.fixture( + name="route_type", + scope="module", + params=SUPPORTED_ROUTES_TYPES) +def fixture_route_type(request): + ''' + This fixture forces the script to perform one route type at a time. + So this script doesn't support multiple route types at the same time. + ''' + return request.param + + +@pytest.fixture( + name="monitor_type", + scope="module", + params=SUPPORTED_MONITOR_TYPES) +def fixture_monitor_type(request): + ''' + This fixture forces the script to perform one monitor_type at a time. + So this script doesn't support multiple monitor types at the same time. + ''' + return request.param + + +@pytest.fixture( + name="init_nh_state", + scope="module", + params=SUPPORTED_INIT_NEXTHOP_STATE) +def fixture_init_nh_state(request): + ''' + This fixture sets the initial nexthop state for the tests. It can be UP or DOWN. + It ensures that the script tests one nexthop state at a time. + ''' + return request.param + + +@pytest.fixture(autouse=True) +def _ignore_route_sync_errlogs(duthosts, rand_one_dut_hostname, loganalyzer): + """Ignore expected failures logs during test execution.""" + if loganalyzer: + IgnoreRegex = [ + ".*Unaccounted_ROUTE_ENTRY_TABLE_entries.*", + ".*missed_in_asic_db_routes.*", + ".*Look at reported mismatches above.*", + ".*Unaccounted_ROUTE_ENTRY_TABLE_entries.*", + ".*'vnetRouteCheck' status failed.*", + ".*Vnet Route Mismatch reported.*", + ".*_M_construct null not valid.*", + ".*construction from null is not valid.*", + ".*meta_sai_validate_route_entry.*", + + ] + # Ignore in KVM test + KVMIgnoreRegex = [ + ".*doTask: Logic error: basic_string: construction from null is not valid.*", + ] + duthost = duthosts[rand_one_dut_hostname] + loganalyzer[rand_one_dut_hostname].ignore_regex.extend(IgnoreRegex) + if duthost.facts["asic_type"] == "vs": + loganalyzer[rand_one_dut_hostname].ignore_regex.extend(KVMIgnoreRegex) + return + + +@pytest.fixture(scope='module') +def prepare_test_port(rand_selected_dut, tbinfo): + mg_facts = rand_selected_dut.get_extended_minigraph_facts(tbinfo) + if tbinfo["topo"]["type"] == "mx": + dut_port = rand_selected_dut.acl_facts()["ansible_facts"]["ansible_acl_facts"]["DATAACL"]["ports"][0] + else: + dut_port = list(mg_facts['minigraph_portchannels'].keys())[0] + if not dut_port: + pytest.skip('No portchannels found') + if "Ethernet" in dut_port: + dut_eth_port = dut_port + elif "PortChannel" in dut_port: + dut_eth_port = mg_facts["minigraph_portchannels"][dut_port]["members"][0] + ptf_src_port = mg_facts["minigraph_ptf_indices"][dut_eth_port] + + topo = tbinfo["topo"]["type"] + # Get the list of upstream ports + upstream_ports = defaultdict(list) + upstream_port_ids = [] + for interface, neighbor in list(mg_facts["minigraph_neighbors"].items()): + port_id = mg_facts["minigraph_ptf_indices"][interface] + if (topo == "t1" and "T2" in neighbor["name"]) or (topo == "t0" and "T1" in neighbor["name"]) or \ + (topo == "m0" and "M1" in neighbor["name"]) or (topo == "mx" and "M0" in neighbor["name"]): + upstream_ports[neighbor['namespace']].append(interface) + upstream_port_ids.append(port_id) + + return ptf_src_port, upstream_port_ids, dut_port + + +@pytest.fixture(name="setUp", scope="module") +def fixture_setUp(duthosts, + request, + rand_one_dut_hostname, + minigraph_facts, + tbinfo, + nbrhosts, + ptfadapter, + prepare_test_port, + encap_type): + ''' + Setup for the entire script. + The basic steps in VxLAN configs are: + 1. Configure VxLAN tunnel. + 2. Configure Vnet and its VNI. + + The testcases are focused on the "configure routes" step. They add, + delete, modify, the routes while testing the advertisement. + ''' + data = {} + nbrnames = list(nbrhosts.keys()) + data['t2'] = [] + data['t0'] = [] + for name in nbrnames: + if 'T2' in name: + data['t2'].append(nbrhosts[name]) + if 'T0' in name: + data['t0'].append(nbrhosts[name]) + + ptf_src_port, ptf_dst_ports, dut_port = prepare_test_port + + data['ptfadapter'] = ptfadapter + data['ptf_src_ports'] = ptf_src_port + data['ptf_dst_ports'] = ptf_dst_ports + data['dut_port'] = dut_port + data['tbinfo'] = tbinfo + data['duthost'] = duthosts[rand_one_dut_hostname] + data['minigraph_facts'] = \ + data['duthost'].get_extended_minigraph_facts(tbinfo) + + if data['minigraph_facts']['minigraph_lo_interfaces'][0]['prefixlen'] == 32: + data['loopback_v4'] = data['minigraph_facts']['minigraph_lo_interfaces'][0]['addr'] + data['loopback_v6'] = data['minigraph_facts']['minigraph_lo_interfaces'][1]['addr'] + else: + data['loopback_v4'] = data['minigraph_facts']['minigraph_lo_interfaces'][1]['addr'] + data['loopback_v6'] = data['minigraph_facts']['minigraph_lo_interfaces'][0]['addr'] + asic_type = duthosts[rand_one_dut_hostname].facts["asic_type"] + if asic_type not in ["cisco-8000", "mellanox"]: + raise RuntimeError("Pls update this script for your platform.") + + # Should I keep the temporary files copied to DUT? + ecmp_utils.Constants['KEEP_TEMP_FILES'] = \ + request.config.option.keep_temp_files + + # Is debugging going on, or is it a production run? If it is a + # production run, use time-stamped file names for temp files. + ecmp_utils.Constants['DEBUG'] = request.config.option.debug_enabled + + # The host id in the ip addresses for DUT. It can be anything, + # but helps to keep as a single number that is easy to identify + # as DUT. + ecmp_utils.Constants['DUT_HOSTID'] = request.config.option.dut_hostid + + Logger.info("Constants to be used in the script:%s", ecmp_utils.Constants) + + data['dut_mac'] = data['duthost'].facts['router_mac'] + time.sleep(WAIT_TIME) + data["vxlan_port"] = 4789 + ecmp_utils.configure_vxlan_switch( + data['duthost'], + vxlan_port=data["vxlan_port"], + dutmac=data['dut_mac']) + data['active_routes'] = [] + # Copy the bfd_notifier.py script to the DUT + src_path = "vxlan/bfd_notifier.py" + dest_path = "/tmp/bfd_notifier.py" + data['duthost'].copy(src=src_path, dest=dest_path) + + outer_layer_version = ecmp_utils.get_outer_layer_version(encap_type) + encap_type_data = {} + # To store the names of the tunnels, for every outer layer version. + tunnel_names = {} + # To track the vnets for every outer_layer_version. + vnet_af_map = {} + outer_layer_version = ecmp_utils.get_outer_layer_version(encap_type) + try: + tunnel_names[outer_layer_version] + except KeyError: + tunnel_names[outer_layer_version] = ecmp_utils.create_vxlan_tunnel( + data['duthost'], + minigraph_data=minigraph_facts, + af=outer_layer_version) + + payload_version = ecmp_utils.get_payload_version(encap_type) + encap_type = "{}_in_{}".format(payload_version, outer_layer_version) + + try: + encap_type_data['vnet_vni_map'] = vnet_af_map[outer_layer_version] + except KeyError: + vnet_af_map[outer_layer_version] = ecmp_utils.create_vnets( + data['duthost'], + tunnel_name=tunnel_names[outer_layer_version], + vnet_count=1, # default scope can take only one vnet. + vnet_name_prefix="Vnet_" + encap_type, + scope="default", + vni_base=10000, + advertise_prefix='true') + encap_type_data['vnet_vni_map'] = vnet_af_map[outer_layer_version] + data[encap_type] = encap_type_data + + yield data + + # Cleanup code. + if encap_type == 'v4_in_v4': + prefix_mask = 24 + prefix_type = 'v4' + else: + prefix_mask = 64 + prefix_type = 'v6' + if 'active_routes' in data: + for routes in data['active_routes']: + ecmp_utils.set_routes_in_dut(data['duthost'], + routes, + prefix_type, + 'DEL', + bfd=False, + mask=prefix_mask) + + # This script's setup code re-uses same vnets for v4inv4 and v6inv4. + # There will be same vnet in multiple encap types. + # So remove vnets *after* removing the routes first. + for vnet in list(data[encap_type]['vnet_vni_map'].keys()): + data['duthost'].shell("redis-cli -n 4 del \"VNET|{}\"".format(vnet)) + + time.sleep(5) + for tunnel in list(tunnel_names.values()): + data['duthost'].shell( + "redis-cli -n 4 del \"VXLAN_TUNNEL|{}\"".format(tunnel)) + time.sleep(1) + + +class Test_VNET_BGP_route_Precedence(): + ''' + Class for all the tests where VNET and BGP learnt routes are tested. + ''' + def create_bgp_profile(self, name, community): + # sonic-db-cli APPL_DB HSET "BGP_PROFILE_TABLE:FROM_SDN_SLB_ROUTES" "community_id" "1234:1235" + self.duthost.shell("sonic-db-cli APPL_DB HSET 'BGP_PROFILE_TABLE:{}' 'community_id' '{}'" + .format(name, community)) + + def remove_bgp_profile(self, name): + # sonic-db-cli APPL_DB DEL "BGP_PROFILE_TABLE:FROM_SDN_SLB_ROUTES" + self.duthost.shell("sonic-db-cli APPL_DB DEL 'BGP_PROFILE_TABLE:{}' ".format(name)) + + def generate_vnet_routes(self, encap_type, num_routes, postfix='', nhcount=4, fixed_route=False, nh_prefix="202"): + nexthops = [] + global prefix_offset + prefix_offset = prefix_offset + 1 + if nhcount > 4: + py_assert("Nexthops more than 4 are not suppored.") + + for i in range(1, nhcount+1): + nexthops.append(f'{nh_prefix}.1.1.{i}') + + if num_routes > 250: + py_assert("Routes more than 250 are not suppored.") + routes_adv = {} + routes_prefix = {} + vnet = list(self.vxlan_test_setup[encap_type]['vnet_vni_map'].keys())[0] + routes_adv[vnet] = {} + routes_prefix[vnet] = {} + if fixed_route: + if self.prefix_type == 'v4': + routes_prefix[vnet][f"{prefix_offset}.131.131.1"] = nexthops.copy() + routes_adv[vnet][f"{prefix_offset}.131.131.1"] = f"{prefix_offset}.131.131.0" + return routes_adv, routes_prefix + else: + routes_prefix[vnet][f"dcfa:{prefix_offset}:131::"] = nexthops.copy() + routes_adv[vnet][f"dcfa:{prefix_offset}:131::"] = f"dcfa:{prefix_offset}:131::" + return routes_adv, routes_prefix + count = 0 + if self.prefix_type == 'v4': + for i in range(1, 250): + key1 = f"{prefix_offset}.{i}.0.{postfix}" if postfix != "" else f"{prefix_offset}.{i}.0.0" + key2 = f"{prefix_offset}.{i}.0.0" + routes_prefix[vnet][key1] = nexthops.copy() + routes_adv[vnet][key1] = key2 + count = count + 1 + if count >= num_routes: + return routes_adv, routes_prefix + else: + for i in range(1, 250): + key1 = f"dc4a:{prefix_offset}:{i}::{postfix}" if postfix != "" else f"dc4a:{prefix_offset}:{i}::" + key2 = f"dc4a:{prefix_offset}:{i}::" + routes_prefix[vnet][key1] = nexthops.copy() + routes_adv[vnet][key1] = key2 + count = count + 1 + if count >= num_routes: + return routes_adv, routes_prefix + return routes_adv, routes_prefix + + def remove_vnet_route(self, routes): + routes_copy = routes.copy() + if routes in self.vxlan_test_setup['active_routes']: + self.vxlan_test_setup['active_routes'].remove(routes) + ecmp_utils.set_routes_in_dut(self.duthost, + routes_copy, + self.prefix_type, + 'DEL', + bfd=False, + mask=self.prefix_mask) + + def add_monitored_vnet_route(self, routes, routes_adv, profile, monitor_type): + self.vxlan_test_setup['active_routes'].append(routes) + if monitor_type == 'custom': + for vnet in routes: + for prefix in routes[vnet]: + tc1_end_point_list = routes[vnet][prefix] + ecmp_utils.create_and_apply_priority_config( + self.duthost, + vnet, + prefix, + self.prefix_mask, + tc1_end_point_list, + tc1_end_point_list[0:2], + "SET", + profile, + adv_pfx=routes_adv[vnet][prefix], + adv_pfx_mask=self.adv_mask) + else: + for vnet in routes: + for prefix in routes[vnet]: + ecmp_utils.set_routes_in_dut( + self.duthost, + routes, + self.prefix_type, + 'SET', + bfd=True, + mask=self.prefix_mask, + profile=profile, + adv_pfx=routes_adv[vnet][prefix], + adv_pfx_mask=self.adv_mask) + + def verify_nighbor_has_routes(self, routes, routes_adv, community=""): + t2_device = self.vxlan_test_setup['t2'][0] + for vnet in routes: + for prefix in routes[vnet]: + route = f'{routes_adv[vnet][prefix]}/{self.adv_mask}' + result = t2_device['host'].get_route(route) + py_assert(route in result['vrfs']['default']['bgpRouteEntries'], + "Route not propogated to the T2") + if community != "": + py_assert(community in str(result), "community not propogated.") + return + + def verify_nighbor_doesnt_have_routes(self, routes, routes_adv, community=""): + t2_device = self.vxlan_test_setup['t2'][0] + for vnet in routes: + for prefix in routes[vnet]: + adv_pfx = routes_adv[vnet][prefix] + route = f'{adv_pfx}/{self.adv_mask}' + result = t2_device['host'].get_route(route) + if community != "": + py_assert(community not in str(result), "community is still getting propogated along with route.") + return + else: + py_assert(route not in result['vrfs']['default']['bgpRouteEntries'], + "Route is still propogating to the T2") + return + + def add_bgp_route_to_neighbor_tor(self, tor, routes, routes_adv): + if self.prefix_type == 'v4': + type = 'ipv4' + type1 = 'ip' + else: + type = 'ipv6' + type1 = 'ipv6' + # add a route in the neighbor TOR eos device + for vnet in routes: + for prefix in routes[vnet]: + adv = routes_adv[vnet][prefix] + result = tor['host'].run_command("show run | grep 'router bgp'") + bgp_id_cmd = result['stdout'][0] + cmds = ["configure", + "interface loopback 10", + "{} address {}/{}".format(type1, prefix, self.adv_mask), + "exit", + bgp_id_cmd, + "address-family {}".format(type), + "network {}/{}".format(adv, self.adv_mask), + "exit" + ] + tor['host'].run_command_list(cmds) + Logger.info("Route %s with prefix %s added to :%s", prefix, adv, tor['host'].hostname) + return + + def remove_bgp_route_from_neighbor_tor(self, tor, routes, routes_adv): + if self.prefix_type == 'v4': + type = 'ipv4' + type1 = 'ip' + else: + type = 'ipv6' + type1 = 'ipv6' + # add a route in the neighbor TOR eos device + for vnet in routes: + for prefix in routes[vnet]: + adv_pfx = routes_adv[vnet][prefix] + result = tor['host'].run_command("show run | grep 'router bgp'") + bgp_id_cmd = result['stdout'][0] + cmds = ["configure", + "interface loopback 10", + "no {} address {}/{}".format(type1, prefix, self.prefix_mask), + "exit", + bgp_id_cmd, + "address-family {}".format(type), + "no network {}/{}".format(adv_pfx, self.adv_mask), + "exit" + ] + tor['host'].run_command_list(cmds) + Logger.info("Route %s removed from :%s", prefix, tor['host'].hostname) + + def get_asic_db_bfd_session_id(self): + cmd = "python /tmp/bfd_notifier.py" + output = self.duthost.shell(cmd) + assert output['rc'] == 0, f"Command failed with error: {output['stderr']}" + result = eval(output['stdout']) + return result + + def update_bfds_state(self, bfd_ids, state): + bfd_ids = list(bfd_ids) + bfd_ids_str = ", ".join(bfd_ids) + cmd = f'python /tmp/bfd_notifier.py --set "{bfd_ids_str}" "{state}"' + output = self.duthost.shell(cmd) + assert output['rc'] == 0, f"Command failed with error: {output['stderr']}" + return + + def update_monitors_state(self, routes, state): + if state == "Up": + state = "up" + else: + state = "down" + for vnet in routes: + for prefix in routes[vnet]: + for nh in routes[vnet][prefix]: + ecmp_utils.set_vnet_monitor_state( + self.duthost, + prefix, + self.prefix_mask, + nh, + state) + return + + def create_expected_packet(self, setUp_vnet, duthost, encap_type, inner_packet): + outer_ip_src = setUp_vnet['loopback_v4'] if 'in_v4' in encap_type else setUp_vnet['loopback_v6'] + vxlan_vni = list(setUp_vnet[encap_type]['vnet_vni_map'].values())[0] + + if 'v4_in_v4' == encap_type: + exp_pkt = testutils.simple_vxlan_packet( + eth_src=duthost.facts['router_mac'], + ip_src=outer_ip_src, + ip_dst="0.0.0.0", # We don't care about the outer dest IP + udp_dport=setUp_vnet['vxlan_port'], + vxlan_vni=vxlan_vni, + inner_frame=inner_packet.copy()) + elif 'v4_in_v6' == encap_type: + exp_pkt = testutils.simple_vxlanv6_packet( + eth_src=duthost.facts['router_mac'], + ipv6_src=outer_ip_src, + ipv6_dst="::", # We don't care about the outer dest IP + udp_dport=setUp_vnet['vxlan_port'], + vxlan_vni=vxlan_vni, + inner_frame=inner_packet.copy()) + elif 'v6_in_v4' == encap_type: + exp_pkt = testutils.simple_vxlan_packet( + eth_src=duthost.facts['router_mac'], + ip_src=outer_ip_src, + ip_dst="0.0.0.0", # We don't care about the outer dest IP + udp_dport=setUp_vnet['vxlan_port'], + vxlan_vni=vxlan_vni, + inner_frame=inner_packet.copy()) + elif 'v6_in_v6' == encap_type: + exp_pkt = testutils.simple_vxlanv6_packet( + eth_src=duthost.facts['router_mac'], + ipv6_src=outer_ip_src, + ipv6_dst="::", # We don't care about the outer dest IP + udp_dport=setUp_vnet['vxlan_port'], + vxlan_vni=vxlan_vni, + inner_frame=inner_packet.copy()) + else: + raise ValueError(f"Unsupported encap_type: {encap_type}") + + exp_pkt = mask.Mask(exp_pkt) + exp_pkt.set_do_not_care_scapy(Ether, "dst") + + if 'in_v4' in encap_type: + exp_pkt.set_do_not_care_scapy(IP, "ihl") + exp_pkt.set_do_not_care_scapy(IP, "len") + exp_pkt.set_do_not_care_scapy(IP, "id") + exp_pkt.set_do_not_care_scapy(IP, "flags") + exp_pkt.set_do_not_care_scapy(IP, "frag") + exp_pkt.set_do_not_care_scapy(IP, "ttl") + exp_pkt.set_do_not_care_scapy(IP, "proto") + exp_pkt.set_do_not_care_scapy(IP, "chksum") + exp_pkt.set_do_not_care_scapy(IP, "ttl") + exp_pkt.set_do_not_care_scapy(IP, "dst") + exp_pkt.set_do_not_care_scapy(IP, "tos") + exp_pkt.set_do_not_care_scapy(UDP, 'sport') + exp_pkt.set_do_not_care_scapy(UDP, 'len') + exp_pkt.set_do_not_care_scapy(UDP, 'chksum') + elif 'in_v6' in encap_type: + exp_pkt.set_do_not_care_scapy(IPv6, "plen") + exp_pkt.set_do_not_care_scapy(IPv6, "hlim") + exp_pkt.set_do_not_care_scapy(IPv6, "nh") + exp_pkt.set_do_not_care_scapy(IPv6, "dst") + exp_pkt.set_do_not_care_scapy(IPv6, "tc") + exp_pkt.set_do_not_care_scapy(UDP, 'sport') + exp_pkt.set_do_not_care_scapy(UDP, 'len') + exp_pkt.set_do_not_care_scapy(UDP, 'chksum') + + exp_pkt.set_do_not_care_scapy(VXLAN, 'flags') + exp_pkt.set_do_not_care_scapy(VXLAN, 'reserved1') + exp_pkt.set_do_not_care_scapy(VXLAN, 'reserved2') + + total_size = exp_pkt.size + # We also dont care about the inner IP header checksum and TTL fields for both IPv4 and IPv6 + + if 'v4_in' in encap_type: + inner_ether_hdr_start = total_size - len(exp_pkt.exp_pkt[VXLAN][Ether]) + inner_ether_hdr_end = total_size - len(exp_pkt.exp_pkt[VXLAN][IP]) + for iter in range(inner_ether_hdr_start, inner_ether_hdr_end): + exp_pkt.mask[iter] = 0x00 + + exp_pkt.mask[inner_ether_hdr_end + 8] = 0x00 # TTL is changed + exp_pkt.mask[inner_ether_hdr_end + 10] = 0x00 # checksum is changed + exp_pkt.mask[inner_ether_hdr_end + 11] = 0x00 # checksum is changed + elif 'v6_in' in encap_type: + inner_ether_hdr_start = total_size - len(exp_pkt.exp_pkt[VXLAN][Ether]) + inner_ether_hdr_end = total_size - len(exp_pkt.exp_pkt[VXLAN][IPv6]) + for iter in range(inner_ether_hdr_start, inner_ether_hdr_end): + exp_pkt.mask[iter] = 0x00 + + exp_pkt.mask[inner_ether_hdr_end + 7] = 0x00 # Hop Limit (TTL) is changed + exp_pkt.mask[inner_ether_hdr_end + 8] = 0x00 # checksum is changed + exp_pkt.mask[inner_ether_hdr_end + 9] = 0x00 # checksum is changed + exp_pkt.mask[inner_ether_hdr_end + 10] = 0x00 # checksum is changed + exp_pkt.mask[inner_ether_hdr_end + 11] = 0x00 # checksum is changed + + if inner_packet is None: + exp_pkt.set_ignore_extra_bytes() + return exp_pkt + + def create_inner_packet(self, setUp_vnet, duthost, encap_type, routes): + for vnet in routes: + for prefix in routes[vnet]: + dstip = prefix + if 'v4_in' in encap_type: + ipSrc = "170.170.170.170/32" + else: + ipSrc = "9999:AAAA:BBBB:CCCC:DDDD:EEEE:EEEE:7777/128" + + if 'v4_in' in encap_type: + pkt = testutils.simple_udp_packet( + eth_dst=duthost.facts['router_mac'], + ip_src=ipSrc, + ip_dst=dstip, + ip_id=0, + ip_ihl=5, + ip_ttl=121, + udp_sport=1234, + udp_dport=4321) + else: + pkt = testutils.simple_udpv6_packet( + eth_dst=duthost.facts['router_mac'], + ipv6_src=ipSrc, + ipv6_dst=dstip, + ipv6_hlim=121, + udp_sport=1234, + udp_dport=4321) + return pkt + + def verify_tunnel_route_with_traffic(self, setup_vnet, duthost, encap_type, routes): + pkt = self.create_inner_packet(setup_vnet, duthost, encap_type, routes) + exp_pkt = self.create_expected_packet(setup_vnet, duthost, encap_type, pkt) + setup_vnet['ptfadapter'].dataplane.flush() + testutils.send(setup_vnet['ptfadapter'], setup_vnet['ptf_src_ports'], pkt=pkt) + testutils.verify_packet_any_port(test=setup_vnet['ptfadapter'], + pkt=exp_pkt, + ports=setup_vnet['ptf_dst_ports'], + timeout=10) + + def test_vnet_route_after_bgp(self, setUp, encap_type, monitor_type, init_nh_state, duthost): + ''' + ADD BGP ROUTE on TOR + Add VNET route + Configure monitor (BFD or custom) with nexthop state (UP) + Test with traffic + Remove VNET route + Remove BGP route + ''' + if monitor_type == 'custom' and init_nh_state == 'initially_up': + pytest.skip("Test not required for custom monitor and initially up nexthop state.") + + self.vxlan_test_setup = setUp + self.duthost = duthost + + if monitor_type == 'BFD': + profile = "FROM_SDN_SLB_ROUTES" + community = "1234:4321" + else: + profile = "FROM_SDN_APPLIANCE_ROUTES" + community = "6789:9876" + self.create_bgp_profile(profile, community) + + # Determine the prefix type and mask based on encap_type and route_type + if encap_type == 'v4_in_v4': + self.prefix_type = 'v4' + self.prefix_mask = 24 + self.adv_mask = 24 + if monitor_type == 'custom': + self.adv_mask = 16 + else: + self.prefix_type = 'v6' + self.adv_mask = 64 + self.prefix_mask = 64 + if monitor_type == 'custom': + self.adv_mask = 60 + + # generate routes + routes_adv, routes = self.generate_vnet_routes(encap_type, 1, '1', 4) + # Step 0: if init_nh_state is UP, add another route with same nexthops and bring up the sessions + # This way the nexthops would be UP when the VNET route is added and this explores the 2nd path of + # route installation. + if init_nh_state == "initially_up": + adv_fixed, fixed_route = self.generate_vnet_routes(encap_type, 1, '1', 4, True) + self.add_monitored_vnet_route(fixed_route, adv_fixed, profile, monitor_type=monitor_type) + time.sleep(WAIT_TIME) + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), "Up") + elif monitor_type == 'custom': + self.update_monitors_state(fixed_route, "Up") + time.sleep(WAIT_TIME) + + # Step 1: Add a route on the TOR + tor = self.vxlan_test_setup['t0'][0] + self.add_bgp_route_to_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME_EXTRA) + # Check the route is propagated to the DUT + for vnet in routes: + for prefix in routes[vnet]: + route = f'{routes_adv[vnet][prefix]}/{self.adv_mask}' + result = self.duthost.shell(f"show ip route {route}" + if self.prefix_type == 'v4' + else f"show ipv6 route {route}") + py_assert(route in result['stdout'], f"Route {route} not propagated to the DUT") + + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 2: Create a route with the same prefix with monitoring + self.add_monitored_vnet_route(routes, routes_adv, profile, monitor_type) + time.sleep(WAIT_TIME) + + # Step3: bring up the monitoring sessions + monitor_state = "Up" + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), monitor_state) + elif monitor_type == 'custom': + self.update_monitors_state(routes, monitor_state) + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.verify_nighbor_has_routes(routes, routes_adv, community) + # Step 4: Test the traffic flow based on nexthop state + time.sleep(WAIT_TIME_EXTRA) + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 5: remove the VNET route + self.remove_vnet_route(routes) + time.sleep(WAIT_TIME) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + # we expect the route_check not to fail as the vnet route is removed and BGP learnt route is readded. + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 6: remove the BGP route + self.remove_bgp_route_from_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME) + self.verify_nighbor_doesnt_have_routes(routes, routes_adv, community) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + if init_nh_state == "initially_up": + self.remove_vnet_route(fixed_route) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.remove_bgp_profile(profile) + return + + def test_vnet_route_before_bgp_after_ep_up(self, setUp, encap_type, monitor_type, init_nh_state, duthost): + ''' + Add VNET route + Configure monitor (BFD or custom) with nexthop state (UP) + Add BGP ROUTE on TOR + Test with traffic + Remove VNET ROUTE + Remove BGP route + ''' + if monitor_type == 'custom' and init_nh_state == 'initially_up': + pytest.skip("Test not required for custom monitor and initially up nexthop state.") + + self.vxlan_test_setup = setUp + self.duthost = duthost + + if monitor_type == 'BFD': + profile = "FROM_SDN_SLB_ROUTES" + community = "1234:4321" + else: + profile = "FROM_SDN_APPLIANCE_ROUTES" + community = "6789:9876" + self.create_bgp_profile(profile, community) + + # Determine the prefix type and mask based on encap_type and route_type + if encap_type == 'v4_in_v4': + self.prefix_type = 'v4' + self.prefix_mask = 24 + self.adv_mask = 24 + else: + self.prefix_type = 'v6' + self.adv_mask = 64 + self.prefix_mask = 64 + # generate routes + routes_adv, routes = self.generate_vnet_routes(encap_type, 1, '1', 4) + # Step 0: if init_nh_state is UP, add another route with same nexthops and bring up the sessions + # This way the nexthops would be UP when the VNET route is added and this explores the 2nd path of + # route installation. + if init_nh_state == "initially_up": + adv_fixed, fixed_route = self.generate_vnet_routes(encap_type, 1, '1', 4, True) + self.add_monitored_vnet_route(fixed_route, adv_fixed, profile, monitor_type=monitor_type) + time.sleep(WAIT_TIME) + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), "Up") + elif monitor_type == 'custom': + self.update_monitors_state(fixed_route, "Up") + time.sleep(WAIT_TIME) + + # Step 1: Create a route with the same prefix with monitoring + self.add_monitored_vnet_route(routes, routes_adv, profile, monitor_type) + time.sleep(WAIT_TIME) + + # Step 2: bring up the monitoring sessions + monitor_state = "Up" + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), monitor_state) + elif monitor_type == 'custom': + self.update_monitors_state(routes, monitor_state) + + # Step 3: Add a route on the TOR + tor = self.vxlan_test_setup['t0'][0] + self.add_bgp_route_to_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME_EXTRA) + + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.verify_nighbor_has_routes(routes, routes_adv, community) + # Step 4: Test the traffic flow based on nexthop state + time.sleep(WAIT_TIME_EXTRA) + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 5: remove the VNET route + self.remove_vnet_route(routes) + time.sleep(WAIT_TIME) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + # we expect the route_check not to fail as the vnet route is removed and BGP learnt route is readded. + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 6: remove the BGP route + self.remove_bgp_route_from_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME) + self.verify_nighbor_doesnt_have_routes(routes, routes_adv, community) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + if init_nh_state == "initially_up": + self.remove_vnet_route(fixed_route) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.remove_bgp_profile(profile) + return + + def test_vnet_route_bgp_removal_before_ep(self, setUp, encap_type, monitor_type, init_nh_state, duthost): + ''' + ADD BGP ROUTE on TOR + Add VNET route + Remove BGP route + Configure monitor (BFD or custom) with nexthop state (UP) + Test with traffic + Remove VNET route + ''' + if monitor_type == 'custom' and init_nh_state == 'initially_up': + pytest.skip("Test not required for custom monitor and initially up nexthop state.") + + self.vxlan_test_setup = setUp + self.duthost = duthost + + if monitor_type == 'BFD': + profile = "FROM_SDN_SLB_ROUTES" + community = "1234:4321" + else: + profile = "FROM_SDN_APPLIANCE_ROUTES" + community = "6789:9876" + self.create_bgp_profile(profile, community) + + # Determine the prefix type and mask based on encap_type and route_type + if encap_type == 'v4_in_v4': + self.prefix_type = 'v4' + self.prefix_mask = 24 + self.adv_mask = 24 + else: + self.prefix_type = 'v6' + self.adv_mask = 64 + self.prefix_mask = 64 + # generate routes + routes_adv, routes = self.generate_vnet_routes(encap_type, 1, '1', 4) + # Step 0: if init_nh_state is UP, add another route with same nexthops and bring up the sessions + # This way the nexthops would be UP when the VNET route is added and this explores the 2nd path of + # route installation. + if init_nh_state == "initially_up": + adv_fixed, fixed_route = self.generate_vnet_routes(encap_type, 1, '1', 4, True) + self.add_monitored_vnet_route(fixed_route, adv_fixed, profile, monitor_type=monitor_type) + time.sleep(WAIT_TIME) + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), "Up") + elif monitor_type == 'custom': + self.update_monitors_state(fixed_route, "Up") + time.sleep(WAIT_TIME) + + # Step 1: Add a route on the TOR + tor = self.vxlan_test_setup['t0'][0] + self.add_bgp_route_to_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME_EXTRA) + # Check the route is propagated to the DUT + for vnet in routes: + for prefix in routes[vnet]: + route = f'{routes_adv[vnet][prefix]}/{self.adv_mask}' + result = self.duthost.shell(f"show ip route {route}" + if self.prefix_type == 'v4' + else f"show ipv6 route {route}") + py_assert(route in result['stdout'], f"Route {route} not propagated to the DUT") + + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 2: Create a route with the same prefix with monitoring + self.add_monitored_vnet_route(routes, routes_adv, profile, monitor_type) + time.sleep(WAIT_TIME) + + # Step 3: Remove the BGP route + self.remove_bgp_route_from_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME_EXTRA) + if init_nh_state == "initially_up": + self.verify_nighbor_has_routes(routes, routes_adv, community) + else: + self.verify_nighbor_doesnt_have_routes(routes, routes_adv, community) + # Step 4: Bring up the monitoring sessions + monitor_state = "Up" + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), monitor_state) + elif monitor_type == 'custom': + self.update_monitors_state(routes, monitor_state) + + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.verify_nighbor_has_routes(routes, routes_adv, community) + # Step 5: Test the traffic flow based on nexthop state + time.sleep(WAIT_TIME_EXTRA) + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 6: Remove the VNET route + self.remove_vnet_route(routes) + time.sleep(WAIT_TIME) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + # we expect the route_check not to fail as the vnet route is removed and BGP learnt route is readded. + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + if init_nh_state == "initially_up": + self.remove_vnet_route(fixed_route) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.remove_bgp_profile(profile) + return + + def test_vnet_route_after_bgp_with_early_bgp_removal(self, setUp, encap_type, monitor_type, duthost): + ''' + Add VNET route + Add BGP ROUTE on TOR + Configure monitor (BFD or custom) with nexthop state (UP) + Test with traffic + Remove BGP route + Test with traffic + Remove VNET route + ''' + + self.vxlan_test_setup = setUp + self.duthost = duthost + + if monitor_type == 'BFD': + profile = "FROM_SDN_SLB_ROUTES" + community = "1234:4321" + nh_prefix = "203" + else: + profile = "FROM_SDN_APPLIANCE_ROUTES" + community = "6789:9876" + nh_prefix = "202" + self.create_bgp_profile(profile, community) + + # Determine the prefix type and mask based on encap_type and route_type + if encap_type == 'v4_in_v4': + self.prefix_type = 'v4' + self.prefix_mask = 24 + self.adv_mask = 24 + else: + self.prefix_type = 'v6' + self.adv_mask = 64 + self.prefix_mask = 64 + # generate routes + routes_adv, routes = self.generate_vnet_routes(encap_type, 1, '1', 4, nh_prefix=nh_prefix) + + # Step 1: Create a route with the same prefix with monitoring + self.add_monitored_vnet_route(routes, routes_adv, profile, monitor_type) + time.sleep(WAIT_TIME) + + # Step 2: Add a route on the TOR + tor = self.vxlan_test_setup['t0'][0] + self.add_bgp_route_to_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME_EXTRA) + # Check the route is propagated to the DUT + for vnet in routes: + for prefix in routes[vnet]: + route = f'{routes_adv[vnet][prefix]}/{self.adv_mask}' + result = self.duthost.shell(f"show ip route {route}" + if self.prefix_type == 'v4' + else f"show ipv6 route {route}") + py_assert(route in result['stdout'], f"Route {route} not propagated to the DUT") + + # Verify the DUT has route_check passing. vnet route_check would fail because monitors are down. + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 3: bring up the monitoring sessions + monitor_state = "Up" + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), monitor_state) + elif monitor_type == 'custom': + self.update_monitors_state(routes, monitor_state) + time.sleep(WAIT_TIME_EXTRA) + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.verify_nighbor_has_routes(routes, routes_adv, community) + # Step 4: Test the traffic flow based on nexthop state + time.sleep(WAIT_TIME_EXTRA) + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 5: Remove the BGP route + self.remove_bgp_route_from_neighbor_tor(tor, routes, routes_adv) + + # Step 6: Test the traffic flow based on nexthop state + time.sleep(WAIT_TIME_EXTRA) + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 7: remove the VNET route + self.remove_vnet_route(routes) + time.sleep(WAIT_TIME) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + # we expect the route_check not to fail as the vnet route is removed and BGP learnt route is readded. + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.remove_bgp_profile(profile) + return + + def test_vnet_route_after_bgp_multi_flap(self, setUp, encap_type, monitor_type, init_nh_state, duthost): + ''' + ADD BGP ROUTE on TOR + Add VNET route + Configure monitor (BFD or custom) with nexthop state (UP) + Test with traffic + flap the bfd/monitor sessions. + Test with traffic + Remove VNET route + Remove BGP route + ''' + if monitor_type == 'custom' and init_nh_state == 'initially_up': + pytest.skip("Test not supported for custom monitor and initially up nexthop state.") + + self.vxlan_test_setup = setUp + self.duthost = duthost + + if monitor_type == 'BFD': + profile = "FROM_SDN_SLB_ROUTES" + community = "1234:4321" + else: + profile = "FROM_SDN_APPLIANCE_ROUTES" + community = "6789:9876" + self.create_bgp_profile(profile, community) + + # Determine the prefix type and mask based on encap_type and route_type + if encap_type == 'v4_in_v4': + self.prefix_type = 'v4' + self.prefix_mask = 24 + self.adv_mask = 24 + else: + self.prefix_type = 'v6' + self.adv_mask = 64 + self.prefix_mask = 64 + # generate routes + routes_adv, routes = self.generate_vnet_routes(encap_type, 1, '1', 4) + # Step 0: if init_nh_state is UP, add another route with same nexthops and bring up the sessions + # This way the nexthops would be UP when the VNET route is added and this explores the 2nd path of + # route installation. + if init_nh_state == "initially_up": + adv_fixed, fixed_route = self.generate_vnet_routes(encap_type, 1, '1', 4, True) + self.add_monitored_vnet_route(fixed_route, adv_fixed, profile, monitor_type=monitor_type) + time.sleep(WAIT_TIME) + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), "Up") + elif monitor_type == 'custom': + self.update_monitors_state(fixed_route, "Up") + time.sleep(WAIT_TIME) + + # Step 1: Add a route on the TOR + tor = self.vxlan_test_setup['t0'][0] + self.add_bgp_route_to_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME_EXTRA) + # Check the route is propagated to the DUT + for vnet in routes: + for prefix in routes[vnet]: + route = f'{routes_adv[vnet][prefix]}/{self.adv_mask}' + result = self.duthost.shell(f"show ip route {route}" + if self.prefix_type == 'v4' + else f"show ipv6 route {route}") + py_assert(route in result['stdout'], f"Route {route} not propagated to the DUT") + + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 2: Create a route with the same prefix with monitoring + self.add_monitored_vnet_route(routes, routes_adv, profile, monitor_type) + time.sleep(WAIT_TIME) + + # Step3: bring up the monitoring sessions + monitor_state = "Up" + if monitor_type == 'BFD': + bfd_ids = self.get_asic_db_bfd_session_id() + self.update_bfds_state(bfd_ids.values(), monitor_state) + elif monitor_type == 'custom': + self.update_monitors_state(routes, monitor_state) + + # Verify the DUT has vnet_route_check.py and route_check passing + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.verify_nighbor_has_routes(routes, routes_adv, community) + # Step 4: Test the traffic flow based on nexthop state + time.sleep(WAIT_TIME_EXTRA) + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 5: flap the monitoring sessions + for i in range(5): + monitor_state = "Down" + if monitor_type == 'BFD': + self.update_bfds_state(bfd_ids.values(), monitor_state) + time.sleep(WAIT_TIME) + monitor_state = "Up" + self.update_bfds_state(bfd_ids.values(), monitor_state) + elif monitor_type == 'custom': + self.update_monitors_state(routes, monitor_state) + time.sleep(WAIT_TIME) + monitor_state = "Up" + self.update_monitors_state(routes, monitor_state) + time.sleep(WAIT_TIME_EXTRA) + # step 6: Test the traffic flow. + self.verify_tunnel_route_with_traffic(self.vxlan_test_setup, self.duthost, encap_type, routes) + + # Step 7: remove the VNET route + self.remove_vnet_route(routes) + time.sleep(WAIT_TIME) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + # we expect the route_check not to fail as the vnet route is removed and BGP learnt route is readded. + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + # Step 7: remove the BGP route + self.remove_bgp_route_from_neighbor_tor(tor, routes, routes_adv) + time.sleep(WAIT_TIME) + self.verify_nighbor_doesnt_have_routes(routes, routes_adv, community) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + if init_nh_state == "initially_up": + self.remove_vnet_route(fixed_route) + py_assert(self.duthost.shell("sudo vnet_route_check.py")['stdout'] == '', "vnet_route_check.py failed.") + py_assert(self.duthost.shell("route_check.py")['stdout'] == '', "route_check.py failed.") + + self.remove_bgp_profile(profile) + return diff --git a/tests/vxlan/test_vxlan_route_advertisement.py b/tests/vxlan/test_vxlan_route_advertisement.py index 51babda62c7..92cc5e3edcd 100644 --- a/tests/vxlan/test_vxlan_route_advertisement.py +++ b/tests/vxlan/test_vxlan_route_advertisement.py @@ -87,7 +87,7 @@ def fixture_setUp(duthosts, asic_type = duthosts[rand_one_dut_hostname].facts["asic_type"] if asic_type not in ["cisco-8000", "mellanox", "vs"]: - raise RuntimeError("Pls update this script for your platform.") + pytest.skip(f"{asic_type} is not a supported platform for this test. Only support MNLX and CISCO platforms.") # Should I keep the temporary files copied to DUT? ecmp_utils.Constants['KEEP_TEMP_FILES'] = \ diff --git a/tests/zmq/test_gnmi_zmq.py b/tests/zmq/test_gnmi_zmq.py new file mode 100644 index 00000000000..07a739f9f7e --- /dev/null +++ b/tests/zmq/test_gnmi_zmq.py @@ -0,0 +1,133 @@ +import pytest +import logging +import random + +from tests.common.utilities import wait_until +from tests.common.helpers.assertions import pytest_assert + +logger = logging.getLogger(__name__) + + +pytestmark = [ + pytest.mark.topology('any') +] + + +def get_pid(duthost, process_name): + return duthost.shell("pgrep {}".format(process_name), module_ignore_errors=True)["stdout"] + + +def save_reload_config(duthost): + + def _check_process_ready(duthost, process_name, old_pid): + new_pid = get_pid(duthost, process_name) + logger.debug("_check_orchagent_ready: {} PID {}".format(process_name, new_pid)) + return new_pid != "" and new_pid != old_pid + + orchagent_pid = get_pid(duthost, "orchagent") + telemetry_pid = get_pid(duthost, "telemetry") + + result = duthost.shell("sudo config save -y", module_ignore_errors=True) + logger.debug("Save config: {}".format(result)) + result = duthost.shell("sudo config reload -y -f", module_ignore_errors=True) + logger.debug("Reload config: {}".format(result)) + + pytest_assert(wait_until(30, 2, 0, _check_process_ready, duthost, "orchagent", orchagent_pid), + "The orchagent not start after change subtype") + + pytest_assert(wait_until(30, 2, 0, _check_process_ready, duthost, "telemetry", telemetry_pid), + "The telemetry not start after change subtype") + + +@pytest.fixture +def enable_zmq(duthost): + command = 'sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" subtype' + subtype = duthost.shell(command, module_ignore_errors=True)["stdout"] + logger.debug("subtype: {}".format(subtype)) + + # the device already enable SmartSwitch + if subtype == "SmartSwitch": + yield + return + + # enable ZMQ + command = 'sonic-db-cli CONFIG_DB hset "DEVICE_METADATA|localhost" subtype SmartSwitch' + result = duthost.shell(command, module_ignore_errors=True) + logger.debug("set subtype subtype: {}".format(result)) + save_reload_config(duthost) + + yield + + # revert change + command = 'sonic-db-cli CONFIG_DB hdel "DEVICE_METADATA|localhost" subtype' + result = duthost.shell(command, module_ignore_errors=True) + logger.debug("revert subtype subtype: {}".format(result)) + save_reload_config(duthost) + + +def gnmi_set(duthost, ptfhost, delete_list, update_list, replace_list): + ip = duthost.mgmt_ip + port = 8080 + cmd = 'python2 /root/gnxi/gnmi_cli_py/py_gnmicli.py ' + cmd += '--timeout 30 --notls ' + cmd += '--notls ' + cmd += '-t %s -p %u ' % (ip, port) + cmd += '-xo sonic-db ' + cmd += '-m set-update ' + xpath = '' + xvalue = '' + for path in delete_list: + path = path.replace('sonic-db:', '') + xpath += ' ' + path + xvalue += ' ""' + for update in update_list: + update = update.replace('sonic-db:', '') + result = update.rsplit(':', 1) + xpath += ' ' + result[0] + xvalue += ' ' + result[1] + for replace in replace_list: + replace = replace.replace('sonic-db:', '') + result = replace.rsplit(':', 1) + xpath += ' ' + result[0] + if '#' in result[1]: + xvalue += ' ""' + else: + xvalue += ' ' + result[1] + cmd += '--xpath ' + xpath + cmd += ' ' + cmd += '--value ' + xvalue + output = ptfhost.shell(cmd, module_ignore_errors=True) + error = "GRPC error\n" + if error in output['stdout']: + result = output['stdout'].split(error, 1) + raise Exception("GRPC error:" + result[1]) + if output['stderr']: + raise Exception("error:" + output['stderr']) + else: + return + + +def test_gnmi_zmq(duthosts, + rand_one_dut_hostname, + ptfhost, + enable_zmq): + duthost = duthosts[rand_one_dut_hostname] + + command = 'ps -auxww | grep "/usr/sbin/telemetry -logtostderr --noTLS --port 8080"' + gnmi_process = duthost.shell(command, module_ignore_errors=True)["stdout"] + logger.debug("gnmi_process: {}".format(gnmi_process)) + + file_name = "vnet.txt" + vnet_key = "Vnet{}".format(random.randint(0, 1000)) + text = "{\"" + vnet_key + "\": {\"vni\": \"1000\", \"guid\": \"559c6ce8-26ab-4193-b946-ccc6e8f930b2\"}}" + with open(file_name, 'w') as file: + file.write(text) + ptfhost.copy(src=file_name, dest='/root') + # Add DASH_VNET_TABLE + update_list = ["/sonic-db:APPL_DB/localhost/DASH_VNET_TABLE:@/root/%s" % (file_name)] + gnmi_set(duthost, ptfhost, [], update_list, []) + + command = 'sonic-db-cli APPL_DB keys "*" | grep "DASH_VNET_TABLE:{}"'.format(vnet_key) + appl_db_key = duthost.shell(command, module_ignore_errors=True)["stdout"] + logger.debug("appl_db_key: {}".format(appl_db_key)) + assert appl_db_key == "DASH_VNET_TABLE:{}".format(vnet_key)