DPDK 示例应用程序 ipsec-secgw 因 virtio NIC 而失败

DPDK sample app ipsec-secgw failing with virtio NIC

我尝试运行使用以下版本

连接 DPDK ipsec-secgw 示例应用程序

网卡类型和驱动程序

用于运行 应用程序的命令和 cmd 行参数

./build/ipsec-secgw -l 6 -w 00:04.0 -w 00:05.0 --vdev "crypto_null" --log-level 8 \
--socket-mem 1024 -- -p 0xf -P -u 0x2 \
--config="(0,0,6),(1,0,6)" -f /root/config_file

输出:

EAL: Detected 8 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: PCI device 0000:00:04.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 1af4:1000 net_virtio
EAL: PCI device 0000:00:05.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 1af4:1000 net_virtio
CRYPTODEV: Creating cryptodev crypto_null

CRYPTODEV: Initialisation parameters - name: crypto_null,socket id: 0, max queue pairs: 8
Promiscuous mode selected
librte_ipsec usage: disabled
replay window size: 0
ESN: disabled
SA flags: 0
Frag TTL: 10000000000 ns
Allocated mbuf pool on socket 0
CRYPTODEV: elt_size 64 is expanded to 176

Allocated session pool on socket 0
Allocated session priv pool on socket 0
Configuring device port 0:
Address: 52:54:00:A5:82:2D
Creating queues: nb_rx_queue=1 nb_tx_queue=1...
EAL: Error - exiting with code: 1
  Cause: Error: port 0 required RX offloads: 0xe, avaialbe RX offloads: 0xa1d

配置文件内容:

#SP IPv4 rules
sp ipv4 out esp protect 1005 pri 1 dst 192.168.105.0/24 sport 0:65535 dport 0:65535

#SA rules
sa out 1005 aead_algo aes-128-gcm aead_key 2b:7e:15:16:28:ae:d2:a6:ab:f7:15:88:09:cf:4f:3d:de:ad:be:ef \
mode ipv4-tunnel src 172.16.1.5 dst 172.16.2.5 \
port_id 1 \
type inline-crypto-offload \

sa in 5 aead_algo aes-128-gcm aead_key 2b:7e:15:16:28:ae:d2:a6:ab:f7:15:88:09:cf:4f:3d:de:ad:be:ef \
mode ipv4-tunnel src 172.16.1.5 dst 172.16.2.5 \
port_id 1 \
type inline-crypto-offload \

#Routing rules
rt ipv4 dst 172.16.2.5/32 port 1
rt ipv4 dst 192.168.105.10/32 port 0

它说缺少某些卸载功能。

我从 Niantic NIC 的 DPDK 测试计划中获得了配置文件的详细信息和命令行参数。该应用程序是否只适用于 Niantic PFs/VFs。有没有办法让它与 virtio 半虚拟化 NIC 一起工作?

说明 link 遵循: Instructions

DPDK 示例 ipsec-gw 利用 RX 卸载 .offloads = DEV_RX_OFFLOAD_CHECKSUM。对于 DPDK 19.11.5 LTS,以下是支持相同的设备列表

axgbe       
dpaa2       
e1000       
enic        
hinic       
ixgbe       
mlx4        
mlx5        
mvneta      
mvpp2       
netvsc      
octeontx    
octeontx2   
sfc         
tap         
thunderx    
thunderx    
vmxnet3     

DPDK RX 校验和卸载定义为 #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | DEV_RX_OFFLOAD_UDP_CKSUM | DEV_RX_OFFLOAD_TCP_CKSUM)。根据错误日志 Cause: Error: port 0 required RX offloads: 0xe, available RX offloads: 0xa1d,PMD 中似乎没有 DEV_RX_OFFLOAD_IPV4_CKSUM

对于问题ipsec-gw only works for Niantic NIC假设没有错。因为 IPSEC-GW 应用程序可以 运行 任何具有可用的 RX 卸载校验和的 NIC。列表在上面分享。

对于这个问题有没有办法让它与 virtio 半虚拟化网卡一起工作?可以始终禁用 RX_CHECKSUM 和在软件中做IPv4的校验和。但是您需要编辑应用程序并使用 .