New upstream version 17.08
[deb_dpdk.git] / examples / exception_path / main.c
index 89bf1cc..e551e6d 100644 (file)
 #include <getopt.h>
 
 #include <netinet/in.h>
-#include <linux/if.h>
+#include <net/if.h>
+#ifdef RTE_EXEC_ENV_LINUXAPP
 #include <linux/if_tun.h>
+#endif
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
@@ -65,7 +67,6 @@
 #include <rte_debug.h>
 #include <rte_ether.h>
 #include <rte_ethdev.h>
-#include <rte_log.h>
 #include <rte_mempool.h>
 #include <rte_mbuf.h>
 #include <rte_string_fns.h>
@@ -182,6 +183,7 @@ signal_handler(int signum)
        }
 }
 
+#ifdef RTE_EXEC_ENV_LINUXAPP
 /*
  * Create a tap network interface, or use existing one with same name.
  * If name[0]='\0' then a name is automatically assigned and returned in name.
@@ -214,6 +216,29 @@ static int tap_create(char *name)
 
        return fd;
 }
+#else
+/*
+ * Find a free tap network interface, or create a new one.
+ * The name is automatically assigned and returned in name.
+ */
+static int tap_create(char *name)
+{
+       int i, fd = -1;
+       char devname[PATH_MAX];
+
+       for (i = 0; i < 255; i++) {
+               snprintf(devname, sizeof(devname), "/dev/tap%d", i);
+               fd = open(devname, O_RDWR);
+               if (fd >= 0 || errno != EBUSY)
+                       break;
+       }
+
+       if (name)
+               snprintf(name, IFNAMSIZ, "tap%d", i);
+
+       return fd;
+}
+#endif
 
 /* Main processing loop */
 static int
@@ -422,6 +447,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 */
        PRINT_INFO("Initialising port %u ...", (unsigned)port);
@@ -431,14 +458,21 @@ init_port(uint8_t port)
                FATAL_ERROR("Could not configure port%u (%d)",
                            (unsigned)port, ret);
 
-       ret = rte_eth_rx_queue_setup(port, 0, NB_RXD, rte_eth_dev_socket_id(port),
+       ret = rte_eth_dev_adjust_nb_rx_tx_desc(port, &nb_rxd, &nb_txd);
+       if (ret < 0)
+               FATAL_ERROR("Could not adjust number of descriptors for port%u (%d)",
+                           (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)
                FATAL_ERROR("Could not setup up RX queue for port%u (%d)",
                            (unsigned)port, ret);
 
-       ret = rte_eth_tx_queue_setup(port, 0, NB_TXD, rte_eth_dev_socket_id(port),
+       ret = rte_eth_tx_queue_setup(port, 0, nb_txd,
+                               rte_eth_dev_socket_id(port),
                                NULL);
        if (ret < 0)
                FATAL_ERROR("Could not setup up TX queue for port%u (%d)",