diff options
author | Nathan Skrzypczak <nathan.skrzypczak@gmail.com> | 2020-09-28 10:13:19 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2020-09-28 14:54:42 +0000 |
commit | 2c714a0cec9de07816a5397a4a6d69a103378731 (patch) | |
tree | 0c7cfb7f837156cddbbd93cdcf472a306b59862d | |
parent | 1017a1d360cc1c38e2aee4b5f19ff1f2869a8cd9 (diff) |
quic: Fix protip #47 / unformat (input_line)
Type: fix
Change-Id: Id03f50c46d28c850865cc76692424d063a0c2cfb
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
-rw-r--r-- | src/plugins/quic/quic.c | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/src/plugins/quic/quic.c b/src/plugins/quic/quic.c index daa7813c12a..87a61cc22ab 100644 --- a/src/plugins/quic/quic.c +++ b/src/plugins/quic/quic.c @@ -2546,18 +2546,29 @@ quic_plugin_crypto_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { + unformat_input_t _line_input, *line_input = &_line_input; quic_main_t *qm = &quic_main; - if (unformat_check_input (input) == UNFORMAT_END_OF_INPUT) - return clib_error_return (0, "unknown input '%U'", - format_unformat_error, input); - if (unformat (input, "vpp")) - qm->default_crypto_engine = CRYPTO_ENGINE_VPP; - else if (unformat (input, "picotls")) - qm->default_crypto_engine = CRYPTO_ENGINE_PICOTLS; - else - return clib_error_return (0, "unknown input '%U'", - format_unformat_error, input); - return 0; + clib_error_t *e = 0; + + if (!unformat_user (input, unformat_line_input, line_input)) + return 0; + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (line_input, "vpp")) + qm->default_crypto_engine = CRYPTO_ENGINE_VPP; + else if (unformat (line_input, "picotls")) + qm->default_crypto_engine = CRYPTO_ENGINE_PICOTLS; + else + { + e = clib_error_return (0, "unknown input '%U'", + format_unformat_error, line_input); + goto done; + } + } +done: + unformat_free (line_input); + return e; } u64 quic_fifosize = 0; @@ -2870,22 +2881,29 @@ VLIB_PLUGIN_REGISTER () = static clib_error_t * quic_config_fn (vlib_main_t * vm, unformat_input_t * input) { + unformat_input_t _line_input, *line_input = &_line_input; quic_main_t *qm = &quic_main; + clib_error_t *error = 0; uword tmp; u32 i; qm->udp_fifo_size = QUIC_DEFAULT_FIFO_SIZE; qm->udp_fifo_prealloc = 0; qm->connection_timeout = QUIC_DEFAULT_CONN_TIMEOUT; - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + + if (!unformat_user (input, unformat_line_input, line_input)) + return 0; + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "fifo-size %U", unformat_memory_size, &tmp)) { if (tmp >= 0x100000000ULL) { - return clib_error_return (0, - "fifo-size %llu (0x%llx) too large", - tmp, tmp); + error = clib_error_return (0, + "fifo-size %llu (0x%llx) too large", + tmp, tmp); + goto done; } qm->udp_fifo_size = tmp; } @@ -2894,11 +2912,15 @@ quic_config_fn (vlib_main_t * vm, unformat_input_t * input) else if (unformat (input, "fifo-prealloc %u", &i)) qm->udp_fifo_prealloc = i; else - return clib_error_return (0, "unknown input '%U'", - format_unformat_error, input); + { + error = clib_error_return (0, "unknown input '%U'", + format_unformat_error, line_input); + goto done; + } } - - return 0; +done: + unformat_free (line_input); + return error; } VLIB_EARLY_CONFIG_FUNCTION (quic_config_fn, "quic"); |