diff options
Diffstat (limited to 'include/linux/netdevice.h')
| -rw-r--r-- | include/linux/netdevice.h | 34 | 
1 files changed, 33 insertions, 1 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index ddf4cfc12615..f06fbee8638e 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1584,6 +1584,12 @@ enum netdev_priv_flags {  #define IFF_L3MDEV_RX_HANDLER		IFF_L3MDEV_RX_HANDLER  #define IFF_LIVE_RENAME_OK		IFF_LIVE_RENAME_OK +/* Specifies the type of the struct net_device::ml_priv pointer */ +enum netdev_ml_priv_type { +	ML_PRIV_NONE, +	ML_PRIV_CAN, +}; +  /**   *	struct net_device - The DEVICE structure.   * @@ -1779,6 +1785,7 @@ enum netdev_priv_flags {   * 	@nd_net:		Network namespace this network device is inside   *   * 	@ml_priv:	Mid-layer private + *	@ml_priv_type:  Mid-layer private type   * 	@lstats:	Loopback statistics   * 	@tstats:	Tunnel statistics   * 	@dstats:	Dummy statistics @@ -2094,8 +2101,10 @@ struct net_device {  	possible_net_t			nd_net;  	/* mid-layer private */ +	void				*ml_priv; +	enum netdev_ml_priv_type	ml_priv_type; +  	union { -		void					*ml_priv;  		struct pcpu_lstats __percpu		*lstats;  		struct pcpu_sw_netstats __percpu	*tstats;  		struct pcpu_dstats __percpu		*dstats; @@ -2286,6 +2295,29 @@ static inline void netdev_reset_rx_headroom(struct net_device *dev)  	netdev_set_rx_headroom(dev, -1);  } +static inline void *netdev_get_ml_priv(struct net_device *dev, +				       enum netdev_ml_priv_type type) +{ +	if (dev->ml_priv_type != type) +		return NULL; + +	return dev->ml_priv; +} + +static inline void netdev_set_ml_priv(struct net_device *dev, +				      void *ml_priv, +				      enum netdev_ml_priv_type type) +{ +	WARN(dev->ml_priv_type && dev->ml_priv_type != type, +	     "Overwriting already set ml_priv_type (%u) with different ml_priv_type (%u)!\n", +	     dev->ml_priv_type, type); +	WARN(!dev->ml_priv_type && dev->ml_priv, +	     "Overwriting already set ml_priv and ml_priv_type is ML_PRIV_NONE!\n"); + +	dev->ml_priv = ml_priv; +	dev->ml_priv_type = type; +} +  /*   * Net namespace inlines   */  | 
