Thread (8 messages) flat view 8 messages, 3 authors, 2021-08-03

Re: [PATCH net-next v2 4/4] net: marvell: prestera: Offload FLOW_ACTION_POLICE

From: Volodymyr Mytnyk [C] <hidden>
Date: 2021-08-03 16:19:22
Also in: lkml

Hi Ido,

Thanks for the review. Pls see the comments inline.
On Mon, Aug 02, 2021 at 05:08:49PM +0300, Vadym Kochan wrote:
quoted
diff --git a/drivers/net/ethernet/marvell/prestera/prestera_flower.c b/drivers/net/ethernet/marvell/prestera/prestera_flower.c
index e571ba09ec08..76f30856ac98 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_flower.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_flower.c
@@ -5,6 +5,8 @@
 #include "prestera_acl.h"
 #include "prestera_flower.h"

+#define PRESTERA_HW_TC_NUM   8
+
 static int prestera_flower_parse_actions(struct prestera_flow_block *block,
                                        struct prestera_acl_rule *rule,
                                        struct flow_action *flow_action,
@@ -30,6 +32,11 @@ static int prestera_flower_parse_actions(struct prestera_flow_block *block,
               case FLOW_ACTION_TRAP:
                       a_entry.id = PRESTERA_ACL_RULE_ACTION_TRAP;
                       break;
+             case FLOW_ACTION_POLICE:
+                     a_entry.id = PRESTERA_ACL_RULE_ACTION_POLICE;
+                     a_entry.police.rate = act->police.rate_bytes_ps;
+                     a_entry.police.burst = act->police.burst;
If packet rate based policing is not supported, an error should be
returned here with extack.
Agree, it makes sense.
It seems the implementation assumes that each rule has a different
policer, so an error should be returned in case the same policer is
shared between different rules.
Each rule has a different policer assigned by HW. Do you mean the police.index should be checked here ?
quoted
+                     break;
               default:
                       NL_SET_ERR_MSG_MOD(extack, "Unsupported action");
                       pr_err("Unsupported action\n");
@@ -110,6 +117,17 @@ static int prestera_flower_parse(struct prestera_flow_block *block,
               return -EOPNOTSUPP;
       }

+     if (f->classid) {
+             int hw_tc = __tc_classid_to_hwtc(PRESTERA_HW_TC_NUM, f->classid);
+
+             if (hw_tc < 0) {
+                     NL_SET_ERR_MSG_MOD(f->common.extack, "Unsupported HW TC");
+                     return hw_tc;
+             }
+
+             prestera_acl_rule_hw_tc_set(rule, hw_tc);
+     }
Not sure what this is. Can you show a command line example of how this
is used?
This is HW traffic class used for packets that are trapped to CPU port. The usage is as the following:

tc qdisc add dev DEV clsact
tc filter add dev DEV ingress flower skip_sw dst_mac 00:AA:AA:AA:AA:00 hw_tc 1 action trap
What about visibility regarding number of packets that were dropped by
the policer?
This is not support at this moment by the driver, so it is always zero now.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help