From: Amaury Denoyelle Date: Wed, 1 Feb 2023 16:31:02 +0000 (+0100) Subject: MINOR: quic: filter closing conn on "show quic" X-Git-Tag: v2.8-dev4~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f9758ecab053300d84d4bea1be52bbdb8c7ef09;p=thirdparty%2Fhaproxy.git MINOR: quic: filter closing conn on "show quic" Reduce default "show quic" output by masking connection on closing/draing state due to a CONNECTION_CLOSE emission/reception. These connections can still be displayed using the special argument "all". This should be backported up to 2.7. --- diff --git a/doc/management.txt b/doc/management.txt index bf7ba8c4b6..2678fdf652 100644 --- a/doc/management.txt +++ b/doc/management.txt @@ -2966,10 +2966,11 @@ show resolvers [] too_big: too big response outdated: number of response arrived too late (after an other name server) -show quic +show quic [all] Dump information on all active QUIC frontend connections. This command is restricted and can only be issued on sockets configured for levels "operator" - or "admin". + or "admin". By default, connections on closing or draining state are not + displayed. Use the extra argument "all" to include them in the output. show servers conn [] Dump the current and idle connections state of the servers belonging to the diff --git a/src/quic_conn.c b/src/quic_conn.c index a7712800b0..631f2f2e86 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -7624,8 +7624,11 @@ struct show_quic_ctx { unsigned int epoch; struct bref bref; /* back-reference to the quic-conn being dumped */ unsigned int thr; + int flags; }; +#define QC_CLI_FL_SHOW_ALL 0x1 /* show closing/draining connections */ + static int cli_parse_show_quic(char **args, char *payload, struct appctx *appctx, void *private) { struct show_quic_ctx *ctx = applet_reserve_svcctx(appctx, sizeof(*ctx)); @@ -7633,8 +7636,12 @@ static int cli_parse_show_quic(char **args, char *payload, struct appctx *appctx if (!cli_has_level(appctx, ACCESS_LVL_OPER)) return 1; + if (*args[2] && strcmp(args[2], "all") == 0) + ctx->flags |= QC_CLI_FL_SHOW_ALL; + ctx->epoch = _HA_ATOMIC_FETCH_ADD(&qc_epoch, 1); ctx->thr = 0; + ctx->flags = 0; LIST_INIT(&ctx->bref.users); @@ -7699,6 +7706,12 @@ static int cli_io_handler_dump_quic(struct appctx *appctx) continue; } + if (!ctx->flags & QC_CLI_FL_SHOW_ALL && + qc->flags & (QUIC_FL_CONN_CLOSING|QUIC_FL_CONN_DRAINING)) { + ctx->bref.ref = qc->el_th_ctx.n; + continue; + } + /* CIDs */ chunk_appendf(&trash, "* %p[%02u]: scid=", qc, qc->tid); for (cid_len = 0; cid_len < qc->scid.len; ++cid_len)