Re: [GENL]: Provide more information to userspace about registered genl families

2006-09-18 Thread David Miller
From: Thomas Graf <[EMAIL PROTECTED]>
Date: Thu, 31 Aug 2006 23:21:29 +0200

> Additionaly exports the following information when providing
> the list of registered generic netlink families:
>   - protocol version
>   - header size
>   - maximum number of attributes
>   - list of available operations including
>   - id
>   - flags
>   - avaiability of policy and doit/dumpit function
> 
> libnl HEAD provides a utility to read this new information:
> 
>   0x0010 nlctrl version 1
>   hdrsize 0 maxattr 6
> op GETFAMILY (0x03) [POLICY,DOIT,DUMPIT]
>   0x0011 NLBL_MGMT version 1
>   hdrsize 0 maxattr 0
> op unknown (0x02) [DOIT]
> op unknown (0x03) [DOIT]
> 
> 
> Signed-off-by: Thomas Graf <[EMAIL PROTECTED]>

Applied to net-2.6.19, thanks Thomas.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GENL]: Provide more information to userspace about registered genl families

2006-09-03 Thread Johannes Berg
jamal wrote:

> Could you point me to it? I can look at it over the weekend.

I posted it here on netdev, look for nl80211.

> It may be we need to add another feature to genl to accomodate this.
> Example by setting a flag to indicate supportability. However, it does
> sound like this is something your code needs to own in a capability set
> structure somewhere. I cant tell without looking at the code.

Yes, I'm currently exporting it myself.

johannes

-- 
VGER BF report: U 0.534475
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GENL]: Provide more information to userspace about registered genl families

2006-09-01 Thread jamal
On Fri, 2006-01-09 at 14:25 +0200, Johannes Berg wrote:
> On Fri, 2006-09-01 at 08:22 -0400, jamal wrote:
> 

> > Sorry, I havent had time to look at that code (is it in Daves tree?); 
> 
> No, it's not in any tree yet.
> 

Could you point me to it? I can look at it over the weekend.

> > if
> > i understand you correctly - you have a superset of commands, and some
> > users of those commands can only implement a subset?
> 
> precisely.


It may be we need to add another feature to genl to accomodate this.
Example by setting a flag to indicate supportability. However, it does
sound like this is something your code needs to own in a capability set
structure somewhere. I cant tell without looking at the code. 

cheers,
jamal

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GENL]: Provide more information to userspace about registered genl families

2006-09-01 Thread Johannes Berg
On Fri, 2006-09-01 at 08:22 -0400, jamal wrote:

> Seems you may be talking about capabilities more than filtering?

yes, I had sort of thought filtering would be that, but now that you say
it I get the point :)

> Sorry, I havent had time to look at that code (is it in Daves tree?); 

No, it's not in any tree yet.

> if
> i understand you correctly - you have a superset of commands, and some
> users of those commands can only implement a subset?

precisely.

johannes
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GENL]: Provide more information to userspace about registered genl families

2006-08-31 Thread Johannes Berg
On Thu, 2006-08-31 at 17:46 -0400, jamal wrote:

> I think it would be valuable to specify a set of flags for filtering
> what gets sent to user space instead of unconditionally.
> 
> Example, 
> filter level 0:
>   - what we have before your patch
> filter level 1:
>   - protocol version
>   - header size
>   - maximum number of attributes
> filter level 2:
>   - the rest of the stuff you have
>  
> What netlink does today to filter at user space is something that can be
> avoided with the above (an improvement in my opinion if you have a lot
> of genl items in the kernel).

What I'd personally like to see for nl80211 if we go there is an actual
filter callback, then I could completely avoid the command I have in
there for getting a command list for a given interface, and just filter
out those commands that some interface doesn't support.

johannes
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GENL]: Provide more information to userspace about registered genl families

2006-08-31 Thread jamal

Useful stuff. There are things along these lines that i have been
contemplating myself.

I think it would be valuable to specify a set of flags for filtering
what gets sent to user space instead of unconditionally.

Example, 
filter level 0:
  - what we have before your patch
filter level 1:
  - protocol version
  - header size
  - maximum number of attributes
filter level 2:
  - the rest of the stuff you have
 
What netlink does today to filter at user space is something that can be
avoided with the above (an improvement in my opinion if you have a lot
of genl items in the kernel).

cheers,
jamal

On Thu, 2006-31-08 at 23:21 +0200, Thomas Graf wrote:
> Additionaly exports the following information when providing
> the list of registered generic netlink families:
>   - protocol version
>   - header size
>   - maximum number of attributes
>
>   - list of available operations including
>   - id
>   - flags
>   - avaiability of policy and doit/dumpit function
> 
> libnl HEAD provides a utility to read this new information:
> 
>   0x0010 nlctrl version 1
>   hdrsize 0 maxattr 6
> op GETFAMILY (0x03) [POLICY,DOIT,DUMPIT]
>   0x0011 NLBL_MGMT version 1
>   hdrsize 0 maxattr 0
> op unknown (0x02) [DOIT]
> op unknown (0x03) [DOIT]
> 
> 


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[GENL]: Provide more information to userspace about registered genl families

2006-08-31 Thread Thomas Graf
Additionaly exports the following information when providing
the list of registered generic netlink families:
  - protocol version
  - header size
  - maximum number of attributes
  - list of available operations including
  - id
  - flags
  - avaiability of policy and doit/dumpit function

