X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=f5918be0332940f12de56c0f8a9ddf0ee86b5415;hb=cdcf42c664eeb6b260693fc182c1782669f7d39e;hp=0e429fd4d2ea191488e078ba5fa4e99649ff386a;hpb=ede2fd6d7876791a16b977174887200df2f64ef4;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 0e429fd4..f5918be0 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,10 @@ port_reconfigure_lacp(struct port *port) { static struct lacp_settings s; struct iface *iface; + uint8_t sysid[ETH_ADDR_LEN]; + const char *sysid_str; + const char *lacp_time; + long long int custom_time; int priority; if (!enable_lacp(port, &s.active)) { @@ -3123,8 +3136,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", @@ -3133,8 +3152,22 @@ port_reconfigure_lacp(struct port *port) ? priority : UINT16_MAX - !list_is_short(&port->ifaces)); - s.fast = !strcmp(get_port_other_config(port->cfg, "lacp-time", "slow"), - "fast"); + s.strict = !strcmp(get_port_other_config(port->cfg, "lacp-strict", + "false"), + "true"); + + lacp_time = get_port_other_config(port->cfg, "lacp-time", "slow"); + custom_time = atoi(lacp_time); + if (!strcmp(lacp_time, "fast")) { + s.lacp_time = LACP_TIME_FAST; + } else if (!strcmp(lacp_time, "slow")) { + s.lacp_time = LACP_TIME_SLOW; + } else if (custom_time > 0) { + s.lacp_time = LACP_TIME_CUSTOM; + s.custom_time = custom_time; + } else { + s.lacp_time = LACP_TIME_SLOW; + } if (!port->lacp) { port->lacp = lacp_create(); @@ -3724,19 +3757,6 @@ vlan_is_mirrored(const struct mirror *m, int vlan) return false; } -static bool -port_trunks_any_mirrored_vlan(const struct mirror *m, const struct port *p) -{ - size_t i; - - for (i = 0; i < m->n_vlans; i++) { - if (port_trunks_vlan(p, m->vlans[i])) { - return true; - } - } - return false; -} - static void mirror_reconfigure_one(struct mirror *m, struct ovsrec_mirror *cfg) { @@ -3821,11 +3841,7 @@ mirror_reconfigure_one(struct mirror *m, struct ovsrec_mirror *cfg) /* Update ports. */ mirror_bit = MIRROR_MASK_C(1) << m->idx; HMAP_FOR_EACH (port, hmap_node, &m->bridge->ports) { - if (sset_contains(&m->src_ports, port->name) - || (m->n_vlans - && (!port->vlan - ? port_trunks_any_mirrored_vlan(m, port) - : vlan_is_mirrored(m, port->vlan)))) { + if (sset_contains(&m->src_ports, port->name)) { port->src_mirrors |= mirror_bit; } else { port->src_mirrors &= ~mirror_bit;