From: Ethan Jackson Date: Wed, 26 Oct 2011 18:39:46 +0000 (-0700) Subject: vswitch: Don't update STP on synthetic ports. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06b592bcbe2e5a435589b0ce3d77530756c20572;p=openvswitch vswitch: Don't update STP on synthetic ports. This can cause ovs-vswitchd to crash. Bug #8007. Reported-by: Krishna Miriyala --- diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 3a192350..09696d5a 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -184,6 +184,7 @@ static struct lacp_settings *port_configure_lacp(struct port *, struct lacp_settings *); static void port_configure_bond(struct port *, struct bond_settings *, uint32_t *bond_stable_ids); +static bool port_is_synthetic(const struct port *); static void bridge_configure_mirrors(struct bridge *); static struct mirror *mirror_create(struct bridge *, @@ -1600,6 +1601,10 @@ port_refresh_stp_status(struct port *port) char *keys[4], *values[4]; size_t i; + if (port_is_synthetic(port)) { + return; + } + /* STP doesn't currently support bonds. */ if (!list_is_singleton(&port->ifaces)) { ovsrec_port_set_status(port->cfg, NULL, NULL, 0); @@ -2697,6 +2702,14 @@ port_configure_bond(struct port *port, struct bond_settings *s, netdev_set_miimon_interval(iface->netdev, miimon_interval); } } + +/* Returns true if 'port' is synthetic, that is, if we constructed it locally + * instead of obtaining it from the database. */ +static bool +port_is_synthetic(const struct port *port) +{ + return ovsdb_idl_row_is_synthetic(&port->cfg->header_); +} /* Interface functions. */