VirtualBox

Ignore:
Timestamp:
Jun 12, 2009 3:28:26 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48523
Message:

NetworkAttachment: Allow changing the attachment between NONE/NAT/HIF/host-only/.. dynamically #3573

Location:
trunk/src/VBox/Frontends/VBoxManage
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk

    r20501 r20521  
    4747        $(if $(VBOX_WITH_HOSTNETIF_API), VBOX_WITH_HOSTNETIF_API)
    4848 VBoxManage_DEFS.win   = _WIN32_WINNT=0x0500
     49ifdef VBOX_DYNAMIC_NET_ATTACH
     50 VBoxManage_DEFS += VBOX_DYNAMIC_NET_ATTACH
     51endif
    4952ifdef VBOX_WITH_NETFLT
    5053 VBoxManage_DEFS += VBOX_WITH_NETFLT
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp

    r20313 r20521  
    751751            }
    752752        }
     753#ifdef VBOX_DYNAMIC_NET_ATTACH
     754        else if (!strncmp(a->argv[1], "nic", 3))
     755        {
     756            /* Get the number of network adapters */
     757            ULONG NetworkAdapterCount = 0;
     758            ComPtr <ISystemProperties> info;
     759            CHECK_ERROR_BREAK (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()));
     760            CHECK_ERROR_BREAK (info, COMGETTER(NetworkAdapterCount) (&NetworkAdapterCount));
     761
     762            unsigned n = parseNum(&a->argv[1][3], NetworkAdapterCount, "NIC");
     763            if (!n)
     764            {
     765                rc = E_FAIL;
     766                break;
     767            }
     768            if (a->argc <= 1 + 1)
     769            {
     770                errorArgument("Missing argument to '%s'", a->argv[1]);
     771                rc = E_FAIL;
     772                break;
     773            }
     774
     775            /* get the corresponding network adapter */
     776            ComPtr<INetworkAdapter> adapter;
     777            CHECK_ERROR_BREAK (sessionMachine, GetNetworkAdapter(n - 1, adapter.asOutParam()));
     778            if (adapter)
     779            {
     780                if (!strcmp(a->argv[2], "none"))
     781                {
     782                    CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (FALSE), 1);
     783                }
     784                else if (!strcmp(a->argv[2], "null"))
     785                {
     786                    CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
     787                    CHECK_ERROR_RET(adapter, Detach(), 1);
     788                }
     789                else if (!strcmp(a->argv[2], "nat"))
     790                {
     791                    if (a->argc == 3)
     792                        CHECK_ERROR_RET(adapter, COMSETTER(NATNetwork)(Bstr(a->argv[3])), 1);
     793                    CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
     794                    CHECK_ERROR_RET(adapter, AttachToNAT(), 1);
     795                }
     796                else if (  !strcmp(a->argv[2], "bridged")
     797                        || !strcmp(a->argv[2], "hostif")) /* backward compatibility */
     798                {
     799                    if (a->argc <= 1 + 2)
     800                    {
     801                        errorArgument("Missing argument to '%s'", a->argv[2]);
     802                        rc = E_FAIL;
     803                        break;
     804                    }
     805                    CHECK_ERROR_RET(adapter, COMSETTER(HostInterface)(Bstr(a->argv[3])), 1);
     806                    CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
     807                    CHECK_ERROR_RET(adapter, AttachToBridgedInterface(), 1);
     808                }
     809                else if (!strcmp(a->argv[2], "intnet"))
     810                {
     811                    if (a->argc <= 1 + 2)
     812                    {
     813                        errorArgument("Missing argument to '%s'", a->argv[2]);
     814                        rc = E_FAIL;
     815                        break;
     816                    }
     817                    CHECK_ERROR_RET(adapter, COMSETTER(InternalNetwork)(Bstr(a->argv[3])), 1);
     818                    CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
     819                    CHECK_ERROR_RET(adapter, AttachToInternalNetwork(), 1);
     820                }
     821#if defined(VBOX_WITH_NETFLT)
     822                else if (!strcmp(a->argv[2], "hostonly"))
     823                {
     824                    if (a->argc <= 1 + 2)
     825                    {
     826                        errorArgument("Missing argument to '%s'", a->argv[2]);
     827                        rc = E_FAIL;
     828                        break;
     829                    }
     830                    CHECK_ERROR_RET(adapter, COMSETTER(HostInterface)(Bstr(a->argv[3])), 1);
     831                    CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
     832                    CHECK_ERROR_RET(adapter, AttachToHostOnlyInterface(), 1);
     833                }
     834#endif
     835                else
     836                {
     837                    errorArgument("Invalid type '%s' specfied for NIC %lu", Utf8Str(a->argv[2]).raw(), n + 1);
     838                    rc = E_FAIL;
     839                    break;
     840                }
     841            }
     842        }
     843#endif /* VBOX_DYNAMIC_NET_ATTACH */
    753844#ifdef VBOX_WITH_VRDP
    754845        else if (!strcmp(a->argv[1], "vrdp"))
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r20501 r20521  
    278278                 "                            injectnmi|\n"
    279279                 "                            setlinkstate<1-N> on|off |\n"
     280#ifdef VBOX_DYNAMIC_NET_ATTACH
     281#if defined(VBOX_WITH_NETFLT)
     282                 "                            nic<1-N> none|null|nat|bridged|intnet|hostonly\n"
     283                 "                                     [<devicename>] |\n"
     284#else /* !RT_OS_LINUX && !RT_OS_DARWIN */
     285                 "                            nic<1-N> none|null|nat|bridged|intnet\n"
     286                 "                                     [<devicename>] |\n"
     287#endif /* !RT_OS_LINUX && !RT_OS_DARWIN  */
     288#endif /* VBOX_DYNAMIC_NET_ATTACH */
    280289                 "                            usbattach <uuid>|<address> |\n"
    281290                 "                            usbdetach <uuid>|<address> |\n"
Note: See TracChangeset for help on using the changeset viewer.

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