Skip to content

Commit 39da133

Browse files
w1ndavidyac86
authored andcommitted
[bgp-scale-test] Use different icmp type for each traffic thread to remove packet count noise (sonic-net#19380)
What is the motivation for this PR? We run test cases one by one, however, when count packets in next test case, it may count some packets from previous test case. How did you do it? To remove the noise, we use different icmp type for each traffic thread in test case, so that the packet count is more accurate. How did you verify/test it? Run test on 5640 testbed with 510 bgp session
1 parent 6e39282 commit 39da133

1 file changed

Lines changed: 22 additions & 17 deletions

File tree

tests/bgp/test_ipv6_bgp_scale.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,16 @@
4242
PACKETS_PER_TIME_SLOT = 500 // PKTS_SENDING_TIME_SLOT
4343
MASK_COUNTER_WAIT_TIME = 10 # wait some seconds for mask counters processing packets
4444
STATIC_ROUTES = ['0.0.0.0/0', '::/0']
45-
ICMP_TYPE = 123
4645
WITHDRAW_ROUTE_NUMBER = 1
46+
global_icmp_type = 123
4747

4848

49-
@pytest.fixture(scope="module")
50-
def setup_packet_mask_counters(ptfadapter):
49+
def setup_packet_mask_counters(ptf_dataplane, icmp_type):
5150
"""
5251
Create a mask counters for packet sending
5352
"""
54-
ptf_dp = ptfadapter.dataplane
5553
exp_pkt = simple_icmpv6_packet(
56-
icmp_type=ICMP_TYPE
54+
icmp_type=icmp_type
5755
)
5856
masked_exp_pkt = Mask(exp_pkt)
5957
masked_exp_pkt.set_do_not_care_scapy(scapy.Ether, 'src')
@@ -62,9 +60,9 @@ def setup_packet_mask_counters(ptfadapter):
6260
masked_exp_pkt.set_do_not_care_scapy(scapy.IPv6, "dst")
6361
masked_exp_pkt.set_do_not_care_scapy(scapy.IPv6, "hlim")
6462
masked_exp_pkt.set_do_not_care_scapy(scapy.ICMPv6Unknown, "cksum")
65-
ptf_dp.create_mask_counters(masked_exp_pkt)
63+
ptf_dataplane.create_mask_counters(masked_exp_pkt)
6664

67-
yield masked_exp_pkt
65+
return masked_exp_pkt
6866

6967

7068
@pytest.fixture(scope="function")
@@ -152,7 +150,7 @@ def generate_packets(prefixes, dut_mac, src_mac):
152150
eth_dst=dut_mac,
153151
eth_src=src_mac,
154152
ipv6_dst=addr,
155-
icmp_type=ICMP_TYPE
153+
icmp_type=global_icmp_type
156154
)
157155
pkts.append(bytes(pkt))
158156

@@ -328,7 +326,6 @@ def test_sessions_flapping(
328326
ptfadapter,
329327
bgp_peers_info,
330328
flapping_port_count,
331-
setup_packet_mask_counters,
332329
announce_bgp_routes_teardown
333330
):
334331
'''
@@ -343,8 +340,10 @@ def test_sessions_flapping(
343340
Expected result:
344341
Dataplane downtime is less than MAX_DOWNTIME_ONE_PORT_FLAPPING.
345342
'''
343+
global global_icmp_type
344+
global_icmp_type += 1
346345
pdp = ptfadapter.dataplane
347-
exp_mask = setup_packet_mask_counters
346+
exp_mask = setup_packet_mask_counters(pdp, global_icmp_type)
348347
bgp_neighbors = [hostname for hostname in bgp_peers_info.keys()]
349348

350349
random.shuffle(bgp_neighbors)
@@ -404,7 +403,6 @@ def test_nexthop_group_member_scale(
404403
localhost,
405404
tbinfo,
406405
bgp_peers_info,
407-
setup_packet_mask_counters,
408406
announce_bgp_routes_teardown,
409407
request
410408
):
@@ -424,11 +422,10 @@ def test_nexthop_group_member_scale(
424422
'''
425423
servers_dut_interfaces = announce_bgp_routes_teardown
426424
topo_name = tbinfo['topo']['name']
427-
if 't1' in topo_name:
428-
pytest.skip("Skip test on T1 topology because every route only have one nexthop")
429-
425+
global global_icmp_type
426+
global_icmp_type += 1
430427
pdp = ptfadapter.dataplane
431-
exp_mask = setup_packet_mask_counters
428+
exp_mask = setup_packet_mask_counters(pdp, global_icmp_type)
432429
injection_bgp_neighbor = random.choice(list(bgp_peers_info.keys()))
433430
injection_dut_port = bgp_peers_info[injection_bgp_neighbor][DUT_PORT]
434431
injection_port = [i[PTF_PORT] for i in bgp_peers_info.values() if i[DUT_PORT] == injection_dut_port][0]
@@ -492,6 +489,13 @@ def test_nexthop_group_member_scale(
492489
pytest.fail("BGP routes are not stable in long time")
493490

494491
# ------------announce routes and test ------------ #
492+
global_icmp_type += 1
493+
exp_mask = setup_packet_mask_counters(pdp, global_icmp_type)
494+
pkts = generate_packets(
495+
neighbor_ecmp_routes[injection_bgp_neighbor],
496+
duthost.facts['router_mac'],
497+
pdp.get_mac(pdp.port_to_device(injection_port), injection_port)
498+
)
495499
terminated = Event()
496500
traffic_thread = Thread(
497501
target=send_packets, args=(terminated, pdp, pdp.port_to_device(injection_port), injection_port, pkts)
@@ -516,7 +520,6 @@ def test_device_unisolation(
516520
duthost,
517521
ptfadapter,
518522
bgp_peers_info,
519-
setup_packet_mask_counters,
520523
announce_bgp_routes_teardown,
521524
tbinfo
522525
):
@@ -533,8 +536,10 @@ def test_device_unisolation(
533536
Expected result:
534537
Dataplane downtime is less than MAX_DOWNTIME_UNISOLATION.
535538
'''
539+
global global_icmp_type
540+
global_icmp_type += 1
536541
pdp = ptfadapter.dataplane
537-
exp_mask = setup_packet_mask_counters
542+
exp_mask = setup_packet_mask_counters(pdp, global_icmp_type)
538543

539544
bgp_ports = [bgp_info[DUT_PORT] for bgp_info in bgp_peers_info.values()]
540545

0 commit comments

Comments
 (0)