* [PATCH v3 0/2] net: add device groups
@ 2011-01-14 9:38 Vlad Dogaru
2011-01-14 9:38 ` [PATCH v3 1/2] net_device: add support for network " Vlad Dogaru
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Vlad Dogaru @ 2011-01-14 9:38 UTC (permalink / raw)
To: netdev, netdev; +Cc: Vlad Dogaru, jamal, Octavian Purdila
This patchset implements network device grouping and simple manipulation
of groups. Netlink has been updated to provide group information and
means of applying changes to members of a specific group via a single
message.
The patchset has a corresponding one for iproute2, which implements the
new functionality in userspace.
Some basic testing, using 1024 dummy network interfaces (all of them in
group 0):
# time { for i in `seq 0 1023`; do ip l s dev dummy$i up; done }
real 0m7.70s
user 0m0.36s
sys 0m4.85s
# time ip l s devgroup 0 up
real 0m0.14s
user 0m0.00s
sys 0m0.14s
# time { for i in `seq 0 1023`; do ip l s dev dummy$i mtu 2000; done }
real 0m7.43s
user 0m0.48s
sys 0m4.72s
# time ip l s devgroup 0 mtu 2000
real 0m0.02s
user 0m0.00s
sys 0m0.02s
Improvement stems both from less user-kernel communication and from less
processes being created.
Changes since version 2:
* fix net_device field type (should be int, not unsigned int).
* fix typo in commit message.
Changes since version 1:
* we avoid adding a new attribute type by using the following
convention: if no device name is specified, the interface index is
negative, and there is a group specified, we change parameters for
the whole group.
* the dummy module is no longer modified to include an initial group
for the devices it creates. The user is responsible for moving them
to a different group by means of the provided netlink interface.
Vlad Dogaru (2):
net_device: add support for network device groups
netlink: support setting devgroup parameters
include/linux/if_link.h | 1 +
include/linux/netdevice.h | 7 +++++++
net/core/dev.c | 12 ++++++++++++
net/core/rtnetlink.c | 38 ++++++++++++++++++++++++++++++++++----
4 files changed, 54 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 1/2] net_device: add support for network device groups
2011-01-14 9:38 [PATCH v3 0/2] net: add device groups Vlad Dogaru
@ 2011-01-14 9:38 ` Vlad Dogaru
2011-01-14 15:10 ` jamal
2011-01-20 7:41 ` David Miller
2011-01-14 9:38 ` [PATCH v3 2/2] netlink: support setting devgroup parameters Vlad Dogaru
2011-01-14 16:08 ` [PATCH v3 0/2] net: add device groups Stephen Hemminger
2 siblings, 2 replies; 9+ messages in thread
From: Vlad Dogaru @ 2011-01-14 9:38 UTC (permalink / raw)
To: netdev, netdev; +Cc: Vlad Dogaru, jamal, Octavian Purdila
Net devices can now be grouped, enabling simpler manipulation from
userspace. This patch adds a group field to the net_device structure, as
well as rtnetlink support to query and modify it.
Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
---
include/linux/if_link.h | 1 +
include/linux/netdevice.h | 7 +++++++
net/core/dev.c | 12 ++++++++++++
net/core/rtnetlink.c | 6 ++++++
4 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index 6485d2a..f4a2e6b 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -135,6 +135,7 @@ enum {
IFLA_VF_PORTS,
IFLA_PORT_SELF,
IFLA_AF_SPEC,
+ IFLA_GROUP, /* Group the device belongs to */
__IFLA_MAX
};
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 0f6b1c9..2a3e1da 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -75,6 +75,9 @@ struct wireless_dev;
#define NET_RX_SUCCESS 0 /* keep 'em coming, baby */
#define NET_RX_DROP 1 /* packet dropped */
+/* Initial net device group. All devices belong to group 0 by default. */
+#define INIT_NETDEV_GROUP 0
+
/*
* Transmit return codes: transmit return codes originate from three different
* namespaces:
@@ -1156,6 +1159,9 @@ struct net_device {
/* phy device may attach itself for hardware timestamping */
struct phy_device *phydev;
+
+ /* group the device belongs to */
+ int group;
};
#define to_net_dev(d) container_of(d, struct net_device, dev)
@@ -1847,6 +1853,7 @@ extern int dev_set_alias(struct net_device *, const char *, size_t);
extern int dev_change_net_namespace(struct net_device *,
struct net *, const char *);
extern int dev_set_mtu(struct net_device *, int);
+extern void dev_set_group(struct net_device *, int);
extern int dev_set_mac_address(struct net_device *,
struct sockaddr *);
extern int dev_hard_start_xmit(struct sk_buff *skb,
diff --git a/net/core/dev.c b/net/core/dev.c
index a215269..6cf0cd2 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4573,6 +4573,17 @@ int dev_set_mtu(struct net_device *dev, int new_mtu)
EXPORT_SYMBOL(dev_set_mtu);
/**
+ * dev_set_group - Change group this device belongs to
+ * @dev: device
+ * @new_group: group this device should belong to
+ */
+void dev_set_group(struct net_device *dev, int new_group)
+{
+ dev->group = new_group;
+}
+EXPORT_SYMBOL(dev_set_group);
+
+/**
* dev_set_mac_address - Change Media Access Control Address
* @dev: device
* @sa: new address
@@ -5698,6 +5709,7 @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
dev->priv_flags = IFF_XMIT_DST_RELEASE;
setup(dev);
strcpy(dev->name, name);
+ dev->group = INIT_NETDEV_GROUP;
return dev;
free_pcpu:
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 750db57..012b0f0 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -868,6 +868,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
netif_running(dev) ? dev->operstate : IF_OPER_DOWN);
NLA_PUT_U8(skb, IFLA_LINKMODE, dev->link_mode);
NLA_PUT_U32(skb, IFLA_MTU, dev->mtu);
+ NLA_PUT_U32(skb, IFLA_GROUP, dev->group);
if (dev->ifindex != dev->iflink)
NLA_PUT_U32(skb, IFLA_LINK, dev->iflink);
@@ -1265,6 +1266,11 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
modified = 1;
}
+ if (tb[IFLA_GROUP]) {
+ dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
+ modified = 1;
+ }
+
/*
* Interface selected by interface index but interface
* name provided implies that a name change has been
--
1.7.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 2/2] netlink: support setting devgroup parameters
2011-01-14 9:38 [PATCH v3 0/2] net: add device groups Vlad Dogaru
2011-01-14 9:38 ` [PATCH v3 1/2] net_device: add support for network " Vlad Dogaru
@ 2011-01-14 9:38 ` Vlad Dogaru
2011-01-14 15:10 ` jamal
2011-01-20 7:41 ` David Miller
2011-01-14 16:08 ` [PATCH v3 0/2] net: add device groups Stephen Hemminger
2 siblings, 2 replies; 9+ messages in thread
From: Vlad Dogaru @ 2011-01-14 9:38 UTC (permalink / raw)
To: netdev, netdev; +Cc: Vlad Dogaru, jamal, Octavian Purdila
If a rtnetlink request specifies a negative or zero ifindex and has no
interface name attribute, but has a group attribute, then the chenges
are made to all the interfaces belonging to the specified group.
Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
---
net/core/rtnetlink.c | 32 ++++++++++++++++++++++++++++----
1 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 012b0f0..f208397 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1558,6 +1558,24 @@ err:
}
EXPORT_SYMBOL(rtnl_create_link);
+static int rtnl_group_changelink(struct net *net, int group,
+ struct ifinfomsg *ifm,
+ struct nlattr **tb)
+{
+ struct net_device *dev;
+ int err;
+
+ for_each_netdev(net, dev) {
+ if (dev->group == group) {
+ err = do_setlink(dev, ifm, tb, NULL, 0);
+ if (err < 0)
+ return err;
+ }
+ }
+
+ return 0;
+}
+
static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
{
struct net *net = sock_net(skb->sk);
@@ -1585,10 +1603,16 @@ replay:
ifm = nlmsg_data(nlh);
if (ifm->ifi_index > 0)
dev = __dev_get_by_index(net, ifm->ifi_index);
- else if (ifname[0])
- dev = __dev_get_by_name(net, ifname);
- else
- dev = NULL;
+ else {
+ if (ifname[0])
+ dev = __dev_get_by_name(net, ifname);
+ else if (tb[IFLA_GROUP])
+ return rtnl_group_changelink(net,
+ nla_get_u32(tb[IFLA_GROUP]),
+ ifm, tb);
+ else
+ dev = NULL;
+ }
err = validate_linkmsg(dev, tb);
if (err < 0)
--
1.7.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] net_device: add support for network device groups
2011-01-14 9:38 ` [PATCH v3 1/2] net_device: add support for network " Vlad Dogaru
@ 2011-01-14 15:10 ` jamal
2011-01-20 7:41 ` David Miller
1 sibling, 0 replies; 9+ messages in thread
From: jamal @ 2011-01-14 15:10 UTC (permalink / raw)
To: Vlad Dogaru; +Cc: netdev, Octavian Purdila
On Fri, 2011-01-14 at 11:38 +0200, Vlad Dogaru wrote:
> Net devices can now be grouped, enabling simpler manipulation from
> userspace. This patch adds a group field to the net_device structure, as
> well as rtnetlink support to query and modify it.
>
> Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
Good stuff.
Acked-by: Jamal Hadi Salim <hadi@cyberus.ca>
cheers,
jamal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] netlink: support setting devgroup parameters
2011-01-14 9:38 ` [PATCH v3 2/2] netlink: support setting devgroup parameters Vlad Dogaru
@ 2011-01-14 15:10 ` jamal
2011-01-20 7:41 ` David Miller
1 sibling, 0 replies; 9+ messages in thread
From: jamal @ 2011-01-14 15:10 UTC (permalink / raw)
To: Vlad Dogaru; +Cc: netdev, Octavian Purdila
On Fri, 2011-01-14 at 11:38 +0200, Vlad Dogaru wrote:
> If a rtnetlink request specifies a negative or zero ifindex and has no
> interface name attribute, but has a group attribute, then the chenges
> are made to all the interfaces belonging to the specified group.
>
> Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
Acked-by: Jamal Hadi Salim <hadi@cyberus.ca>
cheers,
jamal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] net: add device groups
2011-01-14 9:38 [PATCH v3 0/2] net: add device groups Vlad Dogaru
2011-01-14 9:38 ` [PATCH v3 1/2] net_device: add support for network " Vlad Dogaru
2011-01-14 9:38 ` [PATCH v3 2/2] netlink: support setting devgroup parameters Vlad Dogaru
@ 2011-01-14 16:08 ` Stephen Hemminger
2011-01-15 16:45 ` Vlad Dogaru
2 siblings, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2011-01-14 16:08 UTC (permalink / raw)
To: Vlad Dogaru; +Cc: netdev, jamal, Octavian Purdila
On Fri, 14 Jan 2011 11:38:29 +0200
Vlad Dogaru <ddvlad@rosedu.org> wrote:
> This patchset implements network device grouping and simple manipulation
> of groups. Netlink has been updated to provide group information and
> means of applying changes to members of a specific group via a single
> message.
>
> The patchset has a corresponding one for iproute2, which implements the
> new functionality in userspace.
>
> Some basic testing, using 1024 dummy network interfaces (all of them in
> group 0):
>
> # time { for i in `seq 0 1023`; do ip l s dev dummy$i up; done }
>
> real 0m7.70s
> user 0m0.36s
> sys 0m4.85s
>
> # time ip l s devgroup 0 up
>
> real 0m0.14s
> user 0m0.00s
> sys 0m0.14s
>
> # time { for i in `seq 0 1023`; do ip l s dev dummy$i mtu 2000; done }
>
> real 0m7.43s
> user 0m0.48s
> sys 0m4.72s
>
> # time ip l s devgroup 0 mtu 2000
>
> real 0m0.02s
> user 0m0.00s
> sys 0m0.02s
>
> Improvement stems both from less user-kernel communication and from less
> processes being created.
>
> Changes since version 2:
> * fix net_device field type (should be int, not unsigned int).
> * fix typo in commit message.
>
> Changes since version 1:
> * we avoid adding a new attribute type by using the following
> convention: if no device name is specified, the interface index is
> negative, and there is a group specified, we change parameters for
> the whole group.
> * the dummy module is no longer modified to include an initial group
> for the devices it creates. The user is responsible for moving them
> to a different group by means of the provided netlink interface.
>
> Vlad Dogaru (2):
> net_device: add support for network device groups
> netlink: support setting devgroup parameters
>
> include/linux/if_link.h | 1 +
> include/linux/netdevice.h | 7 +++++++
> net/core/dev.c | 12 ++++++++++++
> net/core/rtnetlink.c | 38 ++++++++++++++++++++++++++++++++++----
> 4 files changed, 54 insertions(+), 4 deletions(-)
What about a read/write sysfs interface as well?
/sys/class/net/eth0/devgroup
Not sure if numeric devgroup is best choice. Since this is more of
a human interface parameter maybe it should be a string? Or have
a translation in the utilities /etc/iproute2/devgroup?
--
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] net: add device groups
2011-01-14 16:08 ` [PATCH v3 0/2] net: add device groups Stephen Hemminger
@ 2011-01-15 16:45 ` Vlad Dogaru
0 siblings, 0 replies; 9+ messages in thread
From: Vlad Dogaru @ 2011-01-15 16:45 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, jamal, Octavian Purdila
On Fri, Jan 14, 2011 at 08:08:10AM -0800, Stephen Hemminger wrote:
> On Fri, 14 Jan 2011 11:38:29 +0200
> Vlad Dogaru <ddvlad@rosedu.org> wrote:
>
> > This patchset implements network device grouping and simple manipulation
> > of groups. Netlink has been updated to provide group information and
> > means of applying changes to members of a specific group via a single
> > message.
> >
> > The patchset has a corresponding one for iproute2, which implements the
> > new functionality in userspace.
>
> What about a read/write sysfs interface as well?
> /sys/class/net/eth0/devgroup
Oops, I overlooked that, probably because I've been testing in a virtual
machine where the kernel has sysfs turned off -- less waiting for simple
tests.
> Not sure if numeric devgroup is best choice. Since this is more of
> a human interface parameter maybe it should be a string? Or have
> a translation in the utilities /etc/iproute2/devgroup?
I didn't know about /etc/iproute2. I could add the devgroup file as you
mention, seems like a good choice for userspace.
I'll update the patches with these, but it will probably take a few days,
I have a few exams next week :)
Thanks for the suggestions,
Vlad
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] netlink: support setting devgroup parameters
2011-01-14 9:38 ` [PATCH v3 2/2] netlink: support setting devgroup parameters Vlad Dogaru
2011-01-14 15:10 ` jamal
@ 2011-01-20 7:41 ` David Miller
1 sibling, 0 replies; 9+ messages in thread
From: David Miller @ 2011-01-20 7:41 UTC (permalink / raw)
To: ddvlad; +Cc: netdev, hadi, opurdila
From: Vlad Dogaru <ddvlad@rosedu.org>
Date: Fri, 14 Jan 2011 11:38:31 +0200
> If a rtnetlink request specifies a negative or zero ifindex and has no
> interface name attribute, but has a group attribute, then the chenges
> are made to all the interfaces belonging to the specified group.
>
> Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
Applied.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] net_device: add support for network device groups
2011-01-14 9:38 ` [PATCH v3 1/2] net_device: add support for network " Vlad Dogaru
2011-01-14 15:10 ` jamal
@ 2011-01-20 7:41 ` David Miller
1 sibling, 0 replies; 9+ messages in thread
From: David Miller @ 2011-01-20 7:41 UTC (permalink / raw)
To: ddvlad; +Cc: netdev, hadi, opurdila
From: Vlad Dogaru <ddvlad@rosedu.org>
Date: Fri, 14 Jan 2011 11:38:30 +0200
> Net devices can now be grouped, enabling simpler manipulation from
> userspace. This patch adds a group field to the net_device structure, as
> well as rtnetlink support to query and modify it.
>
> Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
Applied.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-01-20 7:40 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-14 9:38 [PATCH v3 0/2] net: add device groups Vlad Dogaru
2011-01-14 9:38 ` [PATCH v3 1/2] net_device: add support for network " Vlad Dogaru
2011-01-14 15:10 ` jamal
2011-01-20 7:41 ` David Miller
2011-01-14 9:38 ` [PATCH v3 2/2] netlink: support setting devgroup parameters Vlad Dogaru
2011-01-14 15:10 ` jamal
2011-01-20 7:41 ` David Miller
2011-01-14 16:08 ` [PATCH v3 0/2] net: add device groups Stephen Hemminger
2011-01-15 16:45 ` Vlad Dogaru
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).