Re: Resend: [IPROUTE2 PATCH] Interface group as new ip link option

2007-10-16 Thread Patrick McHardy

Laszlo Attila Toth wrote:

+static int set_group(const char *dev, int ifgroup)
+{
+   struct {
+   struct nlmsghdr n;
+   struct ifinfomsgifi;
+   charbuf[256];
+   } req;
+   struct rtnl_handle rth;
+   
+   memset(req, 0, sizeof(req));
+   req.n.nlmsg_len = NLMSG_LENGTH(sizeof(req.ifi));
+   req.n.nlmsg_flags = NLM_F_REQUEST;
+   req.n.nlmsg_type = RTM_SETLINK;
+   
+   req.ifi.ifi_index = -1;
+   
+   addattr_l(req.n, sizeof(req), IFLA_IFNAME, dev, strlen(dev)+1);
+   addattr_l(req.n, sizeof(req), IFLA_IFGROUP, ifgroup, sizeof(ifgroup));
+   if (rtnl_open(rth, 0)  0)
+   exit(1);
+   if (rtnl_talk(rth, req.n, 0, 0, NULL, NULL, NULL)  0)
+   return -1;
+   rtnl_close(rth);
+   return 0;
+}
+
 static int get_address(const char *dev, int *htype)
 {
struct ifreq ifr;
@@ -545,6 +582,7 @@ static int do_set(int argc, char **argv)
__u32 mask = 0;
__u32 flags = 0;
int qlen = -1;
+   __u32 group = 0;
int mtu = -1;
char *newaddr = NULL;
char *newbrd = NULL;
@@ -577,6 +615,13 @@ static int do_set(int argc, char **argv)
duparg(txqueuelen, *argv);
if (get_integer(qlen,  *argv, 0))
invarg(Invalid \txqueuelen\ value\n, *argv);
+   } else if (matches(*argv, group) == 0) {
+   NEXT_ARG();
+   if (group != 0)
+   duparg(group, *argv);
+
+   if (rtnl_ifgroup_a2n(group, *argv) || group == 0)
+   invarg(\group\ value is invalid\n, *argv);
} else if (strcmp(*argv, mtu) == 0) {
NEXT_ARG();
if (mtu != -1)
@@ -696,6 +741,10 @@ static int do_set(int argc, char **argv)
return -1;
}
}
+   if (group) {
+   if (set_group(dev, group)  0)
+   return -1;
+   }



This part looks useless, for new kernels iproute always uses netlink
to configure things and old kernels don't support this feature. So
there's no need to support it in the ioctl-based configuration path.
-
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: Resend: [IPROUTE2 PATCH] Interface group as new ip link option

2007-10-16 Thread jamal
On Tue, 2007-16-10 at 11:03 +0200, Laszlo Attila Toth wrote:
 Interfaces can be grouped and each group has an unique positive integer ID.
 It can be set via ip link.

Feature request: Can you also implement a get operation. Perhaps
something that returns from the kernel a list of ifindices when one
passes a group to it?

BTW, does it make sense to have one interface in multiple groups?

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: Resend: [IPROUTE2 PATCH] Interface group as new ip link option

2007-10-16 Thread Laszlo Attila Toth

jamal írta:

On Tue, 2007-16-10 at 11:03 +0200, Laszlo Attila Toth wrote:

Interfaces can be grouped and each group has an unique positive integer ID.
It can be set via ip link.


Feature request: Can you also implement a get operation. Perhaps
something that returns from the kernel a list of ifindices when one
passes a group to it?


That sounds great but for what whould you like to use? It may help me 
for the implementation. Currently it is not available since the the 
net_device structure holds the group id and for this get operation an 
iteration (of net_devices) may be necessary...


BTW, does it make sense to have one interface in multiple groups?


We didn't want to use multiple groups in favour of masked group ids. 
What kind of usage needs other implementation?


--
Attila
-
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: Resend: [IPROUTE2 PATCH] Interface group as new ip link option

2007-10-16 Thread jamal
On Tue, 2007-16-10 at 13:05 +0200, Laszlo Attila Toth wrote:

 That sounds great but for what whould you like to use? It may help me 
 for the implementation.

