diff --git a/doc/configuration.txt b/doc/configuration.txt index 7ee08acc3..9bd262721 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 dec16a21a..9b567974a 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 6cc4afe13..3f4c877e9 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 03f708591..cafaa72e7 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);