问题描述
我尝试使用以下版本运行 DPDK ipsec-secgw 示例应用
- DPDK 版本 dpdk-stable-19.11.5
- 操作系统 CentOS Linux 版本 7.7.1908(核心)
- 内核 3.10.0-1062.el7.x86_64
网卡类型和驱动
- 0000:00:04.0 'Virtio 网络设备 1000' drv=igb_uio 未使用=virtio_pci,uio_pci_generic
用于运行应用程序的命令和 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,6),(1,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 PF/VF。有没有办法让它与 virtio 半虚拟化 NIC 一起工作?
说明链接如下: 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 仅适用于 Niantic NIC 假设不正确。因为 IPSEC-GW 应用程序可以运行任何具有 RX 卸载校验和可用的 NIC。列表在上面共享。
对于这个问题有没有办法让它与 virtio 半虚拟化 NIC 一起工作?可以总是禁用 RX_CHECKSUM 并在软件中执行 IPv4 的校验和 .但是您需要编辑应用程序并使用 rte_ip_cksum。