diff options
author | Steven Luong <sluong@cisco.com> | 2020-09-29 16:23:25 -0700 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-09-30 10:10:57 +0000 |
commit | 5aa34d54de1e3dcdab1b74207ef8a24cc67a0f5d (patch) | |
tree | 3cec9ac1152f02554c85fd9bedb2d743b3ef2510 /src/plugins | |
parent | 124d5e02b31c47a78dba709699408b4e9d9e29f5 (diff) |
avf: check duplicate pci address upon create interface
Entering duplicate pci address when creating an avf interface causes
crash in register_node
(gdb) f 4
145 error_exit (1);
(gdb) up
354 clib_error ("more than one node named `%v'", n->name);
(gdb) p n
$1 = (vlib_node_t *) 0x7fffbbe55de4
(gdb) p n->name
$2 = (u8 *) 0x7fffbc410b10 "avf-0/4/a/0-tx"
(gdb)
The fix is to loop through the pci addresses in the avf interface pool
and to reject the duplicate.
Type: improvement
Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I4ed6fb630fb11982d85c5bb325d9f0d6beeaf023
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/avf/device.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/plugins/avf/device.c b/src/plugins/avf/device.c index d7115044c05..32df1dfcb79 100644 --- a/src/plugins/avf/device.c +++ b/src/plugins/avf/device.c @@ -1469,6 +1469,19 @@ avf_create_if (vlib_main_t * vm, avf_create_if_args_t * args) if (avf_validate_queue_size (args) != 0) return; + /* *INDENT-OFF* */ + pool_foreach (adp, am->devices, ({ + if ((*adp)->pci_addr.as_u32 == args->addr.as_u32) + { + args->rv = VNET_API_ERROR_ADDRESS_IN_USE; + args->error = + clib_error_return (error, "%U: %s", format_vlib_pci_addr, + &args->addr, "pci address in use"); + return; + } + })); + /* *INDENT-ON* */ + pool_get (am->devices, adp); adp[0] = ad = clib_mem_alloc_aligned (sizeof (avf_device_t), CLIB_CACHE_LINE_BYTES); |