summaryrefslogtreecommitdiffstats
path: root/test/quic_record_test.c
diff options
context:
space:
mode:
authorHugo Landau <hlandau@openssl.org>2023-11-09 11:27:14 +0100
committerHugo Landau <hlandau@openssl.org>2023-12-21 09:12:00 +0100
commit56f98283827ec57c794e849d0bdf3dd90f740805 (patch)
tree68f33ccdffc5278468bf95ef11f0fdccc34819d6 /test/quic_record_test.c
parentQUIC TXP TEST: Remove dependency on legacy DEMUX-QRX routing (diff)
downloadopenssl-56f98283827ec57c794e849d0bdf3dd90f740805.tar.xz
openssl-56f98283827ec57c794e849d0bdf3dd90f740805.zip
QUIC QRL TEST: Remove dependency on legacy DEMUX-QRX routing
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/22674)
Diffstat (limited to 'test/quic_record_test.c')
-rw-r--r--test/quic_record_test.c50
1 files changed, 32 insertions, 18 deletions
diff --git a/test/quic_record_test.c b/test/quic_record_test.c
index 5966b93730..3c6eb19f82 100644
--- a/test/quic_record_test.c
+++ b/test/quic_record_test.c
@@ -21,7 +21,7 @@ static const QUIC_CONN_ID empty_conn_id = {0, {0}};
#define RX_TEST_OP_END 0 /* end of script */
#define RX_TEST_OP_SET_SCID_LEN 1 /* change SCID length */
#define RX_TEST_OP_SET_INIT_LARGEST_PN 2 /* set initial largest PN */
-#define RX_TEST_OP_ADD_RX_DCID 3 /* register an RX DCID */
+#define RX_TEST_OP_SET_RX_DCID 3 /* register an RX DCID */
#define RX_TEST_OP_INJECT 4 /* inject a datagram into demux */
#define RX_TEST_OP_PROVIDE_SECRET 5 /* provide RX secret */
#define RX_TEST_OP_PROVIDE_SECRET_INITIAL 6 /* provide RX secret for initial */
@@ -54,8 +54,8 @@ struct rx_test_op {
{ RX_TEST_OP_SET_SCID_LEN, 0, NULL, 0, NULL, (scid_len), 0, 0, NULL, NULL },
#define RX_OP_SET_INIT_LARGEST_PN(largest_pn) \
{ RX_TEST_OP_SET_INIT_LARGEST_PN, 0, NULL, 0, NULL, 0, 0, (largest_pn), NULL, NULL },
-#define RX_OP_ADD_RX_DCID(dcid) \
- { RX_TEST_OP_ADD_RX_DCID, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
+#define RX_OP_SET_RX_DCID(dcid) \
+ { RX_TEST_OP_SET_RX_DCID, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
#define RX_OP_INJECT(dgram) \
{ RX_TEST_OP_INJECT, 0, (dgram), sizeof(dgram), NULL, 0, 0, 0, NULL },
#define RX_OP_PROVIDE_SECRET(el, suite, key) \
@@ -138,7 +138,7 @@ static const QUIC_PKT_HDR rx_script_1_expect_hdr = {
static const struct rx_test_op rx_script_1[] = {
RX_OP_SET_SCID_LEN(2)
RX_OP_SET_INIT_LARGEST_PN(0)
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_1_dcid)
RX_OP_INJECT_CHECK(1)
RX_OP_CHECK_NO_PKT()
@@ -173,7 +173,7 @@ static const QUIC_PKT_HDR rx_script_2_expect_hdr = {
static const struct rx_test_op rx_script_2[] = {
RX_OP_ALLOW_1RTT()
RX_OP_SET_INIT_LARGEST_PN(654360560)
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305,
rx_script_2_secret)
RX_OP_INJECT_CHECK(2)
@@ -218,7 +218,7 @@ static const unsigned char rx_script_3_body[] = {
};
static const struct rx_test_op rx_script_3[] = {
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
/*
* This is a version negotiation packet, so doesn't have any frames.
* However, the depacketizer still handles this sort of packet, so
@@ -279,7 +279,7 @@ static const unsigned char rx_script_4_body[] = {
};
static const struct rx_test_op rx_script_4[] = {
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_INJECT_CHECK(4)
RX_OP_CHECK_NO_PKT()
RX_OP_END
@@ -592,7 +592,7 @@ static const unsigned char rx_script_5c_body[] = {
static const struct rx_test_op rx_script_5[] = {
RX_OP_ALLOW_1RTT()
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
RX_OP_INJECT_N(5)
RX_OP_CHECK_PKT_N(5a)
@@ -629,7 +629,7 @@ static const struct rx_test_op rx_script_5[] = {
/* Recreate QRL, test reading packets received before key */
RX_OP_SET_SCID_LEN(0)
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_INJECT_N(5)
RX_OP_CHECK_NO_PKT()
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
@@ -961,7 +961,7 @@ static const unsigned char rx_script_6c_body[] = {
static const struct rx_test_op rx_script_6[] = {
RX_OP_ALLOW_1RTT()
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
RX_OP_INJECT_N(6)
RX_OP_CHECK_PKT_N(6a)
@@ -998,7 +998,7 @@ static const struct rx_test_op rx_script_6[] = {
/* Recreate QRL, test reading packets received before key */
RX_OP_SET_SCID_LEN(0)
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_INJECT_N(6)
RX_OP_CHECK_NO_PKT()
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
@@ -1324,7 +1324,7 @@ static const unsigned char rx_script_7c_body[] = {
static const struct rx_test_op rx_script_7[] = {
RX_OP_ALLOW_1RTT()
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
RX_OP_INJECT_N(7)
RX_OP_CHECK_PKT_N(7a)
@@ -1361,7 +1361,7 @@ static const struct rx_test_op rx_script_7[] = {
/* Recreate QRL, test reading packets received before key */
RX_OP_SET_SCID_LEN(0)
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_INJECT_N(7)
RX_OP_CHECK_NO_PKT()
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
@@ -1583,7 +1583,7 @@ static const unsigned char rx_script_8f_body[] = {
static const struct rx_test_op rx_script_8[] = {
RX_OP_ALLOW_1RTT()
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
/* Inject before we get the keys */
RX_OP_INJECT_N(8a)
/* Nothing yet */
@@ -1676,7 +1676,7 @@ static const struct rx_test_op rx_script_8[] = {
/* 9. 1-RTT Deferral Test */
static const struct rx_test_op rx_script_9[] = {
- RX_OP_ADD_RX_DCID(empty_conn_id)
+ RX_OP_SET_RX_DCID(empty_conn_id)
RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
RX_OP_INJECT_N(5)
@@ -1723,6 +1723,8 @@ struct rx_state {
SSL_CTX *quic_ssl_ctx;
QUIC_CONNECTION *quic_conn;
+ QUIC_CONN_ID rx_dcid;
+
int allow_1rtt;
};
@@ -1760,6 +1762,17 @@ static OSSL_TIME fake_time(void *arg)
return expected_time(++time_counter);
}
+static void demux_default_handler(QUIC_URXE *e, void *arg,
+ const QUIC_CONN_ID *dcid)
+{
+ struct rx_state *s = arg;
+
+ if (dcid == NULL || !ossl_quic_conn_id_eq(dcid, &s->rx_dcid))
+ return;
+
+ ossl_qrx_inject_urxe(s->qrx, e);
+}
+
static int rx_state_ensure(struct rx_state *s)
{
if (s->demux == NULL
@@ -1777,6 +1790,8 @@ static int rx_state_ensure(struct rx_state *s)
&& !TEST_ptr(s->qrx = ossl_qrx_new(&s->args)))
return 0;
+ ossl_quic_demux_set_default_handler(s->demux, demux_default_handler, s);
+
if (s->allow_1rtt)
ossl_qrx_allow_1rtt_processing(s->qrx);
@@ -1803,11 +1818,10 @@ static int rx_run_script(const struct rx_test_op *script)
for (i = 0; i < QUIC_PN_SPACE_NUM; ++i)
s.args.init_largest_pn[i] = op->largest_pn;
break;
- case RX_TEST_OP_ADD_RX_DCID:
+ case RX_TEST_OP_SET_RX_DCID:
if (!TEST_true(rx_state_ensure(&s)))
goto err;
- if (!TEST_true(ossl_qrx_add_dst_conn_id(s.qrx, op->dcid)))
- goto err;
+ s.rx_dcid = *op->dcid;
break;
case RX_TEST_OP_PROVIDE_SECRET:
if (!TEST_true(rx_state_ensure(&s)))