For example i may want to add a tc rule to a group of interfaces.
tc BNF roughly looks like:
tc object operation target

Where targe is := dev devname
It may be useful to extend target to include alternatively a group of
devices.
The way i would see that done is to add a little wrapper to tc to first
ask the kernel for a list of interfaces and then invoke each with the
equivalent of current syntax.
Did that make sense?

 Currently it is not available since the the 
 net_device structure holds the group id and for this get operation an 
 iteration (of net_devices) may be necessary...

I understand - but i would rather do the iteration in the kernel than in
user space and save myself a gazillion netlink messages.

 We didn't want to use multiple groups in favour of masked group ids. 
 What kind of usage needs other implementation?

Same lazyperson use cases as above; in one case i may want to set a rule
to group = {eth0, eth1, eth10} and in another {eth0,eth5}. I realize
this may be more involved something clever for an implementation (eg
using a bitmap instead of a straight int) - so if it not a simple thing,
just defer it to some later time.

Ok, now that you are asking, heres another one feature request for
you;- It would be nice if i can set a group based on a regular
expression of a devices name; eg ppp*. Use case for this, off top of
my head (without looking at your syntax):

ip set group 10 ppp*

And equivalent to ifconfig ppp* so i dont list 10K interfaces
ip list group 10 or pass any 5K messages to user space

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: Resend: [IPROUTE2 PATCH] Interface group as new ip link option

2007-10-16 Thread Laszlo Attila Toth

jamal írta:

On Tue, 2007-16-10 at 13:05 +0200, Laszlo Attila Toth wrote:

That sounds great but for what whould you like to use? It may help me 
for the implementation.


For example i may want to add a tc rule to a group of interfaces.
tc BNF roughly looks like:
tc object operation target

Where targe is := dev devname
It may be useful to extend target to include alternatively a group of
devices.


Ok, I see.



Currently it is not available since the the 
net_device structure holds the group id and for this get operation an 
iteration (of net_devices) may be necessary...


I understand - but i would rather do the iteration in the kernel than in
user space and save myself a gazillion netlink messages.


You are right - that's faster in the kernel and useless to move it to 
userspace.




We didn't want to use multiple groups in favour of masked group ids. 
What kind of usage needs other implementation?


Same lazyperson use cases as above; in one case i may want to set a rule
to group = {eth0, eth1, eth10} and in another {eth0,eth5}. I realize
this may be more involved something clever for an implementation (eg
using a bitmap instead of a straight int) - so if it not a simple thing,
just defer it to some later time.


Hm, the main problem (for me) is that it requires more then one value 
per net device and it should be limited. But if I say it is 5 for 
instance, anyone can say it is not enough for him.





Ok, now that you are asking, heres another one feature request for
you;- It would be nice if i can set a group based on a regular
expression of a devices name; eg ppp*. Use case for this, off top of
my head (without looking at your syntax):

ip set group 10 ppp*


ip link set ppp0 group 10
also if ip link set... works for multiple interfaces it is already 
done. If it is not, it will affect positively all other settings :)


--
Attila
-
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: Resend: [IPROUTE2 PATCH] Interface group as new ip link option

2007-10-16 Thread jamal
On Tue, 2007-16-10 at 13:47 +0200, Laszlo Attila Toth wrote:

 Hm, the main problem (for me) is that it requires more then one value 
 per net device and it should be limited. But if I say it is 5 for 
 instance, anyone can say it is not enough for him.

Yes, those pesky humans, you give them an inch and they want a mile ;-
I think 32 for example is better than 1. So if you use a u32 variable
doesnt pollute the netdevice that much - and used as a bitmap, then
setting any of the 32 bits implies the device is in that group. This of
course limits the group ids to be (1..32). Your mileage may vary.

 ip link set ppp0 group 10
 also if ip link set... works for multiple interfaces it is already 
 done. If it is not, it will affect positively all other settings :)

nice.
The part that is not very useful today with ifconfig or ip link ls is i
have only two choices: Either i ask for all devices or for one; i cant
ask for something in the middle. If i can group them together then i can
solve that problem sith some user space plumbing (which avoids 10K
netlink messages). 
get ppp* may actually be a totally separate call which also traverses
the list in the kernel and just returns the matching devices. 

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