apps: use helper to create mbuf pools
[dpdk.git] / examples / kni / main.c
index cb17b43..96ca473 100644 (file)
@@ -54,7 +54,6 @@
 #include <rte_memory.h>
 #include <rte_memcpy.h>
 #include <rte_memzone.h>
-#include <rte_tailq.h>
 #include <rte_eal.h>
 #include <rte_per_lcore.h>
 #include <rte_launch.h>
@@ -81,9 +80,8 @@
 /* Max size of a single packet */
 #define MAX_PACKET_SZ           2048
 
-/* Number of bytes needed for each mbuf */
-#define MBUF_SZ \
-       (MAX_PACKET_SZ + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
+/* Size of the data buffer in each mbuf */
+#define MBUF_DATA_SZ (MAX_PACKET_SZ + RTE_PKTMBUF_HEADROOM)
 
 /* Number of mbufs in mempool that is created */
 #define NB_MBUF                 (8192 * 16)
@@ -462,8 +460,8 @@ parse_config(const char *arg)
                        goto fail;
                }
                kni_port_params_array[port_id] =
-                       (struct kni_port_params*)rte_zmalloc("KNI_port_params",
-                       sizeof(struct kni_port_params), CACHE_LINE_SIZE);
+                       rte_zmalloc("KNI_port_params",
+                                   sizeof(struct kni_port_params), RTE_CACHE_LINE_SIZE);
                kni_port_params_array[port_id]->port_id = port_id;
                kni_port_params_array[port_id]->lcore_rx =
                                        (uint8_t)int_fld[i++];
@@ -586,6 +584,25 @@ parse_args(int argc, char **argv)
        return ret;
 }
 
+/* Initialize KNI subsystem */
+static void
+init_kni(void)
+{
+       unsigned int num_of_kni_ports = 0, i;
+       struct kni_port_params **params = kni_port_params_array;
+
+       /* Calculate the maximum number of KNI interfaces that will be used */
+       for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
+               if (kni_port_params_array[i]) {
+                       num_of_kni_ports += (params[i]->nb_lcore_k ?
+                               params[i]->nb_lcore_k : 1);
+               }
+       }
+
+       /* Invoke rte KNI init to preallocate the ports */
+       rte_kni_init(num_of_kni_ports);
+}
+
 /* Initialise a single port on an Ethernet device */
 static void
 init_port(uint8_t port)
@@ -849,11 +866,8 @@ main(int argc, char** argv)
                rte_exit(EXIT_FAILURE, "Could not parse input parameters\n");
 
        /* Create the mbuf pool */
-       pktmbuf_pool = rte_mempool_create("mbuf_pool", NB_MBUF, MBUF_SZ,
-                       MEMPOOL_CACHE_SZ,
-                       sizeof(struct rte_pktmbuf_pool_private),
-                       rte_pktmbuf_pool_init, NULL, rte_pktmbuf_init, NULL,
-                       rte_socket_id(), 0);
+       pktmbuf_pool = rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF,
+               MEMPOOL_CACHE_SZ, 0, MBUF_DATA_SZ, rte_socket_id());
        if (pktmbuf_pool == NULL) {
                rte_exit(EXIT_FAILURE, "Could not initialise mbuf pool\n");
                return -1;
@@ -862,9 +876,7 @@ main(int argc, char** argv)
        /* Get number of ports found in scan */
        nb_sys_ports = rte_eth_dev_count();
        if (nb_sys_ports == 0)
-               rte_exit(EXIT_FAILURE, "No supported Ethernet devices found - "
-                       "check that CONFIG_RTE_LIBRTE_IGB_PMD=y and/or "
-                       "CONFIG_RTE_LIBRTE_IXGBE_PMD=y in the config file\n");
+               rte_exit(EXIT_FAILURE, "No supported Ethernet device found\n");
 
        /* Check if the configured port ID is valid */
        for (i = 0; i < RTE_MAX_ETHPORTS; i++)
@@ -872,6 +884,9 @@ main(int argc, char** argv)
                        rte_exit(EXIT_FAILURE, "Configured invalid "
                                                "port ID %u\n", i);
 
+       /* Initialize KNI subsystem */
+       init_kni();
+
        /* Initialise each port */
        for (port = 0; port < nb_sys_ports; port++) {
                /* Skip ports that are not enabled */