]> git.proxmox.com Git - mirror_frr.git/blobdiff - ldpd/adjacency.c
Merge pull request #5259 from mjstapp/dplane_sample_plugin
[mirror_frr.git] / ldpd / adjacency.c
index e73d1b51a29097d0ec73370803c297ebf27d01a1..0bdd2423c7c1b47a7975ca0d44f17612d216fc6c 100644 (file)
@@ -60,11 +60,11 @@ adj_compare(const struct adj *a, const struct adj *b)
 
        switch (a->source.type) {
        case HELLO_LINK:
-               if (strcmp(a->source.link.ia->iface->name,
-                   b->source.link.ia->iface->name) < 0)
+               if (if_cmp_name_func(a->source.link.ia->iface->name,
+                                    b->source.link.ia->iface->name) < 0)
                        return (-1);
-               if (strcmp(a->source.link.ia->iface->name,
-                   b->source.link.ia->iface->name) > 0)
+               if (if_cmp_name_func(a->source.link.ia->iface->name,
+                                    b->source.link.ia->iface->name) > 0)
                        return (1);
                return (ldp_addrcmp(a->source.link.ia->af,
                    &a->source.link.src_addr, &b->source.link.src_addr));
@@ -109,17 +109,19 @@ adj_new(struct in_addr lsr_id, struct hello_source *source,
        return (adj);
 }
 
-static void
-adj_del_single(struct adj *adj)
+void
+adj_del(struct adj *adj, uint32_t notif_status)
 {
+       struct nbr      *nbr = adj->nbr;
+
        log_debug("%s: lsr-id %s, %s (%s)", __func__, inet_ntoa(adj->lsr_id),
            log_hello_src(&adj->source), af_name(adj_get_af(adj)));
 
        adj_stop_itimer(adj);
 
        RB_REMOVE(global_adj_head, &global.adj_tree, adj);
-       if (adj->nbr)
-               RB_REMOVE(nbr_adj_head, &adj->nbr->adj_tree, adj);
+       if (nbr)
+               RB_REMOVE(nbr_adj_head, &nbr->adj_tree, adj);
        switch (adj->source.type) {
        case HELLO_LINK:
                RB_REMOVE(ia_adj_head, &adj->source.link.ia->adj_tree, adj);
@@ -130,15 +132,6 @@ adj_del_single(struct adj *adj)
        }
 
        free(adj);
-}
-
-void
-adj_del(struct adj *adj, uint32_t notif_status)
-{
-       struct nbr      *nbr = adj->nbr;
-       struct adj      *atmp;
-
-       adj_del_single(adj);
 
        /*
         * If the neighbor still exists but none of its remaining
@@ -146,8 +139,6 @@ adj_del(struct adj *adj, uint32_t notif_status)
         * then delete it.
         */
        if (nbr && nbr_adj_count(nbr, nbr->af) == 0) {
-               RB_FOREACH_SAFE(adj, nbr_adj_head, &nbr->adj_tree, atmp)
-                       adj_del_single(adj);
                session_shutdown(nbr, notif_status, 0, 0);
                nbr_del(nbr);
        }
@@ -194,7 +185,6 @@ adj_itimer(struct thread *thread)
                        tnbr_del(leconf, adj->source.target);
                        return (0);
                }
-               adj->source.target->adj = NULL;
        }
 
        adj_del(adj, S_HOLDTIME_EXP);