]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd,pim6d: Modify pim_neighbor_find() API
authorSarita Patra <saritap@vmware.com>
Mon, 23 Jan 2023 05:10:45 +0000 (21:10 -0800)
committerSarita Patra <saritap@vmware.com>
Fri, 24 Feb 2023 12:40:38 +0000 (04:40 -0800)
Modify pim_neighbor_find() API to find the neighbor
in neighbor secondary list.

Signed-off-by: Sarita Patra <saritap@vmware.com>
pimd/pim_cmd_common.c
pimd/pim_hello.c
pimd/pim_neighbor.c
pimd/pim_neighbor.h
pimd/pim_pim.c

index c7b501ee149e893e1d979729d562519bf77db3c9..75df09ec354ecee4b9155f681ac2462385dffd12 100644 (file)
@@ -1385,7 +1385,7 @@ void pim_show_upstream(struct pim_instance *pim, struct vty *vty,
 
                        nbr = pim_neighbor_find(
                                up->rpf.source_nexthop.interface,
-                               up->rpf.rpf_addr);
+                               up->rpf.rpf_addr, false);
                        if (nbr)
                                pim_time_timer_to_hhmmss(join_timer,
                                                         sizeof(join_timer),
index 8d1924741586ea396c92248bee0684b577084b8e..978607d1479cbe85acd2c92ba87b591b8c138bb7 100644 (file)
@@ -277,7 +277,7 @@ int pim_hello_recv(struct interface *ifp, pim_addr src_addr, uint8_t *tlv_buf,
          New neighbor?
        */
 
-       neigh = pim_neighbor_find(ifp, src_addr);
+       neigh = pim_neighbor_find(ifp, src_addr, false);
        if (!neigh) {
                /* Add as new neighbor */
 
index 9edc3c1af2224c1fe8eb8ecff91ab2513624fdac..0b7ea0ad9d1e7135b75b04276d4d794cd7b836fc 100644 (file)
@@ -406,7 +406,7 @@ struct pim_neighbor *pim_neighbor_find_by_secondary(struct interface *ifp,
 }
 
 struct pim_neighbor *pim_neighbor_find(struct interface *ifp,
-                                      pim_addr source_addr)
+                                      pim_addr source_addr, bool secondary)
 {
        struct pim_interface *pim_ifp;
        struct listnode *node;
@@ -425,6 +425,13 @@ struct pim_neighbor *pim_neighbor_find(struct interface *ifp,
                }
        }
 
+       if (secondary) {
+               struct prefix p;
+
+               pim_addr_to_prefix(&p, source_addr);
+               return pim_neighbor_find_by_secondary(ifp, &p);
+       }
+
        return NULL;
 }
 
index e00f99fe26c6cddd9e3bf196cc32fb562ad6d154..f7375745a153ca8ed4ffe6e43088c0150dd28786 100644 (file)
@@ -38,7 +38,7 @@ struct pim_neighbor {
 void pim_neighbor_timer_reset(struct pim_neighbor *neigh, uint16_t holdtime);
 void pim_neighbor_free(struct pim_neighbor *neigh);
 struct pim_neighbor *pim_neighbor_find(struct interface *ifp,
-                                      pim_addr source_addr);
+                                      pim_addr source_addr, bool secondary);
 struct pim_neighbor *pim_neighbor_find_by_secondary(struct interface *ifp,
                                                    struct prefix *src);
 struct pim_neighbor *pim_neighbor_find_if(struct interface *ifp);
index a7a8b0575392ce5736767a919a09f95068d48fa4..1248db3de45f694d73f68b0531fb3763d430e8a0 100644 (file)
@@ -289,7 +289,7 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len,
                                              pim_msg_len - PIM_MSG_HEADER_LEN);
                break;
        case PIM_MSG_TYPE_JOIN_PRUNE:
-               neigh = pim_neighbor_find(ifp, sg.src);
+               neigh = pim_neighbor_find(ifp, sg.src, false);
                if (!neigh) {
                        if (PIM_DEBUG_PIM_PACKETS)
                                zlog_debug(
@@ -304,7 +304,7 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len,
                                          pim_msg_len - PIM_MSG_HEADER_LEN);
                break;
        case PIM_MSG_TYPE_ASSERT:
-               neigh = pim_neighbor_find(ifp, sg.src);
+               neigh = pim_neighbor_find(ifp, sg.src, false);
                if (!neigh) {
                        if (PIM_DEBUG_PIM_PACKETS)
                                zlog_debug(