xref: /linux/drivers/net/bonding/bond_3ad.c (revision ca220141fa8ebae09765a242076b2b77338106b0)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved.
4  */
5 
6 #include <linux/skbuff.h>
7 #include <linux/if_ether.h>
8 #include <linux/netdevice.h>
9 #include <linux/spinlock.h>
10 #include <linux/ethtool.h>
11 #include <linux/etherdevice.h>
12 #include <linux/if_bonding.h>
13 #include <linux/pkt_sched.h>
14 #include <net/net_namespace.h>
15 #include <net/bonding.h>
16 #include <net/bond_3ad.h>
17 #include <net/netlink.h>
18 
19 /* General definitions */
20 #define AD_SHORT_TIMEOUT           1
21 #define AD_LONG_TIMEOUT            0
22 #define AD_STANDBY                 0x2
23 #define AD_MAX_TX_IN_SECOND        3
24 #define AD_COLLECTOR_MAX_DELAY     0
25 
26 /* Timer definitions (43.4.4 in the 802.3ad standard) */
27 #define AD_FAST_PERIODIC_TIME      1
28 #define AD_SLOW_PERIODIC_TIME      30
29 #define AD_SHORT_TIMEOUT_TIME      (3*AD_FAST_PERIODIC_TIME)
30 #define AD_LONG_TIMEOUT_TIME       (3*AD_SLOW_PERIODIC_TIME)
31 #define AD_CHURN_DETECTION_TIME    60
32 #define AD_AGGREGATE_WAIT_TIME     2
33 
34 /* Port Variables definitions used by the State Machines (43.4.7 in the
35  * 802.3ad standard)
36  */
37 #define AD_PORT_BEGIN           0x1
38 #define AD_PORT_LACP_ENABLED    0x2
39 #define AD_PORT_ACTOR_CHURN     0x4
40 #define AD_PORT_PARTNER_CHURN   0x8
41 #define AD_PORT_READY           0x10
42 #define AD_PORT_READY_N         0x20
43 #define AD_PORT_MATCHED         0x40
44 #define AD_PORT_STANDBY         0x80
45 #define AD_PORT_SELECTED        0x100
46 #define AD_PORT_MOVED           0x200
47 #define AD_PORT_CHURNED         (AD_PORT_ACTOR_CHURN | AD_PORT_PARTNER_CHURN)
48 
49 /* Port Key definitions
50  * key is determined according to the link speed, duplex and
51  * user key (which is yet not supported)
52  *           --------------------------------------------------------------
53  * Port key  | User key (10 bits)           | Speed (5 bits)      | Duplex|
54  *           --------------------------------------------------------------
55  *           |15                           6|5                   1|0
56  */
57 #define  AD_DUPLEX_KEY_MASKS    0x1
58 #define  AD_SPEED_KEY_MASKS     0x3E
59 #define  AD_USER_KEY_MASKS      0xFFC0
60 
61 enum ad_link_speed_type {
62 	AD_LINK_SPEED_1MBPS = 1,
63 	AD_LINK_SPEED_10MBPS,
64 	AD_LINK_SPEED_100MBPS,
65 	AD_LINK_SPEED_1000MBPS,
66 	AD_LINK_SPEED_2500MBPS,
67 	AD_LINK_SPEED_5000MBPS,
68 	AD_LINK_SPEED_10000MBPS,
69 	AD_LINK_SPEED_14000MBPS,
70 	AD_LINK_SPEED_20000MBPS,
71 	AD_LINK_SPEED_25000MBPS,
72 	AD_LINK_SPEED_40000MBPS,
73 	AD_LINK_SPEED_50000MBPS,
74 	AD_LINK_SPEED_56000MBPS,
75 	AD_LINK_SPEED_80000MBPS,
76 	AD_LINK_SPEED_100000MBPS,
77 	AD_LINK_SPEED_200000MBPS,
78 	AD_LINK_SPEED_400000MBPS,
79 	AD_LINK_SPEED_800000MBPS,
80 	AD_LINK_SPEED_1600000MBPS,
81 };
82 
83 /* compare MAC addresses */
84 #define MAC_ADDRESS_EQUAL(A, B)	\
85 	ether_addr_equal_64bits((const u8 *)A, (const u8 *)B)
86 
87 static const u16 ad_ticks_per_sec = 1000 / AD_TIMER_INTERVAL;
88 static const int ad_delta_in_ticks = (AD_TIMER_INTERVAL * HZ) / 1000;
89 
90 const u8 lacpdu_mcast_addr[ETH_ALEN + 2] __long_aligned = {
91 	0x01, 0x80, 0xC2, 0x00, 0x00, 0x02
92 };
93 
94 /* ================= main 802.3ad protocol functions ================== */
95 static int ad_lacpdu_send(struct port *port);
96 static int ad_marker_send(struct port *port, struct bond_marker *marker);
97 static void ad_mux_machine(struct port *port, bool *update_slave_arr);
98 static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port);
99 static void ad_tx_machine(struct port *port);
100 static void ad_periodic_machine(struct port *port);
101 static void ad_port_selection_logic(struct port *port, bool *update_slave_arr);
102 static void ad_agg_selection_logic(struct aggregator *aggregator,
103 				   bool *update_slave_arr);
104 static void ad_clear_agg(struct aggregator *aggregator);
105 static void ad_initialize_agg(struct aggregator *aggregator);
106 static void ad_initialize_port(struct port *port, const struct bond_params *bond_params);
107 static void ad_enable_collecting(struct port *port);
108 static void ad_disable_distributing(struct port *port,
109 				    bool *update_slave_arr);
110 static void ad_enable_collecting_distributing(struct port *port,
111 					      bool *update_slave_arr);
112 static void ad_disable_collecting_distributing(struct port *port,
113 					       bool *update_slave_arr);
114 static void ad_marker_info_received(struct bond_marker *marker_info,
115 				    struct port *port);
116 static void ad_marker_response_received(struct bond_marker *marker,
117 					struct port *port);
118 static void ad_update_actor_keys(struct port *port, bool reset);
119 
120 
121 /* ================= api to bonding and kernel code ================== */
122 
123 /**
124  * __get_bond_by_port - get the port's bonding struct
125  * @port: the port we're looking at
126  *
127  * Return @port's bonding struct, or %NULL if it can't be found.
128  */
129 static inline struct bonding *__get_bond_by_port(struct port *port)
130 {
131 	if (port->slave == NULL)
132 		return NULL;
133 
134 	return bond_get_bond_by_slave(port->slave);
135 }
136 
137 /**
138  * __get_first_agg - get the first aggregator in the bond
139  * @port: the port we're looking at
140  *
141  * Return the aggregator of the first slave in @bond, or %NULL if it can't be
142  * found.
143  * The caller must hold RCU or RTNL lock.
144  */
145 static inline struct aggregator *__get_first_agg(struct port *port)
146 {
147 	struct bonding *bond = __get_bond_by_port(port);
148 	struct slave *first_slave;
149 	struct aggregator *agg;
150 
151 	/* If there's no bond for this port, or bond has no slaves */
152 	if (bond == NULL)
153 		return NULL;
154 
155 	rcu_read_lock();
156 	first_slave = bond_first_slave_rcu(bond);
157 	agg = first_slave ? &(SLAVE_AD_INFO(first_slave)->aggregator) : NULL;
158 	rcu_read_unlock();
159 
160 	return agg;
161 }
162 
163 /**
164  * __agg_has_partner - see if we have a partner
165  * @agg: the agregator we're looking at
166  *
167  * Return nonzero if aggregator has a partner (denoted by a non-zero ether
168  * address for the partner). Return 0 if not.
169  */
170 static inline int __agg_has_partner(struct aggregator *agg)
171 {
172 	return !is_zero_ether_addr(agg->partner_system.mac_addr_value);
173 }
174 
175 /**
176  * __disable_distributing_port - disable the port's slave for distributing.
177  * Port will still be able to collect.
178  * @port: the port we're looking at
179  *
180  * This will disable only distributing on the port's slave.
181  */
182 static void __disable_distributing_port(struct port *port)
183 {
184 	bond_set_slave_tx_disabled_flags(port->slave, BOND_SLAVE_NOTIFY_LATER);
185 }
186 
187 /**
188  * __enable_collecting_port - enable the port's slave for collecting,
189  * if it's up
190  * @port: the port we're looking at
191  *
192  * This will enable only collecting on the port's slave.
193  */
194 static void __enable_collecting_port(struct port *port)
195 {
196 	struct slave *slave = port->slave;
197 
198 	if (slave->link == BOND_LINK_UP && bond_slave_is_up(slave))
199 		bond_set_slave_rx_enabled_flags(slave, BOND_SLAVE_NOTIFY_LATER);
200 }
201 
202 /**
203  * __disable_port - disable the port's slave
204  * @port: the port we're looking at
205  *
206  * This will disable both collecting and distributing on the port's slave.
207  */
208 static inline void __disable_port(struct port *port)
209 {
210 	bond_set_slave_inactive_flags(port->slave, BOND_SLAVE_NOTIFY_LATER);
211 }
212 
213 /**
214  * __enable_port - enable the port's slave, if it's up
215  * @port: the port we're looking at
216  *
217  * This will enable both collecting and distributing on the port's slave.
218  */
219 static inline void __enable_port(struct port *port)
220 {
221 	struct slave *slave = port->slave;
222 
223 	if ((slave->link == BOND_LINK_UP) && bond_slave_is_up(slave))
224 		bond_set_slave_active_flags(slave, BOND_SLAVE_NOTIFY_LATER);
225 }
226 
227 /**
228  * __port_move_to_attached_state - check if port should transition back to attached
229  * state.
230  * @port: the port we're looking at
231  */
232 static bool __port_move_to_attached_state(struct port *port)
233 {
234 	if (!(port->sm_vars & AD_PORT_SELECTED) ||
235 	    (port->sm_vars & AD_PORT_STANDBY) ||
236 	    !(port->partner_oper.port_state & LACP_STATE_SYNCHRONIZATION) ||
237 	    !(port->actor_oper_port_state & LACP_STATE_SYNCHRONIZATION))
238 		port->sm_mux_state = AD_MUX_ATTACHED;
239 
240 	return port->sm_mux_state == AD_MUX_ATTACHED;
241 }
242 
243 /**
244  * __port_is_collecting_distributing - check if the port's slave is in the
245  * combined collecting/distributing state
246  * @port: the port we're looking at
247  */
248 static int __port_is_collecting_distributing(struct port *port)
249 {
250 	return bond_is_active_slave(port->slave);
251 }
252 
253 /**
254  * __get_agg_selection_mode - get the aggregator selection mode
255  * @port: the port we're looking at
256  *
257  * Get the aggregator selection mode. Can be %STABLE, %BANDWIDTH or %COUNT.
258  */
259 static inline u32 __get_agg_selection_mode(struct port *port)
260 {
261 	struct bonding *bond = __get_bond_by_port(port);
262 
263 	if (bond == NULL)
264 		return BOND_AD_STABLE;
265 
266 	return bond->params.ad_select;
267 }
268 
269 /**
270  * __check_agg_selection_timer - check if the selection timer has expired
271  * @port: the port we're looking at
272  */
273 static inline int __check_agg_selection_timer(struct port *port)
274 {
275 	struct bonding *bond = __get_bond_by_port(port);
276 
277 	if (bond == NULL)
278 		return 0;
279 
280 	return atomic_read(&BOND_AD_INFO(bond).agg_select_timer) ? 1 : 0;
281 }
282 
283 /**
284  * __get_link_speed - get a port's speed
285  * @port: the port we're looking at
286  *
287  * Return @port's speed in 802.3ad enum format. i.e. one of:
288  *     0,
289  *     %AD_LINK_SPEED_10MBPS,
290  *     %AD_LINK_SPEED_100MBPS,
291  *     %AD_LINK_SPEED_1000MBPS,
292  *     %AD_LINK_SPEED_2500MBPS,
293  *     %AD_LINK_SPEED_5000MBPS,
294  *     %AD_LINK_SPEED_10000MBPS
295  *     %AD_LINK_SPEED_14000MBPS,
296  *     %AD_LINK_SPEED_20000MBPS
297  *     %AD_LINK_SPEED_25000MBPS
298  *     %AD_LINK_SPEED_40000MBPS
299  *     %AD_LINK_SPEED_50000MBPS
300  *     %AD_LINK_SPEED_56000MBPS
301  *     %AD_LINK_SPEED_80000MBPS
302  *     %AD_LINK_SPEED_100000MBPS
303  *     %AD_LINK_SPEED_200000MBPS
304  *     %AD_LINK_SPEED_400000MBPS
305  *     %AD_LINK_SPEED_800000MBPS
306  *     %AD_LINK_SPEED_1600000MBPS
307  */
308 static u16 __get_link_speed(struct port *port)
309 {
310 	struct slave *slave = port->slave;
311 	u16 speed;
312 
313 	/* this if covers only a special case: when the configuration starts
314 	 * with link down, it sets the speed to 0.
315 	 * This is done in spite of the fact that the e100 driver reports 0
316 	 * to be compatible with MVT in the future.
317 	 */
318 	if (slave->link != BOND_LINK_UP)
319 		speed = 0;
320 	else {
321 		switch (slave->speed) {
322 		case SPEED_10:
323 			speed = AD_LINK_SPEED_10MBPS;
324 			break;
325 
326 		case SPEED_100:
327 			speed = AD_LINK_SPEED_100MBPS;
328 			break;
329 
330 		case SPEED_1000:
331 			speed = AD_LINK_SPEED_1000MBPS;
332 			break;
333 
334 		case SPEED_2500:
335 			speed = AD_LINK_SPEED_2500MBPS;
336 			break;
337 
338 		case SPEED_5000:
339 			speed = AD_LINK_SPEED_5000MBPS;
340 			break;
341 
342 		case SPEED_10000:
343 			speed = AD_LINK_SPEED_10000MBPS;
344 			break;
345 
346 		case SPEED_14000:
347 			speed = AD_LINK_SPEED_14000MBPS;
348 			break;
349 
350 		case SPEED_20000:
351 			speed = AD_LINK_SPEED_20000MBPS;
352 			break;
353 
354 		case SPEED_25000:
355 			speed = AD_LINK_SPEED_25000MBPS;
356 			break;
357 
358 		case SPEED_40000:
359 			speed = AD_LINK_SPEED_40000MBPS;
360 			break;
361 
362 		case SPEED_50000:
363 			speed = AD_LINK_SPEED_50000MBPS;
364 			break;
365 
366 		case SPEED_56000:
367 			speed = AD_LINK_SPEED_56000MBPS;
368 			break;
369 
370 		case SPEED_80000:
371 			speed = AD_LINK_SPEED_80000MBPS;
372 			break;
373 
374 		case SPEED_100000:
375 			speed = AD_LINK_SPEED_100000MBPS;
376 			break;
377 
378 		case SPEED_200000:
379 			speed = AD_LINK_SPEED_200000MBPS;
380 			break;
381 
382 		case SPEED_400000:
383 			speed = AD_LINK_SPEED_400000MBPS;
384 			break;
385 
386 		case SPEED_800000:
387 			speed = AD_LINK_SPEED_800000MBPS;
388 			break;
389 
390 		case SPEED_1600000:
391 			speed = AD_LINK_SPEED_1600000MBPS;
392 			break;
393 
394 		default:
395 			/* unknown speed value from ethtool. shouldn't happen */
396 			if (slave->speed != SPEED_UNKNOWN)
397 				pr_err_once("%s: (slave %s): unknown ethtool speed (%d) for port %d (set it to 0)\n",
398 					    slave->bond->dev->name,
399 					    slave->dev->name, slave->speed,
400 					    port->actor_port_number);
401 			speed = 0;
402 			break;
403 		}
404 	}
405 
406 	slave_dbg(slave->bond->dev, slave->dev, "Port %d Received link speed %d update from adapter\n",
407 		  port->actor_port_number, speed);
408 	return speed;
409 }
410 
411 /**
412  * __get_duplex - get a port's duplex
413  * @port: the port we're looking at
414  *
415  * Return @port's duplex in 802.3ad bitmask format. i.e.:
416  *     0x01 if in full duplex
417  *     0x00 otherwise
418  */
419 static u8 __get_duplex(struct port *port)
420 {
421 	struct slave *slave = port->slave;
422 	u8 retval = 0x0;
423 
424 	/* handling a special case: when the configuration starts with
425 	 * link down, it sets the duplex to 0.
426 	 */
427 	if (slave->link == BOND_LINK_UP) {
428 		switch (slave->duplex) {
429 		case DUPLEX_FULL:
430 			retval = 0x1;
431 			slave_dbg(slave->bond->dev, slave->dev, "Port %d Received status full duplex update from adapter\n",
432 				  port->actor_port_number);
433 			break;
434 		case DUPLEX_HALF:
435 		default:
436 			retval = 0x0;
437 			slave_dbg(slave->bond->dev, slave->dev, "Port %d Received status NOT full duplex update from adapter\n",
438 				  port->actor_port_number);
439 			break;
440 		}
441 	}
442 	return retval;
443 }
444 
445 static void __ad_actor_update_port(struct port *port)
446 {
447 	const struct bonding *bond = bond_get_bond_by_slave(port->slave);
448 
449 	port->actor_system = BOND_AD_INFO(bond).system.sys_mac_addr;
450 	port->actor_system_priority = BOND_AD_INFO(bond).system.sys_priority;
451 	port->actor_port_priority = SLAVE_AD_INFO(port->slave)->port_priority;
452 }
453 
454 /* Conversions */
455 
456 /**
457  * __ad_timer_to_ticks - convert a given timer type to AD module ticks
458  * @timer_type:	which timer to operate
459  * @par: timer parameter. see below
460  *
461  * If @timer_type is %current_while_timer, @par indicates long/short timer.
462  * If @timer_type is %periodic_timer, @par is one of %FAST_PERIODIC_TIME,
463  *						     %SLOW_PERIODIC_TIME.
464  */
465 static u16 __ad_timer_to_ticks(u16 timer_type, u16 par)
466 {
467 	u16 retval = 0; /* to silence the compiler */
468 
469 	switch (timer_type) {
470 	case AD_CURRENT_WHILE_TIMER:	/* for rx machine usage */
471 		if (par)
472 			retval = (AD_SHORT_TIMEOUT_TIME*ad_ticks_per_sec);
473 		else
474 			retval = (AD_LONG_TIMEOUT_TIME*ad_ticks_per_sec);
475 		break;
476 	case AD_ACTOR_CHURN_TIMER:	/* for local churn machine */
477 		retval = (AD_CHURN_DETECTION_TIME*ad_ticks_per_sec);
478 		break;
479 	case AD_PERIODIC_TIMER:		/* for periodic machine */
480 		retval = (par*ad_ticks_per_sec); /* long timeout */
481 		break;
482 	case AD_PARTNER_CHURN_TIMER:	/* for remote churn machine */
483 		retval = (AD_CHURN_DETECTION_TIME*ad_ticks_per_sec);
484 		break;
485 	case AD_WAIT_WHILE_TIMER:	/* for selection machine */
486 		retval = (AD_AGGREGATE_WAIT_TIME*ad_ticks_per_sec);
487 		break;
488 	}
489 
490 	return retval;
491 }
492 
493 
494 /* ================= ad_rx_machine helper functions ================== */
495 
496 /**
497  * __choose_matched - update a port's matched variable from a received lacpdu
498  * @lacpdu: the lacpdu we've received
499  * @port: the port we're looking at
500  *
501  * Update the value of the matched variable, using parameter values from a
502  * newly received lacpdu. Parameter values for the partner carried in the
503  * received PDU are compared with the corresponding operational parameter
504  * values for the actor. Matched is set to TRUE if all of these parameters
505  * match and the PDU parameter partner_state.aggregation has the same value as
506  * actor_oper_port_state.aggregation and lacp will actively maintain the link
507  * in the aggregation. Matched is also set to TRUE if the value of
508  * actor_state.aggregation in the received PDU is set to FALSE, i.e., indicates
509  * an individual link and lacp will actively maintain the link. Otherwise,
510  * matched is set to FALSE. LACP is considered to be actively maintaining the
511  * link if either the PDU's actor_state.lacp_activity variable is TRUE or both
512  * the actor's actor_oper_port_state.lacp_activity and the PDU's
513  * partner_state.lacp_activity variables are TRUE.
514  *
515  * Note: the AD_PORT_MATCHED "variable" is not specified by 802.3ad; it is
516  * used here to implement the language from 802.3ad 43.4.9 that requires
517  * recordPDU to "match" the LACPDU parameters to the stored values.
518  */
519 static void __choose_matched(struct lacpdu *lacpdu, struct port *port)
520 {
521 	/* check if all parameters are alike
522 	 * or this is individual link(aggregation == FALSE)
523 	 * then update the state machine Matched variable.
524 	 */
525 	if (((ntohs(lacpdu->partner_port) == port->actor_port_number) &&
526 	     (ntohs(lacpdu->partner_port_priority) == port->actor_port_priority) &&
527 	     MAC_ADDRESS_EQUAL(&(lacpdu->partner_system), &(port->actor_system)) &&
528 	     (ntohs(lacpdu->partner_system_priority) == port->actor_system_priority) &&
529 	     (ntohs(lacpdu->partner_key) == port->actor_oper_port_key) &&
530 	     ((lacpdu->partner_state & LACP_STATE_AGGREGATION) == (port->actor_oper_port_state & LACP_STATE_AGGREGATION))) ||
531 	    ((lacpdu->actor_state & LACP_STATE_AGGREGATION) == 0)
532 		) {
533 		port->sm_vars |= AD_PORT_MATCHED;
534 	} else {
535 		port->sm_vars &= ~AD_PORT_MATCHED;
536 	}
537 }
538 
539 /**
540  * __record_pdu - record parameters from a received lacpdu
541  * @lacpdu: the lacpdu we've received
542  * @port: the port we're looking at
543  *
544  * Record the parameter values for the Actor carried in a received lacpdu as
545  * the current partner operational parameter values and sets
546  * actor_oper_port_state.defaulted to FALSE.
547  */
548 static void __record_pdu(struct lacpdu *lacpdu, struct port *port)
549 {
550 	if (lacpdu && port) {
551 		struct port_params *partner = &port->partner_oper;
552 
553 		__choose_matched(lacpdu, port);
554 		/* record the new parameter values for the partner
555 		 * operational
556 		 */
557 		partner->port_number = ntohs(lacpdu->actor_port);
558 		partner->port_priority = ntohs(lacpdu->actor_port_priority);
559 		partner->system = lacpdu->actor_system;
560 		partner->system_priority = ntohs(lacpdu->actor_system_priority);
561 		partner->key = ntohs(lacpdu->actor_key);
562 		partner->port_state = lacpdu->actor_state;
563 
564 		/* set actor_oper_port_state.defaulted to FALSE */
565 		port->actor_oper_port_state &= ~LACP_STATE_DEFAULTED;
566 
567 		/* set the partner sync. to on if the partner is sync,
568 		 * and the port is matched
569 		 */
570 		if ((port->sm_vars & AD_PORT_MATCHED) &&
571 		    (lacpdu->actor_state & LACP_STATE_SYNCHRONIZATION)) {
572 			partner->port_state |= LACP_STATE_SYNCHRONIZATION;
573 			slave_dbg(port->slave->bond->dev, port->slave->dev,
574 				  "partner sync=1\n");
575 		} else {
576 			partner->port_state &= ~LACP_STATE_SYNCHRONIZATION;
577 			slave_dbg(port->slave->bond->dev, port->slave->dev,
578 				  "partner sync=0\n");
579 		}
580 	}
581 }
582 
583 /**
584  * __record_default - record default parameters
585  * @port: the port we're looking at
586  *
587  * This function records the default parameter values for the partner carried
588  * in the Partner Admin parameters as the current partner operational parameter
589  * values and sets actor_oper_port_state.defaulted to TRUE.
590  */
591 static void __record_default(struct port *port)
592 {
593 	if (port) {
594 		/* record the partner admin parameters */
595 		memcpy(&port->partner_oper, &port->partner_admin,
596 		       sizeof(struct port_params));
597 
598 		/* set actor_oper_port_state.defaulted to true */
599 		port->actor_oper_port_state |= LACP_STATE_DEFAULTED;
600 	}
601 }
602 
603 /**
604  * __update_selected - update a port's Selected variable from a received lacpdu
605  * @lacpdu: the lacpdu we've received
606  * @port: the port we're looking at
607  *
608  * Update the value of the selected variable, using parameter values from a
609  * newly received lacpdu. The parameter values for the Actor carried in the
610  * received PDU are compared with the corresponding operational parameter
611  * values for the ports partner. If one or more of the comparisons shows that
612  * the value(s) received in the PDU differ from the current operational values,
613  * then selected is set to FALSE and actor_oper_port_state.synchronization is
614  * set to out_of_sync. Otherwise, selected remains unchanged.
615  */
616 static void __update_selected(struct lacpdu *lacpdu, struct port *port)
617 {
618 	if (lacpdu && port) {
619 		const struct port_params *partner = &port->partner_oper;
620 
621 		/* check if any parameter is different then
622 		 * update the state machine selected variable.
623 		 */
624 		if (ntohs(lacpdu->actor_port) != partner->port_number ||
625 		    ntohs(lacpdu->actor_port_priority) != partner->port_priority ||
626 		    !MAC_ADDRESS_EQUAL(&lacpdu->actor_system, &partner->system) ||
627 		    ntohs(lacpdu->actor_system_priority) != partner->system_priority ||
628 		    ntohs(lacpdu->actor_key) != partner->key ||
629 		    (lacpdu->actor_state & LACP_STATE_AGGREGATION) != (partner->port_state & LACP_STATE_AGGREGATION)) {
630 			port->sm_vars &= ~AD_PORT_SELECTED;
631 		}
632 	}
633 }
634 
635 /**
636  * __update_default_selected - update a port's Selected variable from Partner
637  * @port: the port we're looking at
638  *
639  * This function updates the value of the selected variable, using the partner
640  * administrative parameter values. The administrative values are compared with
641  * the corresponding operational parameter values for the partner. If one or
642  * more of the comparisons shows that the administrative value(s) differ from
643  * the current operational values, then Selected is set to FALSE and
644  * actor_oper_port_state.synchronization is set to OUT_OF_SYNC. Otherwise,
645  * Selected remains unchanged.
646  */
647 static void __update_default_selected(struct port *port)
648 {
649 	if (port) {
650 		const struct port_params *admin = &port->partner_admin;
651 		const struct port_params *oper = &port->partner_oper;
652 
653 		/* check if any parameter is different then
654 		 * update the state machine selected variable.
655 		 */
656 		if (admin->port_number != oper->port_number ||
657 		    admin->port_priority != oper->port_priority ||
658 		    !MAC_ADDRESS_EQUAL(&admin->system, &oper->system) ||
659 		    admin->system_priority != oper->system_priority ||
660 		    admin->key != oper->key ||
661 		    (admin->port_state & LACP_STATE_AGGREGATION)
662 			!= (oper->port_state & LACP_STATE_AGGREGATION)) {
663 			port->sm_vars &= ~AD_PORT_SELECTED;
664 		}
665 	}
666 }
667 
668 /**
669  * __update_ntt - update a port's ntt variable from a received lacpdu
670  * @lacpdu: the lacpdu we've received
671  * @port: the port we're looking at
672  *
673  * Updates the value of the ntt variable, using parameter values from a newly
674  * received lacpdu. The parameter values for the partner carried in the
675  * received PDU are compared with the corresponding operational parameter
676  * values for the Actor. If one or more of the comparisons shows that the
677  * value(s) received in the PDU differ from the current operational values,
678  * then ntt is set to TRUE. Otherwise, ntt remains unchanged.
679  */
680 static void __update_ntt(struct lacpdu *lacpdu, struct port *port)
681 {
682 	/* validate lacpdu and port */
683 	if (lacpdu && port) {
684 		/* check if any parameter is different then
685 		 * update the port->ntt.
686 		 */
687 		if ((ntohs(lacpdu->partner_port) != port->actor_port_number) ||
688 		    (ntohs(lacpdu->partner_port_priority) != port->actor_port_priority) ||
689 		    !MAC_ADDRESS_EQUAL(&(lacpdu->partner_system), &(port->actor_system)) ||
690 		    (ntohs(lacpdu->partner_system_priority) != port->actor_system_priority) ||
691 		    (ntohs(lacpdu->partner_key) != port->actor_oper_port_key) ||
692 		    ((lacpdu->partner_state & LACP_STATE_LACP_ACTIVITY) != (port->actor_oper_port_state & LACP_STATE_LACP_ACTIVITY)) ||
693 		    ((lacpdu->partner_state & LACP_STATE_LACP_TIMEOUT) != (port->actor_oper_port_state & LACP_STATE_LACP_TIMEOUT)) ||
694 		    ((lacpdu->partner_state & LACP_STATE_SYNCHRONIZATION) != (port->actor_oper_port_state & LACP_STATE_SYNCHRONIZATION)) ||
695 		    ((lacpdu->partner_state & LACP_STATE_AGGREGATION) != (port->actor_oper_port_state & LACP_STATE_AGGREGATION))
696 		   ) {
697 			port->ntt = true;
698 		}
699 	}
700 }
701 
702 /**
703  * __agg_ports_are_ready - check if all ports in an aggregator are ready
704  * @aggregator: the aggregator we're looking at
705  *
706  */
707 static int __agg_ports_are_ready(struct aggregator *aggregator)
708 {
709 	struct port *port;
710 	int retval = 1;
711 
712 	if (aggregator) {
713 		/* scan all ports in this aggregator to verfy if they are
714 		 * all ready.
715 		 */
716 		for (port = aggregator->lag_ports;
717 		     port;
718 		     port = port->next_port_in_aggregator) {
719 			if (!(port->sm_vars & AD_PORT_READY_N)) {
720 				retval = 0;
721 				break;
722 			}
723 		}
724 	}
725 
726 	return retval;
727 }
728 
729 /**
730  * __set_agg_ports_ready - set value of Ready bit in all ports of an aggregator
731  * @aggregator: the aggregator we're looking at
732  * @val: Should the ports' ready bit be set on or off
733  *
734  */
735 static void __set_agg_ports_ready(struct aggregator *aggregator, int val)
736 {
737 	struct port *port;
738 
739 	for (port = aggregator->lag_ports; port;
740 	     port = port->next_port_in_aggregator) {
741 		if (val)
742 			port->sm_vars |= AD_PORT_READY;
743 		else
744 			port->sm_vars &= ~AD_PORT_READY;
745 	}
746 }
747 
748 static int __agg_active_ports(struct aggregator *agg)
749 {
750 	struct port *port;
751 	int active = 0;
752 
753 	for (port = agg->lag_ports; port;
754 	     port = port->next_port_in_aggregator) {
755 		if (port->is_enabled)
756 			active++;
757 	}
758 
759 	return active;
760 }
761 
762 static unsigned int __agg_ports_priority(const struct aggregator *agg)
763 {
764 	struct port *port = agg->lag_ports;
765 	unsigned int prio = 0;
766 
767 	for (; port; port = port->next_port_in_aggregator)
768 		if (port->is_enabled)
769 			prio += port->actor_port_priority;
770 
771 	return prio;
772 }
773 
774 /**
775  * __get_agg_bandwidth - get the total bandwidth of an aggregator
776  * @aggregator: the aggregator we're looking at
777  *
778  */
779 static u32 __get_agg_bandwidth(struct aggregator *aggregator)
780 {
781 	int nports = __agg_active_ports(aggregator);
782 	u32 bandwidth = 0;
783 
784 	if (nports) {
785 		switch (__get_link_speed(aggregator->lag_ports)) {
786 		case AD_LINK_SPEED_1MBPS:
787 			bandwidth = nports;
788 			break;
789 		case AD_LINK_SPEED_10MBPS:
790 			bandwidth = nports * 10;
791 			break;
792 		case AD_LINK_SPEED_100MBPS:
793 			bandwidth = nports * 100;
794 			break;
795 		case AD_LINK_SPEED_1000MBPS:
796 			bandwidth = nports * 1000;
797 			break;
798 		case AD_LINK_SPEED_2500MBPS:
799 			bandwidth = nports * 2500;
800 			break;
801 		case AD_LINK_SPEED_5000MBPS:
802 			bandwidth = nports * 5000;
803 			break;
804 		case AD_LINK_SPEED_10000MBPS:
805 			bandwidth = nports * 10000;
806 			break;
807 		case AD_LINK_SPEED_14000MBPS:
808 			bandwidth = nports * 14000;
809 			break;
810 		case AD_LINK_SPEED_20000MBPS:
811 			bandwidth = nports * 20000;
812 			break;
813 		case AD_LINK_SPEED_25000MBPS:
814 			bandwidth = nports * 25000;
815 			break;
816 		case AD_LINK_SPEED_40000MBPS:
817 			bandwidth = nports * 40000;
818 			break;
819 		case AD_LINK_SPEED_50000MBPS:
820 			bandwidth = nports * 50000;
821 			break;
822 		case AD_LINK_SPEED_56000MBPS:
823 			bandwidth = nports * 56000;
824 			break;
825 		case AD_LINK_SPEED_80000MBPS:
826 			bandwidth = nports * 80000;
827 			break;
828 		case AD_LINK_SPEED_100000MBPS:
829 			bandwidth = nports * 100000;
830 			break;
831 		case AD_LINK_SPEED_200000MBPS:
832 			bandwidth = nports * 200000;
833 			break;
834 		case AD_LINK_SPEED_400000MBPS:
835 			bandwidth = nports * 400000;
836 			break;
837 		case AD_LINK_SPEED_800000MBPS:
838 			bandwidth = nports * 800000;
839 			break;
840 		case AD_LINK_SPEED_1600000MBPS:
841 			bandwidth = nports * 1600000;
842 			break;
843 		default:
844 			bandwidth = 0; /* to silence the compiler */
845 		}
846 	}
847 	return bandwidth;
848 }
849 
850 /**
851  * __get_active_agg - get the current active aggregator
852  * @aggregator: the aggregator we're looking at
853  *
854  * Caller must hold RCU lock.
855  */
856 static struct aggregator *__get_active_agg(struct aggregator *aggregator)
857 {
858 	struct bonding *bond = aggregator->slave->bond;
859 	struct list_head *iter;
860 	struct slave *slave;
861 
862 	bond_for_each_slave_rcu(bond, slave, iter)
863 		if (SLAVE_AD_INFO(slave)->aggregator.is_active)
864 			return &(SLAVE_AD_INFO(slave)->aggregator);
865 
866 	return NULL;
867 }
868 
869 /**
870  * __update_lacpdu_from_port - update a port's lacpdu fields
871  * @port: the port we're looking at
872  */
873 static inline void __update_lacpdu_from_port(struct port *port)
874 {
875 	struct lacpdu *lacpdu = &port->lacpdu;
876 	const struct port_params *partner = &port->partner_oper;
877 
878 	/* update current actual Actor parameters
879 	 * lacpdu->subtype                   initialized
880 	 * lacpdu->version_number            initialized
881 	 * lacpdu->tlv_type_actor_info       initialized
882 	 * lacpdu->actor_information_length  initialized
883 	 */
884 
885 	lacpdu->actor_system_priority = htons(port->actor_system_priority);
886 	lacpdu->actor_system = port->actor_system;
887 	lacpdu->actor_key = htons(port->actor_oper_port_key);
888 	lacpdu->actor_port_priority = htons(port->actor_port_priority);
889 	lacpdu->actor_port = htons(port->actor_port_number);
890 	lacpdu->actor_state = port->actor_oper_port_state;
891 	slave_dbg(port->slave->bond->dev, port->slave->dev,
892 		  "update lacpdu: actor port state %x\n",
893 		  port->actor_oper_port_state);
894 
895 	/* lacpdu->reserved_3_1              initialized
896 	 * lacpdu->tlv_type_partner_info     initialized
897 	 * lacpdu->partner_information_length initialized
898 	 */
899 
900 	lacpdu->partner_system_priority = htons(partner->system_priority);
901 	lacpdu->partner_system = partner->system;
902 	lacpdu->partner_key = htons(partner->key);
903 	lacpdu->partner_port_priority = htons(partner->port_priority);
904 	lacpdu->partner_port = htons(partner->port_number);
905 	lacpdu->partner_state = partner->port_state;
906 
907 	/* lacpdu->reserved_3_2              initialized
908 	 * lacpdu->tlv_type_collector_info   initialized
909 	 * lacpdu->collector_information_length initialized
910 	 * collector_max_delay                initialized
911 	 * reserved_12[12]                   initialized
912 	 * tlv_type_terminator               initialized
913 	 * terminator_length                 initialized
914 	 * reserved_50[50]                   initialized
915 	 */
916 }
917 
918 /* ================= main 802.3ad protocol code ========================= */
919 
920 /**
921  * ad_lacpdu_send - send out a lacpdu packet on a given port
922  * @port: the port we're looking at
923  *
924  * Returns:   0 on success
925  *          < 0 on error
926  */
927 static int ad_lacpdu_send(struct port *port)
928 {
929 	struct slave *slave = port->slave;
930 	struct sk_buff *skb;
931 	struct lacpdu_header *lacpdu_header;
932 	int length = sizeof(struct lacpdu_header);
933 
934 	skb = dev_alloc_skb(length);
935 	if (!skb)
936 		return -ENOMEM;
937 
938 	atomic64_inc(&SLAVE_AD_INFO(slave)->stats.lacpdu_tx);
939 	atomic64_inc(&BOND_AD_INFO(slave->bond).stats.lacpdu_tx);
940 
941 	skb->dev = slave->dev;
942 	skb_reset_mac_header(skb);
943 	skb->network_header = skb->mac_header + ETH_HLEN;
944 	skb->protocol = PKT_TYPE_LACPDU;
945 	skb->priority = TC_PRIO_CONTROL;
946 
947 	lacpdu_header = skb_put(skb, length);
948 
949 	ether_addr_copy(lacpdu_header->hdr.h_dest, lacpdu_mcast_addr);
950 	/* Note: source address is set to be the member's PERMANENT address,
951 	 * because we use it to identify loopback lacpdus in receive.
952 	 */
953 	ether_addr_copy(lacpdu_header->hdr.h_source, slave->perm_hwaddr);
954 	lacpdu_header->hdr.h_proto = PKT_TYPE_LACPDU;
955 
956 	lacpdu_header->lacpdu = port->lacpdu;
957 
958 	dev_queue_xmit(skb);
959 
960 	return 0;
961 }
962 
963 /**
964  * ad_marker_send - send marker information/response on a given port
965  * @port: the port we're looking at
966  * @marker: marker data to send
967  *
968  * Returns:   0 on success
969  *          < 0 on error
970  */
971 static int ad_marker_send(struct port *port, struct bond_marker *marker)
972 {
973 	struct slave *slave = port->slave;
974 	struct sk_buff *skb;
975 	struct bond_marker_header *marker_header;
976 	int length = sizeof(struct bond_marker_header);
977 
978 	skb = dev_alloc_skb(length + 16);
979 	if (!skb)
980 		return -ENOMEM;
981 
982 	switch (marker->tlv_type) {
983 	case AD_MARKER_INFORMATION_SUBTYPE:
984 		atomic64_inc(&SLAVE_AD_INFO(slave)->stats.marker_tx);
985 		atomic64_inc(&BOND_AD_INFO(slave->bond).stats.marker_tx);
986 		break;
987 	case AD_MARKER_RESPONSE_SUBTYPE:
988 		atomic64_inc(&SLAVE_AD_INFO(slave)->stats.marker_resp_tx);
989 		atomic64_inc(&BOND_AD_INFO(slave->bond).stats.marker_resp_tx);
990 		break;
991 	}
992 
993 	skb_reserve(skb, 16);
994 
995 	skb->dev = slave->dev;
996 	skb_reset_mac_header(skb);
997 	skb->network_header = skb->mac_header + ETH_HLEN;
998 	skb->protocol = PKT_TYPE_LACPDU;
999 
1000 	marker_header = skb_put(skb, length);
1001 
1002 	ether_addr_copy(marker_header->hdr.h_dest, lacpdu_mcast_addr);
1003 	/* Note: source address is set to be the member's PERMANENT address,
1004 	 * because we use it to identify loopback MARKERs in receive.
1005 	 */
1006 	ether_addr_copy(marker_header->hdr.h_source, slave->perm_hwaddr);
1007 	marker_header->hdr.h_proto = PKT_TYPE_LACPDU;
1008 
1009 	marker_header->marker = *marker;
1010 
1011 	dev_queue_xmit(skb);
1012 
1013 	return 0;
1014 }
1015 
1016 static void ad_cond_set_peer_notif(struct port *port)
1017 {
1018 	struct bonding *bond = port->slave->bond;
1019 
1020 	if (bond->params.broadcast_neighbor)
1021 		bond_peer_notify_work_rearm(bond, 0);
1022 }
1023 
1024 /**
1025  * ad_mux_machine - handle a port's mux state machine
1026  * @port: the port we're looking at
1027  * @update_slave_arr: Does slave array need update?
1028  */
1029 static void ad_mux_machine(struct port *port, bool *update_slave_arr)
1030 {
1031 	struct bonding *bond = __get_bond_by_port(port);
1032 	mux_states_t last_state;
1033 
1034 	/* keep current State Machine state to compare later if it was
1035 	 * changed
1036 	 */
1037 	last_state = port->sm_mux_state;
1038 
1039 	if (port->sm_vars & AD_PORT_BEGIN) {
1040 		port->sm_mux_state = AD_MUX_DETACHED;
1041 	} else {
1042 		switch (port->sm_mux_state) {
1043 		case AD_MUX_DETACHED:
1044 			if ((port->sm_vars & AD_PORT_SELECTED)
1045 			    || (port->sm_vars & AD_PORT_STANDBY))
1046 				/* if SELECTED or STANDBY */
1047 				port->sm_mux_state = AD_MUX_WAITING;
1048 			break;
1049 		case AD_MUX_WAITING:
1050 			/* if SELECTED == FALSE return to DETACH state */
1051 			if (!(port->sm_vars & AD_PORT_SELECTED)) {
1052 				port->sm_vars &= ~AD_PORT_READY_N;
1053 				/* in order to withhold the Selection Logic to
1054 				 * check all ports READY_N value every callback
1055 				 * cycle to update ready variable, we check
1056 				 * READY_N and update READY here
1057 				 */
1058 				__set_agg_ports_ready(port->aggregator, __agg_ports_are_ready(port->aggregator));
1059 				port->sm_mux_state = AD_MUX_DETACHED;
1060 				break;
1061 			}
1062 
1063 			/* check if the wait_while_timer expired */
1064 			if (port->sm_mux_timer_counter
1065 			    && !(--port->sm_mux_timer_counter))
1066 				port->sm_vars |= AD_PORT_READY_N;
1067 
1068 			/* in order to withhold the selection logic to check
1069 			 * all ports READY_N value every callback cycle to
1070 			 * update ready variable, we check READY_N and update
1071 			 * READY here
1072 			 */
1073 			__set_agg_ports_ready(port->aggregator, __agg_ports_are_ready(port->aggregator));
1074 
1075 			/* if the wait_while_timer expired, and the port is
1076 			 * in READY state, move to ATTACHED state
1077 			 */
1078 			if ((port->sm_vars & AD_PORT_READY)
1079 			    && !port->sm_mux_timer_counter)
1080 				port->sm_mux_state = AD_MUX_ATTACHED;
1081 			break;
1082 		case AD_MUX_ATTACHED:
1083 			/* check also if agg_select_timer expired (so the
1084 			 * edable port will take place only after this timer)
1085 			 */
1086 			if ((port->sm_vars & AD_PORT_SELECTED) &&
1087 			    (port->partner_oper.port_state & LACP_STATE_SYNCHRONIZATION) &&
1088 			    !__check_agg_selection_timer(port)) {
1089 				if (port->aggregator->is_active) {
1090 					int state = AD_MUX_COLLECTING_DISTRIBUTING;
1091 
1092 					if (!bond->params.coupled_control)
1093 						state = AD_MUX_COLLECTING;
1094 					port->sm_mux_state = state;
1095 				}
1096 			} else if (!(port->sm_vars & AD_PORT_SELECTED) ||
1097 				   (port->sm_vars & AD_PORT_STANDBY)) {
1098 				/* if UNSELECTED or STANDBY */
1099 				port->sm_vars &= ~AD_PORT_READY_N;
1100 				/* in order to withhold the selection logic to
1101 				 * check all ports READY_N value every callback
1102 				 * cycle to update ready variable, we check
1103 				 * READY_N and update READY here
1104 				 */
1105 				__set_agg_ports_ready(port->aggregator, __agg_ports_are_ready(port->aggregator));
1106 				port->sm_mux_state = AD_MUX_DETACHED;
1107 			} else if (port->aggregator->is_active) {
1108 				port->actor_oper_port_state |=
1109 				    LACP_STATE_SYNCHRONIZATION;
1110 			}
1111 			break;
1112 		case AD_MUX_COLLECTING_DISTRIBUTING:
1113 			if (!__port_move_to_attached_state(port)) {
1114 				/* if port state hasn't changed make
1115 				 * sure that a collecting distributing
1116 				 * port in an active aggregator is enabled
1117 				 */
1118 				if (port->aggregator->is_active &&
1119 				    !__port_is_collecting_distributing(port)) {
1120 					__enable_port(port);
1121 					*update_slave_arr = true;
1122 				}
1123 			}
1124 			break;
1125 		case AD_MUX_COLLECTING:
1126 			if (!__port_move_to_attached_state(port)) {
1127 				if ((port->sm_vars & AD_PORT_SELECTED) &&
1128 				    (port->partner_oper.port_state & LACP_STATE_SYNCHRONIZATION) &&
1129 				    (port->partner_oper.port_state & LACP_STATE_COLLECTING)) {
1130 					port->sm_mux_state = AD_MUX_DISTRIBUTING;
1131 				} else {
1132 					/* If port state hasn't changed, make sure that a collecting
1133 					 * port is enabled for an active aggregator.
1134 					 */
1135 					struct slave *slave = port->slave;
1136 
1137 					if (port->aggregator->is_active &&
1138 					    bond_is_slave_rx_disabled(slave)) {
1139 						ad_enable_collecting(port);
1140 						*update_slave_arr = true;
1141 					}
1142 				}
1143 			}
1144 			break;
1145 		case AD_MUX_DISTRIBUTING:
1146 			if (!(port->sm_vars & AD_PORT_SELECTED) ||
1147 			    (port->sm_vars & AD_PORT_STANDBY) ||
1148 			    !(port->partner_oper.port_state & LACP_STATE_COLLECTING) ||
1149 			    !(port->partner_oper.port_state & LACP_STATE_SYNCHRONIZATION) ||
1150 			    !(port->actor_oper_port_state & LACP_STATE_SYNCHRONIZATION)) {
1151 				port->sm_mux_state = AD_MUX_COLLECTING;
1152 			} else {
1153 				/* if port state hasn't changed make
1154 				 * sure that a collecting distributing
1155 				 * port in an active aggregator is enabled
1156 				 */
1157 				if (port->aggregator &&
1158 				    port->aggregator->is_active &&
1159 				    !__port_is_collecting_distributing(port)) {
1160 					__enable_port(port);
1161 					*update_slave_arr = true;
1162 				}
1163 			}
1164 			break;
1165 		default:
1166 			break;
1167 		}
1168 	}
1169 
1170 	/* check if the state machine was changed */
1171 	if (port->sm_mux_state != last_state) {
1172 		slave_dbg(port->slave->bond->dev, port->slave->dev,
1173 			  "Mux Machine: Port=%d, Last State=%d, Curr State=%d\n",
1174 			  port->actor_port_number,
1175 			  last_state,
1176 			  port->sm_mux_state);
1177 		switch (port->sm_mux_state) {
1178 		case AD_MUX_DETACHED:
1179 			port->actor_oper_port_state &= ~LACP_STATE_SYNCHRONIZATION;
1180 			ad_disable_collecting_distributing(port,
1181 							   update_slave_arr);
1182 			port->actor_oper_port_state &= ~LACP_STATE_COLLECTING;
1183 			port->actor_oper_port_state &= ~LACP_STATE_DISTRIBUTING;
1184 			port->ntt = true;
1185 			break;
1186 		case AD_MUX_WAITING:
1187 			port->sm_mux_timer_counter = __ad_timer_to_ticks(AD_WAIT_WHILE_TIMER, 0);
1188 			break;
1189 		case AD_MUX_ATTACHED:
1190 			if (port->aggregator->is_active)
1191 				port->actor_oper_port_state |=
1192 				    LACP_STATE_SYNCHRONIZATION;
1193 			else
1194 				port->actor_oper_port_state &=
1195 				    ~LACP_STATE_SYNCHRONIZATION;
1196 			port->actor_oper_port_state &= ~LACP_STATE_COLLECTING;
1197 			port->actor_oper_port_state &= ~LACP_STATE_DISTRIBUTING;
1198 			ad_disable_collecting_distributing(port,
1199 							   update_slave_arr);
1200 			port->ntt = true;
1201 			break;
1202 		case AD_MUX_COLLECTING_DISTRIBUTING:
1203 			port->actor_oper_port_state |= LACP_STATE_COLLECTING;
1204 			port->actor_oper_port_state |= LACP_STATE_DISTRIBUTING;
1205 			port->actor_oper_port_state |= LACP_STATE_SYNCHRONIZATION;
1206 			ad_enable_collecting_distributing(port,
1207 							  update_slave_arr);
1208 			port->ntt = true;
1209 			break;
1210 		case AD_MUX_COLLECTING:
1211 			port->actor_oper_port_state |= LACP_STATE_COLLECTING;
1212 			port->actor_oper_port_state &= ~LACP_STATE_DISTRIBUTING;
1213 			port->actor_oper_port_state |= LACP_STATE_SYNCHRONIZATION;
1214 			ad_enable_collecting(port);
1215 			ad_disable_distributing(port, update_slave_arr);
1216 			port->ntt = true;
1217 			break;
1218 		case AD_MUX_DISTRIBUTING:
1219 			port->actor_oper_port_state |= LACP_STATE_DISTRIBUTING;
1220 			port->actor_oper_port_state |= LACP_STATE_SYNCHRONIZATION;
1221 			ad_enable_collecting_distributing(port,
1222 							  update_slave_arr);
1223 			break;
1224 		default:
1225 			break;
1226 		}
1227 	}
1228 }
1229 
1230 /**
1231  * ad_rx_machine - handle a port's rx State Machine
1232  * @lacpdu: the lacpdu we've received
1233  * @port: the port we're looking at
1234  *
1235  * If lacpdu arrived, stop previous timer (if exists) and set the next state as
1236  * CURRENT. If timer expired set the state machine in the proper state.
1237  * In other cases, this function checks if we need to switch to other state.
1238  */
1239 static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
1240 {
1241 	rx_states_t last_state;
1242 
1243 	/* keep current State Machine state to compare later if it was
1244 	 * changed
1245 	 */
1246 	last_state = port->sm_rx_state;
1247 
1248 	if (lacpdu) {
1249 		atomic64_inc(&SLAVE_AD_INFO(port->slave)->stats.lacpdu_rx);
1250 		atomic64_inc(&BOND_AD_INFO(port->slave->bond).stats.lacpdu_rx);
1251 	}
1252 	/* check if state machine should change state */
1253 
1254 	/* first, check if port was reinitialized */
1255 	if (port->sm_vars & AD_PORT_BEGIN) {
1256 		port->sm_rx_state = AD_RX_INITIALIZE;
1257 		port->sm_vars |= AD_PORT_CHURNED;
1258 	/* check if port is not enabled */
1259 	} else if (!(port->sm_vars & AD_PORT_BEGIN) && !port->is_enabled)
1260 		port->sm_rx_state = AD_RX_PORT_DISABLED;
1261 	/* check if new lacpdu arrived */
1262 	else if (lacpdu && ((port->sm_rx_state == AD_RX_EXPIRED) ||
1263 		 (port->sm_rx_state == AD_RX_DEFAULTED) ||
1264 		 (port->sm_rx_state == AD_RX_CURRENT))) {
1265 		if (port->sm_rx_state != AD_RX_CURRENT)
1266 			port->sm_vars |= AD_PORT_CHURNED;
1267 		port->sm_rx_timer_counter = 0;
1268 		port->sm_rx_state = AD_RX_CURRENT;
1269 	} else {
1270 		/* if timer is on, and if it is expired */
1271 		if (port->sm_rx_timer_counter &&
1272 		    !(--port->sm_rx_timer_counter)) {
1273 			switch (port->sm_rx_state) {
1274 			case AD_RX_EXPIRED:
1275 				port->sm_rx_state = AD_RX_DEFAULTED;
1276 				break;
1277 			case AD_RX_CURRENT:
1278 				port->sm_rx_state = AD_RX_EXPIRED;
1279 				break;
1280 			default:
1281 				break;
1282 			}
1283 		} else {
1284 			/* if no lacpdu arrived and no timer is on */
1285 			switch (port->sm_rx_state) {
1286 			case AD_RX_PORT_DISABLED:
1287 				if (port->is_enabled &&
1288 				    (port->sm_vars & AD_PORT_LACP_ENABLED))
1289 					port->sm_rx_state = AD_RX_EXPIRED;
1290 				else if (port->is_enabled
1291 					 && ((port->sm_vars
1292 					      & AD_PORT_LACP_ENABLED) == 0))
1293 					port->sm_rx_state = AD_RX_LACP_DISABLED;
1294 				break;
1295 			default:
1296 				break;
1297 
1298 			}
1299 		}
1300 	}
1301 
1302 	/* check if the State machine was changed or new lacpdu arrived */
1303 	if ((port->sm_rx_state != last_state) || (lacpdu)) {
1304 		slave_dbg(port->slave->bond->dev, port->slave->dev,
1305 			  "Rx Machine: Port=%d, Last State=%d, Curr State=%d\n",
1306 			  port->actor_port_number,
1307 			  last_state,
1308 			  port->sm_rx_state);
1309 		switch (port->sm_rx_state) {
1310 		case AD_RX_INITIALIZE:
1311 			if (!(port->actor_oper_port_key & AD_DUPLEX_KEY_MASKS))
1312 				port->sm_vars &= ~AD_PORT_LACP_ENABLED;
1313 			else
1314 				port->sm_vars |= AD_PORT_LACP_ENABLED;
1315 			port->sm_vars &= ~AD_PORT_SELECTED;
1316 			__record_default(port);
1317 			port->actor_oper_port_state &= ~LACP_STATE_EXPIRED;
1318 			port->sm_rx_state = AD_RX_PORT_DISABLED;
1319 
1320 			fallthrough;
1321 		case AD_RX_PORT_DISABLED:
1322 			port->sm_vars &= ~AD_PORT_MATCHED;
1323 			break;
1324 		case AD_RX_LACP_DISABLED:
1325 			port->sm_vars &= ~AD_PORT_SELECTED;
1326 			__record_default(port);
1327 			port->partner_oper.port_state &= ~LACP_STATE_AGGREGATION;
1328 			port->sm_vars |= AD_PORT_MATCHED;
1329 			port->actor_oper_port_state &= ~LACP_STATE_EXPIRED;
1330 			break;
1331 		case AD_RX_EXPIRED:
1332 			/* Reset of the Synchronization flag (Standard 43.4.12)
1333 			 * This reset cause to disable this port in the
1334 			 * COLLECTING_DISTRIBUTING state of the mux machine in
1335 			 * case of EXPIRED even if LINK_DOWN didn't arrive for
1336 			 * the port.
1337 			 */
1338 			port->sm_vars &= ~AD_PORT_MATCHED;
1339 			/* Based on IEEE 8021AX-2014, Figure 6-18 - Receive
1340 			 * machine state diagram, the statue should be
1341 			 * Partner_Oper_Port_State.Synchronization = FALSE;
1342 			 * Partner_Oper_Port_State.LACP_Timeout = Short Timeout;
1343 			 * start current_while_timer(Short Timeout);
1344 			 * Actor_Oper_Port_State.Expired = TRUE;
1345 			 */
1346 			port->partner_oper.port_state &= ~LACP_STATE_SYNCHRONIZATION;
1347 			port->partner_oper.port_state |= LACP_STATE_LACP_TIMEOUT;
1348 			port->sm_rx_timer_counter = __ad_timer_to_ticks(AD_CURRENT_WHILE_TIMER, (u16)(AD_SHORT_TIMEOUT));
1349 			port->actor_oper_port_state |= LACP_STATE_EXPIRED;
1350 			port->sm_vars |= AD_PORT_CHURNED;
1351 			break;
1352 		case AD_RX_DEFAULTED:
1353 			__update_default_selected(port);
1354 			__record_default(port);
1355 			port->sm_vars |= AD_PORT_MATCHED;
1356 			port->actor_oper_port_state &= ~LACP_STATE_EXPIRED;
1357 			break;
1358 		case AD_RX_CURRENT:
1359 			/* detect loopback situation */
1360 			if (MAC_ADDRESS_EQUAL(&(lacpdu->actor_system),
1361 					      &(port->actor_system))) {
1362 				slave_err(port->slave->bond->dev, port->slave->dev, "An illegal loopback occurred on slave\n"
1363 					  "Check the configuration to verify that all adapters are connected to 802.3ad compliant switch ports\n");
1364 				return;
1365 			}
1366 			__update_selected(lacpdu, port);
1367 			__update_ntt(lacpdu, port);
1368 			__record_pdu(lacpdu, port);
1369 			port->sm_rx_timer_counter = __ad_timer_to_ticks(AD_CURRENT_WHILE_TIMER, (u16)(port->actor_oper_port_state & LACP_STATE_LACP_TIMEOUT));
1370 			port->actor_oper_port_state &= ~LACP_STATE_EXPIRED;
1371 			break;
1372 		default:
1373 			break;
1374 		}
1375 	}
1376 }
1377 
1378 /**
1379  * ad_churn_machine - handle port churn's state machine
1380  * @port: the port we're looking at
1381  *
1382  */
1383 static void ad_churn_machine(struct port *port)
1384 {
1385 	if (port->sm_vars & AD_PORT_CHURNED) {
1386 		port->sm_vars &= ~AD_PORT_CHURNED;
1387 		port->sm_churn_actor_state = AD_CHURN_MONITOR;
1388 		port->sm_churn_partner_state = AD_CHURN_MONITOR;
1389 		port->sm_churn_actor_timer_counter =
1390 			__ad_timer_to_ticks(AD_ACTOR_CHURN_TIMER, 0);
1391 		port->sm_churn_partner_timer_counter =
1392 			 __ad_timer_to_ticks(AD_PARTNER_CHURN_TIMER, 0);
1393 		return;
1394 	}
1395 	if (port->sm_churn_actor_timer_counter &&
1396 	    !(--port->sm_churn_actor_timer_counter) &&
1397 	    port->sm_churn_actor_state == AD_CHURN_MONITOR) {
1398 		if (port->actor_oper_port_state & LACP_STATE_SYNCHRONIZATION) {
1399 			port->sm_churn_actor_state = AD_NO_CHURN;
1400 		} else {
1401 			port->churn_actor_count++;
1402 			port->sm_churn_actor_state = AD_CHURN;
1403 		}
1404 	}
1405 	if (port->sm_churn_partner_timer_counter &&
1406 	    !(--port->sm_churn_partner_timer_counter) &&
1407 	    port->sm_churn_partner_state == AD_CHURN_MONITOR) {
1408 		if (port->partner_oper.port_state & LACP_STATE_SYNCHRONIZATION) {
1409 			port->sm_churn_partner_state = AD_NO_CHURN;
1410 		} else {
1411 			port->churn_partner_count++;
1412 			port->sm_churn_partner_state = AD_CHURN;
1413 		}
1414 	}
1415 }
1416 
1417 /**
1418  * ad_tx_machine - handle a port's tx state machine
1419  * @port: the port we're looking at
1420  */
1421 static void ad_tx_machine(struct port *port)
1422 {
1423 	/* check if tx timer expired, to verify that we do not send more than
1424 	 * 3 packets per second
1425 	 */
1426 	if (!port->sm_tx_timer_counter || !(--port->sm_tx_timer_counter)) {
1427 		/* check if there is something to send */
1428 		if (port->ntt && (port->sm_vars & AD_PORT_LACP_ENABLED)) {
1429 			__update_lacpdu_from_port(port);
1430 
1431 			if (ad_lacpdu_send(port) >= 0) {
1432 				slave_dbg(port->slave->bond->dev,
1433 					  port->slave->dev,
1434 					  "Sent LACPDU on port %d\n",
1435 					  port->actor_port_number);
1436 
1437 				/* mark ntt as false, so it will not be sent
1438 				 * again until demanded
1439 				 */
1440 				port->ntt = false;
1441 
1442 				/* restart tx timer(to verify that we will not
1443 				 * exceed AD_MAX_TX_IN_SECOND
1444 				 */
1445 				port->sm_tx_timer_counter = ad_ticks_per_sec / AD_MAX_TX_IN_SECOND;
1446 			}
1447 		}
1448 	}
1449 }
1450 
1451 /**
1452  * ad_periodic_machine - handle a port's periodic state machine
1453  * @port: the port we're looking at
1454  *
1455  * Turn ntt flag on priodically to perform periodic transmission of lacpdu's.
1456  */
1457 static void ad_periodic_machine(struct port *port)
1458 {
1459 	periodic_states_t last_state;
1460 
1461 	/* keep current state machine state to compare later if it was changed */
1462 	last_state = port->sm_periodic_state;
1463 
1464 	/* check if port was reinitialized */
1465 	if (((port->sm_vars & AD_PORT_BEGIN) || !(port->sm_vars & AD_PORT_LACP_ENABLED) || !port->is_enabled) ||
1466 	    (!(port->actor_oper_port_state & LACP_STATE_LACP_ACTIVITY) && !(port->partner_oper.port_state & LACP_STATE_LACP_ACTIVITY))) {
1467 		port->sm_periodic_state = AD_NO_PERIODIC;
1468 	}
1469 	/* check if state machine should change state */
1470 	else if (port->sm_periodic_timer_counter) {
1471 		/* check if periodic state machine expired */
1472 		if (!(--port->sm_periodic_timer_counter)) {
1473 			/* if expired then do tx */
1474 			port->sm_periodic_state = AD_PERIODIC_TX;
1475 		} else {
1476 			/* If not expired, check if there is some new timeout
1477 			 * parameter from the partner state
1478 			 */
1479 			switch (port->sm_periodic_state) {
1480 			case AD_FAST_PERIODIC:
1481 				if (!(port->partner_oper.port_state
1482 				      & LACP_STATE_LACP_TIMEOUT))
1483 					port->sm_periodic_state = AD_SLOW_PERIODIC;
1484 				break;
1485 			case AD_SLOW_PERIODIC:
1486 				if ((port->partner_oper.port_state & LACP_STATE_LACP_TIMEOUT)) {
1487 					port->sm_periodic_timer_counter = 0;
1488 					port->sm_periodic_state = AD_PERIODIC_TX;
1489 				}
1490 				break;
1491 			default:
1492 				break;
1493 			}
1494 		}
1495 	} else {
1496 		switch (port->sm_periodic_state) {
1497 		case AD_NO_PERIODIC:
1498 			port->sm_periodic_state = AD_FAST_PERIODIC;
1499 			break;
1500 		case AD_PERIODIC_TX:
1501 			if (!(port->partner_oper.port_state &
1502 			    LACP_STATE_LACP_TIMEOUT))
1503 				port->sm_periodic_state = AD_SLOW_PERIODIC;
1504 			else
1505 				port->sm_periodic_state = AD_FAST_PERIODIC;
1506 			break;
1507 		default:
1508 			break;
1509 		}
1510 	}
1511 
1512 	/* check if the state machine was changed */
1513 	if (port->sm_periodic_state != last_state) {
1514 		slave_dbg(port->slave->bond->dev, port->slave->dev,
1515 			  "Periodic Machine: Port=%d, Last State=%d, Curr State=%d\n",
1516 			  port->actor_port_number, last_state,
1517 			  port->sm_periodic_state);
1518 		switch (port->sm_periodic_state) {
1519 		case AD_NO_PERIODIC:
1520 			port->sm_periodic_timer_counter = 0;
1521 			break;
1522 		case AD_FAST_PERIODIC:
1523 			/* decrement 1 tick we lost in the PERIODIC_TX cycle */
1524 			port->sm_periodic_timer_counter = __ad_timer_to_ticks(AD_PERIODIC_TIMER, (u16)(AD_FAST_PERIODIC_TIME))-1;
1525 			break;
1526 		case AD_SLOW_PERIODIC:
1527 			/* decrement 1 tick we lost in the PERIODIC_TX cycle */
1528 			port->sm_periodic_timer_counter = __ad_timer_to_ticks(AD_PERIODIC_TIMER, (u16)(AD_SLOW_PERIODIC_TIME))-1;
1529 			break;
1530 		case AD_PERIODIC_TX:
1531 			port->ntt = true;
1532 			break;
1533 		default:
1534 			break;
1535 		}
1536 	}
1537 }
1538 
1539 /**
1540  * ad_port_selection_logic - select aggregation groups
1541  * @port: the port we're looking at
1542  * @update_slave_arr: Does slave array need update?
1543  *
1544  * Select aggregation groups, and assign each port for it's aggregetor. The
1545  * selection logic is called in the inititalization (after all the handshkes),
1546  * and after every lacpdu receive (if selected is off).
1547  */
1548 static void ad_port_selection_logic(struct port *port, bool *update_slave_arr)
1549 {
1550 	struct aggregator *aggregator, *free_aggregator = NULL, *temp_aggregator;
1551 	struct port *last_port = NULL, *curr_port;
1552 	struct list_head *iter;
1553 	struct bonding *bond;
1554 	struct slave *slave;
1555 	int found = 0;
1556 
1557 	/* if the port is already Selected, do nothing */
1558 	if (port->sm_vars & AD_PORT_SELECTED)
1559 		return;
1560 
1561 	bond = __get_bond_by_port(port);
1562 
1563 	/* if the port is connected to other aggregator, detach it */
1564 	if (port->aggregator) {
1565 		/* detach the port from its former aggregator */
1566 		temp_aggregator = port->aggregator;
1567 		for (curr_port = temp_aggregator->lag_ports; curr_port;
1568 		     last_port = curr_port,
1569 		     curr_port = curr_port->next_port_in_aggregator) {
1570 			if (curr_port == port) {
1571 				temp_aggregator->num_of_ports--;
1572 				/* if it is the first port attached to the
1573 				 * aggregator
1574 				 */
1575 				if (!last_port) {
1576 					temp_aggregator->lag_ports =
1577 						port->next_port_in_aggregator;
1578 				} else {
1579 					/* not the first port attached to the
1580 					 * aggregator
1581 					 */
1582 					last_port->next_port_in_aggregator =
1583 						port->next_port_in_aggregator;
1584 				}
1585 
1586 				/* clear the port's relations to this
1587 				 * aggregator
1588 				 */
1589 				port->aggregator = NULL;
1590 				port->next_port_in_aggregator = NULL;
1591 				port->actor_port_aggregator_identifier = 0;
1592 
1593 				slave_dbg(bond->dev, port->slave->dev, "Port %d left LAG %d\n",
1594 					  port->actor_port_number,
1595 					  temp_aggregator->aggregator_identifier);
1596 				/* if the aggregator is empty, clear its
1597 				 * parameters, and set it ready to be attached
1598 				 */
1599 				if (!temp_aggregator->lag_ports)
1600 					ad_clear_agg(temp_aggregator);
1601 				break;
1602 			}
1603 		}
1604 		if (!curr_port) {
1605 			/* meaning: the port was related to an aggregator
1606 			 * but was not on the aggregator port list
1607 			 */
1608 			net_warn_ratelimited("%s: (slave %s): Warning: Port %d was related to aggregator %d but was not on its port list\n",
1609 					     port->slave->bond->dev->name,
1610 					     port->slave->dev->name,
1611 					     port->actor_port_number,
1612 					     port->aggregator->aggregator_identifier);
1613 		}
1614 	}
1615 	/* search on all aggregators for a suitable aggregator for this port */
1616 	bond_for_each_slave(bond, slave, iter) {
1617 		aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
1618 
1619 		/* keep a free aggregator for later use(if needed) */
1620 		if (!aggregator->lag_ports) {
1621 			if (!free_aggregator)
1622 				free_aggregator = aggregator;
1623 			continue;
1624 		}
1625 		/* check if current aggregator suits us */
1626 		if (((aggregator->actor_oper_aggregator_key == port->actor_oper_port_key) && /* if all parameters match AND */
1627 		     MAC_ADDRESS_EQUAL(&(aggregator->partner_system), &(port->partner_oper.system)) &&
1628 		     (aggregator->partner_system_priority == port->partner_oper.system_priority) &&
1629 		     (aggregator->partner_oper_aggregator_key == port->partner_oper.key)
1630 		    ) &&
1631 		    ((__agg_has_partner(aggregator) && /* partner answers */
1632 		      !aggregator->is_individual)  /* but is not individual OR */
1633 		    )
1634 		   ) {
1635 			/* attach to the founded aggregator */
1636 			port->aggregator = aggregator;
1637 			port->actor_port_aggregator_identifier =
1638 				port->aggregator->aggregator_identifier;
1639 			port->next_port_in_aggregator = aggregator->lag_ports;
1640 			port->aggregator->num_of_ports++;
1641 			aggregator->lag_ports = port;
1642 			slave_dbg(bond->dev, slave->dev, "Port %d joined LAG %d (existing LAG)\n",
1643 				  port->actor_port_number,
1644 				  port->aggregator->aggregator_identifier);
1645 
1646 			/* mark this port as selected */
1647 			port->sm_vars |= AD_PORT_SELECTED;
1648 			found = 1;
1649 			break;
1650 		}
1651 	}
1652 
1653 	/* the port couldn't find an aggregator - attach it to a new
1654 	 * aggregator
1655 	 */
1656 	if (!found) {
1657 		if (free_aggregator) {
1658 			/* assign port a new aggregator */
1659 			port->aggregator = free_aggregator;
1660 			port->actor_port_aggregator_identifier =
1661 				port->aggregator->aggregator_identifier;
1662 
1663 			/* update the new aggregator's parameters
1664 			 * if port was responsed from the end-user
1665 			 */
1666 			if (port->actor_oper_port_key & AD_DUPLEX_KEY_MASKS)
1667 				/* if port is full duplex */
1668 				port->aggregator->is_individual = false;
1669 			else
1670 				port->aggregator->is_individual = true;
1671 
1672 			port->aggregator->actor_admin_aggregator_key =
1673 				port->actor_admin_port_key;
1674 			port->aggregator->actor_oper_aggregator_key =
1675 				port->actor_oper_port_key;
1676 			port->aggregator->partner_system =
1677 				port->partner_oper.system;
1678 			port->aggregator->partner_system_priority =
1679 				port->partner_oper.system_priority;
1680 			port->aggregator->partner_oper_aggregator_key = port->partner_oper.key;
1681 			port->aggregator->receive_state = 1;
1682 			port->aggregator->transmit_state = 1;
1683 			port->aggregator->lag_ports = port;
1684 			port->aggregator->num_of_ports++;
1685 
1686 			/* mark this port as selected */
1687 			port->sm_vars |= AD_PORT_SELECTED;
1688 
1689 			slave_dbg(bond->dev, port->slave->dev, "Port %d joined LAG %d (new LAG)\n",
1690 				  port->actor_port_number,
1691 				  port->aggregator->aggregator_identifier);
1692 		} else {
1693 			slave_err(bond->dev, port->slave->dev,
1694 				  "Port %d did not find a suitable aggregator\n",
1695 				  port->actor_port_number);
1696 			return;
1697 		}
1698 	}
1699 	/* if all aggregator's ports are READY_N == TRUE, set ready=TRUE
1700 	 * in all aggregator's ports, else set ready=FALSE in all
1701 	 * aggregator's ports
1702 	 */
1703 	__set_agg_ports_ready(port->aggregator,
1704 			      __agg_ports_are_ready(port->aggregator));
1705 
1706 	aggregator = __get_first_agg(port);
1707 	ad_agg_selection_logic(aggregator, update_slave_arr);
1708 
1709 	if (!port->aggregator->is_active)
1710 		port->actor_oper_port_state &= ~LACP_STATE_SYNCHRONIZATION;
1711 }
1712 
1713 /* Decide if "agg" is a better choice for the new active aggregator that
1714  * the current best, according to the ad_select policy.
1715  */
1716 static struct aggregator *ad_agg_selection_test(struct aggregator *best,
1717 						struct aggregator *curr)
1718 {
1719 	/* 0. If no best, select current.
1720 	 *
1721 	 * 1. If the current agg is not individual, and the best is
1722 	 *    individual, select current.
1723 	 *
1724 	 * 2. If current agg is individual and the best is not, keep best.
1725 	 *
1726 	 * 3. Therefore, current and best are both individual or both not
1727 	 *    individual, so:
1728 	 *
1729 	 * 3a. If current agg partner replied, and best agg partner did not,
1730 	 *     select current.
1731 	 *
1732 	 * 3b. If current agg partner did not reply and best agg partner
1733 	 *     did reply, keep best.
1734 	 *
1735 	 * 4.  Therefore, current and best both have partner replies or
1736 	 *     both do not, so perform selection policy:
1737 	 *
1738 	 * BOND_AD_PRIO: Select by total priority of ports. If priority
1739 	 *     is equal, select by count.
1740 	 *
1741 	 * BOND_AD_COUNT: Select by count of ports.  If count is equal,
1742 	 *     select by bandwidth.
1743 	 *
1744 	 * BOND_AD_STABLE, BOND_AD_BANDWIDTH: Select by bandwidth.
1745 	 */
1746 	if (!best)
1747 		return curr;
1748 
1749 	if (!curr->is_individual && best->is_individual)
1750 		return curr;
1751 
1752 	if (curr->is_individual && !best->is_individual)
1753 		return best;
1754 
1755 	if (__agg_has_partner(curr) && !__agg_has_partner(best))
1756 		return curr;
1757 
1758 	if (!__agg_has_partner(curr) && __agg_has_partner(best))
1759 		return best;
1760 
1761 	switch (__get_agg_selection_mode(curr->lag_ports)) {
1762 	case BOND_AD_PRIO:
1763 		if (__agg_ports_priority(curr) > __agg_ports_priority(best))
1764 			return curr;
1765 
1766 		if (__agg_ports_priority(curr) < __agg_ports_priority(best))
1767 			return best;
1768 
1769 		fallthrough;
1770 	case BOND_AD_COUNT:
1771 		if (__agg_active_ports(curr) > __agg_active_ports(best))
1772 			return curr;
1773 
1774 		if (__agg_active_ports(curr) < __agg_active_ports(best))
1775 			return best;
1776 
1777 		fallthrough;
1778 	case BOND_AD_STABLE:
1779 	case BOND_AD_BANDWIDTH:
1780 		if (__get_agg_bandwidth(curr) > __get_agg_bandwidth(best))
1781 			return curr;
1782 
1783 		break;
1784 
1785 	default:
1786 		net_warn_ratelimited("%s: (slave %s): Impossible agg select mode %d\n",
1787 				     curr->slave->bond->dev->name,
1788 				     curr->slave->dev->name,
1789 				     __get_agg_selection_mode(curr->lag_ports));
1790 		break;
1791 	}
1792 
1793 	return best;
1794 }
1795 
1796 static int agg_device_up(const struct aggregator *agg)
1797 {
1798 	struct port *port = agg->lag_ports;
1799 
1800 	if (!port)
1801 		return 0;
1802 
1803 	for (port = agg->lag_ports; port;
1804 	     port = port->next_port_in_aggregator) {
1805 		if (netif_running(port->slave->dev) &&
1806 		    netif_carrier_ok(port->slave->dev))
1807 			return 1;
1808 	}
1809 
1810 	return 0;
1811 }
1812 
1813 /**
1814  * ad_agg_selection_logic - select an aggregation group for a team
1815  * @agg: the aggregator we're looking at
1816  * @update_slave_arr: Does slave array need update?
1817  *
1818  * It is assumed that only one aggregator may be selected for a team.
1819  *
1820  * The logic of this function is to select the aggregator according to
1821  * the ad_select policy:
1822  *
1823  * BOND_AD_STABLE: select the aggregator with the most ports attached to
1824  * it, and to reselect the active aggregator only if the previous
1825  * aggregator has no more ports related to it.
1826  *
1827  * BOND_AD_BANDWIDTH: select the aggregator with the highest total
1828  * bandwidth, and reselect whenever a link state change takes place or the
1829  * set of slaves in the bond changes.
1830  *
1831  * BOND_AD_COUNT: select the aggregator with largest number of ports
1832  * (slaves), and reselect whenever a link state change takes place or the
1833  * set of slaves in the bond changes.
1834  *
1835  * BOND_AD_PRIO: select the aggregator with highest total priority of ports
1836  * (slaves), and reselect whenever a link state change takes place or the
1837  * set of slaves in the bond changes.
1838  *
1839  * FIXME: this function MUST be called with the first agg in the bond, or
1840  * __get_active_agg() won't work correctly. This function should be better
1841  * called with the bond itself, and retrieve the first agg from it.
1842  */
1843 static void ad_agg_selection_logic(struct aggregator *agg,
1844 				   bool *update_slave_arr)
1845 {
1846 	struct aggregator *best, *active, *origin;
1847 	struct bonding *bond = agg->slave->bond;
1848 	struct list_head *iter;
1849 	struct slave *slave;
1850 	struct port *port;
1851 
1852 	rcu_read_lock();
1853 	origin = agg;
1854 	active = __get_active_agg(agg);
1855 	best = (active && agg_device_up(active)) ? active : NULL;
1856 
1857 	bond_for_each_slave_rcu(bond, slave, iter) {
1858 		agg = &(SLAVE_AD_INFO(slave)->aggregator);
1859 
1860 		agg->is_active = 0;
1861 
1862 		if (__agg_active_ports(agg) && agg_device_up(agg))
1863 			best = ad_agg_selection_test(best, agg);
1864 	}
1865 
1866 	if (best &&
1867 	    __get_agg_selection_mode(best->lag_ports) == BOND_AD_STABLE) {
1868 		/* For the STABLE policy, don't replace the old active
1869 		 * aggregator if it's still active (it has an answering
1870 		 * partner) or if both the best and active don't have an
1871 		 * answering partner.
1872 		 */
1873 		if (active && active->lag_ports &&
1874 		    __agg_active_ports(active) &&
1875 		    (__agg_has_partner(active) ||
1876 		     (!__agg_has_partner(active) &&
1877 		     !__agg_has_partner(best)))) {
1878 			if (!(!active->actor_oper_aggregator_key &&
1879 			      best->actor_oper_aggregator_key)) {
1880 				best = NULL;
1881 				active->is_active = 1;
1882 			}
1883 		}
1884 	}
1885 
1886 	if (best && (best == active)) {
1887 		best = NULL;
1888 		active->is_active = 1;
1889 	}
1890 
1891 	/* if there is new best aggregator, activate it */
1892 	if (best) {
1893 		netdev_dbg(bond->dev, "(slave %s): best Agg=%d; P=%d; a k=%d; p k=%d; Ind=%d; Act=%d\n",
1894 			   best->slave ? best->slave->dev->name : "NULL",
1895 			   best->aggregator_identifier, best->num_of_ports,
1896 			   best->actor_oper_aggregator_key,
1897 			   best->partner_oper_aggregator_key,
1898 			   best->is_individual, best->is_active);
1899 		netdev_dbg(bond->dev, "(slave %s): best ports %p slave %p\n",
1900 			   best->slave ? best->slave->dev->name : "NULL",
1901 			   best->lag_ports, best->slave);
1902 
1903 		bond_for_each_slave_rcu(bond, slave, iter) {
1904 			agg = &(SLAVE_AD_INFO(slave)->aggregator);
1905 
1906 			slave_dbg(bond->dev, slave->dev, "Agg=%d; P=%d; a k=%d; p k=%d; Ind=%d; Act=%d\n",
1907 				  agg->aggregator_identifier, agg->num_of_ports,
1908 				  agg->actor_oper_aggregator_key,
1909 				  agg->partner_oper_aggregator_key,
1910 				  agg->is_individual, agg->is_active);
1911 		}
1912 
1913 		/* check if any partner replies */
1914 		if (best->is_individual)
1915 			net_warn_ratelimited("%s: Warning: No 802.3ad response from the link partner for any adapters in the bond\n",
1916 					     bond->dev->name);
1917 
1918 		best->is_active = 1;
1919 		netdev_dbg(bond->dev, "(slave %s): LAG %d chosen as the active LAG\n",
1920 			   best->slave ? best->slave->dev->name : "NULL",
1921 			   best->aggregator_identifier);
1922 		netdev_dbg(bond->dev, "(slave %s): Agg=%d; P=%d; a k=%d; p k=%d; Ind=%d; Act=%d\n",
1923 			   best->slave ? best->slave->dev->name : "NULL",
1924 			   best->aggregator_identifier, best->num_of_ports,
1925 			   best->actor_oper_aggregator_key,
1926 			   best->partner_oper_aggregator_key,
1927 			   best->is_individual, best->is_active);
1928 
1929 		/* disable the ports that were related to the former
1930 		 * active_aggregator
1931 		 */
1932 		if (active) {
1933 			for (port = active->lag_ports; port;
1934 			     port = port->next_port_in_aggregator) {
1935 				__disable_port(port);
1936 			}
1937 		}
1938 		/* Slave array needs update. */
1939 		*update_slave_arr = true;
1940 	}
1941 
1942 	/* if the selected aggregator is of join individuals
1943 	 * (partner_system is NULL), enable their ports
1944 	 */
1945 	active = __get_active_agg(origin);
1946 
1947 	if (active) {
1948 		if (!__agg_has_partner(active)) {
1949 			for (port = active->lag_ports; port;
1950 			     port = port->next_port_in_aggregator) {
1951 				__enable_port(port);
1952 			}
1953 			*update_slave_arr = true;
1954 		}
1955 	}
1956 
1957 	rcu_read_unlock();
1958 
1959 	bond_3ad_set_carrier(bond);
1960 }
1961 
1962 /**
1963  * ad_clear_agg - clear a given aggregator's parameters
1964  * @aggregator: the aggregator we're looking at
1965  */
1966 static void ad_clear_agg(struct aggregator *aggregator)
1967 {
1968 	if (aggregator) {
1969 		aggregator->is_individual = false;
1970 		aggregator->actor_admin_aggregator_key = 0;
1971 		aggregator->actor_oper_aggregator_key = 0;
1972 		eth_zero_addr(aggregator->partner_system.mac_addr_value);
1973 		aggregator->partner_system_priority = 0;
1974 		aggregator->partner_oper_aggregator_key = 0;
1975 		aggregator->receive_state = 0;
1976 		aggregator->transmit_state = 0;
1977 		aggregator->lag_ports = NULL;
1978 		aggregator->is_active = 0;
1979 		aggregator->num_of_ports = 0;
1980 		pr_debug("%s: LAG %d was cleared\n",
1981 			 aggregator->slave ?
1982 			 aggregator->slave->dev->name : "NULL",
1983 			 aggregator->aggregator_identifier);
1984 	}
1985 }
1986 
1987 /**
1988  * ad_initialize_agg - initialize a given aggregator's parameters
1989  * @aggregator: the aggregator we're looking at
1990  */
1991 static void ad_initialize_agg(struct aggregator *aggregator)
1992 {
1993 	if (aggregator) {
1994 		ad_clear_agg(aggregator);
1995 
1996 		eth_zero_addr(aggregator->aggregator_mac_address.mac_addr_value);
1997 		aggregator->aggregator_identifier = 0;
1998 		aggregator->slave = NULL;
1999 	}
2000 }
2001 
2002 /**
2003  * ad_initialize_port - initialize a given port's parameters
2004  * @port: the port we're looking at
2005  * @bond_params: bond parameters we will use
2006  */
2007 static void ad_initialize_port(struct port *port, const struct bond_params *bond_params)
2008 {
2009 	static const struct port_params tmpl = {
2010 		.system_priority = 0xffff,
2011 		.key             = 1,
2012 		.port_number     = 1,
2013 		.port_priority   = 0xff,
2014 		.port_state      = 0,
2015 	};
2016 	static const struct lacpdu lacpdu = {
2017 		.subtype		= 0x01,
2018 		.version_number = 0x01,
2019 		.tlv_type_actor_info = 0x01,
2020 		.actor_information_length = 0x14,
2021 		.tlv_type_partner_info = 0x02,
2022 		.partner_information_length = 0x14,
2023 		.tlv_type_collector_info = 0x03,
2024 		.collector_information_length = 0x10,
2025 		.collector_max_delay = htons(AD_COLLECTOR_MAX_DELAY),
2026 	};
2027 
2028 	if (port) {
2029 		port->actor_port_priority = 0xff;
2030 		port->actor_port_aggregator_identifier = 0;
2031 		port->ntt = false;
2032 		port->actor_admin_port_state = LACP_STATE_AGGREGATION;
2033 		port->actor_oper_port_state  = LACP_STATE_AGGREGATION;
2034 		if (bond_params->lacp_active) {
2035 			port->actor_admin_port_state |= LACP_STATE_LACP_ACTIVITY;
2036 			port->actor_oper_port_state  |= LACP_STATE_LACP_ACTIVITY;
2037 		}
2038 
2039 		if (bond_params->lacp_fast)
2040 			port->actor_oper_port_state |= LACP_STATE_LACP_TIMEOUT;
2041 
2042 		memcpy(&port->partner_admin, &tmpl, sizeof(tmpl));
2043 		memcpy(&port->partner_oper, &tmpl, sizeof(tmpl));
2044 
2045 		port->is_enabled = true;
2046 		/* private parameters */
2047 		port->sm_vars = AD_PORT_BEGIN | AD_PORT_LACP_ENABLED;
2048 		port->sm_rx_state = 0;
2049 		port->sm_rx_timer_counter = 0;
2050 		port->sm_periodic_state = 0;
2051 		port->sm_periodic_timer_counter = 0;
2052 		port->sm_mux_state = 0;
2053 		port->sm_mux_timer_counter = 0;
2054 		port->sm_tx_state = 0;
2055 		port->aggregator = NULL;
2056 		port->next_port_in_aggregator = NULL;
2057 		port->transaction_id = 0;
2058 
2059 		port->sm_churn_actor_timer_counter = 0;
2060 		port->sm_churn_actor_state = 0;
2061 		port->churn_actor_count = 0;
2062 		port->sm_churn_partner_timer_counter = 0;
2063 		port->sm_churn_partner_state = 0;
2064 		port->churn_partner_count = 0;
2065 
2066 		memcpy(&port->lacpdu, &lacpdu, sizeof(lacpdu));
2067 	}
2068 }
2069 
2070 /**
2071  * ad_enable_collecting - enable a port's receive
2072  * @port: the port we're looking at
2073  *
2074  * Enable @port if it's in an active aggregator
2075  */
2076 static void ad_enable_collecting(struct port *port)
2077 {
2078 	if (port->aggregator->is_active) {
2079 		struct slave *slave = port->slave;
2080 
2081 		slave_dbg(slave->bond->dev, slave->dev,
2082 			  "Enabling collecting on port %d (LAG %d)\n",
2083 			  port->actor_port_number,
2084 			  port->aggregator->aggregator_identifier);
2085 		__enable_collecting_port(port);
2086 	}
2087 }
2088 
2089 /**
2090  * ad_disable_distributing - disable a port's transmit
2091  * @port: the port we're looking at
2092  * @update_slave_arr: Does slave array need update?
2093  */
2094 static void ad_disable_distributing(struct port *port, bool *update_slave_arr)
2095 {
2096 	if (port->aggregator && __agg_has_partner(port->aggregator)) {
2097 		slave_dbg(port->slave->bond->dev, port->slave->dev,
2098 			  "Disabling distributing on port %d (LAG %d)\n",
2099 			  port->actor_port_number,
2100 			  port->aggregator->aggregator_identifier);
2101 		__disable_distributing_port(port);
2102 		/* Slave array needs an update */
2103 		*update_slave_arr = true;
2104 	}
2105 }
2106 
2107 /**
2108  * ad_enable_collecting_distributing - enable a port's transmit/receive
2109  * @port: the port we're looking at
2110  * @update_slave_arr: Does slave array need update?
2111  *
2112  * Enable @port if it's in an active aggregator
2113  */
2114 static void ad_enable_collecting_distributing(struct port *port,
2115 					      bool *update_slave_arr)
2116 {
2117 	if (port->aggregator->is_active) {
2118 		slave_dbg(port->slave->bond->dev, port->slave->dev,
2119 			  "Enabling port %d (LAG %d)\n",
2120 			  port->actor_port_number,
2121 			  port->aggregator->aggregator_identifier);
2122 		__enable_port(port);
2123 		/* Slave array needs update */
2124 		*update_slave_arr = true;
2125 		/* Should notify peers if possible */
2126 		ad_cond_set_peer_notif(port);
2127 	}
2128 }
2129 
2130 /**
2131  * ad_disable_collecting_distributing - disable a port's transmit/receive
2132  * @port: the port we're looking at
2133  * @update_slave_arr: Does slave array need update?
2134  */
2135 static void ad_disable_collecting_distributing(struct port *port,
2136 					       bool *update_slave_arr)
2137 {
2138 	if (port->aggregator && __agg_has_partner(port->aggregator)) {
2139 		slave_dbg(port->slave->bond->dev, port->slave->dev,
2140 			  "Disabling port %d (LAG %d)\n",
2141 			  port->actor_port_number,
2142 			  port->aggregator->aggregator_identifier);
2143 		__disable_port(port);
2144 		/* Slave array needs an update */
2145 		*update_slave_arr = true;
2146 	}
2147 }
2148 
2149 /**
2150  * ad_marker_info_received - handle receive of a Marker information frame
2151  * @marker_info: Marker info received
2152  * @port: the port we're looking at
2153  */
2154 static void ad_marker_info_received(struct bond_marker *marker_info,
2155 				    struct port *port)
2156 {
2157 	struct bond_marker marker;
2158 
2159 	atomic64_inc(&SLAVE_AD_INFO(port->slave)->stats.marker_rx);
2160 	atomic64_inc(&BOND_AD_INFO(port->slave->bond).stats.marker_rx);
2161 
2162 	/* copy the received marker data to the response marker */
2163 	memcpy(&marker, marker_info, sizeof(struct bond_marker));
2164 	/* change the marker subtype to marker response */
2165 	marker.tlv_type = AD_MARKER_RESPONSE_SUBTYPE;
2166 
2167 	/* send the marker response */
2168 	if (ad_marker_send(port, &marker) >= 0)
2169 		slave_dbg(port->slave->bond->dev, port->slave->dev,
2170 			  "Sent Marker Response on port %d\n",
2171 			  port->actor_port_number);
2172 }
2173 
2174 /**
2175  * ad_marker_response_received - handle receive of a marker response frame
2176  * @marker: marker PDU received
2177  * @port: the port we're looking at
2178  *
2179  * This function does nothing since we decided not to implement send and handle
2180  * response for marker PDU's, in this stage, but only to respond to marker
2181  * information.
2182  */
2183 static void ad_marker_response_received(struct bond_marker *marker,
2184 					struct port *port)
2185 {
2186 	atomic64_inc(&SLAVE_AD_INFO(port->slave)->stats.marker_resp_rx);
2187 	atomic64_inc(&BOND_AD_INFO(port->slave->bond).stats.marker_resp_rx);
2188 
2189 	/* DO NOTHING, SINCE WE DECIDED NOT TO IMPLEMENT THIS FEATURE FOR NOW */
2190 }
2191 
2192 /* ========= AD exported functions to the main bonding code ========= */
2193 
2194 /* Check aggregators status in team every T seconds */
2195 #define AD_AGGREGATOR_SELECTION_TIMER  8
2196 
2197 /**
2198  * bond_3ad_initiate_agg_selection - initate aggregator selection
2199  * @bond: bonding struct
2200  * @timeout: timeout value to set
2201  *
2202  * Set the aggregation selection timer, to initiate an agg selection in
2203  * the very near future.  Called during first initialization, and during
2204  * any down to up transitions of the bond.
2205  */
2206 void bond_3ad_initiate_agg_selection(struct bonding *bond, int timeout)
2207 {
2208 	atomic_set(&BOND_AD_INFO(bond).agg_select_timer, timeout);
2209 }
2210 
2211 /**
2212  * bond_3ad_initialize - initialize a bond's 802.3ad parameters and structures
2213  * @bond: bonding struct to work on
2214  *
2215  * Can be called only after the mac address of the bond is set.
2216  */
2217 void bond_3ad_initialize(struct bonding *bond)
2218 {
2219 	BOND_AD_INFO(bond).aggregator_identifier = 0;
2220 	BOND_AD_INFO(bond).system.sys_priority =
2221 		bond->params.ad_actor_sys_prio;
2222 	if (is_zero_ether_addr(bond->params.ad_actor_system))
2223 		BOND_AD_INFO(bond).system.sys_mac_addr =
2224 		    *((struct mac_addr *)bond->dev->dev_addr);
2225 	else
2226 		BOND_AD_INFO(bond).system.sys_mac_addr =
2227 		    *((struct mac_addr *)bond->params.ad_actor_system);
2228 
2229 	bond_3ad_initiate_agg_selection(bond,
2230 					AD_AGGREGATOR_SELECTION_TIMER *
2231 					ad_ticks_per_sec);
2232 }
2233 
2234 /**
2235  * bond_3ad_bind_slave - initialize a slave's port
2236  * @slave: slave struct to work on
2237  *
2238  * Returns:   0 on success
2239  *          < 0 on error
2240  */
2241 void bond_3ad_bind_slave(struct slave *slave)
2242 {
2243 	struct bonding *bond = bond_get_bond_by_slave(slave);
2244 	struct port *port;
2245 	struct aggregator *aggregator;
2246 
2247 	/* check that the slave has not been initialized yet. */
2248 	if (SLAVE_AD_INFO(slave)->port.slave != slave) {
2249 
2250 		/* port initialization */
2251 		port = &(SLAVE_AD_INFO(slave)->port);
2252 
2253 		ad_initialize_port(port, &bond->params);
2254 
2255 		/* Port priority is initialized. Update it to slave's ad info */
2256 		SLAVE_AD_INFO(slave)->port_priority = port->actor_port_priority;
2257 
2258 		port->slave = slave;
2259 		port->actor_port_number = SLAVE_AD_INFO(slave)->id;
2260 		/* key is determined according to the link speed, duplex and
2261 		 * user key
2262 		 */
2263 		port->actor_admin_port_key = bond->params.ad_user_port_key << 6;
2264 		ad_update_actor_keys(port, false);
2265 		/* actor system is the bond's system */
2266 		__ad_actor_update_port(port);
2267 		/* tx timer(to verify that no more than MAX_TX_IN_SECOND
2268 		 * lacpdu's are sent in one second)
2269 		 */
2270 		port->sm_tx_timer_counter = ad_ticks_per_sec/AD_MAX_TX_IN_SECOND;
2271 
2272 		__disable_port(port);
2273 
2274 		/* aggregator initialization */
2275 		aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
2276 
2277 		ad_initialize_agg(aggregator);
2278 
2279 		aggregator->aggregator_mac_address = *((struct mac_addr *)bond->dev->dev_addr);
2280 		aggregator->aggregator_identifier = ++BOND_AD_INFO(bond).aggregator_identifier;
2281 		aggregator->slave = slave;
2282 		aggregator->is_active = 0;
2283 		aggregator->num_of_ports = 0;
2284 	}
2285 }
2286 
2287 /**
2288  * bond_3ad_unbind_slave - deinitialize a slave's port
2289  * @slave: slave struct to work on
2290  *
2291  * Search for the aggregator that is related to this port, remove the
2292  * aggregator and assign another aggregator for other port related to it
2293  * (if any), and remove the port.
2294  */
2295 void bond_3ad_unbind_slave(struct slave *slave)
2296 {
2297 	struct port *port, *prev_port, *temp_port;
2298 	struct aggregator *aggregator, *new_aggregator, *temp_aggregator;
2299 	int select_new_active_agg = 0;
2300 	struct bonding *bond = slave->bond;
2301 	struct slave *slave_iter;
2302 	struct list_head *iter;
2303 	bool dummy_slave_update; /* Ignore this value as caller updates array */
2304 
2305 	/* Sync against bond_3ad_state_machine_handler() */
2306 	spin_lock_bh(&bond->mode_lock);
2307 	aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
2308 	port = &(SLAVE_AD_INFO(slave)->port);
2309 
2310 	/* if slave is null, the whole port is not initialized */
2311 	if (!port->slave) {
2312 		slave_warn(bond->dev, slave->dev, "Trying to unbind an uninitialized port\n");
2313 		goto out;
2314 	}
2315 
2316 	slave_dbg(bond->dev, slave->dev, "Unbinding Link Aggregation Group %d\n",
2317 		  aggregator->aggregator_identifier);
2318 
2319 	/* Tell the partner that this port is not suitable for aggregation */
2320 	port->actor_oper_port_state &= ~LACP_STATE_SYNCHRONIZATION;
2321 	port->actor_oper_port_state &= ~LACP_STATE_COLLECTING;
2322 	port->actor_oper_port_state &= ~LACP_STATE_DISTRIBUTING;
2323 	port->actor_oper_port_state &= ~LACP_STATE_AGGREGATION;
2324 	__update_lacpdu_from_port(port);
2325 	ad_lacpdu_send(port);
2326 
2327 	/* check if this aggregator is occupied */
2328 	if (aggregator->lag_ports) {
2329 		/* check if there are other ports related to this aggregator
2330 		 * except the port related to this slave(thats ensure us that
2331 		 * there is a reason to search for new aggregator, and that we
2332 		 * will find one
2333 		 */
2334 		if ((aggregator->lag_ports != port) ||
2335 		    (aggregator->lag_ports->next_port_in_aggregator)) {
2336 			/* find new aggregator for the related port(s) */
2337 			bond_for_each_slave(bond, slave_iter, iter) {
2338 				new_aggregator = &(SLAVE_AD_INFO(slave_iter)->aggregator);
2339 				/* if the new aggregator is empty, or it is
2340 				 * connected to our port only
2341 				 */
2342 				if (!new_aggregator->lag_ports ||
2343 				    ((new_aggregator->lag_ports == port) &&
2344 				     !new_aggregator->lag_ports->next_port_in_aggregator))
2345 					break;
2346 			}
2347 			if (!slave_iter)
2348 				new_aggregator = NULL;
2349 
2350 			/* if new aggregator found, copy the aggregator's
2351 			 * parameters and connect the related lag_ports to the
2352 			 * new aggregator
2353 			 */
2354 			if ((new_aggregator) && ((!new_aggregator->lag_ports) || ((new_aggregator->lag_ports == port) && !new_aggregator->lag_ports->next_port_in_aggregator))) {
2355 				slave_dbg(bond->dev, slave->dev, "Some port(s) related to LAG %d - replacing with LAG %d\n",
2356 					  aggregator->aggregator_identifier,
2357 					  new_aggregator->aggregator_identifier);
2358 
2359 				if ((new_aggregator->lag_ports == port) &&
2360 				    new_aggregator->is_active) {
2361 					slave_info(bond->dev, slave->dev, "Removing an active aggregator\n");
2362 					select_new_active_agg = 1;
2363 				}
2364 
2365 				new_aggregator->is_individual = aggregator->is_individual;
2366 				new_aggregator->actor_admin_aggregator_key = aggregator->actor_admin_aggregator_key;
2367 				new_aggregator->actor_oper_aggregator_key = aggregator->actor_oper_aggregator_key;
2368 				new_aggregator->partner_system = aggregator->partner_system;
2369 				new_aggregator->partner_system_priority = aggregator->partner_system_priority;
2370 				new_aggregator->partner_oper_aggregator_key = aggregator->partner_oper_aggregator_key;
2371 				new_aggregator->receive_state = aggregator->receive_state;
2372 				new_aggregator->transmit_state = aggregator->transmit_state;
2373 				new_aggregator->lag_ports = aggregator->lag_ports;
2374 				new_aggregator->is_active = aggregator->is_active;
2375 				new_aggregator->num_of_ports = aggregator->num_of_ports;
2376 
2377 				/* update the information that is written on
2378 				 * the ports about the aggregator
2379 				 */
2380 				for (temp_port = aggregator->lag_ports; temp_port;
2381 				     temp_port = temp_port->next_port_in_aggregator) {
2382 					temp_port->aggregator = new_aggregator;
2383 					temp_port->actor_port_aggregator_identifier = new_aggregator->aggregator_identifier;
2384 				}
2385 
2386 				ad_clear_agg(aggregator);
2387 
2388 				if (select_new_active_agg)
2389 					ad_agg_selection_logic(__get_first_agg(port),
2390 							       &dummy_slave_update);
2391 			} else {
2392 				slave_warn(bond->dev, slave->dev, "unbinding aggregator, and could not find a new aggregator for its ports\n");
2393 			}
2394 		} else {
2395 			/* in case that the only port related to this
2396 			 * aggregator is the one we want to remove
2397 			 */
2398 			select_new_active_agg = aggregator->is_active;
2399 			ad_clear_agg(aggregator);
2400 			if (select_new_active_agg) {
2401 				slave_info(bond->dev, slave->dev, "Removing an active aggregator\n");
2402 				/* select new active aggregator */
2403 				temp_aggregator = __get_first_agg(port);
2404 				if (temp_aggregator)
2405 					ad_agg_selection_logic(temp_aggregator,
2406 							       &dummy_slave_update);
2407 			}
2408 		}
2409 	}
2410 
2411 	slave_dbg(bond->dev, slave->dev, "Unbinding port %d\n", port->actor_port_number);
2412 
2413 	/* find the aggregator that this port is connected to */
2414 	bond_for_each_slave(bond, slave_iter, iter) {
2415 		temp_aggregator = &(SLAVE_AD_INFO(slave_iter)->aggregator);
2416 		prev_port = NULL;
2417 		/* search the port in the aggregator's related ports */
2418 		for (temp_port = temp_aggregator->lag_ports; temp_port;
2419 		     prev_port = temp_port,
2420 		     temp_port = temp_port->next_port_in_aggregator) {
2421 			if (temp_port == port) {
2422 				/* the aggregator found - detach the port from
2423 				 * this aggregator
2424 				 */
2425 				if (prev_port)
2426 					prev_port->next_port_in_aggregator = temp_port->next_port_in_aggregator;
2427 				else
2428 					temp_aggregator->lag_ports = temp_port->next_port_in_aggregator;
2429 				temp_aggregator->num_of_ports--;
2430 				if (__agg_active_ports(temp_aggregator) == 0) {
2431 					select_new_active_agg = temp_aggregator->is_active;
2432 					if (temp_aggregator->num_of_ports == 0)
2433 						ad_clear_agg(temp_aggregator);
2434 					if (select_new_active_agg) {
2435 						slave_info(bond->dev, slave->dev, "Removing an active aggregator\n");
2436 						/* select new active aggregator */
2437 						ad_agg_selection_logic(__get_first_agg(port),
2438 							               &dummy_slave_update);
2439 					}
2440 				}
2441 				break;
2442 			}
2443 		}
2444 	}
2445 	port->slave = NULL;
2446 
2447 out:
2448 	spin_unlock_bh(&bond->mode_lock);
2449 }
2450 
2451 /**
2452  * bond_3ad_update_ad_actor_settings - reflect change of actor settings to ports
2453  * @bond: bonding struct to work on
2454  *
2455  * If an ad_actor setting gets changed we need to update the individual port
2456  * settings so the bond device will use the new values when it gets upped.
2457  */
2458 void bond_3ad_update_ad_actor_settings(struct bonding *bond)
2459 {
2460 	struct list_head *iter;
2461 	struct slave *slave;
2462 
2463 	ASSERT_RTNL();
2464 
2465 	BOND_AD_INFO(bond).system.sys_priority = bond->params.ad_actor_sys_prio;
2466 	if (is_zero_ether_addr(bond->params.ad_actor_system))
2467 		BOND_AD_INFO(bond).system.sys_mac_addr =
2468 		    *((struct mac_addr *)bond->dev->dev_addr);
2469 	else
2470 		BOND_AD_INFO(bond).system.sys_mac_addr =
2471 		    *((struct mac_addr *)bond->params.ad_actor_system);
2472 
2473 	spin_lock_bh(&bond->mode_lock);
2474 	bond_for_each_slave(bond, slave, iter) {
2475 		struct port *port = &(SLAVE_AD_INFO(slave))->port;
2476 
2477 		__ad_actor_update_port(port);
2478 		port->ntt = true;
2479 	}
2480 	spin_unlock_bh(&bond->mode_lock);
2481 }
2482 
2483 /**
2484  * bond_agg_timer_advance - advance agg_select_timer
2485  * @bond:  bonding structure
2486  *
2487  * Return true when agg_select_timer reaches 0.
2488  */
2489 static bool bond_agg_timer_advance(struct bonding *bond)
2490 {
2491 	int val, nval;
2492 
2493 	while (1) {
2494 		val = atomic_read(&BOND_AD_INFO(bond).agg_select_timer);
2495 		if (!val)
2496 			return false;
2497 		nval = val - 1;
2498 		if (atomic_cmpxchg(&BOND_AD_INFO(bond).agg_select_timer,
2499 				   val, nval) == val)
2500 			break;
2501 	}
2502 	return nval == 0;
2503 }
2504 
2505 /**
2506  * bond_3ad_state_machine_handler - handle state machines timeout
2507  * @work: work context to fetch bonding struct to work on from
2508  *
2509  * The state machine handling concept in this module is to check every tick
2510  * which state machine should operate any function. The execution order is
2511  * round robin, so when we have an interaction between state machines, the
2512  * reply of one to each other might be delayed until next tick.
2513  *
2514  * This function also complete the initialization when the agg_select_timer
2515  * times out, and it selects an aggregator for the ports that are yet not
2516  * related to any aggregator, and selects the active aggregator for a bond.
2517  */
2518 void bond_3ad_state_machine_handler(struct work_struct *work)
2519 {
2520 	struct bonding *bond = container_of(work, struct bonding,
2521 					    ad_work.work);
2522 	struct aggregator *aggregator;
2523 	struct list_head *iter;
2524 	struct slave *slave;
2525 	struct port *port;
2526 	bool should_notify_rtnl = BOND_SLAVE_NOTIFY_LATER;
2527 	bool update_slave_arr = false;
2528 
2529 	/* Lock to protect data accessed by all (e.g., port->sm_vars) and
2530 	 * against running with bond_3ad_unbind_slave. ad_rx_machine may run
2531 	 * concurrently due to incoming LACPDU as well.
2532 	 */
2533 	spin_lock_bh(&bond->mode_lock);
2534 	rcu_read_lock();
2535 
2536 	/* check if there are any slaves */
2537 	if (!bond_has_slaves(bond))
2538 		goto re_arm;
2539 
2540 	if (bond_agg_timer_advance(bond)) {
2541 		slave = bond_first_slave_rcu(bond);
2542 		port = slave ? &(SLAVE_AD_INFO(slave)->port) : NULL;
2543 
2544 		/* select the active aggregator for the bond */
2545 		if (port) {
2546 			if (!port->slave) {
2547 				net_warn_ratelimited("%s: Warning: bond's first port is uninitialized\n",
2548 						     bond->dev->name);
2549 				goto re_arm;
2550 			}
2551 
2552 			aggregator = __get_first_agg(port);
2553 			ad_agg_selection_logic(aggregator, &update_slave_arr);
2554 		}
2555 		bond_3ad_set_carrier(bond);
2556 	}
2557 
2558 	/* for each port run the state machines */
2559 	bond_for_each_slave_rcu(bond, slave, iter) {
2560 		port = &(SLAVE_AD_INFO(slave)->port);
2561 		if (!port->slave) {
2562 			net_warn_ratelimited("%s: Warning: Found an uninitialized port\n",
2563 					    bond->dev->name);
2564 			goto re_arm;
2565 		}
2566 
2567 		ad_rx_machine(NULL, port);
2568 		ad_periodic_machine(port);
2569 		ad_port_selection_logic(port, &update_slave_arr);
2570 		ad_mux_machine(port, &update_slave_arr);
2571 		ad_tx_machine(port);
2572 		ad_churn_machine(port);
2573 
2574 		/* turn off the BEGIN bit, since we already handled it */
2575 		if (port->sm_vars & AD_PORT_BEGIN)
2576 			port->sm_vars &= ~AD_PORT_BEGIN;
2577 	}
2578 
2579 re_arm:
2580 	bond_for_each_slave_rcu(bond, slave, iter) {
2581 		if (slave->should_notify) {
2582 			should_notify_rtnl = BOND_SLAVE_NOTIFY_NOW;
2583 			break;
2584 		}
2585 	}
2586 	rcu_read_unlock();
2587 	spin_unlock_bh(&bond->mode_lock);
2588 
2589 	if (update_slave_arr)
2590 		bond_slave_arr_work_rearm(bond, 0);
2591 
2592 	if (should_notify_rtnl && rtnl_trylock()) {
2593 		bond_slave_state_notify(bond);
2594 		rtnl_unlock();
2595 	}
2596 	queue_delayed_work(bond->wq, &bond->ad_work, ad_delta_in_ticks);
2597 }
2598 
2599 /**
2600  * bond_3ad_rx_indication - handle a received frame
2601  * @lacpdu: received lacpdu
2602  * @slave: slave struct to work on
2603  *
2604  * It is assumed that frames that were sent on this NIC don't returned as new
2605  * received frames (loopback). Since only the payload is given to this
2606  * function, it check for loopback.
2607  */
2608 static int bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave)
2609 {
2610 	struct bonding *bond = slave->bond;
2611 	int ret = RX_HANDLER_ANOTHER;
2612 	struct bond_marker *marker;
2613 	struct port *port;
2614 	atomic64_t *stat;
2615 
2616 	port = &(SLAVE_AD_INFO(slave)->port);
2617 	if (!port->slave) {
2618 		net_warn_ratelimited("%s: Warning: port of slave %s is uninitialized\n",
2619 				     slave->dev->name, slave->bond->dev->name);
2620 		return ret;
2621 	}
2622 
2623 	switch (lacpdu->subtype) {
2624 	case AD_TYPE_LACPDU:
2625 		ret = RX_HANDLER_CONSUMED;
2626 		slave_dbg(slave->bond->dev, slave->dev,
2627 			  "Received LACPDU on port %d\n",
2628 			  port->actor_port_number);
2629 		/* Protect against concurrent state machines */
2630 		spin_lock(&slave->bond->mode_lock);
2631 		ad_rx_machine(lacpdu, port);
2632 		spin_unlock(&slave->bond->mode_lock);
2633 		break;
2634 	case AD_TYPE_MARKER:
2635 		ret = RX_HANDLER_CONSUMED;
2636 		/* No need to convert fields to Little Endian since we
2637 		 * don't use the marker's fields.
2638 		 */
2639 		marker = (struct bond_marker *)lacpdu;
2640 		switch (marker->tlv_type) {
2641 		case AD_MARKER_INFORMATION_SUBTYPE:
2642 			slave_dbg(slave->bond->dev, slave->dev, "Received Marker Information on port %d\n",
2643 				  port->actor_port_number);
2644 			ad_marker_info_received(marker, port);
2645 			break;
2646 		case AD_MARKER_RESPONSE_SUBTYPE:
2647 			slave_dbg(slave->bond->dev, slave->dev, "Received Marker Response on port %d\n",
2648 				  port->actor_port_number);
2649 			ad_marker_response_received(marker, port);
2650 			break;
2651 		default:
2652 			slave_dbg(slave->bond->dev, slave->dev, "Received an unknown Marker subtype on port %d\n",
2653 				  port->actor_port_number);
2654 			stat = &SLAVE_AD_INFO(slave)->stats.marker_unknown_rx;
2655 			atomic64_inc(stat);
2656 			stat = &BOND_AD_INFO(bond).stats.marker_unknown_rx;
2657 			atomic64_inc(stat);
2658 		}
2659 		break;
2660 	default:
2661 		atomic64_inc(&SLAVE_AD_INFO(slave)->stats.lacpdu_unknown_rx);
2662 		atomic64_inc(&BOND_AD_INFO(bond).stats.lacpdu_unknown_rx);
2663 	}
2664 
2665 	return ret;
2666 }
2667 
2668 /**
2669  * ad_update_actor_keys - Update the oper / admin keys for a port based on
2670  * its current speed and duplex settings.
2671  *
2672  * @port: the port we'are looking at
2673  * @reset: Boolean to just reset the speed and the duplex part of the key
2674  *
2675  * The logic to change the oper / admin keys is:
2676  * (a) A full duplex port can participate in LACP with partner.
2677  * (b) When the speed is changed, LACP need to be reinitiated.
2678  */
2679 static void ad_update_actor_keys(struct port *port, bool reset)
2680 {
2681 	u8 duplex = 0;
2682 	u16 ospeed = 0, speed = 0;
2683 	u16 old_oper_key = port->actor_oper_port_key;
2684 
2685 	port->actor_admin_port_key &= ~(AD_SPEED_KEY_MASKS|AD_DUPLEX_KEY_MASKS);
2686 	if (!reset) {
2687 		speed = __get_link_speed(port);
2688 		ospeed = (old_oper_key & AD_SPEED_KEY_MASKS) >> 1;
2689 		duplex = __get_duplex(port);
2690 		port->actor_admin_port_key |= (speed << 1) | duplex;
2691 	}
2692 	port->actor_oper_port_key = port->actor_admin_port_key;
2693 
2694 	if (old_oper_key != port->actor_oper_port_key) {
2695 		/* Only 'duplex' port participates in LACP */
2696 		if (duplex)
2697 			port->sm_vars |= AD_PORT_LACP_ENABLED;
2698 		else
2699 			port->sm_vars &= ~AD_PORT_LACP_ENABLED;
2700 
2701 		if (!reset) {
2702 			if (!speed) {
2703 				slave_err(port->slave->bond->dev,
2704 					  port->slave->dev,
2705 					  "speed changed to 0 on port %d\n",
2706 					  port->actor_port_number);
2707 			} else if (duplex && ospeed != speed) {
2708 				/* Speed change restarts LACP state-machine */
2709 				port->sm_vars |= AD_PORT_BEGIN;
2710 			}
2711 		}
2712 	}
2713 }
2714 
2715 /**
2716  * bond_3ad_adapter_speed_duplex_changed - handle a slave's speed / duplex
2717  * change indication
2718  *
2719  * @slave: slave struct to work on
2720  *
2721  * Handle reselection of aggregator (if needed) for this port.
2722  */
2723 void bond_3ad_adapter_speed_duplex_changed(struct slave *slave)
2724 {
2725 	struct port *port;
2726 
2727 	port = &(SLAVE_AD_INFO(slave)->port);
2728 
2729 	/* if slave is null, the whole port is not initialized */
2730 	if (!port->slave) {
2731 		slave_warn(slave->bond->dev, slave->dev,
2732 			   "speed/duplex changed for uninitialized port\n");
2733 		return;
2734 	}
2735 
2736 	spin_lock_bh(&slave->bond->mode_lock);
2737 	ad_update_actor_keys(port, false);
2738 	spin_unlock_bh(&slave->bond->mode_lock);
2739 	slave_dbg(slave->bond->dev, slave->dev, "Port %d changed speed/duplex\n",
2740 		  port->actor_port_number);
2741 }
2742 
2743 /**
2744  * bond_3ad_handle_link_change - handle a slave's link status change indication
2745  * @slave: slave struct to work on
2746  * @link: whether the link is now up or down
2747  *
2748  * Handle reselection of aggregator (if needed) for this port.
2749  */
2750 void bond_3ad_handle_link_change(struct slave *slave, char link)
2751 {
2752 	struct aggregator *agg;
2753 	struct port *port;
2754 	bool dummy;
2755 
2756 	port = &(SLAVE_AD_INFO(slave)->port);
2757 
2758 	/* if slave is null, the whole port is not initialized */
2759 	if (!port->slave) {
2760 		slave_warn(slave->bond->dev, slave->dev, "link status changed for uninitialized port\n");
2761 		return;
2762 	}
2763 
2764 	spin_lock_bh(&slave->bond->mode_lock);
2765 	/* on link down we are zeroing duplex and speed since
2766 	 * some of the adaptors(ce1000.lan) report full duplex/speed
2767 	 * instead of N/A(duplex) / 0(speed).
2768 	 *
2769 	 * on link up we are forcing recheck on the duplex and speed since
2770 	 * some of he adaptors(ce1000.lan) report.
2771 	 */
2772 	if (link == BOND_LINK_UP) {
2773 		port->is_enabled = true;
2774 		ad_update_actor_keys(port, false);
2775 	} else {
2776 		/* link has failed */
2777 		port->is_enabled = false;
2778 		ad_update_actor_keys(port, true);
2779 	}
2780 	agg = __get_first_agg(port);
2781 	ad_agg_selection_logic(agg, &dummy);
2782 
2783 	spin_unlock_bh(&slave->bond->mode_lock);
2784 
2785 	slave_dbg(slave->bond->dev, slave->dev, "Port %d changed link status to %s\n",
2786 		  port->actor_port_number,
2787 		  link == BOND_LINK_UP ? "UP" : "DOWN");
2788 
2789 	/* RTNL is held and mode_lock is released so it's safe
2790 	 * to update slave_array here.
2791 	 */
2792 	bond_update_slave_arr(slave->bond, NULL);
2793 }
2794 
2795 /**
2796  * bond_3ad_set_carrier - set link state for bonding master
2797  * @bond: bonding structure
2798  *
2799  * if we have an active aggregator, we're up, if not, we're down.
2800  * Presumes that we cannot have an active aggregator if there are
2801  * no slaves with link up.
2802  *
2803  * This behavior complies with IEEE 802.3 section 43.3.9.
2804  *
2805  * Called by bond_set_carrier(). Return zero if carrier state does not
2806  * change, nonzero if it does.
2807  */
2808 int bond_3ad_set_carrier(struct bonding *bond)
2809 {
2810 	struct aggregator *active;
2811 	struct slave *first_slave;
2812 	int ret = 1;
2813 
2814 	rcu_read_lock();
2815 	first_slave = bond_first_slave_rcu(bond);
2816 	if (!first_slave) {
2817 		ret = 0;
2818 		goto out;
2819 	}
2820 	active = __get_active_agg(&(SLAVE_AD_INFO(first_slave)->aggregator));
2821 	if (active) {
2822 		/* are enough slaves available to consider link up? */
2823 		if (__agg_active_ports(active) < bond->params.min_links) {
2824 			if (netif_carrier_ok(bond->dev)) {
2825 				netif_carrier_off(bond->dev);
2826 				goto out;
2827 			}
2828 		} else if (!netif_carrier_ok(bond->dev)) {
2829 			netif_carrier_on(bond->dev);
2830 			goto out;
2831 		}
2832 	} else if (netif_carrier_ok(bond->dev)) {
2833 		netif_carrier_off(bond->dev);
2834 	}
2835 out:
2836 	rcu_read_unlock();
2837 	return ret;
2838 }
2839 
2840 /**
2841  * __bond_3ad_get_active_agg_info - get information of the active aggregator
2842  * @bond: bonding struct to work on
2843  * @ad_info: ad_info struct to fill with the bond's info
2844  *
2845  * Returns:   0 on success
2846  *          < 0 on error
2847  */
2848 int __bond_3ad_get_active_agg_info(struct bonding *bond,
2849 				   struct ad_info *ad_info)
2850 {
2851 	struct aggregator *aggregator = NULL;
2852 	struct list_head *iter;
2853 	struct slave *slave;
2854 	struct port *port;
2855 
2856 	bond_for_each_slave_rcu(bond, slave, iter) {
2857 		port = &(SLAVE_AD_INFO(slave)->port);
2858 		if (port->aggregator && port->aggregator->is_active) {
2859 			aggregator = port->aggregator;
2860 			break;
2861 		}
2862 	}
2863 
2864 	if (!aggregator)
2865 		return -1;
2866 
2867 	ad_info->aggregator_id = aggregator->aggregator_identifier;
2868 	ad_info->ports = __agg_active_ports(aggregator);
2869 	ad_info->actor_key = aggregator->actor_oper_aggregator_key;
2870 	ad_info->partner_key = aggregator->partner_oper_aggregator_key;
2871 	ether_addr_copy(ad_info->partner_system,
2872 			aggregator->partner_system.mac_addr_value);
2873 	return 0;
2874 }
2875 
2876 int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info)
2877 {
2878 	int ret;
2879 
2880 	rcu_read_lock();
2881 	ret = __bond_3ad_get_active_agg_info(bond, ad_info);
2882 	rcu_read_unlock();
2883 
2884 	return ret;
2885 }
2886 
2887 int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
2888 			 struct slave *slave)
2889 {
2890 	struct lacpdu *lacpdu, _lacpdu;
2891 
2892 	if (skb->protocol != PKT_TYPE_LACPDU)
2893 		return RX_HANDLER_ANOTHER;
2894 
2895 	if (!MAC_ADDRESS_EQUAL(eth_hdr(skb)->h_dest, lacpdu_mcast_addr))
2896 		return RX_HANDLER_ANOTHER;
2897 
2898 	lacpdu = skb_header_pointer(skb, 0, sizeof(_lacpdu), &_lacpdu);
2899 	if (!lacpdu) {
2900 		atomic64_inc(&SLAVE_AD_INFO(slave)->stats.lacpdu_illegal_rx);
2901 		atomic64_inc(&BOND_AD_INFO(bond).stats.lacpdu_illegal_rx);
2902 		return RX_HANDLER_ANOTHER;
2903 	}
2904 
2905 	return bond_3ad_rx_indication(lacpdu, slave);
2906 }
2907 
2908 /**
2909  * bond_3ad_update_lacp_rate - change the lacp rate
2910  * @bond: bonding struct
2911  *
2912  * When modify lacp_rate parameter via sysfs,
2913  * update actor_oper_port_state of each port.
2914  *
2915  * Hold bond->mode_lock,
2916  * so we can modify port->actor_oper_port_state,
2917  * no matter bond is up or down.
2918  */
2919 void bond_3ad_update_lacp_rate(struct bonding *bond)
2920 {
2921 	struct port *port = NULL;
2922 	struct list_head *iter;
2923 	struct slave *slave;
2924 	int lacp_fast;
2925 
2926 	lacp_fast = bond->params.lacp_fast;
2927 	spin_lock_bh(&bond->mode_lock);
2928 	bond_for_each_slave(bond, slave, iter) {
2929 		port = &(SLAVE_AD_INFO(slave)->port);
2930 		if (lacp_fast)
2931 			port->actor_oper_port_state |= LACP_STATE_LACP_TIMEOUT;
2932 		else
2933 			port->actor_oper_port_state &= ~LACP_STATE_LACP_TIMEOUT;
2934 	}
2935 	spin_unlock_bh(&bond->mode_lock);
2936 }
2937 
2938 /**
2939  * bond_3ad_update_lacp_active - change the lacp active
2940  * @bond: bonding struct
2941  *
2942  * Update actor_oper_port_state when lacp_active is modified.
2943  */
2944 void bond_3ad_update_lacp_active(struct bonding *bond)
2945 {
2946 	struct port *port = NULL;
2947 	struct list_head *iter;
2948 	struct slave *slave;
2949 	int lacp_active;
2950 
2951 	lacp_active = bond->params.lacp_active;
2952 	spin_lock_bh(&bond->mode_lock);
2953 	bond_for_each_slave(bond, slave, iter) {
2954 		port = &(SLAVE_AD_INFO(slave)->port);
2955 		if (lacp_active)
2956 			port->actor_oper_port_state |= LACP_STATE_LACP_ACTIVITY;
2957 		else
2958 			port->actor_oper_port_state &= ~LACP_STATE_LACP_ACTIVITY;
2959 	}
2960 	spin_unlock_bh(&bond->mode_lock);
2961 }
2962 
2963 size_t bond_3ad_stats_size(void)
2964 {
2965 	return nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_LACPDU_RX */
2966 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_LACPDU_TX */
2967 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_LACPDU_UNKNOWN_RX */
2968 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_LACPDU_ILLEGAL_RX */
2969 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_MARKER_RX */
2970 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_MARKER_TX */
2971 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_MARKER_RESP_RX */
2972 	       nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_MARKER_RESP_TX */
2973 	       nla_total_size_64bit(sizeof(u64)); /* BOND_3AD_STAT_MARKER_UNKNOWN_RX */
2974 }
2975 
2976 int bond_3ad_stats_fill(struct sk_buff *skb, struct bond_3ad_stats *stats)
2977 {
2978 	u64 val;
2979 
2980 	val = atomic64_read(&stats->lacpdu_rx);
2981 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_LACPDU_RX, val,
2982 			      BOND_3AD_STAT_PAD))
2983 		return -EMSGSIZE;
2984 	val = atomic64_read(&stats->lacpdu_tx);
2985 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_LACPDU_TX, val,
2986 			      BOND_3AD_STAT_PAD))
2987 		return -EMSGSIZE;
2988 	val = atomic64_read(&stats->lacpdu_unknown_rx);
2989 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_LACPDU_UNKNOWN_RX, val,
2990 			      BOND_3AD_STAT_PAD))
2991 		return -EMSGSIZE;
2992 	val = atomic64_read(&stats->lacpdu_illegal_rx);
2993 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_LACPDU_ILLEGAL_RX, val,
2994 			      BOND_3AD_STAT_PAD))
2995 		return -EMSGSIZE;
2996 
2997 	val = atomic64_read(&stats->marker_rx);
2998 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_MARKER_RX, val,
2999 			      BOND_3AD_STAT_PAD))
3000 		return -EMSGSIZE;
3001 	val = atomic64_read(&stats->marker_tx);
3002 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_MARKER_TX, val,
3003 			      BOND_3AD_STAT_PAD))
3004 		return -EMSGSIZE;
3005 	val = atomic64_read(&stats->marker_resp_rx);
3006 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_MARKER_RESP_RX, val,
3007 			      BOND_3AD_STAT_PAD))
3008 		return -EMSGSIZE;
3009 	val = atomic64_read(&stats->marker_resp_tx);
3010 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_MARKER_RESP_TX, val,
3011 			      BOND_3AD_STAT_PAD))
3012 		return -EMSGSIZE;
3013 	val = atomic64_read(&stats->marker_unknown_rx);
3014 	if (nla_put_u64_64bit(skb, BOND_3AD_STAT_MARKER_UNKNOWN_RX, val,
3015 			      BOND_3AD_STAT_PAD))
3016 		return -EMSGSIZE;
3017 
3018 	return 0;
3019 }
3020