summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/ila/ila.c25
-rw-r--r--src/plugins/lb/cli.c99
-rw-r--r--src/plugins/sixrd/sixrd.c42
-rw-r--r--src/plugins/snat/snat.c139
4 files changed, 204 insertions, 101 deletions
diff --git a/src/plugins/ila/ila.c b/src/plugins/ila/ila.c
index e0f3907f5d7..52c7ea5567d 100644
--- a/src/plugins/ila/ila.c
+++ b/src/plugins/ila/ila.c
@@ -949,6 +949,7 @@ ila_entry_command_fn (vlib_main_t * vm,
ila_add_del_entry_args_t args = { 0 };
u8 next_hop_set = 0;
int ret;
+ clib_error_t *error = 0;
args.type = ILA_TYPE_IID;
args.csum_mode = ILA_CSUM_MODE_NO_ACTION;
@@ -986,19 +987,29 @@ ila_entry_command_fn (vlib_main_t * vm,
else if (unformat (line_input, "del"))
args.is_del = 1;
else
- return clib_error_return (0, "parse error: '%U'",
- format_unformat_error, line_input);
+ {
+ error = clib_error_return (0, "parse error: '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
- unformat_free (line_input);
-
if (!next_hop_set)
- return clib_error_return (0, "Specified a next hop");
+ {
+ error = clib_error_return (0, "Specified a next hop");
+ goto done;
+ }
if ((ret = ila_add_del_entry (&args)))
- return clib_error_return (0, "ila_add_del_entry returned error %d", ret);
+ {
+ error = clib_error_return (0, "ila_add_del_entry returned error %d", ret);
+ goto done;
+ }
- return NULL;
+done:
+ unformat_free (line_input);
+
+ return error;
}
VLIB_CLI_COMMAND (ila_entry_command, static) =
diff --git a/src/plugins/lb/cli.c b/src/plugins/lb/cli.c
index b59c6426241..6452a87563e 100644
--- a/src/plugins/lb/cli.c
+++ b/src/plugins/lb/cli.c
@@ -28,13 +28,16 @@ lb_vip_command_fn (vlib_main_t * vm,
int ret;
u32 gre4 = 0;
lb_vip_type_t type;
+ clib_error_t *error = 0;
if (!unformat_user (input, unformat_line_input, line_input))
return 0;
- if (!unformat(line_input, "%U", unformat_ip46_prefix, &prefix, &plen, IP46_TYPE_ANY, &plen))
- return clib_error_return (0, "invalid vip prefix: '%U'",
- format_unformat_error, line_input);
+ if (!unformat(line_input, "%U", unformat_ip46_prefix, &prefix, &plen, IP46_TYPE_ANY, &plen)) {
+ error = clib_error_return (0, "invalid vip prefix: '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
{
@@ -46,13 +49,13 @@ lb_vip_command_fn (vlib_main_t * vm,
gre4 = 1;
else if (unformat(line_input, "encap gre6"))
gre4 = 0;
- else
- return clib_error_return (0, "parse error: '%U'",
- format_unformat_error, line_input);
+ else {
+ error = clib_error_return (0, "parse error: '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
- unformat_free (line_input);
-
if (ip46_prefix_is_ip4(&prefix, plen)) {
type = (gre4)?LB_VIP_TYPE_IP4_GRE4:LB_VIP_TYPE_IP4_GRE6;
@@ -65,17 +68,25 @@ lb_vip_command_fn (vlib_main_t * vm,
u32 index;
if (!del) {
if ((ret = lb_vip_add(&prefix, plen, type, new_len, &index))) {
- return clib_error_return (0, "lb_vip_add error %d", ret);
+ error = clib_error_return (0, "lb_vip_add error %d", ret);
+ goto done;
} else {
vlib_cli_output(vm, "lb_vip_add ok %d", index);
}
} else {
- if ((ret = lb_vip_find_index(&prefix, plen, &index)))
- return clib_error_return (0, "lb_vip_find_index error %d", ret);
- else if ((ret = lb_vip_del(index)))
- return clib_error_return (0, "lb_vip_del error %d", ret);
+ if ((ret = lb_vip_find_index(&prefix, plen, &index))) {
+ error = clib_error_return (0, "lb_vip_find_index error %d", ret);
+ goto done;
+ } else if ((ret = lb_vip_del(index))) {
+ error = clib_error_return (0, "lb_vip_del error %d", ret);
+ goto done;
+ }
}
- return NULL;
+
+done:
+ unformat_free (line_input);
+
+ return error;
}
VLIB_CLI_COMMAND (lb_vip_command, static) =
@@ -96,16 +107,21 @@ lb_as_command_fn (vlib_main_t * vm,
u32 vip_index;
u8 del = 0;
int ret;
+ clib_error_t *error = 0;
if (!unformat_user (input, unformat_line_input, line_input))
return 0;
- if (!unformat(line_input, "%U", unformat_ip46_prefix, &vip_prefix, &vip_plen, IP46_TYPE_ANY))
- return clib_error_return (0, "invalid as address: '%U'",
- format_unformat_error, line_input);
+ if (!unformat(line_input, "%U", unformat_ip46_prefix, &vip_prefix, &vip_plen, IP46_TYPE_ANY)) {
+ error = clib_error_return (0, "invalid as address: '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
- if ((ret = lb_vip_find_index(&vip_prefix, vip_plen, &vip_index)))
- return clib_error_return (0, "lb_vip_find_index error %d", ret);
+ if ((ret = lb_vip_find_index(&vip_prefix, vip_plen, &vip_index))) {
+ error = clib_error_return (0, "lb_vip_find_index error %d", ret);
+ goto done;
+ }
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
{
@@ -114,15 +130,15 @@ lb_as_command_fn (vlib_main_t * vm,
} else if (unformat(line_input, "del")) {
del = 1;
} else {
- vec_free(as_array);
- return clib_error_return (0, "parse error: '%U'",
- format_unformat_error, line_input);
+ error = clib_error_return (0, "parse error: '%U'",
+ format_unformat_error, line_input);
+ goto done;
}
}
if (!vec_len(as_array)) {
- vec_free(as_array);
- return clib_error_return (0, "No AS address provided");
+ error = clib_error_return (0, "No AS address provided");
+ goto done;
}
lb_garbage_collection();
@@ -130,18 +146,21 @@ lb_as_command_fn (vlib_main_t * vm,
if (del) {
if ((ret = lb_vip_del_ass(vip_index, as_array, vec_len(as_array)))) {
- vec_free(as_array);
- return clib_error_return (0, "lb_vip_del_ass error %d", ret);
+ error = clib_error_return (0, "lb_vip_del_ass error %d", ret);
+ goto done;
}
} else {
if ((ret = lb_vip_add_ass(vip_index, as_array, vec_len(as_array)))) {
- vec_free(as_array);
- return clib_error_return (0, "lb_vip_add_ass error %d", ret);
+ error = clib_error_return (0, "lb_vip_add_ass error %d", ret);
+ goto done;
}
}
+done:
+ unformat_free (line_input);
vec_free(as_array);
- return 0;
+
+ return error;
}
VLIB_CLI_COMMAND (lb_as_command, static) =
@@ -163,6 +182,7 @@ lb_conf_command_fn (vlib_main_t * vm,
u32 per_cpu_sticky_buckets_log2 = 0;
u32 flow_timeout = lbm->flow_timeout;
int ret;
+ clib_error_t *error = 0;
if (!unformat_user (input, unformat_line_input, line_input))
return 0;
@@ -181,19 +201,24 @@ lb_conf_command_fn (vlib_main_t * vm,
per_cpu_sticky_buckets = 1 << per_cpu_sticky_buckets_log2;
} else if (unformat(line_input, "timeout %d", &flow_timeout))
;
- else
- return clib_error_return (0, "parse error: '%U'",
- format_unformat_error, line_input);
+ else {
+ error = clib_error_return (0, "parse error: '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
- unformat_free (line_input);
-
lb_garbage_collection();
- if ((ret = lb_conf(&ip4, &ip6, per_cpu_sticky_buckets, flow_timeout)))
- return clib_error_return (0, "lb_conf error %d", ret);
+ if ((ret = lb_conf(&ip4, &ip6, per_cpu_sticky_buckets, flow_timeout))) {
+ error = clib_error_return (0, "lb_conf error %d", ret);
+ goto done;
+ }
- return NULL;
+done:
+ unformat_free (line_input);
+
+ return error;
}
VLIB_CLI_COMMAND (lb_conf_command, static) =
diff --git a/src/plugins/sixrd/sixrd.c b/src/plugins/sixrd/sixrd.c
index 71fc181f2b7..67a9a3ad4d5 100644
--- a/src/plugins/sixrd/sixrd.c
+++ b/src/plugins/sixrd/sixrd.c
@@ -192,6 +192,7 @@ sixrd_add_domain_command_fn (vlib_main_t *vm,
u32 num_m_args = 0;
/* Optional arguments */
u32 mtu = 0;
+ clib_error_t *error = 0;
/* Get a line of input. */
if (!unformat_user(input, unformat_line_input, line_input))
@@ -205,19 +206,25 @@ sixrd_add_domain_command_fn (vlib_main_t *vm,
num_m_args++;
else if (unformat(line_input, "mtu %d", &mtu))
num_m_args++;
- else
- return clib_error_return(0, "unknown input `%U'",
- format_unformat_error, input);
+ else {
+ error = clib_error_return(0, "unknown input `%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
- unformat_free(line_input);
- if (num_m_args < 3)
- return clib_error_return(0, "mandatory argument(s) missing");
+ if (num_m_args < 3) {
+ error = clib_error_return(0, "mandatory argument(s) missing");
+ goto done;
+ }
sixrd_create_domain(&ip6_prefix, ip6_prefix_len, &ip4_prefix, ip4_prefix_len,
&ip4_src, &sixrd_domain_index, mtu);
- return 0;
+done:
+ unformat_free (line_input);
+
+ return error;
}
static clib_error_t *
@@ -228,6 +235,7 @@ sixrd_del_domain_command_fn (vlib_main_t *vm,
unformat_input_t _line_input, *line_input = &_line_input;
u32 num_m_args = 0;
u32 sixrd_domain_index;
+ clib_error_t *error = 0;
/* Get a line of input. */
if (! unformat_user(input, unformat_line_input, line_input))
@@ -236,18 +244,24 @@ sixrd_del_domain_command_fn (vlib_main_t *vm,
while (unformat_check_input(line_input) != UNFORMAT_END_OF_INPUT) {
if (unformat(line_input, "index %d", &sixrd_domain_index))
num_m_args++;
- else
- return clib_error_return(0, "unknown input `%U'",
- format_unformat_error, input);
+ else {
+ error = clib_error_return(0, "unknown input `%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
- unformat_free(line_input);
- if (num_m_args != 1)
- return clib_error_return(0, "mandatory argument(s) missing");
+ if (num_m_args != 1) {
+ error = clib_error_return(0, "mandatory argument(s) missing");
+ goto done;
+ }
sixrd_delete_domain(sixrd_domain_index);
- return 0;
+done:
+ unformat_free (line_input);
+
+ return error;
}
static u8 *
diff --git a/src/plugins/snat/snat.c b/src/plugins/snat/snat.c
index 73854a7ab3d..8c2bacdbed4 100644
--- a/src/plugins/snat/snat.c
+++ b/src/plugins/snat/snat.c
@@ -1705,6 +1705,7 @@ add_address_command_fn (vlib_main_t * vm,
int i, count;
int is_add = 1;
int rv = 0;
+ clib_error_t *error = 0;
/* Get a line of input. */
if (!unformat_user (input, unformat_line_input, line_input))
@@ -1721,19 +1722,27 @@ add_address_command_fn (vlib_main_t * vm,
else if (unformat (line_input, "del"))
is_add = 0;
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;
+ }
}
- unformat_free (line_input);
if (sm->static_mapping_only)
- return clib_error_return (0, "static mapping only mode");
+ {
+ error = clib_error_return (0, "static mapping only mode");
+ goto done;
+ }
start_host_order = clib_host_to_net_u32 (start_addr.as_u32);
end_host_order = clib_host_to_net_u32 (end_addr.as_u32);
if (end_host_order < start_host_order)
- return clib_error_return (0, "end address less than start address");
+ {
+ error = clib_error_return (0, "end address less than start address");
+ goto done;
+ }
count = (end_host_order - start_host_order) + 1;
@@ -1755,11 +1764,11 @@ add_address_command_fn (vlib_main_t * vm,
switch (rv)
{
case VNET_API_ERROR_NO_SUCH_ENTRY:
- return clib_error_return (0, "S-NAT address not exist.");
- break;
+ error = clib_error_return (0, "S-NAT address not exist.");
+ goto done;
case VNET_API_ERROR_UNSPECIFIED:
- return clib_error_return (0, "S-NAT address used in static mapping.");
- break;
+ error = clib_error_return (0, "S-NAT address used in static mapping.");
+ goto done;
default:
break;
}
@@ -1767,7 +1776,10 @@ add_address_command_fn (vlib_main_t * vm,
increment_v4_address (&this_addr);
}
- return 0;
+done:
+ unformat_free (line_input);
+
+ return error;
}
VLIB_CLI_COMMAND (add_address_command, static) = {
@@ -1807,10 +1819,12 @@ snat_feature_command_fn (vlib_main_t * vm,
else if (unformat (line_input, "del"))
is_del = 1;
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;
+ }
}
- unformat_free (line_input);
if (vec_len (inside_sw_if_indices))
{
@@ -1830,6 +1844,8 @@ snat_feature_command_fn (vlib_main_t * vm,
}
}
+done:
+ unformat_free (line_input);
vec_free (inside_sw_if_indices);
vec_free (outside_sw_if_indices);
@@ -1923,13 +1939,18 @@ add_static_mapping_command_fn (vlib_main_t * vm,
else if (unformat (line_input, "del"))
is_add = 0;
else
- return clib_error_return (0, "unknown input: '%U'",
- format_unformat_error, line_input);
+ {
+ error = clib_error_return (0, "unknown input: '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
- unformat_free (line_input);
if (!addr_only && !proto_set)
- return clib_error_return (0, "missing protocol");
+ {
+ error = clib_error_return (0, "missing protocol");
+ goto done;
+ }
rv = snat_add_static_mapping(l_addr, e_addr, (u16) l_port, (u16) e_port,
vrf_id, addr_only, sw_if_index, proto, is_add);
@@ -1937,22 +1958,27 @@ add_static_mapping_command_fn (vlib_main_t * vm,
switch (rv)
{
case VNET_API_ERROR_INVALID_VALUE:
- return clib_error_return (0, "External port already in use.");
- break;
+ error = clib_error_return (0, "External port already in use.");
+ goto done;
case VNET_API_ERROR_NO_SUCH_ENTRY:
if (is_add)
- return clib_error_return (0, "External addres must be allocated.");
+ error = clib_error_return (0, "External addres must be allocated.");
else
- return clib_error_return (0, "Mapping not exist.");
- break;
+ error = clib_error_return (0, "Mapping not exist.");
+ goto done;
case VNET_API_ERROR_NO_SUCH_FIB:
- return clib_error_return (0, "No such VRF id.");
+ error = clib_error_return (0, "No such VRF id.");
+ goto done;
case VNET_API_ERROR_VALUE_EXIST:
- return clib_error_return (0, "Mapping already exist.");
+ error = clib_error_return (0, "Mapping already exist.");
+ goto done;
default:
break;
}
+done:
+ unformat_free (line_input);
+
return error;
}
@@ -1985,6 +2011,7 @@ set_workers_command_fn (vlib_main_t * vm,
unformat_input_t _line_input, *line_input = &_line_input;
uword *bitmap = 0;
int rv = 0;
+ clib_error_t *error = 0;
/* Get a line of input. */
if (!unformat_user (input, unformat_line_input, line_input))
@@ -1995,13 +2022,18 @@ set_workers_command_fn (vlib_main_t * vm,
if (unformat (line_input, "%U", unformat_bitmap_list, &bitmap))
;
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;
+ }
}
- unformat_free (line_input);
if (bitmap == 0)
- return clib_error_return (0, "List of workers must be specified.");
+ {
+ error = clib_error_return (0, "List of workers must be specified.");
+ goto done;
+ }
rv = snat_set_workers(bitmap);
@@ -2010,17 +2042,20 @@ set_workers_command_fn (vlib_main_t * vm,
switch (rv)
{
case VNET_API_ERROR_INVALID_WORKER:
- return clib_error_return (0, "Invalid worker(s).");
- break;
+ error = clib_error_return (0, "Invalid worker(s).");
+ goto done;
case VNET_API_ERROR_FEATURE_DISABLED:
- return clib_error_return (0,
+ error = clib_error_return (0,
"Supported only if 2 or more workes available.");
- break;
+ goto done;
default:
break;
}
- return 0;
+done:
+ unformat_free (line_input);
+
+ return error;
}
/*?
@@ -2047,6 +2082,7 @@ snat_ipfix_logging_enable_disable_command_fn (vlib_main_t * vm,
u32 src_port = 0;
u8 enable = 1;
int rv = 0;
+ clib_error_t *error = 0;
/* Get a line of input. */
if (!unformat_user (input, unformat_line_input, line_input))
@@ -2061,17 +2097,25 @@ snat_ipfix_logging_enable_disable_command_fn (vlib_main_t * vm,
else if (unformat (line_input, "disable"))
enable = 0;
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;
+ }
}
- unformat_free (line_input);
rv = snat_ipfix_logging_enable_disable (enable, domain_id, (u16) src_port);
if (rv)
- return clib_error_return (0, "ipfix logging enable failed");
+ {
+ error = clib_error_return (0, "ipfix logging enable failed");
+ goto done;
+ }
- return 0;
+done:
+ unformat_free (line_input);
+
+ return error;
}
/*?
@@ -2604,6 +2648,7 @@ snat_add_interface_address_command_fn (vlib_main_t * vm,
u32 sw_if_index;
int rv;
int is_del = 0;
+ clib_error_t *error = 0;
/* Get a line of input. */
if (!unformat_user (input, unformat_line_input, line_input))
@@ -2617,8 +2662,11 @@ snat_add_interface_address_command_fn (vlib_main_t * vm,
else if (unformat (line_input, "del"))
is_del = 1;
else
- return clib_error_return (0, "unknown input '%U'",
- format_unformat_error, line_input);
+ {
+ error = clib_error_return (0, "unknown input '%U'",
+ format_unformat_error, line_input);
+ goto done;
+ }
}
rv = snat_add_interface_address (sm, sw_if_index, is_del);
@@ -2629,10 +2677,15 @@ snat_add_interface_address_command_fn (vlib_main_t * vm,
break;
default:
- return clib_error_return (0, "snat_add_interface_address returned %d",
- rv);
+ error = clib_error_return (0, "snat_add_interface_address returned %d",
+ rv);
+ goto done;
}
- return 0;
+
+done:
+ unformat_free (line_input);
+
+ return error;
}
VLIB_CLI_COMMAND (snat_add_interface_address_command, static) = {