diff options
Diffstat (limited to 'include/linux/netdevice.h')
| -rw-r--r-- | include/linux/netdevice.h | 76 | 
1 files changed, 51 insertions, 25 deletions
| diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 857f8abf7b91..1377d085ef99 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -845,6 +845,8 @@ enum tc_setup_type {  	TC_SETUP_QDISC_PRIO,  	TC_SETUP_QDISC_MQ,  	TC_SETUP_QDISC_ETF, +	TC_SETUP_ROOT_QDISC, +	TC_SETUP_QDISC_GRED,  };  /* These structures hold the attributes of bpf state that are being passed @@ -863,9 +865,6 @@ enum bpf_netdev_command {  	XDP_QUERY_PROG,  	XDP_QUERY_PROG_HW,  	/* BPF program for offload callbacks, invoked at program load time. */ -	BPF_OFFLOAD_VERIFIER_PREP, -	BPF_OFFLOAD_TRANSLATE, -	BPF_OFFLOAD_DESTROY,  	BPF_OFFLOAD_MAP_ALLOC,  	BPF_OFFLOAD_MAP_FREE,  	XDP_QUERY_XSK_UMEM, @@ -891,15 +890,6 @@ struct netdev_bpf {  			/* flags with which program was installed */  			u32 prog_flags;  		}; -		/* BPF_OFFLOAD_VERIFIER_PREP */ -		struct { -			struct bpf_prog *prog; -			const struct bpf_prog_offload_ops *ops; /* callee set */ -		} verifier; -		/* BPF_OFFLOAD_TRANSLATE, BPF_OFFLOAD_DESTROY */ -		struct { -			struct bpf_prog *prog; -		} offload;  		/* BPF_OFFLOAD_MAP_ALLOC, BPF_OFFLOAD_MAP_FREE */  		struct {  			struct bpf_offloaded_map *offmap; @@ -1175,7 +1165,7 @@ struct dev_ifalias {   *	entries to skb and update idx with the number of entries.   *   * int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh, - *			     u16 flags) + *			     u16 flags, struct netlink_ext_ack *extack)   * int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq,   *			     struct net_device *dev, u32 filter_mask,   *			     int nlflags) @@ -1397,10 +1387,16 @@ struct net_device_ops {  						struct net_device *dev,  						struct net_device *filter_dev,  						int *idx); - +	int			(*ndo_fdb_get)(struct sk_buff *skb, +					       struct nlattr *tb[], +					       struct net_device *dev, +					       const unsigned char *addr, +					       u16 vid, u32 portid, u32 seq, +					       struct netlink_ext_ack *extack);  	int			(*ndo_bridge_setlink)(struct net_device *dev,  						      struct nlmsghdr *nlh, -						      u16 flags); +						      u16 flags, +						      struct netlink_ext_ack *extack);  	int			(*ndo_bridge_getlink)(struct sk_buff *skb,  						      u32 pid, u32 seq,  						      struct net_device *dev, @@ -2388,13 +2384,13 @@ struct pcpu_sw_netstats {  	u64     tx_packets;  	u64     tx_bytes;  	struct u64_stats_sync   syncp; -}; +} __aligned(4 * sizeof(u64));  struct pcpu_lstats {  	u64 packets;  	u64 bytes;  	struct u64_stats_sync syncp; -}; +} __aligned(2 * sizeof(u64));  #define __netdev_alloc_pcpu_stats(type, gfp)				\  ({									\ @@ -2459,7 +2455,8 @@ enum netdev_cmd {  	NETDEV_REGISTER,  	NETDEV_UNREGISTER,  	NETDEV_CHANGEMTU,	/* notify after mtu change happened */ -	NETDEV_CHANGEADDR, +	NETDEV_CHANGEADDR,	/* notify after the address change */ +	NETDEV_PRE_CHANGEADDR,	/* notify before the address change */  	NETDEV_GOING_DOWN,  	NETDEV_CHANGENAME,  	NETDEV_FEAT_CHANGE, @@ -2521,6 +2518,11 @@ struct netdev_notifier_changelowerstate_info {  	void *lower_state_info; /* is lower dev state */  }; +struct netdev_notifier_pre_changeaddr_info { +	struct netdev_notifier_info info; /* must be first */ +	const unsigned char *dev_addr; +}; +  static inline void netdev_notifier_info_init(struct netdev_notifier_info *info,  					     struct net_device *dev)  { @@ -2615,7 +2617,7 @@ struct net_device *dev_get_by_name(struct net *net, const char *name);  struct net_device *dev_get_by_name_rcu(struct net *net, const char *name);  struct net_device *__dev_get_by_name(struct net *net, const char *name);  int dev_alloc_name(struct net_device *dev, const char *name); -int dev_open(struct net_device *dev); +int dev_open(struct net_device *dev, struct netlink_ext_ack *extack);  void dev_close(struct net_device *dev);  void dev_close_many(struct list_head *head, bool unlink);  void dev_disable_lro(struct net_device *dev); @@ -3224,6 +3226,14 @@ static inline void netdev_sent_queue(struct net_device *dev, unsigned int bytes)  	netdev_tx_sent_queue(netdev_get_tx_queue(dev, 0), bytes);  } +static inline bool __netdev_sent_queue(struct net_device *dev, +				       unsigned int bytes, +				       bool xmit_more) +{ +	return __netdev_tx_sent_queue(netdev_get_tx_queue(dev, 0), bytes, +				      xmit_more); +} +  static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue,  					     unsigned int pkts, unsigned int bytes)  { @@ -3613,8 +3623,10 @@ int dev_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr,  int dev_ifconf(struct net *net, struct ifconf *, int);  int dev_ethtool(struct net *net, struct ifreq *);  unsigned int dev_get_flags(const struct net_device *); -int __dev_change_flags(struct net_device *, unsigned int flags); -int dev_change_flags(struct net_device *, unsigned int); +int __dev_change_flags(struct net_device *dev, unsigned int flags, +		       struct netlink_ext_ack *extack); +int dev_change_flags(struct net_device *dev, unsigned int flags, +		     struct netlink_ext_ack *extack);  void __dev_notify_flags(struct net_device *, unsigned int old_flags,  			unsigned int gchanges);  int dev_change_name(struct net_device *, const char *); @@ -3627,7 +3639,10 @@ int dev_set_mtu_ext(struct net_device *dev, int mtu,  int dev_set_mtu(struct net_device *, int);  int dev_change_tx_queue_len(struct net_device *, unsigned long);  void dev_set_group(struct net_device *, int); -int dev_set_mac_address(struct net_device *, struct sockaddr *); +int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr, +			      struct netlink_ext_ack *extack); +int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, +			struct netlink_ext_ack *extack);  int dev_change_carrier(struct net_device *, bool new_carrier);  int dev_get_phys_port_id(struct net_device *dev,  			 struct netdev_phys_item_id *ppid); @@ -4068,6 +4083,16 @@ int __hw_addr_sync_dev(struct netdev_hw_addr_list *list,  		       int (*sync)(struct net_device *, const unsigned char *),  		       int (*unsync)(struct net_device *,  				     const unsigned char *)); +int __hw_addr_ref_sync_dev(struct netdev_hw_addr_list *list, +			   struct net_device *dev, +			   int (*sync)(struct net_device *, +				       const unsigned char *, int), +			   int (*unsync)(struct net_device *, +					 const unsigned char *, int)); +void __hw_addr_ref_unsync_dev(struct netdev_hw_addr_list *list, +			      struct net_device *dev, +			      int (*unsync)(struct net_device *, +					    const unsigned char *, int));  void __hw_addr_unsync_dev(struct netdev_hw_addr_list *list,  			  struct net_device *dev,  			  int (*unsync)(struct net_device *, @@ -4332,9 +4357,10 @@ static inline bool can_checksum_protocol(netdev_features_t features,  }  #ifdef CONFIG_BUG -void netdev_rx_csum_fault(struct net_device *dev); +void netdev_rx_csum_fault(struct net_device *dev, struct sk_buff *skb);  #else -static inline void netdev_rx_csum_fault(struct net_device *dev) +static inline void netdev_rx_csum_fault(struct net_device *dev, +					struct sk_buff *skb)  {  }  #endif @@ -4360,7 +4386,7 @@ static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_devi  					    struct netdev_queue *txq, bool more)  {  	const struct net_device_ops *ops = dev->netdev_ops; -	int rc; +	netdev_tx_t rc;  	rc = __netdev_start_xmit(ops, skb, dev, more);  	if (rc == NETDEV_TX_OK) | 
