<div dir="ltr">Hi Aline,<div><br></div><div><b>- <span style="font-size:12.8px">Why did you rename the function name to &#39;enableBridgedOptions</span><span style="font-size:12.8px">2</span><span style="font-size:12.8px">&#39; ?</span></b></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">  Sorry, my mistake, I will replace the name of this function.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><br></span></div><div><b><span style="font-size:12.8px">- </span><span style="font-size:12.8px">The VLAN information is associated with a macvtap bridge not with a Linux brigde.</span></b></div><div><b><span style="font-size:12.8px">- </span><span style="font-size:12.8px">We will only add a new option &quot;Linux bridged&quot; which will also list the interface combo box but without the VLAN configuration.</span></b></div><div><b><span style="font-size:12.8px"><br></span></b></div><div><span style="font-size:12.8px">  I followed this specification: <a href="https://github.com/kimchi-project/kimchi/issues/791">https://github.com/kimchi-project/kimchi/issues/791</a>. Maybe I understood something wrong. Should I show de VLAN information for macvtap?</span></div><div><span style="font-size:12.8px"><br></span></div><div><br></div><div><b>- <span style="font-size:12.8px">Please, use: &quot;Linux bridged: Virtual machines are connected through a network bridge&quot;</span></b></div><div><b><span style="font-size:12.8px"><br></span></b></div><div><span style="font-size:12.8px">  Ok, I will do it.</span></div><div><span style="font-size:12.8px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-02-04 11:18 GMT-02:00 Aline Manera <span dir="ltr">&lt;<a href="mailto:alinefm@linux.vnet.ibm.com" target="_blank">alinefm@linux.vnet.ibm.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF"><div><div class="h5">
    <br>
    <br>
    <div>On 02/03/2016 02:41 PM,
      <a href="mailto:peterpnns@gmail.com" target="_blank">peterpnns@gmail.com</a> wrote:<br>
    </div>
    <blockquote type="cite">
      <pre>From: peterpennings <a href="mailto:peterpnns@gmail.com" target="_blank">&lt;peterpnns@gmail.com&gt;</a>

This commit adds the new UI changes for network bridges and enables OVS bridges that where temporary hidden

Signed-off-by: peterpennings <a href="mailto:peterpnns@gmail.com" target="_blank">&lt;peterpnns@gmail.com&gt;</a>
---
 netinfo.py                           |   3 +-
 ui/js/src/kimchi.network.js          |   2 +
 ui/js/src/kimchi.network_add_main.js | 146 ++++++++++++++++++++++-------------
 ui/pages/network-add.html.tmpl       |   3 +-
 4 files changed, 96 insertions(+), 58 deletions(-)

diff --git a/netinfo.py b/netinfo.py
index 2d83466..c00f603 100644
--- a/netinfo.py
+++ b/netinfo.py
@@ -221,8 +221,7 @@ def is_bare_nic(iface):
 #  a slave of bond.
 #  The bridge will not be exposed when all it&#39;s port are tap.
 def all_favored_interfaces():
-    return list(set(aggregated_bridges() + bare_nics() + bondings()) -
-                set(ovs_bridges()))
+    return aggregated_bridges() + bare_nics() + bondings()


 def get_interface_type(iface):
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js
index 923aeb9..96c3fea 100644
--- a/ui/js/src/kimchi.network.js
+++ b/ui/js/src/kimchi.network.js
@@ -17,6 +17,8 @@
  */

 kimchi.NETWORK_TYPE_MACVTAP = &quot;macvtap&quot;;
