From: Frédéric Lécaille Date: Thu, 12 Jan 2023 14:23:54 +0000 (+0100) Subject: MINOR: quic: Add "no-quic" global option X-Git-Tag: v2.8-dev2~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=12a0317fed7997e0376cdba6cf226ffe534445c5;p=thirdparty%2Fhaproxy.git MINOR: quic: Add "no-quic" global option Add "no-quic" to "global" section to disable the use of QUIC transport protocol by all configured QUIC listeners. This is listeners with QUIC addresses on their "bind" lines. Internally, the socket addresses binding is skipped by protocol_bind_all() for receivers with or as protocol (see protocol struct). Add information about "no-quic" global option to the documentation. Must be backported to 2.7. --- diff --git a/doc/configuration.txt b/doc/configuration.txt index 7ee08acc32..9bd2627217 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -1982,6 +1982,14 @@ nbthread Otherwise, this value defaults to 1. The default value is reported in the output of "haproxy -vv". +no-quic + Warning: QUIC support in HAProxy is currently experimental. Configuration may + change without deprecation in the future. + + Disable QUIC transport protocol. All the QUIC listeners will still be created. + But they will not bind their addresses. Hence, no QUIC traffic will be + processed by haproxy. See also "quic_enabled" sample fetch. + numa-cpu-mapping If running on a NUMA-aware platform, HAProxy inspects on startup the CPU topology of the machine. If a multi-socket machine is detected, the affinity diff --git a/include/haproxy/global-t.h b/include/haproxy/global-t.h index dec16a21ac..9b567974af 100644 --- a/include/haproxy/global-t.h +++ b/include/haproxy/global-t.h @@ -79,6 +79,7 @@ #define GTUNE_DISABLE_ACTIVE_CLOSE (1<<22) #define GTUNE_QUICK_EXIT (1<<23) #define GTUNE_QUIC_SOCK_PER_CONN (1<<24) +#define GTUNE_NO_QUIC (1<<25) /* SSL server verify mode */ enum { diff --git a/src/cfgparse-global.c b/src/cfgparse-global.c index 6cc4afe135..3f4c877e9a 100644 --- a/src/cfgparse-global.c +++ b/src/cfgparse-global.c @@ -45,7 +45,7 @@ static const char *common_kw_list[] = { "log-tag", "spread-checks", "max-spread-checks", "cpu-map", "setenv", "presetenv", "unsetenv", "resetenv", "strict-limits", "localpeer", "numa-cpu-mapping", "defaults", "listen", "frontend", "backend", - "peers", "resolvers", "cluster-secret", + "peers", "resolvers", "cluster-secret", "no-quic", NULL /* must be last */ }; @@ -111,6 +111,12 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) goto out; global.tune.options &= ~GTUNE_USE_POLL; } + else if (strcmp(args[0], "no-quic") == 0) { + if (alertif_too_many_args(0, file, linenum, args, &err_code)) + goto out; + + global.tune.options |= GTUNE_NO_QUIC; + } else if (strcmp(args[0], "busy-polling") == 0) { /* "no busy-polling" or "busy-polling" */ if (alertif_too_many_args(0, file, linenum, args, &err_code)) goto out; diff --git a/src/protocol.c b/src/protocol.c index 03f7085913..cafaa72e70 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -15,8 +15,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -75,6 +77,11 @@ int protocol_bind_all(int verbose) HA_SPIN_LOCK(PROTO_LOCK, &proto_lock); list_for_each_entry(proto, &protocols, list) { list_for_each_entry(receiver, &proto->receivers, proto_list) { +#ifdef USE_QUIC + if ((global.tune.options & GTUNE_NO_QUIC) && + (proto == &proto_quic4 || proto == &proto_quic6)) + continue; +#endif listener = LIST_ELEM(receiver, struct listener *, rx); lerr = proto->fam->bind(receiver, &errmsg);