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 <ivan.malov@oktetlabs.ru> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
This commit is contained in:
parent
7e5b479803
commit
8efb2f537e
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user