Skip to content

Commit

Permalink
netdev-offload-dpdk: Pass L4 proto-id to match in the L3 rte_flow_item
Browse files Browse the repository at this point in the history
The offload layer clears the L4 protocol mask in the L3 item, when the
L4 item is passed for matching, as an optimization. This can be confusing
while parsing the headers in the PMD. Also, the datapath flow specifies
this field to be matched. This optimization is best left to the PMD.
This patch restores the code to pass the L4 protocol type in L3 match.

Fixes: e8a2b5b ("netdev-dpdk: implement flow offload with rte flow")
Signed-off-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Acked-by: Eli Britstein <elibr@mellanox.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
  • Loading branch information
sbasavapatna authored and ovsrobot committed Oct 20, 2020
1 parent 2c5a48c commit 30cc972
Showing 1 changed file with 0 additions and 23 deletions.
23 changes: 0 additions & 23 deletions lib/netdev-offload-dpdk.c
Expand Up @@ -676,7 +676,6 @@ static int
parse_flow_match(struct flow_patterns *patterns,
struct match *match)
{
uint8_t *next_proto_mask = NULL;
struct flow *consumed_masks;
uint8_t proto = 0;

Expand Down Expand Up @@ -782,7 +781,6 @@ parse_flow_match(struct flow_patterns *patterns,
/* Save proto for L4 protocol setup. */
proto = spec->hdr.next_proto_id &
mask->hdr.next_proto_id;
next_proto_mask = &mask->hdr.next_proto_id;
}
/* If fragmented, then don't HW accelerate - for now. */
if (match->wc.masks.nw_frag & match->flow.nw_frag) {
Expand Down Expand Up @@ -825,7 +823,6 @@ parse_flow_match(struct flow_patterns *patterns,

/* Save proto for L4 protocol setup. */
proto = spec->hdr.proto & mask->hdr.proto;
next_proto_mask = &mask->hdr.proto;
}

if (proto != IPPROTO_ICMP && proto != IPPROTO_UDP &&
Expand Down Expand Up @@ -858,11 +855,6 @@ parse_flow_match(struct flow_patterns *patterns,
consumed_masks->tcp_flags = 0;

add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_TCP, spec, mask);

/* proto == TCP and ITEM_TYPE_TCP, thus no need for proto match. */
if (next_proto_mask) {
*next_proto_mask = 0;
}
} else if (proto == IPPROTO_UDP) {
struct rte_flow_item_udp *spec, *mask;

Expand All @@ -879,11 +871,6 @@ parse_flow_match(struct flow_patterns *patterns,
consumed_masks->tp_dst = 0;

add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_UDP, spec, mask);

/* proto == UDP and ITEM_TYPE_UDP, thus no need for proto match. */
if (next_proto_mask) {
*next_proto_mask = 0;
}
} else if (proto == IPPROTO_SCTP) {
struct rte_flow_item_sctp *spec, *mask;

Expand All @@ -900,11 +887,6 @@ parse_flow_match(struct flow_patterns *patterns,
consumed_masks->tp_dst = 0;

add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_SCTP, spec, mask);

/* proto == SCTP and ITEM_TYPE_SCTP, thus no need for proto match. */
if (next_proto_mask) {
*next_proto_mask = 0;
}
} else if (proto == IPPROTO_ICMP) {
struct rte_flow_item_icmp *spec, *mask;

Expand All @@ -921,11 +903,6 @@ parse_flow_match(struct flow_patterns *patterns,
consumed_masks->tp_dst = 0;

add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_ICMP, spec, mask);

/* proto == ICMP and ITEM_TYPE_ICMP, thus no need for proto match. */
if (next_proto_mask) {
*next_proto_mask = 0;
}
}

add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_END, NULL, NULL);
Expand Down

0 comments on commit 30cc972

Please sign in to comment.