Re: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread Patrick McHardy
Evgeniy Polyakov wrote:
 Hello.
 
 I was asked several times to include userspace example code into
 Documentation, so if there is no policy against it, consider attached patch 
 for 2.6.18. This program works with included 
 Documentation/connector/cn_test.c 
 connector module.

 + l_local.nl_family = AF_NETLINK;
 + l_local.nl_groups = 0x123;
 + l_local.nl_pid = 0;
 +
 + if (bind(s, (struct sockaddr *)l_local, sizeof(struct sockaddr_nl)) == 
 -1) {
 + perror(bind);
 + close(s);
 + return -1;
 + }
 +
 + {
 + int on = l_local.nl_groups;
 + setsockopt(s, 270, 1, on, sizeof(on));
 + }

Example code shouldn't use magic numbers, please use the proper defines.
And the code is wrong, using the same group number for bind (which takes
a bitmask) and setsockopt (which takes a group number) doesn't work.
Its not necessary to use setsockopt if you already used bind anyway.

-
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: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread Evgeniy Polyakov
On Fri, Aug 25, 2006 at 08:57:23AM +0200, Patrick McHardy ([EMAIL PROTECTED]) 
wrote:
 Evgeniy Polyakov wrote:
  Hello.
  
  I was asked several times to include userspace example code into
  Documentation, so if there is no policy against it, consider attached patch 
  for 2.6.18. This program works with included 
  Documentation/connector/cn_test.c 
  connector module.
 
  +   l_local.nl_family = AF_NETLINK;
  +   l_local.nl_groups = 0x123;
  +   l_local.nl_pid = 0;
  +
  +   if (bind(s, (struct sockaddr *)l_local, sizeof(struct sockaddr_nl)) == 
  -1) {
  +   perror(bind);
  +   close(s);
  +   return -1;
  +   }
  +
  +   {
  +   int on = l_local.nl_groups;
  +   setsockopt(s, 270, 1, on, sizeof(on));
  +   }
 
 Example code shouldn't use magic numbers, please use the proper defines.
 And the code is wrong, using the same group number for bind (which takes
 a bitmask) and setsockopt (which takes a group number) doesn't work.
 Its not necessary to use setsockopt if you already used bind anyway.

I put there explicit socket option to show how it works in case there
will be several group requests, which will not be placed into initial
bind call.
But you are right, that magic numbers are not that good.
I will update program with appropriate changes.
Thank you.

-- 
Evgeniy Polyakov
-
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: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread Evgeniy Polyakov
Hello.

I was asked several times to include userspace example code into
Documentation, so if there is no policy against it, consider attached patch 
for 2.6.18. This program works with included Documentation/connector/cn_test.c 
connector module.
Thank you.

Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

