From f2223b6fcc3d5da375f506a0ebfd7da2c03d2b9a Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Thu, 10 Jul 2025 11:47:05 +0200 Subject: [PATCH] tap: add option to specify interface name Type: feature Change-Id: If3f8b082a2750f2786724f0e55f501df3c7d4991 Signed-off-by: Damjan Marion --- src/vnet/devices/tap/cli.c | 5 ++++- src/vnet/devices/tap/tap.c | 4 ++++ src/vnet/devices/tap/tap.h | 2 ++ src/vnet/devices/virtio/format.c | 3 +++ src/vnet/devices/virtio/virtio.h | 3 ++- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/vnet/devices/tap/cli.c b/src/vnet/devices/tap/cli.c index 5738ef237b6..ff6af2cca99 100644 --- a/src/vnet/devices/tap/cli.c +++ b/src/vnet/devices/tap/cli.c @@ -50,6 +50,8 @@ tap_create_command_fn (vlib_main_t * vm, unformat_input_t * input, { if (unformat (line_input, "id %u", &args.id)) ; + else if (unformat (line_input, "if-name %s", &args.if_name)) + ; else if (unformat (line_input, "host-if-name %s", &args.host_if_name)) ; @@ -130,6 +132,7 @@ tap_create_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_output (vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main (), args.sw_if_index); + vec_free (args.if_name); vec_free (args.host_if_name); vec_free (args.host_namespace); vec_free (args.host_bridge); @@ -141,7 +144,7 @@ tap_create_command_fn (vlib_main_t * vm, unformat_input_t * input, VLIB_CLI_COMMAND (tap_create_command, static) = { .path = "create tap", .short_help = - "create tap {id } [hw-addr ] " + "create tap {id } [hw-addr ] [if-name ] " "[num-rx-queues ] [num-tx-queues ] [rx-ring-size ] " "[tx-ring-size ] [host-ns ] [host-bridge ] " "[host-ip4-addr ] [host-ip6-addr ] " diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c index 8f39204a1ae..38ece0a0a80 100644 --- a/src/vnet/devices/tap/tap.c +++ b/src/vnet/devices/tap/tap.c @@ -117,6 +117,7 @@ error: vec_free (vif->rxq_vrings); vec_free (vif->txq_vrings); vec_free (vif->host_if_name); + vec_free (vif->initial_if_name); vec_free (vif->net_ns); vec_free (vif->host_bridge); clib_error_free (vif->error); @@ -202,6 +203,9 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args) vif->num_txqs = clib_max (args->num_tx_queues, thm->n_vlib_mains); vif->num_rxqs = clib_max (args->num_rx_queues, 1); + if (args->if_name) + CLIB_SWAP (args->if_name, vif->initial_if_name); + if (args->tap_flags & TAP_FLAG_ATTACH) { if (args->host_if_name == NULL) diff --git a/src/vnet/devices/tap/tap.h b/src/vnet/devices/tap/tap.h index 66f5576c5be..7b928188d5a 100644 --- a/src/vnet/devices/tap/tap.h +++ b/src/vnet/devices/tap/tap.h @@ -52,6 +52,7 @@ typedef struct u16 tx_ring_sz; u32 tap_flags; u8 *host_namespace; + u8 *if_name; u8 *host_if_name; mac_address_t host_mac_addr; u8 *host_bridge; @@ -65,6 +66,7 @@ typedef struct u8 host_ip6_gw_set; u8 host_mtu_set; u32 host_mtu_size; + /* return */ u32 sw_if_index; int rv; diff --git a/src/vnet/devices/virtio/format.c b/src/vnet/devices/virtio/format.c index fe46d92cba9..d463a6f7fff 100644 --- a/src/vnet/devices/virtio/format.c +++ b/src/vnet/devices/virtio/format.c @@ -30,6 +30,9 @@ format_virtio_device_name (u8 * s, va_list * args) virtio_main_t *mm = &virtio_main; virtio_if_t *vif = pool_elt_at_index (mm->interfaces, dev_instance); + if (vif->initial_if_name) + return format (s, "%s", vif->initial_if_name); + if (vif->type == VIRTIO_IF_TYPE_TAP) s = format (s, "tap%u", vif->id); else if (vif->type == VIRTIO_IF_TYPE_PCI) diff --git a/src/vnet/devices/virtio/virtio.h b/src/vnet/devices/virtio/virtio.h index fb72051ce45..9e75b695e94 100644 --- a/src/vnet/devices/virtio/virtio.h +++ b/src/vnet/devices/virtio/virtio.h @@ -155,8 +155,9 @@ typedef struct u32 hw_if_index; u32 sw_if_index; + u8 *initial_if_name; - CLIB_CACHE_LINE_ALIGN_MARK (cacheline1); + CLIB_CACHE_LINE_ALIGN_MARK (cacheline1); int packet_coalesce; int packet_buffering; u32 dev_instance; -- 2.16.6