net/tap: add tun log and documentation
authorVipin Varghese <vipin.varghese@intel.com>
Mon, 2 Apr 2018 21:37:48 +0000 (03:07 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 13 Apr 2018 22:41:44 +0000 (00:41 +0200)
The changes add TUN|TAP specific logs and documentation support.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
doc/guides/nics/tap.rst
drivers/net/tap/rte_eth_tap.c

index 76eb0bd..c97786a 100644 (file)
@@ -1,8 +1,8 @@
 ..  SPDX-License-Identifier: BSD-3-Clause
     Copyright(c) 2016 Intel Corporation.
 
-Tap Poll Mode Driver
-====================
+Tun|Tap Poll Mode Driver
+========================
 
 The ``rte_eth_tap.c`` PMD creates a device using TAP interfaces on the
 local host. The PMD allows for DPDK and the host to communicate using a raw
@@ -83,6 +83,17 @@ can utilize that stack to handle the network protocols. Plus you would be able
 to address the interface using an IP address assigned to the internal
 interface.
 
+The TUN PMD allows user to create a TUN device on host. The PMD allows user
+to transmit and receive packets via DPDK API calls with L3 header and payload.
+The devices in host can be accessed via ``ifconfig`` or ``ip`` command. TUN
+interfaces are passed to DPDK ``rte_eal_init`` arguments as ``--vdev=net_tunX``,
+where X stands for unique id, example::
+
+   --vdev=net_tun0 --vdev=net_tun1,iface=foo1, ...
+
+Unlike TAP PMD, TUN PMD does not support user arguments as ``MAC`` or ``remote`` user
+options. Default interface name is ``dtunX``, where X stands for unique id.
+
 Flow API support
 ----------------
 
index c253e15..61d6465 100644 (file)
@@ -122,17 +122,19 @@ tun_alloc(struct pmd_internals *pmd)
 
        fd = open(TUN_TAP_DEV_PATH, O_RDWR);
        if (fd < 0) {
-               RTE_LOG(ERR, PMD, "Unable to create TAP interface\n");
+               RTE_LOG(ERR, PMD, "Unable to create %s interface\n",
+                               tuntap_name);
                goto error;
        }
 
 #ifdef IFF_MULTI_QUEUE
        /* Grab the TUN features to verify we can work multi-queue */
        if (ioctl(fd, TUNGETFEATURES, &features) < 0) {
-               RTE_LOG(ERR, PMD, "TAP unable to get TUN/TAP features\n");
+               RTE_LOG(ERR, PMD, "%s unable to get TUN/TAP features\n",
+                               tuntap_name);
                goto error;
        }
-       RTE_LOG(DEBUG, PMD, "  TAP Features %08x\n", features);
+       RTE_LOG(DEBUG, PMD, "%s Features %08x\n", tuntap_name, features);
 
        if (features & IFF_MULTI_QUEUE) {
                RTE_LOG(DEBUG, PMD, "  Multi-queue support for %d queues\n",
@@ -1134,7 +1136,7 @@ tap_rx_queue_setup(struct rte_eth_dev *dev,
                tmp = &(*tmp)->next;
        }
 
-       RTE_LOG(DEBUG, PMD, "  RX TAP device name %s, qid %d on fd %d\n",
+       RTE_LOG(DEBUG, PMD, "  RX TUNTAP device name %s, qid %d on fd %d\n",
                internals->name, rx_queue_id, internals->rxq[rx_queue_id].fd);
 
        return 0;
@@ -1189,7 +1191,7 @@ tap_tx_queue_setup(struct rte_eth_dev *dev,
        if (ret == -1)
                return -1;
        RTE_LOG(DEBUG, PMD,
-               "  TX TAP device name %s, qid %d on fd %d csum %s\n",
+               "  TX TUNTAP device name %s, qid %d on fd %d csum %s\n",
                internals->name, tx_queue_id, internals->txq[tx_queue_id].fd,
                txq->csum ? "on" : "off");
 
@@ -1372,17 +1374,19 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
        struct ifreq ifr;
        int i;
 
-       RTE_LOG(DEBUG, PMD, "  TAP device on numa %u\n", rte_socket_id());
+       RTE_LOG(DEBUG, PMD, "%s device on numa %u\n",
+                       tuntap_name, rte_socket_id());
 
        data = rte_zmalloc_socket(tap_name, sizeof(*data), 0, numa_node);
        if (!data) {
-               RTE_LOG(ERR, PMD, "TAP Failed to allocate data\n");
+               RTE_LOG(ERR, PMD, "%s Failed to allocate data\n", tuntap_name);
                goto error_exit_nodev;
        }
 
        dev = rte_eth_vdev_allocate(vdev, sizeof(*pmd));
        if (!dev) {
-               RTE_LOG(ERR, PMD, "TAP Unable to allocate device struct\n");
+               RTE_LOG(ERR, PMD, "%s Unable to allocate device struct\n",
+                               tuntap_name);
                goto error_exit_nodev;
        }
 
@@ -1393,8 +1397,8 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
        pmd->ioctl_sock = socket(AF_INET, SOCK_DGRAM, 0);
        if (pmd->ioctl_sock == -1) {
                RTE_LOG(ERR, PMD,
-                       "TAP Unable to get a socket for management: %s\n",
-                       strerror(errno));
+                       "%s Unable to get a socket for management: %s\n",
+                       tuntap_name, strerror(errno));
                goto error_exit;
        }
 
@@ -1558,8 +1562,8 @@ error_exit:
        rte_eth_dev_release_port(dev);
 
 error_exit_nodev:
-       RTE_LOG(ERR, PMD, "TAP Unable to initialize %s\n",
-               rte_vdev_device_name(vdev));
+       RTE_LOG(ERR, PMD, "%s Unable to initialize %s\n",
+               tuntap_name, rte_vdev_device_name(vdev));
 
        rte_free(data);
        return -EINVAL;