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