]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
quic-handler: fix source address setting on BSDs
authorDaniel Salzman <daniel.salzman@nic.cz>
Mon, 4 Dec 2023 16:31:22 +0000 (17:31 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Tue, 5 Dec 2023 06:58:17 +0000 (07:58 +0100)
src/knot/server/quic-handler.c

index 0dfa1c4eed11ab69dd28658a61e0f537e8df718a..0944900e9ac70925b8cbc8fbc80c138a8c990b42 100644 (file)
@@ -155,11 +155,19 @@ int uq_send_sweep(struct knot_quic_reply *r)
                       sizeof(struct in6_addr));
        } else {
                cmsg.cmsg.cmsg_level = IPPROTO_IP;
+#if defined(IP_PKTINFO)
                cmsg.cmsg.cmsg_type = IP_PKTINFO;
                cmsg.cmsg.cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
                memcpy(&((struct in_pktinfo *)CMSG_DATA(&cmsg.cmsg))->ipi_addr,
                       &((const struct sockaddr_in *)r->ip_loc)->sin_addr,
                       sizeof(struct in_addr));
+#elif defined(IP_SENDSRCADDR)
+               cmsg.cmsg.cmsg_type = IP_SENDSRCADDR;
+               cmsg.cmsg.cmsg_len = CMSG_LEN(sizeof(struct in_addr));
+               memcpy((struct in_addr *)CMSG_DATA(&cmsg.cmsg),
+                      &((const struct sockaddr_in *)r->ip_loc)->sin_addr,
+                      sizeof(struct in_addr));
+#endif
        } // this only says "send it with given outgoing IP address"
 
        assert(r->ip_rem != NULL);