]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Enable DF (don't fragment) flag on listening UDP sockets
authorOndřej Surý <ondrej@isc.org>
Mon, 5 Oct 2020 08:51:40 +0000 (10:51 +0200)
committerOndřej Surý <ondrej@sury.org>
Mon, 5 Oct 2020 14:21:21 +0000 (16:21 +0200)
This commits uses the isc__nm_socket_dontfrag() helper function to
enable setting DF bit on the outgoing UDP packets.

lib/isc/netmgr/udp.c

index 7056a29bf27c1f1e5f645e5764e273ba76f61aab..b6785935f195bed662905b57879213ed1bfc2447 100644 (file)
@@ -66,7 +66,7 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_nmiface_t *iface, isc_nm_recv_cb_t cb,
 
        for (size_t i = 0; i < mgr->nworkers; i++) {
                isc_result_t result;
-               uint16_t family = iface->addr.type.sa.sa_family;
+               sa_family_t sa_family = iface->addr.type.sa.sa_family;
 
                isc__netievent_udplisten_t *ievent = NULL;
                isc_nmsocket_t *csock = &nsock->children[i];
@@ -79,7 +79,7 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_nmiface_t *iface, isc_nm_recv_cb_t cb,
                INSIST(csock->recv_cb == NULL && csock->recv_cbarg == NULL);
                csock->recv_cb = cb;
                csock->recv_cbarg = cbarg;
-               csock->fd = socket(family, SOCK_DGRAM, 0);
+               csock->fd = socket(sa_family, SOCK_DGRAM, 0);
                RUNTIME_CHECK(csock->fd >= 0);
 
                result = isc__nm_socket_reuse(csock->fd);
@@ -96,6 +96,8 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_nmiface_t *iface, isc_nm_recv_cb_t cb,
                 */
                (void)isc__nm_socket_incoming_cpu(csock->fd);
 
+               (void)isc__nm_socket_dontfrag(csock->fd, sa_family);
+
                ievent = isc__nm_get_ievent(mgr, netievent_udplisten);
                ievent->sock = csock;
                isc__nm_enqueue_ievent(&mgr->workers[i],