diff options
| author | zyxwvu Shi <i@shiyc.cn> | 2023-02-15 23:55:00 +0800 |
|---|---|---|
| committer | Mergify <37929162+mergify[bot]@users.noreply.github.com> | 2023-02-21 16:38:15 +0000 |
| commit | 42a89db1aa6eed18e339efdc38826eb673fc00ed (patch) | |
| tree | 1328b2e680972e9d4aba66a6790d1471d9bedc9e | |
| parent | 410d78b7a4f2c8b4d4c3736c6d6cdb710287ca80 (diff) | |
zebra: Fix other table inactive when ip import-table is on
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>
(cherry picked from commit 207207c0c03e1108d1bae5cf345b7a29850e6ffd)
| -rw-r--r-- | zebra/zebra_rib.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index fceaaaa9f0..adc6a904f1 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -3800,7 +3800,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); } @@ -3875,11 +3877,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); } /* |
