我正在尝试使用DPDK剥离MPLS报头,我已经使用flow_filtering示例应用程序作为开始,并尝试在模式中添加另一项:以太网MPLS IPv4 END,我添加了以下操作:RTE_FLOW_ACTION_TYPE_OF_POP_MPLS RTE_FLOW_ACTION_TYPE_END但在执行代码时会引发以下错误:无法创建流16消息:不支持的操作。
下面是代码片段:
action[0].type = RTE_FLOW_ACTION_TYPE_OF_POP_MPLS;
action[1].type = RTE_FLOW_ACTION_TYPE_END;
pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH;
pattern[1].type = RTE_FLOW_ITEM_TYPE_MPLS;
memset(&ip_spec, 0, sizeof(struct rte_flow_item_ipv4));
memset(&ip_mask, 0, sizeof(struct rte_flow_item_ipv4));
ip_spec.hdr.dst_addr = htonl(dest_ip);
ip_mask.hdr.dst_addr = dest_mask;
ip_spec.hdr.src_addr = htonl(src_ip);
ip_mask.hdr.src_addr = src_mask;
pattern[2].type = RTE_FLOW_ITEM_TYPE_IPV4;
pattern[2].spec = &ip_spec;
pattern[2].mask = &ip_mask;
pattern[3].type = RTE_FLOW_ITEM_TYPE_END;
res = rte_flow_validate(port_id, &attr, pattern, action, error);
通过删除模式[1]。类型= RTE_FLOW_ITEM_TYPE_MPLS;和操作[0]。类型= POP MPLS的路由流操作类型;.代码工作正常。
我试图改变模式中的MPLS顺序,即使MPLS头驻留在L2和L3层之间,但没有使用。
版本号:
Linux操作系统:CentOS 7
DPDK日期:19.08.2
网卡:X520
固件版本:18.5.17
1条答案
按热度按时间roejwanj1#
对于Intel NIC
X520
,错误消息***Flow cannot be created 16(无法创建流)消息:不支持的操作***是正确的预期行为。因此DPDK IXGBE PMD驱动程序中没有问题。说明:
1.有多个过滤器标签(如vlan,IP,TCP,UDP,MPLS)沿着各种操作项(push pop vlan,push pop mpsl,dec inc mpls ttl,...等)。但不是所有的过滤器和操作都被所有的NIC支持(因为这些是可选的)。
1.请参阅***表1.3网络驱动程序中rte_flow操作的可用性***(链接here),该表将每个NIC PMDMap到操作。未显示IXGBE以支持MPLS操作。
1.检查PMD代码here,甚至显示支持的过滤器字段。
因此,代码和IXGBE PMD行为是一致的,没有错误。
X550
支持不支持的功能是不正确的。[编辑-1]
according to the sheet, none of the drivers support the "of_pop_mpls" action which implies that we can't strip off the MPLS header using RTE_FLOWS
这是正确的理解,到目前为止,目前可用的基础NIC显示没有支持MPLS POP/PUSH。但我熟悉的英特尔NIC FM 10 K允许MPLS POP/PUSH,但我没有看到DPDK支持该NIC。因此,您有2个选项,
注意:大多数NIC支持PTYPE,也可以解析MPLS和保存tinrte_mbuf。这在使用软件方法时也会有所帮助。