<html><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><META name="Author" content="Novell GroupWise WebAccess"><style type="text/css"> 
body p 

        margin: 0px; 
}
</style></head><body style='font-family: Helvetica, Arial, sans-serif; font-size: 13px; '><span> </span><br><div id="GroupWiseSection_1423148693000_lma@suse.com_B118D7016C3D0000BC7D000BCD69755F_" class="GroupWiseMessageBody"><span class="GroupwiseReplyHeader"><span class="GroupwiseReplyHeader">></span>>>> Laine Stump <laine@laine.org> 2015-2-4 下午 17:12 >>><br></span><span class="GroupwiseReplyHeader">></span>On 02/03/2015 11:39 AM, Michal Privoznik wrote:<br><span class="GroupwiseReplyHeader">></span>> On 02.02.2015 15:08, Lin Ma wrote:<br><span class="GroupwiseReplyHeader">></span>>> By checking transient interfaces, It obtains the live information of<br><span class="GroupwiseReplyHeader">></span>>> attached interfaces to see if the bridge is in use.<br><span class="GroupwiseReplyHeader">></span>>><br><span class="GroupwiseReplyHeader">></span>>> Signed-off-by: Lin Ma <lma@suse.com><br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> ---<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>  tools/virsh-interface.c | 25 ++++++++++++++++++++++---<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>  1 file changed, 22 insertions(+), 3 deletions(-)<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>> Technically, this is a v2 to a previous patch (I mildly recall seeing<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>> something like this in the past).<br></lma@suse.com><span class="GroupwiseReplyHeader">></span><br><lma@suse.com><span class="GroupwiseReplyHeader">></span>It looks to be the same patch, just with reference to a private bug<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>report removed, and preceded with the check for net-destroy (since I had<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>said in my response to the original patch that the behavior of<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>iface-unbridge was made to be similar to net-destroy, and that my<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>opinion was that either neither should be changed, or both).<br></lma@suse.com>It seems like that we decided to keep the original net-destroy behaviour, Then<br>let's keep <span class="GroupwiseReplyHeader"></span>iface-unbridge's too.<br><br><lma@suse.com><span class="GroupwiseReplyHeader">></span>><br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> diff --git a/tools/virsh-interface.c b/tools/virsh-interface.c<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> index 5f848b6..ff40be0 100644<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> --- a/tools/virsh-interface.c<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +++ b/tools/virsh-interface.c<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> @@ -1040,11 +1040,11 @@ cmdInterfaceUnbridge(vshControl *ctl, const vshCmd *cmd)<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      const char *br_name;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      char *if_type = NULL, *if_name = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      bool nostart = false;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> -    char *br_xml = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    char *br_xml = NULL, *br_xml_transient_if = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      xmlChar *if_xml = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      int if_xml_size;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> -    xmlDocPtr xml_doc = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> -    xmlXPathContextPtr ctxt = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    xmlDocPtr xml_doc = NULL, xml_doc_transient_if = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    xmlXPathContextPtr ctxt = NULL, ctxt_transient_if = NULL;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      xmlNodePtr top_node, if_node, cur;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>  <br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      /* Get a handle to the original device */<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> @@ -1103,6 +1103,22 @@ cmdInterfaceUnbridge(vshControl *ctl, const vshCmd *cmd)<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>          goto cleanup;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      }<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>  <br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    /* verify whether there is any transient interface attached to bridge. */<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    if (!(br_xml_transient_if = virInterfaceGetXMLDesc(br_handle, 0)))<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +        goto cleanup;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    if (!(xml_doc_transient_if = virXMLParseStringCtxt(br_xml_transient_if,<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +                                                       _("(bridge interface definition)"),<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +                                                       &ctxt_transient_if))) {<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +        vshError(ctl, _("Failed to parse configuration of %s"), br_name);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +        goto cleanup;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    }<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    if (virXPathNode("./bridge/interface[2]", ctxt_transient_if) != NULL) {<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +        vshError(ctl, "%s", _("The bridge is in use by transient interfaces"));<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +        goto cleanup;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    }<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      /* Change the type and name of the outer/master interface to<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>       * the type/name of the attached slave interface.<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>       */<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> @@ -1198,10 +1214,13 @@ cmdInterfaceUnbridge(vshControl *ctl, const vshCmd *cmd)<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>         virInterfaceFree(br_handle);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      VIR_FREE(if_xml);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      VIR_FREE(br_xml);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    VIR_FREE(br_xml_transient_if);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      VIR_FREE(if_type);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      VIR_FREE(if_name);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      xmlXPathFreeContext(ctxt);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    xmlXPathFreeContext(ctxt_transient_if);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      xmlFreeDoc(xml_doc);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>> +    xmlFreeDoc(xml_doc_transient_if);<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>      return ret;<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>  }<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>>  <br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>>><br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>> ACK. I'll merge this tomorrow (unless somebody beats me).<br></lma@suse.com><span class="GroupwiseReplyHeader">></span><br><lma@suse.com><span class="GroupwiseReplyHeader">></span>Please don't push it as is. I think the behavior of iface-unbridge<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>should match whatever is done to net-destroy (if anything). If the<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>change is made, it should be made to both at the same time, and this one<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>should also have a --force option to allow overriding the extra check,<br></lma@suse.com><lma@suse.com><span class="GroupwiseReplyHeader">></span>as patch 2/3 does for net-destroy.<br></lma@suse.com><lma@suse.com>As Daniel points out, destroy is The net-destroy already shows to user that <br>it's a forceful operation, So we don't need a --force option, then iface-unbridge either.<br><br></lma@suse.com></div></body></html>