82599 网卡 DPDK vxlan inner L4 checksum offload

思想

以IXGBE驱动为例,看一下如何让把内层报文Checksum的计算Offload给网卡。

本质上来说,是在DPDK的mbuf结构中:
将L2 Header的长度配置为外层VxLAN报文+内层L2 Header的总长度,这样对网卡来说,该mbuf对应的报文就是一个L2 Header长得令人发指的普通非隧道报文
但是这样就可以计算内层L3/L4 Header的Checksum了。

ixgbe_tx_offload

在DPDK的IXGBE驱动代码中有如下结构体:

/** Offload features */
union ixgbe_tx_offload {
    uint64_t data[2];
    struct {
        uint64_t l2_len:7; /**< L2 (MAC) Header Length. */
        uint64_t l3_len:9; /**< L3 (IP) Header Length. */
        uint64_t l4_len:8; /**< L4 (TCP/UDP) Header Length. */
        uint64_t tso_segsz:16; /**< TCP TSO segment size */
        uint64_t vlan_tci:16;
        /**< VLAN Tag Control Identifier (CPU order). */

        /* fields for TX offloading of tunnels */
        uint64_t outer_l3_len:8; /**< Outer L3 (IP) Hdr Length. */
        uint64_t outer_l2_len:8; /**< Outer L2 (MAC) Hdr Length. */
#ifdef RTE_LIBRTE_SECURITY
        /* inline ipsec related*/
        uint64_t sa_idx:8;  /**< TX SA database entry index */
        uint64_t sec_pad_len:4; /**< padding length */
#endif
    };
};

这里面l2_len是占了7个比特位,也就是说你外层报文头长度+内层L2 Header长度不要大于127Byte。
另外代码中还有一些ol_flags的配置,也需要结合需求一起配置。

ol_flags

ol_flags: offload features flag.
在这里插入图片描述
在这里插入图片描述

网卡支持的 offload 特性 和 Mbuf 的 ol_flags 标记对应。

1》网卡支持 TX_OFFLOAD_IPV4_CKSUM
说明网卡支持 发包的tx ipv4 checksum,那么就可以给 mbuf 的 ol_flags 设置上 PKT_TX_IPV4 | PKT_TX_IP_CSUM 标记。
在网卡发包时,发现mbuf存在这样的标记 && 自身支持 tx ipv4 offload ,就会进行 tx ipv4 offload.

对于 vxlan报文:
外层的 UDP的checksum也可以不进行软件计算,直接设置为0.
内层的 TCP/UDP 的checksum 通过 rte_ipv4_phdr_cksum 计算伪头的checksum, 然后进行offload。

参考:dpdk mbuf lib

参考

https://decodezp.github.io/2019/07/16/test15-dpdk-vxlan-csum-offload/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值