From: Damjan Marion Date: Thu, 10 Jul 2025 11:39:27 +0000 (+0200) Subject: virtio: add option to set interface name X-Git-Tag: v26.02-rc0~175 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F29%2F43429%2F2;p=vpp.git virtio: add option to set interface name Type: feature Change-Id: I99421fc1f946e65a8e23a74c04593fe1ca4f4857 Signed-off-by: Damjan Marion --- diff --git a/src/vnet/devices/virtio/cli.c b/src/vnet/devices/virtio/cli.c index 34c74ac91ac..d363882738a 100644 --- a/src/vnet/devices/virtio/cli.c +++ b/src/vnet/devices/virtio/cli.c @@ -28,20 +28,17 @@ virtio_pci_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; - virtio_pci_create_if_args_t args; + virtio_pci_create_if_args_t args = {}; u64 feature_mask = (u64) ~ (0ULL); u32 buffering_size = 0; u32 txq_size = 0; - /* Get a line of input. */ - if (!unformat_user (input, unformat_line_input, line_input)) - return 0; - - memset (&args, 0, sizeof (args)); while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "%U", unformat_vlib_pci_addr, &args.addr)) ; + else if (unformat (line_input, "if-name %s", &args.if_name)) + ; else if (unformat (line_input, "feature-mask 0x%llx", &feature_mask)) args.features = feature_mask; else if (unformat (line_input, "tx-queue-size %u", &txq_size)) @@ -74,12 +71,14 @@ virtio_pci_create_command_fn (vlib_main_t * vm, unformat_input_t * input, virtio_pci_create_if (vm, &args); + vec_free (args.if_name); + return args.error; } VLIB_CLI_COMMAND (virtio_pci_create_command, static) = { .path = "create interface virtio", - .short_help = "create interface virtio " + .short_help = "create interface virtio [if-name ] " "[feature-mask ] [tx-queue-size ] " "[gso-enabled] [csum-enabled] [rss-enabled] " "[buffering [size ]] [packed] [bind [force]]", diff --git a/src/vnet/devices/virtio/pci.c b/src/vnet/devices/virtio/pci.c index c85e316b1f5..f9aceb1dc80 100644 --- a/src/vnet/devices/virtio/pci.c +++ b/src/vnet/devices/virtio/pci.c @@ -1413,7 +1413,7 @@ virtio_pci_create_if (vlib_main_t * vm, virtio_pci_create_if_args_t * args) } } - pool_get (vim->interfaces, vif); + pool_get_zero (vim->interfaces, vif); vif->dev_instance = vif - vim->interfaces; vif->per_interface_next_index = ~0; vif->pci_addr.as_u32 = args->addr; @@ -1441,6 +1441,9 @@ virtio_pci_create_if (vlib_main_t * vm, virtio_pci_create_if_args_t * args) vif->numa_node = vlib_pci_get_numa_node (vm, h); vif->type = VIRTIO_IF_TYPE_PCI; + if (args->if_name) + CLIB_SWAP (args->if_name, vif->initial_if_name); + if ((error = vlib_pci_bus_master_enable (vm, h))) { virtio_log_error (vif, "error encountered on pci bus master enable"); @@ -1681,7 +1684,7 @@ virtio_pci_delete_if (vlib_main_t * vm, virtio_if_t * vif) vec_free (vif->cxq_vring); clib_error_free (vif->error); - memset (vif, 0, sizeof (*vif)); + vec_free (vif->initial_if_name); pool_put (vim->interfaces, vif); return 0; diff --git a/src/vnet/devices/virtio/pci.h b/src/vnet/devices/virtio/pci.h index 59778533316..16562dee564 100644 --- a/src/vnet/devices/virtio/pci.h +++ b/src/vnet/devices/virtio/pci.h @@ -317,6 +317,7 @@ typedef struct u32 buffering_size; u32 virtio_flags; clib_error_t *error; + u8 *if_name; } virtio_pci_create_if_args_t; extern const virtio_pci_func_t virtio_pci_legacy_func;