Skip to content

Commit

Permalink
common/cnxk: fix VLAN check for inner header
Browse files Browse the repository at this point in the history
Adding the has vlan check in inner headers i.e in LF layer. If
has_vlan is 0 it should be masked out while installing flow rule.

Fixes: c34ea71 ("common/cnxk: add NPC parsing API")
Cc: [email protected]

Signed-off-by: Harman Kalra <[email protected]>
  • Loading branch information
harman-kalra authored and jerinjacobk committed Jan 3, 2024
1 parent c52b38b commit 100c49c
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions drivers/common/cnxk/roc_npc_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -1097,6 +1097,7 @@ npc_parse_lf(struct npc_parse_state *pst)
{
const struct roc_npc_item_info *pattern, *last_pattern;
char hw_mask[NPC_MAX_EXTRACT_HW_LEN];
const struct roc_npc_flow_item_eth *eth_item;
struct npc_parse_item_info info;
int lid, lt, lflags;
int nr_vlans = 0;
Expand All @@ -1113,10 +1114,12 @@ npc_parse_lf(struct npc_parse_state *pst)
lt = NPC_LT_LF_TU_ETHER;
lflags = 0;

eth_item = pst->pattern->spec;

/* No match support for vlan tags */
info.def_mask = NULL;
info.hw_mask = NULL;
info.len = pst->pattern->size;
info.len = sizeof(eth_item->hdr);
info.spec = NULL;
info.mask = NULL;
info.hw_hdr_len = 0;
Expand Down Expand Up @@ -1147,12 +1150,15 @@ npc_parse_lf(struct npc_parse_state *pst)
}

info.hw_mask = &hw_mask;
info.len = pst->pattern->size;
info.len = sizeof(eth_item->hdr);
info.hw_hdr_len = 0;
npc_get_hw_supp_mask(pst, &info, lid, lt);
info.spec = NULL;
info.mask = NULL;

if (eth_item && eth_item->has_vlan)
pst->set_vlan_ltype_mask = true;

rc = npc_parse_item_basic(pst->pattern, &info);
if (rc != 0)
return rc;
Expand Down

0 comments on commit 100c49c

Please sign in to comment.