diff options
Diffstat (limited to 'src/plugins/memif/cli.c')
-rw-r--r-- | src/plugins/memif/cli.c | 125 |
1 files changed, 34 insertions, 91 deletions
diff --git a/src/plugins/memif/cli.c b/src/plugins/memif/cli.c index b313e9737b3..c2ed63747fa 100644 --- a/src/plugins/memif/cli.c +++ b/src/plugins/memif/cli.c @@ -33,7 +33,7 @@ memif_socket_filename_create_command_fn (vlib_main_t * vm, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; - int r; + clib_error_t *err; u32 socket_id; u8 *socket_filename; @@ -53,6 +53,7 @@ memif_socket_filename_create_command_fn (vlib_main_t * vm, else { vec_free (socket_filename); + unformat_free (line_input); return clib_error_return (0, "unknown input `%U'", format_unformat_error, input); } @@ -72,37 +73,18 @@ memif_socket_filename_create_command_fn (vlib_main_t * vm, return clib_error_return (0, "Invalid socket filename"); } - r = memif_socket_filename_add_del (1, socket_id, socket_filename); + err = memif_socket_filename_add_del (1, socket_id, (char *) socket_filename); vec_free (socket_filename); - if (r < 0) - { - switch (r) - { - case VNET_API_ERROR_INVALID_ARGUMENT: - return clib_error_return (0, "Invalid argument"); - case VNET_API_ERROR_SYSCALL_ERROR_1: - return clib_error_return (0, "Syscall error 1"); - case VNET_API_ERROR_ENTRY_ALREADY_EXISTS: - return clib_error_return (0, "Already exists"); - case VNET_API_ERROR_UNEXPECTED_INTF_STATE: - return clib_error_return (0, "Interface still in use"); - default: - return clib_error_return (0, "Unknown error"); - } - } - - return 0; + return err; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (memif_socket_filename_create_command, static) = { .path = "create memif socket", .short_help = "create memif socket [id <id>] [filename <path>]", .function = memif_socket_filename_create_command_fn, }; -/* *INDENT-ON* */ static clib_error_t * memif_socket_filename_delete_command_fn (vlib_main_t * vm, @@ -110,7 +92,6 @@ memif_socket_filename_delete_command_fn (vlib_main_t * vm, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; - int r; u32 socket_id; /* Get a line of input. */ @@ -125,6 +106,7 @@ memif_socket_filename_delete_command_fn (vlib_main_t * vm, ; else { + unformat_free (line_input); return clib_error_return (0, "unknown input `%U'", format_unformat_error, input); } @@ -137,42 +119,21 @@ memif_socket_filename_delete_command_fn (vlib_main_t * vm, return clib_error_return (0, "Invalid socket id"); } - r = memif_socket_filename_add_del (0, socket_id, 0); - - if (r < 0) - { - switch (r) - { - case VNET_API_ERROR_INVALID_ARGUMENT: - return clib_error_return (0, "Invalid argument"); - case VNET_API_ERROR_SYSCALL_ERROR_1: - return clib_error_return (0, "Syscall error 1"); - case VNET_API_ERROR_ENTRY_ALREADY_EXISTS: - return clib_error_return (0, "Already exists"); - case VNET_API_ERROR_UNEXPECTED_INTF_STATE: - return clib_error_return (0, "Interface still in use"); - default: - return clib_error_return (0, "Unknown error"); - } - } - - return 0; + return memif_socket_filename_add_del (0, socket_id, 0); } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (memif_socket_filename_delete_command, static) = { .path = "delete memif socket", .short_help = "delete memif socket [id <id>]", .function = memif_socket_filename_delete_command_fn, }; -/* *INDENT-ON* */ static clib_error_t * memif_create_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; - int r; + clib_error_t *err; u32 ring_size = MEMIF_DEFAULT_RING_SIZE; memif_create_if_args_t args = { 0 }; args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE; @@ -207,14 +168,19 @@ memif_create_command_fn (vlib_main_t * vm, unformat_input_t * input, args.is_master = 0; else if (unformat (line_input, "no-zero-copy")) args.is_zero_copy = 0; + else if (unformat (line_input, "use-dma")) + args.use_dma = 1; else if (unformat (line_input, "mode ip")) args.mode = MEMIF_INTERFACE_MODE_IP; else if (unformat (line_input, "hw-addr %U", unformat_ethernet_address, args.hw_addr)) args.hw_addr_set = 1; else - return clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); + { + unformat_free (line_input); + return clib_error_return (0, "unknown input `%U'", + format_unformat_error, input); + } } unformat_free (line_input); @@ -234,27 +200,13 @@ memif_create_command_fn (vlib_main_t * vm, unformat_input_t * input, args.rx_queues = rx_queues; args.tx_queues = tx_queues; - r = memif_create_if (vm, &args); + err = memif_create_if (vm, &args); vec_free (args.secret); - if (r <= VNET_API_ERROR_SYSCALL_ERROR_1 - && r >= VNET_API_ERROR_SYSCALL_ERROR_10) - return clib_error_return (0, "%s (errno %d)", strerror (errno), errno); - - if (r == VNET_API_ERROR_INVALID_ARGUMENT) - return clib_error_return (0, "Invalid argument"); - - if (r == VNET_API_ERROR_INVALID_INTERFACE) - return clib_error_return (0, "Invalid interface name"); - - if (r == VNET_API_ERROR_SUBIF_ALREADY_EXISTS) - return clib_error_return (0, "Interface with same id already exists"); - - return 0; + return err; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (memif_create_command, static) = { .path = "create interface memif", .short_help = "create interface memif [id <id>] [socket-id <socket-id>] " @@ -264,7 +216,6 @@ VLIB_CLI_COMMAND (memif_create_command, static) = { "[mode ip] [secret <string>]", .function = memif_create_command_fn, }; -/* *INDENT-ON* */ static clib_error_t * memif_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, @@ -289,8 +240,11 @@ memif_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, vnm, &sw_if_index)) ; else - return clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); + { + unformat_free (line_input); + return clib_error_return (0, "unknown input `%U'", + format_unformat_error, input); + } } unformat_free (line_input); @@ -308,13 +262,11 @@ memif_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return 0; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (memif_delete_command, static) = { .path = "delete interface memif", .short_help = "delete interface memif {<interface> | sw_if_index <sw_idx>}", .function = memif_delete_command_fn, }; -/* *INDENT-ON* */ static u8 * format_memif_if_flags (u8 * s, va_list * args) @@ -378,23 +330,22 @@ format_memif_descriptor (u8 * s, va_list * args) if (ring) { s = format (s, "%Udescriptor table:\n", format_white_space, indent); - s = - format (s, - "%Uid flags len address offset user address\n", - format_white_space, indent); - s = - format (s, - "%U===== ===== ======== ================== ====== ==================\n", - format_white_space, indent); + s = format (s, + "%Uid flags region len address offset " + " user address\n", + format_white_space, indent); + s = format (s, + "%U===== ===== ====== ======== ================== " + "========== ==================\n", + format_white_space, indent); for (slot = 0; slot < ring_size; slot++) { - s = format (s, "%U%-5d %-5d %-7d 0x%016lx %-6d 0x%016lx\n", - format_white_space, indent, slot, - ring->desc[slot].flags, - ring->desc[slot].length, + s = format (s, "%U%-5d %-5d %-6d %-7d 0x%016lx %-10d 0x%016lx\n", + format_white_space, indent, slot, ring->desc[slot].flags, + ring->desc[slot].region, ring->desc[slot].length, mif->regions[ring->desc[slot].region].shm, - ring->desc[slot].offset, memif_get_buffer (mif, ring, - slot)); + ring->desc[slot].offset, + memif_get_buffer (mif, ring, slot)); } s = format (s, "\n"); } @@ -437,7 +388,6 @@ memif_show_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_output (vm, "sockets\n"); vlib_cli_output (vm, " %-3s %-11s %s\n", "id", "listener", "filename"); - /* *INDENT-OFF* */ hash_foreach (sock_id, msf_idx, mm->socket_file_index_by_sock_id, ({ memif_socket_file_t *msf; @@ -453,17 +403,14 @@ memif_show_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_output(vm, " %-3u %-11v %s\n", sock_id, s, filename); vec_reset_length (s); })); - /* *INDENT-ON* */ vec_free (s); vlib_cli_output (vm, "\n"); if (vec_len (hw_if_indices) == 0) { - /* *INDENT-OFF* */ pool_foreach (mif, mm->interfaces) vec_add1 (hw_if_indices, mif->hw_if_index); - /* *INDENT-ON* */ } for (hw_if_index = 0; hw_if_index < vec_len (hw_if_indices); hw_if_index++) @@ -498,7 +445,6 @@ memif_show_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_output (vm, " remote-disc-reason \"%s\"", mif->remote_disc_string); - /* *INDENT-OFF* */ vec_foreach_index (i, mif->regions) { mr = vec_elt_at_index (mif->regions, i); @@ -519,20 +465,17 @@ memif_show_command_fn (vlib_main_t * vm, unformat_input_t * input, if (show_descr) vlib_cli_output (vm, " %U", format_memif_descriptor, mif, mq); } - /* *INDENT-ON* */ } done: vec_free (hw_if_indices); return error; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (memif_show_command, static) = { .path = "show memif", .short_help = "show memif [<interface>] [descriptors]", .function = memif_show_command_fn, }; -/* *INDENT-ON* */ clib_error_t * memif_cli_init (vlib_main_t * vm) |