From cc8d12f9364760456c86e92378d529c0dd9aaa66 Mon Sep 17 00:00:00 2001
From: Ethan Jackson
Date: Thu, 5 May 2011 16:52:56 -0700
Subject: [PATCH] lacp: New "lacp-heartbeat" mode.
This commit creates a new heartbeat mode for LACP. This mode
treats LACP as a protocol simply for monitoring link status. It
strips out most of the sanity checks built into the protocol.
Addition of this mode makes "lacp-force-aggregatable" and
"lacp-strict" options obsolete so they are removed.
---
lib/lacp.c | 25 +++++++++++++------------
lib/lacp.h | 3 +--
vswitchd/bridge.c | 8 ++------
vswitchd/vswitch.ovsschema | 4 ++--
vswitchd/vswitch.xml | 13 ++++---------
5 files changed, 22 insertions(+), 31 deletions(-)
diff --git a/lib/lacp.c b/lib/lacp.c
index 87f70bf7..3fe5eff3 100644
--- a/lib/lacp.c
+++ b/lib/lacp.c
@@ -50,10 +50,9 @@ struct lacp {
enum lacp_time lacp_time; /* Fast, Slow or Custom LACP time. */
long long int custom_time; /* LACP_TIME_CUSTOM transmission rate. */
- bool strict; /* True if in strict mode. */
bool negotiated; /* True if LACP negotiations were successful. */
bool update; /* True if lacp_update() needs to be called. */
- bool force_agg; /* Forces LACP_STATE_AGG bit on all slaves. */
+ bool heartbeat; /* LACP heartbeat mode. */
};
struct slave {
@@ -183,16 +182,15 @@ lacp_configure(struct lacp *lacp, const struct lacp_settings *s)
if (!eth_addr_equals(lacp->sys_id, s->id)
|| lacp->sys_priority != s->priority
- || lacp->strict != s->strict) {
+ || lacp->heartbeat != s->heartbeat) {
memcpy(lacp->sys_id, s->id, ETH_ADDR_LEN);
lacp->sys_priority = s->priority;
- lacp->strict = s->strict;
+ lacp->heartbeat = s->heartbeat;
lacp->update = true;
}
lacp->active = s->active;
lacp->lacp_time = s->lacp_time;
- lacp->force_agg = s->force_agg;
lacp->custom_time = MAX(TIME_UPDATE_INTERVAL, s->custom_time);
}
@@ -431,6 +429,13 @@ lacp_update_attached(struct lacp *lacp)
struct lacp_info lead_pri;
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 10);
+ if (lacp->heartbeat) {
+ HMAP_FOR_EACH (slave, node, &lacp->slaves) {
+ slave->attached = slave->status != LACP_DEFAULTED;
+ }
+ return;
+ }
+
lacp->update = false;
lead = NULL;
@@ -471,10 +476,6 @@ lacp_update_attached(struct lacp *lacp)
slave->attached = false;
}
}
- } else if (lacp->strict) {
- HMAP_FOR_EACH (slave, node, &lacp->slaves) {
- slave->attached = false;
- }
}
}
@@ -555,7 +556,7 @@ slave_get_actor(struct slave *slave, struct lacp_info *actor)
state |= LACP_STATE_EXP;
}
- if (lacp->force_agg || hmap_count(&lacp->slaves) > 1) {
+ if (lacp->heartbeat || hmap_count(&lacp->slaves) > 1) {
state |= LACP_STATE_AGG;
}
@@ -715,8 +716,8 @@ lacp_unixctl_show(struct unixctl_conn *conn,
ds_put_format(&ds, "lacp: %s\n", lacp->name);
ds_put_format(&ds, "\tstatus: %s", lacp->active ? "active" : "passive");
- if (lacp->strict) {
- ds_put_cstr(&ds, " strict");
+ if (lacp->heartbeat) {
+ ds_put_cstr(&ds, " heartbeat");
}
if (lacp->negotiated) {
ds_put_cstr(&ds, " negotiated");
diff --git a/lib/lacp.h b/lib/lacp.h
index fb91b4f1..0fb797e8 100644
--- a/lib/lacp.h
+++ b/lib/lacp.h
@@ -88,8 +88,7 @@ struct lacp_settings {
bool active;
enum lacp_time lacp_time;
long long int custom_time;
- bool strict;
- bool force_agg;
+ bool heartbeat;
};
void lacp_init(void);
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 09fc37d0..d883596d 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -3196,12 +3196,8 @@ port_reconfigure_lacp(struct port *port)
? priority
: UINT16_MAX - !list_is_short(&port->ifaces));
- s.strict = !strcmp(get_port_other_config(port->cfg, "lacp-strict",
- "false"),
- "true");
-
- s.force_agg = !strcmp(get_port_other_config(port->cfg,
- "lacp-force-aggregatable",
+ s.heartbeat = !strcmp(get_port_other_config(port->cfg,
+ "lacp-heartbeat",
"false"), "true");
lacp_time = get_port_other_config(port->cfg, "lacp-time", "slow");
diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema
index 56c77ac6..96be69f7 100644
--- a/vswitchd/vswitch.ovsschema
+++ b/vswitchd/vswitch.ovsschema
@@ -1,6 +1,6 @@
{"name": "Open_vSwitch",
- "version": "3.4.1",
- "cksum": "7815264 15276",
+ "version": "3.4.2",
+ "cksum": "976911089 15276",
"tables": {
"Open_vSwitch": {
"columns": {
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index 0f455000..a16c486c 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -678,15 +678,10 @@
something other than fast
or slow
is
not supported by the LACP specification.
- lacp-strict
- When true
, configures this to
- require successful LACP negotiations to enable any slaves.
- Defaults to false
which safely allows LACP to be used
- with switches that do not support the protocol.
- lacp-force-aggregatable
- When true
, forces all slaves managed by this
- to advertise themselves as aggregatable even if
- they normally wouldn't. Defaults to false
.
+ lacp-heartbeat
+ Treats LACP like a simple heartbeat protocol for link state
+ monitoring. Most features of the LACP protocol are disabled when
+ this mode is in use.
--
2.30.2