From abd4a95de3249e2beddcd921e981baa21cc6d7fd Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Fri, 15 Apr 2011 17:03:37 -0700 Subject: [PATCH] bridge: LACP port ID and system ID in database. Extremely advanced users may want fine grained control over the LACP port and system IDs of a bond. This would be extremely unusual for the average user, so this patch puts the configuration parameters in other_config of the relevant tables. --- vswitchd/bridge.c | 31 ++++++++++++++++++++++++------- vswitchd/vswitch.xml | 9 +++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 78c0a09a0..a87e2cc64 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -3099,14 +3099,23 @@ static void iface_reconfigure_lacp(struct iface *iface) { struct lacp_slave_settings s; - int priority; + int priority, portid; + + portid = atoi(get_interface_other_config(iface->cfg, "lacp-port-id", "0")); + priority = atoi(get_interface_other_config(iface->cfg, + "lacp-port-priority", "0")); + + if (portid <= 0 || portid > UINT16_MAX) { + portid = iface->dp_ifidx; + } + + if (priority <= 0 || priority > UINT16_MAX) { + priority = UINT16_MAX; + } s.name = iface->name; - s.id = iface->dp_ifidx; - priority = atoi(get_interface_other_config( - iface->cfg, "lacp-port-priority", "0")); - s.priority = (priority >= 0 && priority <= UINT16_MAX - ? priority : UINT16_MAX); + s.id = portid; + s.priority = priority; lacp_slave_register(iface->port->lacp, iface, &s); } @@ -3115,6 +3124,8 @@ port_reconfigure_lacp(struct port *port) { static struct lacp_settings s; struct iface *iface; + uint8_t sysid[ETH_ADDR_LEN]; + const char *sysid_str; int priority; if (!enable_lacp(port, &s.active)) { @@ -3123,8 +3134,14 @@ port_reconfigure_lacp(struct port *port) return; } + sysid_str = get_port_other_config(port->cfg, "lacp-system-id", NULL); + if (sysid_str && eth_addr_from_string(sysid_str, sysid)) { + memcpy(s.id, sysid, ETH_ADDR_LEN); + } else { + memcpy(s.id, port->bridge->ea, ETH_ADDR_LEN); + } + s.name = port->name; - memcpy(s.id, port->bridge->ea, ETH_ADDR_LEN); /* Prefer bondable links if unspecified. */ priority = atoi(get_port_other_config(port->cfg, "lacp-system-priority", diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index 6031b5a0e..6070a1cd5 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -647,6 +647,10 @@
The number of milliseconds between successive attempts to poll each interface's MII. Only relevant on ports which use miimon to detect failures.
+
lacp-system-id
+
The LACP system ID of this . The system ID + of a LACP bond is used to identify itself to its partners. Must + be a nonzero MAC address.
lacp-system-priority
The LACP system priority of this . In LACP negotiations, link status decisions are made by the system @@ -1266,6 +1270,11 @@ Key-value pairs for rarely used interface features.
+
lacp-port-id
+
The LACP port ID of this . Port IDs are + used in LACP negotiations to identify individual ports + participating in a bond. Must be a number between 1 and + 65535.
lacp-port-priority
The LACP port priority of this . In LACP negotiations s with numerically lower -- 2.43.0