vswitch: Don't delete all flows on SIGHUP if a controller is configured.
authorBen Pfaff <blp@nicira.com>
Wed, 11 Mar 2009 22:38:22 +0000 (15:38 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 11 Mar 2009 22:38:28 +0000 (15:38 -0700)
This was intended to only take effect when we had been running standalone
and were now connecting to a controller, but the test was reversed.
Instead of just reversing the test, this change also deletes flows when
we switch from connected to standalone as well.

vswitchd/bridge.c

index e37e6856c9f497ef2bd18224476f688185c65c82..56689b58672d525aa80a2091b7ae9d9d98535003 100644 (file)
@@ -840,6 +840,13 @@ bridge_reconfigure_one(struct bridge *br)
         ctl = controller ? xstrdup(controller) : NULL;
     }
 
+    /* Delete all flows if we're switching from connected to standalone or vice
+     * versa.  (XXX Should we delete all flows if we are switching from one
+     * controller to another?) */
+    if ((br->controller != NULL) != (ctl != NULL)) {
+        ofproto_flush_flows(br->ofproto);
+    }
+
     if (ctl) {
         const char *fail_mode;
 
@@ -918,13 +925,6 @@ bridge_reconfigure_one(struct bridge *br)
         } else {
             ofproto_set_remote_execution(br->ofproto, NULL, NULL);
         }
-
-        if (br->controller) {
-            /* Get rid of our match-everything flow, and all the rest while
-             * we're at it (which should mostly be subflows set up by that
-             * one). */
-            ofproto_flush_flows(br->ofproto);
-        }
     } else {
         union ofp_action action;
         flow_t flow;