From d9b2c378376468a2aa2a75b24b2c3b9a3f82dc48 Mon Sep 17 00:00:00 2001 From: msvoelker Date: Tue, 26 Jul 2022 17:47:31 +0200 Subject: [PATCH] set socket option IPV6_MTU_DISCOVER=IP_PMTUDISC_PROBE for linux (#399) --- bin/CMakeLists.txt | 6 ++++++ bin/test_common.c | 14 ++++++++++++++ bin/test_config.h.in | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index 0872f11..5afd506 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -85,6 +85,12 @@ CHECK_SYMBOL_EXISTS( HAVE_IP_MTU_DISCOVER ) +CHECK_SYMBOL_EXISTS( + IPV6_MTU_DISCOVER + "netinet/in.h" + HAVE_IPV6_MTU_DISCOVER +) + CHECK_SYMBOL_EXISTS( IP_DONTFRAG "netinet/in.h" diff --git a/bin/test_common.c b/bin/test_common.c index 685947d..b15df86 100644 --- a/bin/test_common.c +++ b/bin/test_common.c @@ -964,6 +964,13 @@ sport_init_server (struct service_port *sport, struct lsquic_engine *engine, return -1; } } +#if __linux__ + else if (AF_INET6 == sa_local->sa_family) + { + int on = IP_PMTUDISC_PROBE; + s = setsockopt(sockfd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &on, sizeof(on)); + } +#endif } #endif @@ -1156,6 +1163,13 @@ sport_init_client (struct service_port *sport, struct lsquic_engine *engine, return -1; } } +#if __linux__ + else if (AF_INET6 == sa_local->sa_family) + { + int on = IP_PMTUDISC_PROBE; + s = setsockopt(sockfd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &on, sizeof(on)); + } +#endif } #endif diff --git a/bin/test_config.h.in b/bin/test_config.h.in index f7ea4a3..1c2ffba 100644 --- a/bin/test_config.h.in +++ b/bin/test_config.h.in @@ -9,7 +9,7 @@ #cmakedefine HAVE_REGEX 1 #cmakedefine HAVE_PREADV 1 -#define LSQUIC_DONTFRAG_SUPPORTED (HAVE_IP_DONTFRAG || HAVE_IP_MTU_DISCOVER) +#define LSQUIC_DONTFRAG_SUPPORTED (HAVE_IP_DONTFRAG || HAVE_IP_MTU_DISCOVER || HAVE_IPV6_MTU_DISCOVER) /* TODO: presumably it's the same on FreeBSD, test it. * See https://github.com/quicwg/base-drafts/wiki/ECN-in-QUIC