⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xenddpci.py

📁 xen虚拟机源代码安装包
💻 PY
字号:
#============================================================================# 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) 2008 NEC Corporation#       Yosuke Iwamatsu <y-iwamatsu at ab jp nec com>#============================================================================from xen.xend.XendBase import XendBasefrom xen.xend.XendPPCI import XendPPCIfrom xen.xend import XendAPIStorefrom xen.xend import uuid as genuuidimport XendDomain, XendNodefrom XendError import *from XendTask import XendTaskfrom XendLogging import logclass XendDPCI(XendBase):    """Representation of a passthrough PCI device."""    def getClass(self):        return "DPCI"    def getAttrRO(self):        attrRO = ['virtual_domain',                  'virtual_bus',                  'virtual_slot',                  'virtual_func',                  'virtual_name',                  'VM',                  'PPCI',                  'hotplug_slot']        return XendBase.getAttrRO() + attrRO    def getAttrRW(self):        attrRW = []        return XendBase.getAttrRW() + attrRW    def getAttrInst(self):        attrInst = ['VM',                    'PPCI',                    'hotplug_slot']        return XendBase.getAttrInst() + attrInst    def getMethods(self):        methods = ['destroy']        return XendBase.getMethods() + methods    def getFuncs(self):        funcs = ['create']        return XendBase.getFuncs() + funcs    getClass    = classmethod(getClass)    getAttrRO   = classmethod(getAttrRO)    getAttrRW   = classmethod(getAttrRW)    getAttrInst = classmethod(getAttrInst)    getMethods  = classmethod(getMethods)    getFuncs    = classmethod(getFuncs)     def create(self, dpci_struct):        # Check if VM is valid        xendom = XendDomain.instance()        if not xendom.is_valid_vm(dpci_struct['VM']):            raise InvalidHandleError('VM', dpci_struct['VM'])        dom = xendom.get_vm_by_uuid(dpci_struct['VM'])        # Check if PPCI is valid        xennode = XendNode.instance()        ppci_uuid = xennode.get_ppci_by_uuid(dpci_struct['PPCI'])        if not ppci_uuid:            raise InvalidHandleError('PPCI', dpci_struct['PPCI'])        for existing_dpci in XendAPIStore.get_all('DPCI'):            if ppci_uuid == existing_dpci.get_PPCI():                raise DirectPCIError("Device is in use")        # Assign PPCI to VM        try:            dpci_ref = XendTask.log_progress(0, 100, dom.create_dpci,                                             dpci_struct)        except XendError, e:            raise DirectPCIError("Failed to assign device")        # TODO: Retrive virtual pci device infomation.        return dpci_ref    create = classmethod(create)    def get_by_VM(cls, VM_ref):        result = []        for dpci in XendAPIStore.get_all("DPCI"):            if dpci.get_VM() == VM_ref:                result.append(dpci.get_uuid())        return result    get_by_VM = classmethod(get_by_VM)    def __init__(self, uuid, record):        XendBase.__init__(self, uuid, record)        self.virtual_domain = -1        self.virtual_bus = -1        self.virtual_slot = -1        self.virtual_func = -1        self.VM = record['VM']        self.PPCI = record['PPCI']        self.hotplug_slot = record['hotplug_slot']    def destroy(self):        xendom = XendDomain.instance()        dom = xendom.get_vm_by_uuid(self.get_VM())        if not dom:            raise InvalidHandleError("VM", self.get_VM())        XendTask.log_progress(0, 100, dom.destroy_dpci, self.get_uuid())    def get_virtual_domain(self):        return self.virtual_domain    def get_virtual_bus(self):        return self.virtual_bus    def get_virtual_slot(self):        return self.virtual_slot    def get_virtual_func(self):        return self.virtual_func    def get_virtual_name(self):        return "%04x:%02x:%02x.%01x" % (self.virtual_domain, self.virtual_bus,                                        self.virtual_slot, self.virtual_func)    def get_VM(self):        return self.VM    def get_PPCI(self):        return self.PPCI    def get_hotplug_slot(self):        return self.hotplug_slot

⌨️ 快捷键说明

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