From: Vipin Varghese Date: Mon, 2 Apr 2018 21:37:48 +0000 (+0530) Subject: net/tap: add tun log and documentation X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=58f7db4396c0f6180cf94e977996af7ecdf08f2b;p=dpdk.git net/tap: add tun log and documentation The changes add TUN|TAP specific logs and documentation support. Signed-off-by: Vipin Varghese Reviewed-by: Ferruh Yigit Acked-by: Pascal Mazon --- diff --git a/doc/guides/nics/tap.rst b/doc/guides/nics/tap.rst index 76eb0bde41..c97786acaa 100644 --- a/doc/guides/nics/tap.rst +++ b/doc/guides/nics/tap.rst @@ -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 ---------------- diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index c253e15b33..61d6465581 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -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;