Delete extermally removed interfaces from bridge compatibility config.
authorJustin Pettit <jpettit@nicira.com>
Fri, 9 Jan 2009 22:12:24 +0000 (14:12 -0800)
committerJustin Pettit <jpettit@nicira.com>
Fri, 9 Jan 2009 22:12:24 +0000 (14:12 -0800)
The bridge compatibility code was not notified when interfaces were
removed from datapaths.  This fixes that.

vswitchd/brcompat.c
vswitchd/brcompat.h
vswitchd/bridge.c

index 75aa5bc2aaf316433a311ead98df597b2c91e98d..6dd5743f749ab6cf94521dccabfdbda0d280e3fa 100644 (file)
@@ -197,17 +197,10 @@ brc_write_config(struct svec *new_cfg)
     return 0;
 }
 
-enum bmc_action {
-    BMC_ADD_DP,
-    BMC_DEL_DP,
-    BMC_ADD_PORT,
-    BMC_DEL_PORT
-};
-
 /* Modify the existing configuration according to 'act'.  The configuration 
  * file will be modified to reflect these changes.  The caller is
  * responsible for causing vswitchd to actually re-read its configuration. */ 
-static void
+void
 brc_modify_config(const char *dp_name, const char *port_name, 
                   enum bmc_action act)
 {
@@ -256,6 +249,8 @@ brc_modify_config(const char *dp_name, const char *port_name,
 
     brc_write_config(&new_cfg);
     svec_destroy(&new_cfg);
+
+    cfg_read();
 }
 
 static int 
@@ -267,7 +262,6 @@ brc_add_dp(const char *dp_name)
 
     brc_modify_config(dp_name, NULL, BMC_ADD_DP);
 
-    cfg_read();
     bridge_reconfigure();
 
     if (!bridge_exists(dp_name)) {
@@ -286,7 +280,6 @@ brc_del_dp(const char *dp_name)
 
     brc_modify_config(dp_name, NULL, BMC_DEL_DP);
 
-    cfg_read();
     bridge_reconfigure();
 
     if (bridge_exists(dp_name)) {
@@ -362,7 +355,6 @@ brc_handle_port_cmd(struct ofpbuf *buffer, bool add)
     }
 
     /* Force vswitchd to reconfigure itself. */
-    cfg_read();
     bridge_reconfigure();
 
     return 0;
index 17dd82c0945b694daabdf9a8573757c75dad9c99..70d282ecac0db4b4b9e6ce44a7e10ac8870d2529 100644 (file)
 #ifndef VSWITCHD_BRCOMPAT_H
 #define VSWITCHD_BRCOMPAT_H 1
 
+
+/* Actions to modify bridge compatibility configuration. */
+enum bmc_action {
+    BMC_ADD_DP,
+    BMC_DEL_DP,
+    BMC_ADD_PORT,
+    BMC_DEL_PORT
+};
+
 void brc_init(const char *);
 void brc_wait(void);
 void brc_run(void);
+void brc_modify_config(const char *dp_name, const char *port_name, 
+                  enum bmc_action act);
 
 #endif /* brcompat.h */
index f7a4672f3b68f01c2f7f770d76cdee0076d5be6e..78a83504252452c5a59ed0bf6a4c0912613a7489 100644 (file)
@@ -40,6 +40,7 @@
 #include <sys/socket.h>
 #include <unistd.h>
 #include "bitmap.h"
+#include "brcompat.h"
 #include "cfg.h"
 #include "dirs.h"
 #include "dpif.h"
@@ -1907,6 +1908,8 @@ phy_port_changed(struct bridge *br, enum ofp_port_reason reason,
                       br->name, port->name);
             port_destroy(port);
         }
+
+        brc_modify_config(br->name, (const char *)opp->name, BMC_DEL_PORT);
         bridge_flush(br);
     } else {
         if (port->n_ifaces > 1) {