mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
net_device: add support for network device groups
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> Acked-by: Jamal Hadi Salim <hadi@cyberus.ca> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
441c793a56
commit
cbda10fa97
@ -135,6 +135,7 @@ enum {
|
||||
IFLA_VF_PORTS,
|
||||
IFLA_PORT_SELF,
|
||||
IFLA_AF_SPEC,
|
||||
IFLA_GROUP, /* Group the device belongs to */
|
||||
__IFLA_MAX
|
||||
};
|
||||
|
||||
|
@ -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:
|
||||
@ -1153,6 +1156,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)
|
||||
|
||||
@ -1844,6 +1850,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,
|
||||
|
@ -4571,6 +4571,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
|
||||
@ -5678,6 +5689,7 @@ struct net_device *alloc_netdev_mqs(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:
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user