2222
2323ROUTE_TABLE_NAME = "ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY"
2424DEFAULT_NUM_ROUTES = 10000
25- DEAFULT_M0_MX_NUM_ROUTES = 500
25+
26+ route_scale_per_role = {
27+ "m0" : {
28+ "ipv4" : 500 ,
29+ "ipv6" : 500
30+ },
31+ "mx" : {
32+ "ipv4" : 500 ,
33+ "ipv6" : 500
34+ },
35+ "t0" : {
36+ "ipv4" : 40000 ,
37+ "ipv6" : 8000
38+ },
39+ "t1" : {
40+ "ipv4" : 40000 ,
41+ "ipv6" : 8000
42+ }
43+ }
44+
45+
46+ def get_route_scale_per_role (tbinfo , ip_version ):
47+ topo_name = tbinfo ["topo" ]["name" ].split ('-' , 1 )[0 ]
48+ logger .info ("Test topology: {}" .format (topo_name ))
49+ if topo_name in route_scale_per_role :
50+ set_num_routes = route_scale_per_role [topo_name ][ip_version ]
51+ else :
52+ set_num_routes = DEFAULT_NUM_ROUTES
53+ return set_num_routes
54+
55+
56+ @pytest .fixture
57+ def check_config (duthosts , enum_rand_one_per_hwsku_frontend_hostname ):
58+ duthost = duthosts [enum_rand_one_per_hwsku_frontend_hostname ]
59+ asic = duthost .facts ["asic_type" ]
60+
61+ if (asic == "broadcom" ):
62+ alpm_enable = duthost .command ('bcmcmd "conf show l3_alpm_enable"' )["stdout_lines" ][2 ].strip ()
63+ logger .info ("Checking config: {}" .format (alpm_enable ))
64+ pytest_assert (alpm_enable == "l3_alpm_enable=2" , "l3_alpm_enable is not set for route scaling" )
2665
2766
2867@pytest .fixture (autouse = True )
@@ -276,19 +315,19 @@ def test_perf_add_remove_routes(
276315 ptfadapter ,
277316 enum_rand_one_per_hwsku_frontend_hostname ,
278317 request ,
318+ check_config ,
279319 ip_versions ,
280320 enum_rand_one_frontend_asic_index ,
281321):
282322 duthost = duthosts [enum_rand_one_per_hwsku_frontend_hostname ]
283323 asichost = duthost .asic_instance (enum_rand_one_frontend_asic_index )
324+ max_scale = request .config .getoption ("--max_scale" )
284325 # Number of routes for test
285326 set_num_routes = request .config .getoption ("--num_routes" )
286- if set_num_routes is None :
287- topo_name = tbinfo ["topo" ]["name" ]
288- if topo_name in ["m0" , "mx" ]:
289- set_num_routes = DEAFULT_M0_MX_NUM_ROUTES
290- else :
291- set_num_routes = DEFAULT_NUM_ROUTES
327+ if max_scale and set_num_routes is not None :
328+ raise Exception ("--max_scale and --num_routes are mutually exclusive" )
329+ elif not max_scale and set_num_routes is None :
330+ set_num_routes = get_route_scale_per_role (tbinfo , "ipv{}" .format (ip_versions ))
292331
293332 # Generate interfaces and neighbors
294333 NUM_NEIGHS = 50 # Update max num neighbors for multi-asic
@@ -310,7 +349,10 @@ def test_perf_add_remove_routes(
310349 ),
311350 )
312351
313- num_routes = min (avail_routes_count , set_num_routes )
352+ if (max_scale ):
353+ num_routes = avail_routes_count
354+ else :
355+ num_routes = min (avail_routes_count , set_num_routes )
314356 logger .info (
315357 "IP route utilization before test start: Used: {}, Available: {}, Test count: {}" .format (
316358 used_routes_count , avail_routes_count , num_routes
0 commit comments