diff options
author | Lin Ma <lma@suse.com> | 2017-03-31 20:12:01 +0800 |
---|---|---|
committer | Cole Robinson <crobinso@redhat.com> | 2017-04-03 19:15:11 -0400 |
commit | 97c8412df645c6529eebbb6f8b41058a0559d492 (patch) | |
tree | fdd6f8b19ab93d20ca9c3bfc489d3024cf28b055 /virtManager | |
parent | fe9588d43802e054a6a6c93786f3454d78017b57 (diff) | |
download | virt-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')
-rw-r--r-- | virtManager/createnet.py | 68 |
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() |