diff --git a/doc/management.txt b/doc/management.txt index bf7ba8c4b..2678fdf65 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 a7712800b..631f2f2e8 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)