From: Donald Sharp Date: Wed, 13 Feb 2019 00:17:05 +0000 (-0500) Subject: pbrd: If changing policy on an interface be careful what you ask for X-Git-Tag: 7.1_pulled~232^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=6eb499b0315eea9df04908dea3ef58973f43b9b3;p=matthieu%2Ffrr.git pbrd: If changing policy on an interface be careful what you ask for When changing policy on an interface, only delete the old_pbrm if it is different than the current, this covers the case: current config: int swp1 pbr-policy DONNA To a config entered of: int swp1 pbr-policy EVA Additionally there is no need to reinstall if we enter the same pbr-policy two times in a row. Signed-off-by: Donald Sharp --- diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c index a4b87f99d9..2b6c38593b 100644 --- a/pbrd/pbr_vty.c +++ b/pbrd/pbr_vty.c @@ -349,6 +349,7 @@ DEFPY (pbr_policy, struct pbr_map *pbrm, *old_pbrm; struct pbr_interface *pbr_ifp = ifp->info; + old_pbrm = NULL; pbrm = pbrm_find(mapname); if (!pbr_ifp) { @@ -369,12 +370,23 @@ DEFPY (pbr_policy, } else { if (strcmp(pbr_ifp->mapname, "") != 0) { old_pbrm = pbrm_find(pbr_ifp->mapname); - if (old_pbrm) + + /* + * So if we have an old pbrm we should only + * delete it if we are actually deleting and + * moving to a new pbrm + */ + if (old_pbrm && old_pbrm != pbrm) pbr_map_interface_delete(old_pbrm, ifp); } snprintf(pbr_ifp->mapname, sizeof(pbr_ifp->mapname), "%s", mapname); - if (pbrm) + + /* + * So only reinstall if the old_pbrm and this pbrm are + * different. + */ + if (pbrm && pbrm != old_pbrm) pbr_map_add_interface(pbrm, ifp); }