TestPMD使用中的 ixgbe filter 设置

640?wx_fmt=jpeg

作者简介

赵伟  

intel软件工程师

主要从事DPDK开发与测试工作。

640?wx_fmt=gif

使用TestPMD时,我们经常需要将包放入指定队列中。ixgbe网卡已经提供了此种可能,相信下面关于ixgbe filter 的一些背景知识也会有所帮助。ixgbe支持多种型号的网卡,例如82599、x540、x550和x552等等。不同型号网卡的filter类型不同,filter的类型决定了接受包的目的队列,下面将一一讲解。目前,DPDK已通过rte_flowAPI在 pf口号中使用这些filter,用户可使用TestPMD应用进行体验。该应用通过rte_flowAPI创建或删除这些ixgbe filter 。当然,API在filter 配置中还另有作用,但不属于本文的讨论范围。

《TestpmdApplication User Guide》的4.12部分提供了关于TestPMD中使用rte_flow的基本信息,请参照其中的介绍。本文将重点分析在rte_flow指令和API的使用中,一些限制ixgbefilter 的关键参数。

ixgbe网卡在收包时会根据上述标准及以下的顺序将包分配至相应队列:

•L2 EtherType filter (如果匹配)

此类filter 识别的是包的L2Ethertype,识别后将它们分配到接受队列。

•L3/L4 5-tuple filter (如果匹配)

此类filter 识别的是某些或成组的L3/L4 flow。filter由5-tuple(协议、IP的源地址和目的地址、TCP、UDP和SCTP的源端口号和目的端口号)构成,识别后将包分配到一个Rx队列中。82599和x540型号的网卡中有128个此类filter ,而 X550和X552中则没有.

•SYN filter (如果匹配)

导流TCP包,同时将包的SYN标志设置成独立的队列。

•flow director filter (如果匹配)

此类filter 识别的是某些或几组flow,并将它们分配至特定队列中。X550和X552型号支持三种不同模式的flowdirector (PERFECT、MAC_VLAN和TUNNEL),但82599和x540型号只支持PERFECT模式.

PERFECT:5-tuple filter

MAC_VLAN:MAC, VLAN 过滤

TUNNEL:NVGRE或者VXLAN 过滤

•RSS (如果匹配)

RSS(接收方扩展)将包分配至不同的描述符队列中,包处理在多个处理器内核上进行。

•  分配至零队列

PART 1

Ethertype

(x540、x552、x550 和 82599可以支持)

****PATTERN****

  1. 第一个非void的item必须为ETH.

  2. 源MAC地址必须进行掩码; 目标MAC地址也必须被完全掩码. 也就是被掩码的说源MAC地址应为{0x00, 0x00, 0x00, 0x00, 0x00, 0x00};被掩码的目标MAC地址应为{0x00, 0x00, 0x00, 0x00, 0x00, 0x00} .

  3. ETH的EtherType 字段的值不应是0x0800和0x86DD;

  4. 接下来的非void item必须是END. 

640?wx_fmt=png

****ACTIONS****

  1. 第一个非void action应为QUEUE. 如果是QUEUE, queue id < queue number.

  2. 接下来的非void action应为END.

640?wx_fmt=png


PART 2

 n-tuple 

(x540和82599可以支持)

****PATTERN****
  1. 第一个非void item可以是ETH或IPV4.

  2. 如果第一个是ETH,第二个非void的item必须是IPV4.

  3. 第三个非void item必须是UDP、TCP或者SCTP,只有src_port和dst_port不需掩码,其他的字段需要掩码.

  4. 接下来的非void item必须是END.

640?wx_fmt=png

****ACTIONS****

  1. 第一个非void action应为QUEUE. 如果QUEUE, queue id < queue number.

  2. 接下来的非void action 应为END.

640?wx_fmt=png

PART 3

   SYN   

 (x540、x552、x550和82599可以支持)

****PATTERN****

  1. 第一个非void item必须是ETH.

  2. 第二个非void item必须是IPV4 or IPV6.

  3. 第三个非void item 必须是TCP, 只有tcp_flags不需掩码, 其他字段需要掩码.

  4. 接下来的非void item 必须是END.

640?wx_fmt=png

****ACTIONS****

  1. 第一个非void action应为QUEUE. 如果QUEUE, queue id < queue number.

  2. 接下来的非void action应为END.

