Lines Matching full:port
50 /* Port state definitions (43.4.2.2 in the 802.3ad standard) */
60 /* Port Variables definitions used by the State Machines (43.4.7 in the
75 /* Port Key definitions
79 * Port key | User key (10 bits) | Speed (5 bits) | Duplex|
118 static int ad_lacpdu_send(struct port *port);
119 static int ad_marker_send(struct port *port, struct bond_marker *marker);
120 static void ad_mux_machine(struct port *port, bool *update_slave_arr);
121 static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port);
122 static void ad_tx_machine(struct port *port);
123 static void ad_periodic_machine(struct port *port);
124 static void ad_port_selection_logic(struct port *port, bool *update_slave_arr);
129 static void ad_initialize_port(struct port *port, int lacp_fast);
130 static void ad_enable_collecting_distributing(struct port *port,
132 static void ad_disable_collecting_distributing(struct port *port,
135 struct port *port);
137 struct port *port);
138 static void ad_update_actor_keys(struct port *port, bool reset);
144 * __get_bond_by_port - get the port's bonding struct
145 * @port: the port we're looking at
147 * Return @port's bonding struct, or %NULL if it can't be found.
149 static inline struct bonding *__get_bond_by_port(struct port *port) in __get_bond_by_port() argument
151 if (port->slave == NULL) in __get_bond_by_port()
154 return bond_get_bond_by_slave(port->slave); in __get_bond_by_port()
165 static inline struct aggregator *__get_first_agg(struct port *port) in __get_first_agg() argument
167 struct bonding *bond = __get_bond_by_port(port); in __get_first_agg()
171 /* If there's no bond for this port, or bond has no slaves */ in __get_first_agg()
196 * __disable_port - disable the port's slave
197 * @port: the port we're looking at
199 static inline void __disable_port(struct port *port) in __disable_port() argument
201 bond_set_slave_inactive_flags(port->slave, BOND_SLAVE_NOTIFY_LATER); in __disable_port()
205 * __enable_port - enable the port's slave, if it's up
206 * @port: the port we're looking at
208 static inline void __enable_port(struct port *port) in __enable_port() argument
210 struct slave *slave = port->slave; in __enable_port()
217 * __port_is_enabled - check if the port's slave is in active state
218 * @port: the port we're looking at
220 static inline int __port_is_enabled(struct port *port) in __port_is_enabled() argument
222 return bond_is_active_slave(port->slave); in __port_is_enabled()
227 * @port: the port we're looking at
231 static inline u32 __get_agg_selection_mode(struct port *port) in __get_agg_selection_mode() argument
233 struct bonding *bond = __get_bond_by_port(port); in __get_agg_selection_mode()
243 * @port: the port we're looking at
245 static inline int __check_agg_selection_timer(struct port *port) in __check_agg_selection_timer() argument
247 struct bonding *bond = __get_bond_by_port(port); in __check_agg_selection_timer()
256 * __get_link_speed - get a port's speed
257 * @port: the port we're looking at
259 * Return @port's speed in 802.3ad enum format. i.e. one of:
275 static u16 __get_link_speed(struct port *port) in __get_link_speed() argument
277 struct slave *slave = port->slave; in __get_link_speed()
344 pr_warn_once("%s: unknown ethtool speed (%d) for port %d (set it to 0)\n", in __get_link_speed()
347 port->actor_port_number); in __get_link_speed()
353 netdev_dbg(slave->bond->dev, "Port %d Received link speed %d update from adapter\n", in __get_link_speed()
354 port->actor_port_number, speed); in __get_link_speed()
359 * __get_duplex - get a port's duplex
360 * @port: the port we're looking at
362 * Return @port's duplex in 802.3ad bitmask format. i.e.:
366 static u8 __get_duplex(struct port *port) in __get_duplex() argument
368 struct slave *slave = port->slave; in __get_duplex()
378 netdev_dbg(slave->bond->dev, "Port %d Received status full duplex update from adapter\n", in __get_duplex()
379 port->actor_port_number); in __get_duplex()
384 netdev_dbg(slave->bond->dev, "Port %d Received status NOT full duplex update from adapter\n", in __get_duplex()
385 port->actor_port_number); in __get_duplex()
392 static void __ad_actor_update_port(struct port *port) in __ad_actor_update_port() argument
394 const struct bonding *bond = bond_get_bond_by_slave(port->slave); in __ad_actor_update_port()
396 port->actor_system = BOND_AD_INFO(bond).system.sys_mac_addr; in __ad_actor_update_port()
397 port->actor_system_priority = BOND_AD_INFO(bond).system.sys_priority; in __ad_actor_update_port()
443 * __choose_matched - update a port's matched variable from a received lacpdu
445 * @port: the port we're looking at
465 static void __choose_matched(struct lacpdu *lacpdu, struct port *port) in __choose_matched() argument
471 if (((ntohs(lacpdu->partner_port) == port->actor_port_number) && in __choose_matched()
472 (ntohs(lacpdu->partner_port_priority) == port->actor_port_priority) && in __choose_matched()
473 MAC_ADDRESS_EQUAL(&(lacpdu->partner_system), &(port->actor_system)) && in __choose_matched()
474 (ntohs(lacpdu->partner_system_priority) == port->actor_system_priority) && in __choose_matched()
475 (ntohs(lacpdu->partner_key) == port->actor_oper_port_key) && in __choose_matched()
476 …((lacpdu->partner_state & AD_STATE_AGGREGATION) == (port->actor_oper_port_state & AD_STATE_AGGREGA… in __choose_matched()
479 port->sm_vars |= AD_PORT_MATCHED; in __choose_matched()
481 port->sm_vars &= ~AD_PORT_MATCHED; in __choose_matched()
488 * @port: the port we're looking at
494 static void __record_pdu(struct lacpdu *lacpdu, struct port *port) in __record_pdu() argument
496 if (lacpdu && port) { in __record_pdu()
497 struct port_params *partner = &port->partner_oper; in __record_pdu()
499 __choose_matched(lacpdu, port); in __record_pdu()
511 port->actor_oper_port_state &= ~AD_STATE_DEFAULTED; in __record_pdu()
514 * and the port is matched in __record_pdu()
516 if ((port->sm_vars & AD_PORT_MATCHED) && in __record_pdu()
519 pr_debug("%s partner sync=1\n", port->slave->dev->name); in __record_pdu()
522 pr_debug("%s partner sync=0\n", port->slave->dev->name); in __record_pdu()
529 * @port: the port we're looking at
535 static void __record_default(struct port *port) in __record_default() argument
537 if (port) { in __record_default()
539 memcpy(&port->partner_oper, &port->partner_admin, in __record_default()
543 port->actor_oper_port_state |= AD_STATE_DEFAULTED; in __record_default()
548 * __update_selected - update a port's Selected variable from a received lacpdu
550 * @port: the port we're looking at
560 static void __update_selected(struct lacpdu *lacpdu, struct port *port) in __update_selected() argument
562 if (lacpdu && port) { in __update_selected()
563 const struct port_params *partner = &port->partner_oper; in __update_selected()
574 port->sm_vars &= ~AD_PORT_SELECTED; in __update_selected()
580 * __update_default_selected - update a port's Selected variable from Partner
581 * @port: the port we're looking at
591 static void __update_default_selected(struct port *port) in __update_default_selected() argument
593 if (port) { in __update_default_selected()
594 const struct port_params *admin = &port->partner_admin; in __update_default_selected()
595 const struct port_params *oper = &port->partner_oper; in __update_default_selected()
607 port->sm_vars &= ~AD_PORT_SELECTED; in __update_default_selected()
613 * __update_ntt - update a port's ntt variable from a received lacpdu
615 * @port: the port we're looking at
624 static void __update_ntt(struct lacpdu *lacpdu, struct port *port) in __update_ntt() argument
626 /* validate lacpdu and port */ in __update_ntt()
627 if (lacpdu && port) { in __update_ntt()
629 * update the port->ntt. in __update_ntt()
631 if ((ntohs(lacpdu->partner_port) != port->actor_port_number) || in __update_ntt()
632 (ntohs(lacpdu->partner_port_priority) != port->actor_port_priority) || in __update_ntt()
633 !MAC_ADDRESS_EQUAL(&(lacpdu->partner_system), &(port->actor_system)) || in __update_ntt()
634 (ntohs(lacpdu->partner_system_priority) != port->actor_system_priority) || in __update_ntt()
635 (ntohs(lacpdu->partner_key) != port->actor_oper_port_key) || in __update_ntt()
636 …((lacpdu->partner_state & AD_STATE_LACP_ACTIVITY) != (port->actor_oper_port_state & AD_STATE_LACP_… in __update_ntt()
637 …((lacpdu->partner_state & AD_STATE_LACP_TIMEOUT) != (port->actor_oper_port_state & AD_STATE_LACP_T… in __update_ntt()
638 …((lacpdu->partner_state & AD_STATE_SYNCHRONIZATION) != (port->actor_oper_port_state & AD_STATE_SYN… in __update_ntt()
639 …((lacpdu->partner_state & AD_STATE_AGGREGATION) != (port->actor_oper_port_state & AD_STATE_AGGREGA… in __update_ntt()
641 port->ntt = true; in __update_ntt()
653 struct port *port; in __agg_ports_are_ready() local
660 for (port = aggregator->lag_ports; in __agg_ports_are_ready()
661 port; in __agg_ports_are_ready()
662 port = port->next_port_in_aggregator) { in __agg_ports_are_ready()
663 if (!(port->sm_vars & AD_PORT_READY_N)) { in __agg_ports_are_ready()
681 struct port *port; in __set_agg_ports_ready() local
683 for (port = aggregator->lag_ports; port; in __set_agg_ports_ready()
684 port = port->next_port_in_aggregator) { in __set_agg_ports_ready()
686 port->sm_vars |= AD_PORT_READY; in __set_agg_ports_ready()
688 port->sm_vars &= ~AD_PORT_READY; in __set_agg_ports_ready()
694 struct port *port; in __agg_active_ports() local
697 for (port = agg->lag_ports; port; in __agg_active_ports()
698 port = port->next_port_in_aggregator) { in __agg_active_ports()
699 if (port->is_enabled) in __agg_active_ports()
787 * __update_lacpdu_from_port - update a port's lacpdu fields
788 * @port: the port we're looking at
790 static inline void __update_lacpdu_from_port(struct port *port) in __update_lacpdu_from_port() argument
792 struct lacpdu *lacpdu = &port->lacpdu; in __update_lacpdu_from_port()
793 const struct port_params *partner = &port->partner_oper; in __update_lacpdu_from_port()
802 lacpdu->actor_system_priority = htons(port->actor_system_priority); in __update_lacpdu_from_port()
803 lacpdu->actor_system = port->actor_system; in __update_lacpdu_from_port()
804 lacpdu->actor_key = htons(port->actor_oper_port_key); in __update_lacpdu_from_port()
805 lacpdu->actor_port_priority = htons(port->actor_port_priority); in __update_lacpdu_from_port()
806 lacpdu->actor_port = htons(port->actor_port_number); in __update_lacpdu_from_port()
807 lacpdu->actor_state = port->actor_oper_port_state; in __update_lacpdu_from_port()
808 pr_debug("update lacpdu: %s, actor port state %x\n", in __update_lacpdu_from_port()
809 port->slave->dev->name, port->actor_oper_port_state); in __update_lacpdu_from_port()
837 * ad_lacpdu_send - send out a lacpdu packet on a given port
838 * @port: the port we're looking at
843 static int ad_lacpdu_send(struct port *port) in ad_lacpdu_send() argument
845 struct slave *slave = port->slave; in ad_lacpdu_send()
869 lacpdu_header->lacpdu = port->lacpdu; in ad_lacpdu_send()
877 * ad_marker_send - send marker information/response on a given port
878 * @port: the port we're looking at
884 static int ad_marker_send(struct port *port, struct bond_marker *marker) in ad_marker_send() argument
886 struct slave *slave = port->slave; in ad_marker_send()
919 * ad_mux_machine - handle a port's mux state machine
920 * @port: the port we're looking at
923 static void ad_mux_machine(struct port *port, bool *update_slave_arr) in ad_mux_machine() argument
930 last_state = port->sm_mux_state; in ad_mux_machine()
932 if (port->sm_vars & AD_PORT_BEGIN) { in ad_mux_machine()
933 port->sm_mux_state = AD_MUX_DETACHED; in ad_mux_machine()
935 switch (port->sm_mux_state) { in ad_mux_machine()
937 if ((port->sm_vars & AD_PORT_SELECTED) in ad_mux_machine()
938 || (port->sm_vars & AD_PORT_STANDBY)) in ad_mux_machine()
940 port->sm_mux_state = AD_MUX_WAITING; in ad_mux_machine()
944 if (!(port->sm_vars & AD_PORT_SELECTED)) { in ad_mux_machine()
945 port->sm_vars &= ~AD_PORT_READY_N; in ad_mux_machine()
951 __set_agg_ports_ready(port->aggregator, __agg_ports_are_ready(port->aggregator)); in ad_mux_machine()
952 port->sm_mux_state = AD_MUX_DETACHED; in ad_mux_machine()
957 if (port->sm_mux_timer_counter in ad_mux_machine()
958 && !(--port->sm_mux_timer_counter)) in ad_mux_machine()
959 port->sm_vars |= AD_PORT_READY_N; in ad_mux_machine()
966 __set_agg_ports_ready(port->aggregator, __agg_ports_are_ready(port->aggregator)); in ad_mux_machine()
968 /* if the wait_while_timer expired, and the port is in ad_mux_machine()
971 if ((port->sm_vars & AD_PORT_READY) in ad_mux_machine()
972 && !port->sm_mux_timer_counter) in ad_mux_machine()
973 port->sm_mux_state = AD_MUX_ATTACHED; in ad_mux_machine()
977 * edable port will take place only after this timer) in ad_mux_machine()
979 if ((port->sm_vars & AD_PORT_SELECTED) && in ad_mux_machine()
980 (port->partner_oper.port_state & AD_STATE_SYNCHRONIZATION) && in ad_mux_machine()
981 !__check_agg_selection_timer(port)) { in ad_mux_machine()
982 if (port->aggregator->is_active) in ad_mux_machine()
983 port->sm_mux_state = in ad_mux_machine()
985 } else if (!(port->sm_vars & AD_PORT_SELECTED) || in ad_mux_machine()
986 (port->sm_vars & AD_PORT_STANDBY)) { in ad_mux_machine()
988 port->sm_vars &= ~AD_PORT_READY_N; in ad_mux_machine()
994 __set_agg_ports_ready(port->aggregator, __agg_ports_are_ready(port->aggregator)); in ad_mux_machine()
995 port->sm_mux_state = AD_MUX_DETACHED; in ad_mux_machine()
996 } else if (port->aggregator->is_active) { in ad_mux_machine()
997 port->actor_oper_port_state |= in ad_mux_machine()
1002 if (!(port->sm_vars & AD_PORT_SELECTED) || in ad_mux_machine()
1003 (port->sm_vars & AD_PORT_STANDBY) || in ad_mux_machine()
1004 !(port->partner_oper.port_state & AD_STATE_SYNCHRONIZATION) || in ad_mux_machine()
1005 !(port->actor_oper_port_state & AD_STATE_SYNCHRONIZATION)) { in ad_mux_machine()
1006 port->sm_mux_state = AD_MUX_ATTACHED; in ad_mux_machine()
1008 /* if port state hasn't changed make in ad_mux_machine()
1010 * port in an active aggregator is enabled in ad_mux_machine()
1012 if (port->aggregator && in ad_mux_machine()
1013 port->aggregator->is_active && in ad_mux_machine()
1014 !__port_is_enabled(port)) { in ad_mux_machine()
1016 __enable_port(port); in ad_mux_machine()
1026 if (port->sm_mux_state != last_state) { in ad_mux_machine()
1027 pr_debug("Mux Machine: Port=%d (%s), Last State=%d, Curr State=%d\n", in ad_mux_machine()
1028 port->actor_port_number, in ad_mux_machine()
1029 port->slave->dev->name, in ad_mux_machine()
1031 port->sm_mux_state); in ad_mux_machine()
1032 switch (port->sm_mux_state) { in ad_mux_machine()
1034 port->actor_oper_port_state &= ~AD_STATE_SYNCHRONIZATION; in ad_mux_machine()
1035 ad_disable_collecting_distributing(port, in ad_mux_machine()
1037 port->actor_oper_port_state &= ~AD_STATE_COLLECTING; in ad_mux_machine()
1038 port->actor_oper_port_state &= ~AD_STATE_DISTRIBUTING; in ad_mux_machine()
1039 port->ntt = true; in ad_mux_machine()
1042 port->sm_mux_timer_counter = __ad_timer_to_ticks(AD_WAIT_WHILE_TIMER, 0); in ad_mux_machine()
1045 if (port->aggregator->is_active) in ad_mux_machine()
1046 port->actor_oper_port_state |= in ad_mux_machine()
1049 port->actor_oper_port_state &= in ad_mux_machine()
1051 port->actor_oper_port_state &= ~AD_STATE_COLLECTING; in ad_mux_machine()
1052 port->actor_oper_port_state &= ~AD_STATE_DISTRIBUTING; in ad_mux_machine()
1053 ad_disable_collecting_distributing(port, in ad_mux_machine()
1055 port->ntt = true; in ad_mux_machine()
1058 port->actor_oper_port_state |= AD_STATE_COLLECTING; in ad_mux_machine()
1059 port->actor_oper_port_state |= AD_STATE_DISTRIBUTING; in ad_mux_machine()
1060 port->actor_oper_port_state |= AD_STATE_SYNCHRONIZATION; in ad_mux_machine()
1061 ad_enable_collecting_distributing(port, in ad_mux_machine()
1063 port->ntt = true; in ad_mux_machine()
1072 * ad_rx_machine - handle a port's rx State Machine
1074 * @port: the port we're looking at
1080 static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port) in ad_rx_machine() argument
1087 last_state = port->sm_rx_state; in ad_rx_machine()
1091 /* first, check if port was reinitialized */ in ad_rx_machine()
1092 if (port->sm_vars & AD_PORT_BEGIN) { in ad_rx_machine()
1093 port->sm_rx_state = AD_RX_INITIALIZE; in ad_rx_machine()
1094 port->sm_vars |= AD_PORT_CHURNED; in ad_rx_machine()
1095 /* check if port is not enabled */ in ad_rx_machine()
1096 } else if (!(port->sm_vars & AD_PORT_BEGIN) && !port->is_enabled) in ad_rx_machine()
1097 port->sm_rx_state = AD_RX_PORT_DISABLED; in ad_rx_machine()
1099 else if (lacpdu && ((port->sm_rx_state == AD_RX_EXPIRED) || in ad_rx_machine()
1100 (port->sm_rx_state == AD_RX_DEFAULTED) || in ad_rx_machine()
1101 (port->sm_rx_state == AD_RX_CURRENT))) { in ad_rx_machine()
1102 if (port->sm_rx_state != AD_RX_CURRENT) in ad_rx_machine()
1103 port->sm_vars |= AD_PORT_CHURNED; in ad_rx_machine()
1104 port->sm_rx_timer_counter = 0; in ad_rx_machine()
1105 port->sm_rx_state = AD_RX_CURRENT; in ad_rx_machine()
1108 if (port->sm_rx_timer_counter && in ad_rx_machine()
1109 !(--port->sm_rx_timer_counter)) { in ad_rx_machine()
1110 switch (port->sm_rx_state) { in ad_rx_machine()
1112 port->sm_rx_state = AD_RX_DEFAULTED; in ad_rx_machine()
1115 port->sm_rx_state = AD_RX_EXPIRED; in ad_rx_machine()
1122 switch (port->sm_rx_state) { in ad_rx_machine()
1124 if (port->is_enabled && in ad_rx_machine()
1125 (port->sm_vars & AD_PORT_LACP_ENABLED)) in ad_rx_machine()
1126 port->sm_rx_state = AD_RX_EXPIRED; in ad_rx_machine()
1127 else if (port->is_enabled in ad_rx_machine()
1128 && ((port->sm_vars in ad_rx_machine()
1130 port->sm_rx_state = AD_RX_LACP_DISABLED; in ad_rx_machine()
1140 if ((port->sm_rx_state != last_state) || (lacpdu)) { in ad_rx_machine()
1141 pr_debug("Rx Machine: Port=%d (%s), Last State=%d, Curr State=%d\n", in ad_rx_machine()
1142 port->actor_port_number, in ad_rx_machine()
1143 port->slave->dev->name, in ad_rx_machine()
1145 port->sm_rx_state); in ad_rx_machine()
1146 switch (port->sm_rx_state) { in ad_rx_machine()
1148 if (!(port->actor_oper_port_key & AD_DUPLEX_KEY_MASKS)) in ad_rx_machine()
1149 port->sm_vars &= ~AD_PORT_LACP_ENABLED; in ad_rx_machine()
1151 port->sm_vars |= AD_PORT_LACP_ENABLED; in ad_rx_machine()
1152 port->sm_vars &= ~AD_PORT_SELECTED; in ad_rx_machine()
1153 __record_default(port); in ad_rx_machine()
1154 port->actor_oper_port_state &= ~AD_STATE_EXPIRED; in ad_rx_machine()
1155 port->sm_rx_state = AD_RX_PORT_DISABLED; in ad_rx_machine()
1159 port->sm_vars &= ~AD_PORT_MATCHED; in ad_rx_machine()
1162 port->sm_vars &= ~AD_PORT_SELECTED; in ad_rx_machine()
1163 __record_default(port); in ad_rx_machine()
1164 port->partner_oper.port_state &= ~AD_STATE_AGGREGATION; in ad_rx_machine()
1165 port->sm_vars |= AD_PORT_MATCHED; in ad_rx_machine()
1166 port->actor_oper_port_state &= ~AD_STATE_EXPIRED; in ad_rx_machine()
1170 * This reset cause to disable this port in the in ad_rx_machine()
1173 * the port. in ad_rx_machine()
1175 port->partner_oper.port_state &= ~AD_STATE_SYNCHRONIZATION; in ad_rx_machine()
1176 port->sm_vars &= ~AD_PORT_MATCHED; in ad_rx_machine()
1177 port->partner_oper.port_state |= AD_STATE_LACP_TIMEOUT; in ad_rx_machine()
1178 port->partner_oper.port_state |= AD_STATE_LACP_ACTIVITY; in ad_rx_machine()
1179 port->sm_rx_timer_counter = __ad_timer_to_ticks(AD_CURRENT_WHILE_TIMER, (u16)(AD_SHORT_TIMEOUT)); in ad_rx_machine()
1180 port->actor_oper_port_state |= AD_STATE_EXPIRED; in ad_rx_machine()
1181 port->sm_vars |= AD_PORT_CHURNED; in ad_rx_machine()
1184 __update_default_selected(port); in ad_rx_machine()
1185 __record_default(port); in ad_rx_machine()
1186 port->sm_vars |= AD_PORT_MATCHED; in ad_rx_machine()
1187 port->actor_oper_port_state &= ~AD_STATE_EXPIRED; in ad_rx_machine()
1192 &(port->actor_system))) { in ad_rx_machine()
1193 netdev_err(port->slave->bond->dev, "An illegal loopback occurred on adapter (%s)\n" in ad_rx_machine()
1195 port->slave->dev->name); in ad_rx_machine()
1198 __update_selected(lacpdu, port); in ad_rx_machine()
1199 __update_ntt(lacpdu, port); in ad_rx_machine()
1200 __record_pdu(lacpdu, port); in ad_rx_machine()
1201 …port->sm_rx_timer_counter = __ad_timer_to_ticks(AD_CURRENT_WHILE_TIMER, (u16)(port->actor_oper_por… in ad_rx_machine()
1202 port->actor_oper_port_state &= ~AD_STATE_EXPIRED; in ad_rx_machine()
1211 * ad_churn_machine - handle port churn's state machine
1212 * @port: the port we're looking at
1215 static void ad_churn_machine(struct port *port) in ad_churn_machine() argument
1217 if (port->sm_vars & AD_PORT_CHURNED) { in ad_churn_machine()
1218 port->sm_vars &= ~AD_PORT_CHURNED; in ad_churn_machine()
1219 port->sm_churn_actor_state = AD_CHURN_MONITOR; in ad_churn_machine()
1220 port->sm_churn_partner_state = AD_CHURN_MONITOR; in ad_churn_machine()
1221 port->sm_churn_actor_timer_counter = in ad_churn_machine()
1223 port->sm_churn_partner_timer_counter = in ad_churn_machine()
1227 if (port->sm_churn_actor_timer_counter && in ad_churn_machine()
1228 !(--port->sm_churn_actor_timer_counter) && in ad_churn_machine()
1229 port->sm_churn_actor_state == AD_CHURN_MONITOR) { in ad_churn_machine()
1230 if (port->actor_oper_port_state & AD_STATE_SYNCHRONIZATION) { in ad_churn_machine()
1231 port->sm_churn_actor_state = AD_NO_CHURN; in ad_churn_machine()
1233 port->churn_actor_count++; in ad_churn_machine()
1234 port->sm_churn_actor_state = AD_CHURN; in ad_churn_machine()
1237 if (port->sm_churn_partner_timer_counter && in ad_churn_machine()
1238 !(--port->sm_churn_partner_timer_counter) && in ad_churn_machine()
1239 port->sm_churn_partner_state == AD_CHURN_MONITOR) { in ad_churn_machine()
1240 if (port->partner_oper.port_state & AD_STATE_SYNCHRONIZATION) { in ad_churn_machine()
1241 port->sm_churn_partner_state = AD_NO_CHURN; in ad_churn_machine()
1243 port->churn_partner_count++; in ad_churn_machine()
1244 port->sm_churn_partner_state = AD_CHURN; in ad_churn_machine()
1250 * ad_tx_machine - handle a port's tx state machine
1251 * @port: the port we're looking at
1253 static void ad_tx_machine(struct port *port) in ad_tx_machine() argument
1258 if (port->sm_tx_timer_counter && !(--port->sm_tx_timer_counter)) { in ad_tx_machine()
1260 if (port->ntt && (port->sm_vars & AD_PORT_LACP_ENABLED)) { in ad_tx_machine()
1261 __update_lacpdu_from_port(port); in ad_tx_machine()
1263 if (ad_lacpdu_send(port) >= 0) { in ad_tx_machine()
1264 pr_debug("Sent LACPDU on port %d\n", in ad_tx_machine()
1265 port->actor_port_number); in ad_tx_machine()
1270 port->ntt = false; in ad_tx_machine()
1276 port->sm_tx_timer_counter = ad_ticks_per_sec/AD_MAX_TX_IN_SECOND; in ad_tx_machine()
1281 * ad_periodic_machine - handle a port's periodic state machine
1282 * @port: the port we're looking at
1286 static void ad_periodic_machine(struct port *port) in ad_periodic_machine() argument
1291 last_state = port->sm_periodic_state; in ad_periodic_machine()
1293 /* check if port was reinitialized */ in ad_periodic_machine()
1294 …if (((port->sm_vars & AD_PORT_BEGIN) || !(port->sm_vars & AD_PORT_LACP_ENABLED) || !port->is_enabl… in ad_periodic_machine()
1295 …(!(port->actor_oper_port_state & AD_STATE_LACP_ACTIVITY) && !(port->partner_oper.port_state & AD_S… in ad_periodic_machine()
1297 port->sm_periodic_state = AD_NO_PERIODIC; in ad_periodic_machine()
1300 else if (port->sm_periodic_timer_counter) { in ad_periodic_machine()
1302 if (!(--port->sm_periodic_timer_counter)) { in ad_periodic_machine()
1304 port->sm_periodic_state = AD_PERIODIC_TX; in ad_periodic_machine()
1309 switch (port->sm_periodic_state) { in ad_periodic_machine()
1311 if (!(port->partner_oper.port_state in ad_periodic_machine()
1313 port->sm_periodic_state = AD_SLOW_PERIODIC; in ad_periodic_machine()
1316 if ((port->partner_oper.port_state & AD_STATE_LACP_TIMEOUT)) { in ad_periodic_machine()
1317 port->sm_periodic_timer_counter = 0; in ad_periodic_machine()
1318 port->sm_periodic_state = AD_PERIODIC_TX; in ad_periodic_machine()
1326 switch (port->sm_periodic_state) { in ad_periodic_machine()
1328 port->sm_periodic_state = AD_FAST_PERIODIC; in ad_periodic_machine()
1331 if (!(port->partner_oper.port_state & in ad_periodic_machine()
1333 port->sm_periodic_state = AD_SLOW_PERIODIC; in ad_periodic_machine()
1335 port->sm_periodic_state = AD_FAST_PERIODIC; in ad_periodic_machine()
1343 if (port->sm_periodic_state != last_state) { in ad_periodic_machine()
1344 pr_debug("Periodic Machine: Port=%d, Last State=%d, Curr State=%d\n", in ad_periodic_machine()
1345 port->actor_port_number, last_state, in ad_periodic_machine()
1346 port->sm_periodic_state); in ad_periodic_machine()
1347 switch (port->sm_periodic_state) { in ad_periodic_machine()
1349 port->sm_periodic_timer_counter = 0; in ad_periodic_machine()
1353 …port->sm_periodic_timer_counter = __ad_timer_to_ticks(AD_PERIODIC_TIMER, (u16)(AD_FAST_PERIODIC_TI… in ad_periodic_machine()
1357 …port->sm_periodic_timer_counter = __ad_timer_to_ticks(AD_PERIODIC_TIMER, (u16)(AD_SLOW_PERIODIC_TI… in ad_periodic_machine()
1360 port->ntt = true; in ad_periodic_machine()
1370 * @port: the port we're looking at
1373 * Select aggregation groups, and assign each port for it's aggregetor. The
1377 static void ad_port_selection_logic(struct port *port, bool *update_slave_arr) in ad_port_selection_logic() argument
1380 struct port *last_port = NULL, *curr_port; in ad_port_selection_logic()
1386 /* if the port is already Selected, do nothing */ in ad_port_selection_logic()
1387 if (port->sm_vars & AD_PORT_SELECTED) in ad_port_selection_logic()
1390 bond = __get_bond_by_port(port); in ad_port_selection_logic()
1392 /* if the port is connected to other aggregator, detach it */ in ad_port_selection_logic()
1393 if (port->aggregator) { in ad_port_selection_logic()
1394 /* detach the port from its former aggregator */ in ad_port_selection_logic()
1395 temp_aggregator = port->aggregator; in ad_port_selection_logic()
1399 if (curr_port == port) { in ad_port_selection_logic()
1401 /* if it is the first port attached to the in ad_port_selection_logic()
1406 port->next_port_in_aggregator; in ad_port_selection_logic()
1408 /* not the first port attached to the in ad_port_selection_logic()
1412 port->next_port_in_aggregator; in ad_port_selection_logic()
1415 /* clear the port's relations to this in ad_port_selection_logic()
1418 port->aggregator = NULL; in ad_port_selection_logic()
1419 port->next_port_in_aggregator = NULL; in ad_port_selection_logic()
1420 port->actor_port_aggregator_identifier = 0; in ad_port_selection_logic()
1422 netdev_dbg(bond->dev, "Port %d left LAG %d\n", in ad_port_selection_logic()
1423 port->actor_port_number, in ad_port_selection_logic()
1434 /* meaning: the port was related to an aggregator in ad_port_selection_logic()
1435 * but was not on the aggregator port list in ad_port_selection_logic()
1437 …net_warn_ratelimited("%s: Warning: Port %d (on %s) was related to aggregator %d but was not on its… in ad_port_selection_logic()
1438 port->slave->bond->dev->name, in ad_port_selection_logic()
1439 port->actor_port_number, in ad_port_selection_logic()
1440 port->slave->dev->name, in ad_port_selection_logic()
1441 port->aggregator->aggregator_identifier); in ad_port_selection_logic()
1444 /* search on all aggregators for a suitable aggregator for this port */ in ad_port_selection_logic()
1455 …if (((aggregator->actor_oper_aggregator_key == port->actor_oper_port_key) && /* if all parameters … in ad_port_selection_logic()
1456 MAC_ADDRESS_EQUAL(&(aggregator->partner_system), &(port->partner_oper.system)) && in ad_port_selection_logic()
1457 (aggregator->partner_system_priority == port->partner_oper.system_priority) && in ad_port_selection_logic()
1458 (aggregator->partner_oper_aggregator_key == port->partner_oper.key) in ad_port_selection_logic()
1460 ((!MAC_ADDRESS_EQUAL(&(port->partner_oper.system), &(null_mac_addr)) && /* partner answers */ in ad_port_selection_logic()
1465 port->aggregator = aggregator; in ad_port_selection_logic()
1466 port->actor_port_aggregator_identifier = in ad_port_selection_logic()
1467 port->aggregator->aggregator_identifier; in ad_port_selection_logic()
1468 port->next_port_in_aggregator = aggregator->lag_ports; in ad_port_selection_logic()
1469 port->aggregator->num_of_ports++; in ad_port_selection_logic()
1470 aggregator->lag_ports = port; in ad_port_selection_logic()
1471 netdev_dbg(bond->dev, "Port %d joined LAG %d(existing LAG)\n", in ad_port_selection_logic()
1472 port->actor_port_number, in ad_port_selection_logic()
1473 port->aggregator->aggregator_identifier); in ad_port_selection_logic()
1475 /* mark this port as selected */ in ad_port_selection_logic()
1476 port->sm_vars |= AD_PORT_SELECTED; in ad_port_selection_logic()
1482 /* the port couldn't find an aggregator - attach it to a new in ad_port_selection_logic()
1487 /* assign port a new aggregator */ in ad_port_selection_logic()
1488 port->aggregator = free_aggregator; in ad_port_selection_logic()
1489 port->actor_port_aggregator_identifier = in ad_port_selection_logic()
1490 port->aggregator->aggregator_identifier; in ad_port_selection_logic()
1493 * if port was responsed from the end-user in ad_port_selection_logic()
1495 if (port->actor_oper_port_key & AD_DUPLEX_KEY_MASKS) in ad_port_selection_logic()
1496 /* if port is full duplex */ in ad_port_selection_logic()
1497 port->aggregator->is_individual = false; in ad_port_selection_logic()
1499 port->aggregator->is_individual = true; in ad_port_selection_logic()
1501 port->aggregator->actor_admin_aggregator_key = in ad_port_selection_logic()
1502 port->actor_admin_port_key; in ad_port_selection_logic()
1503 port->aggregator->actor_oper_aggregator_key = in ad_port_selection_logic()
1504 port->actor_oper_port_key; in ad_port_selection_logic()
1505 port->aggregator->partner_system = in ad_port_selection_logic()
1506 port->partner_oper.system; in ad_port_selection_logic()
1507 port->aggregator->partner_system_priority = in ad_port_selection_logic()
1508 port->partner_oper.system_priority; in ad_port_selection_logic()
1509 port->aggregator->partner_oper_aggregator_key = port->partner_oper.key; in ad_port_selection_logic()
1510 port->aggregator->receive_state = 1; in ad_port_selection_logic()
1511 port->aggregator->transmit_state = 1; in ad_port_selection_logic()
1512 port->aggregator->lag_ports = port; in ad_port_selection_logic()
1513 port->aggregator->num_of_ports++; in ad_port_selection_logic()
1515 /* mark this port as selected */ in ad_port_selection_logic()
1516 port->sm_vars |= AD_PORT_SELECTED; in ad_port_selection_logic()
1518 netdev_dbg(bond->dev, "Port %d joined LAG %d(new LAG)\n", in ad_port_selection_logic()
1519 port->actor_port_number, in ad_port_selection_logic()
1520 port->aggregator->aggregator_identifier); in ad_port_selection_logic()
1522 netdev_err(bond->dev, "Port %d (on %s) did not find a suitable aggregator\n", in ad_port_selection_logic()
1523 port->actor_port_number, port->slave->dev->name); in ad_port_selection_logic()
1530 __set_agg_ports_ready(port->aggregator, in ad_port_selection_logic()
1531 __agg_ports_are_ready(port->aggregator)); in ad_port_selection_logic()
1533 aggregator = __get_first_agg(port); in ad_port_selection_logic()
1536 if (!port->aggregator->is_active) in ad_port_selection_logic()
1537 port->actor_oper_port_state &= ~AD_STATE_SYNCHRONIZATION; in ad_port_selection_logic()
1613 struct port *port = agg->lag_ports; in agg_device_up() local
1615 if (!port) in agg_device_up()
1618 for (port = agg->lag_ports; port; in agg_device_up()
1619 port = port->next_port_in_aggregator) { in agg_device_up()
1620 if (netif_running(port->slave->dev) && in agg_device_up()
1621 netif_carrier_ok(port->slave->dev)) in agg_device_up()
1661 struct port *port; in ad_agg_selection_logic() local
1743 for (port = active->lag_ports; port; in ad_agg_selection_logic()
1744 port = port->next_port_in_aggregator) { in ad_agg_selection_logic()
1745 __disable_port(port); in ad_agg_selection_logic()
1759 for (port = active->lag_ports; port; in ad_agg_selection_logic()
1760 port = port->next_port_in_aggregator) { in ad_agg_selection_logic()
1761 __enable_port(port); in ad_agg_selection_logic()
1810 * ad_initialize_port - initialize a given port's parameters
1814 static void ad_initialize_port(struct port *port, int lacp_fast) in ad_initialize_port() argument
1835 if (port) { in ad_initialize_port()
1836 port->actor_port_priority = 0xff; in ad_initialize_port()
1837 port->actor_port_aggregator_identifier = 0; in ad_initialize_port()
1838 port->ntt = false; in ad_initialize_port()
1839 port->actor_admin_port_state = AD_STATE_AGGREGATION | in ad_initialize_port()
1841 port->actor_oper_port_state = AD_STATE_AGGREGATION | in ad_initialize_port()
1845 port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT; in ad_initialize_port()
1847 memcpy(&port->partner_admin, &tmpl, sizeof(tmpl)); in ad_initialize_port()
1848 memcpy(&port->partner_oper, &tmpl, sizeof(tmpl)); in ad_initialize_port()
1850 port->is_enabled = true; in ad_initialize_port()
1852 port->sm_vars = AD_PORT_BEGIN | AD_PORT_LACP_ENABLED; in ad_initialize_port()
1853 port->sm_rx_state = 0; in ad_initialize_port()
1854 port->sm_rx_timer_counter = 0; in ad_initialize_port()
1855 port->sm_periodic_state = 0; in ad_initialize_port()
1856 port->sm_periodic_timer_counter = 0; in ad_initialize_port()
1857 port->sm_mux_state = 0; in ad_initialize_port()
1858 port->sm_mux_timer_counter = 0; in ad_initialize_port()
1859 port->sm_tx_state = 0; in ad_initialize_port()
1860 port->aggregator = NULL; in ad_initialize_port()
1861 port->next_port_in_aggregator = NULL; in ad_initialize_port()
1862 port->transaction_id = 0; in ad_initialize_port()
1864 port->sm_churn_actor_timer_counter = 0; in ad_initialize_port()
1865 port->sm_churn_actor_state = 0; in ad_initialize_port()
1866 port->churn_actor_count = 0; in ad_initialize_port()
1867 port->sm_churn_partner_timer_counter = 0; in ad_initialize_port()
1868 port->sm_churn_partner_state = 0; in ad_initialize_port()
1869 port->churn_partner_count = 0; in ad_initialize_port()
1871 memcpy(&port->lacpdu, &lacpdu, sizeof(lacpdu)); in ad_initialize_port()
1876 * ad_enable_collecting_distributing - enable a port's transmit/receive
1877 * @port: the port we're looking at
1880 * Enable @port if it's in an active aggregator
1882 static void ad_enable_collecting_distributing(struct port *port, in ad_enable_collecting_distributing() argument
1885 if (port->aggregator->is_active) { in ad_enable_collecting_distributing()
1886 pr_debug("Enabling port %d(LAG %d)\n", in ad_enable_collecting_distributing()
1887 port->actor_port_number, in ad_enable_collecting_distributing()
1888 port->aggregator->aggregator_identifier); in ad_enable_collecting_distributing()
1889 __enable_port(port); in ad_enable_collecting_distributing()
1896 * ad_disable_collecting_distributing - disable a port's transmit/receive
1897 * @port: the port we're looking at
1900 static void ad_disable_collecting_distributing(struct port *port, in ad_disable_collecting_distributing() argument
1903 if (port->aggregator && in ad_disable_collecting_distributing()
1904 !MAC_ADDRESS_EQUAL(&(port->aggregator->partner_system), in ad_disable_collecting_distributing()
1906 pr_debug("Disabling port %d(LAG %d)\n", in ad_disable_collecting_distributing()
1907 port->actor_port_number, in ad_disable_collecting_distributing()
1908 port->aggregator->aggregator_identifier); in ad_disable_collecting_distributing()
1909 __disable_port(port); in ad_disable_collecting_distributing()
1918 * @port: the port we're looking at
1921 struct port *port) in ad_marker_info_received() argument
1931 if (ad_marker_send(port, &marker) >= 0) { in ad_marker_info_received()
1932 pr_debug("Sent Marker Response on port %d\n", in ad_marker_info_received()
1933 port->actor_port_number); in ad_marker_info_received()
1940 * @port: the port we're looking at
1947 struct port *port) in ad_marker_response_received() argument
2006 * bond_3ad_bind_slave - initialize a slave's port
2015 struct port *port; in bond_3ad_bind_slave() local
2019 if (SLAVE_AD_INFO(slave)->port.slave != slave) { in bond_3ad_bind_slave()
2021 /* port initialization */ in bond_3ad_bind_slave()
2022 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_bind_slave()
2024 ad_initialize_port(port, bond->params.lacp_fast); in bond_3ad_bind_slave()
2026 port->slave = slave; in bond_3ad_bind_slave()
2027 port->actor_port_number = SLAVE_AD_INFO(slave)->id; in bond_3ad_bind_slave()
2031 port->actor_admin_port_key = bond->params.ad_user_port_key << 6; in bond_3ad_bind_slave()
2032 ad_update_actor_keys(port, false); in bond_3ad_bind_slave()
2034 __ad_actor_update_port(port); in bond_3ad_bind_slave()
2038 port->sm_tx_timer_counter = ad_ticks_per_sec/AD_MAX_TX_IN_SECOND; in bond_3ad_bind_slave()
2040 __disable_port(port); in bond_3ad_bind_slave()
2056 * bond_3ad_unbind_slave - deinitialize a slave's port
2059 * Search for the aggregator that is related to this port, remove the
2060 * aggregator and assign another aggregator for other port related to it
2061 * (if any), and remove the port.
2065 struct port *port, *prev_port, *temp_port; in bond_3ad_unbind_slave() local
2076 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_unbind_slave()
2078 /* if slave is null, the whole port is not initialized */ in bond_3ad_unbind_slave()
2079 if (!port->slave) { in bond_3ad_unbind_slave()
2080 netdev_warn(bond->dev, "Trying to unbind an uninitialized port on %s\n", in bond_3ad_unbind_slave()
2088 /* Tell the partner that this port is not suitable for aggregation */ in bond_3ad_unbind_slave()
2089 port->actor_oper_port_state &= ~AD_STATE_SYNCHRONIZATION; in bond_3ad_unbind_slave()
2090 port->actor_oper_port_state &= ~AD_STATE_COLLECTING; in bond_3ad_unbind_slave()
2091 port->actor_oper_port_state &= ~AD_STATE_DISTRIBUTING; in bond_3ad_unbind_slave()
2092 port->actor_oper_port_state &= ~AD_STATE_AGGREGATION; in bond_3ad_unbind_slave()
2093 __update_lacpdu_from_port(port); in bond_3ad_unbind_slave()
2094 ad_lacpdu_send(port); in bond_3ad_unbind_slave()
2099 * except the port related to this slave(thats ensure us that in bond_3ad_unbind_slave()
2103 if ((aggregator->lag_ports != port) || in bond_3ad_unbind_slave()
2105 /* find new aggregator for the related port(s) */ in bond_3ad_unbind_slave()
2109 * connected to our port only in bond_3ad_unbind_slave()
2112 ((new_aggregator->lag_ports == port) && in bond_3ad_unbind_slave()
2123 …if ((new_aggregator) && ((!new_aggregator->lag_ports) || ((new_aggregator->lag_ports == port) && !… in bond_3ad_unbind_slave()
2124 netdev_dbg(bond->dev, "Some port(s) related to LAG %d - replacing with LAG %d\n", in bond_3ad_unbind_slave()
2128 if ((new_aggregator->lag_ports == port) && in bond_3ad_unbind_slave()
2158 ad_agg_selection_logic(__get_first_agg(port), in bond_3ad_unbind_slave()
2164 /* in case that the only port related to this in bond_3ad_unbind_slave()
2172 temp_aggregator = __get_first_agg(port); in bond_3ad_unbind_slave()
2180 netdev_dbg(bond->dev, "Unbinding port %d\n", port->actor_port_number); in bond_3ad_unbind_slave()
2182 /* find the aggregator that this port is connected to */ in bond_3ad_unbind_slave()
2186 /* search the port in the aggregator's related ports */ in bond_3ad_unbind_slave()
2190 if (temp_port == port) { in bond_3ad_unbind_slave()
2191 /* the aggregator found - detach the port from in bond_3ad_unbind_slave()
2205 ad_agg_selection_logic(__get_first_agg(port), in bond_3ad_unbind_slave()
2213 port->slave = NULL; in bond_3ad_unbind_slave()
2223 * If an ad_actor setting gets changed we need to update the individual port
2243 struct port *port = &(SLAVE_AD_INFO(slave))->port; in bond_3ad_update_ad_actor_settings() local
2245 __ad_actor_update_port(port); in bond_3ad_update_ad_actor_settings()
2246 port->ntt = true; in bond_3ad_update_ad_actor_settings()
2271 struct port *port; in bond_3ad_state_machine_handler() local
2275 /* Lock to protect data accessed by all (e.g., port->sm_vars) and in bond_3ad_state_machine_handler()
2290 port = slave ? &(SLAVE_AD_INFO(slave)->port) : NULL; in bond_3ad_state_machine_handler()
2293 if (port) { in bond_3ad_state_machine_handler()
2294 if (!port->slave) { in bond_3ad_state_machine_handler()
2295 net_warn_ratelimited("%s: Warning: bond's first port is uninitialized\n", in bond_3ad_state_machine_handler()
2300 aggregator = __get_first_agg(port); in bond_3ad_state_machine_handler()
2306 /* for each port run the state machines */ in bond_3ad_state_machine_handler()
2308 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_state_machine_handler()
2309 if (!port->slave) { in bond_3ad_state_machine_handler()
2310 net_warn_ratelimited("%s: Warning: Found an uninitialized port\n", in bond_3ad_state_machine_handler()
2315 ad_rx_machine(NULL, port); in bond_3ad_state_machine_handler()
2316 ad_periodic_machine(port); in bond_3ad_state_machine_handler()
2317 ad_port_selection_logic(port, &update_slave_arr); in bond_3ad_state_machine_handler()
2318 ad_mux_machine(port, &update_slave_arr); in bond_3ad_state_machine_handler()
2319 ad_tx_machine(port); in bond_3ad_state_machine_handler()
2320 ad_churn_machine(port); in bond_3ad_state_machine_handler()
2323 if (port->sm_vars & AD_PORT_BEGIN) in bond_3ad_state_machine_handler()
2324 port->sm_vars &= ~AD_PORT_BEGIN; in bond_3ad_state_machine_handler()
2360 struct port *port; in bond_3ad_rx_indication() local
2365 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_rx_indication()
2367 if (!port->slave) { in bond_3ad_rx_indication()
2368 net_warn_ratelimited("%s: Warning: port of slave %s is uninitialized\n", in bond_3ad_rx_indication()
2377 "Received LACPDU on port %d slave %s\n", in bond_3ad_rx_indication()
2378 port->actor_port_number, in bond_3ad_rx_indication()
2382 ad_rx_machine(lacpdu, port); in bond_3ad_rx_indication()
2394 netdev_dbg(slave->bond->dev, "Received Marker Information on port %d\n", in bond_3ad_rx_indication()
2395 port->actor_port_number); in bond_3ad_rx_indication()
2396 ad_marker_info_received((struct bond_marker *)lacpdu, port); in bond_3ad_rx_indication()
2400 netdev_dbg(slave->bond->dev, "Received Marker Response on port %d\n", in bond_3ad_rx_indication()
2401 port->actor_port_number); in bond_3ad_rx_indication()
2402 ad_marker_response_received((struct bond_marker *)lacpdu, port); in bond_3ad_rx_indication()
2407 port->actor_port_number); in bond_3ad_rx_indication()
2415 * ad_update_actor_keys - Update the oper / admin keys for a port based on
2418 * @port: the port we'are looking at
2422 * (a) A full duplex port can participate in LACP with partner.
2425 static void ad_update_actor_keys(struct port *port, bool reset) in ad_update_actor_keys() argument
2429 u16 old_oper_key = port->actor_oper_port_key; in ad_update_actor_keys()
2431 port->actor_admin_port_key &= ~(AD_SPEED_KEY_MASKS|AD_DUPLEX_KEY_MASKS); in ad_update_actor_keys()
2433 speed = __get_link_speed(port); in ad_update_actor_keys()
2435 duplex = __get_duplex(port); in ad_update_actor_keys()
2436 port->actor_admin_port_key |= (speed << 1) | duplex; in ad_update_actor_keys()
2438 port->actor_oper_port_key = port->actor_admin_port_key; in ad_update_actor_keys()
2440 if (old_oper_key != port->actor_oper_port_key) { in ad_update_actor_keys()
2441 /* Only 'duplex' port participates in LACP */ in ad_update_actor_keys()
2443 port->sm_vars |= AD_PORT_LACP_ENABLED; in ad_update_actor_keys()
2445 port->sm_vars &= ~AD_PORT_LACP_ENABLED; in ad_update_actor_keys()
2449 netdev_err(port->slave->dev, in ad_update_actor_keys()
2450 "speed changed to 0 for port %s", in ad_update_actor_keys()
2451 port->slave->dev->name); in ad_update_actor_keys()
2454 port->sm_vars |= AD_PORT_BEGIN; in ad_update_actor_keys()
2466 * Handle reselection of aggregator (if needed) for this port.
2470 struct port *port; in bond_3ad_adapter_speed_duplex_changed() local
2472 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_adapter_speed_duplex_changed()
2474 /* if slave is null, the whole port is not initialized */ in bond_3ad_adapter_speed_duplex_changed()
2475 if (!port->slave) { in bond_3ad_adapter_speed_duplex_changed()
2477 "speed/duplex changed for uninitialized port %s\n", in bond_3ad_adapter_speed_duplex_changed()
2483 ad_update_actor_keys(port, false); in bond_3ad_adapter_speed_duplex_changed()
2485 netdev_dbg(slave->bond->dev, "Port %d slave %s changed speed/duplex\n", in bond_3ad_adapter_speed_duplex_changed()
2486 port->actor_port_number, slave->dev->name); in bond_3ad_adapter_speed_duplex_changed()
2494 * Handle reselection of aggregator (if needed) for this port.
2499 struct port *port; in bond_3ad_handle_link_change() local
2502 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_handle_link_change()
2504 /* if slave is null, the whole port is not initialized */ in bond_3ad_handle_link_change()
2505 if (!port->slave) { in bond_3ad_handle_link_change()
2506 netdev_warn(slave->bond->dev, "link status changed for uninitialized port on %s\n", in bond_3ad_handle_link_change()
2520 port->is_enabled = true; in bond_3ad_handle_link_change()
2521 ad_update_actor_keys(port, false); in bond_3ad_handle_link_change()
2524 port->is_enabled = false; in bond_3ad_handle_link_change()
2525 ad_update_actor_keys(port, true); in bond_3ad_handle_link_change()
2527 agg = __get_first_agg(port); in bond_3ad_handle_link_change()
2532 netdev_dbg(slave->bond->dev, "Port %d changed link status to %s\n", in bond_3ad_handle_link_change()
2533 port->actor_port_number, in bond_3ad_handle_link_change()
2601 struct port *port; in __bond_3ad_get_active_agg_info() local
2604 port = &(SLAVE_AD_INFO(slave)->port); in __bond_3ad_get_active_agg_info()
2605 if (port->aggregator && port->aggregator->is_active) { in __bond_3ad_get_active_agg_info()
2606 aggregator = port->aggregator; in __bond_3ad_get_active_agg_info()
2657 * update actor_oper_port_state of each port.
2660 * so we can modify port->actor_oper_port_state,
2665 struct port *port = NULL; in bond_3ad_update_lacp_rate() local
2673 port = &(SLAVE_AD_INFO(slave)->port); in bond_3ad_update_lacp_rate()
2675 port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT; in bond_3ad_update_lacp_rate()
2677 port->actor_oper_port_state &= ~AD_STATE_LACP_TIMEOUT; in bond_3ad_update_lacp_rate()