--- /dev/null   2006-08-23 17:09:03.438578500 +0400
+++ ./Documentation/connector/ucon.c2006-08-25 11:31:48.0 +0400
@@ -0,0 +1,206 @@
+/*
+ * ucon.c
+ *
+ * Copyright (c) 2004+ Evgeniy Polyakov [EMAIL PROTECTED]
+ * 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include asm/types.h
+
+#include sys/types.h
+#include sys/socket.h
+#include sys/poll.h
+
+#include linux/netlink.h
+#include linux/rtnetlink.h
+
+#include arpa/inet.h
+
+#include stdio.h
+#include stdlib.h
+#include unistd.h
+#include string.h
+#include errno.h
+#include time.h
+
+#include linux/connector.h
+
+#define DEBUG
+#define NETLINK_CONNECTOR  11
+
+#ifdef DEBUG
+#define ulog(f, a...) fprintf(stdout, f, ##a)
+#else
+#define ulog(f, a...) do {} while (0)
+#endif
+
+static int need_exit;
+static __u32 seq;
+
+static int netlink_send(int s, struct cn_msg *msg)
+{
+   struct nlmsghdr *nlh;
+   unsigned int size;
+   int err;
+   char buf[128];
+   struct cn_msg *m;
+   
+   size = NLMSG_SPACE(sizeof(struct cn_msg) + msg-len);
+
+   nlh = (struct nlmsghdr *)buf;
+   nlh-nlmsg_seq = seq++;
+   nlh-nlmsg_pid = getpid();
+   nlh-nlmsg_type = NLMSG_DONE;
+   nlh-nlmsg_len = NLMSG_LENGTH(size - sizeof(*nlh));
+   nlh-nlmsg_flags = 0;
+
+   m = NLMSG_DATA(nlh);
+#if 0
+   ulog(%s: [%08x.%08x] len=%u, seq=%u, ack=%u.\n,
+  __func__, msg-id.idx, msg-id.val, msg-len, msg-seq, 
msg-ack);
+#endif
+   memcpy(m, msg, sizeof(*m) + msg-len);
+
+   err = send(s, nlh, size, 0);
+   if (err == -1)
+   ulog(Failed to send: %s [%d].\n,
+   strerror(errno), errno);
+
+   return err;
+}
+
+int main(int argc, char *argv[])
+{
+   int s;
+   char buf[1024];
+   int len;
+   struct nlmsghdr *reply;
+   struct sockaddr_nl l_local;
+   struct cn_msg *data;
+   FILE *out;
+   time_t tm;
+   struct pollfd pfd;
+
+   if (argc  2)
+   out = stdout;
+   else {
+   out = fopen(argv[1], a+);
+   if (!out) {
+   ulog(Unable to open %s for writing: %s\n,
+   argv[1], strerror(errno));
+   out = stdout;
+   }
+   }
+
+   memset(buf, 0, sizeof(buf));
+
+   s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
+   if (s == -1) {
+   perror(socket);
+   return -1;
+   }
+
+   l_local.nl_family = AF_NETLINK;
+   l_local.nl_groups = 0x123; /* bitmask of requested groups */
+   l_local.nl_pid = 0;
+
+   if (bind(s, (struct sockaddr *)l_local, sizeof(struct sockaddr_nl)) == 
-1) {
+   perror(bind);
+   close(s);
+   return -1;
+   }
+
+#if 0
+   {
+   int on = 0x57; /* Additional group number */
+   setsockopt(s, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, on, 
sizeof(on));
+   }
+#endif 
+   if (0) {
+   int i, j;
+   
+   memset(buf, 0, sizeof(buf));
+   
+   data = (struct cn_msg *)buf;
+
+   data-id.idx = 0x123;
+   data-id.val = 0x456;
+   data-seq = seq++;
+   data-ack = 0;
+   data-len = 0;
+
+   for (j=0; j10; ++j) {
+   for (i=0; i1000; ++i) {
+   len = netlink_send(s, data);
+   }
+
+   ulog(%d messages have been sent to %08x.%08x.\n, i, 
data-id.idx, data-id.val);
+   }
+
+   return 0;
+   }
+   
+
+   pfd.fd = s;
+
+   while (!need_exit) {
+   pfd.events = POLLIN;
+   pfd.revents = 0;
+   switch (poll(pfd, 1, -1)) {
+   case 0:
+   need_exit = 1;
+   break;
+   case -1:
+

Re: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread Patrick McHardy
Evgeniy Polyakov wrote:
 + l_local.nl_family = AF_NETLINK;
 + l_local.nl_groups = 0x123; /* bitmask of requested groups */
 + l_local.nl_pid = 0;
 +
 + if (bind(s, (struct sockaddr *)l_local, sizeof(struct sockaddr_nl)) == 
 -1) {
 + perror(bind);
 + close(s);
 + return -1;
 + }
 +
 +#if 0
 + {
 + int on = 0x57; /* Additional group number */
 + setsockopt(s, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, on, 
 sizeof(on));
 + }
 +#endif   
 

That looks better, thanks.
-
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: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread David Miller
From: Evgeniy Polyakov [EMAIL PROTECTED]
Date: Fri, 25 Aug 2006 11:11:02 +0400

 Hello.
 
 I was asked several times to include userspace example code into
 Documentation, so if there is no policy against it, consider attached patch 
 for 2.6.18. This program works with included 
 Documentation/connector/cn_test.c 
 connector module.
 Thank you.
 
 Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]

Fair enough, applied (after killing all of the trailing whitespace).

Thanks.

-
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: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread Evgeniy Polyakov
On Fri, Aug 25, 2006 at 12:52:33AM -0700, David Miller ([EMAIL PROTECTED]) 
wrote:
 From: Evgeniy Polyakov [EMAIL PROTECTED]
 Date: Fri, 25 Aug 2006 11:11:02 +0400
 
  Hello.
  
  I was asked several times to include userspace example code into
  Documentation, so if there is no policy against it, consider attached patch 
  for 2.6.18. This program works with included 
  Documentation/connector/cn_test.c 
  connector module.
  Thank you.
  
  Signed-off-by: Evgeniy Polyakov [EMAIL PROTECTED]
 
 Fair enough, applied (after killing all of the trailing whitespace).

I mailed it myself and applied to 2.6.18 git tree - patch -p1 did not
complain for sure :)

Thank you.

-- 
Evgeniy Polyakov
-
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: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread David Miller
From: Evgeniy Polyakov [EMAIL PROTECTED]
Date: Fri, 25 Aug 2006 12:15:03 +0400

 I mailed it myself and applied to 2.6.18 git tree - patch -p1 did
 not complain for sure :)

GIT always complains very loudly about any trailing whitespace on any
lines, patch is too dumb to do that.

You do not need to use GIT trees to check this, just run:

git apply --check --whitespace=error-all $PATCH

and it will let you know.
-
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: [1/1] connector: add userspace example code into Documentation/connector/

2006-08-25 Thread Evgeniy Polyakov
On Fri, Aug 25, 2006 at 01:17:27AM -0700, David Miller ([EMAIL PROTECTED]) 
wrote:
  I mailed it myself and applied to 2.6.18 git tree - patch -p1 did
  not complain for sure :)
 
 GIT always complains very loudly about any trailing whitespace on any
 lines, patch is too dumb to do that.
 
 You do not need to use GIT trees to check this, just run:
 
 git apply --check --whitespace=error-all $PATCH
 
 and it will let you know.

Hmm, how many interesting things git contain...
I will definitely use this feature, thanks David.

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