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 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-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


[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