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:
parent
204d026a39
commit
58f7db4396
@ -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
|
||||
----------------
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user