]> git.proxmox.com Git - mirror_frr.git/commitdiff
nhrpd: convert mcast list to DLIST
authorDavid Lamparter <equinox@opensourcerouting.org>
Wed, 29 Sep 2021 21:16:17 +0000 (23:16 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Tue, 19 Oct 2021 12:58:47 +0000 (14:58 +0200)
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
nhrpd/nhrp_interface.c
nhrpd/nhrp_multicast.c
nhrpd/nhrp_vty.c
nhrpd/nhrpd.h

index 0211bdd50b9d28d5311569365ba72a61b05b06e9..94cec0281f4a210396e26521b4651f4c31978620 100644 (file)
@@ -80,7 +80,7 @@ static int nhrp_if_new_hook(struct interface *ifp)
                struct nhrp_afi_data *ad = &nifp->afi[afi];
                ad->holdtime = NHRPD_DEFAULT_HOLDTIME;
                nhrp_nhslist_init(&ad->nhslist_head);
-               list_init(&ad->mcastlist_head);
+               nhrp_mcastlist_init(&ad->mcastlist_head);
        }
 
        return 0;
index 339b6dfabe274782d56e2aaa0268f5a63db0bc6a..d8372ae8a8cd2fdb4ecbe015c8183a5ff129ff9d 100644 (file)
@@ -219,7 +219,9 @@ void netlink_mcast_set_nflog_group(int nlgroup)
 static int nhrp_multicast_free(struct interface *ifp,
                               struct nhrp_multicast *mcast)
 {
-       list_del(&mcast->list_entry);
+       struct nhrp_interface *nifp = ifp->info;
+
+       nhrp_mcastlist_del(&nifp->afi[mcast->afi].mcastlist_head, mcast);
        XFREE(MTYPE_NHRP_MULTICAST, mcast);
        return 0;
 }
@@ -230,8 +232,7 @@ int nhrp_multicast_add(struct interface *ifp, afi_t afi,
        struct nhrp_interface *nifp = ifp->info;
        struct nhrp_multicast *mcast;
 
-       list_for_each_entry(mcast, &nifp->afi[afi].mcastlist_head, list_entry)
-       {
+       frr_each (nhrp_mcastlist, &nifp->afi[afi].mcastlist_head, mcast) {
                if (sockunion_same(&mcast->nbma_addr, nbma_addr))
                        return NHRP_ERR_ENTRY_EXISTS;
        }
@@ -241,7 +242,7 @@ int nhrp_multicast_add(struct interface *ifp, afi_t afi,
        *mcast = (struct nhrp_multicast){
                .afi = afi, .ifp = ifp, .nbma_addr = *nbma_addr,
        };
-       list_add_tail(&mcast->list_entry, &nifp->afi[afi].mcastlist_head);
+       nhrp_mcastlist_add_tail(&nifp->afi[afi].mcastlist_head, mcast);
 
        debugf(NHRP_DEBUG_COMMON, "Adding multicast entry (%pSU)", nbma_addr);
 
@@ -252,11 +253,9 @@ int nhrp_multicast_del(struct interface *ifp, afi_t afi,
                       union sockunion *nbma_addr)
 {
        struct nhrp_interface *nifp = ifp->info;
-       struct nhrp_multicast *mcast, *tmp;
+       struct nhrp_multicast *mcast;
 
-       list_for_each_entry_safe(mcast, tmp, &nifp->afi[afi].mcastlist_head,
-                                list_entry)
-       {
+       frr_each_safe (nhrp_mcastlist, &nifp->afi[afi].mcastlist_head, mcast) {
                if (!sockunion_same(&mcast->nbma_addr, nbma_addr))
                        continue;
 
@@ -274,17 +273,15 @@ int nhrp_multicast_del(struct interface *ifp, afi_t afi,
 void nhrp_multicast_interface_del(struct interface *ifp)
 {
        struct nhrp_interface *nifp = ifp->info;
-       struct nhrp_multicast *mcast, *tmp;
+       struct nhrp_multicast *mcast;
        afi_t afi;
 
        for (afi = 0; afi < AFI_MAX; afi++) {
-               debugf(NHRP_DEBUG_COMMON,
-                      "Cleaning up multicast entries (%d)",
-                      !list_empty(&nifp->afi[afi].mcastlist_head));
+               debugf(NHRP_DEBUG_COMMON, "Cleaning up multicast entries (%zu)",
+                      nhrp_mcastlist_count(&nifp->afi[afi].mcastlist_head));
 
-               list_for_each_entry_safe(
-                       mcast, tmp, &nifp->afi[afi].mcastlist_head, list_entry)
-               {
+               frr_each_safe (nhrp_mcastlist, &nifp->afi[afi].mcastlist_head,
+                              mcast) {
                        nhrp_multicast_free(ifp, mcast);
                }
        }
@@ -297,8 +294,7 @@ void nhrp_multicast_foreach(struct interface *ifp, afi_t afi,
        struct nhrp_interface *nifp = ifp->info;
        struct nhrp_multicast *mcast;
 
-       list_for_each_entry(mcast, &nifp->afi[afi].mcastlist_head, list_entry)
-       {
+       frr_each (nhrp_mcastlist, &nifp->afi[afi].mcastlist_head, mcast) {
                cb(mcast, ctx);
        }
 }
index c6f9a172589cfa4581085c1ed7d4f349734979a4..0dfabcf6ae2bccf87fb74ac7dcb684f6abff8709 100644 (file)
@@ -1210,9 +1210,7 @@ static int interface_config_write(struct vty *vty)
                                vty_out(vty, " nbma %s\n", nhs->nbma_fqdn);
                        }
 
-                       list_for_each_entry(mcast, &ad->mcastlist_head,
-                                           list_entry)
-                       {
+                       frr_each (nhrp_mcastlist, &ad->mcastlist_head, mcast) {
                                vty_out(vty, " %s nhrp map multicast ", aficmd);
                                if (sockunion_family(&mcast->nbma_addr)
                                   == AF_UNSPEC)
index 7e4a86cd5521b06461f8d78e302a338c166e10b6..2eab3614d45d98b3ff7f206ec1258cf2309f9aea 100644 (file)
@@ -269,6 +269,7 @@ struct nhrp_shortcut {
 };
 
 PREDECL_DLIST(nhrp_nhslist);
+PREDECL_DLIST(nhrp_mcastlist);
 
 struct nhrp_nhs {
        struct interface *ifp;
@@ -288,11 +289,13 @@ DECLARE_DLIST(nhrp_nhslist, struct nhrp_nhs, nhslist_entry);
 
 struct nhrp_multicast {
        struct interface *ifp;
-       struct list_head list_entry;
+       struct nhrp_mcastlist_item mcastlist_entry;
        afi_t afi;
        union sockunion nbma_addr; /* IP-address */
 };
 
+DECLARE_DLIST(nhrp_mcastlist, struct nhrp_multicast, mcastlist_entry);
+
 struct nhrp_registration {
        struct list_head reglist_entry;
        struct thread *t_register;
@@ -340,7 +343,7 @@ struct nhrp_interface {
                unsigned short mtu;
                unsigned int holdtime;
                struct nhrp_nhslist_head nhslist_head;
-               struct list_head mcastlist_head;
+               struct nhrp_mcastlist_head mcastlist_head;
        } afi[AFI_MAX];
 };