diff --git a/include/haproxy/quic_conn-t.h b/include/haproxy/quic_conn-t.h index 8bfd61898..75bd2d50a 100644 --- a/include/haproxy/quic_conn-t.h +++ b/include/haproxy/quic_conn-t.h @@ -395,7 +395,11 @@ struct quic_dgram { struct quic_rx_packet { struct list list; struct list qc_rx_pkt_list; + + /* QUIC version used in packet. */ + const struct quic_version *version; struct quic_conn *qc; + unsigned char type; /* Initial desctination connection ID. */ struct quic_cid dcid; diff --git a/src/quic_conn.c b/src/quic_conn.c index 44c944c01..dcf5eea5f 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -6032,6 +6032,7 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end, TRACE_PROTO("VN packet sent", QUIC_EV_CONN_LPKT); goto err; } + pkt->version = qv; /* For Initial packets, and for servers (QUIC clients connections), * there is no Initial connection IDs storage. @@ -7167,12 +7168,16 @@ struct task *quic_lstnr_dghdlr(struct task *t, void *ctx, unsigned int state) do { struct quic_rx_packet *pkt; + /* TODO replace zalloc -> alloc. */ pkt = pool_zalloc(pool_head_quic_rx_packet); if (!pkt) { TRACE_ERROR("RX packet allocation failed", QUIC_EV_CONN_LPKT); + /* TODO count lost datagram. */ goto leave; } + pkt->version = NULL; + LIST_INIT(&pkt->qc_rx_pkt_list); pkt->time_received = now_ms; quic_rx_packet_refinc(pkt);