Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[test plan] Route aggregation #8706

Open
wants to merge 55 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
e8fb9e1
Merge pull request #1 from sonic-net/master
Azarack Oct 11, 2022
7d37d5a
Merge pull request #3 from sonic-net/master
Azarack Oct 17, 2022
1597709
Merge branch 'sonic-net:master' into master
Azarack Oct 26, 2022
70bea76
Merge branch 'sonic-net:master' into master
Azarack Oct 27, 2022
d7182bc
Merge branch 'sonic-net:master' into master
Azarack Nov 9, 2022
cd5f77d
Merge branch 'sonic-net:master' into master
Azarack Nov 10, 2022
025d4f2
Merge branch 'sonic-net:master' into master
Azarack Mar 15, 2023
44449fb
Merge branch 'sonic-net:master' into master
Azarack Mar 16, 2023
e15ea86
Merge branch 'sonic-net:master' into master
Azarack Mar 21, 2023
8d81027
Merge branch 'sonic-net:master' into master
Azarack Mar 21, 2023
e5d2305
Merge branch 'sonic-net:master' into master
Azarack Mar 28, 2023
6149cb3
Merge branch 'sonic-net:master' into master
Azarack Apr 4, 2023
52dcf3f
Merge branch 'sonic-net:master' into master
Azarack Apr 7, 2023
954e1f4
Merge branch 'sonic-net:master' into master
Azarack Apr 21, 2023
fbbf6c9
Merge branch 'sonic-net:master' into master
Azarack May 10, 2023
5bf1157
Merge branch 'sonic-net:master' into master
Azarack May 16, 2023
a34389c
Merge branch 'sonic-net:master' into master
Azarack Jun 5, 2023
925b27b
Merge branch 'sonic-net:master' into master
Azarack Jun 26, 2023
5ded63d
Merge branch 'sonic-net:master' into master
Azarack Jul 10, 2023
ebdbd3f
Merge branch 'sonic-net:master' into master
Azarack Aug 9, 2023
982bf2d
Merge branch 'sonic-net:master' into master
Azarack Aug 10, 2023
52abbaf
Merge branch 'sonic-net:master' into master
Azarack Aug 15, 2023
3316a92
Merge branch 'sonic-net:master' into master
Azarack Aug 16, 2023
fb86539
Merge branch 'sonic-net:master' into master
Azarack Aug 25, 2023
76b08cc
Merge branch 'sonic-net:master' into master
Azarack Aug 28, 2023
5b68634
Merge branch 'sonic-net:master' into master
Azarack Sep 5, 2023
ef6774b
Merge branch 'sonic-net:master' into master
Azarack Oct 4, 2023
9bfb561
Merge branch 'sonic-net:master' into master
Azarack Oct 5, 2023
112da65
Merge branch 'sonic-net:master' into master
Azarack Oct 10, 2023
4341f17
Merge branch 'sonic-net:master' into master
Azarack Oct 11, 2023
794a3b8
Merge branch 'sonic-net:master' into master
Azarack Oct 16, 2023
6124c0d
Merge branch 'sonic-net:master' into master
parmarkj Oct 17, 2023
0b981fb
Merge branch 'sonic-net:master' into master
Azarack Oct 24, 2023
99aca6a
Merge branch 'sonic-net:master' into master
Azarack Oct 27, 2023
904401d
Merge branch 'sonic-net:master' into master
Azarack Nov 1, 2023
c18d841
Merge branch 'sonic-net:master' into master
Azarack Nov 2, 2023
4383cb4
Merge branch 'sonic-net:master' into master
Azarack Nov 6, 2023
0edbf2b
Merge branch 'sonic-net:master' into master
Azarack Nov 13, 2023
ed4515a
Merge branch 'sonic-net:master' into master
Azarack Dec 11, 2023
f3cbac8
Merge branch 'sonic-net:master' into master
Azarack Jan 31, 2024
fb4e934
Merge branch 'sonic-net:master' into master
Azarack Mar 11, 2024
d5f7a5e
Merge branch 'sonic-net:master' into master
Azarack Mar 15, 2024
259b94f
adding back test file after breaking git
Azarack Mar 15, 2024
8dadefd
debug prints
Azarack Mar 19, 2024
55c0d1e
adding id template
Azarack Mar 19, 2024
a89ba54
rewrite of test case
Azarack Apr 23, 2024
8479e45
fixing lint error
Azarack Apr 23, 2024
e393910
Merge branch 'sonic-net:master' into route_aggregation
Azarack May 2, 2024
728094d
Merge branch 'master' into route_aggregation
Azarack May 17, 2024
d977694
fix lint
Azarack May 17, 2024
81037c4
adjustments for as-set
Azarack May 23, 2024
3dce3f1
assing as check
Azarack May 23, 2024
9a8cf10
Merge branch 'sonic-net:master' into route_aggregation
Azarack Sep 12, 2024
bdc6af7
refactor
Azarack Sep 20, 2024
7b31c0f
fix flake error
Azarack Sep 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions docs/testplan/BGP-Route-Aggregation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
[Overview](#overview)
- [Scope](#scope)
- [Testbed](#testbed)
- [Setup configuration](#setup-configuration)
- [Test cases](#test-cases)

# Test name

BGP Route Aggregation

## Overview

The goal of this test is to verify that summary-only, as-set summary-only, and suppress map route aggregation
operates as expected.

### Scope

The test is targeting a running SONIC system with fully functioning configuration. The purpose of the test is to test route aggregation.

### Related DUT CLI commands

| Command | Comment |
| ------- | ------- |
|Configuration commands|
| N/A | |
|Show commands|
| show ip bgp summary | Dispaly current memory statistics, can be done with ipv6 too |

### Related DUT configuration files

N/A

### Related SAI APIs

N/A

## Test structure
### Setup configuration

This test requires BGP neighbors to be configured and established.

### Configuration scripts

N/A

## Test cases
### Test case #1 - Route Aggregation

#### Test objective

Step 1: Configure DUT to use summary-only route aggregation
Step 2: Verify expected number of routes are shared to neighbor
Step 3: Configure DUT to use as-set summary-only route aggregation
Step 4: Verify expected number of routes are shared to neighbor
Step 5: Configure prefix list and route map and use sto aggregate routes
Step 6: Verify expected number of routes are shared to neighbor
74 changes: 74 additions & 0 deletions tests/bgp/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,80 @@ def set_timeout_for_bgpmon(duthost):
MAX_TIME_FOR_BGPMON = plt_reboot_ctrl.get('timeout', 180)


@pytest.fixture(scope='session')
def gather_info(tbinfo, duthost, nbrhosts):
asic_index = random.choice(duthost.get_frontend_asic_ids())
logger.debug(f"ASIC index: {asic_index}")
if duthost.is_multi_asic:
cli_options = " -n " + duthost.get_namespace_from_asic_id(asic_index)
else:
cli_options = ''
dut_asn = tbinfo['topo']['properties']['configuration_properties']['common']['dut_asn']

neigh = duthost.shell("show lldp table")['stdout'].split("\n")[3].split()[1]
logger.debug("neigh: {}".format(neigh))
skip_hosts = duthost.get_asic_namespace_list()

# verify bgp neighbor relationship is established
bgp_facts = duthost.bgp_facts(instance_id=asic_index)['ansible_facts']
for k, v in bgp_facts['bgp_neighbors'].items():
if v['description'].lower() not in skip_hosts:
if v['description'] == neigh:
if v['ip_version'] == 4:
neigh_ip_v4 = k
peer_group_v4 = v['peer group']
elif v['ip_version'] == 6:
neigh_ip_v6 = k
peer_group_v6 = v['peer group']
assert v['state'] == 'established'

dut_ip_v4 = tbinfo['topo']['properties']['configuration'][neigh]['bgp']['peers'][dut_asn][0]
dut_ip_v6 = tbinfo['topo']['properties']['configuration'][neigh]['bgp']['peers'][dut_asn][1].lower()

# capture route summary on neighbor
cmd = 'vtysh -c "show bgp ipv4 all neighbors {} advertised-routes" -c "show bgp ipv6 all neighbors {} \
advertised-routes" -c "show ip bgp summary" -c "show ip bgp neighbors {}" \
-c "show bgp ipv6 neighbors {}"'.format(dut_ip_v4, dut_ip_v6, dut_ip_v4, dut_ip_v6)
logger.debug(nbrhosts[neigh]["host"].shell(cmd, module_ignore_errors=True)['stdout'])

ipv4_sum = duthost.shell("show ip bgp summary", module_ignore_errors=True)['stdout']
ipv6_sum = duthost.shell("show ipv6 bgp summary", module_ignore_errors=True)['stdout']
ipv4_num_neigh = re.findall("Total number of neighbors (\\d+)", ipv4_sum)[0]
ipv6_num_neigh = re.findall("Total number of neighbors (\\d+)", ipv6_sum)[0]

setup_info = {
'duthost': duthost,
'neighhost': nbrhosts[neigh]["host"],
'neigh': neigh,
'dut_asn': dut_asn,
'dut_ip_v4': dut_ip_v4,
'dut_ip_v6': dut_ip_v6,
'neigh_ip_v4': neigh_ip_v4,
'neigh_ip_v6': neigh_ip_v6,
'peer_group_v4': peer_group_v4,
'peer_group_v6': peer_group_v6,
'cli_options': cli_options,
'asic_index': asic_index,
'base_v4_neigh': ipv4_num_neigh,
'base_v6_neigh': ipv6_num_neigh
}

logger.debug("DUT Config After Setup: {}".format(duthost.shell("show run bgp",
module_ignore_errors=True)['stdout']))

yield setup_info

# restore config to original state
config_reload(duthost, wait=60)

# verify sessions are established
bgp_facts = duthost.bgp_facts(instance_id=asic_index)['ansible_facts']
for k, v in bgp_facts['bgp_neighbors'].items():
if v['description'] == neigh:
logger.debug(v['description'])
assert v['state'] == 'established'


@pytest.fixture(scope="module")
def is_quagga(duthosts, enum_rand_one_per_hwsku_frontend_hostname):
"""Return True if current bgp is using Quagga."""
Expand Down
193 changes: 193 additions & 0 deletions tests/bgp/test_route_aggregation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
"""
Test BGP Route Aggregation

Step 1: Ensure eBGP neighborship between DUT and NEI_DUT
Step 2: Capture the route summary advertized to NEI_DUT
Step 3: Aggregate eBGP routes
Step 4: Verify aggregated eBGP routes to NEI_DUT
Step 5: Aggregate eBGP routes with 'as-set'
Step 6: Verify aggregated eBGP routes to NEI_DUT include AS-path

Pass/Fail Criteria:
An aggregate route is generated in all cases, a CLI knob option controls whether or not the specifics
are sent or not. No as-set information is generated in the AS_PATH of the aggregate route
(or a knob exists that disables the generation of as-set).
"""

import pytest
import time
import logging

pytestmark = [
pytest.mark.topology('t2')
]

logger = logging.getLogger(__name__)

NEI_IPv4_AGG_ROUTE = "1.1.0.0/16"
NEI_IPv6_AGG_ROUTE = "1:1:1::/48"
establish_bgp_session_time = 120


def create_loopbacks(gather_info):
gather_info['duthost'].shell("sudo config loopback add Loopback11")
gather_info['duthost'].shell("sudo config interface ip add Loopback11 1.1.1.1/24")
gather_info['duthost'].shell("sudo config interface ip add Loopback11 1:1:1:1::/64")
gather_info['duthost'].shell("sudo config loopback add Loopback12")
gather_info['duthost'].shell("sudo config interface ip add Loopback12 1.1.2.1/24")
gather_info['duthost'].shell("sudo config interface ip add Loopback12 1:1:1:2::/64")
gather_info['duthost'].shell("sudo config loopback add Loopback13")
gather_info['duthost'].shell("sudo config interface ip add Loopback13 1.1.3.1/24")
gather_info['duthost'].shell("sudo config interface ip add Loopback13 1:1:1:3::/64")
gather_info['duthost'].shell("sudo config loopback add Loopback14")
gather_info['duthost'].shell("sudo config interface ip add Loopback14 1.1.4.1/24")
gather_info['duthost'].shell("sudo config interface ip add Loopback14 1:1:1:4::/64")
gather_info['duthost'].shell("sudo config loopback add Loopback15")
gather_info['duthost'].shell("sudo config interface ip add Loopback15 1.1.5.1/24")
gather_info['duthost'].shell("sudo config interface ip add Loopback15 1:1:1:5::/64")


def agg_configuration(config, asn, duthost, cli_options, commandv4, commandv6):
remove_tag = ""
if not config:
remove_tag = "no "
cmd = 'vtysh{} -c "config" -c "router bgp {}" -c "address-family ipv4 unicast" \
-c "{}aggregate-address {} {}" -c "address-family ipv6 unicast" \
-c "{}aggregate-address {} {}"'.format(cli_options, asn, remove_tag, NEI_IPv4_AGG_ROUTE, commandv4, remove_tag,
NEI_IPv6_AGG_ROUTE, commandv6)
logger.debug(duthost.shell(cmd, module_ignore_errors=True))
cmd = 'vtysh{} -c "clear bgp *"'.format(cli_options)
duthost.shell(cmd, module_ignore_errors=True)
time.sleep(establish_bgp_session_time)


def verify_route_agg(dut, neigh_ip_v4, neigh_ip_v6, num_matches, suppress, as_set=False):
output = dut.shell('show ip bgp neighbors {} advertised-routes | grep -c "*> 1.1."'.format(neigh_ip_v4),
module_ignore_errors=True)['stdout']
logger.debug(output)
assert num_matches == output
output = dut.shell('show ipv6 bgp neighbors {} advertised-routes | grep -c "*> 1.1."'.format(neigh_ip_v6),
module_ignore_errors=True)['stdout']
logger.debug(output)
assert num_matches == output

output4 = dut.shell('show ip bgp neighbors {} advertised-routes | grep "*> 1.1."'.format(neigh_ip_v4),
module_ignore_errors=True)['stdout']
logger.debug(output4)
output6 = dut.shell('show ipv6 bgp neighbors {} advertised-routes | grep "*> 1.1."'.format(neigh_ip_v6),
module_ignore_errors=True)['stdout']
logger.debug(output6)
if suppress:
assert "1.1.1.0/24" not in output4
assert "1.1.2.0/24" not in output4
assert "1:1:1:1::/64" not in output6
assert "1:1:1:2::/64" not in output6
if as_set:
assert "11111" in output4
assert "22222" in output4
assert "11111" in output6
assert "22222" in output6


def check_baseline(dut, neigh_ip_v4, neigh_ip_v6, base_v4, base_v6):
output = dut.shell('show ip bgp neighbors {} advertised-routes | grep -c "*>"'.format(neigh_ip_v4),
module_ignore_errors=True)['stdout']
logger.debug("output: {}".format(output))
assert int(base_v4) + 5 == int(output)
output = dut.shell('show ipv6 bgp neighbors {} advertised-routes | grep -c "*>"'.format(neigh_ip_v6),
module_ignore_errors=True)['stdout']
logger.debug("output: {}".format(output))
assert int(base_v6) + 5 == int(output)


def test_ebgp_route_aggregation(gather_info):
# precheck number of routes
Copy link
Collaborator

@StormLiangMS StormLiangMS Sep 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main function of the test is too tedious to read. Could we break it down into smaller, more focused functions to improve readability and maintainability

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved a section to its own function to create all the loopbacks to help make it more readable.

num_v4_routes = gather_info['duthost'].shell('show ip bgp neighbors {} advertised-routes | grep -c "*>"'.format(
gather_info['neigh_ip_v4']))['stdout']
num_v6_routes = gather_info['duthost'].shell('show ipv6 bgp neighbors {} advertised-routes | grep -c "*>"'.format(
gather_info['neigh_ip_v6']))['stdout']

# Configure and Advertise Loopback Networks on DUT
create_loopbacks()

# Create the route maps to be used
cmd = 'vtysh -c "config" -c "route-map AGG_TEST_1 permit 10" -c "set as-path prepend 11111" -c "exit" -c "end"'
logger.debug(gather_info['duthost'].shell(cmd, module_ignore_errors=True))
cmd = 'vtysh -c "config" -c "route-map AGG_TEST_2 permit 10" -c "set as-path prepend 22222" -c "exit" -c "end"'
logger.debug(gather_info['duthost'].shell(cmd, module_ignore_errors=True))
# Assign the route maps to networks
cmd = 'vtysh{} -c "config" -c "router bgp {}" -c "address-family ipv4 unicast" \
-c "network 1.1.1.0/24 route-map AGG_TEST_1" -c "network 1.1.2.0/24 route-map AGG_TEST_1" \
-c "network 1.1.3.0/24 route-map AGG_TEST_2" -c "network 1.1.4.0/24 route-map AGG_TEST_2" \
-c "network 1.1.5.0/24" -c "address-family ipv6 unicast" -c "network 1:1:1:1::/64 route-map AGG_TEST_1" \
-c "network 1:1:1:2::/64 route-map AGG_TEST_1" -c "network 1:1:1:3::/64 route-map AGG_TEST_2" \
-c "network 1:1:1:4::/64 route-map AGG_TEST_2" -c "network 1:1:1:5::/64 route-map AGG_TEST_2"'.format(
gather_info['cli_options'], gather_info['dut_asn'])
logger.debug(gather_info['duthost'].shell(cmd, module_ignore_errors=True))
verify_route_agg(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], "5", False)
check_baseline(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], num_v4_routes,
num_v6_routes)

# Configure summary-only route aggregation
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here, seems repeated code, could we encapsulate this into a function?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These config changes are not repeated anywhere.

agg_configuration(True, gather_info['dut_asn'], gather_info['duthost'],
gather_info['cli_options'], "summary-only", "summary-only")
logger.debug(gather_info['duthost'].shell('vtysh -c "show run bgp"', module_ignore_errors=True)['stdout'])
verify_route_agg(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], "1", False)

# Remove the aggregate configuration
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the same? This is two functions that perform the repeated tasks.

agg_configuration(False, gather_info['dut_asn'], gather_info['duthost'],
gather_info['cli_options'], "summary-only", "summary-only")
verify_route_agg(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], "5", False)
check_baseline(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], num_v4_routes,
num_v6_routes)

