This is an automated email from the ASF dual-hosted git repository.

dmeden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new d7dc8cbdbb UDP: Set  the "Don't Fragment" (DF) bit  at IP layer for 
QUIC. (#10931)
d7dc8cbdbb is described below

commit d7dc8cbdbbd988cf28eea2a6527800d2413e0b1b
Author: Damian Meden <[email protected]>
AuthorDate: Thu Dec 14 09:46:12 2023 +0100

    UDP: Set  the "Don't Fragment" (DF) bit  at IP layer for QUIC. (#10931)
---
 src/iocore/net/UnixUDPNet.cc | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/iocore/net/UnixUDPNet.cc b/src/iocore/net/UnixUDPNet.cc
index 117a19f4f2..94a6008253 100644
--- a/src/iocore/net/UnixUDPNet.cc
+++ b/src/iocore/net/UnixUDPNet.cc
@@ -1173,6 +1173,12 @@ UDPNetProcessor::UDPBind(Continuation *cont, sockaddr 
const *addr, int fd, int s
       Dbg(dbg_ctl_udpnet, "setsockeopt for pktinfo failed");
       goto Lerror;
     }
+#ifdef IP_MTU_DISCOVER
+    int probe = IP_PMTUDISC_PROBE; // Set DF but ignore Path MTU
+    if (safe_setsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER, &probe, 
sizeof(probe)) == -1) {
+      Dbg(dbg_ctl_udpnet, "setsockeopt for IP_MTU_DISCOVER failed");
+    }
+#endif
   } else if (addr->sa_family == AF_INET6) {
     bool succeeded = false;
 #ifdef IPV6_PKTINFO
@@ -1189,14 +1195,18 @@ UDPNetProcessor::UDPBind(Continuation *cont, sockaddr 
const *addr, int fd, int s
       Dbg(dbg_ctl_udpnet, "setsockeopt for pktinfo failed");
       goto Lerror;
     }
+#ifdef IPV6_MTU_DISCOVER
+    int probe = IPV6_PMTUDISC_PROBE; // Set DF but ignore Path MTU
+    if (safe_setsockopt(fd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &probe, 
sizeof(probe)) == -1) {
+      Dbg(dbg_ctl_udpnet, "setsockeopt for IPV6_MTU_DISCOVER failed");
+    }
+#endif
   }
 
 #ifdef SOL_UDP
   if (G_udp_config.enable_gro) {
     int gro = 1;
-    if (safe_setsockopt(fd, IPPROTO_UDP, UDP_GRO, (char *)&gro, sizeof(gro)) 
== 0) {
-      Dbg(dbg_ctl_udpnet, "setsockopt UDP_GRO ok");
-    } else {
+    if (safe_setsockopt(fd, IPPROTO_UDP, UDP_GRO, (char *)&gro, sizeof(gro)) 
== -1) {
       Dbg(dbg_ctl_udpnet, "setsockopt UDP_GRO. errno=%d", errno);
     }
   }

Reply via email to