Hello, I wrote a code that creates some KNI interfaces, destroys them when some management events occur, and creates new interfaces when other management events happen. What happens is that I create a number of interfaces using "kni_alloc", I destroy ALL of them through "kni_release" and, when I try to create a new one I get the message "KNI out of memory" during the execution of the "kni_alloc".
The number of interfaces that I can create/destroy before getting the error depends on the size of the mempool that I specify during the creation of the interfaces themselves. Then, to me it seems that the memory is not properly released when a KNI interface is destroyed. Before invoking "kni_release", I drain all the remaining mbufs in the tx queues. While checking the sources of DPDK, I have seen that indeed this trace only appears when there there are no mbufs available in the mempool. Am I missing something here? Is there any other call necessary to properly release a KNI interface? Just before/after the creation and release of an interface, I print the values obtained by invoking "rte_mempool_count" and "rte_mempool_free_count" on the mempool used for the KNI. What I get is the following: the value obtained with "rte_mempool_count" tends to decrease, while the value get with "rte_mempool_free_count" tends to increase. What is the exact semantic of "rte_mempool_count" and "rte_mempool_free_count"? From the doxygen documentation, it seems that the behaviour should be the opposite. Best regards, Ivano