libnl HEAD provides a utility to read this new information:

0x0010 nlctrl version 1
hdrsize 0 maxattr 6
  op GETFAMILY (0x03) [POLICY,DOIT,DUMPIT]
0x0011 NLBL_MGMT version 1
hdrsize 0 maxattr 0
  op unknown (0x02) [DOIT]
  op unknown (0x03) [DOIT]
  

Signed-off-by: Thomas Graf <[EMAIL PROTECTED]>

Index: net-2.6.19/include/linux/genetlink.h
===
--- net-2.6.19.orig/include/linux/genetlink.h   2006-08-31 16:01:16.0 
+0200
+++ net-2.6.19/include/linux/genetlink.h2006-08-31 19:24:43.0 
+0200
@@ -16,6 +16,8 @@
 
 #define GENL_HDRLENNLMSG_ALIGN(sizeof(struct genlmsghdr))
 
+#define GENL_ADMIN_PERM0x01
+
 /*
  * List of reserved static generic netlink identifiers:
  */
@@ -43,9 +45,25 @@
CTRL_ATTR_UNSPEC,
CTRL_ATTR_FAMILY_ID,
CTRL_ATTR_FAMILY_NAME,
+   CTRL_ATTR_VERSION,
+   CTRL_ATTR_HDRSIZE,
+   CTRL_ATTR_MAXATTR,
+   CTRL_ATTR_OPS,
__CTRL_ATTR_MAX,
 };
 
 #define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
 
+enum {
+   CTRL_ATTR_OP_UNSPEC,
+   CTRL_ATTR_OP_ID,
+   CTRL_ATTR_OP_FLAGS,
+   CTRL_ATTR_OP_POLICY,
+   CTRL_ATTR_OP_DOIT,
+   CTRL_ATTR_OP_DUMPIT,
+   __CTRL_ATTR_OP_MAX,
+};
+
+#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
+
 #endif /* __LINUX_GENERIC_NETLINK_H */
Index: net-2.6.19/net/netlink/genetlink.c
===
--- net-2.6.19.orig/net/netlink/genetlink.c 2006-08-31 16:21:39.0 
+0200
+++ net-2.6.19/net/netlink/genetlink.c  2006-08-31 19:10:38.0 +0200
@@ -387,7 +387,10 @@
 static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
  u32 flags, struct sk_buff *skb, u8 cmd)
 {
+   struct nlattr *nla_ops;
+   struct genl_ops *ops;
void *hdr;
+   int idx = 1;
 
hdr = genlmsg_put(skb, pid, seq, GENL_ID_CTRL, 0, flags, cmd,
  family->version);
@@ -396,6 +399,37 @@
 
NLA_PUT_STRING(skb, CTRL_ATTR_FAMILY_NAME, family->name);
NLA_PUT_U16(skb, CTRL_ATTR_FAMILY_ID, family->id);
+   NLA_PUT_U32(skb, CTRL_ATTR_VERSION, family->version);
+   NLA_PUT_U32(skb, CTRL_ATTR_HDRSIZE, family->hdrsize);
+   NLA_PUT_U32(skb, CTRL_ATTR_MAXATTR, family->maxattr);
+
+   nla_ops = nla_nest_start(skb, CTRL_ATTR_OPS);
+   if (nla_ops == NULL)
+   goto nla_put_failure;
+
+   list_for_each_entry(ops, &family->ops_list, ops_list) {
+   struct nlattr *nest;
+
+   nest = nla_nest_start(skb, idx++);
+   if (nest == NULL)
+   goto nla_put_failure;
+
+   NLA_PUT_U32(skb, CTRL_ATTR_OP_ID, ops->cmd);
+   NLA_PUT_U32(skb, CTRL_ATTR_OP_FLAGS, ops->flags);
+
+   if (ops->policy)
+   NLA_PUT_FLAG(skb, CTRL_ATTR_OP_POLICY);
+
+   if (ops->doit)
+   NLA_PUT_FLAG(skb, CTRL_ATTR_OP_DOIT);
+
+   if (ops->dumpit)
+   NLA_PUT_FLAG(skb, CTRL_ATTR_OP_DUMPIT);
+
+   nla_nest_end(skb, nest);
+   }
+
+   nla_nest_end(skb, nla_ops);
 
return genlmsg_end(skb, hdr);
 
@@ -411,6 +445,9 @@
int chains_to_skip = cb->args[0];
int fams_to_skip = cb->args[1];
 
+   if (chains_to_skip != 0)
+   genl_lock();
+
for (i = 0; i < GENL_FAM_TAB_SIZE; i++) {
if (i < chains_to_skip)
continue;
@@ -428,6 +465,9 @@
}
 
 errout:
+   if (chains_to_skip != 0)
+   genl_unlock();
+
cb->args[0] = i;
cb->args[1] = n;
 
Index: net-2.6.19/include/net/genetlink.h
===
--- net-2.6.19.orig/include/net/genetlink.h 2006-08-31 19:24:15.0 
+0200
+++ net-2.6.19/include/net/genetlink.h  2006-08-31 19:24:20.0 +0200
@@ -27,8 +27,6 @@
struct list_headfamily_list;/* private */
 };
 
-#define GENL_ADMIN_PERM0x01
-
 /**
  * struct genl_info - receiving information
  * @snd_seq: sending sequence number
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html