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

[chassis] To Verify In TSA Loopback0 IP's of all LC's should be advertised to peer neighbors #10239

Merged
merged 31 commits into from
Jan 20, 2024
Merged
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
febcacd
Added test case to verify ebtables rules.
abdosi Feb 6, 2021
9582616
Merge remote-tracking branch 'upstream/master'
abdosi Feb 9, 2021
940ebe4
Merge remote-tracking branch 'upstream/master'
abdosi Feb 28, 2021
36feb13
Merge remote-tracking branch 'upstream/master'
abdosi Mar 9, 2021
ab4beee
Merge remote-tracking branch 'upstream/master'
abdosi Mar 16, 2021
8d59326
Merge remote-tracking branch 'upstream/master'
abdosi Mar 18, 2021
fa03609
Merge remote-tracking branch 'upstream/master'
abdosi Mar 18, 2021
532639a
Merge remote-tracking branch 'upstream/master'
abdosi May 14, 2021
0833669
Merge remote-tracking branch 'upstream/master'
abdosi Jun 28, 2021
f2dbf92
Merge remote-tracking branch 'upstream/master'
abdosi Oct 4, 2021
915dc97
Merge remote-tracking branch 'upstream/master'
abdosi Oct 12, 2021
1aacc7a
Merge remote-tracking branch 'upstream/master'
abdosi Oct 12, 2021
6ca8577
Merge remote-tracking branch 'upstream/master'
abdosi Oct 13, 2021
7ad4900
Merge remote-tracking branch 'upstream/master'
abdosi Oct 27, 2021
a6d5c16
Fix to avoid overlap of Front Port Channel and Internal Pot Channel
abdosi Oct 27, 2021
03453b0
Merge remote-tracking branch 'upstream/master'
abdosi Nov 18, 2021
5fce19c
Merge remote-tracking branch 'upstream/master'
abdosi Jan 21, 2022
501698b
Merge branch 'master' of https://github.com/abdosi/sonic-mgmt
abdosi Feb 13, 2022
9d6f058
Merge remote-tracking branch 'upstream/master'
abdosi May 23, 2023
e7b6504
Merge remote-tracking branch 'upstream/master'
abdosi Jun 27, 2023
402c17c
Merge remote-tracking branch 'upstream/master'
abdosi Aug 4, 2023
fe770ed
Increase wait time for link up post config reload/minigraph for modular
abdosi Aug 4, 2023
c3f8665
Merge remote-tracking branch 'upstream/master'
abdosi Sep 15, 2023
c17e4f5
Increased socket buffer for PTF while running QoS test
abdosi Sep 16, 2023
3878c7d
Merge branch 'master' of https://github.com/abdosi/sonic-mgmt
abdosi Sep 16, 2023
3ba08fb
Revert "Increase wait time for link up post config reload/minigraph f…
abdosi Sep 16, 2023
59e3835
Added change to make sure all LC's Loopback0 IP is advertised in TSA
abdosi Oct 6, 2023
a787408
Merge remote-tracking branch 'upstream/master' into master_qos
abdosi Oct 6, 2023
7684379
Update test_traffic_shift.py
abdosi Oct 6, 2023
e1ace22
Update test_traffic_shift.py
abdosi Oct 6, 2023
6932c7e
Fixed precommit failure
abdosi Dec 15, 2023
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
79 changes: 47 additions & 32 deletions tests/bgp/test_traffic_shift.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ def verify_traffic_shift_per_asic(host, outputs, match_result, asic_index):

def verify_traffic_shift(host, outputs, match_result):
for asic_index in host.get_frontend_asic_ids():
if verify_traffic_shift_per_asic(host, outputs, TS_NO_NEIGHBORS, asic_index):
continue
if not verify_traffic_shift_per_asic(host, outputs, match_result, asic_index):
return "ERROR"

