@@ -530,6 +530,51 @@ def filter_out_soc_ip_routes(routes):
530
530
return updated_routes
531
531
532
532
533
+ def get_vlan_neighbors ():
534
+ """Return a list of VLAN neighbors."""
535
+ db = swsscommon .DBConnector (APPL_DB_NAME , 0 )
536
+ print_message (syslog .LOG_DEBUG , "APPL DB connected for neighbors" )
537
+ tbl = swsscommon .Table (db , 'NEIGH_TABLE' )
538
+ neigh_entries = tbl .getKeys ()
539
+
540
+ valid_neighs = []
541
+ for neigh_entry in neigh_entries :
542
+ if ':' in neigh_entry :
543
+ device , prefix = neigh_entry .split (':' , 1 )
544
+ if device .startswith ("Vlan" ):
545
+ valid_neighs .append (add_prefix_ifnot (prefix .lower ()))
546
+
547
+ print_message (syslog .LOG_DEBUG , "Vlan neighbors:" , json .dumps (valid_neighs , indent = 4 ))
548
+ return valid_neighs
549
+
550
+
551
+ def filter_out_vlan_neigh_route_miss (rt_appl_miss , rt_asic_miss ):
552
+ """Ignore any route miss for vlan neighbor IPs."""
553
+
554
+ def _filter_out_neigh_route (routes , neighs ):
555
+ updated_routes = []
556
+ ignored_routes = []
557
+ for route in routes :
558
+ if route in neighs :
559
+ ignored_routes .append (route )
560
+ else :
561
+ updated_routes .append (route )
562
+ return updated_routes , ignored_routes
563
+
564
+ config_db = swsscommon .ConfigDBConnector ()
565
+ config_db .connect ()
566
+
567
+ print_message (syslog .LOG_DEBUG , "Ignore vlan neighbor route miss" )
568
+ if is_dualtor (config_db ):
569
+ vlan_neighs = set (get_vlan_neighbors ())
570
+ rt_appl_miss , ignored_rt_appl_miss = _filter_out_neigh_route (rt_appl_miss , vlan_neighs )
571
+ print_message (syslog .LOG_DEBUG , "Ignored appl route miss:" , json .dumps (ignored_rt_appl_miss , indent = 4 ))
572
+ rt_asic_miss , ignored_rt_asic_miss = _filter_out_neigh_route (rt_asic_miss , vlan_neighs )
573
+ print_message (syslog .LOG_DEBUG , "Ignored asic route miss:" , json .dumps (ignored_rt_asic_miss , indent = 4 ))
574
+
575
+ return rt_appl_miss , rt_asic_miss
576
+
577
+
533
578
def check_routes ():
534
579
"""
535
580
The heart of this script which runs the checks.
@@ -578,6 +623,11 @@ def check_routes():
578
623
if rt_appl_miss :
579
624
rt_appl_miss = filter_out_voq_neigh_routes (rt_appl_miss )
580
625
626
+ # NOTE: On dualtor environment, ignore any route miss for the
627
+ # neighbors learned from the vlan subnet.
628
+ if rt_appl_miss or rt_asic_miss :
629
+ rt_appl_miss , rt_asic_miss = filter_out_vlan_neigh_route_miss (rt_appl_miss , rt_asic_miss )
630
+
581
631
if rt_appl_miss or rt_asic_miss :
582
632
# Look for subscribe updates for a second
583
633
adds , deletes = get_subscribe_updates (selector , subs )
0 commit comments