# Configure as-set summary-only route aggregation
agg_configuration(True, gather_info['dut_asn'], gather_info['duthost'],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the same? These are function calls that perform the repeated tasks.

gather_info['cli_options'], "as-set summary-only", "as-set summary-only")
logger.debug(gather_info['duthost'].shell('vtysh -c "show run bgp"', module_ignore_errors=True)['stdout'])
verify_route_agg(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], "1", False,
as_set=True)

# Remove the aggregate configuration
agg_configuration(False, gather_info['dut_asn'], gather_info['duthost'],
gather_info['cli_options'], "as-set summary-only", "as-set summary-only")
verify_route_agg(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], "5", False)
check_baseline(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], num_v4_routes,
num_v6_routes)

# Configure route aggregation with suppress-map
# Create prefix lists to be used
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, could we encapsulate these configuration details into a separate function to keep the main routine clean and readable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They already are encapsulated.

cmd = 'vtysh{} -c "config" -c "ip prefix-list SUPPRESS_V4 permit 1.1.1.1/24" \
-c "ip prefix-list SUPPRESS_V4 permit 1.1.2.1/24" \
-c "ipv6 prefix-list SUPPRESS_V6 permit 1:1:1:1::/64" \
-c "ipv6 prefix-list SUPPRESS_V6 permit 1:1:1:2::/64"' \
.format(gather_info['cli_options'])
logger.debug(gather_info['duthost'].shell(cmd, module_ignore_errors=True))