Expand Down Expand Up @@ -294,46 +296,59 @@ def check_and_log_routes_diff(duthost, neigh_hosts, orig_routes_on_all_nbrs, cur
return all_diffs_in_host_aspath


def verify_loopback_route_with_community(dut_host, neigh_hosts, ip_ver, community):
def verify_loopback_route_with_community(dut_hosts, duthost, neigh_hosts, ip_ver, community):
logger.info("Verifying only loopback routes are announced to bgp neighbors")
mg_facts = dut_host.minigraph_facts(
host=dut_host.hostname)['ansible_facts']
for i in range(0, 2):
addr = mg_facts['minigraph_lo_interfaces'][i]['addr']
if ipaddress.IPNetwork(addr).version == 4:
lo_addr_v4 = ipaddress.IPNetwork(addr)
else:
# The IPv6 Loopback announced to neighbors is /64
lo_addr_v6 = ipaddress.IPNetwork(addr + "/64")
if 4 == ip_ver:
lo_addr = lo_addr_v4
else:
lo_addr = lo_addr_v6
routes_on_all_nbrs = parse_routes_on_neighbors(
dut_host, neigh_hosts, ip_ver)
device_lo_addr_prefix_set = set()
device_ipv6_lo_addr_subnet_len_set = set()
device_traffic_shift_community_set = set()
device_traffic_shift_community_set.add(community)
device_ipv6_lo_addr_subnet_len_set.add('64')
for dut_host in dut_hosts:
if dut_host.is_supervisor_node():
continue
mg_facts = dut_host.minigraph_facts(host=dut_host.hostname)['ansible_facts']
for i in range(0, 2):
addr = mg_facts['minigraph_lo_interfaces'][i]['addr']
if ipaddress.IPNetwork(addr).version == 4:
if 4 == ip_ver:
device_lo_addr_prefix_set.add(addr + "/32")
else:
# The IPv6 Loopback announced to neighbors is /64
if 6 == ip_ver:
device_lo_addr_prefix_set.add(ipaddress.IPv6Address(addr).exploded[:20])
routes_on_all_nbrs = parse_routes_on_neighbors(duthost, neigh_hosts, ip_ver)
for hostname, routes in list(routes_on_all_nbrs.items()):
logger.info("Verifying only loopback routes(ipv{}) are announced to {}".format(
ip_ver, hostname))
logger.info("Verifying only loopback routes(ipv{}) are announced to {}".format(ip_ver, hostname))
nbr_prefix_set = set()
nbr_prefix_community_set = set()
nbr_prefix_ipv6_subnet_len_set = set()
for prefix, received_community in list(routes.items()):
if ipaddress.IPNetwork(prefix) != lo_addr:
logger.warn("route for {} is found on {}, which is not in loopback address".format(
prefix, hostname))
if 4 == ip_ver:
nbr_prefix_set.add(prefix)
else:
nbr_prefix_set.add(ipaddress.IPv6Address(prefix.split('/')[0]).exploded[:20])
nbr_prefix_ipv6_subnet_len_set.add(prefix.split('/')[1])
nbr_prefix_community_set.add(received_community)
if nbr_prefix_set != device_lo_addr_prefix_set:
logger.warn("missing loopback address or some other routes present on neighbor")
return False
if 6 == ip_ver and device_ipv6_lo_addr_subnet_len_set != nbr_prefix_ipv6_subnet_len_set:
logger.warn("ipv6 subnet is not /64 for loopback")
return False
if isinstance(list(neigh_hosts.items())[0][1]['host'], EosHost):
if nbr_prefix_community_set != device_traffic_shift_community_set:
logger.warn("traffic shift away community not present on neighbor")
return False
if isinstance(list(neigh_hosts.items())[0][1]['host'], EosHost):
if received_community != community:
logger.warn("community for route {} is unexpected {}".format(
prefix, received_community))
return False
return True


def verify_only_loopback_routes_are_announced_to_neighs(dut_host, neigh_hosts, community):
def verify_only_loopback_routes_are_announced_to_neighs(dut_hosts, duthost, neigh_hosts, community):
"""
Verify only loopback routes with certain community are announced to neighs in TSA
"""
return verify_loopback_route_with_community(dut_host, neigh_hosts, 4, community) and \
return verify_loopback_route_with_community(dut_hosts, duthost, neigh_hosts, 4, community) and \
verify_loopback_route_with_community(
dut_host, neigh_hosts, 6, community)
dut_hosts, duthost, neigh_hosts, 6, community)


# API to check if the image has support for BGP_DEVICE_GLOBAL table in the configDB
Expand Down Expand Up @@ -372,7 +387,7 @@ def test_TSA(duthosts, enum_rand_one_per_hwsku_frontend_hostname, ptfhost,
bgpmon_setup_teardown['namespace']) == [],
"Not all routes are announced to bgpmon")

pytest_assert(verify_only_loopback_routes_are_announced_to_neighs(duthost, nbrhosts_to_dut,
pytest_assert(verify_only_loopback_routes_are_announced_to_neighs(duthosts, duthost, nbrhosts_to_dut,
traffic_shift_community),
"Failed to verify routes on nbr in TSA")
finally:
Expand Down Expand Up @@ -514,7 +529,7 @@ def test_TSA_TSB_with_config_reload(duthosts, enum_rand_one_per_hwsku_frontend_h
bgpmon_setup_teardown['namespace']) == [],
"Not all routes are announced to bgpmon")

pytest_assert(verify_only_loopback_routes_are_announced_to_neighs(duthost, nbrhosts_to_dut,
pytest_assert(verify_only_loopback_routes_are_announced_to_neighs(duthosts, duthost, nbrhosts_to_dut,
traffic_shift_community),
"Failed to verify routes on nbr in TSA")
finally:
Expand Down Expand Up @@ -577,7 +592,7 @@ def test_load_minigraph_with_traffic_shift_away(duthosts, enum_rand_one_per_hwsk
bgpmon_setup_teardown['namespace']) == [],
"Not all routes are announced to bgpmon")

pytest_assert(verify_only_loopback_routes_are_announced_to_neighs(duthost, nbrhosts_to_dut,
pytest_assert(verify_only_loopback_routes_are_announced_to_neighs(duthosts, duthost, nbrhosts_to_dut,
traffic_shift_community),
"Failed to verify routes on nbr in TSA")
finally:
Expand Down
Loading