diff options
author | Stanislav Zaikin <stanislav.zaikin@46labs.com> | 2023-03-09 19:35:11 +0100 |
---|---|---|
committer | Matthew Smith <mgsmith@netgate.com> | 2024-09-06 14:09:48 +0000 |
commit | 2a5bb3b5ab3e05cee0da6a78b77e67fbc3bdca75 (patch) | |
tree | da9a3268216897725b13c9fe5c410abb9f4e644a /src | |
parent | 4779154a266626544eba2bfeac1e7ac1de7cb440 (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')
-rw-r--r-- | src/plugins/linux-cp/lcp_interface.c | 3 | ||||
-rw-r--r-- | src/vnet/devices/tap/tap.c | 5 | ||||
-rw-r--r-- | src/vnet/devices/tap/tap.h | 1 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/plugins/linux-cp/lcp_interface.c b/src/plugins/linux-cp/lcp_interface.c index b1c0ad5a022..61665ad4146 100644 --- a/src/plugins/linux-cp/lcp_interface.c +++ b/src/plugins/linux-cp/lcp_interface.c @@ -1001,7 +1001,8 @@ lcp_itf_pair_create (u32 phy_sw_if_index, u8 *host_if_name, clib_max (1, lcp_get_default_num_queues (0 /* is_tx */)), .num_tx_queues = clib_max (1, lcp_get_default_num_queues (1 /* is_tx */)), - .id = hw->hw_if_index, + .id = ~0, + .auto_id_offset = 4096, .sw_if_index = ~0, .rx_ring_sz = 256, .tx_ring_sz = 256, 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; |