From: Rafael Zalamena Date: Fri, 30 Nov 2018 17:02:23 +0000 (-0200) Subject: bfdd: fix multihop on FreeBSD X-Git-Tag: frr-7.1-dev~143^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=refs%2Fpull%2F3403%2Fhead;p=mirror%2Ffrr.git bfdd: fix multihop on FreeBSD Some systems have a extra `struct sockaddr*` field (`_len`) which must be filled in order for the peer lookup to work. Signed-off-by: Rafael Zalamena --- diff --git a/bfdd/bfd_packet.c b/bfdd/bfd_packet.c index 1ba5ee826f..606f739b46 100644 --- a/bfdd/bfd_packet.c +++ b/bfdd/bfd_packet.c @@ -304,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; @@ -321,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 */ @@ -402,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;