From: Ivan Malov Date: Wed, 13 Oct 2021 13:15:10 +0000 (+0300) Subject: net/sfc: override match fields in tunnel offload jump rules X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=8efb2f537ee09d2ef2379294208670f5236262cd;p=dpdk.git net/sfc: override match fields in tunnel offload jump rules The current HW/FW doesn't allow to match on MAC addresses in outer rules. One day this will change for sure, but right now a workaround is needed. Match on VLAN presence in outer rules is also unsupported. Ignore it. Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko --- diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c index 2515b9a80a..c972c2e3f2 100644 --- a/drivers/net/sfc/sfc_mae.c +++ b/drivers/net/sfc/sfc_mae.c @@ -1525,6 +1525,7 @@ sfc_mae_rule_parse_item_eth(const struct rte_flow_item *item, struct rte_flow_error *error) { struct sfc_mae_parse_ctx *ctx_mae = ctx->mae; + struct rte_flow_item_eth override_mask; struct rte_flow_item_eth supp_mask; const uint8_t *spec = NULL; const uint8_t *mask = NULL; @@ -1542,6 +1543,22 @@ sfc_mae_rule_parse_item_eth(const struct rte_flow_item *item, if (rc != 0) return rc; + if (ctx_mae->ft_rule_type == SFC_FT_RULE_JUMP && mask != NULL) { + /* + * The HW/FW hasn't got support for match on MAC addresses in + * outer rules yet (this will change). Match on VLAN presence + * isn't supported either. Ignore these match criteria. + */ + memcpy(&override_mask, mask, sizeof(override_mask)); + memset(&override_mask.hdr.dst_addr, 0, + sizeof(override_mask.hdr.dst_addr)); + memset(&override_mask.hdr.src_addr, 0, + sizeof(override_mask.hdr.src_addr)); + override_mask.has_vlan = 0; + + mask = (const uint8_t *)&override_mask; + } + if (spec != NULL) { struct sfc_mae_pattern_data *pdata = &ctx_mae->pattern_data; struct sfc_mae_ethertype *ethertypes = pdata->ethertypes;