summaryrefslogtreecommitdiff
path: root/virtManager/createnet.py
diff options
context:
space:
mode:
authorLin Ma <lma@suse.com>2017-03-31 20:12:01 +0800
committerCole Robinson <crobinso@redhat.com>2017-04-03 19:15:11 -0400
commit97c8412df645c6529eebbb6f8b41058a0559d492 (patch)
treefdd6f8b19ab93d20ca9c3bfc489d3024cf28b055 /virtManager/createnet.py
parentfe9588d43802e054a6a6c93786f3454d78017b57 (diff)
downloadvirt-manager-97c8412df645c6529eebbb6f8b41058a0559d492.tar.gz
network: add support to create SR-IOV VF pool
Create a network with a device pool containing all the VFs of an SR-IOV device. Signed-off-by: Lin Ma <lma@suse.com>
Diffstat (limited to 'virtManager/createnet.py')
-rw-r--r--virtManager/createnet.py68
1 files changed, 65 insertions, 3 deletions
diff --git a/virtManager/createnet.py b/virtManager/createnet.py
index 9fdbc45d..b670b09a 100644
--- a/virtManager/createnet.py
+++ b/virtManager/createnet.py
@@ -120,6 +120,12 @@ class vmmCreateNetwork(vmmGObjectUI):
self.widget("header").modify_bg(Gtk.StateType.NORMAL, blue)
# [ label, dev name ]
+ pf_list = self.widget("pf-list")
+ pf_model = Gtk.ListStore(str, str)
+ pf_list.set_model(pf_model)
+ uiutil.init_combo_text_column(pf_list, 0)
+
+ # [ label, dev name ]
fw_list = self.widget("net-forward")
fw_model = Gtk.ListStore(str, str)
fw_list.set_model(fw_model)
@@ -167,6 +173,9 @@ class vmmCreateNetwork(vmmGObjectUI):
self.widget("net-enable-ipv6-networking").set_active(False)
+ pf_model = self.widget("pf-list").get_model()
+ pf_model.clear()
+
fw_model = self.widget("net-forward").get_model()
fw_model.clear()
fw_model.append([_("Any physical device"), None])
@@ -181,6 +190,28 @@ class vmmCreateNetwork(vmmGObjectUI):
for name in devnames:
fw_model.append([_("Physical device %s") % name, name])
+ devprettynames = []
+ ifnames = []
+ for pcidev in self.conn.filter_nodedevs("pci"):
+ if pcidev.xmlobj.capability_type != "virt_functions":
+ continue
+ devdesc = pcidev.xmlobj.pretty_name()
+ for netdev in self.conn.filter_nodedevs("net"):
+ if pcidev.xmlobj.name != netdev.xmlobj.parent:
+ continue
+ ifname = netdev.xmlobj.interface
+ devprettyname = "%s (%s)" % (ifname, devdesc)
+ devprettynames.append(devprettyname)
+ ifnames.append(ifname)
+ break
+ if not devprettynames:
+ pf_model.append([_("No available device"), None])
+ else:
+ for devprettyname, ifname in zip(devprettynames, ifnames):
+ pf_model.append([_("%s") % devprettyname, ifname])
+
+ self.widget("pf-list").set_active(0)
+
self.widget("net-forward").set_active(0)
self.widget("net-forward-mode").set_active(0)
self.widget("net-forward-none").set_active(True)
@@ -223,6 +254,11 @@ class vmmCreateNetwork(vmmGObjectUI):
return self._get_network_helper("net-dhcpv6-end")
def get_config_forwarding(self):
+ if self.widget("net-forward-mode-hostdev").get_active():
+ name = uiutil.get_list_selection(self.widget("pf-list"), column=1)
+ mode = "hostdev"
+ return [name, mode]
+
if self.widget("net-forward-none").get_active():
return [None, None]
@@ -481,10 +517,27 @@ class vmmCreateNetwork(vmmGObjectUI):
self.widget("create-finish").grab_focus()
def change_forward_type(self, ignore):
- skip_fwd = self.widget("net-forward-none").get_active()
+ index = self.widget("pf-list").get_active()
+ model = self.widget("pf-list").get_model()
+ item = model[index]
+ if item[1] is None:
+ sriov_capable = False
+ else:
+ sriov_capable = True
+ self.widget("net-forward-mode-hostdev").set_sensitive(sriov_capable)
+ vf_pool = self.widget("net-forward-mode-hostdev").get_active()
+ if not vf_pool:
+ skip_fwd = self.widget("net-forward-none").get_active()
+
+ self.widget("net-forward-mode").set_sensitive(not skip_fwd)
+ self.widget("net-forward").set_sensitive(not skip_fwd)
+ else:
+ self.widget("net-forward-mode").set_sensitive(False)
+ self.widget("net-forward").set_sensitive(False)
- self.widget("net-forward-mode").set_sensitive(not skip_fwd)
- self.widget("net-forward").set_sensitive(not skip_fwd)
+ self.widget("net-forward-hostdev-table").set_sensitive(vf_pool)
+ self.widget("net-enable-ipv6-networking-box").set_sensitive(not vf_pool)
+ self.widget("dns-domain-name-box").set_sensitive(not vf_pool)
def change_ipv4_enable(self, ignore):
enabled = self.get_config_ipv4_enable()
@@ -686,6 +739,15 @@ class vmmCreateNetwork(vmmGObjectUI):
net.forward.mode = mode
net.forward.dev = dev or None
+ if net.forward.mode == "hostdev":
+ net.forward.managed = "yes"
+ pfobj = net.forward.add_pf()
+ pfobj.dev = net.forward.dev
+ net.forward.dev = None
+ net.domain_name = None
+ net.ipv6 = None
+ return net
+
if self.get_config_ipv4_enable():
ip = self.get_config_ip4()
ipobj = net.add_ip()