From: Simon Horman <horms@kernel.org>
To: rkannoth@marvell.com
Cc: Simon Horman <horms@kernel.org>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, sgoutham@marvell.com,
sumang@marvell.com, gakula@marvell.com
Subject: Re: [PATCH net-next] octeontx2-af: add NPC TEID matching for GTP-U and GTP-C flows
Date: Tue, 11 Aug 2026 12:25:09 +0100 [thread overview]
Message-ID: <20260811112509.829542-1-horms@kernel.org> (raw)
In-Reply-To: <20260810050436.1822566-1-rkannoth@marvell.com>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
Full review at: https://sashiko.dev/#/patchset/20260810050436.1822566-1-rkannoth@marvell.com?part=1
---
--- Patch [1]: [PATCH net-next] octeontx2-af: add NPC TEID matching for GTP-U and GTP-C flows ---
commit 98f9555a96987d26df070fd9f55b613312f67f14
Author: Suman Ghosh <sumang@marvell.com>
Subject: octeontx2-af: add NPC TEID matching for GTP-U and GTP-C flows
This patch adds NPC_GTPU_TEID and NPC_GTPC_TEID key fields to support
ethtool Rx flow rules matching on GTP-U and GTP-C TEIDs. It wires these
fields through the AF MCAM path and exposes them in debugfs.
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/mbox.h b/drivers/net/ethernet/marvell/octeontx2/af/mbox.h
> --- a/drivers/net/ethernet/marvell/octeontx2/af/mbox.h
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/mbox.h
> @@ -1839,6 +1839,8 @@ struct flow_msg {
> u8 next_header;
> };
> __be16 vlan_itci;
> + __be32 gtpu_teid;
> + __be32 gtpc_teid;
[Severity: Critical]
Is it safe to insert these new fields in the middle of struct flow_msg?
Since this structure is embedded in the npc_install_flow_req mailbox message,
wouldn't this shift the memory offsets of all subsequent fields (like mpls_lse
and the trailing fields in npc_install_flow_req)? This might break the PF/VF
mailbox ABI for older VFs communicating with a newer PF, potentially allowing
corrupted state.
> #define OTX2_FLOWER_MASK_MPLS_LB GENMASK(31, 12)
> #define OTX2_FLOWER_MASK_MPLS_TC GENMASK(11, 9)
> #define OTX2_FLOWER_MASK_MPLS_BOS BIT(8)
[ ... ]
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/npc.h b/drivers/net/ethernet/marvell/octeontx2/af/npc.h
> --- a/drivers/net/ethernet/marvell/octeontx2/af/npc.h
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/npc.h
> @@ -214,6 +214,8 @@ enum key_fields {
> NPC_DPORT_UDP,
> NPC_SPORT_SCTP,
> NPC_DPORT_SCTP,
> + NPC_GTPU_TEID,
> + NPC_GTPC_TEID,
[Severity: Critical]
Could inserting these enum values in the middle break the PF/VF mailbox ABI
bitmask?
The integer values of enum key_fields are used as bit indices for the
req->features bitmask sent over the mailbox. Inserting here shifts the integer
values of NPC_IPSEC_SPI and all subsequent fields. An older VF requesting an
IPSec rule using the old bit index might have its request misinterpreted by the
new PF as a GTP rule.
> NPC_IPSEC_SPI,
> NPC_MPLS1_LBTCBOS,
> NPC_MPLS1_TTL,
[ ... ]
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
> @@ -3437,6 +3437,14 @@ static void rvu_dbg_npc_mcam_show_flows(struct seq_file *s,
> seq_printf(s, "%d ", rule->packet.icmp_code);
> seq_printf(s, "mask 0x%x\n", rule->mask.icmp_code);
> break;
> + case NPC_GTPU_TEID:
> + seq_printf(s, "%d ", ntohl(rule->packet.gtpu_teid));
> + seq_printf(s, "mask 0x%x\n", ntohl(rule->mask.gtpu_teid));
[Severity: Low]
Does the %d format specifier display the unsigned 32-bit TEID correctly here?
If a TEID has its most significant bit set, it appears it will be printed as a
negative number instead of an unsigned value. Using %u might be preferred.
> + break;
[ ... ]
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c
> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c
[ ... ]
> @@ -720,9 +724,10 @@ static void npc_set_features(struct rvu *rvu, int blkaddr, u8 intf)
> *features |= BIT_ULL(NPC_IPPROTO_ICMP6);
> }
>
> - /* for ESP, check if corresponding layer type is present in the key */
> + /* for ESP/GTP-U/GTP-C check if corresponding layer type is present in the key */
> if (npc_check_field(rvu, blkaddr, NPC_LE, intf))
> - *features |= BIT_ULL(NPC_IPPROTO_ESP);
> + *features |= BIT_ULL(NPC_IPPROTO_ESP) | BIT_ULL(NPC_GTPU_TEID) |
> + BIT_ULL(NPC_GTPC_TEID);
[Severity: High]
Is it intentional to advertise BIT_ULL(NPC_GTPU_TEID) and
BIT_ULL(NPC_GTPC_TEID) without specifically validating them via
npc_check_field()?
If the hardware Key Extraction (KEX) profile doesn't actually extract the
TEID bytes, claiming support for these features could result in rules being
accepted by otx2_prepare_flow_request() but silently ignored when programming
them in npc_update_entry().
[ ... ]
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
[ ... ]
> @@ -1036,8 +1038,29 @@ static int otx2_prepare_flow_request(struct ethtool_rx_flow_spec *fsp,
> return -EOPNOTSUPP;
> }
> if (fsp->flow_type & FLOW_EXT) {
> + int skip_user_def = false;
> u16 vlan_etype;
>
> + switch (flow_type) {
> + case UDP_V4_FLOW:
> + case UDP_V6_FLOW:
> + case TCP_V4_FLOW:
> + case TCP_V6_FLOW:
> + if (ntohs(pkt->dport) == GTPU_PORT) {
[Severity: Medium]
Should we also verify that the port mask is exact (0xFFFF) before inferring
the GTP protocol?
If a user configures a broad UDP matching rule with a base port that aligns
with 2152 under its mask, this logic might misinterpret it as a GTP rule
and apply TEID features incorrectly.
> + /* Check for GTP-U packets */
> + skip_user_def = true;
[Severity: Medium]
Is the skip_user_def variable used anywhere after being set to true?
If a user requests a GTP flow rule with a TEID of 1 (which equals
OTX2_DEFAULT_ACTION), the fallback else if condition later in this function
checks if fsp->h_ext.data[1] == cpu_to_be32(OTX2_DEFAULT_ACTION). Because
skip_user_def is never evaluated, wouldn't this incorrectly override the
requested Rx queue action with NIX_RX_ACTION_DEFAULT?
> + pkt->gtpu_teid = fsp->h_ext.data[1];
> + pmask->gtpu_teid = fsp->m_ext.data[1];
> + req->features |= BIT_ULL(NPC_GTPU_TEID);
> + } else if (ntohs(pkt->dport) == GTPC_PORT) {
> + /* Check for GTP-C packets */
> + skip_user_def = true;
> + pkt->gtpc_teid = fsp->h_ext.data[1];
> + pmask->gtpc_teid = fsp->m_ext.data[1];
> + req->features |= BIT_ULL(NPC_GTPC_TEID);
> + }
> + }
> +
[ ... ]
prev parent reply other threads:[~2026-08-11 11:25 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 5:04 [PATCH net-next] octeontx2-af: add NPC TEID matching for GTP-U and GTP-C flows Ratheesh Kannoth
2026-08-11 11:25 ` Simon Horman [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260811112509.829542-1-horms@kernel.org \
--to=horms@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gakula@marvell.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rkannoth@marvell.com \
--cc=sgoutham@marvell.com \
--cc=sumang@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.