Change in vdsm[master]: net: fake sriov device hook
ibarkan at redhat.com
ibarkan at redhat.com
Thu Oct 29 13:54:01 UTC 2015
Ido Barkan has uploaded a new change for review.
Change subject: net: fake sriov device hook
......................................................................
net: fake sriov device hook
This hook fakes both getVdsCaps and hostdevListByCaps to make VDSM
report devices and capabilities of an SR-IOV capable host.
Change-Id: Ic661e152adf6365962b5d9fd215277b36bc49383
Signed-off-by: Ido Barkan <ibarkan at redhat.com>
---
M configure.ac
M contrib/shell_helper
M vdsm.spec.in
M vdsm_hooks/Makefile.am
A vdsm_hooks/fakesriov/Makefile.am
A vdsm_hooks/fakesriov/after_get_caps.py
A vdsm_hooks/fakesriov/after_hostdev_list_by_caps.py
7 files changed, 185 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/47/47847/1
diff --git a/configure.ac b/configure.ac
index 068c4b5..e68f1b4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -369,6 +369,7 @@
vdsm_hooks/diskunmap/Makefile
vdsm_hooks/ethtool_options/Makefile
vdsm_hooks/extnet/Makefile
+ vdsm_hooks/fakesriov/Makefile
vdsm_hooks/fakevmstats/Makefile
vdsm_hooks/faqemu/Makefile
vdsm_hooks/fileinject/Makefile
diff --git a/contrib/shell_helper b/contrib/shell_helper
index 7dc2984..6b6314a 100755
--- a/contrib/shell_helper
+++ b/contrib/shell_helper
@@ -10,7 +10,7 @@
_latest_rpms() {
local VERSION=$(_latest_version)
- find ~/rpmbuild/RPMS/ -iname "*$VERSION*.rpm" | egrep "vdsm-[0-9]|python|cli|xmlrpc|jsonrpc|tests|infra"
+ find ~/rpmbuild/RPMS/ -iname "*$VERSION*.rpm" | egrep "vdsm-[0-9]|python|cli|xmlrpc|jsonrpc|tests|infra|api"
}
vdsm_configure_force() {
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 3d6b51a..3c49487 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -430,6 +430,14 @@
To enable this hook on your host, set vars.fake_vmstats_enable=true in your
/etc/vdsm/vdsm.conf.
+%package hook-fakesriov
+Summary: Generate fake SR-IOV dsvices
+Requires: %{name}
+
+%description hook-fakesriov
+Hook intercepts reported host device by hostdevListByCaps and adds
+1 fake sriov devices and 2 fake virtual function devices
+
%package hook-fileinject
Summary: Allow uploading file to VMs disk
Requires: python-libguestfs
@@ -1273,6 +1281,11 @@
%defattr(-, root, root, -)
%{_libexecdir}/%{vdsm_name}/hooks/after_get_all_vm_stats/10_fakevmstats
+%files hook-fakesriov
+%defattr(-, root, root, -)
+%{_libexecdir}/%{vdsm_name}/hooks/after_hostdev_list_by_caps/10_fakesriov
+%{_libexecdir}/%{vdsm_name}/hooks/after_get_caps/10_fakesriov
+
%files hook-fileinject
%defattr(-, root, root, -)
%{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_fileinject
diff --git a/vdsm_hooks/Makefile.am b/vdsm_hooks/Makefile.am
index 0573b2c..dda39bc 100644
--- a/vdsm_hooks/Makefile.am
+++ b/vdsm_hooks/Makefile.am
@@ -40,6 +40,7 @@
diskunmap \
extnet \
fileinject \
+ fakesriov \
fakevmstats \
floppy \
hostusb \
diff --git a/vdsm_hooks/fakesriov/Makefile.am b/vdsm_hooks/fakesriov/Makefile.am
new file mode 100644
index 0000000..2d6bc8d
--- /dev/null
+++ b/vdsm_hooks/fakesriov/Makefile.am
@@ -0,0 +1,40 @@
+#
+# Copyright 2015 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+include $(top_srcdir)/build-aux/Makefile.subs
+
+CLEANFILES = \
+ config.log
+
+EXTRA_DIST = \
+ after_hostdev_list_by_caps.py \
+ after_get_caps.py
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(vdsmhooksdir)/after_hostdev_list_by_caps
+ $(INSTALL_SCRIPT) $(srcdir)/after_hostdev_list_by_caps.py \
+ $(DESTDIR)$(vdsmhooksdir)/after_hostdev_list_by_caps/10_fakesriov
+ $(MKDIR_P) $(DESTDIR)$(vdsmhooksdir)/after_get_caps
+ $(INSTALL_SCRIPT) $(srcdir)/after_get_caps.py \
+ $(DESTDIR)$(vdsmhooksdir)/after_get_caps/10_fakesriov
+
+uninstall-local:
+ $(RM) $(DESTDIR)$(vdsmhooksdir)/after_hostdev_list_by_caps/10_fakesriov
+ $(RM) $(DESTDIR)$(vdsmhooksdir)/after_get_caps/10_fakesriov
diff --git a/vdsm_hooks/fakesriov/after_get_caps.py b/vdsm_hooks/fakesriov/after_get_caps.py
new file mode 100644
index 0000000..38dbb39
--- /dev/null
+++ b/vdsm_hooks/fakesriov/after_get_caps.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+#
+# Copyright 2015 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+import hooking
+
+_PASSTHROUGH_SUPPORT = {
+ 'hostdevPassthrough': True}
+_NICS = {
+ 'enp2s0f0': {
+ 'addr': '', 'cfg': {'BOOTPROTO': 'none', 'BRIDGE': 'ovirtmgmt',
+ 'DEVICE': 'enp2s0f0',
+ 'HWADDR': '78:e7:d1:e4:8f:16', 'IPV6INIT': 'no',
+ 'MTU': '1500', 'NM_CONTROLLED': 'no',
+ 'ONBOOT': 'yes'}, 'dhcpv4': False, 'dhcpv6': False,
+ 'gateway': '', 'hwaddr': '78:e7:d1:e4:8f:16', 'ipv4addrs': [],
+ 'ipv6addrs': ['fe80::7ae7:d1ff:fee4:8f16/64'], 'ipv6gateway': '::',
+ 'mtu': '1500', 'netmask': '', 'speed': 1000},
+ 'enp2s16': {'addr': '', 'cfg': {'BOOTPROTO': 'none', 'DEVICE': 'enp2s16',
+ 'HWADDR': 'be:b8:2b:a8:15:bf', 'MTU': '1500',
+ 'NM_CONTROLLED': 'no', 'ONBOOT': 'yes'},
+ 'dhcpv4': False, 'dhcpv6': False, 'gateway': '',
+ 'hwaddr': 'aa:8c:31:98:8a:9a', 'ipv4addrs': [],
+ 'ipv6addrs': [], 'ipv6gateway': '::', 'mtu': '1500',
+ 'netmask': '', 'speed': 0},
+ 'enp2s16f2': {'addr': '', 'cfg': {'BOOTPROTO': 'none', 'BRIDGE': 'net',
+ 'DEVICE': 'enp2s16f2',
+ 'HWADDR': '26:83:76:ec:08:6b',
+ 'IPV6INIT': 'no', 'MTU': '1500',
+ 'NM_CONTROLLED': 'no', 'ONBOOT': 'yes'},
+ 'dhcpv4': False, 'dhcpv6': False, 'gateway': '',
+ 'hwaddr': 'ce:1f:0b:d1:ca:93', 'ipv4addrs': [],
+ 'ipv6addrs': [], 'ipv6gateway': '::', 'mtu': '1500',
+ 'netmask': '', 'speed': 0}}
+
+if __name__ == '__main__':
+ caps = hooking.read_json()
+ caps.update(_PASSTHROUGH_SUPPORT)
+ caps['nics'].update(_NICS)
+ hooking.write_json(caps)
diff --git a/vdsm_hooks/fakesriov/after_hostdev_list_by_caps.py b/vdsm_hooks/fakesriov/after_hostdev_list_by_caps.py
new file mode 100644
index 0000000..2db7ffe
--- /dev/null
+++ b/vdsm_hooks/fakesriov/after_hostdev_list_by_caps.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+#
+# Copyright 2015 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+import hooking
+
+_FAKE_SRIOV = {
+ # sriov device
+ 'pci_0000_02_00_0': {
+ 'params': {
+ 'address': {'bus': '2', 'domain': '0', 'function': '0',
+ 'slot': '0'},
+ 'capability': 'pci', 'iommu_group': '15',
+ 'parent': 'pci_0000_00_03_0',
+ 'product': '82576 Gigabit Network Connection',
+ 'product_id': '0x10e7', 'totalvfs': 7,
+ 'vendor': 'Intel Corporation', 'vendor_id': '0x8086'}},
+ # sriov net device
+ 'net_enp2s0f0_78_e7_d1_e4_8f_16': {
+ 'params': {
+ 'capability': 'net', 'interface': 'enp2s0f0',
+ 'parent': 'pci_0000_02_00_0'}},
+ # vf1
+ 'pci_0000_02_10_0': {
+ 'params': {
+ 'address': {'bus': '2', 'domain': '0', 'function': '0',
+ 'slot': '16'},
+ 'capability': 'pci', 'iommu_group': '23',
+ 'parent': 'pci_0000_00_03_0', 'physfn': 'pci_0000_02_00_0',
+ 'product': '82576 Virtual Function', 'product_id': '0x10ca',
+ 'vendor': 'Intel Corporation', 'vendor_id': '0x8086'}},
+ # vf1 net device
+ 'net_enp2s16_aa_8c_31_98_8a_9a': {
+ 'params': {
+ 'capability': 'net', 'interface': 'enp2s16',
+ 'parent': 'pci_0000_02_10_0'}},
+ # vf2
+ 'pci_0000_02_10_2': {
+ 'params': {
+ 'address': {'bus': '2', 'domain': '0', 'function': '2',
+ 'slot': '16'},
+ 'capability': 'pci', 'iommu_group': '24',
+ 'parent': 'pci_0000_00_03_0', 'physfn': 'pci_0000_02_00_0',
+ 'product': '82576 Virtual Function', 'product_id': '0x10ca',
+ 'vendor': 'Intel Corporation', 'vendor_id': '0x8086'}},
+ # vf2 net device
+ 'net_enp2s16f2_ce_1f_0b_d1_ca_93': {
+ 'params': {
+ 'capability': 'net', 'interface': 'enp2s16f2',
+ 'parent': 'pci_0000_02_10_2'}}}
+
+if __name__ == '__main__':
+ host_devices = hooking.read_json()
+ host_devices.update(_FAKE_SRIOV)
+ hooking.write_json(host_devices)
--
To view, visit https://gerrit.ovirt.org/47847
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic661e152adf6365962b5d9fd215277b36bc49383
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Ido Barkan <ibarkan at redhat.com>
More information about the vdsm-patches
mailing list