Hi All, FOREACH_DEVICE_ON_VMBUS needs rte_vmbus_bus to work on If static link to libdpdk.a : no issues If dynamic link to *.so: linker issue, global variable not found. I suggest this patch to get a current rte_vmbus_bus struct: Thanks. diff --git a/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h b/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h --- a/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h +++ b/dpdk-20.11/drivers/bus/vmbus/rte_bus_vmbus.h @@ -414,6 +414,16 @@ } \ RTE_PMD_EXPORT_NAME(nm, __COUNTER__) +/** + * Gets the global rte_vmbus_bus struct + * + * @param bus + * Pointer to rte_vmbus_bus structure. + * @return + * Return 0 if success. + */ +int rte_vmbus_get_bus(struct rte_vmbus_bus *bus); + #ifdef __cplusplus } #endif diff --git a/dpdk-20.11/drivers/bus/vmbus/version.map b/dpdk-20.11/drivers/bus/vmbus/version.map --- a/dpdk-20.11/drivers/bus/vmbus/version.map +++ b/dpdk-20.11/drivers/bus/vmbus/version.map @@ -23,6 +23,7 @@ rte_vmbus_subchan_open; rte_vmbus_unmap_device; rte_vmbus_unregister; + rte_vmbus_get_bus; local: *; }; diff --git a/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c b/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c --- a/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c +++ b/dpdk-20.11/drivers/bus/vmbus/vmbus_common.c @@ -25,6 +25,17 @@ extern struct rte_vmbus_bus rte_vmbus_bus; +/* Gets the global rte_vmbus_bus struct*/ +int rte_vmbus_get_bus(struct rte_vmbus_bus *bus){ + + if (!bus) + return 1; + + memcpy(bus, &rte_vmbus_bus, sizeof(struct rte_vmbus_bus)); + + return 0; +} + /* map a particular resource from a file */ void * vmbus_map_resource(void *requested_addr, int fd, off_t offset, size_t size,