【问题标题】:DPDK sample app ipsec-secgw failing with virtio NICDPDK 示例应用程序 ipsec-secgw 使用 virtio NIC 失败
【发布时间】:2021-01-20 09:06:02
【问题描述】:

我尝试使用以下版本运行 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 used=virtio_pci,uio_pci_generic

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

./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 一起工作?

说明链接如下: Instructions

【问题讨论】:

    标签: dpdk ipsec


    【解决方案1】:

    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

    【讨论】:

    • 谢谢!看起来 virtio 不在列表中。所以在结构静态结构 rte_eth_conf port_conf 设置.offloads = DEV_RX_OFFLOAD_CHECKSUM.offloads = 0 现在应该可以解决问题。也许使用lib/librte_net/rte_ip.h 中的rte_ 库函数来计算软件中的校验和。我会尝试一下,让你知道结果如何。
    • 您似乎已经理解了解释的问题。请接受并支持
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多