From: Chenmin Sun Date: Wed, 26 Feb 2020 11:22:35 +0000 (+0800) Subject: flow: add vlan tagged types for IPv4/IPv6 5-tuple flows X-Git-Tag: v20.09-rc0~464 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=f13830ce76873390e7d3080e66d5ddb5234754f0 flow: add vlan tagged types for IPv4/IPv6 5-tuple flows Add new flow type IP4_N_TUPLE_TAGGED and IP6_N_TUPLE_TAGGED for vlan tag sensitive flows The original IP4_N_TUPLE and IP6_N_TUPLE will not match VLAN anymore Type: feature Signed-off-by: Chenmin Sun Change-Id: Ie511e9a64126440fe81f29665a56ca060061662d --- diff --git a/src/plugins/dpdk/device/flow.c b/src/plugins/dpdk/device/flow.c index 85a62bbf46b..dd62ba5c73b 100644 --- a/src/plugins/dpdk/device/flow.c +++ b/src/plugins/dpdk/device/flow.c @@ -32,6 +32,11 @@ #define FLOW_IS_L2_LAYER(f) \ (f->type == VNET_FLOW_TYPE_ETHERNET) +/* check if flow is VLAN sensitive */ +#define FLOW_IS_VLAN_TAGGED(f) \ + ((f->type == VNET_FLOW_TYPE_IP4_N_TUPLE_TAGGED) || \ + (f->type == VNET_FLOW_TYPE_IP6_N_TUPLE_TAGGED)) + /* check if flow is L4 type */ #define FLOW_IS_L4_LAYER(f) \ ((f->type == VNET_FLOW_TYPE_IP4_N_TUPLE) || \ @@ -134,9 +139,7 @@ dpdk_flow_add (dpdk_device_t * xd, vnet_flow_t * f, dpdk_flow_entry_t * fe) item->mask = NULL; } - /* VLAN */ - if ((f->type == VNET_FLOW_TYPE_IP4_N_TUPLE) || - (f->type == VNET_FLOW_TYPE_IP6_N_TUPLE)) + if (FLOW_IS_VLAN_TAGGED (f)) { vec_add2 (items, item, 1); item->type = RTE_FLOW_ITEM_TYPE_VLAN; diff --git a/src/vnet/flow/flow.h b/src/vnet/flow/flow.h index 5def01a08ef..bd62135649b 100644 --- a/src/vnet/flow/flow.h +++ b/src/vnet/flow/flow.h @@ -29,6 +29,8 @@ /* l4 flow*/ \ _(IP4_N_TUPLE, ip4_n_tuple, "ipv4-n-tuple") \ _(IP6_N_TUPLE, ip6_n_tuple, "ipv6-n-tuple") \ + _(IP4_N_TUPLE_TAGGED, ip4_n_tuple_tagged, "ipv4-n-tuple-tagged") \ + _(IP6_N_TUPLE_TAGGED, ip6_n_tuple_tagged, "ipv6-n-tuple-tagged") \ /* L4 tunnel flow*/ \ _(IP4_VXLAN, ip4_vxlan, "ipv4-vxlan") \ _(IP6_VXLAN, ip6_vxlan, "ipv6-vxlan") \ @@ -58,6 +60,21 @@ _fe(ip_port_and_mask_t, dst_port) \ _fe(ip_protocol_t, protocol) +#define foreach_flow_entry_ip4_n_tuple_tagged \ + _fe(ip4_address_and_mask_t, src_addr) \ + _fe(ip4_address_and_mask_t, dst_addr) \ + _fe(ip_port_and_mask_t, src_port) \ + _fe(ip_port_and_mask_t, dst_port) \ + _fe(ip_protocol_t, protocol) + +#define foreach_flow_entry_ip6_n_tuple_tagged \ + _fe(ip6_address_and_mask_t, src_addr) \ + _fe(ip6_address_and_mask_t, dst_addr) \ + _fe(ip_port_and_mask_t, src_port) \ + _fe(ip_port_and_mask_t, dst_port) \ + _fe(ip_protocol_t, protocol) + + #define foreach_flow_entry_ip4_vxlan \ _fe(ip4_address_t, src_addr) \ _fe(ip4_address_t, dst_addr) \