settings.h revision a12929133f77ffa755a13a7d5d2ff3d87c41c9c5
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * Settings file data structures.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * These structures are created by the settings file loader and filled with values
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * copied from the raw XML data. This was all new with VirtualBox 3.1 and allows us
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * to finally make the XML reader version-independent and read VirtualBox XML files
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * from earlier and even newer (future) versions without requiring complicated,
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * tedious and error-prone XSLT conversions.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * It is this file that defines all structures that map VirtualBox global and
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * machine settings to XML files. These structures are used by the rest of Main,
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * even though this header file does not require anything else in Main.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * Note: Headers in Main code have been tweaked to only declare the structures
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * defined here so that this header need only be included from code files that
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * actually use these structures.
e2760cdc84c692bc46cfaf5018d313db2f122acavboxsync * Copyright (C) 2007-2010 Sun Microsystems, Inc.
d46ee884c41b808b239563b1978468aae12e33a2vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d46ee884c41b808b239563b1978468aae12e33a2vboxsync * available from http://www.virtualbox.org. This file is free software;
d46ee884c41b808b239563b1978468aae12e33a2vboxsync * you can redistribute it and/or modify it under the terms of the GNU
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * General Public License (GPL) as published by the Free Software
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * The contents of this file may alternatively be used under the terms
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * of the Common Development and Distribution License Version 1.0
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * VirtualBox OSE distribution, in which case the provisions of the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * CDDL are applicable instead of those of the GPL.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * You may elect to license modified versions of this file under the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * terms and conditions of either the GPL or the CDDL or both.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * additional information or have any questions.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync////////////////////////////////////////////////////////////////////////////////
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync// Helper classes
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync////////////////////////////////////////////////////////////////////////////////
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync// ExtraDataItem (used by both VirtualBox.xml and machines XML)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::map<com::Utf8Str, com::Utf8Str> ExtraDataItemsMap;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::list<USBDeviceFilter> USBDeviceFiltersList;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * Common base class for both MainConfigFile and MachineConfigFile
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * which contains some common logic for both.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readExtraData(const xml::ElementNode &elmExtraData,
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readUSBDeviceFilters(const xml::ElementNode &elmDeviceFilters,
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void writeExtraData(xml::ElementNode &elmParent, const ExtraDataItemsMap &me);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void writeUSBDeviceFilters(xml::ElementNode &elmParent,
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync////////////////////////////////////////////////////////////////////////////////
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync// Structures shared between Machine XML and VirtualBox.xml
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync////////////////////////////////////////////////////////////////////////////////
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * USB device filter definition. This struct is used both in MainConfigFile
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * (for global USB filters) and MachineConfigFile (for machine filters).
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync USBDeviceFilterAction_T action; // only used with host USB filters
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync com::Utf8Str strRemote; // irrelevant for host USB objects
fd0cf98cb3eafc5c96b7e95d934b01c5df4785fbvboxsync uint32_t ulMaskedInterfaces; // irrelevant for host USB objects
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync////////////////////////////////////////////////////////////////////////////////
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync////////////////////////////////////////////////////////////////////////////////
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::map<com::Utf8Str, com::Utf8Str> PropertiesMap;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync // the following are for hard disks only:
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync bool fAutoReset; // optional, only for diffs, default is false
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::list<MachineRegistryEntry> MachinesRegistry;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync typedef enum {Error, HardDisk, DVDImage, FloppyImage} MediaType;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readMedium(MediaType t, const xml::ElementNode &elmMedium, MediaList &llMedia);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readMediaRegistry(const xml::ElementNode &elmMediaRegistry);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readMachineRegistry(const xml::ElementNode &elmMachineRegistry);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readDHCPServers(const xml::ElementNode &elmDHCPServers);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync////////////////////////////////////////////////////////////////////////////////
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync// Machine XML structures
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync////////////////////////////////////////////////////////////////////////////////
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync com::Utf8Str strName; // with NAT: nat network or empty;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync // with bridged: host interface or empty;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync // otherwise: network name (required)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::list<NetworkAdapter> NetworkAdaptersList;
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync return (this == &a)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::list<GuestProperty> GuestPropertiesList;
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::map<uint32_t, DeviceType_T> BootOrderMap;
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync return ( (this == &c)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * Representation of Machine hardware; this is used in the MachineConfigFile.hardwareMachine
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync com::Utf8Str strVersion; // hardware version, optional
7a5aa60c341d7f14da337f31a3ed1afcee98bc8avboxsync bool fCpuHotPlug; // requires settings version 1.10 (VirtualBox 3.2)
7a5aa60c341d7f14da337f31a3ed1afcee98bc8avboxsync CpuList llCpus; // requires settings version 1.10 (VirtualBox 3.2)
7a5aa60c341d7f14da337f31a3ed1afcee98bc8avboxsync bool fHpetEnabled; // requires settings version 1.10 (VirtualBox 3.2)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync BootOrderMap mapBootOrder; // item 0 has highest priority
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync fAccelerate2DVideo; // requires settings version 1.8 (VirtualBox 3.1)
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync FirmwareType_T firmwareType; // requires settings version 1.9 (VirtualBox 3.1)
c606fa3531314e32f0ae90495618aeae47418477vboxsync PointingHidType_T pointingHidType; // requires settings version 1.10 (VirtualBox 3.2)
c606fa3531314e32f0ae90495618aeae47418477vboxsync KeyboardHidType_T keyboardHidType; // requires settings version 1.10 (VirtualBox 3.2)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync // technically these two have no business in the hardware section, but for some
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync // clever reason <Hardware> is where they are in the XML....
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync * A device attached to a storage controller. This can either be a
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync * hard disk or a DVD drive or a floppy drive and also specifies
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync * which medium is "in" the drive; as a result, this is a combination
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync * of the Main IMedium and IMediumAttachment interfaces.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync DeviceType_T deviceType; // only HardDisk, DVD or Floppy are allowed
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync // DVDs can be in pass-through mode:
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync // if an image file is attached to the device (ISO, RAW, or hard disk image such as VDI),
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync // this is its UUID; it depends on deviceType which media registry this then needs to
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync // be looked up in. If no image file (only permitted for DVDs and floppies), then the UUID is NULL
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync // for DVDs and floppies, the attachment can also be a host device:
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync com::Utf8Str strHostDriveSrc; // if != NULL, value of <HostDrive>/@src
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::list<AttachedDevice> AttachedDevicesList;
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync // only for when controllerType == StorageControllerType_IntelAhci:
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsynctypedef std::list<StorageController> StorageControllersList;
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * We wrap the storage controllers list into an extra struct so we can
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * use an undefined struct without needing std::list<> in all the headers.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by MachineConfigFile::operator==(), or otherwise
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * your settings might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync com::Utf8Str strStateFile; // for online snapshots only
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * MachineConfigFile represents an XML machine configuration. All the machine settings
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * that go out to the XML (or are read from it) are in here.
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * NOTE: If you add any fields in here, you must update a) the constructor and b)
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * the operator== which is used by Machine::saveSettings(), or otherwise your settings
8cd393943ea52545c4d063f5a94436639f0f80b6vboxsync * might never get saved.
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync MachineConfigFile(const com::Utf8Str *pstrFilename);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readNetworkAdapters(const xml::ElementNode &elmHardware, NetworkAdaptersList &ll);
34aaaf212fe61ccafbae15eb832d6062ba548799vboxsync void readCpuIdTree(const xml::ElementNode &elmCpuid, CpuIdLeafsList &ll);
6e12ccc60ac657fb87e27b7a2b26e0a63bebe024vboxsync void readCpuTree(const xml::ElementNode &elmCpu, CpuList &ll);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readSerialPorts(const xml::ElementNode &elmUART, SerialPortsList &ll);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readParallelPorts(const xml::ElementNode &elmLPT, ParallelPortsList &ll);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readGuestProperties(const xml::ElementNode &elmGuestProperties, Hardware &hw);
f83c571186f95b28f63a1acb516edaf6ee372419vboxsync void readStorageControllerAttributes(const xml::ElementNode &elmStorageController, StorageController &sctl);
f83c571186f95b28f63a1acb516edaf6ee372419vboxsync void readHardware(const xml::ElementNode &elmHardware, Hardware &hw, Storage &strg);
f83c571186f95b28f63a1acb516edaf6ee372419vboxsync void readHardDiskAttachments_pre1_7(const xml::ElementNode &elmHardDiskAttachments, Storage &strg);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readStorageControllers(const xml::ElementNode &elmStorageControllers, Storage &strg);
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync void readDVDAndFloppies_pre1_9(const xml::ElementNode &elmHardware, Storage &strg);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readSnapshot(const xml::ElementNode &elmSnapshot, Snapshot &snap);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void readMachine(const xml::ElementNode &elmMachine);
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync void writeHardware(xml::ElementNode &elmParent, const Hardware &hw, const Storage &strg);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void writeStorageControllers(xml::ElementNode &elmParent, const Storage &st);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync void writeSnapshot(xml::ElementNode &elmParent, const Snapshot &snap);
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync bool fCurrentStateModified; // optional, default is true
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync RTTIMESPEC timeLastStateChange; // optional, defaults to now
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync SnapshotsList llFirstSnapshot; // first snapshot or empty list if there's none
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync} // namespace settings
d46ee884c41b808b239563b1978468aae12e33a2vboxsync#endif /* ___VBox_settings_h */