From: Donald Sharp Date: Sun, 13 Apr 2025 16:47:44 +0000 (-0400) Subject: pimd: Allow ssmpingd command to work for pim X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=23fcf3135875f12ea4cf52a56f74e85f4641fa14;p=mirror%2Ffrr.git 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 --- 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(