@@ -194,7 +194,7 @@ def filter_out_vnet_ip2me_routes(vnet_routes):
194
194
vnet_routes .pop (vnet )
195
195
196
196
197
- def get_vnet_routes_from_app_db ():
197
+ def get_vnet_routes_from_app_db (default_vrf_oid ):
198
198
''' Returns dictionary of VNET routes configured per each VNET in APP_DB.
199
199
Format: { <vnet_name>: { 'routes': [ <pfx/pfx_len> ], 'vrf_oid': <oid> } }
200
200
'''
@@ -224,8 +224,7 @@ def get_vnet_routes_from_app_db():
224
224
vnet_table = swsscommon .Table (db , 'VNET_TABLE' )
225
225
scope = vnet_table .get (vnet_name )[1 ][1 ][1 ]
226
226
if scope == 'default' :
227
- del vnet_routes [vnet_name ]
228
- continue
227
+ vnet_routes [vnet_name ]['vrf_oid' ] = default_vrf_oid
229
228
else :
230
229
assert "Non-default VRF route present without vnet interface."
231
230
else :
@@ -237,7 +236,7 @@ def get_vnet_routes_from_app_db():
237
236
return vnet_routes
238
237
239
238
240
- def get_vnet_routes_from_asic_db ():
239
+ def get_vnet_routes_from_asic_db (default_vrf_oid ):
241
240
''' Returns dictionary of VNET routes configured per each VNET in ASIC_DB.
242
241
Format: { <vnet_name>: { 'routes': [ <pfx/pfx_len> ], 'vrf_oid': <oid> } }
243
242
'''
@@ -247,10 +246,12 @@ def get_vnet_routes_from_asic_db():
247
246
248
247
vnet_vrfs = get_vrf_entries ()
249
248
vnet_vrfs_oids = [vnet_vrfs [k ] for k in vnet_vrfs ]
249
+ vnet_vrfs_oids .append (default_vrf_oid )
250
250
251
251
vnet_intfs = get_vnet_intfs ()
252
252
253
253
vrf_oid_to_vnet_map = {}
254
+ vrf_oid_to_vnet_map [default_vrf_oid ] = 'default_VRF'
254
255
255
256
for vnet_name , vnet_rifs in vnet_intfs .items ():
256
257
for vnet_rif , vrf_oid in vnet_vrfs .items ():
@@ -286,23 +287,36 @@ def get_vnet_routes_from_asic_db():
286
287
return vnet_routes
287
288
288
289
289
- def get_vnet_routes_diff (routes_1 , routes_2 ):
290
+ def get_vnet_routes_diff (default_vrf_oid , routes_1 , routes_2 , verify_default_vrf_routes = False ):
290
291
''' Returns all routes present in routes_2 dictionary but missed in routes_1
291
292
Format: { <vnet_name>: { 'routes': [ <pfx/pfx_len> ] } }
292
293
'''
293
294
294
295
routes = {}
295
296
296
297
for vnet_name , vnet_attrs in routes_2 .items ():
297
- if vnet_name not in routes_1 :
298
- routes [vnet_name ] = routes
298
+ if vnet_attrs ['vrf_oid' ] == default_vrf_oid :
299
+ if verify_default_vrf_routes :
300
+ for vnet_route in vnet_attrs ['routes' ]:
301
+ ispresent = False
302
+ for vnet_name_other , vnet_attrs_other in routes_1 .items ():
303
+ if vnet_route in vnet_attrs_other ['routes' ]:
304
+ ispresent = True
305
+ if not ispresent :
306
+ if vnet_name not in routes :
307
+ routes [vnet_name ] = {}
308
+ routes [vnet_name ]['routes' ] = []
309
+ routes [vnet_name ]['routes' ].append (vnet_route )
299
310
else :
300
- for vnet_route in vnet_attrs ['routes' ]:
301
- if vnet_route not in routes_1 [vnet_name ]['routes' ]:
302
- if vnet_name not in routes :
303
- routes [vnet_name ] = {}
304
- routes [vnet_name ]['routes' ] = []
305
- routes [vnet_name ]['routes' ].append (vnet_route )
311
+ if vnet_name not in routes_1 :
312
+ routes [vnet_name ] = vnet_attrs ['routes' ].copy ()
313
+ else :
314
+ for vnet_route in vnet_attrs ['routes' ]:
315
+ if vnet_route not in routes_1 [vnet_name ]['routes' ]:
316
+ if vnet_name not in routes :
317
+ routes [vnet_name ] = {}
318
+ routes [vnet_name ]['routes' ] = []
319
+ routes [vnet_name ]['routes' ].append (vnet_route )
306
320
307
321
return routes
308
322
@@ -336,12 +350,15 @@ def main():
336
350
# Don't run VNET routes consistancy logic if there is no VNET configuration
337
351
if not check_vnet_cfg ():
338
352
return rc
353
+ asic_db = swsscommon .DBConnector ('ASIC_DB' , 0 )
354
+ virtual_router = swsscommon .Table (asic_db , 'ASIC_STATE:SAI_OBJECT_TYPE_VIRTUAL_ROUTER' )
355
+ default_vrf_oid = virtual_router .getKeys ()[0 ]
339
356
340
- app_db_vnet_routes = get_vnet_routes_from_app_db ()
341
- asic_db_vnet_routes = get_vnet_routes_from_asic_db ()
357
+ app_db_vnet_routes = get_vnet_routes_from_app_db (default_vrf_oid )
358
+ asic_db_vnet_routes = get_vnet_routes_from_asic_db (default_vrf_oid )
342
359
343
- missed_in_asic_db_routes = get_vnet_routes_diff (asic_db_vnet_routes , app_db_vnet_routes )
344
- missed_in_app_db_routes = get_vnet_routes_diff (app_db_vnet_routes , asic_db_vnet_routes )
360
+ missed_in_asic_db_routes = get_vnet_routes_diff (default_vrf_oid , asic_db_vnet_routes , app_db_vnet_routes , True )
361
+ missed_in_app_db_routes = get_vnet_routes_diff (default_vrf_oid , app_db_vnet_routes , asic_db_vnet_routes )
345
362
missed_in_sdk_routes = get_sdk_vnet_routes_diff (asic_db_vnet_routes )
346
363
347
364
res = {}
0 commit comments