Skip to content

Commit 613e023

Browse files
matfabia-ciscoflorincoras
authored andcommitted
quic: stream reset improvement
- quic_quicly_on_receive_reset send reset notification to app - handle app reset - implement quic_quicly_on_stop_sending - use attribute api to set/get app proto error code - reset stream only when app asked Type: improvement Change-Id: I82d165e5c9541406336ac9a2a33f64da28266f9b Signed-off-by: Matus Fabian <matfabia@cisco.com>
1 parent 73c87eb commit 613e023

File tree

14 files changed

+478
-114
lines changed

14 files changed

+478
-114
lines changed

src/plugins/hs_apps/hs_test.h

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,19 @@ typedef enum
4747
HS_TEST_TYPE_EXIT_CLIENT,
4848
} hs_test_t;
4949

50+
typedef enum
51+
{
52+
HS_TEST_PARAM_NONE,
53+
HS_TEST_PARAM_SERVER_RST_STREAM,
54+
HS_TEST_PARAM_CLIENT_RST_STREAM,
55+
} hs_test_param_t;
56+
5057
typedef struct __attribute__ ((packed))
5158
{
5259
uint32_t magic;
5360
uint32_t seq_num;
5461
uint32_t test;
62+
uint32_t test_param;
5563
uint32_t cmd;
5664
uint32_t ctrl_handle;
5765
uint32_t num_test_sessions;
@@ -87,6 +95,28 @@ hs_test_type_str (hs_test_t t)
8795
case HS_TEST_TYPE_EXIT:
8896
return "EXIT";
8997

98+
case HS_TEST_TYPE_EXIT_CLIENT:
99+
return "EXIT-CLIENT";
100+
101+
default:
102+
return "Unknown";
103+
}
104+
}
105+
106+
static inline char *
107+
hs_test_param_str (hs_test_param_t p)
108+
{
109+
switch (p)
110+
{
111+
case HS_TEST_PARAM_NONE:
112+
return "NONE";
113+
114+
case HS_TEST_PARAM_SERVER_RST_STREAM:
115+
return "SERVER-RST-STREAM";
116+
117+
case HS_TEST_PARAM_CLIENT_RST_STREAM:
118+
return "CLIENT-RST-STREAM";
119+
90120
default:
91121
return "Unknown";
92122
}
@@ -147,6 +177,7 @@ hs_test_cfg_dump (hs_test_cfg_t *cfg, uint8_t is_client)
147177
" seq_num: 0x%08x\n"
148178
" test bytes: %s\n"
149179
"%-5s test: %s (%d)\n"
180+
" additional parameter: %s (%d)\n"
150181
" ctrl handle: %d (0x%x)\n"
151182
"%-5s num test sockets: %u (0x%08x)\n"
152183
"%-5s verbose: %s (%d)\n"
@@ -157,12 +188,13 @@ hs_test_cfg_dump (hs_test_cfg_t *cfg, uint8_t is_client)
157188
(void *) cfg, hs_test_cmd_to_str (cfg->cmd), cfg->magic,
158189
cfg->seq_num, cfg->test_bytes ? "yes" : "no",
159190
is_client && (cfg->test == HS_TEST_TYPE_UNI) ?
160-
"'" HS_TEST_TOKEN_RUN_UNI "'" :
191+
"'" HS_TEST_TOKEN_RUN_UNI "'" :
161192
is_client && (cfg->test == HS_TEST_TYPE_BI) ?
162-
"'" HS_TEST_TOKEN_RUN_BI "'" :
163-
spc,
164-
hs_test_type_str (cfg->test), cfg->test, cfg->ctrl_handle,
165-
cfg->ctrl_handle,
193+
"'" HS_TEST_TOKEN_RUN_BI "'" :
194+
spc,
195+
hs_test_type_str (cfg->test), cfg->test,
196+
hs_test_param_str (cfg->test_param), cfg->test_param,
197+
cfg->ctrl_handle, cfg->ctrl_handle,
166198
is_client ? "'" VCL_TEST_TOKEN_NUM_TEST_SESS "'" : spc,
167199
cfg->num_test_sessions, cfg->num_test_sessions,
168200
is_client ? "'" VCL_TEST_TOKEN_VERBOSE "'" : spc,

src/plugins/hs_apps/vcl/vcl_test.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ typedef struct
6060
uint64_t tx_bytes;
6161
uint32_t tx_eagain;
6262
uint32_t tx_incomp;
63+
uint32_t reset_count; /* received reset from vpp */
6364
struct timespec start;
6465
struct timespec stop;
6566
} vcl_test_stats_t;
@@ -150,6 +151,7 @@ vcl_test_stats_accumulate (vcl_test_stats_t * accum, vcl_test_stats_t * incr)
150151
accum->tx_bytes += incr->tx_bytes;
151152
accum->tx_eagain += incr->tx_eagain;
152153
accum->tx_incomp += incr->tx_incomp;
154+
accum->reset_count += incr->reset_count;
153155
}
154156

155157
static inline void
@@ -246,6 +248,7 @@ vcl_test_stats_dump (char *header, vcl_test_stats_t * stats,
246248
stats->rx_bytes, stats->rx_bytes, stats->rx_eagain,
247249
stats->rx_eagain, stats->rx_incomp, stats->rx_incomp);
248250
}
251+
printf (" reset count: %u\n", stats->reset_count);
249252
if (verbose)
250253
printf (" start.tv_sec: %ld\n"
251254
" start.tv_nsec: %ld\n"
@@ -328,6 +331,7 @@ static inline int
328331
vcl_test_reset_nop (vcl_test_session_t *ts)
329332
{
330333
/* just signal that this was not expected (error) */
334+
ts->stats.reset_count = 1;
331335
return 1;
332336
}
333337

src/plugins/hs_apps/vcl/vcl_test_client.c

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -644,13 +644,13 @@ vtc_worker_run_epoll (vcl_test_client_worker_t *wrk)
644644
}
645645

