On 14/07/15 19:21, Polevoy, Igor wrote: > Hi, > We are developing an application that uses DPDK PMD functionality . > We are using a linux shared library which contains the network packets > processing code and it is statically linked with all the necessary DPDK libs. > The .so is loaded by the main program. > For the DPDK compilation we have added the -fPIC to the GCC options. > > While it all worked fine with DPDK 1.6 where we had the rte_pmd_init_all > method, in the 2.0 version the > drivers registration methods (PMD_REGISTER_DRIVER) are not called when the > shared library is loaded. > > Although, I can go along the lines of the rte_pmd_init all and manually call > the driver registration, I'm concerned > that DPDK has other drivers initialization calls, and I don't actually know > which are needed or could be needed and when. > > Do you have any advice on that? What is the best way to resolve this issue? > > Thank you > Igor. >
I've seen a similar problem, but in a different setup. My app (OVS) links to ODP-DPDK statically, which then links to DPDK code statically. I found that the devinitfn_* functions are not called because OVS doesn't call directly into the DPDK library, only into ODP-DPDK. The workaround for me was to refer to those functions in the ODP-DPDK code: #define PMD_EXT(drv) extern void devinitfn_##drv(void); PMD_EXT(bond_drv) PMD_EXT(em_pmd_drv) ... But there might be better solutions than that. This one is fragile, if you update DPDK you have to remember adding these references for new PMDs. Zoli