X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=35267a6c2adea3dd3282c714b27100c1194b3c15;hb=5586445e9945574da85f96976ca650e19b8216c1;hp=6254251b68e72fd78d99ebebded08b0c9ee307d2;hpb=11bbff1b79a97c377021560b8a262af95a0dd1b9;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 6254251b..35267a6c 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -823,7 +823,7 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg) } ofproto_set_sflow(br->ofproto, &oso); - svec_destroy(&oso.targets); + /* Do not destroy oso.targets because it is owned by sflow_cfg. */ } else { ofproto_set_sflow(br->ofproto, NULL); } @@ -1474,7 +1474,13 @@ bridge_reconfigure_one(const struct ovsrec_open_vswitch *ovs_cfg, if (!port) { port = port_create(br, node->name); } + port_reconfigure(port, node->data); + if (!port->n_ifaces) { + VLOG_WARN("bridge %s: port %s has no interfaces, dropping", + br->name, port->name); + port_destroy(port); + } } shash_destroy(&old_ports); shash_destroy(&new_ports); @@ -3604,6 +3610,19 @@ iface_create(struct port *port, const struct ovsrec_interface *if_cfg) iface->netdev = NULL; iface->cfg = if_cfg; + /* Attempt to create the network interface in case it doesn't exist yet. */ + if (!iface_is_internal(port->bridge, iface->name)) { + error = set_up_iface(if_cfg, iface, true); + if (error) { + VLOG_WARN("could not create iface %s: %s", iface->name, + strerror(error)); + + free(iface->name); + free(iface); + return NULL; + } + } + if (port->n_ifaces >= port->allocated_ifaces) { port->ifaces = x2nrealloc(port->ifaces, &port->allocated_ifaces, sizeof *port->ifaces); @@ -3613,16 +3632,6 @@ iface_create(struct port *port, const struct ovsrec_interface *if_cfg) port->bridge->has_bonded_ports = true; } - /* Attempt to create the network interface in case it - * doesn't exist yet. */ - if (!iface_is_internal(port->bridge, iface->name)) { - error = set_up_iface(if_cfg, iface, true); - if (error) { - VLOG_WARN("could not create iface %s: %s", iface->name, - strerror(error)); - } - } - VLOG_DBG("attached network device %s to port %s", iface->name, port->name); bridge_flush(port->bridge);