From 1a9e2f96d48e346311bbc584510a14e3f721b41c Mon Sep 17 00:00:00 2001 From: Nathan Skrzypczak Date: Wed, 28 Jul 2021 19:35:08 +0200 Subject: 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 --- src/vnet/session/session_lookup.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/vnet/session/session_lookup.c') 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* */ -- cgit 1.2.3-korg