From: Victor Nogueira <victor@mojatatu.com>
To: jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, netdev@vger.kernel.org
Cc: mleitner@redhat.com, vladbu@nvidia.com, horms@kernel.org,
pctammela@mojatatu.com, kernel@mojatatu.com
Subject: [PATCH net-next v2 2/3] net/sched: cls_api: Expose tc block ports to the datapath
Date: Sat, 19 Aug 2023 13:35:13 -0300 [thread overview]
Message-ID: <20230819163515.2266246-3-victor@mojatatu.com> (raw)
In-Reply-To: <20230819163515.2266246-1-victor@mojatatu.com>
The datapath can now find the block of the port in which the packet arrived
at. It can then use it for various activities.
In the next patch we show a simple action that multicasts to all ports
excep for the port in which the packet arrived on.
Co-developed-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Co-developed-by: Pedro Tammela <pctammela@mojatatu.com>
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
Signed-off-by: Victor Nogueira <victor@mojatatu.com>
---
include/net/sch_generic.h | 4 ++++
net/sched/cls_api.c | 10 +++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 824a0ecb5afc..c5defb166ef6 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -440,6 +440,8 @@ struct qdisc_skb_cb {
};
#define QDISC_CB_PRIV_LEN 20
unsigned char data[QDISC_CB_PRIV_LEN];
+ /* This should allow eBPF to continue to align */
+ u32 block_index;
};
typedef void tcf_chain_head_change_t(struct tcf_proto *tp_head, void *priv);
@@ -488,6 +490,8 @@ struct tcf_block {
struct mutex proto_destroy_lock; /* Lock for proto_destroy hashtable. */
};
+struct tcf_block *tcf_block_lookup(struct net *net, u32 block_index);
+
static inline bool lockdep_tcf_chain_is_locked(struct tcf_chain *chain)
{
return lockdep_is_held(&chain->filter_chain_lock);
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index a976792ef02f..00e776cdd3fc 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -1011,12 +1011,13 @@ static struct tcf_block *tcf_block_create(struct net *net, struct Qdisc *q,
return block;
}
-static struct tcf_block *tcf_block_lookup(struct net *net, u32 block_index)
+struct tcf_block *tcf_block_lookup(struct net *net, u32 block_index)
{
struct tcf_net *tn = net_generic(net, tcf_net_id);
return idr_find(&tn->idr, block_index);
}
+EXPORT_SYMBOL(tcf_block_lookup);
static struct tcf_block *tcf_block_refcnt_get(struct net *net, u32 block_index)
{
@@ -1737,9 +1738,13 @@ int tcf_classify(struct sk_buff *skb,
const struct tcf_proto *tp,
struct tcf_result *res, bool compat_mode)
{
+ struct qdisc_skb_cb *qdisc_cb = qdisc_skb_cb(skb);
+
#if !IS_ENABLED(CONFIG_NET_TC_SKB_EXT)
u32 last_executed_chain = 0;
+ qdisc_cb->block_index = block ? block->index : 0;
+
return __tcf_classify(skb, tp, tp, res, compat_mode, NULL, 0,
&last_executed_chain);
#else
@@ -1751,6 +1756,7 @@ int tcf_classify(struct sk_buff *skb,
int ret;
if (block) {
+ qdisc_cb->block_index = block->index;
ext = skb_ext_find(skb, TC_SKB_EXT);
if (ext && (ext->chain || ext->act_miss)) {
@@ -1778,6 +1784,8 @@ int tcf_classify(struct sk_buff *skb,
tp = rcu_dereference_bh(fchain->filter_chain);
last_executed_chain = fchain->index;
}
+ } else {
+ qdisc_cb->block_index = 0;
}
ret = __tcf_classify(skb, tp, orig_tp, res, compat_mode, n, act_index,
--
2.25.1
next prev parent reply other threads:[~2023-08-19 16:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-19 16:35 [PATCH net-next v2 0/3] net/sched: Introduce tc block ports tracking and use Victor Nogueira
2023-08-19 16:35 ` [PATCH net-next v2 1/3] net/sched: Introduce tc block netdev tracking infra Victor Nogueira
2023-08-21 19:12 ` Vlad Buslov
2023-08-24 14:05 ` Jamal Hadi Salim
2023-08-19 16:35 ` Victor Nogueira [this message]
2023-08-23 17:33 ` [PATCH net-next v2 2/3] net/sched: cls_api: Expose tc block ports to the datapath Marcelo Ricardo Leitner
2023-08-24 14:09 ` Jamal Hadi Salim
2023-08-19 16:35 ` [PATCH net-next v2 3/3] net/sched: act_blockcast: Introduce blockcast tc action Victor Nogueira
2023-08-23 17:58 ` Marcelo Ricardo Leitner
2023-08-24 14:19 ` Jamal Hadi Salim
2023-08-24 14:30 ` Weird sparse error WAS( " Jamal Hadi Salim
2023-08-24 14:41 ` Paolo Abeni
2023-08-24 14:57 ` Jamal Hadi Salim
2023-09-05 9:18 ` Dan Carpenter
2023-08-21 19:07 ` [PATCH net-next v2 0/3] net/sched: Introduce tc block ports tracking and use Vlad Buslov
2023-08-24 13:47 ` Jamal Hadi Salim
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=20230819163515.2266246-3-victor@mojatatu.com \
--to=victor@mojatatu.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=kernel@mojatatu.com \
--cc=kuba@kernel.org \
--cc=mleitner@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pctammela@mojatatu.com \
--cc=vladbu@nvidia.com \
--cc=xiyou.wangcong@gmail.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