From 23fcf3135875f12ea4cf52a56f74e85f4641fa14 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Sun, 13 Apr 2025 12:47:44 -0400 Subject: [PATCH] pimd: Allow ssmpingd command to work for pim Commit: 1c56018f66723a5ea478f0d6607a8f81f4d6ada5 broke the ssmpingd implementation in pim. This is because it just completely botched the bind to the correct port and address. Signed-off-by: Donald Sharp --- pimd/pim_ssmpingd.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pimd/pim_ssmpingd.c b/pimd/pim_ssmpingd.c index 27dbb0d6b4..5c04284a35 100644 --- a/pimd/pim_ssmpingd.c +++ b/pimd/pim_ssmpingd.c @@ -155,10 +155,13 @@ static inline int ssmpingd_setsockopt(int fd, pim_addr addr, int mttl) static int ssmpingd_socket(pim_addr addr, int port, int mttl) { - struct sockaddr_storage sockaddr; +#if PIM_IPV == 4 + struct sockaddr_in sockaddr; +#else + struct sockaddr_in6 sockaddr; +#endif int fd; int ret; - socklen_t len = sizeof(sockaddr); fd = socket(PIM_AF, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { @@ -167,8 +170,15 @@ static int ssmpingd_socket(pim_addr addr, int port, int mttl) __func__, errno, safe_strerror(errno)); return -1; } - - pim_socket_getsockname(fd, (struct sockaddr *)&sockaddr, &len); +#if PIM_IPV == 4 + sockaddr.sin_addr = addr; + sockaddr.sin_port = htons(port); + sockaddr.sin_family = PIM_AF; +#else + sockaddr.sin6_addr = addr; + sockaddr.sin6_port = htons(port); + sockaddr.sin6_family = PIM_AF; +#endif if (bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr))) { zlog_warn( -- 2.39.5