+kimchi.NETWORK_TYPE_BRIDGED = &quot;bridge&quot;;
+

 kimchi.initNetwork = function() {
     if(wok.tabMode[&#39;network&#39;] === &#39;admin&#39;) {
diff --git a/ui/js/src/kimchi.network_add_main.js b/ui/js/src/kimchi.network_add_main.js
index 76d436f..603a5ee 100644
--- a/ui/js/src/kimchi.network_add_main.js
+++ b/ui/js/src/kimchi.network_add_main.js
@@ -31,20 +31,20 @@ kimchi.startNetworkCreation = function() {
     var network = kimchi.getNetworkDialogValues();
     var data = {
         name : <a href="http://network.name" target="_blank">network.name</a>,
-        connection: network.type
+        connection: network.type,
+        interface: network.interface,
+        vlan_id: network.vlan_id
     };
-    if (network.type === kimchi.NETWORK_TYPE_MACVTAP) {
-        data.connection = &quot;macvtap&quot;;
-        data.interface = network.interface;
-        if ($(&quot;#enableVlan&quot;).prop(&quot;checked&quot;)) {
+
+    if (network.type === kimchi.NETWORK_TYPE_BRIDGED &amp;&amp; $(&quot;#enableVlan&quot;).prop(&quot;checked&quot;)) {
             data.vlan_id = network.vlan_id;
             if (!(data.vlan_id &gt;=1 &amp;&amp; data.vlan_id &lt;= 4094)) {
                 wok.message.error.code(&#39;KCHNET6001E&#39;);
                 errorCallback();
                 return;
             }
-        }
     }
+
     kimchi.createNetwork(data, function(result) {
         network.state = result.state === &quot;active&quot; ? &quot;up&quot; : &quot;down&quot;;
         network.interface = result.interface ? result.interface : i18n[&quot;KCHNET6001M&quot;];
@@ -59,30 +59,8 @@ kimchi.startNetworkCreation = function() {
 };

 kimchi.openNetworkDialog = function(okCallback) {
-        kimchi.getInterfaces(function(result) {
-        var options = [];
-        $selectDestination = $(&#39;#networkDestinationID&#39;);
-        var nics = {};
-        var selectDestinationOptionHTML = &#39;&#39;;
-        for (var i = 0; i &lt; result.length; i++) {
-            options.push({label:result[i].name,value:result[i].name});
-            nics[result[i].name] = result[i];
-            selectDestinationOptionHTML += &#39;&lt;option value=&quot;&#39;+ result[i].name + &#39;&quot;&gt;&#39; + result[i].name + &#39;&lt;/option&gt;&#39;;
-        }
-        $selectDestination.append(selectDestinationOptionHTML);
-        $selectDestination.selectpicker();
-        onChange = function() {
-            if (result.length&gt;0 &amp;&amp; $selectDestination.val() !== &quot;&quot;) {
-                $(&quot;#enableVlan&quot;).prop(&quot;disabled&quot;,false);
-                $(&quot;#networkVlanID&quot;).val(&quot;&quot;);
-            } else {
-                $(&quot;#enableVlan&quot;).prop(&quot;disabled&quot;,true);
-            }
-        };
-        $(&quot;#networkDestinationID&quot;).on(&quot;change&quot;, onChange);
-        kimchi.setDefaultNetworkType(result.length!==0);
-        onChange();
-    });
+    kimchi.loadInterfaces();
+
     $(&quot;#networkFormOk&quot;).on(&quot;click&quot;, function() {
         $(&quot;#networkFormOk&quot;).button(&quot;disable&quot;);
         $(&quot;#networkName&quot;).prop(&quot;readonly&quot;, &quot;readonly<a href="mailto:);@@-98,28+76,10@@kimchi.openNetworkDialog=function(okCallback)%7B%7D);%7D;-kimchi.enableBridgeOptions=function(enable)%7B-$(" target="_blank">&quot;);
@@ -98,28 +76,10 @@ kimchi.openNetworkDialog = function(okCallback) {
     });
 };

-kimchi.enableBridgeOptions = function(enable) {
-    $(&quot;</a>#enableVlan&quot;).prop(&quot;checked&quot;, false);
-    $(&quot;#networkVlanID&quot;).val(&quot;&quot;);
-    if (enable) {
-        $(&#39;#bridgedContent&#39;).slideDown(300);
-        $(&#39;#enableVlan&#39;).prop(&quot;disabled&quot;, false);
-        $(&#39;#networkVlanID&#39;).prop(&quot;disabled&quot;, true);
-    } else {
-        $(&#39;#bridgedContent&#39;).slideUp(300);
-        $(&#39;#enableVlan&#39;).prop(&quot;disabled&quot;, true);
-        $(&#39;#networkVlanID&#39;).prop(&quot;disabled&quot;, true);
-    }
-};
-
-
 kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
-    $(&quot;#networkType&quot;).val(&#39;macvtap&#39;, isInterfaceAvail);
-    $(&quot;#networkType option:contains(&#39;bridged&#39;)&quot;).prop(&quot;disabled&quot;, !isInterfaceAvail);
-    $(&quot;#networkType&quot;).val(&#39;nat&#39;, !isInterfaceAvail);
     $(&quot;#networkType&quot;).selectpicker();
     if (!isInterfaceAvail) {</pre>
    </blockquote>
    <br>
    <blockquote type="cite">
      <pre>-        kimchi.enableBridgeOptions(false);
+        kimchi.enableBridgeOptions2(false);</pre>
    </blockquote>
    <br></div></div>
    Why did you rename the function name to &#39;enableBridgedOptions<b>2</b>&#39;
    ?<span class=""><br>
    <br>
    <blockquote type="cite">
      <pre>         $(&quot;#networkBriDisabledLabel&quot;).removeClass(&#39;hidden&#39;);
     } else {
         if (kimchi.capabilities &amp;&amp; kimchi.capabilities.nm_running) {
@@ -136,7 +96,12 @@ kimchi.getNetworkDialogValues = function() {
     };
     if (network.type === kimchi.NETWORK_TYPE_MACVTAP) {
         network.interface = $(&quot;#networkDestinationID&quot;).val();
-        network.vlan_id = parseInt($(&quot;#networkVlanID&quot;).val());
+    }
+    if (network.type === kimchi.NETWORK_TYPE_BRIDGED) {
+        network.interface = $(&quot;#networkDestinationID&quot;).val();
+        if (network.interface === &#39;nic&#39; || network.interface === &#39;bonding&#39;) {
+            network.vlan_id = parseInt($(&quot;#networkVlanID&quot;).val());
+        }
     }</pre>
    </blockquote>
    <br></span>
    The VLAN information is associated with a macvtap bridge not with a
    Linux brigde.<br>
    <br>
    The current bridged UI (ie, macvtap) needs to keep the same.<br>
    <br>
    We will only add a new option &quot;Linux bridged&quot; which will also list
    the interface combo box but without the VLAN configuration.<div><div class="h5"><br>
    <br>
    <blockquote type="cite">
      <pre>     return network;
 };
@@ -147,14 +112,26 @@ kimchi.setupNetworkFormEvent = function() {
         $(&quot;#networkName&quot;).toggleClass(&quot;invalid-field&quot;, !$(&quot;#networkName&quot;).val().match(/^[^\&quot;\/]+$/));
         kimchi.updateNetworkFormButton();
     });
-    $(&#39;#networkType&#39;).on(&#39;change&#39;, function() {
-        var selectedType = $(this).val();
+
+    $(&#39;#networkType, #networkDestinationID&#39;).on(&#39;change&#39;, function() {
+        var selectedType = $(&quot;#networkType&quot;).val();
+        var selectedDestination = $(&quot;#networkDestinationID&quot;).val();
         if(selectedType ==  &#39;isolated&#39; ||  selectedType ==  &#39;nat&#39;) {
-            kimchi.enableBridgeOptions(false);
-        } else if (selectedType ==  &#39;macvtap&#39;) {
-            kimchi.enableBridgeOptions(true);
+            kimchi.enableBridgeOptions2(false);
+        } else {
+            kimchi.enableBridgeOptions2(true, selectedType, selectedDestination); 
         }
+        
     });
+
+    $(&#39;#networkType&#39;).on(&#39;change&#39;, function() {
+        var selectedType = $(&quot;#networkType&quot;).val();
+        if(selectedType === kimchi.NETWORK_TYPE_MACVTAP) {
+            kimchi.loadInterfaces(new Array(&quot;nic&quot;, &quot;bonding&quot;));
+        } else {
+            kimchi.loadInterfaces();
+        }
+    });    
 };

 kimchi.updateNetworkFormButton = function() {
@@ -164,3 +141,62 @@ kimchi.updateNetworkFormButton = function() {
         $(&quot;#networkFormOk&quot;).button(&quot;enable&quot;);
     }
 };
+
+kimchi.enableBridgeOptions2 = function(enable, networkType, networkDestination) {
+    $(&quot;#enableVlan&quot;).prop(&quot;checked&quot;, false);
+    $(&quot;#networkVlanID&quot;).val(&quot;&quot;);
+    $(&#39;#vlan&#39;).hide(); 
+    if (enable) {
+        $(&#39;#bridgedContent&#39;).slideDown(300);
+        $(&#39;#enableVlan&#39;).prop(&quot;disabled&quot;, false);
+        $(&#39;#networkVlanID&#39;).prop(&quot;disabled&quot;, true);
+        if (networkType === kimchi.NETWORK_TYPE_BRIDGED &amp;&amp; (networkDestination === &#39;nic&#39; || networkDestination === &#39;bonding&#39;)) {
+            $(&#39;#vlan&#39;).show();
+        } 
+    } else {
+        $(&#39;#bridgedContent&#39;).slideUp(300);
+        $(&#39;#enableVlan&#39;).prop(&quot;disabled&quot;, true);
+        $(&#39;#networkVlanID&#39;).prop(&quot;disabled&quot;, true);
+    };
+    
+};
+
+kimchi.loadInterfaces = function(interfaceFilterArray) {
+   kimchi.getInterfaces(function(result) {
+
+        var options = [];
+        $selectDestination = $(&#39;#networkDestinationID&#39;);
+        var nics = {};
+        $(&#39;#networkDestinationID&#39;).find(&#39;option&#39;).remove();
+        var selectDestinationOptionHTML = &#39;&#39;;
+        for (var i = 0; i &lt; result.length; i++) {
+            if (typeof interfaceFilterArray === &#39;undefined&#39;) {
+                options.push({label:result[i].name,value:result[i].name});
+                nics[result[i].name] = result[i];
+                selectDestinationOptionHTML += &#39;&lt;option value=&quot;&#39;+ result[i].name + &#39;&quot;&gt;&#39; + result[i].name + &#39;&lt;/option&gt;&#39;;
+            } else {
+                for (var k = 0; k &lt; interfaceFilterArray.length; k++) {
+                    if (result[i].type == interfaceFilterArray[k]) {
+                        options.push({label:result[i].name,value:result[i].name});
+                        nics[result[i].name] = result[i];
+                        selectDestinationOptionHTML += &#39;&lt;option value=&quot;&#39;+ result[i].name + &#39;&quot;&gt;&#39; + result[i].name + &#39;&lt;/option&gt;&#39;;
+                    }
+                }
+            }
+
+        }
+        $selectDestination.append(selectDestinationOptionHTML);
+        $(&#39;#networkDestinationID&#39;).selectpicker(&#39;refresh&#39;); 
+        onChange = function() {
+            if (result.length&gt;0 &amp;&amp; $selectDestination.val() !== &quot;&quot;) {
+                $(&quot;#enableVlan&quot;).prop(&quot;disabled&quot;,false);
+                $(&quot;#networkVlanID&quot;).val(&quot;&quot;);
+            } else {
+                $(&quot;#enableVlan&quot;).prop(&quot;disabled&quot;,true);
+            }
+        };
+        kimchi.setDefaultNetworkType(result.length!==0);  
+        onChange();   
+    });
+};
+
diff --git a/ui/pages/network-add.html.tmpl b/ui/pages/network-add.html.tmpl
index 7158b75..b1f3e21 100644
--- a/ui/pages/network-add.html.tmpl
+++ b/ui/pages/network-add.html.tmpl
@@ -41,6 +41,7 @@
                 &lt;option value=&quot;isolated&quot;&gt;$_(&quot;Isolated: no external network connection&quot;)&lt;/option&gt;
                 &lt;option value=&quot;nat&quot;&gt;$_(&quot;NAT: outbound physical network connection only&quot;)&lt;/option&gt;
                 &lt;option value=&quot;macvtap&quot;&gt;$_(&quot;Bridged: Virtual machines are connected to physical network directly&quot;)&lt;/option&gt;</pre>
    </blockquote>
    <br>
    <blockquote type="cite">
      <pre>+                &lt;option value=&quot;bridge&quot;&gt;$_(&quot;Linux bridges and OVS bridges&quot;)&lt;/option&gt;</pre>
    </blockquote>
    <br></div></div>
    Please, use: &quot;Linux bridged: Virtual machines are connected through
    a network bridge&quot;<span class=""><br>
    <br>
    <blockquote type="cite">
      <pre>             &lt;/select&gt;
         &lt;/div&gt;
         &lt;div id=&quot;networkBriDisabledLabel&quot; class=&quot;form-group hidden&quot;&gt;
@@ -52,7 +53,7 @@
                 &lt;select id=&quot;networkDestinationID&quot;  class=&quot;selectpicker col-md-12 col-lg-12&quot;&gt;
                 &lt;/select&gt;
             &lt;/div&gt;
-            &lt;div class=&quot;form-group&quot;&gt;
+            &lt;div class=&quot;form-group&quot; id=&quot;vlan&quot;&gt;
                 &lt;input id=&quot;enableVlan&quot; class=&quot;wok-checkbox&quot; type=&quot;checkbox&quot; value=&quot;&quot; /&gt;
                 &lt;label for=&quot;enableVlan&quot; id=&quot;labelEnableVlan&quot;&gt;$_(&quot;Enable VLAN&quot;) &lt;/label&gt;
                 &lt;div id=&quot;vlan-enabled&quot;&gt;
</pre>
    </blockquote>
    <br></span>
    Also every time, I change the network type on combo box a new
    warning message about the Network Manager is appended in the dialog.<br>
    It happened to have 4 messages in a time.<br>
  </div>

</blockquote></div><br></div>