]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Fix other table inactive when ip import-table is on 12818/head
authorzyxwvu Shi <i@shiyc.cn>
Wed, 15 Feb 2023 15:55:00 +0000 (23:55 +0800)
committerzyxwvu Shi <i@shiyc.cn>
Wed, 15 Feb 2023 15:55:30 +0000 (23:55 +0800)
In `rib_link`, if is_zebra_import_table_enabled returns
true, `rib_queue_add` will not called, resulting in other
table route node never processed. This actually should not
be dependent on whether the route is imported.

In `rib_delnode`, if is_zebra_import_table_enabled returns
true, it will use `rib_unlink` instead of enqueuing the
route node for process. There is no reason that imported
route nodes should not be reprocessed. Long ago, the
behaviour was dependent on whether the route_entry comes
from a table other than main.

Signed-off-by: zyxwvu Shi <i@shiyc.cn>
zebra/zebra_rib.c

index 415fc78142bd3a8eefd256e5db2a393fd545d90a..46ea0bc1e743b236df84a3b9866d18f16225e557 100644 (file)
@@ -3939,7 +3939,9 @@ static void rib_link(struct route_node *rn, struct route_entry *re, int process)
 
                rmap_name = zebra_get_import_table_route_map(afi, re->table);
                zebra_add_import_table_entry(zvrf, rn, re, rmap_name);
-       } else if (process)
+       }
+
+       if (process)
                rib_queue_add(rn);
 }
 
@@ -4014,11 +4016,9 @@ void rib_delnode(struct route_node *rn, struct route_entry *re)
                        zlog_debug("%s(%u):%pRN: Freeing route rn %p, re %p (%s)",
                                   vrf_id_to_name(re->vrf_id), re->vrf_id, rn,
                                   rn, re, zebra_route_string(re->type));
-
-               rib_unlink(rn, re);
-       } else {
-               rib_queue_add(rn);
        }
+
+       rib_queue_add(rn);
 }
 
 /*