From 03c106bf3001c389611de9a8f3cb093a39c39a87 Mon Sep 17 00:00:00 2001 From: sarita patra Date: Mon, 4 Apr 2022 04:37:56 -0700 Subject: [PATCH] pimd: Disable sending of control packets on passive interface Signed-off-by: sarita patra --- pimd/pim_pim.c | 17 ++++++++++++++--- pimd/pim_pim.h | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c index 352f95c473..e9426c1c95 100644 --- a/pimd/pim_pim.c +++ b/pimd/pim_pim.c @@ -594,13 +594,24 @@ static int pim_msg_send_frame(int fd, char *buf, size_t len, } int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg, - int pim_msg_size, const char *ifname) + int pim_msg_size, struct interface *ifp) { socklen_t tolen; unsigned char buffer[10000]; unsigned char *msg_start; uint8_t ttl; struct pim_msg_header *header; + struct pim_interface *pim_ifp; + + pim_ifp = ifp->info; + + if (pim_ifp->pim_passive_enable) { + if (PIM_DEBUG_PIM_PACKETS) + zlog_debug( + "skip sending PIM message on passive interface %s", + ifp->name); + return 0; + } memset(buffer, 0, 10000); @@ -673,7 +684,7 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg, if (PIM_DEBUG_PIM_PACKETS) zlog_debug("%s: to %pPA on %s: msg_size=%d checksum=%x", - __func__, &dst, ifname, pim_msg_size, + __func__, &dst, ifp->name, pim_msg_size, header->checksum); if (PIM_DEBUG_PIM_PACKETDUMP_SEND) { @@ -681,7 +692,7 @@ int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg, } pim_msg_send_frame(fd, (char *)buffer, sendlen, (struct sockaddr *)&to, - tolen, ifname); + tolen, ifp->name); return 0; } diff --git a/pimd/pim_pim.h b/pimd/pim_pim.h index 822d8a18fa..e2555eab8c 100644 --- a/pimd/pim_pim.h +++ b/pimd/pim_pim.h @@ -58,7 +58,7 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len, pim_sgaddr sg); int pim_msg_send(int fd, pim_addr src, pim_addr dst, uint8_t *pim_msg, - int pim_msg_size, const char *ifname); + int pim_msg_size, struct interface *ifp); int pim_hello_send(struct interface *ifp, uint16_t holdtime); #endif /* PIM_PIM_H */