[virt-tools-list] [PATCH V2] virt-manager: make mode for direct interfaces selectable

Gerhard Stenzel gstenzel at linux.vnet.ibm.com
Tue Apr 19 11:08:15 UTC 2011


Next try ...

The following patch adds support to select the mode for direct 
interfaces.

Signed-off-by: Gerhard Stenzel <gerhard.stenzel at de.ibm.com>

Index: virt-manager/src/virtManager/details.py
===================================================================
--- virt-manager.orig/src/virtManager/details.py
+++ virt-manager/src/virtManager/details.py
@@ -378,6 +378,7 @@ class vmmDetails(vmmGObjectUI):
 
             "on_network_source_combo_changed": self.config_enable_apply,
             "on_network_bridge_changed": self.config_enable_apply,
+            "on_network-source-mode-combo_changed": self.config_enable_apply,
             "on_network_model_combo_changed": self.config_enable_apply,
 
             "on_vport_type_changed": self.config_enable_apply,
@@ -791,7 +792,14 @@ class vmmDetails(vmmGObjectUI):
         # Network source
         net_source = self.window.get_widget("network-source-combo")
         net_bridge = self.window.get_widget("network-bridge-box")
-        uihelpers.init_network_list(net_source, net_bridge)
+        source_mode_box   = self.window.get_widget("network-source-mode-box")
+        source_mode_label = self.window.get_widget("network-source-mode")
+        vport_expander = self.window.get_widget("vport-expander")
+        uihelpers.init_network_list(net_source, net_bridge, source_mode_box, source_mode_label, vport_expander)
+
+        # source mode
+        source_mode = self.window.get_widget("network-source-mode-combo")
+        uihelpers.build_source_mode_combo(self.vm, source_mode)
 
         # Network model
         net_model = self.window.get_widget("network-model-combo")
@@ -1872,6 +1880,11 @@ class vmmDetails(vmmGObjectUI):
         net_bridge = self.window.get_widget("network-bridge")
         nettype, source = uihelpers.get_network_selection(net_list, net_bridge)
 
+        if (nettype  == "direct"):
+            source_mode = self.get_combo_label_value("network-source-mode")
+        else:
+            source_mode = ""
+
         model = self.get_combo_label_value("network-model")
 
         vport_type = self.window.get_widget("vport-type").get_text()
@@ -1889,7 +1902,7 @@ class vmmDetails(vmmGObjectUI):
                                           vport_typeid,
                                           vport_idver,
                                           vport_instid),
-                                          (dev_id_info, nettype, source)])
+                                          (dev_id_info, nettype, source, source_mode)])
 
     # Graphics options
     def _do_change_spicevmc(self, gdev, newgtype):
@@ -2390,6 +2403,7 @@ class vmmDetails(vmmGObjectUI):
 
         nettype = net.type
         source = net.get_source()
+        source_mode = net.source_mode
         model = net.model
 
         netobj = None
@@ -2429,6 +2443,11 @@ class vmmDetails(vmmGObjectUI):
                              (nettype, source), label=desc,
                              comparefunc=compare_network)
 
+        # source mode
+        uihelpers.populate_source_mode_combo(self.vm,
+                            self.window.get_widget("network-source-mode-combo"))
+        self.set_combo_label("network-source-mode", source_mode)
+
         # Virtualport config
         show_vport = (nettype == "direct")
         vport = net.virtualport
Index: virt-manager/src/virtManager/domain.py
===================================================================
--- virt-manager.orig/src/virtManager/domain.py
+++ virt-manager/src/virtManager/domain.py
@@ -427,13 +427,14 @@ class vmmDomainBase(vmmLibvirtObject):
             editdev.bus = newval
         return self._redefine_device(change, devobj)
 
-    def define_network_source(self, devobj, newtype, newsource):
+    def define_network_source(self, devobj, newtype, newsource, newmode):
         def change(editdev):
             if not newtype:
                 return
             editdev.source = None
             editdev.type = newtype
             editdev.source = newsource
+            editdev.source_mode = newmode
         return self._redefine_device(change, devobj)
     def define_network_model(self, devobj, newmodel):
         def change(editdev):
