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