From 68b2295f4eed17c08f9c75b35621bfa26c3abe43 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 6 Nov 2021 16:28:49 +0900 Subject: [PATCH] nghttpx: Set IP_PMTUDISC_DO explicitly --- src/shrpx_worker.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/shrpx_worker.cc b/src/shrpx_worker.cc index 89423537..c0169066 100644 --- a/src/shrpx_worker.cc +++ b/src/shrpx_worker.cc @@ -833,6 +833,19 @@ int Worker::create_quic_server_socket(UpstreamAddr &faddr) { close(fd); continue; } + +# if defined(IPV6_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) + int mtu_disc = IP_PMTUDISC_DO; + if (setsockopt(fd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &mtu_disc, + static_cast(sizeof(mtu_disc))) == -1) { + auto error = errno; + LOG(WARN) + << "Failed to set IPV6_MTU_DISCOVER option to listener socket: " + << xsi_strerror(error, errbuf.data(), errbuf.size()); + close(fd); + continue; + } +# endif // defined(IPV6_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) } else { if (setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &val, static_cast(sizeof(val))) == -1) { @@ -842,6 +855,18 @@ int Worker::create_quic_server_socket(UpstreamAddr &faddr) { close(fd); continue; } + +# if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) + int mtu_disc = IP_PMTUDISC_DO; + if (setsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER, &mtu_disc, + static_cast(sizeof(mtu_disc))) == -1) { + auto error = errno; + LOG(WARN) << "Failed to set IP_MTU_DISCOVER option to listener socket: " + << xsi_strerror(error, errbuf.data(), errbuf.size()); + close(fd); + continue; + } +# endif // defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) } util::fd_set_recv_ecn(fd, faddr.family);