Thread (27 messages) flat view 27 messages, 2 authors, 2018-01-15

Re: [patch net-next v8 08/14] net: sched: add rt netlink message type for block get

From: David Ahern <hidden>
Date: 2018-01-15 17:21:47

On 1/15/18 10:08 AM, David Ahern wrote:
On 1/15/18 10:03 AM, Jiri Pirko wrote:
quoted
Mon, Jan 15, 2018 at 05:56:31PM CET, dsahern@gmail.com wrote:
quoted
On 1/12/18 8:46 AM, Jiri Pirko wrote:
quoted
From: Jiri Pirko <redacted>

Add simple block get operation which primary purpose is to check the
block existence by block index.

Signed-off-by: Jiri Pirko <redacted>
---
v6->v7:
- new patch
---
 include/uapi/linux/rtnetlink.h |  6 ++++
 net/sched/cls_api.c            | 64 ++++++++++++++++++++++++++++++++++++++++++
 security/selinux/nlmsgtab.c    |  5 +++-
 3 files changed, 74 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
index da878f2..4b1f626 100644
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
@@ -150,6 +150,12 @@ enum {
 	RTM_NEWCACHEREPORT = 96,
 #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
 
+	RTM_NEWBLOCK = 100,
+#define RTM_NEWBLOCK RTM_NEWBLOCK
+	RTM_DELBLOCK,
+#define RTM_DELBLOCK RTM_DELBLOCK
+	RTM_GETBLOCK,
+#define RTM_GETBLOCK RTM_GETBLOCK
 	__RTM_MAX,
 #define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
 };
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index d687e58..14e4f20 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -1553,6 +1553,69 @@ int tc_setup_cb_call(struct tcf_block *block, struct tcf_exts *exts,
 }
 EXPORT_SYMBOL(tc_setup_cb_call);
 
+static int block_notify_fill(struct net *net, struct sk_buff *skb,
+			     struct tcf_block *block, u32 portid, u32 seq,
+			     u16 flags, int event)
+{
+	struct nlmsghdr *nlh;
+	struct tcmsg *tcm;
+
+	nlh = nlmsg_put(skb, portid, seq, event, sizeof(*tcm), flags);
+	if (!nlh)
+		return -EMSGSIZE;
+	tcm = nlmsg_data(nlh);
+	memset(tcm, 0, sizeof(*tcm));
+	tcm->tcm_family = AF_UNSPEC;
+	tcm->tcm_ifindex = TCM_IFINDEX_MAGIC_BLOCK;
+	tcm->tcm_block_index = block->index;
+	return 0;
+}
Why can't this be done with RTM_GETQDISC?
I don't follow. Could you please describe a bit more what do you think?
Why are you adding RTM_{NEW,GET,DEL}BLOCK? Can't you get the same
information using RTM_GETQDISC and updating it to check for the
'tcm_ifindex == TCM_IFINDEX_MAGIC_BLOCK' path
The above question is because a user specifies a shared block in a
'qdisc add'.

Alternatively, what about RTM_GETTFILTER? You already update
tc_ctl_tfilter to check for TCM_IFINDEX_MAGIC_BLOCK

My main question is why can't existing RTM_ commands be used?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help