From: Simon Horman <simon.horman@corigine.com>
To: Suman Ghosh <sumang@marvell.com>
Cc: sgoutham@marvell.com, gakula@marvell.com, sbhatta@marvell.com,
hkelam@marvell.com, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, lcherian@marvell.com,
jerinj@marvell.com
Subject: Re: [net-next PATCH V2] octeontx2-af: Tc flower offload support for inner VLAN
Date: Sat, 29 Jul 2023 11:58:14 +0200 [thread overview]
Message-ID: <ZMTitp4+oc3+/D1U@corigine.com> (raw)
In-Reply-To: <20230727051252.2779804-1-sumang@marvell.com>
On Thu, Jul 27, 2023 at 10:42:52AM +0530, Suman Ghosh wrote:
...
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> index 1e6fc23eca4f..89836cd299e4 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> @@ -439,6 +439,64 @@ static int otx2_tc_parse_actions(struct otx2_nic *nic,
> return 0;
> }
>
> +static int otx2_tc_process_vlan(struct otx2_nic *nic, struct flow_msg *flow_spec,
> + struct flow_msg *flow_mask, struct flow_rule *rule,
> + struct npc_install_flow_req *req, bool is_inner)
> +{
Hi Suman,
Most of the code in this function seems to be moved from elsewhere.
It might make it slightly easier to review if there was a patch
that moved that code, then another patch that modified to
support the inner VLAN feature.
> + struct flow_match_vlan match;
> + u16 vlan_tci, vlan_tci_mask;
> +
> + if (is_inner)
> + flow_rule_match_cvlan(rule, &match);
> + else
> + flow_rule_match_vlan(rule, &match);
> +
> + if ((ntohs(match.key->vlan_tpid) != ETH_P_8021Q) &&
> + (ntohs(match.key->vlan_tpid) != ETH_P_8021AD)) {
I think eth_type_vlan() can be used here.
> + netdev_err(nic->netdev, "vlan tpid 0x%x not supported\n",
> + ntohs(match.key->vlan_tpid));
> + return -EOPNOTSUPP;
> + }
> +
> + if (!match.mask->vlan_id) {
> + struct flow_action_entry *act;
> + int i;
> +
> + flow_action_for_each(i, act, &rule->action) {
> + if (act->id == FLOW_ACTION_DROP) {
> + netdev_err(nic->netdev,
> + "vlan tpid 0x%x with vlan_id %d is not supported for DROP rule.\n",
> + ntohs(match.key->vlan_tpid), match.key->vlan_id);
> + return -EOPNOTSUPP;
> + }
> + }
> + }
> +
> + if (match.mask->vlan_id ||
> + match.mask->vlan_dei ||
> + match.mask->vlan_priority) {
> + vlan_tci = match.key->vlan_id |
> + match.key->vlan_dei << 12 |
> + match.key->vlan_priority << 13;
> +
> + vlan_tci_mask = match.mask->vlan_id |
> + match.mask->vlan_dei << 12 |
> + match.mask->vlan_priority << 13;
> +
> + if (is_inner) {
> + flow_spec->vlan_itci = htons(vlan_tci);
> + flow_mask->vlan_itci = htons(vlan_tci_mask);
> + req->features |= BIT_ULL(NPC_INNER_VID);
> + } else {
> + flow_spec->vlan_tci = htons(vlan_tci);
> + flow_mask->vlan_tci = htons(vlan_tci_mask);
> + req->features |= BIT_ULL(NPC_OUTER_VID);
> + }
> + }
> +
> + return 0;
> +}
> +
> static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
> struct flow_cls_offload *f,
> struct npc_install_flow_req *req)
> @@ -458,6 +516,7 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
> BIT(FLOW_DISSECTOR_KEY_BASIC) |
> BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
> BIT(FLOW_DISSECTOR_KEY_VLAN) |
> + BIT(FLOW_DISSECTOR_KEY_CVLAN) |
> BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
> BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
> BIT(FLOW_DISSECTOR_KEY_PORTS) |
> @@ -564,47 +623,19 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
> }
>
> if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_VLAN)) {
> - struct flow_match_vlan match;
> - u16 vlan_tci, vlan_tci_mask;
> -
> - flow_rule_match_vlan(rule, &match);
> -
> - if (ntohs(match.key->vlan_tpid) != ETH_P_8021Q) {
> - netdev_err(nic->netdev, "vlan tpid 0x%x not supported\n",
> - ntohs(match.key->vlan_tpid));
> - return -EOPNOTSUPP;
> - }
> + int ret;
>
> - if (!match.mask->vlan_id) {
> - struct flow_action_entry *act;
> - int i;
> -
> - flow_action_for_each(i, act, &rule->action) {
> - if (act->id == FLOW_ACTION_DROP) {
> - netdev_err(nic->netdev,
> - "vlan tpid 0x%x with vlan_id %d is not supported for DROP rule.\n",
> - ntohs(match.key->vlan_tpid),
> - match.key->vlan_id);
> - return -EOPNOTSUPP;
> - }
> - }
> - }
> -
> - if (match.mask->vlan_id ||
> - match.mask->vlan_dei ||
> - match.mask->vlan_priority) {
> - vlan_tci = match.key->vlan_id |
> - match.key->vlan_dei << 12 |
> - match.key->vlan_priority << 13;
> + ret = otx2_tc_process_vlan(nic, flow_spec, flow_mask, rule, req, false);
> + if (ret)
> + return ret;
> + }
>
> - vlan_tci_mask = match.mask->vlan_id |
> - match.mask->vlan_dei << 12 |
> - match.mask->vlan_priority << 13;
> + if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CVLAN)) {
> + int ret;
>
> - flow_spec->vlan_tci = htons(vlan_tci);
> - flow_mask->vlan_tci = htons(vlan_tci_mask);
> - req->features |= BIT_ULL(NPC_OUTER_VID);
> - }
> + ret = otx2_tc_process_vlan(nic, flow_spec, flow_mask, rule, req, true);
> + if (ret)
> + return ret;
> }
>
> if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IPV4_ADDRS)) {
> --
> 2.25.1
>
>
next prev parent reply other threads:[~2023-07-29 9:58 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-27 5:12 [net-next PATCH V2] octeontx2-af: Tc flower offload support for inner VLAN Suman Ghosh
2023-07-29 9:58 ` Simon Horman [this message]
2023-07-29 17:42 ` [EXT] " Suman Ghosh
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=ZMTitp4+oc3+/D1U@corigine.com \
--to=simon.horman@corigine.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gakula@marvell.com \
--cc=hkelam@marvell.com \
--cc=jerinj@marvell.com \
--cc=kuba@kernel.org \
--cc=lcherian@marvell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sbhatta@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox