From 0320f687e618ab5a4c5cb62cb622aa20377adb50 Mon Sep 17 00:00:00 2001 From: Sarita Patra Date: Sun, 22 Jan 2023 21:10:45 -0800 Subject: [PATCH] pimd,pim6d: Modify pim_neighbor_find() API Modify pim_neighbor_find() API to find the neighbor in neighbor secondary list. Signed-off-by: Sarita Patra (cherry picked from commit 3dbf370ac0a7cb0f10c56c37286adf971215dff1) --- pimd/pim_cmd_common.c | 2 +- pimd/pim_hello.c | 2 +- pimd/pim_neighbor.c | 9 ++++++++- pimd/pim_neighbor.h | 2 +- pimd/pim_pim.c | 4 ++-- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 9b571415fd..b82ef332fb 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -1398,7 +1398,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), diff --git a/pimd/pim_hello.c b/pimd/pim_hello.c index 03ce8687e5..4112618109 100644 --- a/pimd/pim_hello.c +++ b/pimd/pim_hello.c @@ -290,7 +290,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 */ diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c index 7726ac00b0..2457d1aaf0 100644 --- a/pimd/pim_neighbor.c +++ b/pimd/pim_neighbor.c @@ -419,7 +419,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; @@ -438,6 +438,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; } diff --git a/pimd/pim_neighbor.h b/pimd/pim_neighbor.h index a2a2df9e04..8e361f6685 100644 --- a/pimd/pim_neighbor.h +++ b/pimd/pim_neighbor.h @@ -51,7 +51,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); diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c index 1dd99d7ecd..6a926fae86 100644 --- a/pimd/pim_pim.c +++ b/pimd/pim_pim.c @@ -302,7 +302,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( @@ -317,7 +317,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(