# Create route maps
cmd = 'vtysh{} -c "config" -c "route-map SUPPRESS_RM_V4 permit 10" -c "match ip address prefix-list SUPPRESS_V4"' \
.format(gather_info['cli_options'])
gather_info['duthost'].shell(cmd, module_ignore_errors=True)
cmd = 'vtysh{} -c "config" -c "route-map SUPPRESS_RM_V6 permit 10" \
-c "match ipv6 address prefix-list SUPPRESS_V6"' \
.format(gather_info['cli_options'])
gather_info['duthost'].shell(cmd, module_ignore_errors=True)
agg_configuration(True, gather_info['dut_asn'], gather_info['duthost'],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The creation of the route maps is done twice with very different commands and setups for the maps. I don't see a way to combine into a function.

gather_info['cli_options'], "suppress-map SUPPRESS_RM_V4", "suppress-map SUPPRESS_RM_V6")
logger.debug(gather_info['duthost'].shell('vtysh -c "show run bgp"', module_ignore_errors=True)['stdout'])
verify_route_agg(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], "4", True)

# Remove config for suppress-map
agg_configuration(False, gather_info['dut_asn'], gather_info['duthost'],
gather_info['cli_options'], "suppress-map SUPPRESS_RM_V4", "suppress-map SUPPRESS_RM_V6")
cmd = 'vtysh{} -c "config" -c "no route-map SUPPRESS_RM_V4 permit 10"'.format(gather_info['cli_options'])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the same?

gather_info['duthost'].shell(cmd, module_ignore_errors=True)
cmd = 'vtysh{} -c "config" -c "no route-map SUPPRESS_RM_V6 permit 10"'.format(gather_info['cli_options'])
gather_info['duthost'].shell(cmd, module_ignore_errors=True)
cmd = 'vtysh{} -c "config" -c "no ip prefix-list SUPPRESS_V4 permit 1.1.1.1/24" \
-c "no ip prefix-list SUPPRESS_V4 permit 1.1.2.1/24" \
-c "no ipv6 prefix-list SUPPRESS_V6 permit 1:1:1:1::/64" \
-c "no ipv6 prefix-list SUPPRESS_V6 permit 1:1:1:2::/64"' \
.format(gather_info['cli_options'])
check_baseline(gather_info['duthost'], gather_info['neigh_ip_v4'], gather_info['neigh_ip_v6'], num_v4_routes,
num_v6_routes)
Loading