ethdev: introduce Rx queue offloads API
[dpdk.git] / examples / kni / main.c
index 2bff1e1..e3bc2fb 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>
@@ -66,8 +65,6 @@
 #include <rte_debug.h>
 #include <rte_ether.h>
 #include <rte_ethdev.h>
-#include <rte_ring.h>
-#include <rte_log.h>
 #include <rte_mempool.h>
 #include <rte_mbuf.h>
 #include <rte_string_fns.h>
@@ -81,9 +78,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)
@@ -133,7 +129,7 @@ static struct rte_eth_conf port_conf = {
                .hw_ip_checksum = 0,    /* IP checksum offload disabled */
                .hw_vlan_filter = 0,    /* VLAN filtering disabled */
                .jumbo_frame = 0,       /* Jumbo Frame Support disabled */
-               .hw_strip_crc = 0,      /* CRC stripped by hardware */
+               .hw_strip_crc = 1,      /* CRC stripped by hardware */
        },
        .txmode = {
                .mq_mode = ETH_MQ_TX_NONE,
@@ -320,8 +316,6 @@ main_loop(__rte_unused void *arg)
        };
        enum lcore_rxtx flag = LCORE_NONE;
 
-       nb_ports = (uint8_t)(nb_ports < RTE_MAX_ETHPORTS ?
-                               nb_ports : RTE_MAX_ETHPORTS);
        for (i = 0; i < nb_ports; i++) {
                if (!kni_port_params_array[i])
                        continue;
@@ -610,6 +604,8 @@ static void
 init_port(uint8_t port)
 {
        int ret;
+       uint16_t nb_rxd = NB_RXD;
+       uint16_t nb_txd = NB_TXD;
 
        /* Initialise device and RX/TX queues */
        RTE_LOG(INFO, APP, "Initialising port %u ...\n", (unsigned)port);
@@ -619,13 +615,18 @@ init_port(uint8_t port)
                rte_exit(EXIT_FAILURE, "Could not configure port%u (%d)\n",
                            (unsigned)port, ret);
 
-       ret = rte_eth_rx_queue_setup(port, 0, NB_RXD,
+       ret = rte_eth_dev_adjust_nb_rx_tx_desc(port, &nb_rxd, &nb_txd);
+       if (ret < 0)
+               rte_exit(EXIT_FAILURE, "Could not adjust number of descriptors "
+                               "for port%u (%d)\n", (unsigned)port, ret);
+
+       ret = rte_eth_rx_queue_setup(port, 0, nb_rxd,
                rte_eth_dev_socket_id(port), NULL, pktmbuf_pool);
        if (ret < 0)
                rte_exit(EXIT_FAILURE, "Could not setup up RX queue for "
                                "port%u (%d)\n", (unsigned)port, ret);
 
-       ret = rte_eth_tx_queue_setup(port, 0, NB_TXD,
+       ret = rte_eth_tx_queue_setup(port, 0, nb_txd,
                rte_eth_dev_socket_id(port), NULL);
        if (ret < 0)
                rte_exit(EXIT_FAILURE, "Could not setup up TX queue for "
@@ -672,7 +673,7 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
                                continue;
                        }
                        /* clear all_ports_up flag if any link down */
-                       if (link.link_status == 0) {
+                       if (link.link_status == ETH_LINK_DOWN) {
                                all_ports_up = 0;
                                break;
                        }
@@ -832,9 +833,10 @@ kni_free_kni(uint8_t port_id)
        if (port_id >= RTE_MAX_ETHPORTS || !p[port_id])
                return -1;
 
-       for (i = 0; i < p[i]->nb_kni; i++) {
-               rte_kni_release(p[i]->kni[i]);
-               p[i]->kni[i] = NULL;
+       for (i = 0; i < p[port_id]->nb_kni; i++) {
+               if (rte_kni_release(p[port_id]->kni[i]))
+                       printf("Fail to release kni\n");
+               p[port_id]->kni[i] = NULL;
        }
        rte_eth_dev_stop(port_id);
 
@@ -868,11 +870,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;
@@ -931,4 +930,3 @@ main(int argc, char** argv)
 
        return 0;
 }
-