VirtualBox

Ignore:
Timestamp:
Oct 17, 2023 11:45:00 AM (15 months ago)
Author:
vboxsync
Message:

FE/VBoxManage,FE/Qt,Main/{VirtualBox.xidl,Appliance}: Add the ability to
export and import VMs which contain an NVMe storage controller.
bugref:10159 ticketref:19320

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp

    r101057 r101472  
    419419
    420420                const settings::NetworkAdaptersList &llNetworkAdapters = pNewDesc->m->pConfig->hardwareMachine.llNetworkAdapters;
    421                 /* Check for the constrains */
     421                /* Check for the constraints */
    422422                if (llNetworkAdapters.size() > maxNetworkAdapters)
    423423                    i_addWarning(tr("Virtual appliance \"%s\" was configured with %zu network adapters however "
     
    449449                uint32_t const maxNetworkAdapters = PlatformProperties::s_getMaxNetworkAdapters(ChipsetType_PIIX3); /** @todo BUGBUG x86 only for now. */
    450450
    451                 /* Check for the constrains */
     451                /* Check for the constraints */
    452452                if (cEthernetAdapters > maxNetworkAdapters)
    453453                    i_addWarning(tr("Virtual appliance \"%s\" was configured with %zu network adapters however "
     
    582582            uint16_t cSCSIused = 0; NOREF(cSCSIused);
    583583            uint16_t cVIRTIOSCSIused = 0; NOREF(cVIRTIOSCSIused);
     584            uint16_t cNVMeused = 0; NOREF(cNVMeused);
    584585
    585586            ovf::ControllersMap::const_iterator hdcIt;
     
    594595                {
    595596                    case ovf::HardDiskController::IDE:
    596                         /* Check for the constrains */
     597                        /* Check for the constraints */
    597598                        if (cIDEused < 4)
    598599                        {
     
    621622
    622623                    case ovf::HardDiskController::SATA:
    623                         /* Check for the constrains */
     624                        /* Check for the constraints */
    624625                        if (cSATAused < 1)
    625626                        {
     
    645646
    646647                    case ovf::HardDiskController::SCSI:
    647                         /* Check for the constrains */
     648                        /* Check for the constraints */
    648649                        if (cSCSIused < 1)
    649650                        {
     
    674675
    675676                    case ovf::HardDiskController::VIRTIOSCSI:
    676                         /* Check for the constrains */
     677                        /* Check for the constraints */
    677678                        if (cVIRTIOSCSIused < 1)
    678679                        {
     
    693694                        }
    694695                        ++cVIRTIOSCSIused;
     696                    break;
     697
     698                    case ovf::HardDiskController::NVMe:
     699                        /* Check for the constraints */
     700                        if (cNVMeused < 1)
     701                        {
     702                            pNewDesc->i_addEntry(VirtualSystemDescriptionType_HardDiskControllerNVMe,
     703                                                 hdc.strIdController,
     704                                                 hdc.strControllerType,
     705                                                 "NVMe");
     706                        }
     707                        else
     708                        {
     709                            /* Warn only once */
     710                            if (cNVMeused == 1)
     711                                i_addWarning(tr("Virtual appliance \"%s\" was configured with more than one "
     712                                                "NVMe controller however VirtualBox supports a maximum "
     713                                                "of one NVMe controller."),
     714                                                vsysThis.strName.c_str());
     715
     716                        }
     717                        ++cNVMeused;
    695718                    break;
    696719
     
    48564879    }
    48574880
     4881    /* Storage controller NVMe */
     4882    std::list<VirtualSystemDescriptionEntry*> vsdeHDCNVMe =
     4883        vsdescThis->i_findByType(VirtualSystemDescriptionType_HardDiskControllerNVMe);
     4884    if (vsdeHDCNVMe.size() > 1)
     4885        throw setError(VBOX_E_FILE_ERROR,
     4886                       tr("Too many NVMe controllers in OVF; import facility only supports one"));
     4887    if (!vsdeHDCNVMe.empty())
     4888    {
     4889        ComPtr<IStorageController> pController;
     4890        Utf8Str strName("NVMe");
     4891        const Utf8Str &hdcVBox = vsdeHDCNVMe.front()->strVBoxCurrent;
     4892        if (hdcVBox == "NVMe")
     4893        {
     4894            hrc = pNewMachine->AddStorageController(Bstr(strName).raw(), StorageBus_PCIe, pController.asOutParam());
     4895            if (FAILED(hrc)) throw hrc;
     4896
     4897            hrc = pController->COMSETTER(ControllerType)(StorageControllerType_NVMe);
     4898            if (FAILED(hrc)) throw hrc;
     4899        }
     4900        else
     4901            throw setError(VBOX_E_FILE_ERROR, tr("Invalid NVMe controller type \"%s\""), hdcVBox.c_str());
     4902    }
     4903
    48584904    /* Now its time to register the machine before we add any storage devices */
    48594905    hrc = mVirtualBox->RegisterMachine(pNewMachine);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette