- Timestamp:
- Oct 21, 2019 6:04:10 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134139
- Location:
- trunk
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Config.kmk
r81386 r81422 796 796 # Use new VBoxNetDhcpd instead of old VBoxNetDHCP 797 797 VBOX_WITH_DHCPD = 1 798 # Experimental suport for cloud network integration 799 #VBOX_WITH_CLOUD_NET = 1 798 800 ## @} 799 801 -
trunk/include/VBox/log.h
r81406 r81422 363 363 /** Main group, ICloudClient. */ 364 364 LOG_GROUP_MAIN_CLOUDCLIENT, 365 /** Main group, ICloudNetwork. */ 366 LOG_GROUP_MAIN_CLOUDNETWORK, 365 367 /** Main group, ICloudProfile. */ 366 368 LOG_GROUP_MAIN_CLOUDPROFILE, … … 908 910 "MAIN_CHOICEFORMVALUE", \ 909 911 "MAIN_CLOUDCLIENT", \ 912 "MAIN_CLOUDNETWORK", \ 910 913 "MAIN_CLOUDPROFILE", \ 911 914 "MAIN_CLOUDPROVIDER", \ -
trunk/include/VBox/settings.h
r81299 r81422 430 430 typedef std::list<NATNetwork> NATNetworksList; 431 431 432 #ifdef VBOX_WITH_CLOUD_NET 433 /** 434 * Cloud Networking settings. 435 */ 436 struct CloudNetwork 437 { 438 CloudNetwork(); 439 440 com::Utf8Str strNetworkName; 441 com::Utf8Str strProviderShortName; 442 com::Utf8Str strProfileName; 443 com::Utf8Str strNetworkId; 444 bool fEnabled; 445 }; 446 447 typedef std::list<CloudNetwork> CloudNetworksList; 448 #endif /* VBOX_WITH_CLOUD_NET */ 449 432 450 433 451 class MainConfigFile : public ConfigFileBase … … 438 456 void readMachineRegistry(const xml::ElementNode &elmMachineRegistry); 439 457 void readNATNetworks(const xml::ElementNode &elmNATNetworks); 458 #ifdef VBOX_WITH_CLOUD_NET 459 void readCloudNetworks(const xml::ElementNode &elmCloudNetworks); 460 #endif /* VBOX_WITH_CLOUD_NET */ 440 461 441 462 void write(const com::Utf8Str strFilename); … … 447 468 DHCPServersList llDhcpServers; 448 469 NATNetworksList llNATNetworks; 470 #ifdef VBOX_WITH_CLOUD_NET 471 CloudNetworksList llCloudNetworks; 472 #endif /* VBOX_WITH_CLOUD_NET */ 449 473 StringsMap mapExtraDataItems; 450 474 … … 723 747 StringsMap genericProperties; 724 748 com::Utf8Str strNATNetworkName; 749 #ifdef VBOX_WITH_CLOUD_NET 750 com::Utf8Str strCloudNetworkName; 751 #endif /* VBOX_WITH_CLOUD_NET */ 725 752 uint32_t ulBootPriority; 726 753 com::Utf8Str strBandwidthGroup; // requires settings version 1.13 (VirtualBox 4.2) -
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r81261 r81422 243 243 $(if $(VBOX_WITH_AUDIO_ALSA),VBOX_WITH_AUDIO_ALSA) \ 244 244 $(if $(VBOX_WITH_AUDIO_PULSE),VBOX_WITH_AUDIO_PULSE) \ 245 $(if $(VBOX_WITH_CLOUD_NET),VBOX_WITH_CLOUD_NET) \ 245 246 $(if $(VBOX_WITH_E1000),VBOX_WITH_E1000) \ 246 247 $(if $(VBOX_WITH_NETFLT)$(eq $(KBUILD_TARGET),freebsd),VBOX_WITH_NETFLT) \ -
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
r81163 r81422 346 346 case KNetworkAttachmentType_Generic: return QApplication::translate("UICommon", "Generic Driver", "NetworkAttachmentType"); 347 347 case KNetworkAttachmentType_NATNetwork: return QApplication::translate("UICommon", "NAT Network", "NetworkAttachmentType"); 348 #ifdef VBOX_WITH_CLOUD_NET 349 case KNetworkAttachmentType_Cloud: return QApplication::translate("UICommon", "Cloud Network", "NetworkAttachmentType"); 350 #endif /* VBOX_WITH_CLOUD_NET */ 348 351 default: AssertMsgFailed(("No text for %d", type)); break; 349 352 } -
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
r79365 r81422 1187 1187 case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver: strResult = "GenericDriver"; break; 1188 1188 case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NATNetwork: strResult = "NATNetwork"; break; 1189 #ifdef VBOX_WITH_CLOUD_NET 1190 case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_CloudNetwork: strResult = "CloudNetwork"; break; 1191 #endif /* VBOX_WITH_CLOUD_NET */ 1189 1192 default: 1190 1193 { … … 1209 1212 keys << "GenericDriver"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver; 1210 1213 keys << "NATNetwork"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NATNetwork; 1214 #ifdef VBOX_WITH_CLOUD_NET 1215 keys << "CloudNetwork"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_CloudNetwork; 1216 #endif /* VBOX_WITH_CLOUD_NET */ 1211 1217 /* Invalid type for unknown words: */ 1212 1218 if (!keys.contains(strDetailsElementOptionTypeNetwork, Qt::CaseInsensitive)) -
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
r81309 r81422 718 718 DetailsElementOptionTypeNetwork_GenericDriver = RT_BIT(5), 719 719 DetailsElementOptionTypeNetwork_NATNetwork = RT_BIT(6), 720 #ifdef VBOX_WITH_CLOUD_NET 721 DetailsElementOptionTypeNetwork_CloudNetwork = RT_BIT(7), 722 #endif /* VBOX_WITH_CLOUD_NET */ 720 723 DetailsElementOptionTypeNetwork_Default = 0xFFFF 721 724 }; -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMachineAttributeSetter.cpp
r80215 r81422 244 244 case KNetworkAttachmentType_Generic: comAdapter.SetGenericDriver(nad.m_strName); break; 245 245 case KNetworkAttachmentType_NATNetwork: comAdapter.SetNATNetwork(nad.m_strName); break; 246 #ifdef VBOX_WITH_CLOUD_NET 247 case KNetworkAttachmentType_Cloud: comAdapter.SetCloudNetwork(nad.m_strName); break; 248 #endif /* VBOX_WITH_CLOUD_NET */ 246 249 default: break; 247 250 } -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
r81088 r81422 60 60 , m_strGenericProperties(QString()) 61 61 , m_strNATNetworkName(QString()) 62 #ifdef VBOX_WITH_CLOUD_NET 63 , m_strCloudNetworkName(QString()) 64 #endif /* VBOX_WITH_CLOUD_NET */ 62 65 , m_strMACAddress(QString()) 63 66 , m_fCableConnected(false) … … 79 82 && (m_strGenericProperties == other.m_strGenericProperties) 80 83 && (m_strNATNetworkName == other.m_strNATNetworkName) 84 #ifdef VBOX_WITH_CLOUD_NET 85 && (m_strCloudNetworkName == other.m_strCloudNetworkName) 86 #endif /* VBOX_WITH_CLOUD_NET */ 81 87 && (m_strMACAddress == other.m_strMACAddress) 82 88 && (m_fCableConnected == other.m_fCableConnected) … … 111 117 /** Holds the NAT network name. */ 112 118 QString m_strNATNetworkName; 119 #ifdef VBOX_WITH_CLOUD_NET 120 /** Holds the cloud network name. */ 121 QString m_strCloudNetworkName; 122 #endif /* VBOX_WITH_CLOUD_NET */ 113 123 /** Holds the network adapter MAC address. */ 114 124 QString m_strMACAddress; … … 274 284 m_pAttachmentTypeEditor->setValueName(KNetworkAttachmentType_Generic, wipedOutString(oldAdapterData.m_strGenericDriverName)); 275 285 m_pAttachmentTypeEditor->setValueName(KNetworkAttachmentType_NATNetwork, wipedOutString(oldAdapterData.m_strNATNetworkName)); 286 #ifdef VBOX_WITH_CLOUD_NET 287 m_pAttachmentTypeEditor->setValueName(KNetworkAttachmentType_Cloud, wipedOutString(oldAdapterData.m_strCloudNetworkName)); 288 #endif /* VBOX_WITH_CLOUD_NET */ 276 289 /* Handle attachment type change: */ 277 290 sltHandleAttachmentTypeChange(); … … 331 344 newAdapterData.m_strNATNetworkName = m_pAttachmentTypeEditor->valueName(KNetworkAttachmentType_NATNetwork); 332 345 break; 346 #ifdef VBOX_WITH_CLOUD_NET 347 case KNetworkAttachmentType_Cloud: 348 newAdapterData.m_strCloudNetworkName = m_pAttachmentTypeEditor->valueName(KNetworkAttachmentType_Cloud); 349 break; 350 #endif /* VBOX_WITH_CLOUD_NET */ 333 351 default: 334 352 break; … … 414 432 break; 415 433 } 434 #ifdef VBOX_WITH_CLOUD_NET 435 case KNetworkAttachmentType_Cloud: 436 { 437 if (alternativeName().isNull()) 438 { 439 message.second << tr("No cloud network name is currently specified."); 440 fPass = false; 441 } 442 break; 443 } 444 #endif /* VBOX_WITH_CLOUD_NET */ 416 445 default: 417 446 break; … … 518 547 m_pAttachmentTypeEditor->setValueNames(KNetworkAttachmentType_Generic, m_pParent->genericDriverList()); 519 548 m_pAttachmentTypeEditor->setValueNames(KNetworkAttachmentType_NATNetwork, m_pParent->natNetworkList()); 549 #ifdef VBOX_WITH_CLOUD_NET 550 m_pAttachmentTypeEditor->setValueNames(KNetworkAttachmentType_Cloud, m_pParent->cloudNetworkList()); 551 #endif /* VBOX_WITH_CLOUD_NET */ 520 552 } 521 553 … … 782 814 refreshGenericDriverList(true); 783 815 refreshNATNetworkList(); 816 #ifdef VBOX_WITH_CLOUD_NET 817 refreshCloudNetworkList(); 818 #endif /* VBOX_WITH_CLOUD_NET */ 784 819 785 820 /* Prepare old network data: */ … … 805 840 oldAdapterData.m_strGenericDriverName = wipedOutString(comAdapter.GetGenericDriver()); 806 841 oldAdapterData.m_strNATNetworkName = wipedOutString(comAdapter.GetNATNetwork()); 842 #ifdef VBOX_WITH_CLOUD_NET 843 oldAdapterData.m_strCloudNetworkName = wipedOutString(comAdapter.GetCloudNetwork()); 844 #endif /* VBOX_WITH_CLOUD_NET */ 807 845 oldAdapterData.m_adapterType = comAdapter.GetAdapterType(); 808 846 oldAdapterData.m_promiscuousMode = comAdapter.GetPromiscModePolicy(); … … 1066 1104 } 1067 1105 } 1106 1107 #ifdef VBOX_WITH_CLOUD_NET 1108 void UIMachineSettingsNetworkPage::refreshCloudNetworkList() 1109 { 1110 /* Reload cloud network list: */ 1111 m_cloudNetworkList = UINetworkAttachmentEditor::cloudNetworks(); 1112 } 1113 #endif /* VBOX_WITH_CLOUD_NET */ 1068 1114 1069 1115 void UIMachineSettingsNetworkPage::refreshHostInterfaceList() … … 1279 1325 break; 1280 1326 } 1327 #ifdef VBOX_WITH_CLOUD_NET 1328 case KNetworkAttachmentType_Cloud: 1329 { 1330 if (fSuccess && newAdapterData.m_strCloudNetworkName != oldAdapterData.m_strCloudNetworkName) 1331 { 1332 comAdapter.SetCloudNetwork(newAdapterData.m_strCloudNetworkName); 1333 fSuccess = comAdapter.isOk(); 1334 } 1335 break; 1336 } 1337 #endif /* VBOX_WITH_CLOUD_NET */ 1281 1338 default: 1282 1339 break; -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h
r81088 r81422 57 57 /** Returns the NAT network list. */ 58 58 const QStringList &natNetworkList() const { return m_natNetworkList; } 59 #ifdef VBOX_WITH_CLOUD_NET 60 /** Returns the cloud network list. */ 61 const QStringList &cloudNetworkList() const { return m_cloudNetworkList; } 62 #endif /* VBOX_WITH_CLOUD_NET */ 59 63 60 64 public slots: … … 113 117 /** Repopulates NAT network list. */ 114 118 void refreshNATNetworkList(); 119 #ifdef VBOX_WITH_CLOUD_NET 120 /** Repopulates cloud network list. */ 121 void refreshCloudNetworkList(); 122 #endif /* VBOX_WITH_CLOUD_NET */ 115 123 116 124 /** Loads generic properties from passed @a adapter. */ … … 141 149 /** Holds the NAT network list. */ 142 150 QStringList m_natNetworkList; 151 #ifdef VBOX_WITH_CLOUD_NET 152 /** Holds the cloud network list. */ 153 QStringList m_cloudNetworkList; 154 #endif /* VBOX_WITH_CLOUD_NET */ 143 155 144 156 /** Holds the page data cache instance. */ -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UINetworkAttachmentEditor.cpp
r80275 r81422 31 31 #include "CHostNetworkInterface.h" 32 32 #include "CNATNetwork.h" 33 #ifdef VBOX_WITH_CLOUD_NET 34 #include "CCloudNetwork.h" 35 #endif /* VBOX_WITH_CLOUD_NET */ 33 36 34 37 … … 159 162 return natNetworkList; 160 163 } 164 165 #ifdef VBOX_WITH_CLOUD_NET 166 /* static */ 167 QStringList UINetworkAttachmentEditor::cloudNetworks() 168 { 169 QStringList cloudNetworkList; 170 foreach (const CCloudNetwork &comNetwork, uiCommon().virtualBox().GetCloudNetworks()) 171 cloudNetworkList << comNetwork.GetNetworkName(); 172 return cloudNetworkList; 173 } 174 #endif /* VBOX_WITH_CLOUD_NET */ 161 175 162 176 void UINetworkAttachmentEditor::retranslateUi() … … 338 352 << KNetworkAttachmentType_Bridged << KNetworkAttachmentType_Internal 339 353 << KNetworkAttachmentType_HostOnly << KNetworkAttachmentType_Generic; 354 #ifdef VBOX_WITH_CLOUD_NET 355 attachmentTypes.append(KNetworkAttachmentType_Cloud); 356 #endif /* VBOX_WITH_CLOUD_NET */ 340 357 for (int i = 0; i < attachmentTypes.size(); ++i) 341 358 { … … 382 399 case KNetworkAttachmentType_HostOnly: 383 400 case KNetworkAttachmentType_NATNetwork: 401 #ifdef VBOX_WITH_CLOUD_NET 402 case KNetworkAttachmentType_Cloud: 403 #endif /* VBOX_WITH_CLOUD_NET */ 384 404 { 385 405 /* If adapter list is empty => add 'Not selected' item: */ … … 445 465 "manager window.")); 446 466 break; 467 #ifdef VBOX_WITH_CLOUD_NET 468 case KNetworkAttachmentType_Cloud: 469 m_pComboName->setWhatsThis(tr("(experimental) Holds the name of the cloud network that this network card " 470 "will be connected to. You can add and remove cloud networks " 471 "using the global network settings in the virtual machine " 472 "manager window.")); 473 break; 474 #endif /* VBOX_WITH_CLOUD_NET */ 447 475 default: 448 476 m_pComboName->setWhatsThis(QString()); … … 461 489 case KNetworkAttachmentType_Generic: 462 490 case KNetworkAttachmentType_NATNetwork: 491 #ifdef VBOX_WITH_CLOUD_NET 492 case KNetworkAttachmentType_Cloud: 493 #endif /* VBOX_WITH_CLOUD_NET */ 463 494 fSuccess = !valueName(valueType()).isEmpty(); 464 495 break; … … 481 512 case KNetworkAttachmentType_Generic: return UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver; 482 513 case KNetworkAttachmentType_NATNetwork: return UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NATNetwork; 514 #ifdef VBOX_WITH_CLOUD_NET 515 case KNetworkAttachmentType_Cloud: return UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_CloudNetwork; 516 #endif /* VBOX_WITH_CLOUD_NET */ 483 517 default: return UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid; 484 518 } -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UINetworkAttachmentEditor.h
r80213 r81422 85 85 /** Returns NAT network list. */ 86 86 static QStringList natNetworks(); 87 #ifdef VBOX_WITH_CLOUD_NET 88 /** Returns cloud network list. */ 89 static QStringList cloudNetworks(); 90 #endif /* VBOX_WITH_CLOUD_NET */ 87 91 88 92 protected: -
trunk/src/VBox/Main/Makefile.kmk
r80849 r81422 118 118 ifdef VBOX_WITH_NETFLT 119 119 VBOX_MAIN_DEFS += VBOX_WITH_NETFLT 120 endif 121 ifdef VBOX_WITH_CLOUD_NET 122 VBOX_MAIN_DEFS += VBOX_WITH_CLOUD_NET 120 123 endif 121 124 ifdef VBOX_WITH_PCI_PASSTHROUGH … … 556 559 src-server/NetworkServiceRunner.cpp \ 557 560 src-server/NATNetworkImpl.cpp \ 561 $(if $(VBOX_WITH_CLOUD_NET), \ 562 src-server/CloudGateway.cpp \ 563 src-server/CloudNetworkImpl.cpp \ 564 ,) \ 558 565 src-server/GuestOSTypeImpl.cpp \ 559 566 src-server/HostDnsService.cpp \ -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r81398 r81422 1734 1734 </interface> 1735 1735 1736 1737 <!-- 1738 // ICloudNetwork 1739 ///////////////////////////////////////////////////////////////////////// 1740 --> 1741 1742 <interface name="ICloudNetwork" extends="$unknown" 1743 uuid="d8e3496e-735f-4fde-8a54-427d49409b5f" 1744 wsmap="managed" 1745 reservedMethods="4" reservedAttributes="3" 1746 > 1747 1748 <attribute name="networkName" type="wstring"> 1749 <desc> 1750 TBD: User-friendly, descriptive name of cloud subnet. For example, domain 1751 names of subnet and vcn, separated by dot. 1752 </desc> 1753 </attribute> 1754 <attribute name="enabled" type="boolean"/> 1755 <attribute name="provider" type="wstring"> 1756 <desc> 1757 Cloud provider short name. 1758 </desc> 1759 </attribute> 1760 <attribute name="profile" type="wstring"> 1761 <desc> 1762 Cloud profile name. 1763 </desc> 1764 </attribute> 1765 <attribute name="networkId" type="wstring"> 1766 <desc> 1767 Cloud network id. 1768 </desc> 1769 </attribute> 1770 </interface> 1736 1771 1737 1772 <!-- … … 2646 2681 </attribute> 2647 2682 2683 <attribute name="cloudNetworks" type="ICloudNetwork" safearray="yes" readonly="yes"> 2684 <desc> 2685 Names of all configured cloud networks. 2686 </desc> 2687 </attribute> 2688 2648 2689 <attribute name="cloudProviderManager" type="ICloudProviderManager" readonly="yes"> 2649 2690 <desc> … … 3383 3424 <method name="removeNATNetwork"> 3384 3425 <param name="network" type="INATNetwork" dir="in"/> 3426 </method> 3427 3428 <!-- bunch of methods to manage cloud networks --> 3429 <method name="createCloudNetwork"> 3430 <!-- Here we create a record in cloud network array with specified name. 3431 --> 3432 <param name="networkName" type="wstring" dir="in"/> 3433 <param name="network" type="ICloudNetwork" dir="return"/> 3434 </method> 3435 3436 <!-- 3437 Returns the cloud network by name. 3438 --> 3439 <method name="findCloudNetworkByName"> 3440 <param name="networkName" type="wstring" dir="in"/> 3441 <param name="network" type="ICloudNetwork" dir="return"/> 3442 </method> 3443 <!-- 3444 Deletes given cloud network. 3445 --> 3446 <method name="removeCloudNetwork"> 3447 <param name="network" type="ICloudNetwork" dir="in"/> 3385 3448 </method> 3386 3449 … … 19318 19381 <const name="Generic" value="5"/> 19319 19382 <const name="NATNetwork" value="6"/> 19383 <const name="Cloud" value="7"/> 19320 19384 </enum> 19321 19385 … … 19461 19525 <desc> 19462 19526 Name of the driver to use for the "Generic" network attachment type. 19527 </desc> 19528 </attribute> 19529 19530 <attribute name="cloudNetwork" type="wstring"> 19531 <desc> 19532 Name of the cloud network the VM is attached to. 19463 19533 </desc> 19464 19534 </attribute> -
trunk/src/VBox/Main/include/MachineImpl.h
r81299 r81422 45 45 # include "ThreadTask.h" 46 46 #endif 47 #ifdef VBOX_WITH_CLOUD_NET 48 # include "CloudNetworkImpl.h" 49 # include "CloudGateway.h" 50 #endif /* VBOX_WITH_CLOUD_NET */ 47 51 48 52 // generated header … … 199 203 // list of files to delete in Delete(); this list is filled by Unregister() 200 204 std::list<Utf8Str> llFilesToDelete; 201 }; 205 206 #ifdef VBOX_WITH_CLOUD_NET 207 GatewayInfo mGatewayInfo; 208 #endif /* VBOX_WITH_CLOUD_NET */ 209 }; 202 210 203 211 /** … … 759 767 pm::CollectorGuest *mCollectorGuest; 760 768 #endif /* VBOX_WITH_RESOURCE_USAGE_API */ 769 770 #ifdef VBOX_WITH_CLOUD_NET 771 HRESULT i_connectToCloudNetwork(ProgressProxy *aProgress); 772 HRESULT i_disconnectFromCloudNetwork(); 773 #endif /* VBOX_WITH_CLOUD_NET */ 761 774 762 775 Machine * const mPeer; -
trunk/src/VBox/Main/include/NetworkAdapterImpl.h
r76562 r81422 85 85 HRESULT getGenericDriver(com::Utf8Str &aGenericDriver); 86 86 HRESULT setGenericDriver(const com::Utf8Str &aGenericDriver); 87 HRESULT getCloudNetwork(com::Utf8Str &aCloudNetwork); 88 HRESULT setCloudNetwork(const com::Utf8Str &aCloudNetwork); 87 89 HRESULT getCableConnected(BOOL *aCableConnected); 88 90 HRESULT setCableConnected(BOOL aCableConnected); -
trunk/src/VBox/Main/include/VirtualBoxImpl.h
r80849 r81422 53 53 class AutostartDb; 54 54 class NATNetwork; 55 #ifdef VBOX_WITH_CLOUD_NET 56 class CloudNetwork; 57 #endif /* VBOX_WITH_CLOUD_NET */ 55 58 56 59 … … 204 207 int i_natNetworkRefInc(const Utf8Str &aNetworkName); 205 208 int i_natNetworkRefDec(const Utf8Str &aNetworkName); 209 210 #ifdef VBOX_WITH_CLOUD_NET 211 HRESULT i_findCloudNetworkByName(const com::Utf8Str &aNetworkName, 212 ComObjPtr<CloudNetwork> *aNetwork = NULL); 213 #endif /* VBOX_WITH_CLOUD_NET */ 206 214 207 215 ComObjPtr<GuestOSType> i_getUnknownOSType(); … … 319 327 HRESULT getInternalNetworks(std::vector<com::Utf8Str> &aInternalNetworks); 320 328 HRESULT getGenericNetworkDrivers(std::vector<com::Utf8Str> &aGenericNetworkDrivers); 329 HRESULT getCloudNetworks(std::vector<ComPtr<ICloudNetwork> > &aCloudNetworks); 321 330 HRESULT getCloudProviderManager(ComPtr<ICloudProviderManager> &aCloudProviderManager); 322 331 … … 378 387 ComPtr<INATNetwork> &aNetwork); 379 388 HRESULT removeNATNetwork(const ComPtr<INATNetwork> &aNetwork); 389 HRESULT createCloudNetwork(const com::Utf8Str &aNetworkName, 390 ComPtr<ICloudNetwork> &aNetwork); 391 HRESULT findCloudNetworkByName(const com::Utf8Str &aNetworkName, 392 ComPtr<ICloudNetwork> &aNetwork); 393 HRESULT removeCloudNetwork(const ComPtr<ICloudNetwork> &aNetwork); 380 394 HRESULT checkFirmwarePresent(FirmwareType_T aFirmwareType, 381 395 const com::Utf8Str &aVersion, -
trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
r81345 r81422 5802 5802 } 5803 5803 5804 #ifdef VBOX_WITH_CLOUD_NET 5805 case NetworkAttachmentType_Cloud: 5806 { 5807 hrc = aNetworkAdapter->COMGETTER(CloudNetwork)(bstr.asOutParam()); H(); 5808 if (!bstr.isEmpty()) 5809 { 5810 InsertConfigString(pLunL0, "Driver", "IntNet"); 5811 InsertConfigNode(pLunL0, "Config", &pCfg); 5812 InsertConfigString(pCfg, "Network", BstrFmt("cloud-%ls", bstr)); 5813 InsertConfigInteger(pCfg, "TrunkType", kIntNetTrunkType_WhateverNone); 5814 InsertConfigString(pCfg, "IfPolicyPromisc", pszPromiscuousGuestPolicy); 5815 networkName = bstr; 5816 trunkType = Bstr(TRUNKTYPE_WHATEVER); 5817 } 5818 break; 5819 } 5820 #endif /* VBOX_WITH_CLOUD_NET */ 5821 5804 5822 default: 5805 5823 AssertMsgFailed(("should not get here!\n")); … … 5821 5839 case NetworkAttachmentType_Generic: 5822 5840 case NetworkAttachmentType_NATNetwork: 5841 #ifdef VBOX_WITH_CLOUD_NET 5842 case NetworkAttachmentType_Cloud: 5843 #endif /* VBOX_WITH_CLOUD_NET */ 5823 5844 { 5824 5845 if (SUCCEEDED(hrc) && RT_SUCCESS(rc)) -
trunk/src/VBox/Main/src-server/ApplianceImpl.cpp
r78923 r81422 329 329 case NetworkAttachmentType_NATNetwork: strType = "NATNetwork"; break; 330 330 case NetworkAttachmentType_Null: strType = "Null"; break; 331 case NetworkAttachmentType_Cloud: strType = "Cloud"; break; 331 332 #ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK 332 333 case NetworkAttachmentType_32BitHack: AssertFailedBreak(); /* (compiler warnings) */ -
trunk/src/VBox/Main/src-server/MachineImpl.cpp
r81299 r81422 50 50 #include "ExtPackManagerImpl.h" 51 51 #include "MachineLaunchVMCommonWorker.h" 52 #ifdef VBOX_WITH_CLOUD_NET 53 #include "ApplianceImpl.h" 54 #include "CloudGateway.h" 55 #endif /* VBOX_WITH_CLOUD_NET */ 52 56 53 57 // generated header … … 3476 3480 if (SUCCEEDED(rc)) 3477 3481 { 3482 #ifdef VBOX_WITH_CLOUD_NET 3483 i_connectToCloudNetwork(progress); 3484 #endif /* VBOX_WITH_CLOUD_NET */ 3485 3478 3486 rc = i_launchVMProcess(control, strFrontend, aEnvironmentChanges, progress); 3479 3487 if (SUCCEEDED(rc)) … … 7430 7438 return (mUSBControllers->size() > 0); 7431 7439 } 7440 7441 #ifdef VBOX_WITH_CLOUD_NET 7442 HRESULT Machine::i_connectToCloudNetwork(ProgressProxy *aProgress) 7443 { 7444 LogFlowThisFuncEnter(); 7445 AssertReturn(aProgress, E_FAIL); 7446 7447 HRESULT hrc = E_FAIL; 7448 Bstr name; 7449 7450 LogFlowThisFunc(("Checking if cloud network needs to be connected\n")); 7451 for (ULONG slot = 0; slot < mNetworkAdapters.size(); ++slot) 7452 { 7453 BOOL enabled; 7454 hrc = mNetworkAdapters[slot]->COMGETTER(Enabled)(&enabled); 7455 if ( FAILED(hrc) 7456 || !enabled) 7457 continue; 7458 7459 NetworkAttachmentType_T type; 7460 hrc = mNetworkAdapters[slot]->COMGETTER(AttachmentType)(&type); 7461 if ( SUCCEEDED(hrc) 7462 && type == NetworkAttachmentType_Cloud) 7463 { 7464 if (name.isNotEmpty()) 7465 { 7466 LogRel(("VM '%s' uses multiple cloud network attachments. '%ls' will be ignored.\n", 7467 mUserData->s.strName.c_str(), name.raw())); 7468 continue; 7469 } 7470 hrc = mNetworkAdapters[slot]->COMGETTER(CloudNetwork)(name.asOutParam()); 7471 if (SUCCEEDED(hrc)) 7472 { 7473 LogRel(("VM '%s' uses cloud network '%ls'\n", 7474 mUserData->s.strName.c_str(), name.raw())); 7475 } 7476 } 7477 } 7478 if (name.isNotEmpty()) 7479 { 7480 LogFlowThisFunc(("Connecting to cloud network '%ls'...\n", name.raw())); 7481 ComObjPtr<CloudNetwork> network; 7482 hrc = mParent->i_findCloudNetworkByName(name, &network); 7483 if (FAILED(hrc)) 7484 { 7485 LogRel(("Could not find cloud network '%ls'.\n", name.raw())); 7486 return hrc; 7487 } 7488 GatewayInfo gateways; 7489 hrc = startGateways(mParent, network, gateways); 7490 if (SUCCEEDED(hrc)) 7491 { 7492 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 7493 mData->mGatewayInfo = gateways; 7494 } 7495 } 7496 else 7497 LogFlowThisFunc(("VM '%s' has no cloud network attachments.\n", mUserData->s.strName.c_str())); 7498 7499 LogFlowThisFuncLeave(); 7500 return hrc; 7501 } 7502 7503 HRESULT Machine::i_disconnectFromCloudNetwork() 7504 { 7505 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 7506 GatewayInfo gateways(mData->mGatewayInfo); 7507 mData->mGatewayInfo.setNull(); 7508 alock.release(); 7509 7510 HRESULT hrc = stopGateways(mParent, gateways); 7511 return hrc; 7512 } 7513 #endif /* VBOX_WITH_CLOUD_NET */ 7514 7432 7515 7433 7516 /** … … 13187 13270 { 13188 13271 LogFlowThisFuncEnter(); 13272 13273 #ifdef VBOX_WITH_CLOUD_NET 13274 mPeer->i_disconnectFromCloudNetwork(); 13275 #endif /* VBOX_WITH_CLOUD_NET */ 13189 13276 13190 13277 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); -
trunk/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
r76592 r81422 724 724 725 725 726 HRESULT NetworkAdapter::getCloudNetwork(com::Utf8Str &aCloudNetwork) 727 { 728 #ifdef VBOX_WITH_CLOUD_NET 729 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 730 731 aCloudNetwork = mData->strCloudNetworkName; 732 733 return S_OK; 734 #else /* !VBOX_WITH_CLOUD_NET */ 735 NOREF(aCloudNetwork); 736 return E_NOTIMPL; 737 #endif /* !VBOX_WITH_CLOUD_NET */ 738 } 739 740 HRESULT NetworkAdapter::setCloudNetwork(const com::Utf8Str &aCloudNetwork) 741 { 742 #ifdef VBOX_WITH_CLOUD_NET 743 /* the machine needs to be mutable */ 744 AutoMutableOrSavedOrRunningStateDependency adep(mParent); 745 if (FAILED(adep.rc())) return adep.rc(); 746 747 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 748 749 if (mData->strCloudNetworkName != aCloudNetwork) 750 { 751 /* if an empty/null string is to be set, Cloud networking must be 752 * turned off */ 753 if ( aCloudNetwork.isEmpty() 754 && mData->fEnabled 755 && mData->mode == NetworkAttachmentType_Cloud) 756 { 757 return setError(E_FAIL, 758 tr("Empty or null Cloud network name is not valid")); 759 } 760 mData.backup(); 761 mData->strCloudNetworkName = aCloudNetwork; 762 763 // leave the lock before informing callbacks 764 alock.release(); 765 766 #if 0 767 // @todo Implement dynamic re-attachment of cloud network 768 AutoWriteLock mlock(mParent COMMA_LOCKVAL_SRC_POS); // mParent is const, no need to lock 769 mParent->i_setModified(Machine::IsModified_NetworkAdapters); 770 mlock.release(); 771 772 /* When changing the internal network, adapt the CFGM logic to make this 773 * change immediately effect and to notify the guest that the network 774 * might have changed, therefore changeAdapter=TRUE. */ 775 mParent->i_onNetworkAdapterChange(this, TRUE); 776 #else 777 mParent->i_onNetworkAdapterChange(this, FALSE); 778 #endif 779 } 780 return S_OK; 781 #else /* !VBOX_WITH_CLOUD_NET */ 782 NOREF(aCloudNetwork); 783 return E_NOTIMPL; 784 #endif /* !VBOX_WITH_CLOUD_NET */ 785 } 786 787 726 788 HRESULT NetworkAdapter::getCableConnected(BOOL *aConnected) 727 789 { -
trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
r81369 r81422 71 71 #include "DHCPServerImpl.h" 72 72 #include "NATNetworkImpl.h" 73 #ifdef VBOX_WITH_CLOUD_NET 74 #include "CloudNetworkImpl.h" 75 #endif /* VBOX_WITH_CLOUD_NET */ 73 76 #ifdef VBOX_WITH_RESOURCE_USAGE_API 74 77 # include "PerformanceImpl.h" … … 219 222 typedef ObjectsList<DHCPServer> DHCPServersOList; 220 223 typedef ObjectsList<NATNetwork> NATNetworksOList; 224 #ifdef VBOX_WITH_CLOUD_NET 225 typedef ObjectsList<CloudNetwork> CloudNetworksOList; 226 #endif /* VBOX_WITH_CLOUD_NET */ 221 227 222 228 typedef std::map<Guid, ComPtr<IProgress> > ProgressMap; … … 324 330 , lockNATNetworks(LOCKCLASS_LISTOFOTHEROBJECTS) 325 331 , allNATNetworks(lockNATNetworks) 332 #ifdef VBOX_WITH_CLOUD_NET 333 , lockCloudNetworks(LOCKCLASS_LISTOFOTHEROBJECTS) 334 , allCloudNetworks(lockCloudNetworks) 335 #endif /* VBOX_WITH_CLOUD_NET */ 326 336 , mtxProgressOperations(LOCKCLASS_PROGRESSLIST) 327 337 , pClientWatcher(NULL) … … 409 419 RWLockHandle lockNATNetworks; 410 420 NATNetworksOList allNATNetworks; 421 #ifdef VBOX_WITH_CLOUD_NET 422 RWLockHandle lockCloudNetworks; 423 CloudNetworksOList allCloudNetworks; 424 #endif /* VBOX_WITH_CLOUD_NET */ 411 425 412 426 RWLockHandle mtxProgressOperations; … … 686 700 AssertComRCThrowRC(rc); 687 701 } 702 703 #ifdef VBOX_WITH_CLOUD_NET 704 /* net services - cloud networks */ 705 for (settings::CloudNetworksList::const_iterator it = m->pMainConfigFile->llCloudNetworks.begin(); 706 it != m->pMainConfigFile->llCloudNetworks.end(); 707 ++it) 708 { 709 ComObjPtr<CloudNetwork> pCloudNetwork; 710 rc = pCloudNetwork.createObject(); 711 AssertComRCThrowRC(rc); 712 rc = pCloudNetwork->init(this, ""); 713 AssertComRCThrowRC(rc); 714 rc = pCloudNetwork->i_loadSettings(*it); 715 AssertComRCThrowRC(rc); 716 m->allCloudNetworks.addChild(pCloudNetwork); 717 AssertComRCThrowRC(rc); 718 } 719 #endif /* VBOX_WITH_CLOUD_NET */ 688 720 689 721 /* events */ … … 1466 1498 1467 1499 return S_OK; 1500 } 1501 1502 /** 1503 * Cloud Network 1504 */ 1505 #ifdef VBOX_WITH_CLOUD_NET 1506 HRESULT VirtualBox::i_findCloudNetworkByName(const com::Utf8Str &aNetworkName, 1507 ComObjPtr<CloudNetwork> *aNetwork) 1508 { 1509 HRESULT rc = E_FAIL; 1510 ComPtr<CloudNetwork> found; 1511 Bstr bstrNameToFind(aNetworkName); 1512 1513 AutoReadLock alock(m->allCloudNetworks.getLockHandle() COMMA_LOCKVAL_SRC_POS); 1514 1515 for (CloudNetworksOList::const_iterator it = m->allCloudNetworks.begin(); 1516 it != m->allCloudNetworks.end(); 1517 ++it) 1518 { 1519 Bstr bstrCloudNetworkName; 1520 rc = (*it)->COMGETTER(NetworkName)(bstrCloudNetworkName.asOutParam()); 1521 if (FAILED(rc)) return rc; 1522 1523 if (bstrCloudNetworkName == bstrNameToFind) 1524 { 1525 *aNetwork = *it; 1526 rc = S_OK; 1527 break; 1528 } 1529 } 1530 return rc; 1531 } 1532 #endif /* VBOX_WITH_CLOUD_NET */ 1533 1534 HRESULT VirtualBox::createCloudNetwork(const com::Utf8Str &aNetworkName, 1535 ComPtr<ICloudNetwork> &aNetwork) 1536 { 1537 #ifdef VBOX_WITH_CLOUD_NET 1538 ComObjPtr<CloudNetwork> cloudNetwork; 1539 cloudNetwork.createObject(); 1540 HRESULT rc = cloudNetwork->init(this, aNetworkName); 1541 if (FAILED(rc)) return rc; 1542 1543 m->allCloudNetworks.addChild(cloudNetwork); 1544 1545 cloudNetwork.queryInterfaceTo(aNetwork.asOutParam()); 1546 1547 return rc; 1548 #else /* !VBOX_WITH_CLOUD_NET */ 1549 NOREF(aNetworkName); 1550 NOREF(aNetwork); 1551 return E_NOTIMPL; 1552 #endif /* !VBOX_WITH_CLOUD_NET */ 1553 } 1554 1555 HRESULT VirtualBox::findCloudNetworkByName(const com::Utf8Str &aNetworkName, 1556 ComPtr<ICloudNetwork> &aNetwork) 1557 { 1558 #ifdef VBOX_WITH_CLOUD_NET 1559 ComObjPtr<CloudNetwork> network; 1560 HRESULT hrc = i_findCloudNetworkByName(aNetworkName, &network); 1561 if (SUCCEEDED(hrc)) 1562 network.queryInterfaceTo(aNetwork.asOutParam()); 1563 return hrc; 1564 #else /* !VBOX_WITH_CLOUD_NET */ 1565 NOREF(aNetworkName); 1566 NOREF(aNetwork); 1567 return E_NOTIMPL; 1568 #endif /* !VBOX_WITH_CLOUD_NET */ 1569 } 1570 1571 HRESULT VirtualBox::removeCloudNetwork(const ComPtr<ICloudNetwork> &aNetwork) 1572 { 1573 #ifdef VBOX_WITH_CLOUD_NET 1574 Bstr name; 1575 HRESULT rc = aNetwork->COMGETTER(NetworkName)(name.asOutParam()); 1576 if (FAILED(rc)) 1577 return rc; 1578 ICloudNetwork *p = aNetwork; 1579 CloudNetwork *network = static_cast<CloudNetwork *>(p); 1580 1581 AutoCaller autoCaller(this); 1582 AssertComRCReturnRC(autoCaller.rc()); 1583 1584 AutoCaller cloudNetworkCaller(network); 1585 AssertComRCReturnRC(cloudNetworkCaller.rc()); 1586 1587 m->allCloudNetworks.removeChild(network); 1588 1589 { 1590 AutoWriteLock vboxLock(this COMMA_LOCKVAL_SRC_POS); 1591 rc = i_saveSettings(); 1592 vboxLock.release(); 1593 1594 if (FAILED(rc)) 1595 m->allCloudNetworks.addChild(network); 1596 } 1597 return rc; 1598 #else /* !VBOX_WITH_CLOUD_NET */ 1599 NOREF(aNetwork); 1600 return E_NOTIMPL; 1601 #endif /* !VBOX_WITH_CLOUD_NET */ 1602 } 1603 1604 HRESULT VirtualBox::getCloudNetworks(std::vector<ComPtr<ICloudNetwork> > &aCloudNetworks) 1605 { 1606 #ifdef VBOX_WITH_CLOUD_NET 1607 AutoReadLock al(m->allCloudNetworks.getLockHandle() COMMA_LOCKVAL_SRC_POS); 1608 aCloudNetworks.resize(m->allCloudNetworks.size()); 1609 size_t i = 0; 1610 for (CloudNetworksOList::const_iterator it = m->allCloudNetworks.begin(); 1611 it != m->allCloudNetworks.end(); ++it) 1612 (*it).queryInterfaceTo(aCloudNetworks[i++].asOutParam()); 1613 return S_OK; 1614 #else /* !VBOX_WITH_CLOUD_NET */ 1615 NOREF(aCloudNetworks); 1616 return E_NOTIMPL; 1617 #endif /* !VBOX_WITH_CLOUD_NET */ 1468 1618 } 1469 1619 … … 4930 5080 #endif 4931 5081 5082 #ifdef VBOX_WITH_CLOUD_NET 5083 m->pMainConfigFile->llCloudNetworks.clear(); 5084 { 5085 AutoReadLock cloudNetworkLock(m->allCloudNetworks.getLockHandle() COMMA_LOCKVAL_SRC_POS); 5086 for (CloudNetworksOList::const_iterator it = m->allCloudNetworks.begin(); 5087 it != m->allCloudNetworks.end(); 5088 ++it) 5089 { 5090 settings::CloudNetwork n; 5091 rc = (*it)->i_saveSettings(n); 5092 if (FAILED(rc)) throw rc; 5093 m->pMainConfigFile->llCloudNetworks.push_back(n); 5094 } 5095 } 5096 #endif /* VBOX_WITH_CLOUD_NET */ 4932 5097 // leave extra data alone, it's still in the config file 4933 5098 -
trunk/src/VBox/Main/xml/Settings.cpp
r81299 r81422 1691 1691 } 1692 1692 1693 #ifdef VBOX_WITH_CLOUD_NET 1694 /** 1695 * Constructor. Needs to set sane defaults which stand the test of time. 1696 */ 1697 CloudNetwork::CloudNetwork() : 1698 fEnabled(true), 1699 strProviderShortName("OCI"), 1700 strProfileName("Default") 1701 { 1702 } 1703 #endif /* VBOX_WITH_CLOUD_NET */ 1704 1693 1705 1694 1706 … … 2003 2015 } 2004 2016 } 2017 2018 #ifdef VBOX_WITH_CLOUD_NET 2019 /** 2020 * Reads in the \<CloudNetworks\> chunk. 2021 * @param elmCloudNetworks 2022 */ 2023 void MainConfigFile::readCloudNetworks(const xml::ElementNode &elmCloudNetworks) 2024 { 2025 xml::NodesLoop nl1(elmCloudNetworks); 2026 const xml::ElementNode *pelmNet; 2027 while ((pelmNet = nl1.forAllNodes())) 2028 { 2029 if (pelmNet->nameEquals("CloudNetwork")) 2030 { 2031 CloudNetwork net; 2032 if ( pelmNet->getAttributeValue("name", net.strNetworkName) 2033 && pelmNet->getAttributeValue("provider", net.strProviderShortName) 2034 && pelmNet->getAttributeValue("profile", net.strProfileName) 2035 && pelmNet->getAttributeValue("id", net.strNetworkId) 2036 && pelmNet->getAttributeValue("enabled", net.fEnabled) ) 2037 { 2038 llCloudNetworks.push_back(net); 2039 } 2040 else 2041 throw ConfigFileError(this, pelmNet, N_("Required CloudNetwork/@name, @provider, @profile, @id or @enabled attribute is missing")); 2042 } 2043 } 2044 } 2045 #endif /* VBOX_WITH_CLOUD_NET */ 2005 2046 2006 2047 /** … … 2229 2270 if (pelmLevel4Child->nameEquals("NATNetworks")) 2230 2271 readNATNetworks(*pelmLevel4Child); 2272 #ifdef VBOX_WITH_CLOUD_NET 2273 if (pelmLevel4Child->nameEquals("CloudNetworks")) 2274 readCloudNetworks(*pelmLevel4Child); 2275 #endif /* VBOX_WITH_CLOUD_NET */ 2231 2276 } 2232 2277 } … … 2276 2321 void MainConfigFile::bumpSettingsVersionIfNeeded() 2277 2322 { 2323 #ifdef VBOX_WITH_CLOUD_NET 2324 if (m->sv < SettingsVersion_v1_18) 2325 { 2326 // VirtualBox 6.1 adds support for cloud networks. 2327 if (!llCloudNetworks.empty()) 2328 m->sv = SettingsVersion_v1_18; 2329 } 2330 #endif /* VBOX_WITH_CLOUD_NET */ 2331 2278 2332 if (m->sv < SettingsVersion_v1_16) 2279 2333 { … … 2362 2416 } 2363 2417 } 2418 2419 #ifdef VBOX_WITH_CLOUD_NET 2420 xml::ElementNode *pelmCloudNetworks; 2421 /* don't create entry if no cloud networks are registered. */ 2422 if (!llCloudNetworks.empty()) 2423 { 2424 pelmCloudNetworks = pelmNetServiceRegistry->createChild("CloudNetworks"); 2425 for (CloudNetworksList::const_iterator it = llCloudNetworks.begin(); 2426 it != llCloudNetworks.end(); 2427 ++it) 2428 { 2429 const CloudNetwork &n = *it; 2430 xml::ElementNode *pelmThis = pelmCloudNetworks->createChild("CloudNetwork"); 2431 pelmThis->setAttribute("name", n.strNetworkName); 2432 pelmThis->setAttribute("provider", n.strProviderShortName); 2433 pelmThis->setAttribute("profile", n.strProfileName); 2434 pelmThis->setAttribute("id", n.strNetworkId); 2435 pelmThis->setAttribute("enabled", (n.fEnabled) ? 1 : 0); // too bad we chose 1 vs. 0 here 2436 } 2437 } 2438 #endif /* VBOX_WITH_CLOUD_NET */ 2364 2439 2365 2440 … … 2859 2934 && strBridgedName.isEmpty() 2860 2935 && strInternalNetworkName.isEmpty() 2936 #ifdef VBOX_WITH_CLOUD_NET 2937 && strCloudNetworkName.isEmpty() 2938 #endif /* VBOX_WITH_CLOUD_NET */ 2861 2939 && strHostOnlyName.isEmpty() 2862 2940 && areGenericDriverDefaultSettings() … … 2872 2950 && (mode != NetworkAttachmentType_Bridged ? strBridgedName.isEmpty() : true) 2873 2951 && (mode != NetworkAttachmentType_Internal ? strInternalNetworkName.isEmpty() : true) 2952 #ifdef VBOX_WITH_CLOUD_NET 2953 && (mode != NetworkAttachmentType_Cloud ? strCloudNetworkName.isEmpty() : true) 2954 #endif /* VBOX_WITH_CLOUD_NET */ 2874 2955 && (mode != NetworkAttachmentType_HostOnly ? strHostOnlyName.isEmpty() : true) 2875 2956 && (mode != NetworkAttachmentType_Generic ? areGenericDriverDefaultSettings() : true) … … 2899 2980 && strHostOnlyName == n.strHostOnlyName 2900 2981 && strInternalNetworkName == n.strInternalNetworkName 2982 #ifdef VBOX_WITH_CLOUD_NET 2983 && strCloudNetworkName == n.strCloudNetworkName 2984 #endif /* VBOX_WITH_CLOUD_NET */ 2901 2985 && strGenericDriver == n.strGenericDriver 2902 2986 && genericProperties == n.genericProperties … … 3971 4055 nic.genericProperties["network"] = strVDEName; 3972 4056 } 4057 #ifdef VBOX_WITH_CLOUD_NET 4058 else if (elmMode.nameEquals("CloudNetwork")) 4059 { 4060 enmAttachmentType = NetworkAttachmentType_Cloud; 4061 4062 // optional network name, cannot be required or we have trouble with 4063 // settings which are saved before configuring the network name 4064 elmMode.getAttributeValue("name", nic.strCloudNetworkName); 4065 } 4066 #endif /* VBOX_WITH_CLOUD_NET */ 3973 4067 3974 4068 if (fEnabled && enmAttachmentType != NetworkAttachmentType_Null) … … 6449 6543 if (nic.mode != NetworkAttachmentType_NATNetwork) 6450 6544 buildNetworkXML(NetworkAttachmentType_NATNetwork, false, *pelmDisabledNode, nic); 6545 #ifdef VBOX_WITH_CLOUD_NET 6546 // @todo Bump settings version! 6547 if (nic.mode != NetworkAttachmentType_Cloud) 6548 buildNetworkXML(NetworkAttachmentType_Cloud, false, *pelmDisabledNode, nic); 6549 #endif /* VBOX_WITH_CLOUD_NET */ 6451 6550 } 6452 6551 buildNetworkXML(nic.mode, true, *pelmAdapter, nic); … … 6934 7033 } 6935 7034 break; 7035 7036 #ifdef VBOX_WITH_CLOUD_NET 7037 case NetworkAttachmentType_Cloud: 7038 // For the currently active network attachment type we have to 7039 // generate the tag, otherwise the attachment type is lost. 7040 if (fEnabled || !nic.strCloudNetworkName.isEmpty()) 7041 { 7042 xml::ElementNode *pelmMode = elmParent.createChild("CloudNetwork"); 7043 if (!nic.strCloudNetworkName.isEmpty()) 7044 pelmMode->setAttribute("name", nic.strCloudNetworkName); 7045 } 7046 break; 7047 #endif /* VBOX_WITH_CLOUD_NET */ 6936 7048 6937 7049 default: /*case NetworkAttachmentType_Null:*/
Note:
See TracChangeset
for help on using the changeset viewer.