[ovs-dev] [add-remove 3/7] vswitchd: Create all interfaces at the same time.

Ben Pfaff blp at nicira.com
Tue Sep 28 11:58:37 PDT 2010


It seems inconsistent to create some early, some late.  I hope that
this helps to clarify what is happening.
---
 vswitchd/bridge.c |   28 +++++++++++-----------------
 1 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 622a9fe..357cc2f 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -683,12 +683,21 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg)
                     reconfigure_iface_netdev(iface);
                 }
             } else {
-                /* Need to add to datapath. */
                 bool internal;
                 int error;
 
-                /* Add to datapath. */
+                /* Create interface if it doesn't already exist. */
                 internal = iface_is_internal(br, if_name);
+                if (!internal) {
+                    error = create_iface_netdev(iface);
+                    if (error) {
+                        VLOG_WARN("could not create iface %s: %s", iface->name,
+                                  strerror(error));
+                    }
+                    continue;
+                }
+
+                /* Add to datapath. */
                 error = dpif_port_add(br->dpif, if_name,
                                       internal ? ODP_PORT_INTERNAL : 0, NULL);
                 if (error == EFBIG) {
@@ -3691,7 +3700,6 @@ iface_create(struct port *port, const struct ovsrec_interface *if_cfg)
     struct bridge *br = port->bridge;
     struct iface *iface;
     char *name = if_cfg->name;
-    int error;
 
     iface = xzalloc(sizeof *iface);
     iface->port = port;
@@ -3705,20 +3713,6 @@ iface_create(struct port *port, const struct ovsrec_interface *if_cfg)
 
     shash_add_assert(&br->iface_by_name, iface->name, iface);
 
-    /* Attempt to create the network interface in case it doesn't exist yet. */
-    if (!iface_is_internal(br, iface->name)) {
-        error = create_iface_netdev(iface);
-        if (error) {
-            VLOG_WARN("could not create iface %s: %s", iface->name,
-                      strerror(error));
-
-            shash_find_and_delete_assert(&br->iface_by_name, iface->name);
-            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);
-- 
1.7.1





More information about the dev mailing list