forked from mirrors/linux
		
	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
					
				
					 4 changed files with 26 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue