X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdevices%2Fvirtio%2Fcli.c;h=1b37338af1fccbf041fc5d9075a1ec8477c3b5ce;hb=6d4af8918;hp=82dc5a117b8b4469c6dcee52399627af8eb4aadb;hpb=d6c15af33f3f153e084f14484e884f3ca68dbc23;p=vpp.git diff --git a/src/vnet/devices/virtio/cli.c b/src/vnet/devices/virtio/cli.c index 82dc5a117b8..1b37338af1f 100644 --- a/src/vnet/devices/virtio/cli.c +++ b/src/vnet/devices/virtio/cli.c @@ -14,11 +14,6 @@ * limitations under the License. *------------------------------------------------------------------ */ -#include -#include -#include -#include - #include #include #include @@ -34,7 +29,6 @@ virtio_pci_create_command_fn (vlib_main_t * vm, unformat_input_t * input, { unformat_input_t _line_input, *line_input = &_line_input; virtio_pci_create_if_args_t args; - u32 tmp; u64 feature_mask = (u64) ~ (0ULL); /* Get a line of input. */ @@ -48,10 +42,10 @@ virtio_pci_create_command_fn (vlib_main_t * vm, unformat_input_t * input, ; else if (unformat (line_input, "feature-mask 0x%llx", &feature_mask)) args.features = feature_mask; - else if (unformat (line_input, "rx-queue-size %u", &tmp)) - args.rxq_size = tmp; - else if (unformat (line_input, "tx-queue-size %u", &tmp)) - args.txq_size = tmp; + else if (unformat (line_input, "gso-enabled")) + args.gso_enabled = 1; + else if (unformat (line_input, "csum-enabled")) + args.checksum_offload_enabled = 1; else return clib_error_return (0, "unknown input `%U'", format_unformat_error, input); @@ -66,8 +60,8 @@ virtio_pci_create_command_fn (vlib_main_t * vm, unformat_input_t * input, /* *INDENT-OFF* */ VLIB_CLI_COMMAND (virtio_pci_create_command, static) = { .path = "create interface virtio", - .short_help = "create interface virtio " - "[feature-mask ] [rx-queue-size ] [tx-queue-size ]", + .short_help = "create interface virtio " + "[feature-mask ] [gso-enabled] [csum-enabled]", .function = virtio_pci_create_command_fn, }; /* *INDENT-ON* */ @@ -79,7 +73,7 @@ virtio_pci_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, unformat_input_t _line_input, *line_input = &_line_input; u32 sw_if_index = ~0; vnet_hw_interface_t *hw; - virtio_main_t *vmxm = &virtio_main; + virtio_main_t *vim = &virtio_main; virtio_if_t *vif; vnet_main_t *vnm = vnet_get_main (); @@ -104,11 +98,11 @@ virtio_pci_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || virtio_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a virtio interface"); - vif = pool_elt_at_index (vmxm->interfaces, hw->dev_instance); + vif = pool_elt_at_index (vim->interfaces, hw->dev_instance); if (virtio_pci_delete_if (vm, vif) < 0) return clib_error_return (0, "not a virtio pci interface"); @@ -119,17 +113,79 @@ virtio_pci_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, /* *INDENT-OFF* */ VLIB_CLI_COMMAND (virtio_pci_delete_command, static) = { .path = "delete interface virtio", - .short_help = "delete interface virtio" + .short_help = "delete interface virtio " "{ | sw_if_index }", .function = virtio_pci_delete_command_fn, }; /* *INDENT-ON* */ +static clib_error_t * +virtio_pci_enable_command_fn (vlib_main_t * vm, unformat_input_t * input, + vlib_cli_command_t * cmd) +{ + unformat_input_t _line_input, *line_input = &_line_input; + u32 sw_if_index = ~0; + vnet_hw_interface_t *hw; + virtio_main_t *vim = &virtio_main; + virtio_if_t *vif; + vnet_main_t *vnm = vnet_get_main (); + int gso_enabled = 0, checksum_offload_enabled = 0; + int offloads_disabled = 0; + + /* Get a line 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 (line_input, "sw_if_index %d", &sw_if_index)) + ; + else if (unformat (line_input, "%U", unformat_vnet_sw_interface, + vnm, &sw_if_index)) + ; + else if (unformat (line_input, "gso-enabled")) + gso_enabled = 1; + else if (unformat (line_input, "csum-offload-enabled")) + checksum_offload_enabled = 1; + else if (unformat (line_input, "offloads-disabled")) + offloads_disabled = 1; + else + return clib_error_return (0, "unknown input `%U'", + format_unformat_error, input); + } + unformat_free (line_input); + + if (sw_if_index == ~0) + return clib_error_return (0, + "please specify interface name or sw_if_index"); + + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); + if (hw == NULL || virtio_device_class.index != hw->dev_class_index) + return clib_error_return (0, "not a virtio interface"); + + vif = pool_elt_at_index (vim->interfaces, hw->dev_instance); + + if (virtio_pci_enable_disable_offloads + (vm, vif, gso_enabled, checksum_offload_enabled, offloads_disabled) < 0) + return clib_error_return (0, "not able to enable/disable offloads"); + + return 0; +} + +/* *INDENT-OFF* */ +VLIB_CLI_COMMAND (virtio_pci_enable_command, static) = { + .path = "set virtio pci", + .short_help = "set virtio pci { | sw_if_index }" + " [gso-enabled | csum-offload-enabled | offloads-disabled]", + .function = virtio_pci_enable_command_fn, +}; +/* *INDENT-ON* */ + static clib_error_t * show_virtio_pci_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { - virtio_main_t *vmxm = &virtio_main; + virtio_main_t *vim = &virtio_main; vnet_main_t *vnm = &vnet_main; virtio_if_t *vif; clib_error_t *error = 0; @@ -165,13 +221,13 @@ show_virtio_pci_fn (vlib_main_t * vm, unformat_input_t * input, if (vec_len (hw_if_indices) == 0) { - pool_foreach (vif, vmxm->interfaces, + pool_foreach (vif, vim->interfaces, vec_add1 (hw_if_indices, vif->hw_if_index); ); } else if (show_device_config) { - vif = pool_elt_at_index (vmxm->interfaces, hi->dev_instance); + vif = pool_elt_at_index (vim->interfaces, hi->dev_instance); if (vif->type == VIRTIO_IF_TYPE_PCI) debug_device_config_space (vm, vif); }