]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: Don't add/del from name tree if name isnt set
authorStephen Worley <sworley@cumulusnetworks.com>
Wed, 9 Oct 2019 23:35:46 +0000 (19:35 -0400)
committerStephen Worley <sworley@cumulusnetworks.com>
Tue, 15 Oct 2019 21:19:12 +0000 (17:19 -0400)
If the name has not been set yet (we were only passed the
ifindex in some cases like with master/slave timings) then
do not add/del it from the ifname rb tree on the vrf struct.

Doing so causes duplicate entries on the tree and infinte loops
can happen when iterating over it.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
lib/if.c

index c5d90c83ab08d026a3454b1f25e0adda77695300..9c9252e1115ec32a80d456de05162deafe08e1a6 100644 (file)
--- a/lib/if.c
+++ b/lib/if.c
@@ -186,7 +186,9 @@ void if_update_to_new_vrf(struct interface *ifp, vrf_id_t vrf_id)
        /* remove interface from old master vrf list */
        old_vrf = vrf_lookup_by_id(ifp->vrf_id);
        if (old_vrf) {
-               IFNAME_RB_REMOVE(old_vrf, ifp);
+               if (ifp->name[0] != '\0')
+                       IFNAME_RB_REMOVE(old_vrf, ifp);
+
                if (ifp->ifindex != IFINDEX_INTERNAL)
                        IFINDEX_RB_REMOVE(old_vrf, ifp);
        }
@@ -194,7 +196,9 @@ void if_update_to_new_vrf(struct interface *ifp, vrf_id_t vrf_id)
        ifp->vrf_id = vrf_id;
        vrf = vrf_get(ifp->vrf_id, NULL);
 
-       IFNAME_RB_INSERT(vrf, ifp);
+       if (ifp->name[0] != '\0')
+               IFNAME_RB_INSERT(vrf, ifp);
+
        if (ifp->ifindex != IFINDEX_INTERNAL)
                IFINDEX_RB_INSERT(vrf, ifp);