646646
rv = ts->write (ts, ts->txbuf, ts->cfg.txbuf_size);
647+
if (ts->done (ts, check_rx))
648+
n_active_sessions -= 1;
647649
next = ts->next;
648650
if (rv > 0)
649651
{
650652
if (vcm->incremental_stats)
651653
vtc_worker_inc_stats_check (wrk, ts);
652-
if (ts->done (ts, check_rx))
653-
n_active_sessions -= 1;
654654
}
655655
else if (rv == 0)
656656
{
@@ -1036,33 +1036,45 @@ parse_input ()
10361036
return rv;
10371037
}
10381038

1039+
static int
1040+
vtc_unformat_test_param (uint32_t *test_param, char *test_param_str)
1041+
{
1042+
if (!strcmp (test_param_str, "server-rst-stream"))
1043+
*test_param = HS_TEST_PARAM_SERVER_RST_STREAM;
1044+
else if (!strcmp (test_param_str, "client-rst-stream"))
1045+
*test_param = HS_TEST_PARAM_CLIENT_RST_STREAM;
1046+
else
1047+
return 1;
1048+
return 0;
1049+
}
1050+
10391051
void
10401052
print_usage_and_exit (void)
10411053
{
1042-
fprintf (
1043-
stderr,
1044-
"vcl_test_client [OPTIONS] <ipaddr> <port>\n"
1045-
" OPTIONS\n"
1046-
" -h Print this message and exit.\n"
1047-
" -6 Use IPv6\n"
1048-
" -c Print test config before test.\n"
1049-
" -w <dir> Write test results to <dir>.\n"
1050-
" -X Exit after running test.\n"
1051-
" -p <proto> Use <proto> transport layer\n"
1052-
" -D Use UDP transport layer\n"
1053-
" -L Use TLS transport layer\n"
1054-
" -E Run Echo test.\n"
1055-
" -N <num-writes> Test Cfg: number of writes.\n"
1056-
" -R <rxbuf-size> Test Cfg: rx buffer size.\n"
1057-
" -T <txbuf-size> Test Cfg: tx buffer size.\n"
1058-
" -U Run Uni-directional test.\n"
1059-
" -B Run Bi-directional test.\n"
1060-
" -b <bytes> Total number of bytes transferred\n"
1061-
" -V Verbose mode.\n"
1062-
" -I <N> Use N sessions.\n"
1063-
" -s <N> Use N sessions.\n"
1064-
" -S Print incremental stats per session.\n"
1065-
" -q <n> QUIC : use N Ssessions on top of n Qsessions\n");
1054+
fprintf (stderr,
1055+
"vcl_test_client [OPTIONS] <ipaddr> <port>\n"
1056+
" OPTIONS\n"
1057+
" -h Print this message and exit.\n"
1058+
" -6 Use IPv6\n"
1059+
" -c Print test config before test.\n"
1060+
" -w <dir> Write test results to <dir>.\n"
1061+
" -X Exit after running test.\n"
1062+
" -p <proto> Use <proto> transport layer\n"
1063+
" -D Use UDP transport layer\n"
1064+
" -L Use TLS transport layer\n"
1065+
" -E Run Echo test.\n"
1066+
" -N <num-writes> Test Cfg: number of writes.\n"
1067+
" -R <rxbuf-size> Test Cfg: rx buffer size.\n"
1068+
" -T <txbuf-size> Test Cfg: tx buffer size.\n"
1069+
" -U Run Uni-directional test.\n"
1070+
" -B Run Bi-directional test.\n"
1071+
" -b <bytes> Total number of bytes transferred\n"
1072+
" -V Verbose mode.\n"
1073+
" -I <N> Use N sessions.\n"
1074+
" -s <N> Use N sessions.\n"
1075+
" -S Print incremental stats per session.\n"
1076+
" -q <n> QUIC : use N Ssessions on top of n Qsessions\n"
1077+
" -t <test-param> QUIC : additional test parameter\n");
10661078
exit (1);
10671079
}
10681080

@@ -1073,7 +1085,7 @@ vtc_process_opts (vcl_test_client_main_t * vcm, int argc, char **argv)
10731085
int c, v;
10741086

10751087
opterr = 0;
1076-
while ((c = getopt (argc, argv, "chnp:w:xXE:I:N:R:T:b:UBV6DLs:q:S")) != -1)
1088+
while ((c = getopt (argc, argv, "chnp:w:xXE:I:N:R:T:b:UBV6DLs:q:St:")) != -1)
10771089
switch (c)
10781090
{
10791091
case 'c':
@@ -1251,6 +1263,14 @@ vtc_process_opts (vcl_test_client_main_t * vcm, int argc, char **argv)
12511263
vcm->incremental_stats = 1;
12521264
break;
12531265

1266+
case 't':
1267+
if (vtc_unformat_test_param (&ctrl->cfg.test_param, optarg))
1268+
{
1269+
vtwrn ("Invalid value for option -%c!", c);
1270+
print_usage_and_exit ();
1271+
}
1272+
break;
1273+
12541274
case '?':
12551275
switch (optopt)
12561276
{
@@ -1262,6 +1282,7 @@ vtc_process_opts (vcl_test_client_main_t * vcm, int argc, char **argv)
12621282
case 'w':
12631283
case 'p':
12641284
case 'q':
1285+
case 't':
12651286
vtwrn ("Option -%c requires an argument.", optopt);
12661287
break;
12671288

0 commit comments

Comments
 (0)