1  /* SPDX-License-Identifier: GPL-1.0+ */
2  /*
3   * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'.
4   *
5   * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
6   * NCM: Network and Communications Management, Inc.
7   *
8   * BUT, I'm the one who modified it for ethernet, so:
9   * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
10   *
11   */
12  
13  #ifndef _NET_BONDING_H
14  #define _NET_BONDING_H
15  
16  #include <linux/timer.h>
17  #include <linux/proc_fs.h>
18  #include <linux/if_bonding.h>
19  #include <linux/cpumask.h>
20  #include <linux/in6.h>
21  #include <linux/netpoll.h>
22  #include <linux/inetdevice.h>
23  #include <linux/etherdevice.h>
24  #include <linux/reciprocal_div.h>
25  #include <linux/if_link.h>
26  
27  #include <net/bond_3ad.h>
28  #include <net/bond_alb.h>
29  #include <net/bond_options.h>
30  #include <net/ipv6.h>
31  #include <net/addrconf.h>
32  
33  #define BOND_MAX_ARP_TARGETS	16
34  #define BOND_MAX_NS_TARGETS	BOND_MAX_ARP_TARGETS
35  
36  #define BOND_DEFAULT_MIIMON	100
37  
38  #ifndef __long_aligned
39  #define __long_aligned __attribute__((aligned((sizeof(long)))))
40  #endif
41  
42  #define slave_info(bond_dev, slave_dev, fmt, ...) \
43  	netdev_info(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__)
44  #define slave_warn(bond_dev, slave_dev, fmt, ...) \
45  	netdev_warn(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__)
46  #define slave_dbg(bond_dev, slave_dev, fmt, ...) \
47  	netdev_dbg(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__)
48  #define slave_err(bond_dev, slave_dev, fmt, ...) \
49  	netdev_err(bond_dev, "(slave %s): " fmt, (slave_dev)->name, ##__VA_ARGS__)
50  
51  #define BOND_MODE(bond) ((bond)->params.mode)
52  
53  /* slave list primitives */
54  #define bond_slave_list(bond) (&(bond)->dev->adj_list.lower)
55  
56  #define bond_has_slaves(bond) !list_empty(bond_slave_list(bond))
57  
58  /* IMPORTANT: bond_first/last_slave can return NULL in case of an empty list */
59  #define bond_first_slave(bond) \
60  	(bond_has_slaves(bond) ? \
61  		netdev_adjacent_get_private(bond_slave_list(bond)->next) : \
62  		NULL)
63  #define bond_last_slave(bond) \
64  	(bond_has_slaves(bond) ? \
65  		netdev_adjacent_get_private(bond_slave_list(bond)->prev) : \
66  		NULL)
67  
68  /* Caller must have rcu_read_lock */
69  #define bond_first_slave_rcu(bond) \
70  	netdev_lower_get_first_private_rcu(bond->dev)
71  
72  #define bond_is_first_slave(bond, pos) (pos == bond_first_slave(bond))
73  #define bond_is_last_slave(bond, pos) (pos == bond_last_slave(bond))
74  
75  /**
76   * bond_for_each_slave - iterate over all slaves
77   * @bond:	the bond holding this list
78   * @pos:	current slave
79   * @iter:	list_head * iterator
80   *
81   * Caller must hold RTNL
82   */
83  #define bond_for_each_slave(bond, pos, iter) \
84  	netdev_for_each_lower_private((bond)->dev, pos, iter)
85  
86  /* Caller must have rcu_read_lock */
87  #define bond_for_each_slave_rcu(bond, pos, iter) \
88  	netdev_for_each_lower_private_rcu((bond)->dev, pos, iter)
89  
90  #define BOND_XFRM_FEATURES (NETIF_F_HW_ESP | NETIF_F_HW_ESP_TX_CSUM | \
91  			    NETIF_F_GSO_ESP)
92  
93  #ifdef CONFIG_NET_POLL_CONTROLLER
94  extern atomic_t netpoll_block_tx;
95  
block_netpoll_tx(void)96  static inline void block_netpoll_tx(void)
97  {
98  	atomic_inc(&netpoll_block_tx);
99  }
100  
unblock_netpoll_tx(void)101  static inline void unblock_netpoll_tx(void)
102  {
103  	atomic_dec(&netpoll_block_tx);
104  }
105  
is_netpoll_tx_blocked(struct net_device * dev)106  static inline int is_netpoll_tx_blocked(struct net_device *dev)
107  {
108  	if (unlikely(netpoll_tx_running(dev)))
109  		return atomic_read(&netpoll_block_tx);
110  	return 0;
111  }
112  #else
113  #define block_netpoll_tx()
114  #define unblock_netpoll_tx()
115  #define is_netpoll_tx_blocked(dev) (0)
116  #endif
117  
118  struct bond_params {
119  	int mode;
120  	int xmit_policy;
121  	int miimon;
122  	u8 num_peer_notif;
123  	u8 missed_max;
124  	int arp_interval;
125  	int arp_validate;
126  	int arp_all_targets;
127  	int use_carrier;
128  	int fail_over_mac;
129  	int updelay;
130  	int downdelay;
131  	int peer_notif_delay;
132  	int lacp_active;
133  	int lacp_fast;
134  	unsigned int min_links;
135  	int ad_select;
136  	char primary[IFNAMSIZ];
137  	int primary_reselect;
138  	__be32 arp_targets[BOND_MAX_ARP_TARGETS];
139  	int tx_queues;
140  	int all_slaves_active;
141  	int resend_igmp;
142  	int lp_interval;
143  	int packets_per_slave;
144  	int tlb_dynamic_lb;
145  	struct reciprocal_value reciprocal_packets_per_slave;
146  	u16 ad_actor_sys_prio;
147  	u16 ad_user_port_key;
148  #if IS_ENABLED(CONFIG_IPV6)
149  	struct in6_addr ns_targets[BOND_MAX_NS_TARGETS];
150  #endif
151  	int coupled_control;
152  
153  	/* 2 bytes of padding : see ether_addr_equal_64bits() */
154  	u8 ad_actor_system[ETH_ALEN + 2];
155  };
156  
157  struct slave {
158  	struct net_device *dev; /* first - useful for panic debug */
159  	struct bonding *bond; /* our master */
160  	int    delay;
161  	/* all 4 in jiffies */
162  	unsigned long last_link_up;
163  	unsigned long last_tx;
164  	unsigned long last_rx;
165  	unsigned long target_last_arp_rx[BOND_MAX_ARP_TARGETS];
166  	s8     link;		/* one of BOND_LINK_XXXX */
167  	s8     link_new_state;	/* one of BOND_LINK_XXXX */
168  	u8     backup:1,   /* indicates backup slave. Value corresponds with
169  			      BOND_STATE_ACTIVE and BOND_STATE_BACKUP */
170  	       inactive:1, /* indicates inactive slave */
171  	       rx_disabled:1, /* indicates whether slave's Rx is disabled */
172  	       should_notify:1, /* indicates whether the state changed */
173  	       should_notify_link:1; /* indicates whether the link changed */
174  	u8     duplex;
175  	u32    original_mtu;
176  	u32    link_failure_count;
177  	u32    speed;
178  	u16    queue_id;
179  	u8     perm_hwaddr[MAX_ADDR_LEN];
180  	int    prio;
181  	struct ad_slave_info *ad_info;
182  	struct tlb_slave_info tlb_info;
183  #ifdef CONFIG_NET_POLL_CONTROLLER
184  	struct netpoll *np;
185  #endif
186  	struct delayed_work notify_work;
187  	struct kobject kobj;
188  	struct rtnl_link_stats64 slave_stats;
189  };
190  
to_slave(struct kobject * kobj)191  static inline struct slave *to_slave(struct kobject *kobj)
192  {
193  	return container_of(kobj, struct slave, kobj);
194  }
195  
196  struct bond_up_slave {
197  	unsigned int	count;
198  	struct rcu_head rcu;
199  	struct slave	*arr[];
200  };
201  
202  /*
203   * Link pseudo-state only used internally by monitors
204   */
205  #define BOND_LINK_NOCHANGE -1
206  
207  struct bond_ipsec {
208  	struct list_head list;
209  	struct xfrm_state *xs;
210  };
211  
212  /*
213   * Here are the locking policies for the two bonding locks:
214   * Get rcu_read_lock when reading or RTNL when writing slave list.
215   */
216  struct bonding {
217  	struct   net_device *dev; /* first - useful for panic debug */
218  	struct   slave __rcu *curr_active_slave;
219  	struct   slave __rcu *current_arp_slave;
220  	struct   slave __rcu *primary_slave;
221  	struct   bond_up_slave __rcu *usable_slaves;
222  	struct   bond_up_slave __rcu *all_slaves;
223  	bool     force_primary;
224  	bool     notifier_ctx;
225  	s32      slave_cnt; /* never change this value outside the attach/detach wrappers */
226  	int     (*recv_probe)(const struct sk_buff *, struct bonding *,
227  			      struct slave *);
228  	/* mode_lock is used for mode-specific locking needs, currently used by:
229  	 * 3ad mode (4) - protect against running bond_3ad_unbind_slave() and
230  	 *                bond_3ad_state_machine_handler() concurrently and also
231  	 *                the access to the state machine shared variables.
232  	 * TLB mode (5) - to sync the use and modifications of its hash table
233  	 * ALB mode (6) - to sync the use and modifications of its hash table
234  	 */
235  	spinlock_t mode_lock;
236  	spinlock_t stats_lock;
237  	u32	 send_peer_notif;
238  	u8       igmp_retrans;
239  #ifdef CONFIG_PROC_FS
240  	struct   proc_dir_entry *proc_entry;
241  	char     proc_file_name[IFNAMSIZ];
242  #endif /* CONFIG_PROC_FS */
243  	struct   list_head bond_list;
244  	u32 __percpu *rr_tx_counter;
245  	struct   ad_bond_info ad_info;
246  	struct   alb_bond_info alb_info;
247  	struct   bond_params params;
248  	struct   workqueue_struct *wq;
249  	struct   delayed_work mii_work;
250  	struct   delayed_work arp_work;
251  	struct   delayed_work alb_work;
252  	struct   delayed_work ad_work;
253  	struct   delayed_work mcast_work;
254  	struct   delayed_work slave_arr_work;
255  #ifdef CONFIG_DEBUG_FS
256  	/* debugging support via debugfs */
257  	struct	 dentry *debug_dir;
258  #endif /* CONFIG_DEBUG_FS */
259  	struct rtnl_link_stats64 bond_stats;
260  #ifdef CONFIG_XFRM_OFFLOAD
261  	struct list_head ipsec_list;
262  	/* protecting ipsec_list */
263  	struct mutex ipsec_lock;
264  #endif /* CONFIG_XFRM_OFFLOAD */
265  	struct bpf_prog *xdp_prog;
266  };
267  
268  #define bond_slave_get_rcu(dev) \
269  	((struct slave *) rcu_dereference(dev->rx_handler_data))
270  
271  #define bond_slave_get_rtnl(dev) \
272  	((struct slave *) rtnl_dereference(dev->rx_handler_data))
273  
274  void bond_queue_slave_event(struct slave *slave);
275  void bond_lower_state_changed(struct slave *slave);
276  
277  struct bond_vlan_tag {
278  	__be16		vlan_proto;
279  	unsigned short	vlan_id;
280  };
281  
282  /*
283   * Returns NULL if the net_device does not belong to any of the bond's slaves
284   *
285   * Caller must hold bond lock for read
286   */
bond_get_slave_by_dev(struct bonding * bond,struct net_device * slave_dev)287  static inline struct slave *bond_get_slave_by_dev(struct bonding *bond,
288  						  struct net_device *slave_dev)
289  {
290  	return netdev_lower_dev_get_private(bond->dev, slave_dev);
291  }
292  
bond_get_bond_by_slave(struct slave * slave)293  static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)
294  {
295  	return slave->bond;
296  }
297  
bond_should_override_tx_queue(struct bonding * bond)298  static inline bool bond_should_override_tx_queue(struct bonding *bond)
299  {
300  	return BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP ||
301  	       BOND_MODE(bond) == BOND_MODE_ROUNDROBIN;
302  }
303  
bond_is_lb(const struct bonding * bond)304  static inline bool bond_is_lb(const struct bonding *bond)
305  {
306  	return BOND_MODE(bond) == BOND_MODE_TLB ||
307  	       BOND_MODE(bond) == BOND_MODE_ALB;
308  }
309  
bond_needs_speed_duplex(const struct bonding * bond)310  static inline bool bond_needs_speed_duplex(const struct bonding *bond)
311  {
312  	return BOND_MODE(bond) == BOND_MODE_8023AD || bond_is_lb(bond);
313  }
314  
bond_is_nondyn_tlb(const struct bonding * bond)315  static inline bool bond_is_nondyn_tlb(const struct bonding *bond)
316  {
317  	return (bond_is_lb(bond) && bond->params.tlb_dynamic_lb == 0);
318  }
319  
bond_mode_can_use_xmit_hash(const struct bonding * bond)320  static inline bool bond_mode_can_use_xmit_hash(const struct bonding *bond)
321  {
322  	return (BOND_MODE(bond) == BOND_MODE_8023AD ||
323  		BOND_MODE(bond) == BOND_MODE_XOR ||
324  		BOND_MODE(bond) == BOND_MODE_TLB ||
325  		BOND_MODE(bond) == BOND_MODE_ALB);
326  }
327  
bond_mode_uses_xmit_hash(const struct bonding * bond)328  static inline bool bond_mode_uses_xmit_hash(const struct bonding *bond)
329  {
330  	return (BOND_MODE(bond) == BOND_MODE_8023AD ||
331  		BOND_MODE(bond) == BOND_MODE_XOR ||
332  		bond_is_nondyn_tlb(bond));
333  }
334  
bond_mode_uses_arp(int mode)335  static inline bool bond_mode_uses_arp(int mode)
336  {
337  	return mode != BOND_MODE_8023AD && mode != BOND_MODE_TLB &&
338  	       mode != BOND_MODE_ALB;
339  }
340  
bond_mode_uses_primary(int mode)341  static inline bool bond_mode_uses_primary(int mode)
342  {
343  	return mode == BOND_MODE_ACTIVEBACKUP || mode == BOND_MODE_TLB ||
344  	       mode == BOND_MODE_ALB;
345  }
346  
bond_uses_primary(struct bonding * bond)347  static inline bool bond_uses_primary(struct bonding *bond)
348  {
349  	return bond_mode_uses_primary(BOND_MODE(bond));
350  }
351  
bond_option_active_slave_get_rcu(struct bonding * bond)352  static inline struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond)
353  {
354  	struct slave *slave = rcu_dereference_rtnl(bond->curr_active_slave);
355  
356  	return bond_uses_primary(bond) && slave ? slave->dev : NULL;
357  }
358  
bond_slave_is_up(struct slave * slave)359  static inline bool bond_slave_is_up(struct slave *slave)
360  {
361  	return netif_running(slave->dev) && netif_carrier_ok(slave->dev);
362  }
363  
bond_set_active_slave(struct slave * slave)364  static inline void bond_set_active_slave(struct slave *slave)
365  {
366  	if (slave->backup) {
367  		slave->backup = 0;
368  		bond_queue_slave_event(slave);
369  		bond_lower_state_changed(slave);
370  	}
371  }
372  
bond_set_backup_slave(struct slave * slave)373  static inline void bond_set_backup_slave(struct slave *slave)
374  {
375  	if (!slave->backup) {
376  		slave->backup = 1;
377  		bond_queue_slave_event(slave);
378  		bond_lower_state_changed(slave);
379  	}
380  }
381  
bond_set_slave_state(struct slave * slave,int slave_state,bool notify)382  static inline void bond_set_slave_state(struct slave *slave,
383  					int slave_state, bool notify)
384  {
385  	if (slave->backup == slave_state)
386  		return;
387  
388  	slave->backup = slave_state;
389  	if (notify) {
390  		bond_lower_state_changed(slave);
391  		bond_queue_slave_event(slave);
392  		slave->should_notify = 0;
393  	} else {
394  		if (slave->should_notify)
395  			slave->should_notify = 0;
396  		else
397  			slave->should_notify = 1;
398  	}
399  }
400  
bond_slave_state_change(struct bonding * bond)401  static inline void bond_slave_state_change(struct bonding *bond)
402  {
403  	struct list_head *iter;
404  	struct slave *tmp;
405  
406  	bond_for_each_slave(bond, tmp, iter) {
407  		if (tmp->link == BOND_LINK_UP)
408  			bond_set_active_slave(tmp);
409  		else if (tmp->link == BOND_LINK_DOWN)
410  			bond_set_backup_slave(tmp);
411  	}
412  }
413  
bond_slave_state_notify(struct bonding * bond)414  static inline void bond_slave_state_notify(struct bonding *bond)
415  {
416  	struct list_head *iter;
417  	struct slave *tmp;
418  
419  	bond_for_each_slave(bond, tmp, iter) {
420  		if (tmp->should_notify) {
421  			bond_lower_state_changed(tmp);
422  			tmp->should_notify = 0;
423  		}
424  	}
425  }
426  
bond_slave_state(struct slave * slave)427  static inline int bond_slave_state(struct slave *slave)
428  {
429  	return slave->backup;
430  }
431  
bond_is_active_slave(struct slave * slave)432  static inline bool bond_is_active_slave(struct slave *slave)
433  {
434  	return !bond_slave_state(slave);
435  }
436  
bond_slave_can_tx(struct slave * slave)437  static inline bool bond_slave_can_tx(struct slave *slave)
438  {
439  	return bond_slave_is_up(slave) && slave->link == BOND_LINK_UP &&
440  	       bond_is_active_slave(slave);
441  }
442  
bond_is_active_slave_dev(const struct net_device * slave_dev)443  static inline bool bond_is_active_slave_dev(const struct net_device *slave_dev)
444  {
445  	struct slave *slave;
446  	bool active;
447  
448  	rcu_read_lock();
449  	slave = bond_slave_get_rcu(slave_dev);
450  	active = bond_is_active_slave(slave);
451  	rcu_read_unlock();
452  
453  	return active;
454  }
455  
bond_hw_addr_copy(u8 * dst,const u8 * src,unsigned int len)456  static inline void bond_hw_addr_copy(u8 *dst, const u8 *src, unsigned int len)
457  {
458  	if (len == ETH_ALEN) {
459  		ether_addr_copy(dst, src);
460  		return;
461  	}
462  
463  	memcpy(dst, src, len);
464  }
465  
466  #define BOND_PRI_RESELECT_ALWAYS	0
467  #define BOND_PRI_RESELECT_BETTER	1
468  #define BOND_PRI_RESELECT_FAILURE	2
469  
470  #define BOND_FOM_NONE			0
471  #define BOND_FOM_ACTIVE			1
472  #define BOND_FOM_FOLLOW			2
473  
474  #define BOND_ARP_TARGETS_ANY		0
475  #define BOND_ARP_TARGETS_ALL		1
476  
477  #define BOND_ARP_VALIDATE_NONE		0
478  #define BOND_ARP_VALIDATE_ACTIVE	(1 << BOND_STATE_ACTIVE)
479  #define BOND_ARP_VALIDATE_BACKUP	(1 << BOND_STATE_BACKUP)
480  #define BOND_ARP_VALIDATE_ALL		(BOND_ARP_VALIDATE_ACTIVE | \
481  					 BOND_ARP_VALIDATE_BACKUP)
482  #define BOND_ARP_FILTER			(BOND_ARP_VALIDATE_ALL + 1)
483  #define BOND_ARP_FILTER_ACTIVE		(BOND_ARP_VALIDATE_ACTIVE | \
484  					 BOND_ARP_FILTER)
485  #define BOND_ARP_FILTER_BACKUP		(BOND_ARP_VALIDATE_BACKUP | \
486  					 BOND_ARP_FILTER)
487  
488  #define BOND_SLAVE_NOTIFY_NOW		true
489  #define BOND_SLAVE_NOTIFY_LATER		false
490  
slave_do_arp_validate(struct bonding * bond,struct slave * slave)491  static inline int slave_do_arp_validate(struct bonding *bond,
492  					struct slave *slave)
493  {
494  	return bond->params.arp_validate & (1 << bond_slave_state(slave));
495  }
496  
slave_do_arp_validate_only(struct bonding * bond)497  static inline int slave_do_arp_validate_only(struct bonding *bond)
498  {
499  	return bond->params.arp_validate & BOND_ARP_FILTER;
500  }
501  
bond_is_ip_target_ok(__be32 addr)502  static inline int bond_is_ip_target_ok(__be32 addr)
503  {
504  	return !ipv4_is_lbcast(addr) && !ipv4_is_zeronet(addr);
505  }
506  
507  #if IS_ENABLED(CONFIG_IPV6)
bond_is_ip6_target_ok(struct in6_addr * addr)508  static inline int bond_is_ip6_target_ok(struct in6_addr *addr)
509  {
510  	return !ipv6_addr_any(addr) &&
511  	       !ipv6_addr_loopback(addr) &&
512  	       !ipv6_addr_is_multicast(addr);
513  }
514  #endif
515  
516  /* Get the oldest arp which we've received on this slave for bond's
517   * arp_targets.
518   */
slave_oldest_target_arp_rx(struct bonding * bond,struct slave * slave)519  static inline unsigned long slave_oldest_target_arp_rx(struct bonding *bond,
520  						       struct slave *slave)
521  {
522  	int i = 1;
523  	unsigned long ret = slave->target_last_arp_rx[0];
524  
525  	for (; (i < BOND_MAX_ARP_TARGETS) && bond->params.arp_targets[i]; i++)
526  		if (time_before(slave->target_last_arp_rx[i], ret))
527  			ret = slave->target_last_arp_rx[i];
528  
529  	return ret;
530  }
531  
slave_last_rx(struct bonding * bond,struct slave * slave)532  static inline unsigned long slave_last_rx(struct bonding *bond,
533  					struct slave *slave)
534  {
535  	if (bond->params.arp_all_targets == BOND_ARP_TARGETS_ALL)
536  		return slave_oldest_target_arp_rx(bond, slave);
537  
538  	return slave->last_rx;
539  }
540  
slave_update_last_tx(struct slave * slave)541  static inline void slave_update_last_tx(struct slave *slave)
542  {
543  	WRITE_ONCE(slave->last_tx, jiffies);
544  }
545  
slave_last_tx(struct slave * slave)546  static inline unsigned long slave_last_tx(struct slave *slave)
547  {
548  	return READ_ONCE(slave->last_tx);
549  }
550  
551  #ifdef CONFIG_NET_POLL_CONTROLLER
bond_netpoll_send_skb(const struct slave * slave,struct sk_buff * skb)552  static inline netdev_tx_t bond_netpoll_send_skb(const struct slave *slave,
553  					 struct sk_buff *skb)
554  {
555  	return netpoll_send_skb(slave->np, skb);
556  }
557  #else
bond_netpoll_send_skb(const struct slave * slave,struct sk_buff * skb)558  static inline netdev_tx_t bond_netpoll_send_skb(const struct slave *slave,
559  					 struct sk_buff *skb)
560  {
561  	BUG();
562  	return NETDEV_TX_OK;
563  }
564  #endif
565  
bond_set_slave_inactive_flags(struct slave * slave,bool notify)566  static inline void bond_set_slave_inactive_flags(struct slave *slave,
567  						 bool notify)
568  {
569  	if (!bond_is_lb(slave->bond))
570  		bond_set_slave_state(slave, BOND_STATE_BACKUP, notify);
571  	if (!slave->bond->params.all_slaves_active)
572  		slave->inactive = 1;
573  	if (BOND_MODE(slave->bond) == BOND_MODE_8023AD)
574  		slave->rx_disabled = 1;
575  }
576  
bond_set_slave_tx_disabled_flags(struct slave * slave,bool notify)577  static inline void bond_set_slave_tx_disabled_flags(struct slave *slave,
578  						 bool notify)
579  {
580  	bond_set_slave_state(slave, BOND_STATE_BACKUP, notify);
581  }
582  
bond_set_slave_active_flags(struct slave * slave,bool notify)583  static inline void bond_set_slave_active_flags(struct slave *slave,
584  					       bool notify)
585  {
586  	bond_set_slave_state(slave, BOND_STATE_ACTIVE, notify);
587  	slave->inactive = 0;
588  	if (BOND_MODE(slave->bond) == BOND_MODE_8023AD)
589  		slave->rx_disabled = 0;
590  }
591  
bond_set_slave_rx_enabled_flags(struct slave * slave,bool notify)592  static inline void bond_set_slave_rx_enabled_flags(struct slave *slave,
593  					       bool notify)
594  {
595  	slave->rx_disabled = 0;
596  }
597  
bond_is_slave_inactive(struct slave * slave)598  static inline bool bond_is_slave_inactive(struct slave *slave)
599  {
600  	return slave->inactive;
601  }
602  
bond_is_slave_rx_disabled(struct slave * slave)603  static inline bool bond_is_slave_rx_disabled(struct slave *slave)
604  {
605  	return slave->rx_disabled;
606  }
607  
bond_propose_link_state(struct slave * slave,int state)608  static inline void bond_propose_link_state(struct slave *slave, int state)
609  {
610  	slave->link_new_state = state;
611  }
612  
bond_commit_link_state(struct slave * slave,bool notify)613  static inline void bond_commit_link_state(struct slave *slave, bool notify)
614  {
615  	if (slave->link_new_state == BOND_LINK_NOCHANGE)
616  		return;
617  
618  	slave->link = slave->link_new_state;
619  	if (notify) {
620  		bond_queue_slave_event(slave);
621  		bond_lower_state_changed(slave);
622  		slave->should_notify_link = 0;
623  	} else {
624  		if (slave->should_notify_link)
625  			slave->should_notify_link = 0;
626  		else
627  			slave->should_notify_link = 1;
628  	}
629  }
630  
bond_set_slave_link_state(struct slave * slave,int state,bool notify)631  static inline void bond_set_slave_link_state(struct slave *slave, int state,
632  					     bool notify)
633  {
634  	bond_propose_link_state(slave, state);
635  	bond_commit_link_state(slave, notify);
636  }
637  
bond_slave_link_notify(struct bonding * bond)638  static inline void bond_slave_link_notify(struct bonding *bond)
639  {
640  	struct list_head *iter;
641  	struct slave *tmp;
642  
643  	bond_for_each_slave(bond, tmp, iter) {
644  		if (tmp->should_notify_link) {
645  			bond_queue_slave_event(tmp);
646  			bond_lower_state_changed(tmp);
647  			tmp->should_notify_link = 0;
648  		}
649  	}
650  }
651  
bond_confirm_addr(struct net_device * dev,__be32 dst,__be32 local)652  static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be32 local)
653  {
654  	struct in_device *in_dev;
655  	__be32 addr = 0;
656  
657  	rcu_read_lock();
658  	in_dev = __in_dev_get_rcu(dev);
659  
660  	if (in_dev)
661  		addr = inet_confirm_addr(dev_net(dev), in_dev, dst, local,
662  					 RT_SCOPE_HOST);
663  	rcu_read_unlock();
664  	return addr;
665  }
666  
667  struct bond_net {
668  	struct net		*net;	/* Associated network namespace */
669  	struct list_head	dev_list;
670  #ifdef CONFIG_PROC_FS
671  	struct proc_dir_entry	*proc_dir;
672  #endif
673  	struct class_attribute	class_attr_bonding_masters;
674  };
675  
676  int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond, struct slave *slave);
677  netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
678  int bond_create(struct net *net, const char *name);
679  int bond_create_sysfs(struct bond_net *net);
680  void bond_destroy_sysfs(struct bond_net *net);
681  void bond_prepare_sysfs_group(struct bonding *bond);
682  int bond_sysfs_slave_add(struct slave *slave);
683  void bond_sysfs_slave_del(struct slave *slave);
684  void bond_xdp_set_features(struct net_device *bond_dev);
685  int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
686  		 struct netlink_ext_ack *extack);
687  int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
688  u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
689  int bond_set_carrier(struct bonding *bond);
690  void bond_select_active_slave(struct bonding *bond);
691  void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
692  void bond_create_debugfs(void);
693  void bond_destroy_debugfs(void);
694  void bond_debug_register(struct bonding *bond);
695  void bond_debug_unregister(struct bonding *bond);
696  void bond_debug_reregister(struct bonding *bond);
697  const char *bond_mode_name(int mode);
698  void bond_setup(struct net_device *bond_dev);
699  unsigned int bond_get_num_tx_queues(void);
700  int bond_netlink_init(void);
701  void bond_netlink_fini(void);
702  struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond);
703  const char *bond_slave_link_status(s8 link);
704  struct bond_vlan_tag *bond_verify_device_path(struct net_device *start_dev,
705  					      struct net_device *end_dev,
706  					      int level);
707  int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave);
708  void bond_slave_arr_work_rearm(struct bonding *bond, unsigned long delay);
709  void bond_work_init_all(struct bonding *bond);
710  
711  #ifdef CONFIG_PROC_FS
712  void bond_create_proc_entry(struct bonding *bond);
713  void bond_remove_proc_entry(struct bonding *bond);
714  void bond_create_proc_dir(struct bond_net *bn);
715  void bond_destroy_proc_dir(struct bond_net *bn);
716  #else
bond_create_proc_entry(struct bonding * bond)717  static inline void bond_create_proc_entry(struct bonding *bond)
718  {
719  }
720  
bond_remove_proc_entry(struct bonding * bond)721  static inline void bond_remove_proc_entry(struct bonding *bond)
722  {
723  }
724  
bond_create_proc_dir(struct bond_net * bn)725  static inline void bond_create_proc_dir(struct bond_net *bn)
726  {
727  }
728  
bond_destroy_proc_dir(struct bond_net * bn)729  static inline void bond_destroy_proc_dir(struct bond_net *bn)
730  {
731  }
732  #endif
733  
bond_slave_has_mac(struct bonding * bond,const u8 * mac)734  static inline struct slave *bond_slave_has_mac(struct bonding *bond,
735  					       const u8 *mac)
736  {
737  	struct list_head *iter;
738  	struct slave *tmp;
739  
740  	bond_for_each_slave(bond, tmp, iter)
741  		if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
742  			return tmp;
743  
744  	return NULL;
745  }
746  
747  /* Caller must hold rcu_read_lock() for read */
bond_slave_has_mac_rcu(struct bonding * bond,const u8 * mac)748  static inline bool bond_slave_has_mac_rcu(struct bonding *bond, const u8 *mac)
749  {
750  	struct list_head *iter;
751  	struct slave *tmp;
752  
753  	bond_for_each_slave_rcu(bond, tmp, iter)
754  		if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
755  			return true;
756  	return false;
757  }
758  
759  /* Check if the ip is present in arp ip list, or first free slot if ip == 0
760   * Returns -1 if not found, index if found
761   */
bond_get_targets_ip(__be32 * targets,__be32 ip)762  static inline int bond_get_targets_ip(__be32 *targets, __be32 ip)
763  {
764  	int i;
765  
766  	for (i = 0; i < BOND_MAX_ARP_TARGETS; i++)
767  		if (targets[i] == ip)
768  			return i;
769  		else if (targets[i] == 0)
770  			break;
771  
772  	return -1;
773  }
774  
775  #if IS_ENABLED(CONFIG_IPV6)
bond_get_targets_ip6(struct in6_addr * targets,struct in6_addr * ip)776  static inline int bond_get_targets_ip6(struct in6_addr *targets, struct in6_addr *ip)
777  {
778  	struct in6_addr mcaddr;
779  	int i;
780  
781  	for (i = 0; i < BOND_MAX_NS_TARGETS; i++) {
782  		addrconf_addr_solict_mult(&targets[i], &mcaddr);
783  		if ((ipv6_addr_equal(&targets[i], ip)) ||
784  		    (ipv6_addr_equal(&mcaddr, ip)))
785  			return i;
786  		else if (ipv6_addr_any(&targets[i]))
787  			break;
788  	}
789  
790  	return -1;
791  }
792  #endif
793  
794  /* exported from bond_main.c */
795  extern unsigned int bond_net_id;
796  
797  /* exported from bond_netlink.c */
798  extern struct rtnl_link_ops bond_link_ops;
799  
800  /* exported from bond_sysfs_slave.c */
801  extern const struct sysfs_ops slave_sysfs_ops;
802  
803  /* exported from bond_3ad.c */
804  extern const u8 lacpdu_mcast_addr[];
805  
bond_tx_drop(struct net_device * dev,struct sk_buff * skb)806  static inline netdev_tx_t bond_tx_drop(struct net_device *dev, struct sk_buff *skb)
807  {
808  	dev_core_stats_tx_dropped_inc(dev);
809  	dev_kfree_skb_any(skb);
810  	return NET_XMIT_DROP;
811  }
812  
813  #endif /* _NET_BONDING_H */
814