VirtualBox

Changeset 48538 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Sep 19, 2013 3:17:43 PM (11 years ago)
Author:
vboxsync
Message:

Main/NetworkAdapter+Machine+Appliance+SystemProperties+Medium+Console+Settings+IDL: make NAT networking a separate network attachment type which improves the user experience, store the necessary settings, plus changing the design of the methods which will move images and entire VMs, they lacked a progress object
Frontends/VirtualBox: adapted fully, can configure NAT networks with proper drop down list support
Frontends/VBoxManage: also supports NAT networks completely, and adds the long missing code to list intnets

Location:
trunk/src/VBox/Frontends
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp

    r48406 r48538  
    761761                        CHECK_ERROR_RET(adapter, COMSETTER(AttachmentType)(NetworkAttachmentType_Generic), 1);
    762762                    }
     763                    else if (!strcmp(a->argv[2], "natnetwork"))
     764                    {
     765                        if (a->argc <= 3)
     766                        {
     767                            errorArgument("Missing argument to '%s'", a->argv[2]);
     768                            rc = E_FAIL;
     769                            break;
     770                        }
     771                        CHECK_ERROR_RET(adapter, COMSETTER(Enabled)(TRUE), 1);
     772                        CHECK_ERROR_RET(adapter, COMSETTER(NATNetwork)(Bstr(a->argv[3]).raw()), 1);
     773                        CHECK_ERROR_RET(adapter, COMSETTER(AttachmentType)(NetworkAttachmentType_NATNetwork), 1);
     774                    }
    763775                    /** @todo obsolete, remove eventually */
    764776                    else if (!strcmp(a->argv[2], "vde"))
     
    14581470                break;
    14591471            }
    1460            
     1472
    14611473        }
    14621474        else
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r48429 r48538  
    123123                           "%s list [--long|-l]%s vms|runningvms|ostypes|hostdvds|hostfloppies|\n"
    124124#if defined(VBOX_WITH_NETFLT)
    125                      "                            bridgedifs|hostonlyifs|dhcpservers|hostinfo|\n"
     125                     "                            intnets|bridgedifs|hostonlyifs|natnets|dhcpservers|\n"
    126126#else
    127                      "                            bridgedifs|dhcpservers|hostinfo|\n"
    128 #endif
    129                      "                            hostcpuids|hddbackends|hdds|dvds|floppies|\n"
     127                     "                            intnets|bridgedifs|natnets|dhcpservers|hostinfo|\n"
     128#endif
     129                     "                            hostinfo|hostcpuids|hddbackends|hdds|dvds|floppies|\n"
    130130                     "                            usbhost|usbfilters|systemproperties|extpacks|\n"
    131131                     "                            groups\n"
     
    217217#endif
    218218                     "|\n"
    219                      "                                        generic"
     219                     "                                        generic|natnetwork"
    220220                     "]\n"
    221221                     "                            [--nictype<1-N> Am79C970A|Am79C973"
     
    240240#endif
    241241                     "                            [--intnet<1-N> <network name>]\n"
     242                     "                            [--nat-network<1-N> <network name>]\n"
     243                     "                            [--nicgenericdrv<1-N> <driver>\n"
    242244                     "                            [--natnet<1-N> <network>|default]\n"
    243                      "                            [--nicgenericdrv<1-N> <driver>\n"
    244245                     "                            [--natsettings<1-N> [<mtu>],[<socksnd>],\n"
    245246                     "                                                [<sockrcv>],[<tcpsnd>],\n"
     
    440441                     "                            setlinkstate<1-N> on|off |\n"
    441442#if defined(VBOX_WITH_NETFLT)
    442                      "                            nic<1-N> null|nat|bridged|intnet|hostonly|generic"
    443                      "\n"
    444                      "                                     [<devicename>] |\n"
     443                     "                            nic<1-N> null|nat|bridged|intnet|hostonly|generic|\n"
     444                     "                                     natnetwork [<devicename>] |\n"
    445445#else /* !VBOX_WITH_NETFLT */
    446                      "                            nic<1-N> null|nat|bridged|intnet|generic\n"
     446                     "                            nic<1-N> null|nat|bridged|intnet|generic|natnetwork\n"
    447447                     "                                     [<devicename>] |\n"
    448448#endif /* !VBOX_WITH_NETFLT */
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp

    r47991 r48538  
    10731073                        break;
    10741074                    }
     1075
    10751076                    case NetworkAttachmentType_Generic:
    10761077                    {
     
    11031104                        break;
    11041105                    }
     1106
     1107                    case NetworkAttachmentType_NATNetwork:
     1108                    {
     1109                        Bstr strNetwork;
     1110                        nic->COMGETTER(NATNetwork)(strNetwork.asOutParam());
     1111                        if (details == VMINFO_MACHINEREADABLE)
     1112                        {
     1113                            RTPrintf("nat-network%d=\"%ls\"\n", currentNIC + 1, strNetwork.raw());
     1114                            strAttachment = "natnetwork";
     1115                        }
     1116                        else
     1117                            strAttachment = Utf8StrFmt("NAT Network '%s'", Utf8Str(strNetwork).c_str());
     1118                        break;
     1119                    }
     1120
    11051121                    default:
    11061122                        strAttachment = "unknown";
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp

    r48097 r48538  
    7676
    7777/**
     78 * List internal networks.
     79 *
     80 * @returns See produceList.
     81 * @param   pVirtualBox         Reference to the IVirtualBox smart pointer.
     82 */
     83static HRESULT listInternalNetworks(const ComPtr<IVirtualBox> pVirtualBox)
     84{
     85    HRESULT rc;
     86    com::SafeArray<BSTR> internalNetworks;
     87    CHECK_ERROR(pVirtualBox, COMGETTER(InternalNetworks)(ComSafeArrayAsOutParam(internalNetworks)));
     88    for (size_t i = 0; i < internalNetworks.size(); ++i)
     89    {
     90        RTPrintf("Name:        %ls\n", internalNetworks[i]);
     91    }
     92    return rc;
     93}
     94
     95
     96/**
    7897 * List network interfaces information (bridged/host only).
    7998 *
    8099 * @returns See produceList.
    81100 * @param   pVirtualBox         Reference to the IVirtualBox smart pointer.
     101 * @param   fIsBridged          Selects between listing host interfaces (for
     102 *                              use with bridging) or host only interfaces.
    82103 */
    83104static HRESULT listNetworkInterfaces(const ComPtr<IVirtualBox> pVirtualBox,
     
    283304
    284305        /* File extensions */
    285         com::SafeArray <BSTR> fileExtensions;
    286         com::SafeArray <DeviceType_T> deviceTypes;
     306        com::SafeArray<BSTR> fileExtensions;
     307        com::SafeArray<DeviceType_T> deviceTypes;
    287308        CHECK_ERROR(mediumFormats[i],
    288309                    DescribeFileExtensions(ComSafeArrayAsOutParam(fileExtensions), ComSafeArrayAsOutParam(deviceTypes)));
     
    296317
    297318        /* Configuration keys */
    298         com::SafeArray <BSTR> propertyNames;
    299         com::SafeArray <BSTR> propertyDescriptions;
    300         com::SafeArray <DataType_T> propertyTypes;
    301         com::SafeArray <ULONG> propertyFlags;
    302         com::SafeArray <BSTR> propertyDefaults;
     319        com::SafeArray<BSTR> propertyNames;
     320        com::SafeArray<BSTR> propertyDescriptions;
     321        com::SafeArray<DataType_T> propertyTypes;
     322        com::SafeArray<ULONG> propertyFlags;
     323        com::SafeArray<BSTR> propertyDefaults;
    303324        CHECK_ERROR(mediumFormats[i],
    304325                    DescribeProperties(ComSafeArrayAsOutParam(propertyNames),
     
    722743    kListHostDvds,
    723744    kListHostFloppies,
     745    kListInternalNetworks,
    724746    kListBridgedInterfaces,
    725747#if defined(VBOX_WITH_NETFLT)
     
    894916        }
    895917
     918        case kListInternalNetworks:
     919            rc = listInternalNetworks(pVirtualBox);
     920            break;
     921
    896922        case kListBridgedInterfaces:
    897923#if defined(VBOX_WITH_NETFLT)
     
    10381064                net->COMGETTER(Enabled)(&fEnabled);
    10391065                RTPrintf("Enabled:        %s\n", fEnabled ? "Yes" : "No");
    1040                
     1066
    10411067#define PRINT_STRING_ARRAY(title) \
    10421068                if (strs.size() > 0)    \
     
    10461072                    for (;j < strs.size(); ++j) \
    10471073                        RTPrintf("        %s\n", Utf8Str(strs[j]).c_str()); \
    1048                 } 
     1074                }
    10491075
    10501076                com::SafeArray<BSTR> strs;
     
    10961122        { "hostdvds",           kListHostDvds,           RTGETOPT_REQ_NOTHING },
    10971123        { "hostfloppies",       kListHostFloppies,       RTGETOPT_REQ_NOTHING },
     1124        { "intnets",            kListInternalNetworks,   RTGETOPT_REQ_NOTHING },
    10981125        { "hostifs",            kListBridgedInterfaces,  RTGETOPT_REQ_NOTHING }, /* backward compatibility */
    10991126        { "bridgedifs",         kListBridgedInterfaces,  RTGETOPT_REQ_NOTHING },
     
    11011128        { "hostonlyifs",        kListHostOnlyInterfaces, RTGETOPT_REQ_NOTHING },
    11021129#endif
     1130        { "natnetworks",        kListNatNetworks,        RTGETOPT_REQ_NOTHING },
     1131        { "natnets",            kListNatNetworks,        RTGETOPT_REQ_NOTHING },
    11031132        { "hostinfo",           kListHostInfo,           RTGETOPT_REQ_NOTHING },
    11041133        { "hostcpuids",         kListHostCpuIDs,         RTGETOPT_REQ_NOTHING },
     
    11131142        { "extpacks",           kListExtPacks,           RTGETOPT_REQ_NOTHING },
    11141143        { "groups",             kListGroups,             RTGETOPT_REQ_NOTHING },
    1115         { "natnetworks",        kListNatNetworks,        RTGETOPT_REQ_NOTHING },
    11161144    };
    11171145
     
    11411169            case kListHostDvds:
    11421170            case kListHostFloppies:
     1171            case kListInternalNetworks:
    11431172            case kListBridgedInterfaces:
    11441173#if defined(VBOX_WITH_NETFLT)
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp

    r48406 r48538  
    113113    MODIFYVM_HOSTONLYADAPTER,
    114114    MODIFYVM_INTNET,
     115    MODIFYVM_GENERICDRV,
     116    MODIFYVM_NATNETWORKNAME,
    115117    MODIFYVM_NATNET,
    116     MODIFYVM_GENERICDRV,
    117118    MODIFYVM_NATBINDIP,
    118119    MODIFYVM_NATSETTINGS,
     
    273274    { "--hostonlyadapter",          MODIFYVM_HOSTONLYADAPTER,           RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
    274275    { "--intnet",                   MODIFYVM_INTNET,                    RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
     276    { "--nicgenericdrv",            MODIFYVM_GENERICDRV,                RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
     277    { "--nat-network",              MODIFYVM_NATNETWORKNAME,            RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
     278    { "--natnetwork",               MODIFYVM_NATNETWORKNAME,            RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
    275279    { "--natnet",                   MODIFYVM_NATNET,                    RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
    276     { "--nicgenericdrv",            MODIFYVM_GENERICDRV,                RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
    277280    { "--natbindip",                MODIFYVM_NATBINDIP,                 RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
    278281    { "--natsettings",              MODIFYVM_NATSETTINGS,               RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
     
    14091412                    CHECK_ERROR(nic, COMSETTER(AttachmentType)(NetworkAttachmentType_Generic));
    14101413                }
     1414                else if (!RTStrICmp(ValueUnion.psz, "natnetwork"))
     1415                {
     1416
     1417                    CHECK_ERROR(nic, COMSETTER(Enabled)(TRUE));
     1418                    CHECK_ERROR(nic, COMSETTER(AttachmentType)(NetworkAttachmentType_NATNetwork));
     1419                }
    14111420                else
    14121421                {
     
    14931502
    14941503                CHECK_ERROR(nic, COMSETTER(GenericDriver)(Bstr(ValueUnion.psz).raw()));
     1504                break;
     1505            }
     1506
     1507            case MODIFYVM_NATNETWORKNAME:
     1508            {
     1509                ComPtr<INetworkAdapter> nic;
     1510
     1511                CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
     1512                ASSERT(nic);
     1513
     1514                CHECK_ERROR(nic, COMSETTER(NATNetwork)(Bstr(ValueUnion.psz).raw()));
    14951515                break;
    14961516            }
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp

    r48537 r48538  
    77
    88/*
    9  * Copyright (C) 2012 Oracle Corporation
     9 * Copyright (C) 2012-2013 Oracle Corporation
    1010 *
    1111 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    290290        case KNetworkAttachmentType_HostOnly: return QApplication::translate("VBoxGlobal", "Host-only Adapter", "NetworkAttachmentType");
    291291        case KNetworkAttachmentType_Generic:  return QApplication::translate("VBoxGlobal", "Generic Driver", "NetworkAttachmentType");
     292        case KNetworkAttachmentType_NATNetwork:  return QApplication::translate("VBoxGlobal", "NAT Network", "NetworkAttachmentType");
    292293        default: AssertMsgFailed(("No text for %d", type)); break;
    293294    }
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp

    r48534 r48538  
    13971397                    attType = attType.arg (tr ("Generic, '%1'",
    13981398                        "details report (network)").arg (adapter.GetGenericDriver()));
     1399                else if (type == KNetworkAttachmentType_NATNetwork)
     1400                    attType = attType.arg (tr ("NAT network, '%1'",
     1401                        "details report (network)").arg (adapter.GetNATNetwork()));
    13991402                else
    14001403                    attType = attType.arg (gpConverter->toString (type));
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp

    r48314 r48538  
    677677                            break;
    678678                        }
     679                        case KNetworkAttachmentType_NATNetwork:
     680                        {
     681                            strAttachmentType = strAttachmentType.arg(QApplication::translate("UIGDetails", "NAT Network, '%1'", "details (network)")
     682                                                                      .arg(adapter.GetNATNetwork()));
     683                            break;
     684                        }
    679685                        default:
    680686                        {
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp

    r47944 r48538  
    77
    88/*
    9  * Copyright (C) 2008-2012 Oracle Corporation
     9 * Copyright (C) 2008-2013 Oracle Corporation
    1010 *
    1111 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    3030#include "CNATEngine.h"
    3131#include "CHostNetworkInterface.h"
     32#include "CNATNetwork.h"
    3233
    3334/* Other VBox includes: */
     
    142143            adapterData.m_strGenericProperties = m_pGenericPropertiesTextEdit->toPlainText();
    143144            break;
     145        case KNetworkAttachmentType_NATNetwork:
     146            adapterData.m_strNATNetworkName = alternativeName();
     147            break;
    144148        default:
    145149            break;
     
    211215            {
    212216                message.second << tr("No generic driver is currently selected.");
     217                fPass = false;
     218            }
     219            break;
     220        }
     221        case KNetworkAttachmentType_NATNetwork:
     222        {
     223            if (alternativeName().isNull())
     224            {
     225                message.second << tr("No NAT network name is currently specified.");
    213226                fPass = false;
    214227            }
     
    289302        case KNetworkAttachmentType_Generic:
    290303            strResult = m_strGenericDriverName;
     304            break;
     305        case KNetworkAttachmentType_NATNetwork:
     306            strResult = m_strNATNetworkName;
    291307            break;
    292308        default:
     
    420436            break;
    421437        }
     438        case KNetworkAttachmentType_NATNetwork:
     439        {
     440            m_pAdapterNameCombo->setWhatsThis(tr("Enter the name of the NAT network that this network card "
     441                                                 "will be connected to. You can create and remove adapters "
     442                                                 "using the global network settings in the virtual machine "
     443                                                 "manager window."));
     444            m_pAdapterNameCombo->setEditable(true);
     445            break;
     446        }
    422447        default:
    423448        {
     
    480505                    emit sigTabUpdated();
    481506            }
     507            break;
     508        }
     509        case KNetworkAttachmentType_NATNetwork:
     510        {
     511            QString newName(m_pAdapterNameCombo->itemData(m_pAdapterNameCombo->currentIndex()).toString() == QString(pEmptyItemCode) ||
     512                            m_pAdapterNameCombo->currentText().isEmpty() ? QString() : m_pAdapterNameCombo->currentText());
     513            if (m_strNATNetworkName != newName)
     514                m_strNATNetworkName = newName;
    482515            break;
    483516        }
     
    560593        m_pAttachmentTypeComboBox->insertItem(iAttachmentTypeIndex, gpConverter->toString(KNetworkAttachmentType_Generic));
    561594        m_pAttachmentTypeComboBox->setItemData(iAttachmentTypeIndex, KNetworkAttachmentType_Generic);
     595        m_pAttachmentTypeComboBox->setItemData(iAttachmentTypeIndex, m_pAttachmentTypeComboBox->itemText(iAttachmentTypeIndex), Qt::ToolTipRole);
     596        ++iAttachmentTypeIndex;
     597        m_pAttachmentTypeComboBox->insertItem(iAttachmentTypeIndex, gpConverter->toString(KNetworkAttachmentType_NATNetwork));
     598        m_pAttachmentTypeComboBox->setItemData(iAttachmentTypeIndex, KNetworkAttachmentType_NATNetwork);
    562599        m_pAttachmentTypeComboBox->setItemData(iAttachmentTypeIndex, m_pAttachmentTypeComboBox->itemText(iAttachmentTypeIndex), Qt::ToolTipRole);
    563600        ++iAttachmentTypeIndex;
     
    659696            m_pAdapterNameCombo->insertItems(0, m_pParent->genericDriverList());
    660697            break;
     698        case KNetworkAttachmentType_NATNetwork:
     699            m_pAdapterNameCombo->insertItems(0, m_pParent->natNetworkList());
     700            break;
    661701        default:
    662702            break;
     
    670710            case KNetworkAttachmentType_Bridged:
    671711            case KNetworkAttachmentType_HostOnly:
     712            case KNetworkAttachmentType_NATNetwork:
    672713            {
    673714                /* If adapter list is empty => add 'Not selected' item: */
     
    706747        case KNetworkAttachmentType_HostOnly:
    707748        case KNetworkAttachmentType_Generic:
     749        case KNetworkAttachmentType_NATNetwork:
    708750        {
    709751            m_pAdapterNameCombo->setCurrentIndex(position(m_pAdapterNameCombo, alternativeName()));
     
    770812    refreshHostInterfaceList();
    771813    refreshGenericDriverList(true);
     814    refreshNATNetworkList();
    772815
    773816    /* For each network adapter: */
     
    917960                                updateGenericProperties(adapter, adapterData.m_strGenericProperties);
    918961                                break;
     962                            case KNetworkAttachmentType_NATNetwork:
     963                                adapter.SetNATNetwork(adapterData.m_strNATNetworkName);
     964                                break;
    919965                            default:
    920966                                break;
     
    10911137}
    10921138
     1139void UIMachineSettingsNetworkPage::refreshNATNetworkList()
     1140{
     1141    /* Reload NAT network list: */
     1142    m_natNetworkList.clear();
     1143    const CNATNetworkVector &nws = vboxGlobal().virtualBox().GetNATNetworks();
     1144    for (int i = 0; i < nws.size(); ++i)
     1145    {
     1146        const CNATNetwork &nw = nws[i];
     1147        m_natNetworkList << nw.GetNetworkName();
     1148    }
     1149}
     1150
    10931151/* static */
    10941152QStringList UIMachineSettingsNetworkPage::otherInternalNetworkList()
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h

    r47944 r48538  
    66
    77/*
    8  * Copyright (C) 2008-2012 Oracle Corporation
     8 * Copyright (C) 2008-2013 Oracle Corporation
    99 *
    1010 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4444        , m_strGenericDriverName(QString())
    4545        , m_strGenericProperties(QString())
     46        , m_strNATNetworkName(QString())
    4647        , m_strMACAddress(QString())
    4748        , m_fCableConnected(false)
     
    6061               (m_strGenericDriverName == other.m_strGenericDriverName) &&
    6162               (m_strGenericProperties == other.m_strGenericProperties) &&
     63               (m_strNATNetworkName == other.m_strNATNetworkName) &&
    6264               (m_strMACAddress == other.m_strMACAddress) &&
    6365               (m_fCableConnected == other.m_fCableConnected) &&
     
    7880    QString m_strGenericDriverName;
    7981    QString m_strGenericProperties;
     82    QString m_strNATNetworkName;
    8083    QString m_strMACAddress;
    8184    bool m_fCableConnected;
     
    165168    QString m_strHostInterfaceName;
    166169    QString m_strGenericDriverName;
     170    QString m_strNATNetworkName;
    167171    UIPortForwardingDataList m_portForwardingRules;
    168172};
     
    186190    /* Generic driver list: */
    187191    const QStringList& genericDriverList() const { return m_genericDriverList; }
     192    /* NAT network list: */
     193    const QStringList& natNetworkList() const { return m_natNetworkList; }
    188194
    189195protected:
     
    225231    void refreshHostInterfaceList();
    226232    void refreshGenericDriverList(bool fFullRefresh = false);
     233    void refreshNATNetworkList();
    227234
    228235    /* Various static stuff: */
     
    240247    QStringList m_hostInterfaceList;
    241248    QStringList m_genericDriverList;
     249    QStringList m_natNetworkList;
    242250
    243251    /* Cache: */
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