<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">&lt;<a href="mailto:blp@nicira.com" target="_blank">blp@nicira.com</a>&gt;</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 &lt;<a href="mailto:reid@nicira.com">reid@nicira.com</a>&gt;<br>
Signed-off-by: Ben Pfaff &lt;<a href="mailto:blp@nicira.com">blp@nicira.com</a>&gt;<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: &quot;--may-exist add-port a b1&quot; but b1 is actually attached to bridge b<br>
 ],<br>
@@ -1246,4 +1250,4 @@ AT_CHECK([sed &quot;/|bridge|WARN|/d&quot; ovs-vswitchd.log &gt; 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(&amp;ctx-&gt;options, &quot;--if-exists&quot;);<br>
     bool with_iface = shash_find(&amp;ctx-&gt;options, &quot;--with-iface&quot;) != NULL;<br>
+    const char *target = ctx-&gt;argv[ctx-&gt;argc - 1];<br>
     struct vsctl_port *port;<br>
<br>
     vsctl_context_populate_cache(ctx);<br>
-    if (!with_iface) {<br>
-        port = find_port(ctx, ctx-&gt;argv[ctx-&gt;argc - 1], must_exist);<br>
+    if (find_bridge(ctx, target, false)) {<br>
+        vsctl_fatal(&quot;cannot delete port %s because it is the local port &quot;<br>
+                    &quot;for bridge %s (deleting this port requires deleting &quot;<br>
+                    &quot;the entire bridge)&quot;, target, target);<br>
+    } else if (!with_iface) {<br>
+        port = find_port(ctx, target, must_exist);<br>
     } else {<br>
-        const char *target = ctx-&gt;argv[ctx-&gt;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>