640?wx_fmt=png


PART 4

Flow directory

****UDP/TCP/SCTPPATTERN****

(82599、x540、x552和x550可以支持)\

  1. 第一个非void item可以是ETH或IPV4.

  2. 如果第一个是ETH,则第二个非void item必须是IPV4.

  3. 第三个非void item必须是UDP、TCP或者SCTP, 只有src_port和dst_port不需要掩码,其他字段需要掩码.

  4. 接下来的非void item必须是END.

640?wx_fmt=png

****MACVLAN PATTERN****

(x552和x550可以支持)

  1. 第一个非void item必须是ETH.

  2. 第二个非void item必须是MAC VLAN.

  3. 接下来的非void item必须是END.

640?wx_fmt=png

****VxLAN PATTERN****

(x552和x550可以支持)

  1. 第一个非void item 必须是ETH.

  2. 第二个非void item 必须是ipv4或ipv6

  3. 第三个非void item 必须是vxlan.

  4. 接下来的非void item 必须是ETH.

  5. 接下来的非void item 必须是VLAN.

  6. 接下来的非void item 必须是END.

640?wx_fmt=png

**** NVGRE PATTERN****

(x552和x550可以支持)

  1. 第一个非void item 必须是 ETH.

  2. 第二个非void item 必须是 IPV4或 IPV6.

  3. 第三个非void item 必须是 NVGRE.

  4. 接下来的非void item 必须是 ETH.

  5. 接下来的非void item 必须是 VLAN.

  6. 接下来的非void item 必须是 END.

640?wx_fmt=png

****ACTIONS****

  1. 第一个非void action 应为QUEUE或DROP. 如果是QUEUE, queue id < queue number.

  2. NIC 82599只支持DROP for TCP/UDP packet, and x550/552support DROP for for TCP/UDP/SCTP packet.

  3. 82599/x550/x552 support QUEUEfor TCP/UDP/ SCTP packet.

  4. 第二个非void action应为MARK, mark_id is a uint32_t number.

  5. 接下来的非void action应为END.

640?wx_fmt=png

****flexiblePATTERN****

(x552和x550可以支持)

  1. 第一个非void item必须是ETH或IPV4.

  2. 如果第一个是ETH,则第二个非void item 必须是 IPV4.

  3. 接下来的非void item可以是UDP、TCP 或SCTP, 只有src_port和dst_port不需掩码, 其他字段需要掩码. (不强制)

  4. 接下来的非void item可以是RAW (对于flex byte不强制)

要求:

spec.relative=0         mask.relative=0x1

spec.search=0          mask.search=0x1

spec.reserved = 0   mask.reserved = 0x3fffffff              

spec.offset <= 62       mask.offset = 0xffffffff

spec.limit = 0              mask.limit= 0xffff

spec.length = 2          mask.length= 0xffff           

5.接下来的非void item 必须是 END.

640?wx_fmt=png

PART 5

  举例说明  

Syn:

./usertools/dpdk-devbind.py -b igb_uio 07:00.0

./x86_64-native-linuxapp-gcc/app/testpmd -c ff -n 4 – -i--rxq=8 --txq=8

n-tuple:

./usertools/dpdk-devbind.py -b igb_uio 03:00.0

testpmd> start

testpme> flow create 0 ingresspattern eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 proto is 17 / udp srcis 22 dst is 23 / end actions queue index 1 / end

vxlan:

./usertools/dpdk-devbind.py -b igb_uio 03:00.0

关于flexible filter 

目前,flexible filter 配置格式并不是十分友好,因为用户需要给出5 tuple 参数和2 byte pattern的配置,所以相应的命令应为:

flowcreate 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcpsrc is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 searchmask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffffpattern is ab pattern is cd / end actions queue index 2 / end

之后的DPDK19.08版本中,会有新增的补丁,支持不受5 tuple参数影响、相对独立的flexible filter ,如下:

flowcreate 0 ingress pattern raw relative spec 0 relative mask 1 search spec 0search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask0xffff pattern is 0xab / end actions queue index 2 / end

FDIR flexible filter用户将会有更加自由灵活的使用体验。


640?wx_fmt=png
640?wx_fmt=png
端午节快乐
640?wx_fmt=png

    转载须知   

 推荐阅读 


640?wx_fmt=jpeg


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值