22import random
33import time
44import json
5+ import logging
56
67from tests .common .dualtor .mux_simulator_control import toggle_all_simulator_ports_to_rand_selected_tor_m # noqa F401
8+ from tests .common .snappi_tests .common_helpers import get_egress_queue_count
79
810pytestmark = [
911 pytest .mark .topology ('t1' )
1214BFD_RESPONDER_SCRIPT_SRC_PATH = '../ansible/roles/test/files/helpers/bfd_responder.py'
1315BFD_RESPONDER_SCRIPT_DEST_PATH = '/opt/bfd_responder.py'
1416
17+ logger = logging .getLogger (__name__ )
18+
1519
1620def is_dualtor (tbinfo ):
1721 """Check if the testbed is dualtor."""
@@ -141,6 +145,7 @@ def get_neighbors_multihop(duthost, tbinfo, ipv6=False, count=1):
141145 index = random .sample (list (range (len (t0_intfs ))), k = 1 )[0 ]
142146 port_intf = t0_intfs [index ]
143147 ptf_intf = ptf_ports [index ]
148+ logger .debug ("BFD multihop, DUT interface name: {}" .format (port_intf ))
144149 nexthop_ip = ""
145150 neighbour_dev_name = mg_facts ['minigraph_neighbors' ][port_intf ]['name' ]
146151 for bgpinfo in mg_facts ['minigraph_bgp' ]:
@@ -162,7 +167,7 @@ def get_neighbors_multihop(duthost, tbinfo, ipv6=False, count=1):
162167 else :
163168 neighbor_addrs .append (t0_ipv4_pattern .format ((idx % 250 ), idx2 ))
164169
165- return loopback_addr , ptf_intf , nexthop_ip , neighbor_addrs
170+ return loopback_addr , ptf_intf , nexthop_ip , neighbor_addrs , port_intf
166171
167172
168173def init_ptf_bfd (ptfhost ):
@@ -263,6 +268,7 @@ def create_bfd_sessions_multihop(ptfhost, duthost, loopback_addr, ptf_intf, neig
263268 bfd_config = []
264269 ptf_config = []
265270 for neighbor_addr in neighbor_addrs :
271+ logger .info ("create BFD sessions, loopback {} neighbor ip {}" .format (loopback_addr , neighbor_addr ))
266272 bfd_config .append ({
267273 "BFD_SESSION_TABLE:default:default:{}" .format (neighbor_addr ): {
268274 "local_addr" : loopback_addr ,
@@ -299,6 +305,8 @@ def create_bfd_sessions_multihop(ptfhost, duthost, loopback_addr, ptf_intf, neig
299305 ptfhost .command ('supervisorctl reread' )
300306 ptfhost .command ('supervisorctl update' )
301307 ptfhost .command ('supervisorctl start bfd_responder' )
308+ temp = duthost .shell ('show bfd summary' )
309+ logger .info ("BFD Summary dump: {}" .format (temp ['stdout' ]))
302310
303311
304312def remove_bfd_sessions (duthost , neighbor_addrs ):
@@ -330,6 +338,23 @@ def update_bfd_state(ptfhost, neighbor_addr, local_addr, state):
330338 ptfhost .shell ("bfdd-control session local {} remote {} {}" .format (neighbor_addr , local_addr , state ))
331339
332340
341+ def verify_bfd_queue_counters (duthost , dut_intf ):
342+ queue_output = duthost .shell ("show queue counters {}" .format (dut_intf ))
343+ logger .debug ("Queue output: {}" .format (queue_output ['stdout' ]))
344+
345+ for queue_val in range (0 , 7 ):
346+ queue_pkt_count , _ = get_egress_queue_count (duthost , dut_intf , int (queue_val ))
347+ logger .debug ("Interface {}, Queue {}, counter {}" .format (dut_intf , queue_val , queue_pkt_count ))
348+ if queue_pkt_count != 0 :
349+ pytest .fail ('Queue {} count is not zero, BFD packets might use this' .format (queue_val ))
350+
351+ bfd_queue = 7
352+ queue_pkt_count , _ = get_egress_queue_count (duthost , dut_intf , int (bfd_queue ))
353+ logger .debug ("Queue counters: {}" .format (queue_pkt_count ))
354+ if queue_pkt_count == 0 :
355+ pytest .fail ('Queue 7 packet count is zero, no BFD traffic' )
356+
357+
333358@pytest .mark .parametrize ('dut_init_first' , [True , False ], ids = ['dut_init_first' , 'ptf_init_first' ])
334359@pytest .mark .parametrize ('ipv6' , [False , True ], ids = ['ipv4' , 'ipv6' ])
335360def test_bfd_basic (request , rand_selected_dut , ptfhost , tbinfo , ipv6 , dut_init_first ):
@@ -419,8 +444,8 @@ def test_bfd_multihop(request, rand_selected_dut, ptfhost, tbinfo,
419444 duthost = rand_selected_dut
420445
421446 bfd_session_cnt = int (request .config .getoption ('--num_sessions' ))
422- loopback_addr , ptf_intf , nexthop_ip , neighbor_addrs = get_neighbors_multihop (duthost , tbinfo , ipv6 ,
423- count = bfd_session_cnt )
447+ loopback_addr , ptf_intf , nexthop_ip , neighbor_addrs , dut_intf = get_neighbors_multihop (duthost , tbinfo , ipv6 ,
448+ count = bfd_session_cnt )
424449 try :
425450 cmd_buffer = ""
426451 for neighbor in neighbor_addrs :
@@ -432,7 +457,10 @@ def test_bfd_multihop(request, rand_selected_dut, ptfhost, tbinfo,
432457 time .sleep (1 )
433458 for neighbor_addr in neighbor_addrs :
434459 check_dut_bfd_status (duthost , neighbor_addr , "Up" )
435-
460+ duthost .shell ("sonic-clear queuecounters" )
461+ # sleep for 10 seconds to check queue counters
462+ time .sleep (10 )
463+ verify_bfd_queue_counters (duthost , dut_intf )
436464 finally :
437465 remove_bfd_sessions (duthost , neighbor_addrs )
438466 cmd_buffer = ""
0 commit comments