summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2019-04-26 20:33:19 +0200
committerGitHub <noreply@github.com>2019-04-26 20:33:19 +0200
commit86336f620f6e175e5552085877fa02ffaf9591b1 (patch)
tree4ef65850bf4371d9b89c19f4ae2ed7f413670813
parentMerge pull request #4201 from Orange-OpenSource/SR-isis (diff)
parentzebra: resolve issue with protocol route-map not applied properly (diff)
downloadfrr-86336f620f6e175e5552085877fa02ffaf9591b1.tar.xz
frr-86336f620f6e175e5552085877fa02ffaf9591b1.zip
Merge pull request #4209 from dslicenc/zebra-nexthop-update-flag
zebra: resolve issue with protocol route-map not applied properly
-rw-r--r--zebra/zebra_rib.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 0e1df1cc3..4cf4c2406 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -2655,7 +2655,6 @@ void rib_lookup_and_pushup(struct prefix_ipv4 *p, vrf_id_t vrf_id)
{
struct route_table *table;
struct route_node *rn;
- unsigned changed = 0;
rib_dest_t *dest;
if (NULL == (table = zebra_vrf_table(AFI_IP, SAFI_UNICAST, vrf_id))) {
@@ -2682,7 +2681,6 @@ void rib_lookup_and_pushup(struct prefix_ipv4 *p, vrf_id_t vrf_id)
* of the rest of the RE.
*/
if (dest->selected_fib) {
- changed = 1;
if (IS_ZEBRA_DEBUG_RIB) {
char buf[PREFIX_STRLEN];
@@ -2692,9 +2690,8 @@ void rib_lookup_and_pushup(struct prefix_ipv4 *p, vrf_id_t vrf_id)
route_entry_dump(&rn->p, NULL, dest->selected_fib);
}
rib_uninstall(rn, dest->selected_fib);
- }
- if (changed)
rib_queue_add(rn);
+ }
}
int rib_add_multipath(afi_t afi, safi_t safi, struct prefix *p,
@@ -3069,6 +3066,8 @@ void rib_update_table(struct route_table *table, rib_update_event_t event)
continue;
if (re->type != ZEBRA_ROUTE_STATIC) {
+ SET_FLAG(re->status,
+ ROUTE_ENTRY_CHANGED);
rib_queue_add(rn);
continue;
}
@@ -3082,8 +3081,11 @@ void rib_update_table(struct route_table *table, rib_update_event_t event)
* gateway, NHT will
* take care.
*/
- if (nh)
+ if (nh) {
+ SET_FLAG(re->status,
+ ROUTE_ENTRY_CHANGED);
rib_queue_add(rn);
+ }
}
break;
@@ -3093,8 +3095,12 @@ void rib_update_table(struct route_table *table, rib_update_event_t event)
* protocol in
* some cases (TODO).
*/
- if (rnode_to_ribs(rn))
+ if (rnode_to_ribs(rn)) {
+ RNODE_FOREACH_RE_SAFE (rn, re, next)
+ SET_FLAG(re->status,
+ ROUTE_ENTRY_CHANGED);
rib_queue_add(rn);
+ }
break;
default: