VirtualBox

Changeset 37200 in vbox for trunk/src/VBox/Main/xml


Ignore:
Timestamp:
May 24, 2011 3:34:06 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
71896
Message:

API+Frontends: Generic network attachment driver support which obsoletes the special case for VDE. Big API cleanup in the same area. Adapt all frontends to these changes (full implementation in VBoxManage, minimum implementation in GUI).

Location:
trunk/src/VBox/Main/xml
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/xml/Settings.cpp

    r36527 r37200  
    14801480                  && (mode                  == n.mode)
    14811481                  && (nat                   == n.nat)
    1482                   && (strName               == n.strName)
     1482                  && (strBridgedName        == n.strBridgedName)
     1483                  && (strHostOnlyName       == n.strHostOnlyName)
     1484                  && (strInternalNetworkName == n.strInternalNetworkName)
     1485                  && (strGenericDriver      == n.strGenericDriver)
     1486                  && (genericProperties     == n.genericProperties)
    14831487                  && (ulBootPriority        == n.ulBootPriority)
    1484                   && (fHasDisabledNAT       == n.fHasDisabledNAT)
    14851488                )
    14861489           );
     
    19972000void MachineConfigFile::readAttachedNetworkMode(const xml::ElementNode &elmMode, bool fEnabled, NetworkAdapter &nic)
    19982001{
     2002    NetworkAttachmentType_T enmAttachmentType = NetworkAttachmentType_Null;
     2003
    19992004    if (elmMode.nameEquals("NAT"))
    20002005    {
    2001         if (fEnabled)
    2002             nic.mode = NetworkAttachmentType_NAT;
    2003 
    2004         nic.fHasDisabledNAT = (nic.mode != NetworkAttachmentType_NAT && !fEnabled);
    2005         elmMode.getAttributeValue("network", nic.nat.strNetwork);    // optional network name
     2006        enmAttachmentType = NetworkAttachmentType_NAT;
     2007
    20062008        elmMode.getAttributeValue("hostip", nic.nat.strBindIP);
    20072009        elmMode.getAttributeValue("mtu", nic.nat.u32Mtu);
     
    20482050        }
    20492051    }
    2050     else if (   fEnabled
    2051              && (   (elmMode.nameEquals("HostInterface"))
    2052                  || (elmMode.nameEquals("BridgedInterface")))
    2053             )
    2054     {
    2055         nic.mode = NetworkAttachmentType_Bridged;
    2056         elmMode.getAttributeValue("name", nic.strName);    // optional host interface name
    2057     }
    2058     else if (   fEnabled
    2059              && elmMode.nameEquals("InternalNetwork"))
    2060     {
    2061         nic.mode = NetworkAttachmentType_Internal;
    2062         if (!elmMode.getAttributeValue("name", nic.strName))    // required network name
     2052    else if (   (elmMode.nameEquals("HostInterface"))
     2053             || (elmMode.nameEquals("BridgedInterface")))
     2054    {
     2055        enmAttachmentType = NetworkAttachmentType_Bridged;
     2056
     2057        elmMode.getAttributeValue("name", nic.strBridgedName);  // optional bridged interface name
     2058    }
     2059    else if (elmMode.nameEquals("InternalNetwork"))
     2060    {
     2061        enmAttachmentType = NetworkAttachmentType_Internal;
     2062
     2063        if (!elmMode.getAttributeValue("name", nic.strInternalNetworkName))    // required network name
    20632064            throw ConfigFileError(this, &elmMode, N_("Required InternalNetwork/@name element is missing"));
    20642065    }
    2065     else if (   fEnabled
    2066              && elmMode.nameEquals("HostOnlyInterface"))
    2067     {
    2068         nic.mode = NetworkAttachmentType_HostOnly;
    2069         if (!elmMode.getAttributeValue("name", nic.strName))    // required network name
     2066    else if (elmMode.nameEquals("HostOnlyInterface"))
     2067    {
     2068        enmAttachmentType = NetworkAttachmentType_HostOnly;
     2069
     2070        if (!elmMode.getAttributeValue("name", nic.strHostOnlyName))    // required network name
    20702071            throw ConfigFileError(this, &elmMode, N_("Required HostOnlyInterface/@name element is missing"));
    20712072    }
    2072 #if defined(VBOX_WITH_VDE)
    2073     else if (   fEnabled
    2074              && elmMode.nameEquals("VDE"))
    2075     {
    2076         nic.mode = NetworkAttachmentType_VDE;
    2077         elmMode.getAttributeValue("network", nic.strName);    // optional network name
    2078     }
    2079 #endif
     2073    else if (elmMode.nameEquals("GenericInterface"))
     2074    {
     2075        enmAttachmentType = NetworkAttachmentType_Generic;
     2076
     2077        elmMode.getAttributeValue("driver", nic.strGenericDriver);  // optional network attachment driver
     2078
     2079        // get all properties
     2080        xml::NodesLoop nl(elmMode);
     2081        const xml::ElementNode *pelmModeChild;
     2082        while ((pelmModeChild = nl.forAllNodes()))
     2083        {
     2084            if (pelmModeChild->nameEquals("Property"))
     2085            {
     2086                Utf8Str strPropName, strPropValue;
     2087                if (    (pelmModeChild->getAttributeValue("name", strPropName))
     2088                     && (pelmModeChild->getAttributeValue("value", strPropValue))
     2089                   )
     2090                    nic.genericProperties[strPropName] = strPropValue;
     2091                else
     2092                    throw ConfigFileError(this, pelmModeChild, N_("Required GenericInterface/Property/@name or @value attribute is missing"));
     2093            }
     2094        }
     2095    }
     2096    else if (elmMode.nameEquals("VDE"))
     2097    {
     2098        enmAttachmentType = NetworkAttachmentType_Generic;
     2099
     2100        com::Utf8Str strVDEName;
     2101        elmMode.getAttributeValue("network", strVDEName);   // optional network name
     2102        nic.strGenericDriver = "VDE";
     2103        nic.genericProperties["network"] = strVDEName;
     2104    }
     2105
     2106    if (fEnabled && enmAttachmentType != NetworkAttachmentType_Null)
     2107        nic.mode = enmAttachmentType;
    20802108}
    20812109
     
    37473775
    37483776                case NetworkAttachmentType_Bridged:
    3749                     pelmAdapter->createChild("BridgedInterface")->setAttribute("name", nic.strName);
     3777                    pelmAdapter->createChild("BridgedInterface")->setAttribute("name", nic.strBridgedName);
    37503778                break;
    37513779
    37523780                case NetworkAttachmentType_Internal:
    3753                     pelmAdapter->createChild("InternalNetwork")->setAttribute("name", nic.strName);
     3781                    pelmAdapter->createChild("InternalNetwork")->setAttribute("name", nic.strInternalNetworkName);
    37543782                break;
    37553783
    37563784                case NetworkAttachmentType_HostOnly:
    3757                     pelmAdapter->createChild("HostOnlyInterface")->setAttribute("name", nic.strName);
     3785                    pelmAdapter->createChild("HostOnlyInterface")->setAttribute("name", nic.strHostOnlyName);
    37583786                break;
    3759 
    3760 #if defined(VBOX_WITH_VDE)
    3761                 case NetworkAttachmentType_VDE:
    3762                     pelmAdapter->createChild("VDE")->setAttribute("network", nic.strName);
    3763                 break;
    3764 #endif
    37653787
    37663788                default: /*case NetworkAttachmentType_Null:*/
     
    37713793        {
    37723794            /* m->sv >= SettingsVersion_v1_10 */
    3773             xml::ElementNode *pelmDisabledNode= NULL;
    3774             if (nic.fHasDisabledNAT)
    3775                 pelmDisabledNode = pelmAdapter->createChild("DisabledModes");
    3776             if (nic.fHasDisabledNAT)
    3777                 buildNetworkXML(NetworkAttachmentType_NAT, *pelmDisabledNode, nic);
    3778             buildNetworkXML(nic.mode, *pelmAdapter, nic);
     3795            xml::ElementNode *pelmDisabledNode = NULL;
     3796            pelmDisabledNode = pelmAdapter->createChild("DisabledModes");
     3797            if (nic.mode != NetworkAttachmentType_NAT)
     3798                buildNetworkXML(NetworkAttachmentType_NAT, *pelmDisabledNode, false, nic);
     3799            if (nic.mode != NetworkAttachmentType_Bridged)
     3800                buildNetworkXML(NetworkAttachmentType_Bridged, *pelmDisabledNode, false, nic);
     3801            if (nic.mode != NetworkAttachmentType_Internal)
     3802                buildNetworkXML(NetworkAttachmentType_HostOnly, *pelmDisabledNode, false, nic);
     3803            if (nic.mode != NetworkAttachmentType_HostOnly)
     3804                buildNetworkXML(NetworkAttachmentType_HostOnly, *pelmDisabledNode, false, nic);
     3805            if (nic.mode != NetworkAttachmentType_Generic)
     3806                buildNetworkXML(NetworkAttachmentType_Generic, *pelmDisabledNode, false, nic);
     3807            buildNetworkXML(nic.mode, *pelmAdapter, true, nic);
    37793808        }
    37803809    }
     
    39724001 * @param mode
    39734002 * @param elmParent
    3974  * @param nice
     4003 * @param fEnabled
     4004 * @param nic
    39754005 */
    39764006void MachineConfigFile::buildNetworkXML(NetworkAttachmentType_T mode,
    39774007                                        xml::ElementNode &elmParent,
     4008                                        bool fEnabled,
    39784009                                        const NetworkAdapter &nic)
    39794010{
     
    40434074
    40444075        case NetworkAttachmentType_Bridged:
    4045             elmParent.createChild("BridgedInterface")->setAttribute("name", nic.strName);
     4076            if (fEnabled || !nic.strBridgedName.isEmpty())
     4077                elmParent.createChild("BridgedInterface")->setAttribute("name", nic.strBridgedName);
    40464078        break;
    40474079
    40484080        case NetworkAttachmentType_Internal:
    4049             elmParent.createChild("InternalNetwork")->setAttribute("name", nic.strName);
     4081            if (fEnabled || !nic.strInternalNetworkName.isEmpty())
     4082                elmParent.createChild("InternalNetwork")->setAttribute("name", nic.strInternalNetworkName);
    40504083        break;
    40514084
    40524085        case NetworkAttachmentType_HostOnly:
    4053             elmParent.createChild("HostOnlyInterface")->setAttribute("name", nic.strName);
     4086            if (fEnabled || !nic.strHostOnlyName.isEmpty())
     4087                elmParent.createChild("HostOnlyInterface")->setAttribute("name", nic.strHostOnlyName);
    40544088        break;
    40554089
    4056 #ifdef VBOX_WITH_VDE
    4057         case NetworkAttachmentType_VDE:
    4058             elmParent.createChild("VDE")->setAttribute("network", nic.strName);
     4090        case NetworkAttachmentType_Generic:
     4091            if (fEnabled || !nic.strGenericDriver.isEmpty() || nic.genericProperties.size())
     4092            {
     4093                xml::ElementNode *pelmMode = elmParent.createChild("GenericInterface");
     4094                pelmMode->setAttribute("driver", nic.strGenericDriver);
     4095                for (StringsMap::const_iterator it = nic.genericProperties.begin();
     4096                     it != nic.genericProperties.end();
     4097                     ++it)
     4098                {
     4099                    xml::ElementNode *pelmProp = pelmMode->createChild("Property");
     4100                    pelmProp->setAttribute("name", it->first);
     4101                    pelmProp->setAttribute("value", it->second);
     4102                }
     4103            }
    40594104        break;
    4060 #endif
    40614105
    40624106        default: /*case NetworkAttachmentType_Null:*/
     
    45124556    if (m->sv < SettingsVersion_v1_12)
    45134557    {
    4514         // VirtualBox 4.1 adds a promiscuous mode policy to the network adapters.
     4558        // VirtualBox 4.1 adds a promiscuous mode policy to the network
     4559        // adapters and a generic network driver transport.
    45154560        NetworkAdaptersList::const_iterator netit;
    45164561        for (netit = hardwareMachine.llNetworkAdapters.begin();
     
    45184563             ++netit)
    45194564        {
    4520             if (netit->enmPromiscModePolicy != NetworkAdapterPromiscModePolicy_Deny)
     4565            if (   netit->enmPromiscModePolicy != NetworkAdapterPromiscModePolicy_Deny
     4566                || netit->mode == NetworkAttachmentType_Generic
     4567                || !netit->strGenericDriver.isEmpty()
     4568                || netit->genericProperties.size()
     4569               )
    45214570            {
    45224571                m->sv = SettingsVersion_v1_12;
  • trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd

    r36945 r37200  
    77 *  Common definitions
    88
    9      Copyright (C) 2004-2010 Oracle Corporation
     9     Copyright (C) 2004-2011 Oracle Corporation
    1010
    1111     This file is part of VirtualBox Open Source Edition (OSE), as
     
    767767      </xsd:complexType>
    768768    </xsd:element>
     769    <xsd:element name="Generic">
     770      <xsd:complexType>
     771        <xsd:attribute name="driver" type="xsd:string" use="required"/>
     772      </xsd:complexType>
     773      <xsd:element name="Property" minOccurs="0" maxOccurs="unbounded">
     774        <xsd:complexType>
     775          <xsd:attribute name="name" type="xsd:token" use="required"/>
     776          <xsd:attribute name="value" type="xsd:string" use="required"/>
     777        </xsd:complexType>
     778      </xsd:element>
     779    </xsd:element>
     780    <!-- The DisabledModes tag is not part of this XSD file right now. -->
    769781  </xsd:choice>
    770782  <xsd:attribute name="type" type="TNetworkAdapterType" default="Am79C970A"/>
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