diff options
author | Nathan Skrzypczak <nathan.skrzypczak@gmail.com> | 2021-07-28 19:35:08 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2021-09-16 14:14:38 +0000 |
commit | 1a9e2f96d48e346311bbc584510a14e3f721b41c (patch) | |
tree | aefbc08b91c0c87d54792d4b32b785a5fe784b31 /src/vnet/session/session_lookup.c | |
parent | 4fd9f10c4535724fd52b05d703fb56a33edc1138 (diff) |
session: Add sock_name option to add_ns
This adds a new API call to add session namespaces
It now takes a netns and a sock_name.
(1) If no netns is passed, sock_name will be used as
socket path. Defaulting to /run/vpp/app_ns_sockets/${ns_id}
(2) If a netns is passed, the sock_name has to be
abstract (i.e. start with '@'). It will default to
`@vpp/session/${ns_id}` and will be created in the provided
netns.
Type: feature
Change-Id: I90e9a8e5ecca2cabe7c05335663e33c8506dc9e7
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
Diffstat (limited to 'src/vnet/session/session_lookup.c')
-rw-r--r-- | src/vnet/session/session_lookup.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/vnet/session/session_lookup.c b/src/vnet/session/session_lookup.c index 6e060cb119d..5cd1712f195 100644 --- a/src/vnet/session/session_lookup.c +++ b/src/vnet/session/session_lookup.c @@ -1452,6 +1452,7 @@ session_rule_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { u32 proto = ~0, lcl_port, rmt_port, action = 0, lcl_plen = 0, rmt_plen = 0; + clib_error_t *error = 0; u32 appns_index, scope = 0; ip46_address_t lcl_ip, rmt_ip; u8 is_ip4 = 1, conn_set = 0; @@ -1501,29 +1502,32 @@ session_rule_command_fn (vlib_main_t * vm, unformat_input_t * input, else if (unformat (input, "tag %_%v%_", &tag)) ; else - return clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); + { + error = clib_error_return (0, "unknown input `%U'", + format_unformat_error, input); + goto done; + } } if (proto == ~0) { vlib_cli_output (vm, "proto must be set"); - return 0; + goto done; } if (is_add && !conn_set && action == ~0) { vlib_cli_output (vm, "connection and action must be set for add"); - return 0; + goto done; } if (!is_add && !tag && !conn_set) { vlib_cli_output (vm, "connection or tag must be set for delete"); - return 0; + goto done; } if (vec_len (tag) > SESSION_RULE_TAG_MAX_LEN) { vlib_cli_output (vm, "tag too long (max u64)"); - return 0; + goto done; } if (ns_id) @@ -1532,7 +1536,7 @@ session_rule_command_fn (vlib_main_t * vm, unformat_input_t * input, if (!app_ns) { vlib_cli_output (vm, "namespace %v does not exist", ns_id); - return 0; + goto done; } } else @@ -1559,10 +1563,12 @@ session_rule_command_fn (vlib_main_t * vm, unformat_input_t * input, .scope = scope, }; if ((rv = vnet_session_rule_add_del (&args))) - return clib_error_return (0, "rule add del returned %u", rv); + error = clib_error_return (0, "rule add del returned %u", rv); +done: + vec_free (ns_id); vec_free (tag); - return 0; + return error; } /* *INDENT-OFF* */ |