![](/img/trans.png)
[英]Tap interfaces and /dev/net/tun device, using ip tuntap command
[英]DPDK l3fwd-acl application is unable to send or receive using net_tap PMD using namespaces
我編譯了dpdk 19.11.11版本來測試l3fwd-acl。 在具有 2 個 CPU 和 2 個端口的 VirtualBox 實例中啟動它后,我使用了 2 個 TAP 接口來模擬 2.network 接口,用於將流量放在一個接口上並通過另一個接口返回。 我使用了以下命令(並獲得以下輸出):
sam@sam-VirtualBox:~/prac/dpdk-stable-19.11.11/examples/l3fwd-acl/build/app$ sudo ./l3fwd-acl -l 1 -n 1 --vdev=net_tap0 --vdev=net_tap1 -- -p 0x3 -P --config="(0,0,1),(1,0,1)" --rule_ipv4="./ipv4_rules.db" --rule_ipv6="./ipv6_rules.db"
[sudo] password for sam:
EAL: Detected 2 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: PCI device 0000:00:03.0 on NUMA socket -1
EAL: probe driver: 8086:100e net_e1000_em
EAL: PCI device 0000:00:08.0 on NUMA socket -1
EAL: probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:00:09.0 on NUMA socket -1
EAL: probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:00:0a.0 on NUMA socket -1
EAL: probe driver: 8086:100f net_e1000_em
Promiscuous mode selected
ACL option are:
rule_ipv4: ./ipv4_rules.db
rule_ipv6: ./ipv6_rules.db
scalar: 0
L3FWDACL: IPv4 Route entries 1:
1:0.0.0.0/0 0.0.0.0/0 0 : 65535 0 : 65535 0x0/0x0 0xffffffff-0x1ffffffe-0x2
L3FWDACL: IPv4 ACL entries 1:
1:0.0.0.0/0 0.0.0.0/0 0 : 65535 10101 : 10101 0x6/0xfe 0xffffffff-0x1fffffff-0xf0000000
L3FWDACL: IPv6 Route entries 1:
1:0000:0000:0000:0000:0000:0000:0000:0000/0 0000:0000:0000:0000:0000:0000:0000:0000/0 0 : 65535 0 : 65535 0x0/0x0 0xffffffff-0x1fffffff-0x1
L3FWDACL: IPv6 ACL entries 0:
acl context <l3fwd-acl-ipv40>@0x1004d8040
socket_id=0
alg=3
max_rules=100000
rule_size=96
num_rules=2
num_categories=1
num_tries=1
acl context <l3fwd-acl-ipv60>@0x100fb0440
socket_id=0
alg=3
max_rules=100000
rule_size=192
num_rules=1
num_categories=1
num_tries=1
Initializing port 0 ... Creating queues: nb_rxq=1 nb_txq=1... Port 0 modified RSS hash function based on hardware support,requested:0x3bffc configured:0
Address:08:00:27:E8:C1:2B, Allocated mbuf pool on socket 0
txq=1,0,0
Initializing port 1 ... Creating queues: nb_rxq=1 nb_txq=1... Port 1 modified RSS hash function based on hardware support,requested:0x3bffc configured:0
Address:08:00:27:1D:45:A5, txq=1,0,0
Skipping disabled port 2
Skipping disabled port 3
Initializing rx queues on lcore 1 ... rxq=0,0,0 rxq=1,0,0
Checking link status..............................done
Port0 Link Up. Speed 1000 Mbps full-duplex
Port1 Link Up. Speed 1000 Mbps full-duplex
L3FWD: entering main loop on lcore 1
L3FWD: -- lcoreid=1 portid=0 rxqueueid=0
L3FWD: -- lcoreid=1 portid=1 rxqueueid=0
之后,我按照接受的解決方案中顯示的命令為 dtap0 和 dtap1 分配了一個 IP 地址: DPDK RX/TX 回調示例應用程序中沒有流量出現
我嘗試使用分配的 IP 從一個點擊界面 ping 到另一個點擊界面,但無法獲得任何響應。 可能是什么問題呢?
[編輯 2] 使用上述步驟,我們能夠從 tap0 命名空間 ping 命名空間 tap1,但我們觀察到該通信期間的數據包丟失。
The rules files are:
1) ipv4_rules.db
+++
R0.0.0.0/0 12.12.12.2/32 0 : 65535 0 : 65535 0/0xfe 1
R0.0.0.0/0 12.12.12.1/32 0 : 65535 0 : 65535 0/0xfe 0
+++
2) ipv6_rules.db
+++
R0:0:0:0:0:0:0:0/0 0:0:0:0:0:0:0:0/0 0 : 65535 0 : 65535 0x00/0x00 0
+++
Apart from ping with packet loss, not able to exchange traffic using "netcat" or "socat" though. Commands used for netcat/socat were:
a) Listener side:
sudo ip netns exec tap1 nc -l 1567
OR
sudo ip netns exec tap1 socat TCP4-LISTEN:1567,fork EXEC:cat
b) Sender side:
sudo ip netns exec tap0 nc 12.12.12.2 1567
L3fwd-acl 僅適用於 IP 數據包,對於它丟棄的所有非 IP 數據包。 因此,對於 TAP PMD,我必須遵循以下更改
--no-pci
禁用任何 NIC PCIe 設備sudo./build/l3fwd-acl --file-prefix=mytest -l 2-4 --vdev.net_tap0 --vdev.net_tap1 --no-pci -- -P -p 3 --config="(0,0,4),(1,0,3)" --rule_ipv4=ipv4-sample.db --rule-ipv6=ipv6-sample.db --eth-dest=0,<mac address of DPDK TAP0> --eth-dest=1,<mac address of DPDK TAP1>
dtap0 and dtap1
的條目編輯 ip-sample.db 文件。sudo ip netns add tap0
sudo ip netns add tap1
ip netns
ip netns exec tap0 ifconfig -a
ip netns exec tap1 ifconfig -a
sudo ip link set dtap0 netns tap0
sudo ip link set dtap1 netns tap1
ip netns exec tap0 ifconfig -a
ip netns exec tap1 ifconfig -a
sudo ip netns exec tap0 ifconfig dtap0 12.12.12.1 up
sudo ip netns exec tap1 ifconfig dtap1 12.12.12.2 up
如果我們執行sudo ip.netns exec tap0 ping 12.12.12.2
ARP 數據包將被丟棄,因為它不是 IP 數據包。 為防止這種情況發生,請在命名空間tap0 and tap1
中為 dtap0 和 dtap1 添加 static ARP 條目。 這將使 kernel 發出 ICMP 數據包,然后由 L3FWD ACL 程序路由。
注意:可以使用 DPDK L2FWD 和--file-prefix=test --no-pci --vdev.net_tap0 --vdev.net_tap1 -l 12-13 -- -p 3 -T 1 --no-mac-updating
來測試相同的內容--file-prefix=test --no-pci --vdev.net_tap0 --vdev.net_tap1 -l 12-13 -- -p 3 -T 1 --no-mac-updating
[EDIT-1]問題:如何為 TAP PMD 分配 static MAC? 回答:請參考TAP PMD 鏈接以使用選項mac='desired mac address'
來實現相同的目的。
[EDIT-2] 使用新的 linux kernel 為 TAP PMD 創建多個 rx-tx 隊列 > 使用 DPDK 示例 l3fwd-acl 基於總 lcores RX-TX 創建。 因此,如果我們不從所有隊列中讀取數據包就會丟失。
要臨時解決此問題,請僅使用 1 個 lcore。
CMD: sudo./build/l3fwd-acl --file-prefix=mytest -l 2 --no-pci --vdev.net_tap0,mac=10:20:30:40:50:66 --vdev.net_tap1,mac=10:20:30:40:50:60 -- -P -p 3 --config="(0,0,2),(1,0,2)" --rule_ipv4=ipv4-sample.db --rule_ipv6=ipv6-sample.db --eth-dest=0,10:20:30:40:50:66 --eth-dest=1,10:20:30:40:50:60
過程信息: sudo./dpdk-proc-info --no-pci --file-prefix=mytest -- -p 3 --stats | grep -v ": 0"
sudo./dpdk-proc-info --no-pci --file-prefix=mytest -- -p 3 --stats | grep -v ": 0"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.