ovs-vsctl: Verify VLAN bridge controllers in cmd_get_controller().
authorBen Pfaff <blp@nicira.com>
Tue, 17 Apr 2012 20:50:53 +0000 (13:50 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 19 Apr 2012 19:55:01 +0000 (12:55 -0700)
A VLAN bridge uses its parent's controllers, so checking the controller
should verify the parent's set of controllers.

The change to verify_controllers() isn't necessary; it just deletes
the check for a null 'bridge' because verify_controllers() can no
longer be called with a null 'bridge'.

This fixes a bug, but it is unlikely to ever have caused a real problem for
users.

Found by inspection.

Signed-off-by: Ben Pfaff <blp@nicira.com>
utilities/ovs-vsctl.c

index 567defb18db4b53d264dfb442bb833740aca2c2d..1e04410b676922976b2a7ca4969fa03b2acca852 100644 (file)
@@ -1947,13 +1947,11 @@ cmd_iface_to_br(struct vsctl_context *ctx)
 static void
 verify_controllers(struct ovsrec_bridge *bridge)
 {
-    if (bridge) {
-        size_t i;
+    size_t i;
 
-        ovsrec_bridge_verify_controller(bridge);
-        for (i = 0; i < bridge->n_controller; i++) {
-            ovsrec_controller_verify_target(bridge->controller[i]);
-        }
+    ovsrec_bridge_verify_controller(bridge);
+    for (i = 0; i < bridge->n_controller; i++) {
+        ovsrec_controller_verify_target(bridge->controller[i]);
     }
 }
 
@@ -1975,6 +1973,9 @@ cmd_get_controller(struct vsctl_context *ctx)
 
     get_info(ctx, &info);
     br = find_bridge(&info, ctx->argv[1], true);
+    if (br->parent) {
+        br = br->parent;
+    }
     verify_controllers(br->br_cfg);
 
     /* Print the targets in sorted order for reproducibility. */