<div dir="ltr">Thanks, that seems like the right amount of information<div><br></div><div style> -Reid</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jun 18, 2013 at 9:02 PM, Ben Pfaff <span dir="ltr"><<a href="mailto:blp@nicira.com" target="_blank">blp@nicira.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Previously, commands like this:<br>
ovs-vsctl add-br br0<br>
ovs-vsctl del-port br0<br>
yielded an error message like:<br>
no port named br0<br>
which is confusing. This commit improves the error message to:<br>
cannot delete port br0 because it is the local port for bridge br0<br>
(deleting this port requires deleting the entire bridge)<br>
<br>
Bug #17994.<br>
Reported-by: Reid Price <<a href="mailto:reid@nicira.com">reid@nicira.com</a>><br>
Signed-off-by: Ben Pfaff <<a href="mailto:blp@nicira.com">blp@nicira.com</a>><br>
---<br>
tests/<a href="http://ovs-vsctl.at" target="_blank">ovs-vsctl.at</a> | 6 +++++-<br>
utilities/ovs-vsctl.c | 10 +++++++---<br>
2 files changed, 12 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/tests/<a href="http://ovs-vsctl.at" target="_blank">ovs-vsctl.at</a> b/tests/<a href="http://ovs-vsctl.at" target="_blank">ovs-vsctl.at</a><br>
index ec08cd4..fa2c3ff 100644<br>
--- a/tests/<a href="http://ovs-vsctl.at" target="_blank">ovs-vsctl.at</a><br>
+++ b/tests/<a href="http://ovs-vsctl.at" target="_blank">ovs-vsctl.at</a><br>
@@ -323,6 +323,10 @@ AT_CHECK([RUN_OVS_VSCTL(<br>
], [], [OVS_VSCTL_CLEANUP])<br>
AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],<br>
[OVS_VSCTL_CLEANUP])<br>
+AT_CHECK([RUN_OVS_VSCTL([del-port a])], [1], [],<br>
+ [ovs-vsctl: cannot delete port a because it is the local port for bridge a (deleting this port requires deleting the entire bridge)<br>
+],<br>
+ [OVS_VSCTL_CLEANUP])<br>
AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],<br>
[ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b<br>
],<br>
@@ -1246,4 +1250,4 @@ AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [],<br>
# Delete the port<br>
AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])<br>
OVS_VSWITCHD_STOP<br>
-AT_CLEANUP<br>
\ No newline at end of file<br>
+AT_CLEANUP<br>
diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c<br>
index 19ab472..2d8c7c7 100644<br>
--- a/utilities/ovs-vsctl.c<br>
+++ b/utilities/ovs-vsctl.c<br>
@@ -2016,13 +2016,17 @@ cmd_del_port(struct vsctl_context *ctx)<br>
{<br>
bool must_exist = !shash_find(&ctx->options, "--if-exists");<br>
bool with_iface = shash_find(&ctx->options, "--with-iface") != NULL;<br>
+ const char *target = ctx->argv[ctx->argc - 1];<br>
struct vsctl_port *port;<br>
<br>
vsctl_context_populate_cache(ctx);<br>
- if (!with_iface) {<br>
- port = find_port(ctx, ctx->argv[ctx->argc - 1], must_exist);<br>
+ if (find_bridge(ctx, target, false)) {<br>
+ vsctl_fatal("cannot delete port %s because it is the local port "<br>
+ "for bridge %s (deleting this port requires deleting "<br>
+ "the entire bridge)", target, target);<br>
+ } else if (!with_iface) {<br>
+ port = find_port(ctx, target, must_exist);<br>
} else {<br>
- const char *target = ctx->argv[ctx->argc - 1];<br>
struct vsctl_iface *iface;<br>
<br>
port = find_port(ctx, target, false);<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.10.4<br>
<br>
</font></span></blockquote></div><br></div>