pbrd: Fix installation and deletion in some cases

When a nexthop group is modified do not assume that it
is not installed.  The creation of the pnhgc is enough
to set the installed to false.  If we are reinstalling
it is not needed to set it as not installed.

When a pbrms is being installed/removed check to see if it
is already installed/deleted and do the right thing from
there.

Ticket: CM-20371
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2018-04-06 11:41:10 -04:00
parent 2fb7892ed1
commit 9b71ea4ba5
2 changed files with 14 additions and 4 deletions

View File

@ -410,8 +410,6 @@ static void pbr_nht_install_nexthop_group(struct pbr_nexthop_group_cache *pnhgc,
install_afi = pbr_nht_which_afi(nhg, nh_afi);
pnhgc->installed = false;
route_add(pnhgc, nhg, install_afi);
}

View File

@ -500,8 +500,20 @@ void pbr_send_pbr_map(struct pbr_map_sequence *pbrms,
struct pbr_map *pbrm = pbrms->parent;
struct stream *s;
DEBUGD(&pbr_dbg_zebra, "%s: for %s %d", __PRETTY_FUNCTION__, pbrm->name,
install);
DEBUGD(&pbr_dbg_zebra, "%s: for %s %d(%d)",
__PRETTY_FUNCTION__, pbrm->name,
install, pbrms->installed);
/*
* If we are installed and asked to do so again
* just return. If we are not installed and asked
* and asked to delete just return;
*/
if (install && pbrms->installed)
return;
if (!install && !pbrms->installed)
return;
s = zclient->obuf;
stream_reset(s);