net/tap: add tun log and documentation

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>
This commit is contained in:
Vipin Varghese 2018-04-03 03:07:48 +05:30 committed by Ferruh Yigit
parent 204d026a39
commit 58f7db4396
2 changed files with 29 additions and 14 deletions

View 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
----------------

View 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 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
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;