@@ -194,7 +194,7 @@ def filter_out_vnet_ip2me_routes(vnet_routes):
194194 vnet_routes .pop (vnet )
195195
196196
197- def get_vnet_routes_from_app_db ():
197+ def get_vnet_routes_from_app_db (default_vrf_oid ):
198198 ''' Returns dictionary of VNET routes configured per each VNET in APP_DB.
199199 Format: { <vnet_name>: { 'routes': [ <pfx/pfx_len> ], 'vrf_oid': <oid> } }
200200 '''
@@ -224,8 +224,7 @@ def get_vnet_routes_from_app_db():
224224 vnet_table = swsscommon .Table (db , 'VNET_TABLE' )
225225 scope = vnet_table .get (vnet_name )[1 ][1 ][1 ]
226226 if scope == 'default' :
227- del vnet_routes [vnet_name ]
228- continue
227+ vnet_routes [vnet_name ]['vrf_oid' ] = default_vrf_oid
229228 else :
230229 assert "Non-default VRF route present without vnet interface."
231230 else :
@@ -237,7 +236,7 @@ def get_vnet_routes_from_app_db():
237236 return vnet_routes
238237
239238
240- def get_vnet_routes_from_asic_db ():
239+ def get_vnet_routes_from_asic_db (default_vrf_oid ):
241240 ''' Returns dictionary of VNET routes configured per each VNET in ASIC_DB.
242241 Format: { <vnet_name>: { 'routes': [ <pfx/pfx_len> ], 'vrf_oid': <oid> } }
243242 '''
@@ -247,10 +246,12 @@ def get_vnet_routes_from_asic_db():
247246
248247 vnet_vrfs = get_vrf_entries ()
249248 vnet_vrfs_oids = [vnet_vrfs [k ] for k in vnet_vrfs ]
249+ vnet_vrfs_oids .append (default_vrf_oid )
250250
251251 vnet_intfs = get_vnet_intfs ()
252252
253253 vrf_oid_to_vnet_map = {}
254+ vrf_oid_to_vnet_map [default_vrf_oid ] = 'default_VRF'
254255
255256 for vnet_name , vnet_rifs in vnet_intfs .items ():
256257 for vnet_rif , vrf_oid in vnet_vrfs .items ():
@@ -286,23 +287,36 @@ def get_vnet_routes_from_asic_db():
286287 return vnet_routes
287288
288289
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 ):
290291 ''' Returns all routes present in routes_2 dictionary but missed in routes_1
291292 Format: { <vnet_name>: { 'routes': [ <pfx/pfx_len> ] } }
292293 '''
293294
294295 routes = {}
295296
296297 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 )
299310 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 )
306320
307321 return routes
308322
@@ -336,12 +350,15 @@ def main():
336350 # Don't run VNET routes consistancy logic if there is no VNET configuration
337351 if not check_vnet_cfg ():
338352 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 ]
339356
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 )
342359
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 )
345362 missed_in_sdk_routes = get_sdk_vnet_routes_diff (asic_db_vnet_routes )
346363
347364 res = {}
0 commit comments