aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet
diff options
context:
space:
mode:
authorStanislav Zaikin <stanislav.zaikin@46labs.com>2023-03-09 19:35:11 +0100
committerMatthew Smith <mgsmith@netgate.com>2024-09-06 14:09:48 +0000
commit2a5bb3b5ab3e05cee0da6a78b77e67fbc3bdca75 (patch)
treeda9a3268216897725b13c9fe5c410abb9f4e644a /src/vnet
parent4779154a266626544eba2bfeac1e7ac1de7cb440 (diff)
linux-cp: auto select tap id when creating lcp pair
Now when lcp pair is created, tap instance is based on hw_id. But tap interface with such instance can already exist. Introduce an offset and auto-selection based on it. Type: fix Signed-off-by: Stanislav Zaikin <stanislav.zaikin@46labs.com> Change-Id: I9db39106b0b0d5bf95c445b03e5b7ff52f946dd2
Diffstat (limited to 'src/vnet')
-rw-r--r--src/vnet/devices/tap/tap.c5
-rw-r--r--src/vnet/devices/tap/tap.h1
2 files changed, 4 insertions, 2 deletions
diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c
index 1e2ee87041d..b0b0a3af13f 100644
--- a/src/vnet/devices/tap/tap.c
+++ b/src/vnet/devices/tap/tap.c
@@ -85,7 +85,7 @@ virtio_eth_set_max_frame_size (vnet_main_t *vnm, vnet_hw_interface_t *hi,
return 0;
}
-#define TAP_MAX_INSTANCE 1024
+#define TAP_MAX_INSTANCE 8192
static void
tap_free (vlib_main_t * vm, virtio_if_t * vif)
@@ -162,7 +162,8 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
}
else
{
- args->id = clib_bitmap_first_clear (tm->tap_ids);
+ args->id = clib_bitmap_next_clear (tm->tap_ids, args->auto_id_offset %
+ TAP_MAX_INSTANCE);
}
if (args->id > TAP_MAX_INSTANCE)
diff --git a/src/vnet/devices/tap/tap.h b/src/vnet/devices/tap/tap.h
index 6b88c34fe41..1df2fb7e1ad 100644
--- a/src/vnet/devices/tap/tap.h
+++ b/src/vnet/devices/tap/tap.h
@@ -42,6 +42,7 @@ typedef enum
typedef struct
{
u32 id;
+ u32 auto_id_offset;
u8 mac_addr_set;
mac_address_t mac_addr;
u16 num_rx_queues;