Skip to content

Commit 7951146

Browse files
committed
MINOR: quic: register QMux transport parameter as an extra frame
Use the newly introduced infrastructure for extra QUIC frames definition for QMux usage. This only concerns the frame used for transport parameters exchange. This allows to remove specific code in qf_parser()/qf_builder() helper functions.
1 parent d681775 commit 7951146

3 files changed

Lines changed: 19 additions & 23 deletions

File tree

include/haproxy/quic_frame-t.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,6 @@ enum quic_frame_type {
8181
QUIC_FT_MAX
8282
};
8383

84-
/* Extra frame types larger than QUIC_FT_MAX should be declared here.
85-
* For every new value, an associated builder and parser instances should be
86-
* defined in quic_frame.c. Do not forget to complete the associated function
87-
* quic_frame_type_is_known() and both qf_builder()/qf_parser().
88-
*/
89-
extern const uint64_t QUIC_FT_QX_TRANSPORT_PARAMETERS;
90-
9184
#define QUIC_FT_PKT_TYPE_I_BITMASK (1 << QUIC_PACKET_TYPE_INITIAL)
9285
#define QUIC_FT_PKT_TYPE_0_BITMASK (1 << QUIC_PACKET_TYPE_0RTT)
9386
#define QUIC_FT_PKT_TYPE_H_BITMASK (1 << QUIC_PACKET_TYPE_HANDSHAKE)

include/haproxy/quic_frame.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
#define QF_PROTO_QUIC 0x01
3636
#define QF_PROTO_QMUX 0x02
3737

38+
/* quic-on-streams transport parameters frame. */
39+
#define QUIC_FT_QX_TRANSPORT_PARAMETERS 0x3f5153300d0a0d0a
40+
3841
const char *quic_frame_type_string(enum quic_frame_type ft);
3942

4043
void quic_register_extra_frame(uint64_t type,

src/quic_frame.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,17 +1155,16 @@ const struct quic_frame_parser quic_frame_parsers[] = {
11551155
[QUIC_FT_HANDSHAKE_DONE] = { .func = quic_parse_handshake_done_frame, .proto = QF_PROTO_QUIC, .flags = QUIC_FL_RX_PACKET_ACK_ELICITING, .mask = QUIC_FT_PKT_TYPE____1_BITMASK, },
11561156
};
11571157

1158-
/* quic-on-streams transport parameters frame. */
1159-
const uint64_t QUIC_FT_QX_TRANSPORT_PARAMETERS = 0x3f5153300d0a0d0a;
1160-
const struct quic_frame_parser qf_parser_qx_transport_parameters = {
1161-
.func = quic_parse_qmux_transport_parameters,
1162-
.proto = QF_PROTO_QMUX,
1158+
static const struct quic_frame_builder qf_builder_qx_transport_parameters = {
1159+
.func = quic_build_qmux_transport_parameters,
11631160
.mask = 0,
11641161
.flags = 0,
11651162
};
1166-
const struct quic_frame_builder qf_builder_qx_transport_parameters = {
1167-
.func = quic_build_qmux_transport_parameters,
1168-
.mask = 0,
1163+
1164+
static const struct quic_frame_parser qf_parser_qx_transport_parameters = {
1165+
.func = quic_parse_qmux_transport_parameters,
1166+
.proto = QF_PROTO_QMUX,
1167+
.mask = 0,
11691168
.flags = 0,
11701169
};
11711170

@@ -1181,17 +1180,22 @@ void quic_register_extra_frame(uint64_t type,
11811180
LIST_APPEND(&quic_extra_frame_handlers.list, &handler->list);
11821181
}
11831182

1183+
static struct quic_extra_frame_handler qf_handler_qx_transport_parameters = {
1184+
.builder = qf_builder_qx_transport_parameters,
1185+
.parser = qf_parser_qx_transport_parameters,
1186+
};
1187+
1188+
INITCALL2(STG_REGISTER, quic_register_extra_frame,
1189+
QUIC_FT_QX_TRANSPORT_PARAMETERS,
1190+
&qf_handler_qx_transport_parameters);
1191+
11841192
static const struct quic_frame_parser *qf_parser(uint64_t type)
11851193
{
11861194
const struct quic_extra_frame_handler *frm_handler;
11871195

11881196
if (type < QUIC_FT_MAX)
11891197
return &quic_frame_parsers[type];
11901198

1191-
/* Complete here for extra frame types greater than QUIC_FT_MAX. */
1192-
if (type == QUIC_FT_QX_TRANSPORT_PARAMETERS)
1193-
return &qf_parser_qx_transport_parameters;
1194-
11951199
list_for_each_entry(frm_handler, &quic_extra_frame_handlers.list, list) {
11961200
if (frm_handler->type == type)
11971201
return &frm_handler->parser;
@@ -1226,10 +1230,6 @@ const struct quic_frame_builder *qf_builder(uint64_t type)
12261230
if (type < QUIC_FT_MAX)
12271231
return &quic_frame_builders[type];
12281232

1229-
/* Complete here for extra frame types greater than QUIC_FT_MAX. */
1230-
if (type == QUIC_FT_QX_TRANSPORT_PARAMETERS)
1231-
return &qf_builder_qx_transport_parameters;
1232-
12331233
list_for_each_entry(frm_handler, &quic_extra_frame_handlers.list, list) {
12341234
if (frm_handler->type == type)
12351235
return &frm_handler->builder;

0 commit comments

Comments
 (0)