簡體   English   中英

DPDK l3fwd-acl 應用程序無法發送或接收 using.net_tap PMD 使用命名空間

[英]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,我必須遵循以下更改

  1. 使用--no-pci禁用任何 NIC PCIe 設備
  2. 使用新命令作為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>
  3. 使用要分配給dtap0 and dtap1的條目編輯 ip-sample.db 文件。
  4. 請參閱第24.1.3節以識別格式和默認丟棄規則
  5. 啟動應用程序並使用以下 .netns 命令。
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM