Skip to content

Commit aef8693

Browse files
committed
WIP: quic: implement BBR congestion control algo for QUIC
1 parent b4ecb1c commit aef8693

File tree

4 files changed

+1537
-2
lines changed

4 files changed

+1537
-2
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,8 @@ OPTIONS_OBJS += src/quic_rx.o src/mux_quic.o src/h3.o src/quic_tx.o \
652652
src/cfgparse-quic.o src/qmux_trace.o src/qpack-enc.o \
653653
src/qpack-tbl.o src/h3_stats.o src/quic_stats.o \
654654
src/quic_fctl.o src/cbuf.o src/quic_rules.o \
655-
src/quic_token.o src/quic_pacing.o src/quic_cc_drs.o
655+
src/quic_token.o src/quic_pacing.o src/quic_cc_drs.o \
656+
src/quic_cc_bbr.o
656657
endif
657658
658659
ifneq ($(USE_QUIC_OPENSSL_COMPAT:0=),)

include/haproxy/quic_cc-t.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
extern struct quic_cc_algo quic_cc_algo_nr;
3838
extern struct quic_cc_algo quic_cc_algo_cubic;
39+
extern struct quic_cc_algo quic_cc_algo_bbr;
3940
extern struct quic_cc_algo *default_quic_cc_algo;
4041

4142
/* Fake algorithm with its fixed window */
@@ -81,14 +82,15 @@ struct quic_cc_event {
8182
enum quic_cc_algo_type {
8283
QUIC_CC_ALGO_TP_NEWRENO,
8384
QUIC_CC_ALGO_TP_CUBIC,
85+
QUIC_CC_ALGO_TP_BBR,
8486
QUIC_CC_ALGO_TP_NOCC,
8587
};
8688

8789
struct quic_cc {
8890
/* <conn> is there only for debugging purpose. */
8991
struct quic_conn *qc;
9092
struct quic_cc_algo *algo;
91-
uint32_t priv[20];
93+
uint32_t priv[116];
9294
};
9395

9496
struct quic_cc_path {
@@ -116,6 +118,7 @@ struct quic_cc_path {
116118
/* Number of in flight ack-eliciting packets. */
117119
uint64_t ifae_pkts;
118120
uint64_t delivery_rate; /* bytes per second */
121+
size_t send_quantum;
119122
};
120123

121124
struct quic_cc_algo {

include/haproxy/quic_cc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ static inline void quic_cc_path_init(struct quic_cc_path *path, int ipv4, unsign
9595
path->ifae_pkts = 0;
9696
quic_cc_init(&path->cc, algo, qc);
9797
path->delivery_rate = 0;
98+
path->send_quantum = path->mtu * 10;
9899
}
99100

100101
/* Return the remaining <room> available on <path> QUIC path for prepared data

0 commit comments

Comments
 (0)