diff options
Diffstat (limited to 'include/linux/netdevice.h')
| -rw-r--r-- | include/linux/netdevice.h | 52 | 
1 files changed, 34 insertions, 18 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5cbaa20f165..e7fd468f712 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -54,6 +54,7 @@  #include <net/netprio_cgroup.h>  #include <linux/netdev_features.h> +#include <linux/neighbour.h>  struct netpoll_info;  struct device; @@ -288,7 +289,7 @@ struct hh_cache {  struct header_ops {  	int	(*create) (struct sk_buff *skb, struct net_device *dev,  			   unsigned short type, const void *daddr, -			   const void *saddr, unsigned len); +			   const void *saddr, unsigned int len);  	int	(*parse)(const struct sk_buff *skb, unsigned char *haddr);  	int	(*rebuild)(struct sk_buff *skb);  	int	(*cache)(const struct neighbour *neigh, struct hh_cache *hh, __be16 type); @@ -905,6 +906,16 @@ struct netdev_fcoe_hbainfo {   *	feature set might be less than what was returned by ndo_fix_features()).   *	Must return >0 or -errno if it changed dev->features itself.   * + * int (*ndo_fdb_add)(struct ndmsg *ndm, struct net_device *dev, + *		      unsigned char *addr, u16 flags) + *	Adds an FDB entry to dev for addr. + * int (*ndo_fdb_del)(struct ndmsg *ndm, struct net_device *dev, + *		      unsigned char *addr) + *	Deletes the FDB entry from dev coresponding to addr. + * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, + *		       struct net_device *dev, int idx) + *	Used to add FDB entries to dump requests. Implementers should add + *	entries to skb and update idx with the number of entries.   */  struct net_device_ops {  	int			(*ndo_init)(struct net_device *dev); @@ -1002,6 +1013,18 @@ struct net_device_ops {  						    netdev_features_t features);  	int			(*ndo_neigh_construct)(struct neighbour *n);  	void			(*ndo_neigh_destroy)(struct neighbour *n); + +	int			(*ndo_fdb_add)(struct ndmsg *ndm, +					       struct net_device *dev, +					       unsigned char *addr, +					       u16 flags); +	int			(*ndo_fdb_del)(struct ndmsg *ndm, +					       struct net_device *dev, +					       unsigned char *addr); +	int			(*ndo_fdb_dump)(struct sk_buff *skb, +						struct netlink_callback *cb, +						struct net_device *dev, +						int idx);  };  /* @@ -1132,7 +1155,6 @@ struct net_device {  	struct in_device __rcu	*ip_ptr;	/* IPv4 specific data	*/  	struct dn_dev __rcu     *dn_ptr;        /* DECnet specific data */  	struct inet6_dev __rcu	*ip6_ptr;       /* IPv6 specific data */ -	void			*ec_ptr;	/* Econet specific data	*/  	void			*ax25_ptr;	/* AX.25 specific data */  	struct wireless_dev	*ieee80211_ptr;	/* IEEE 802.11 specific data,  						   assign before registering */ @@ -1403,15 +1425,6 @@ static inline bool netdev_uses_dsa_tags(struct net_device *dev)  	return 0;  } -#ifndef CONFIG_NET_NS -static inline void skb_set_dev(struct sk_buff *skb, struct net_device *dev) -{ -	skb->dev = dev; -} -#else /* CONFIG_NET_NS */ -void skb_set_dev(struct sk_buff *skb, struct net_device *dev); -#endif -  static inline bool netdev_uses_trailer_tags(struct net_device *dev)  {  #ifdef CONFIG_NET_DSA_TAG_TRAILER @@ -1486,6 +1499,8 @@ struct napi_gro_cb {  	/* Free the skb? */  	int free; +#define NAPI_GRO_FREE		  1 +#define NAPI_GRO_FREE_STOLEN_HEAD 2  };  #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb) @@ -1689,7 +1704,7 @@ static inline void *skb_gro_network_header(struct sk_buff *skb)  static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,  				  unsigned short type,  				  const void *daddr, const void *saddr, -				  unsigned len) +				  unsigned int len)  {  	if (!dev->header_ops || !dev->header_ops->create)  		return 0; @@ -1740,7 +1755,7 @@ struct softnet_data {  	unsigned int		input_queue_head;  	unsigned int		input_queue_tail;  #endif -	unsigned		dropped; +	unsigned int		dropped;  	struct sk_buff_head	input_pkt_queue;  	struct napi_struct	backlog;  }; @@ -1925,7 +1940,7 @@ static inline void netdev_sent_queue(struct net_device *dev, unsigned int bytes)  }  static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue, -					     unsigned pkts, unsigned bytes) +					     unsigned int pkts, unsigned int bytes)  {  #ifdef CONFIG_BQL  	if (unlikely(!bytes)) @@ -1949,7 +1964,7 @@ static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue,  }  static inline void netdev_completed_queue(struct net_device *dev, -					  unsigned pkts, unsigned bytes) +					  unsigned int pkts, unsigned int bytes)  {  	netdev_tx_completed_queue(netdev_get_tx_queue(dev, 0), pkts, bytes);  } @@ -2127,7 +2142,6 @@ extern struct sk_buff *	napi_get_frags(struct napi_struct *napi);  extern gro_result_t	napi_frags_finish(struct napi_struct *napi,  					  struct sk_buff *skb,  					  gro_result_t ret); -extern struct sk_buff *	napi_frags_skb(struct napi_struct *napi);  extern gro_result_t	napi_gro_frags(struct napi_struct *napi);  static inline void napi_free_frags(struct napi_struct *napi) @@ -2144,9 +2158,9 @@ extern void netdev_rx_handler_unregister(struct net_device *dev);  extern bool		dev_valid_name(const char *name);  extern int		dev_ioctl(struct net *net, unsigned int cmd, void __user *);  extern int		dev_ethtool(struct net *net, struct ifreq *); -extern unsigned		dev_get_flags(const struct net_device *); +extern unsigned int	dev_get_flags(const struct net_device *);  extern int		__dev_change_flags(struct net_device *, unsigned int flags); -extern int		dev_change_flags(struct net_device *, unsigned); +extern int		dev_change_flags(struct net_device *, unsigned int);  extern void		__dev_notify_flags(struct net_device *, unsigned int old_flags);  extern int		dev_change_name(struct net_device *, const char *);  extern int		dev_set_alias(struct net_device *, const char *, size_t); @@ -2546,6 +2560,7 @@ extern int dev_addr_init(struct net_device *dev);  /* Functions used for unicast addresses handling */  extern int dev_uc_add(struct net_device *dev, unsigned char *addr); +extern int dev_uc_add_excl(struct net_device *dev, unsigned char *addr);  extern int dev_uc_del(struct net_device *dev, unsigned char *addr);  extern int dev_uc_sync(struct net_device *to, struct net_device *from);  extern void dev_uc_unsync(struct net_device *to, struct net_device *from); @@ -2555,6 +2570,7 @@ extern void dev_uc_init(struct net_device *dev);  /* Functions used for multicast addresses handling */  extern int dev_mc_add(struct net_device *dev, unsigned char *addr);  extern int dev_mc_add_global(struct net_device *dev, unsigned char *addr); +extern int dev_mc_add_excl(struct net_device *dev, unsigned char *addr);  extern int dev_mc_del(struct net_device *dev, unsigned char *addr);  extern int dev_mc_del_global(struct net_device *dev, unsigned char *addr);  extern int dev_mc_sync(struct net_device *to, struct net_device *from);  |