* [patch 0/9] [RFC] bonding updates for net-next-2.6
@ 2008-12-17 21:28 Holger Eitzenberger
2008-12-17 21:28 ` [patch 1/9] bonding: improve elaborate port_state assignment Holger Eitzenberger
` (9 more replies)
0 siblings, 10 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
Hi Jay,
what follows are some bonding updates to 802.3ad mode. They introduce
the port_params struct as part of the port struct, which helps in handling
the port parameter values in various places.
Hopefully they are usefull to you.
Thanks.
/holger
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 1/9] bonding: improve elaborate port_state assignment
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 2/9] bonding: introduce and use port_params structure Holger Eitzenberger
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-improve-partner-assignment.diff --]
[-- Type: text/plain, Size: 1517 bytes --]
The previous code was just a funny way of assigning both values (they
are both of type u8).
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -491,16 +491,7 @@ static void __record_pdu(struct lacpdu *
port->partner_oper_system = lacpdu->actor_system;
port->partner_oper_system_priority = ntohs(lacpdu->actor_system_priority);
port->partner_oper_key = ntohs(lacpdu->actor_key);
- // zero partener's lase states
- port->partner_oper_port_state = 0;
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_LACP_ACTIVITY);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_LACP_TIMEOUT);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_AGGREGATION);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_SYNCHRONIZATION);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_COLLECTING);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_DISTRIBUTING);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_DEFAULTED);
- port->partner_oper_port_state |= (lacpdu->actor_state & AD_STATE_EXPIRED);
+ port->partner_oper_port_state = lacpdu->actor_state;
// set actor_oper_port_state.defaulted to FALSE
port->actor_oper_port_state &= ~AD_STATE_DEFAULTED;
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 2/9] bonding: introduce and use port_params structure
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
2008-12-17 21:28 ` [patch 1/9] bonding: improve elaborate port_state assignment Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 3/9] bonding: use port_params in __record_pdu() Holger Eitzenberger
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-add-port_params.diff --]
[-- Type: text/plain, Size: 14879 bytes --]
It generally helps to handle those values in various places, using it
might make the code more readable and gives room for other improvements.
The IEEE standard talks about them as "parameter values".
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.h
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.h
+++ bonding-2.6/drivers/net/bonding/bond_3ad.h
@@ -199,6 +199,15 @@ typedef struct aggregator {
u16 num_of_ports;
} aggregator_t;
+struct port_params {
+ struct mac_addr system;
+ u16 system_priority;
+ u16 key;
+ u16 port_number;
+ u16 port_priority;
+ u16 port_state;
+};
+
// port structure(43.4.6 in the 802.3ad standard)
typedef struct port {
u16 actor_port_number;
@@ -211,18 +220,10 @@ typedef struct port {
u16 actor_oper_port_key;
u8 actor_admin_port_state;
u8 actor_oper_port_state;
- struct mac_addr partner_admin_system;
- struct mac_addr partner_oper_system;
- u16 partner_admin_system_priority;
- u16 partner_oper_system_priority;
- u16 partner_admin_key;
- u16 partner_oper_key;
- u16 partner_admin_port_number;
- u16 partner_oper_port_number;
- u16 partner_admin_port_priority;
- u16 partner_oper_port_priority;
- u8 partner_admin_port_state;
- u8 partner_oper_port_state;
+
+ struct port_params partner_admin;
+ struct port_params partner_oper;
+
u16 is_enabled; // BOOLEAN
// ****** PRIVATE PARAMETERS ******
u16 sm_vars; // all state machines variables for this port
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -486,21 +486,21 @@ static void __record_pdu(struct lacpdu *
// validate lacpdu and port
if (lacpdu && port) {
// record the new parameter values for the partner operational
- port->partner_oper_port_number = ntohs(lacpdu->actor_port);
- port->partner_oper_port_priority = ntohs(lacpdu->actor_port_priority);
- port->partner_oper_system = lacpdu->actor_system;
- port->partner_oper_system_priority = ntohs(lacpdu->actor_system_priority);
- port->partner_oper_key = ntohs(lacpdu->actor_key);
- port->partner_oper_port_state = lacpdu->actor_state;
+ port->partner_oper.port_number = ntohs(lacpdu->actor_port);
+ port->partner_oper.port_priority = ntohs(lacpdu->actor_port_priority);
+ port->partner_oper.system = lacpdu->actor_system;
+ port->partner_oper.system_priority = ntohs(lacpdu->actor_system_priority);
+ port->partner_oper.key = ntohs(lacpdu->actor_key);
+ port->partner_oper.port_state = lacpdu->actor_state;
// set actor_oper_port_state.defaulted to FALSE
port->actor_oper_port_state &= ~AD_STATE_DEFAULTED;
// set the partner sync. to on if the partner is sync. and the port is matched
if ((port->sm_vars & AD_PORT_MATCHED) && (lacpdu->actor_state & AD_STATE_SYNCHRONIZATION)) {
- port->partner_oper_port_state |= AD_STATE_SYNCHRONIZATION;
+ port->partner_oper.port_state |= AD_STATE_SYNCHRONIZATION;
} else {
- port->partner_oper_port_state &= ~AD_STATE_SYNCHRONIZATION;
+ port->partner_oper.port_state &= ~AD_STATE_SYNCHRONIZATION;
}
}
}
@@ -518,12 +518,12 @@ static void __record_default(struct port
// validate the port
if (port) {
// record the partner admin parameters
- port->partner_oper_port_number = port->partner_admin_port_number;
- port->partner_oper_port_priority = port->partner_admin_port_priority;
- port->partner_oper_system = port->partner_admin_system;
- port->partner_oper_system_priority = port->partner_admin_system_priority;
- port->partner_oper_key = port->partner_admin_key;
- port->partner_oper_port_state = port->partner_admin_port_state;
+ port->partner_oper.port_number = port->partner_admin.port_number;
+ port->partner_oper.port_priority = port->partner_admin.port_priority;
+ port->partner_oper.system = port->partner_admin.system;
+ port->partner_oper.system_priority = port->partner_admin.system_priority;
+ port->partner_oper.key = port->partner_admin.key;
+ port->partner_oper.port_state = port->partner_admin.port_state;
// set actor_oper_port_state.defaulted to true
port->actor_oper_port_state |= AD_STATE_DEFAULTED;
@@ -548,12 +548,12 @@ static void __update_selected(struct lac
// validate lacpdu and port
if (lacpdu && port) {
// check if any parameter is different
- if ((ntohs(lacpdu->actor_port) != port->partner_oper_port_number) ||
- (ntohs(lacpdu->actor_port_priority) != port->partner_oper_port_priority) ||
- MAC_ADDRESS_COMPARE(&(lacpdu->actor_system), &(port->partner_oper_system)) ||
- (ntohs(lacpdu->actor_system_priority) != port->partner_oper_system_priority) ||
- (ntohs(lacpdu->actor_key) != port->partner_oper_key) ||
- ((lacpdu->actor_state & AD_STATE_AGGREGATION) != (port->partner_oper_port_state & AD_STATE_AGGREGATION))
+ if ((ntohs(lacpdu->actor_port) != port->partner_oper.port_number) ||
+ (ntohs(lacpdu->actor_port_priority) != port->partner_oper.port_priority) ||
+ MAC_ADDRESS_COMPARE(&(lacpdu->actor_system), &(port->partner_oper.system)) ||
+ (ntohs(lacpdu->actor_system_priority) != port->partner_oper.system_priority) ||
+ (ntohs(lacpdu->actor_key) != port->partner_oper.key) ||
+ ((lacpdu->actor_state & AD_STATE_AGGREGATION) != (port->partner_oper.port_state & AD_STATE_AGGREGATION))
) {
// update the state machine Selected variable
port->sm_vars &= ~AD_PORT_SELECTED;
@@ -578,12 +578,12 @@ static void __update_default_selected(st
// validate the port
if (port) {
// check if any parameter is different
- if ((port->partner_admin_port_number != port->partner_oper_port_number) ||
- (port->partner_admin_port_priority != port->partner_oper_port_priority) ||
- MAC_ADDRESS_COMPARE(&(port->partner_admin_system), &(port->partner_oper_system)) ||
- (port->partner_admin_system_priority != port->partner_oper_system_priority) ||
- (port->partner_admin_key != port->partner_oper_key) ||
- ((port->partner_admin_port_state & AD_STATE_AGGREGATION) != (port->partner_oper_port_state & AD_STATE_AGGREGATION))
+ if ((port->partner_admin.port_number != port->partner_oper.port_number) ||
+ (port->partner_admin.port_priority != port->partner_oper.port_priority) ||
+ MAC_ADDRESS_COMPARE(&(port->partner_admin.system), &(port->partner_oper.system)) ||
+ (port->partner_admin.system_priority != port->partner_oper.system_priority) ||
+ (port->partner_admin.key != port->partner_oper.key) ||
+ ((port->partner_admin.port_state & AD_STATE_AGGREGATION) != (port->partner_oper.port_state & AD_STATE_AGGREGATION))
) {
// update the state machine Selected variable
port->sm_vars &= ~AD_PORT_SELECTED;
@@ -819,12 +819,12 @@ static inline void __update_lacpdu_from_
* lacpdu->partner_information_length initialized
*/
- lacpdu->partner_system_priority = htons(port->partner_oper_system_priority);
- lacpdu->partner_system = port->partner_oper_system;
- lacpdu->partner_key = htons(port->partner_oper_key);
- lacpdu->partner_port_priority = htons(port->partner_oper_port_priority);
- lacpdu->partner_port = htons(port->partner_oper_port_number);
- lacpdu->partner_state = port->partner_oper_port_state;
+ lacpdu->partner_system_priority = htons(port->partner_oper.system_priority);
+ lacpdu->partner_system = port->partner_oper.system;
+ lacpdu->partner_key = htons(port->partner_oper.key);
+ lacpdu->partner_port_priority = htons(port->partner_oper.port_priority);
+ lacpdu->partner_port = htons(port->partner_oper.port_number);
+ lacpdu->partner_state = port->partner_oper.port_state;
/* lacpdu->reserved_3_2 initialized
* lacpdu->tlv_type_collector_info initialized
@@ -973,7 +973,7 @@ static void ad_mux_machine(struct port *
break;
case AD_MUX_ATTACHED:
// check also if agg_select_timer expired(so the edable port will take place only after this timer)
- if ((port->sm_vars & AD_PORT_SELECTED) && (port->partner_oper_port_state & AD_STATE_SYNCHRONIZATION) && !__check_agg_selection_timer(port)) {
+ if ((port->sm_vars & AD_PORT_SELECTED) && (port->partner_oper.port_state & AD_STATE_SYNCHRONIZATION) && !__check_agg_selection_timer(port)) {
port->sm_mux_state = AD_MUX_COLLECTING_DISTRIBUTING;// next state
} else if (!(port->sm_vars & AD_PORT_SELECTED) || (port->sm_vars & AD_PORT_STANDBY)) { // if UNSELECTED or STANDBY
port->sm_vars &= ~AD_PORT_READY_N;
@@ -985,7 +985,7 @@ static void ad_mux_machine(struct port *
break;
case AD_MUX_COLLECTING_DISTRIBUTING:
if (!(port->sm_vars & AD_PORT_SELECTED) || (port->sm_vars & AD_PORT_STANDBY) ||
- !(port->partner_oper_port_state & AD_STATE_SYNCHRONIZATION)
+ !(port->partner_oper.port_state & AD_STATE_SYNCHRONIZATION)
) {
port->sm_mux_state = AD_MUX_ATTACHED;// next state
@@ -1129,7 +1129,7 @@ static void ad_rx_machine(struct lacpdu
case AD_RX_LACP_DISABLED:
port->sm_vars &= ~AD_PORT_SELECTED;
__record_default(port);
- port->partner_oper_port_state &= ~AD_STATE_AGGREGATION;
+ port->partner_oper.port_state &= ~AD_STATE_AGGREGATION;
port->sm_vars |= AD_PORT_MATCHED;
port->actor_oper_port_state &= ~AD_STATE_EXPIRED;
break;
@@ -1137,9 +1137,9 @@ static void ad_rx_machine(struct lacpdu
//Reset of the Synchronization flag. (Standard 43.4.12)
//This reset cause to disable this port in the COLLECTING_DISTRIBUTING state of the
//mux machine in case of EXPIRED even if LINK_DOWN didn't arrive for the port.
- port->partner_oper_port_state &= ~AD_STATE_SYNCHRONIZATION;
+ port->partner_oper.port_state &= ~AD_STATE_SYNCHRONIZATION;
port->sm_vars &= ~AD_PORT_MATCHED;
- port->partner_oper_port_state |= AD_SHORT_TIMEOUT;
+ port->partner_oper.port_state |= AD_SHORT_TIMEOUT;
port->sm_rx_timer_counter = __ad_timer_to_ticks(AD_CURRENT_WHILE_TIMER, (u16)(AD_SHORT_TIMEOUT));
port->actor_oper_port_state |= AD_STATE_EXPIRED;
break;
@@ -1219,7 +1219,7 @@ static void ad_periodic_machine(struct p
// check if port was reinitialized
if (((port->sm_vars & AD_PORT_BEGIN) || !(port->sm_vars & AD_PORT_LACP_ENABLED) || !port->is_enabled) ||
- (!(port->actor_oper_port_state & AD_STATE_LACP_ACTIVITY) && !(port->partner_oper_port_state & AD_STATE_LACP_ACTIVITY))
+ (!(port->actor_oper_port_state & AD_STATE_LACP_ACTIVITY) && !(port->partner_oper.port_state & AD_STATE_LACP_ACTIVITY))
) {
port->sm_periodic_state = AD_NO_PERIODIC; // next state
}
@@ -1233,12 +1233,12 @@ static void ad_periodic_machine(struct p
// If not expired, check if there is some new timeout parameter from the partner state
switch (port->sm_periodic_state) {
case AD_FAST_PERIODIC:
- if (!(port->partner_oper_port_state & AD_STATE_LACP_TIMEOUT)) {
+ if (!(port->partner_oper.port_state & AD_STATE_LACP_TIMEOUT)) {
port->sm_periodic_state = AD_SLOW_PERIODIC; // next state
}
break;
case AD_SLOW_PERIODIC:
- if ((port->partner_oper_port_state & AD_STATE_LACP_TIMEOUT)) {
+ if ((port->partner_oper.port_state & AD_STATE_LACP_TIMEOUT)) {
// stop current timer
port->sm_periodic_timer_counter = 0;
port->sm_periodic_state = AD_PERIODIC_TX; // next state
@@ -1254,7 +1254,7 @@ static void ad_periodic_machine(struct p
port->sm_periodic_state = AD_FAST_PERIODIC; // next state
break;
case AD_PERIODIC_TX:
- if (!(port->partner_oper_port_state & AD_STATE_LACP_TIMEOUT)) {
+ if (!(port->partner_oper.port_state & AD_STATE_LACP_TIMEOUT)) {
port->sm_periodic_state = AD_SLOW_PERIODIC; // next state
} else {
port->sm_periodic_state = AD_FAST_PERIODIC; // next state
@@ -1353,11 +1353,11 @@ static void ad_port_selection_logic(stru
}
// check if current aggregator suits us
if (((aggregator->actor_oper_aggregator_key == port->actor_oper_port_key) && // if all parameters match AND
- !MAC_ADDRESS_COMPARE(&(aggregator->partner_system), &(port->partner_oper_system)) &&
- (aggregator->partner_system_priority == port->partner_oper_system_priority) &&
- (aggregator->partner_oper_aggregator_key == port->partner_oper_key)
+ !MAC_ADDRESS_COMPARE(&(aggregator->partner_system), &(port->partner_oper.system)) &&
+ (aggregator->partner_system_priority == port->partner_oper.system_priority) &&
+ (aggregator->partner_oper_aggregator_key == port->partner_oper.key)
) &&
- ((MAC_ADDRESS_COMPARE(&(port->partner_oper_system), &(null_mac_addr)) && // partner answers
+ ((MAC_ADDRESS_COMPARE(&(port->partner_oper.system), &(null_mac_addr)) && // partner answers
!aggregator->is_individual) // but is not individual OR
)
) {
@@ -1393,9 +1393,9 @@ static void ad_port_selection_logic(stru
port->aggregator->actor_admin_aggregator_key = port->actor_admin_port_key;
port->aggregator->actor_oper_aggregator_key = port->actor_oper_port_key;
- port->aggregator->partner_system=port->partner_oper_system;
- port->aggregator->partner_system_priority = port->partner_oper_system_priority;
- port->aggregator->partner_oper_aggregator_key = port->partner_oper_key;
+ port->aggregator->partner_system=port->partner_oper.system;
+ port->aggregator->partner_system_priority = port->partner_oper.system_priority;
+ port->aggregator->partner_oper_aggregator_key = port->partner_oper.key;
port->aggregator->receive_state = 1;
port->aggregator->transmit_state = 1;
port->aggregator->lag_ports = port;
@@ -1695,18 +1695,18 @@ static void ad_initialize_port(struct po
port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT;
}
- port->partner_admin_system = null_mac_addr;
- port->partner_oper_system = null_mac_addr;
- port->partner_admin_system_priority = 0xffff;
- port->partner_oper_system_priority = 0xffff;
- port->partner_admin_key = 1;
- port->partner_oper_key = 1;
- port->partner_admin_port_number = 1;
- port->partner_oper_port_number = 1;
- port->partner_admin_port_priority = 0xff;
- port->partner_oper_port_priority = 0xff;
- port->partner_admin_port_state = 1;
- port->partner_oper_port_state = 1;
+ port->partner_admin.system = null_mac_addr;
+ port->partner_oper.system = null_mac_addr;
+ port->partner_admin.system_priority = 0xffff;
+ port->partner_oper.system_priority = 0xffff;
+ port->partner_admin.key = 1;
+ port->partner_oper.key = 1;
+ port->partner_admin.port_number = 1;
+ port->partner_oper.port_number = 1;
+ port->partner_admin.port_priority = 0xff;
+ port->partner_oper.port_priority = 0xff;
+ port->partner_admin.port_state = 1;
+ port->partner_oper.port_state = 1;
port->is_enabled = 1;
// ****** private parameters ******
port->sm_vars = 0x3;
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 3/9] bonding: use port_params in __record_pdu()
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
2008-12-17 21:28 ` [patch 1/9] bonding: improve elaborate port_state assignment Holger Eitzenberger
2008-12-17 21:28 ` [patch 2/9] bonding: introduce and use port_params structure Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 4/9] bonding: use plain memcpy in __record_default() Holger Eitzenberger
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-__record_pdu-use-partner.diff --]
[-- Type: text/plain, Size: 1973 bytes --]
It helps in maintaining the various partner information values from
the LACPDU. It also removes the pointless comment at the top.
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -483,24 +483,25 @@ static u16 __ad_timer_to_ticks(u16 timer
*/
static void __record_pdu(struct lacpdu *lacpdu, struct port *port)
{
- // validate lacpdu and port
if (lacpdu && port) {
+ struct port_params *partner = &port->partner_oper;
+
// record the new parameter values for the partner operational
- port->partner_oper.port_number = ntohs(lacpdu->actor_port);
- port->partner_oper.port_priority = ntohs(lacpdu->actor_port_priority);
- port->partner_oper.system = lacpdu->actor_system;
- port->partner_oper.system_priority = ntohs(lacpdu->actor_system_priority);
- port->partner_oper.key = ntohs(lacpdu->actor_key);
- port->partner_oper.port_state = lacpdu->actor_state;
+ partner->port_number = ntohs(lacpdu->actor_port);
+ partner->port_priority = ntohs(lacpdu->actor_port_priority);
+ partner->system = lacpdu->actor_system;
+ partner->system_priority = ntohs(lacpdu->actor_system_priority);
+ partner->key = ntohs(lacpdu->actor_key);
+ partner->port_state = lacpdu->actor_state;
// set actor_oper_port_state.defaulted to FALSE
port->actor_oper_port_state &= ~AD_STATE_DEFAULTED;
// set the partner sync. to on if the partner is sync. and the port is matched
if ((port->sm_vars & AD_PORT_MATCHED) && (lacpdu->actor_state & AD_STATE_SYNCHRONIZATION)) {
- port->partner_oper.port_state |= AD_STATE_SYNCHRONIZATION;
+ partner->port_state |= AD_STATE_SYNCHRONIZATION;
} else {
- port->partner_oper.port_state &= ~AD_STATE_SYNCHRONIZATION;
+ partner->port_state &= ~AD_STATE_SYNCHRONIZATION;
}
}
}
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 4/9] bonding: use plain memcpy in __record_default()
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (2 preceding siblings ...)
2008-12-17 21:28 ` [patch 3/9] bonding: use port_params in __record_pdu() Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 5/9] bonding: init port_params from template Holger Eitzenberger
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-__record_default-use-partner.dif --]
[-- Type: text/plain, Size: 1126 bytes --]
Also remove the pointless comment at the top.
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -516,15 +516,10 @@ static void __record_pdu(struct lacpdu *
*/
static void __record_default(struct port *port)
{
- // validate the port
if (port) {
// record the partner admin parameters
- port->partner_oper.port_number = port->partner_admin.port_number;
- port->partner_oper.port_priority = port->partner_admin.port_priority;
- port->partner_oper.system = port->partner_admin.system;
- port->partner_oper.system_priority = port->partner_admin.system_priority;
- port->partner_oper.key = port->partner_admin.key;
- port->partner_oper.port_state = port->partner_admin.port_state;
+ memcpy(&port->partner_oper, &port->partner_admin,
+ sizeof(struct port_params));
// set actor_oper_port_state.defaulted to true
port->actor_oper_port_state |= AD_STATE_DEFAULTED;
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 5/9] bonding: init port_params from template
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (3 preceding siblings ...)
2008-12-17 21:28 ` [patch 4/9] bonding: use plain memcpy in __record_default() Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 6/9] bonding: remove various function declarations Holger Eitzenberger
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-init-port_info-from-template.diff --]
[-- Type: text/plain, Size: 1518 bytes --]
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -1675,6 +1675,14 @@ static void ad_initialize_agg(struct agg
*/
static void ad_initialize_port(struct port *port, int lacp_fast)
{
+ static const struct port_params tmpl = {
+ .system_priority = 0xffff,
+ .key = 1,
+ .port_number = 1,
+ .port_priority = 0xff,
+ .port_state = 1,
+ };
+
if (port) {
port->actor_port_number = 1;
port->actor_port_priority = 0xff;
@@ -1691,18 +1699,9 @@ static void ad_initialize_port(struct po
port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT;
}
- port->partner_admin.system = null_mac_addr;
- port->partner_oper.system = null_mac_addr;
- port->partner_admin.system_priority = 0xffff;
- port->partner_oper.system_priority = 0xffff;
- port->partner_admin.key = 1;
- port->partner_oper.key = 1;
- port->partner_admin.port_number = 1;
- port->partner_oper.port_number = 1;
- port->partner_admin.port_priority = 0xff;
- port->partner_oper.port_priority = 0xff;
- port->partner_admin.port_state = 1;
- port->partner_oper.port_state = 1;
+ memcpy(&port->partner_admin, &tmpl, sizeof(tmpl));
+ memcpy(&port->partner_oper, &tmpl, sizeof(tmpl));
+
port->is_enabled = 1;
// ****** private parameters ******
port->sm_vars = 0x3;
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 6/9] bonding: remove various function declarations
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (4 preceding siblings ...)
2008-12-17 21:28 ` [patch 5/9] bonding: init port_params from template Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 7/9] bonding: use port_params in __update_selected() Holger Eitzenberger
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-remove-unnecessary-declarations.diff --]
[-- Type: text/plain, Size: 1988 bytes --]
They are all defined before used, it's therefore ok to remove
them.
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -95,34 +95,6 @@ static struct mac_addr null_mac_addr = {
static u16 ad_ticks_per_sec;
static const int ad_delta_in_ticks = (AD_TIMER_INTERVAL * HZ) / 1000;
-// ================= 3AD api to bonding and kernel code ==================
-static u16 __get_link_speed(struct port *port);
-static u8 __get_duplex(struct port *port);
-static inline void __initialize_port_locks(struct port *port);
-//conversions
-static u16 __ad_timer_to_ticks(u16 timer_type, u16 Par);
-
-
-// ================= ad code helper functions ==================
-//needed by ad_rx_machine(...)
-static void __record_pdu(struct lacpdu *lacpdu, struct port *port);
-static void __record_default(struct port *port);
-static void __update_selected(struct lacpdu *lacpdu, struct port *port);
-static void __update_default_selected(struct port *port);
-static void __choose_matched(struct lacpdu *lacpdu, struct port *port);
-static void __update_ntt(struct lacpdu *lacpdu, struct port *port);
-
-//needed for ad_mux_machine(..)
-static void __attach_bond_to_agg(struct port *port);
-static void __detach_bond_from_agg(struct port *port);
-static int __agg_ports_are_ready(struct aggregator *aggregator);
-static void __set_agg_ports_ready(struct aggregator *aggregator, int val);
-
-//needed for ad_agg_selection_logic(...)
-static u32 __get_agg_bandwidth(struct aggregator *aggregator);
-static struct aggregator *__get_active_agg(struct aggregator *aggregator);
-
-
// ================= main 802.3ad protocol functions ==================
static int ad_lacpdu_send(struct port *port);
static int ad_marker_send(struct port *port, struct bond_marker *marker);
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 7/9] bonding: use port_params in __update_selected()
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (5 preceding siblings ...)
2008-12-17 21:28 ` [patch 6/9] bonding: remove various function declarations Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 8/9] bonding: use port_params in __update_default_selected() Holger Eitzenberger
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-__update-selected-use-port_params.diff --]
[-- Type: text/plain, Size: 1624 bytes --]
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -513,16 +513,16 @@ static void __record_default(struct port
*/
static void __update_selected(struct lacpdu *lacpdu, struct port *port)
{
- // validate lacpdu and port
if (lacpdu && port) {
+ const struct port_params *partner = &port->partner_oper;
+
// check if any parameter is different
- if ((ntohs(lacpdu->actor_port) != port->partner_oper.port_number) ||
- (ntohs(lacpdu->actor_port_priority) != port->partner_oper.port_priority) ||
- MAC_ADDRESS_COMPARE(&(lacpdu->actor_system), &(port->partner_oper.system)) ||
- (ntohs(lacpdu->actor_system_priority) != port->partner_oper.system_priority) ||
- (ntohs(lacpdu->actor_key) != port->partner_oper.key) ||
- ((lacpdu->actor_state & AD_STATE_AGGREGATION) != (port->partner_oper.port_state & AD_STATE_AGGREGATION))
- ) {
+ if (ntohs(lacpdu->actor_port) != partner->port_number
+ || ntohs(lacpdu->actor_port_priority) != partner->port_priority
+ || MAC_ADDRESS_COMPARE(&lacpdu->actor_system, &partner->system)
+ || ntohs(lacpdu->actor_system_priority) != partner->system_priority
+ || ntohs(lacpdu->actor_key) != partner->key
+ || (lacpdu->actor_state & AD_STATE_AGGREGATION) != (partner->port_state & AD_STATE_AGGREGATION)) {
// update the state machine Selected variable
port->sm_vars &= ~AD_PORT_SELECTED;
}
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 8/9] bonding: use port_params in __update_default_selected()
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (6 preceding siblings ...)
2008-12-17 21:28 ` [patch 7/9] bonding: use port_params in __update_selected() Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-17 21:28 ` [patch 9/9] bonding: use port_params in __update_lacpdu_from_port Holger Eitzenberger
2008-12-18 3:14 ` [patch 0/9] [RFC] bonding updates for net-next-2.6 David Miller
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-__update-default-selected-use-port_params.diff --]
[-- Type: text/plain, Size: 1717 bytes --]
I also removed some of the unneeded braces in the if condition to
improve readability and a little bit of reformatting.
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -543,16 +543,18 @@ static void __update_selected(struct lac
*/
static void __update_default_selected(struct port *port)
{
- // validate the port
if (port) {
+ const struct port_params *admin = &port->partner_admin;
+ const struct port_params *oper = &port->partner_oper;
+
// check if any parameter is different
- if ((port->partner_admin.port_number != port->partner_oper.port_number) ||
- (port->partner_admin.port_priority != port->partner_oper.port_priority) ||
- MAC_ADDRESS_COMPARE(&(port->partner_admin.system), &(port->partner_oper.system)) ||
- (port->partner_admin.system_priority != port->partner_oper.system_priority) ||
- (port->partner_admin.key != port->partner_oper.key) ||
- ((port->partner_admin.port_state & AD_STATE_AGGREGATION) != (port->partner_oper.port_state & AD_STATE_AGGREGATION))
- ) {
+ if (admin->port_number != oper->port_number
+ || admin->port_priority != oper->port_priority
+ || MAC_ADDRESS_COMPARE(&admin->system, &oper->system)
+ || admin->system_priority != oper->system_priority
+ || admin->key != oper->key
+ || (admin->port_state & AD_STATE_AGGREGATION)
+ != (oper->port_state & AD_STATE_AGGREGATION)) {
// update the state machine Selected variable
port->sm_vars &= ~AD_PORT_SELECTED;
}
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* [patch 9/9] bonding: use port_params in __update_lacpdu_from_port
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (7 preceding siblings ...)
2008-12-17 21:28 ` [patch 8/9] bonding: use port_params in __update_default_selected() Holger Eitzenberger
@ 2008-12-17 21:28 ` Holger Eitzenberger
2008-12-18 3:14 ` [patch 0/9] [RFC] bonding updates for net-next-2.6 David Miller
9 siblings, 0 replies; 11+ messages in thread
From: Holger Eitzenberger @ 2008-12-17 21:28 UTC (permalink / raw)
To: Jay Vosburgh; +Cc: davem, netdev
[-- Attachment #1: bonding-3ad-__update_lacpdu_from_port-use-port_params.diff --]
[-- Type: text/plain, Size: 1548 bytes --]
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: bonding-2.6/drivers/net/bonding/bond_3ad.c
===================================================================
--- bonding-2.6.orig/drivers/net/bonding/bond_3ad.c
+++ bonding-2.6/drivers/net/bonding/bond_3ad.c
@@ -769,6 +769,7 @@ static struct aggregator *__get_active_a
static inline void __update_lacpdu_from_port(struct port *port)
{
struct lacpdu *lacpdu = &port->lacpdu;
+ const struct port_params *partner = &port->partner_oper;
/* update current actual Actor parameters */
/* lacpdu->subtype initialized
@@ -789,12 +790,12 @@ static inline void __update_lacpdu_from_
* lacpdu->partner_information_length initialized
*/
- lacpdu->partner_system_priority = htons(port->partner_oper.system_priority);
- lacpdu->partner_system = port->partner_oper.system;
- lacpdu->partner_key = htons(port->partner_oper.key);
- lacpdu->partner_port_priority = htons(port->partner_oper.port_priority);
- lacpdu->partner_port = htons(port->partner_oper.port_number);
- lacpdu->partner_state = port->partner_oper.port_state;
+ lacpdu->partner_system_priority = htons(partner->system_priority);
+ lacpdu->partner_system = partner->system;
+ lacpdu->partner_key = htons(partner->key);
+ lacpdu->partner_port_priority = htons(partner->port_priority);
+ lacpdu->partner_port = htons(partner->port_number);
+ lacpdu->partner_state = partner->port_state;
/* lacpdu->reserved_3_2 initialized
* lacpdu->tlv_type_collector_info initialized
--
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 0/9] [RFC] bonding updates for net-next-2.6
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
` (8 preceding siblings ...)
2008-12-17 21:28 ` [patch 9/9] bonding: use port_params in __update_lacpdu_from_port Holger Eitzenberger
@ 2008-12-18 3:14 ` David Miller
9 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2008-12-18 3:14 UTC (permalink / raw)
To: holger; +Cc: fubar, netdev
From: Holger Eitzenberger <holger@eitzenberger.org>
Date: Wed, 17 Dec 2008 22:28:27 +0100
> what follows are some bonding updates to 802.3ad mode. They
> introduce the port_params struct as part of the port struct, which
> helps in handling the port parameter values in various places.
These cleanups look real nice, applied to net-next-2.6
Thanks Holger.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-12-18 3:14 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-17 21:28 [patch 0/9] [RFC] bonding updates for net-next-2.6 Holger Eitzenberger
2008-12-17 21:28 ` [patch 1/9] bonding: improve elaborate port_state assignment Holger Eitzenberger
2008-12-17 21:28 ` [patch 2/9] bonding: introduce and use port_params structure Holger Eitzenberger
2008-12-17 21:28 ` [patch 3/9] bonding: use port_params in __record_pdu() Holger Eitzenberger
2008-12-17 21:28 ` [patch 4/9] bonding: use plain memcpy in __record_default() Holger Eitzenberger
2008-12-17 21:28 ` [patch 5/9] bonding: init port_params from template Holger Eitzenberger
2008-12-17 21:28 ` [patch 6/9] bonding: remove various function declarations Holger Eitzenberger
2008-12-17 21:28 ` [patch 7/9] bonding: use port_params in __update_selected() Holger Eitzenberger
2008-12-17 21:28 ` [patch 8/9] bonding: use port_params in __update_default_selected() Holger Eitzenberger
2008-12-17 21:28 ` [patch 9/9] bonding: use port_params in __update_lacpdu_from_port Holger Eitzenberger
2008-12-18 3:14 ` [patch 0/9] [RFC] bonding updates for net-next-2.6 David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).