]> git.proxmox.com Git - mirror_frr.git/blobdiff - bfdd/bfd_packet.c
sharpd: Allow sharpd to accept nexthop group as part of route install
[mirror_frr.git] / bfdd / bfd_packet.c
index 8acb9438c564662af5ccc903ce3becb3229ebe5b..606f739b4606a884c5e791883b7c0c1e4ad798c7 100644 (file)
@@ -197,7 +197,8 @@ static int ptm_bfd_process_echo_pkt(int s)
        bfd->echo_detect_TO = bfd->remote_detect_mult * bfd->echo_xmt_TO;
 
        /* Update echo receive timeout. */
-       bfd_echo_recvtimer_update(bfd);
+       if (bfd->echo_detect_TO > 0)
+               bfd_echo_recvtimer_update(bfd);
 
        return 0;
 }
@@ -303,6 +304,9 @@ ssize_t bfd_recv_ipv4(int sd, uint8_t *msgbuf, size_t msgbuflen, uint8_t *ttl,
 
                        local->sa_sin.sin_family = AF_INET;
                        local->sa_sin.sin_addr = pi->ipi_addr;
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+                       local->sa_sin.sin_len = sizeof(local->sa_sin);
+#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
                        fetch_portname_from_ifindex(pi->ipi_ifindex, port,
                                                    portlen);
                        break;
@@ -320,6 +324,9 @@ ssize_t bfd_recv_ipv4(int sd, uint8_t *msgbuf, size_t msgbuflen, uint8_t *ttl,
                        memcpy(&ia, CMSG_DATA(cm), sizeof(ia));
                        local->sa_sin.sin_family = AF_INET;
                        local->sa_sin.sin_addr = ia;
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+                       local->sa_sin.sin_len = sizeof(local->sa_sin);
+#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
                        break;
                }
 #endif /* BFD_BSD */
@@ -401,8 +408,11 @@ ssize_t bfd_recv_ipv6(int sd, uint8_t *msgbuf, size_t msgbuflen, uint8_t *ttl,
                } else if (cm->cmsg_type == IPV6_PKTINFO) {
                        pi6 = (struct in6_pktinfo *)CMSG_DATA(cm);
                        if (pi6) {
-                               local->sa_sin.sin_family = AF_INET6;
+                               local->sa_sin6.sin6_family = AF_INET6;
                                local->sa_sin6.sin6_addr = pi6->ipi6_addr;
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+                               local->sa_sin6.sin6_len = sizeof(local->sa_sin6);
+#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
                                fetch_portname_from_ifindex(pi6->ipi6_ifindex,
                                                            port, portlen);
                                ifindex = pi6->ipi6_ifindex;