]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Allow ssmpingd command to work for pim
authorDonald Sharp <donaldsharp72@gmail.com>
Sun, 13 Apr 2025 16:47:44 +0000 (12:47 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Wed, 23 Apr 2025 17:56:07 +0000 (13:56 -0400)
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 <donaldsharp72@gmail.com>
pimd/pim_ssmpingd.c

index 27dbb0d6b4e8c38858b6b0257133adf9c8b1ce22..5c04284a356a036f9516387e4ec65cdaf99f589e 100644 (file)
@@ -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(