应用场景
TAP 轮询模式驱动程序 (PMD) 管理一个虚拟设备,用于注入要由 Linux 内核处理的数据包。在编写 DPDK 应用程序以从内核卸载网络功能(例如隧道)时,此 PMD 非常有用。
从内核的角度来看,TAP 设备看起来就像一个常规网络接口。网络设备可以通过标准工具(例如ip和ethtool命令)进行管理。也可以使用现有的数据包工具(例如 wireshark或 )tcpdump。
从 DPDK 应用程序来看,TAP设备类似于 DPDK ethdev。数据包以 L2(以太网)格式发送和接收。用于查询信息、统计信息和发送/接收数据包的标准 DPDK API 可按预期工作。
依赖
TAP PMD 需要内核支持 TAP 设备中的多个队列以及多队列multiq和传入ingress队列规则。这些是大多数 Linux 发行版中的标准内核功能。
参数说明
vdev
用法: --vdev=net_tap0 --vdev=net_tap1 ...
说明: TAP 设备是使用命令行–vdev=net_tap0选项创建的。可以通过重复使用不同的设备多次指定此选项net_tapX。
iface
用法: --vdev=net_tap0,iface=foo0 --vdev=net_tap1,iface=foo1 ...
说明: 默认情况下,Linux 接口名为dtap0、dtap1等。可以通过添加 来指定接口名称iface=foo0。
mac
用法: --vdev=net_tap0,mac=fixed|xx:xx:xx:xx:xx:xx
说明: PMD 会生成一个随机 MAC 地址。如果需要静态地址,可以使用mac=fixed。或者直接指定接口mac地址mac=00:11:22:33:44:55。
persist
用法: --vdev=net_tap0,iface=tap0,persist ...
说明: 当 DPDK 应用程序退出时,TAP 设备将被标记为关闭并被移除。可以使用 persist 标志来持久化。
remote
待确定如何使用。
一般命令行使用:
./dpdk-testpmd --lcores 11-13 --vdev=net_tap0,iface=tap0,mac=00:11:22:33:44:55,persist --vdev=net_tap1,iface=tap1 -a 0000:01:10.2 --socket-mem 1024 --file-prefix=testpmd -- --txd=2048 --rxd=2048 --burst=64 --nb-cores=2 -i --port-topology=loop
TUN 设备
TAP 设备可用作 L3 隧道专用设备 (TUN)。此类设备不包括以太网 (L2) 报头;所有数据包都以 IP 数据包的形式发送和接收。
TUN 设备是使用命令行参数创建的–vdev=net_tunX,其中 X 代表唯一 ID,例如:
--vdev=net_tun0 --vdev=net_tun1,iface=foo1, ...
与 TAP PMD 不同,TUN PMD 不支持用户参数MAC或remote用户选项。默认接口名称为dtunX,其中 X 代表唯一 ID。
附
https://doc.dpdk.org/guides/nics/tap.html