aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding/bond_3ad.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bonding/bond_3ad.h')
-rw-r--r--drivers/net/bonding/bond_3ad.h175
1 files changed, 87 insertions, 88 deletions
diff --git a/drivers/net/bonding/bond_3ad.h b/drivers/net/bonding/bond_3ad.h
index f4dd9592ac62..bb03b1df2f3e 100644
--- a/drivers/net/bonding/bond_3ad.h
+++ b/drivers/net/bonding/bond_3ad.h
@@ -28,7 +28,7 @@
28#include <linux/netdevice.h> 28#include <linux/netdevice.h>
29#include <linux/if_ether.h> 29#include <linux/if_ether.h>
30 30
31// General definitions 31/* General definitions */
32#define PKT_TYPE_LACPDU cpu_to_be16(ETH_P_SLOW) 32#define PKT_TYPE_LACPDU cpu_to_be16(ETH_P_SLOW)
33#define AD_TIMER_INTERVAL 100 /*msec*/ 33#define AD_TIMER_INTERVAL 100 /*msec*/
34 34
@@ -47,54 +47,54 @@ enum {
47 BOND_AD_COUNT = 2, 47 BOND_AD_COUNT = 2,
48}; 48};
49 49
50// rx machine states(43.4.11 in the 802.3ad standard) 50/* rx machine states(43.4.11 in the 802.3ad standard) */
51typedef enum { 51typedef enum {
52 AD_RX_DUMMY, 52 AD_RX_DUMMY,
53 AD_RX_INITIALIZE, // rx Machine 53 AD_RX_INITIALIZE, /* rx Machine */
54 AD_RX_PORT_DISABLED, // rx Machine 54 AD_RX_PORT_DISABLED, /* rx Machine */
55 AD_RX_LACP_DISABLED, // rx Machine 55 AD_RX_LACP_DISABLED, /* rx Machine */
56 AD_RX_EXPIRED, // rx Machine 56 AD_RX_EXPIRED, /* rx Machine */
57 AD_RX_DEFAULTED, // rx Machine 57 AD_RX_DEFAULTED, /* rx Machine */
58 AD_RX_CURRENT // rx Machine 58 AD_RX_CURRENT /* rx Machine */
59} rx_states_t; 59} rx_states_t;
60 60
61// periodic machine states(43.4.12 in the 802.3ad standard) 61/* periodic machine states(43.4.12 in the 802.3ad standard) */
62typedef enum { 62typedef enum {
63 AD_PERIODIC_DUMMY, 63 AD_PERIODIC_DUMMY,
64 AD_NO_PERIODIC, // periodic machine 64 AD_NO_PERIODIC, /* periodic machine */
65 AD_FAST_PERIODIC, // periodic machine 65 AD_FAST_PERIODIC, /* periodic machine */
66 AD_SLOW_PERIODIC, // periodic machine 66 AD_SLOW_PERIODIC, /* periodic machine */
67 AD_PERIODIC_TX // periodic machine 67 AD_PERIODIC_TX /* periodic machine */
68} periodic_states_t; 68} periodic_states_t;
69 69
70// mux machine states(43.4.13 in the 802.3ad standard) 70/* mux machine states(43.4.13 in the 802.3ad standard) */
71typedef enum { 71typedef enum {
72 AD_MUX_DUMMY, 72 AD_MUX_DUMMY,
73 AD_MUX_DETACHED, // mux machine 73 AD_MUX_DETACHED, /* mux machine */
74 AD_MUX_WAITING, // mux machine 74 AD_MUX_WAITING, /* mux machine */
75 AD_MUX_ATTACHED, // mux machine 75 AD_MUX_ATTACHED, /* mux machine */
76 AD_MUX_COLLECTING_DISTRIBUTING // mux machine 76 AD_MUX_COLLECTING_DISTRIBUTING /* mux machine */
77} mux_states_t; 77} mux_states_t;
78 78
79// tx machine states(43.4.15 in the 802.3ad standard) 79/* tx machine states(43.4.15 in the 802.3ad standard) */
80typedef enum { 80typedef enum {
81 AD_TX_DUMMY, 81 AD_TX_DUMMY,
82 AD_TRANSMIT // tx Machine 82 AD_TRANSMIT /* tx Machine */
83} tx_states_t; 83} tx_states_t;
84 84
85// rx indication types 85/* rx indication types */
86typedef enum { 86typedef enum {
87 AD_TYPE_LACPDU = 1, // type lacpdu 87 AD_TYPE_LACPDU = 1, /* type lacpdu */
88 AD_TYPE_MARKER // type marker 88 AD_TYPE_MARKER /* type marker */
89} pdu_type_t; 89} pdu_type_t;
90 90
91// rx marker indication types 91/* rx marker indication types */
92typedef enum { 92typedef enum {
93 AD_MARKER_INFORMATION_SUBTYPE = 1, // marker imformation subtype 93 AD_MARKER_INFORMATION_SUBTYPE = 1, /* marker imformation subtype */
94 AD_MARKER_RESPONSE_SUBTYPE // marker response subtype 94 AD_MARKER_RESPONSE_SUBTYPE /* marker response subtype */
95} bond_marker_subtype_t; 95} bond_marker_subtype_t;
96 96
97// timers types(43.4.9 in the 802.3ad standard) 97/* timers types(43.4.9 in the 802.3ad standard) */
98typedef enum { 98typedef enum {
99 AD_CURRENT_WHILE_TIMER, 99 AD_CURRENT_WHILE_TIMER,
100 AD_ACTOR_CHURN_TIMER, 100 AD_ACTOR_CHURN_TIMER,
@@ -105,35 +105,35 @@ typedef enum {
105 105
106#pragma pack(1) 106#pragma pack(1)
107 107
108// Link Aggregation Control Protocol(LACP) data unit structure(43.4.2.2 in the 802.3ad standard) 108/* Link Aggregation Control Protocol(LACP) data unit structure(43.4.2.2 in the 802.3ad standard) */
109typedef struct lacpdu { 109typedef struct lacpdu {
110 u8 subtype; // = LACP(= 0x01) 110 u8 subtype; /* = LACP(= 0x01) */
111 u8 version_number; 111 u8 version_number;
112 u8 tlv_type_actor_info; // = actor information(type/length/value) 112 u8 tlv_type_actor_info; /* = actor information(type/length/value) */
113 u8 actor_information_length; // = 20 113 u8 actor_information_length; /* = 20 */
114 __be16 actor_system_priority; 114 __be16 actor_system_priority;
115 struct mac_addr actor_system; 115 struct mac_addr actor_system;
116 __be16 actor_key; 116 __be16 actor_key;
117 __be16 actor_port_priority; 117 __be16 actor_port_priority;
118 __be16 actor_port; 118 __be16 actor_port;
119 u8 actor_state; 119 u8 actor_state;
120 u8 reserved_3_1[3]; // = 0 120 u8 reserved_3_1[3]; /* = 0 */
121 u8 tlv_type_partner_info; // = partner information 121 u8 tlv_type_partner_info; /* = partner information */
122 u8 partner_information_length; // = 20 122 u8 partner_information_length; /* = 20 */
123 __be16 partner_system_priority; 123 __be16 partner_system_priority;
124 struct mac_addr partner_system; 124 struct mac_addr partner_system;
125 __be16 partner_key; 125 __be16 partner_key;
126 __be16 partner_port_priority; 126 __be16 partner_port_priority;
127 __be16 partner_port; 127 __be16 partner_port;
128 u8 partner_state; 128 u8 partner_state;
129 u8 reserved_3_2[3]; // = 0 129 u8 reserved_3_2[3]; /* = 0 */
130 u8 tlv_type_collector_info; // = collector information 130 u8 tlv_type_collector_info; /* = collector information */
131 u8 collector_information_length; // = 16 131 u8 collector_information_length;/* = 16 */
132 __be16 collector_max_delay; 132 __be16 collector_max_delay;
133 u8 reserved_12[12]; 133 u8 reserved_12[12];
134 u8 tlv_type_terminator; // = terminator 134 u8 tlv_type_terminator; /* = terminator */
135 u8 terminator_length; // = 0 135 u8 terminator_length; /* = 0 */
136 u8 reserved_50[50]; // = 0 136 u8 reserved_50[50]; /* = 0 */
137} __packed lacpdu_t; 137} __packed lacpdu_t;
138 138
139typedef struct lacpdu_header { 139typedef struct lacpdu_header {
@@ -141,20 +141,20 @@ typedef struct lacpdu_header {
141 struct lacpdu lacpdu; 141 struct lacpdu lacpdu;
142} __packed lacpdu_header_t; 142} __packed lacpdu_header_t;
143 143
144// Marker Protocol Data Unit(PDU) structure(43.5.3.2 in the 802.3ad standard) 144/* Marker Protocol Data Unit(PDU) structure(43.5.3.2 in the 802.3ad standard) */
145typedef struct bond_marker { 145typedef struct bond_marker {
146 u8 subtype; // = 0x02 (marker PDU) 146 u8 subtype; /* = 0x02 (marker PDU) */
147 u8 version_number; // = 0x01 147 u8 version_number; /* = 0x01 */
148 u8 tlv_type; // = 0x01 (marker information) 148 u8 tlv_type; /* = 0x01 (marker information) */
149 // = 0x02 (marker response information) 149 /* = 0x02 (marker response information) */
150 u8 marker_length; // = 0x16 150 u8 marker_length; /* = 0x16 */
151 u16 requester_port; // The number assigned to the port by the requester 151 u16 requester_port; /* The number assigned to the port by the requester */
152 struct mac_addr requester_system; // The requester's system id 152 struct mac_addr requester_system; /* The requester's system id */
153 u32 requester_transaction_id; // The transaction id allocated by the requester, 153 u32 requester_transaction_id; /* The transaction id allocated by the requester, */
154 u16 pad; // = 0 154 u16 pad; /* = 0 */
155 u8 tlv_type_terminator; // = 0x00 155 u8 tlv_type_terminator; /* = 0x00 */
156 u8 terminator_length; // = 0x00 156 u8 terminator_length; /* = 0x00 */
157 u8 reserved_90[90]; // = 0 157 u8 reserved_90[90]; /* = 0 */
158} __packed bond_marker_t; 158} __packed bond_marker_t;
159 159
160typedef struct bond_marker_header { 160typedef struct bond_marker_header {
@@ -173,7 +173,7 @@ struct port;
173#pragma pack(8) 173#pragma pack(8)
174#endif 174#endif
175 175
176// aggregator structure(43.4.5 in the 802.3ad standard) 176/* aggregator structure(43.4.5 in the 802.3ad standard) */
177typedef struct aggregator { 177typedef struct aggregator {
178 struct mac_addr aggregator_mac_address; 178 struct mac_addr aggregator_mac_address;
179 u16 aggregator_identifier; 179 u16 aggregator_identifier;
@@ -183,12 +183,12 @@ typedef struct aggregator {
183 struct mac_addr partner_system; 183 struct mac_addr partner_system;
184 u16 partner_system_priority; 184 u16 partner_system_priority;
185 u16 partner_oper_aggregator_key; 185 u16 partner_oper_aggregator_key;
186 u16 receive_state; // BOOLEAN 186 u16 receive_state; /* BOOLEAN */
187 u16 transmit_state; // BOOLEAN 187 u16 transmit_state; /* BOOLEAN */
188 struct port *lag_ports; 188 struct port *lag_ports;
189 // ****** PRIVATE PARAMETERS ****** 189 /* ****** PRIVATE PARAMETERS ****** */
190 struct slave *slave; // pointer to the bond slave that this aggregator belongs to 190 struct slave *slave; /* pointer to the bond slave that this aggregator belongs to */
191 u16 is_active; // BOOLEAN. Indicates if this aggregator is active 191 u16 is_active; /* BOOLEAN. Indicates if this aggregator is active */
192 u16 num_of_ports; 192 u16 num_of_ports;
193} aggregator_t; 193} aggregator_t;
194 194
@@ -201,12 +201,12 @@ struct port_params {
201 u16 port_state; 201 u16 port_state;
202}; 202};
203 203
204// port structure(43.4.6 in the 802.3ad standard) 204/* port structure(43.4.6 in the 802.3ad standard) */
205typedef struct port { 205typedef struct port {
206 u16 actor_port_number; 206 u16 actor_port_number;
207 u16 actor_port_priority; 207 u16 actor_port_priority;
208 struct mac_addr actor_system; // This parameter is added here although it is not specified in the standard, just for simplification 208 struct mac_addr actor_system; /* This parameter is added here although it is not specified in the standard, just for simplification */
209 u16 actor_system_priority; // This parameter is added here although it is not specified in the standard, just for simplification 209 u16 actor_system_priority; /* This parameter is added here although it is not specified in the standard, just for simplification */
210 u16 actor_port_aggregator_identifier; 210 u16 actor_port_aggregator_identifier;
211 bool ntt; 211 bool ntt;
212 u16 actor_admin_port_key; 212 u16 actor_admin_port_key;
@@ -219,24 +219,24 @@ typedef struct port {
219 219
220 bool is_enabled; 220 bool is_enabled;
221 221
222 // ****** PRIVATE PARAMETERS ****** 222 /* ****** PRIVATE PARAMETERS ****** */
223 u16 sm_vars; // all state machines variables for this port 223 u16 sm_vars; /* all state machines variables for this port */
224 rx_states_t sm_rx_state; // state machine rx state 224 rx_states_t sm_rx_state; /* state machine rx state */
225 u16 sm_rx_timer_counter; // state machine rx timer counter 225 u16 sm_rx_timer_counter; /* state machine rx timer counter */
226 periodic_states_t sm_periodic_state;// state machine periodic state 226 periodic_states_t sm_periodic_state; /* state machine periodic state */
227 u16 sm_periodic_timer_counter; // state machine periodic timer counter 227 u16 sm_periodic_timer_counter; /* state machine periodic timer counter */
228 mux_states_t sm_mux_state; // state machine mux state 228 mux_states_t sm_mux_state; /* state machine mux state */
229 u16 sm_mux_timer_counter; // state machine mux timer counter 229 u16 sm_mux_timer_counter; /* state machine mux timer counter */
230 tx_states_t sm_tx_state; // state machine tx state 230 tx_states_t sm_tx_state; /* state machine tx state */
231 u16 sm_tx_timer_counter; // state machine tx timer counter(allways on - enter to transmit state 3 time per second) 231 u16 sm_tx_timer_counter; /* state machine tx timer counter(allways on - enter to transmit state 3 time per second) */
232 struct slave *slave; // pointer to the bond slave that this port belongs to 232 struct slave *slave; /* pointer to the bond slave that this port belongs to */
233 struct aggregator *aggregator; // pointer to an aggregator that this port related to 233 struct aggregator *aggregator; /* pointer to an aggregator that this port related to */
234 struct port *next_port_in_aggregator; // Next port on the linked list of the parent aggregator 234 struct port *next_port_in_aggregator; /* Next port on the linked list of the parent aggregator */
235 u32 transaction_id; // continuous number for identification of Marker PDU's; 235 u32 transaction_id; /* continuous number for identification of Marker PDU's; */
236 struct lacpdu lacpdu; // the lacpdu that will be sent for this port 236 struct lacpdu lacpdu; /* the lacpdu that will be sent for this port */
237} port_t; 237} port_t;
238 238
239// system structure 239/* system structure */
240struct ad_system { 240struct ad_system {
241 u16 sys_priority; 241 u16 sys_priority;
242 struct mac_addr sys_mac_addr; 242 struct mac_addr sys_mac_addr;
@@ -246,27 +246,26 @@ struct ad_system {
246#pragma pack() 246#pragma pack()
247#endif 247#endif
248 248
249// ================= AD Exported structures to the main bonding code ================== 249/* ========== AD Exported structures to the main bonding code ========== */
250#define BOND_AD_INFO(bond) ((bond)->ad_info) 250#define BOND_AD_INFO(bond) ((bond)->ad_info)
251#define SLAVE_AD_INFO(slave) ((slave)->ad_info) 251#define SLAVE_AD_INFO(slave) ((slave)->ad_info)
252 252
253struct ad_bond_info { 253struct ad_bond_info {
254 struct ad_system system; /* 802.3ad system structure */ 254 struct ad_system system; /* 802.3ad system structure */
255 u32 agg_select_timer; // Timer to select aggregator after all adapter's hand shakes 255 u32 agg_select_timer; /* Timer to select aggregator after all adapter's hand shakes */
256 u16 aggregator_identifier; 256 u16 aggregator_identifier;
257}; 257};
258 258
259struct ad_slave_info { 259struct ad_slave_info {
260 struct aggregator aggregator; // 802.3ad aggregator structure 260 struct aggregator aggregator; /* 802.3ad aggregator structure */
261 struct port port; // 802.3ad port structure 261 struct port port; /* 802.3ad port structure */
262 spinlock_t state_machine_lock; /* mutex state machines vs. 262 spinlock_t state_machine_lock; /* mutex state machines vs. incoming LACPDU */
263 incoming LACPDU */
264 u16 id; 263 u16 id;
265}; 264};
266 265
267// ================= AD Exported functions to the main bonding code ================== 266/* ========== AD Exported functions to the main bonding code ========== */
268void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution); 267void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution);
269void bond_3ad_bind_slave(struct slave *slave); 268void bond_3ad_bind_slave(struct slave *slave);
270void bond_3ad_unbind_slave(struct slave *slave); 269void bond_3ad_unbind_slave(struct slave *slave);
271void bond_3ad_state_machine_handler(struct work_struct *); 270void bond_3ad_state_machine_handler(struct work_struct *);
272void bond_3ad_initiate_agg_selection(struct bonding *bond, int timeout); 271void bond_3ad_initiate_agg_selection(struct bonding *bond, int timeout);
@@ -281,5 +280,5 @@ int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
281 struct slave *slave); 280 struct slave *slave);
282int bond_3ad_set_carrier(struct bonding *bond); 281int bond_3ad_set_carrier(struct bonding *bond);
283void bond_3ad_update_lacp_rate(struct bonding *bond); 282void bond_3ad_update_lacp_rate(struct bonding *bond);
284#endif //__BOND_3AD_H__ 283#endif /* __BOND_3AD_H__ */
285 284