tpmif.py

来自「xen虚拟机源代码安装包」· Python 代码 · 共 142 行

PY
142
字号
#============================================================================# This library is free software; you can redistribute it and/or# modify it under the terms of version 2.1 of the GNU Lesser General Public# License as published by the Free Software Foundation.## This library 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# Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public# License along with this library; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#============================================================================# Copyright (C) 2004 Mike Wray <mike.wray@hp.com># Copyright (C) 2005 IBM Corporation#   Author: Stefan Berger, stefanb@us.ibm.com# Copyright (C) 2005 XenSource Ltd#============================================================================"""Support for virtual TPM interfaces."""from xen.xend import XendOptionsfrom xen.xend.XendLogging import logfrom xen.xend.XendError import XendErrorfrom xen.xend.XendConstants import DEV_MIGRATE_TEST, VTPM_DELETE_SCRIPTfrom xen.xend.server.DevController import DevControllerimport osimport rexoptions = XendOptions.instance()def destroy_vtpmstate(uuids):    if os.path.exists(VTPM_DELETE_SCRIPT):        for uuid in uuids:            os.system(VTPM_DELETE_SCRIPT + " " + uuid)class TPMifController(DevController):    """TPM interface controller. Handles all TPM devices for a domain.    """    def __init__(self, vm):        DevController.__init__(self, vm)    def getDeviceDetails(self, config):        """@see DevController.getDeviceDetails"""        devid = self.allocateDeviceID()        inst = int(config.get('pref_instance', -1))        if inst == -1:            inst = int(config.get('instance', 0))        typ    = config.get('type')        uuid   = config.get('uuid')        log.info("The domain has a TPM with pref. instance %d and devid %d.",                 inst, devid)        back  = { 'pref_instance' : "%i" % inst,                  'resume'        : "%s" % (self.vm.getResume()) }        if typ:            back['type'] = typ        if uuid:            back['uuid'] = uuid            data = self.vm.info['devices'].get(uuid)            if data:                other = data[1].get('other_config')                if type(other) == dict:                    for key, item in other.items():                        back['oc_' + key] = item        front = { 'handle' : "%i" % devid }        return (devid, back, front)    def getDeviceConfiguration(self, devid, transaction = None):        """Returns the configuration of a device"""        result = DevController.getDeviceConfiguration(self, devid, transaction)        (instance, uuid, type) = \                           self.readBackend(devid, 'instance',                                                   'uuid',                                                   'type')        if instance:            result['instance'] = instance        if uuid:            result['uuid'] = uuid        if type:            result['type'] = type        if uuid:            data = self.vm.info['devices'].get(uuid)            if data:                other = data[1].get('other_config')                if other:                    result['other_config'] = other        return result    def migrate(self, deviceConfig, network, dst, step, domName):        """@see DevContoller.migrate"""        if network:            tool = xoptions.get_external_migration_tool()            if tool != '':                log.info("Request to network-migrate device to %s. step=%d.",                         dst, step)                if step == DEV_MIGRATE_TEST:                    """Assuming for now that everything is ok and migration                       with the given tool can proceed.                    """                    return 0                else:                    fd = os.popen("%s -type vtpm -step %d -host %s -domname %s" %                                  (tool, step, dst, domName),                                  'r')                    for line in fd.readlines():                        mo = re.search('Error', line)                        if mo:                            raise XendError("vtpm: Fatal error in migration step %d: %s" %                                            (step, line))                    return 0            else:                log.debug("External migration tool not in configuration.")                return -1        return 0    def recover_migrate(self, deviceConfig, network, dst, step, domName):        """@see DevContoller.recover_migrate"""        if network:            tool = xoptions.get_external_migration_tool()            if tool != '':                log.info("Request to recover network-migrated device. last good step=%d.",                         step)                fd = os.popen("%s -type vtpm -step %d -host %s -domname %s -recover" %                              (tool, step, dst, domName),                              'r')        return 0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?