diff --git a/include/haproxy/quic_cc-t.h b/include/haproxy/quic_cc-t.h index 39699e450..d6fa46d65 100644 --- a/include/haproxy/quic_cc-t.h +++ b/include/haproxy/quic_cc-t.h @@ -120,6 +120,7 @@ struct quic_cc_algo { void (*event)(struct quic_cc *cc, struct quic_cc_event *ev); void (*slow_start)(struct quic_cc *cc); void (*state_trace)(struct buffer *buf, const struct quic_cc *cc); + void (*state_cli)(struct buffer *buf, const struct quic_cc_path *path); void (*hystart_start_round)(struct quic_cc *cc, uint64_t pn); }; diff --git a/src/quic_cc_cubic.c b/src/quic_cc_cubic.c index fc21aa0f5..245917d8c 100644 --- a/src/quic_cc_cubic.c +++ b/src/quic_cc_cubic.c @@ -643,6 +643,15 @@ static void quic_cc_cubic_state_trace(struct buffer *buf, const struct quic_cc * TICKS_TO_MS(tick_remain(c->recovery_start_time, now_ms))); } +static void quic_cc_cubic_state_cli(struct buffer *buf, const struct quic_cc_path *path) +{ + struct cubic *c = quic_cc_priv(&path->cc); + + chunk_appendf(buf, " cc: state=%s ssthresh=%u K=%u last_w_max=%u wdiff=%ld\n", + quic_cc_state_str(c->state), c->ssthresh, c->K, c->last_w_max, + (int64_t)(path->cwnd - c->last_w_max)); +} + struct quic_cc_algo quic_cc_algo_cubic = { .type = QUIC_CC_ALGO_TP_CUBIC, .init = quic_cc_cubic_init, @@ -650,6 +659,7 @@ struct quic_cc_algo quic_cc_algo_cubic = { .slow_start = quic_cc_cubic_slow_start, .hystart_start_round = quic_cc_cubic_hystart_start_round, .state_trace = quic_cc_cubic_state_trace, + .state_cli = quic_cc_cubic_state_cli, }; void quic_cc_cubic_check(void) diff --git a/src/quic_cli.c b/src/quic_cli.c index 6e9ee0c26..d5eda2e6a 100644 --- a/src/quic_cli.c +++ b/src/quic_cli.c @@ -300,6 +300,9 @@ static void dump_quic_full(struct show_quic_ctx *ctx, struct quic_conn *qc) } if (ctx->fields & QUIC_DUMP_FLD_CC) { + if (qc->path->cc.algo->state_cli) + qc->path->cc.algo->state_cli(&trash, qc->path); + chunk_appendf(&trash, " srtt=%-4u rttvar=%-4u rttmin=%-4u ptoc=%-4u\n" " cwnd=%-6llu mcwnd=%-6llu\n" " sentbytes=%-12llu sentbytesgso=%-12llu sentpkts=%-6llu\n"