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