Index: virt-manager/src/virtManager/uihelpers.py
===================================================================
--- virt-manager.orig/src/virtManager/uihelpers.py
+++ virt-manager/src/virtManager/uihelpers.py
@@ -193,6 +193,26 @@ def build_watchdogaction_combo(vm, combo
     if len(dev_model) > 0:
         combo.set_active(0)
 
+def build_source_mode_combo(vm, combo):
+    source_mode = gtk.ListStore(str, str)
+    combo.set_model(source_mode)
+    text = gtk.CellRendererText()
+    combo.pack_start(text, True)
+    combo.add_attribute(text, 'text', 1)
+
+    populate_source_mode_combo(vm, combo)
+    combo.set_active(0)
+
+def populate_source_mode_combo(vm, combo):
+    model = combo.get_model()
+    model.clear()
+
+    # [xml value, label]
+    model.append([None, _("")])
+    model.append(["vepa", "vepa"])
+    model.append(["bridge", "bridge"])
+    model.append(["private", "private"])
+
 def build_netmodel_combo(vm, combo):
     dev_model = gtk.ListStore(str, str)
     combo.set_model(dev_model)
@@ -312,20 +332,20 @@ def pretty_network_desc(nettype, source=
 
     return ret
 
-def init_network_list(net_list, bridge_box):
+def init_network_list(net_list, bridge_box, source_mode_box=None, source_mode_label=None, vport_expander=None):
     # [ network type, source name, label, sensitive?, net is active,
     #   manual bridge, net instance]
     net_model = gtk.ListStore(str, str, str, bool, bool, bool, object)
     net_list.set_model(net_model)
 
-    net_list.connect("changed", net_list_changed, bridge_box)
+    net_list.connect("changed", net_list_changed, bridge_box, source_mode_box,source_mode_label, vport_expander)
 
     text = gtk.CellRendererText()
     net_list.pack_start(text, True)
     net_list.add_attribute(text, 'text', 2)
     net_list.add_attribute(text, 'sensitive', 3)
 
-def net_list_changed(net_list, bridge_box):
+def net_list_changed(net_list, bridge_box, source_mode_box, source_mode_label, vport_expander):
     active = net_list.get_active()
     if active < 0:
         return
@@ -334,6 +354,13 @@ def net_list_changed(net_list, bridge_bo
         return
 
     row = net_list.get_model()[active]
+
+    if source_mode_box != None:
+        show_source_mode = (row[0] == VirtualNetworkInterface.TYPE_DIRECT)
+        source_mode_box.set_property("visible", show_source_mode)
+        source_mode_label.set_property("visible", show_source_mode)
+        vport_expander.set_property("visible", show_source_mode)
+
     show_bridge = row[5]
 
     bridge_box.set_property("visible", show_bridge)
Index: virt-manager/src/vmm-details.glade
===================================================================
--- virt-manager.orig/src/vmm-details.glade
+++ virt-manager/src/vmm-details.glade
@@ -3687,7 +3687,7 @@ I/O:</property>
                                           <widget class="GtkTable" id="table31">
                                             <property name="visible">True</property>
                                             <property name="border_width">3</property>
-                                            <property name="n_rows">3</property>
+                                            <property name="n_rows">4</property>
                                             <property name="n_columns">2</property>
                                             <property name="column_spacing">8</property>
                                             <property name="row_spacing">4</property>
@@ -3852,6 +3852,52 @@ I/O:</property>
                                                 <property name="right_attach">2</property>
                                               </packing>
                                             </child>
+                                            <child>
+                                              <widget class="GtkHBox" id="network-source-mode-box">
+                                                <property name="visible">True</property>
+                                                <property name="spacing">6</property>
+                                                <child>
+                                                  <widget class="GtkComboBox" id="network-source-mode-combo">
+                                                    <property name="visible">True</property>
+                                                    <signal name="changed" handler="on_network-source-mode-combo_changed"/>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="expand">False</property>
+                                                    <property name="position">0</property>
+                                                  </packing>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkLabel" id="network-source-mode-label">
+                                                    <property name="visible">True</property>
+                                                    <property name="xalign">0</property>
+                                                    <property name="label">unknown mode</property>
+                                                    <property name="selectable">True</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="expand">False</property>
+                                                    <property name="position">1</property>
+                                                  </packing>
+                                                </child>
+                                              </widget>
+                                              <packing>
+                                                <property name="left_attach">1</property>
+                                                <property name="right_attach">2</property>
+                                                <property name="top_attach">3</property>
+                                                <property name="bottom_attach">4</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <widget class="GtkLabel" id="network-source-mode">
+                                                <property name="visible">True</property>
+                                                <property name="xalign">1</property>
+                                                <property name="label" translatable="yes">Source mode:</property>
+                                                <property name="use_underline">True</property>
+                                              </widget>
+                                              <packing>
+                                                <property name="top_attach">3</property>
+                                                <property name="bottom_attach">4</property>
+                                              </packing>
+                                            </child>
                                           </widget>
                                         </child>
                                       </widget>

===================================================================

Best regards, 

Gerhard Stenzel
-------------------------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschaeftsfuehrung: Dirk Wittkopp
Sitz der Gesellschaft: Boeblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294




More information about the virt-tools-list mailing list