This is the minimal change that gets the job done. There are much nicer
ways to do this, but I'll leave that refactoring for later in the series.
The return value will have its first user in an upcoming commit.
Signed-off-by: Ben Pfaff <blp@nicira.com>
static void mirror_refresh_stats(struct mirror *);
static void iface_configure_lacp(struct iface *, struct lacp_slave_settings *);
static void mirror_refresh_stats(struct mirror *);
static void iface_configure_lacp(struct iface *, struct lacp_slave_settings *);
-static void iface_create(struct bridge *, struct if_cfg *, int ofp_port);
+static bool iface_create(struct bridge *, struct if_cfg *, int ofp_port);
static const char *iface_get_type(const struct ovsrec_interface *,
const struct ovsrec_bridge *);
static void iface_destroy(struct iface *);
static const char *iface_get_type(const struct ovsrec_interface *,
const struct ovsrec_bridge *);
static void iface_destroy(struct iface *);
/* Creates a new iface on 'br' based on 'if_cfg'. The new iface has OpenFlow
* port number 'ofp_port'. If ofp_port is negative, an OpenFlow port is
* automatically allocated for the iface. Takes ownership of and
/* Creates a new iface on 'br' based on 'if_cfg'. The new iface has OpenFlow
* port number 'ofp_port'. If ofp_port is negative, an OpenFlow port is
* automatically allocated for the iface. Takes ownership of and
- * deallocates 'if_cfg'. */
-static void
+ * deallocates 'if_cfg'.
+ *
+ * Return true if an iface is successfully created, false otherwise. */
+static bool
iface_create(struct bridge *br, struct if_cfg *if_cfg, int ofp_port)
{
struct iface *iface;
struct port *port;
int error;
iface_create(struct bridge *br, struct if_cfg *if_cfg, int ofp_port)
{
struct iface *iface;
struct port *port;
int error;
assert(!iface_lookup(br, if_cfg->cfg->name));
assert(!iface_lookup(br, if_cfg->cfg->name));
}
/* Delete the iface if we failed. */
}
/* Delete the iface if we failed. */
- if (iface->netdev && iface->ofp_port >= 0) {
+ ok = iface->netdev && iface->ofp_port >= 0;
+ if (ok) {
VLOG_DBG("bridge %s: interface %s is on port %d",
br->name, iface->name, iface->ofp_port);
} else {
VLOG_DBG("bridge %s: interface %s is on port %d",
br->name, iface->name, iface->ofp_port);
} else {
- if (list_is_empty(&port->ifaces)) {
- port_destroy(port);
- return;
+ if (!ok) {
+ if (list_is_empty(&port->ifaces)) {
+ port_destroy(port);
+ }
+ return false;
}
/* Add bond fake iface if necessary. */
}
/* Add bond fake iface if necessary. */
ofproto_port_destroy(&ofproto_port);
}
}
ofproto_port_destroy(&ofproto_port);
}
}
}
/* Set Flow eviction threshold */
}
/* Set Flow eviction threshold */