mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-03-05 20:58:31 +03:00
Add GUI elements for TPM passthrough details
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
This commit is contained in:
parent
93718868c7
commit
2766dd5c6a
@ -551,6 +551,30 @@
|
||||
</domain>
|
||||
|
||||
|
||||
<domain type='test'>
|
||||
<name>test-tpm-passthrough</name>
|
||||
<uuid>0d2b6da9-3dba-42f2-b3ff-0a5341edf31f</uuid>
|
||||
<memory>8388608</memory>
|
||||
<currentMemory>2097152</currentMemory>
|
||||
<vcpu>2</vcpu>
|
||||
<os>
|
||||
<type arch='i686'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<tpm model='tpm-tis'>
|
||||
<backend type='passthrough'>
|
||||
<backend path='/dev/tpm0'/>
|
||||
</backend>
|
||||
</tpm>
|
||||
</devices>
|
||||
</domain>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- ######## -->
|
||||
|
@ -5667,6 +5667,126 @@ I/O:</property>
|
||||
<property name="tab_fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox17">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame20">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment47">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="top_padding">3</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table200">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">3</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">8</property>
|
||||
<property name="row_spacing">4</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="tpm-dev-type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="ypad">2</property>
|
||||
<property name="label" translatable="yes">tpm-dev-type</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label183">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="ypad">2</property>
|
||||
<property name="label" translatable="yes">T_ype:</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="tpm-device-path-label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="ypad">2</property>
|
||||
<property name="label" translatable="yes">Device path:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="tpm-device-path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">tpm-device-path</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label180">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>TPM Device</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">18</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label182">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label">tpm</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox59">
|
||||
<property name="visible">True</property>
|
||||
|
@ -43,7 +43,7 @@ import virtinst
|
||||
|
||||
|
||||
# Parameters that can be editted in the details window
|
||||
EDIT_TOTAL = 37
|
||||
EDIT_TOTAL = 38
|
||||
(EDIT_NAME,
|
||||
EDIT_ACPI,
|
||||
EDIT_APIC,
|
||||
@ -91,7 +91,9 @@ EDIT_VIDEO_MODEL,
|
||||
EDIT_WATCHDOG_MODEL,
|
||||
EDIT_WATCHDOG_ACTION,
|
||||
|
||||
EDIT_CONTROLLER_MODEL
|
||||
EDIT_CONTROLLER_MODEL,
|
||||
|
||||
EDIT_TPM_TYPE,
|
||||
) = range(EDIT_TOTAL)
|
||||
|
||||
|
||||
@ -121,13 +123,14 @@ HW_LIST_TYPE_CONTROLLER = 14
|
||||
HW_LIST_TYPE_FILESYSTEM = 15
|
||||
HW_LIST_TYPE_SMARTCARD = 16
|
||||
HW_LIST_TYPE_REDIRDEV = 17
|
||||
HW_LIST_TYPE_TPM = 18
|
||||
|
||||
remove_pages = [HW_LIST_TYPE_NIC, HW_LIST_TYPE_INPUT,
|
||||
HW_LIST_TYPE_GRAPHICS, HW_LIST_TYPE_SOUND, HW_LIST_TYPE_CHAR,
|
||||
HW_LIST_TYPE_HOSTDEV, HW_LIST_TYPE_DISK, HW_LIST_TYPE_VIDEO,
|
||||
HW_LIST_TYPE_WATCHDOG, HW_LIST_TYPE_CONTROLLER,
|
||||
HW_LIST_TYPE_FILESYSTEM, HW_LIST_TYPE_SMARTCARD,
|
||||
HW_LIST_TYPE_REDIRDEV]
|
||||
HW_LIST_TYPE_REDIRDEV, HW_LIST_TYPE_TPM]
|
||||
|
||||
# Boot device columns
|
||||
BOOT_DEV_TYPE = 0
|
||||
@ -500,6 +503,9 @@ class vmmDetails(vmmGObjectUI):
|
||||
"on_smartcard_mode_combo_changed": lambda *x: self.enable_apply(x,
|
||||
EDIT_SMARTCARD_MODE),
|
||||
|
||||
"on_tpm_type_combo_changed": (self.enable_apply,
|
||||
EDIT_TPM_TYPE),
|
||||
|
||||
"on_config_apply_clicked": self.config_apply,
|
||||
"on_config_cancel_clicked": self.config_cancel,
|
||||
|
||||
@ -1334,6 +1340,8 @@ class vmmDetails(vmmGObjectUI):
|
||||
self.refresh_smartcard_page()
|
||||
elif pagetype == HW_LIST_TYPE_REDIRDEV:
|
||||
self.refresh_redir_page()
|
||||
elif pagetype == HW_LIST_TYPE_TPM:
|
||||
self.refresh_tpm_page()
|
||||
else:
|
||||
pagetype = -1
|
||||
except Exception, e:
|
||||
@ -2060,6 +2068,8 @@ class vmmDetails(vmmGObjectUI):
|
||||
ret = self.config_smartcard_apply(key)
|
||||
elif pagetype is HW_LIST_TYPE_CONTROLLER:
|
||||
ret = self.config_controller_apply(key)
|
||||
elif pagetype is HW_LIST_TYPE_TPM:
|
||||
ret = self.config_tpm_apply(key)
|
||||
else:
|
||||
ret = False
|
||||
except Exception, e:
|
||||
@ -2372,6 +2382,18 @@ class vmmDetails(vmmGObjectUI):
|
||||
|
||||
return self._change_config_helper(df, da, hf, ha)
|
||||
|
||||
# TPM options
|
||||
def config_tpm_apply(self, dev_id_info):
|
||||
df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
|
||||
ignore = add_hotplug
|
||||
|
||||
if self.editted(EDIT_TPM_TYPE):
|
||||
typ = self.get_combo_label_value("tpm-type")
|
||||
if typ:
|
||||
add_define(self.vm.define_tpm_type, dev_id_info, typ)
|
||||
|
||||
return self._change_config_helper(df, da, hf, ha)
|
||||
|
||||
# Network options
|
||||
def config_network_apply(self, dev_id_info):
|
||||
df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
|
||||
@ -3208,6 +3230,30 @@ class vmmDetails(vmmGObjectUI):
|
||||
self.widget("redir-type-label").set_text(rd.type)
|
||||
self.widget("redir-type-combo").hide()
|
||||
|
||||
def refresh_tpm_page(self):
|
||||
tpmdev = self.get_hw_selection(HW_LIST_COL_DEVICE)
|
||||
if not tpmdev:
|
||||
return
|
||||
|
||||
def show_ui(param, val=None):
|
||||
widgetname = "tpm-" + param.replace("_", "-")
|
||||
labelname = widgetname + "-label"
|
||||
doshow = tpmdev.supports_property(param)
|
||||
|
||||
if not val and doshow:
|
||||
val = getattr(tpmdev, param)
|
||||
|
||||
self.widget(widgetname).set_property("visible", doshow)
|
||||
self.widget(labelname).set_property("visible", doshow)
|
||||
self.widget(widgetname).set_text(val or "-")
|
||||
|
||||
dev_type = tpmdev.type
|
||||
|
||||
self.widget("tpm-dev-type").set_text(dev_type)
|
||||
|
||||
# Device type specific properties, only show if apply to the cur dev
|
||||
show_ui("device_path")
|
||||
|
||||
def refresh_char_page(self):
|
||||
chardev = self.get_hw_selection(HW_LIST_COL_DEVICE)
|
||||
if not chardev:
|
||||
@ -3644,6 +3690,11 @@ class vmmDetails(vmmGObjectUI):
|
||||
update_hwlist(HW_LIST_TYPE_SMARTCARD, sc,
|
||||
_("Smartcard"), "device_serial")
|
||||
|
||||
# Populate list of TPM devices
|
||||
for tpm in self.vm.get_tpm_devices():
|
||||
update_hwlist(HW_LIST_TYPE_TPM, tpm,
|
||||
_("TPM"), "device_cpu")
|
||||
|
||||
devs = range(len(hw_list_model))
|
||||
devs.reverse()
|
||||
for i in devs:
|
||||
|
@ -55,6 +55,7 @@ def compare_device(origdev, newdev, idx):
|
||||
"filesystem" : ["target" , "vmmindex"],
|
||||
"smartcard" : ["mode" , "vmmindex"],
|
||||
"redirdev" : ["bus" , "type", "vmmindex"],
|
||||
"tpm" : ["type" , "vmmindex"],
|
||||
}
|
||||
|
||||
if id(origdev) == id(newdev):
|
||||
@ -824,6 +825,13 @@ class vmmDomain(vmmLibvirtObject):
|
||||
|
||||
return self._redefine_device(change, devobj)
|
||||
|
||||
# TPM define methods
|
||||
|
||||
def define_tpm_type(self, devobj, newtype):
|
||||
def change(editdev):
|
||||
editdev.type = newtype
|
||||
return self._redefine_device(change, devobj)
|
||||
|
||||
|
||||
|
||||
####################
|
||||
@ -1079,6 +1087,8 @@ class vmmDomain(vmmLibvirtObject):
|
||||
return self._build_device_list("smartcard")
|
||||
def get_redirdev_devices(self):
|
||||
return self._build_device_list("redirdev")
|
||||
def get_tpm_devices(self):
|
||||
return self._build_device_list("tpm")
|
||||
|
||||
def get_disk_devices(self, refresh_if_necc=True, inactive=False):
|
||||
devs = self._build_device_list("disk", refresh_if_necc, inactive)
|
||||
|
Loading…
x
Reference in New Issue
Block a user