summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pbrd/pbr_nht.c2
-rw-r--r--pbrd/pbr_zebra.c16
2 files changed, 14 insertions, 4 deletions
diff --git a/pbrd/pbr_nht.c b/pbrd/pbr_nht.c
index c58902cf5..1ba7d7e0a 100644
--- a/pbrd/pbr_nht.c
+++ b/pbrd/pbr_nht.c
@@ -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);
}
diff --git a/pbrd/pbr_zebra.c b/pbrd/pbr_zebra.c
index a1a2d34ac..99caf4cb9 100644
--- a/pbrd/pbr_zebra.c
+++ b/pbrd/pbr_zebra.c
@@ -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);