diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 1eda55dca0..3445136d1f 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1933,7 +1933,16 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx) UNSET_FLAG(re->status, ROUTE_ENTRY_FAILED); SET_FLAG(re->status, ROUTE_ENTRY_INSTALLED); } - if (old_re) { + /* + * On an update operation from the same route type + * context retrieval currently has no way to know + * which was the old and which was the new. + * So don't unset our flags that we just set. + * We know redistribution is ok because the + * old_re in this case is used for nothing + * more than knowing whom to contact if necessary. + */ + if (old_re && old_re != re) { UNSET_FLAG(old_re->status, ROUTE_ENTRY_FAILED); UNSET_FLAG(old_re->status, ROUTE_ENTRY_INSTALLED);