VirtualBox

Changeset 17835 in vbox for trunk/src


Ignore:
Timestamp:
Mar 13, 2009 3:18:59 PM (16 years ago)
Author:
vboxsync
Message:

NetIf/win: DhcpRediscover

Location:
trunk/src/VBox/Main
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/HostNetworkInterfaceImpl.cpp

    r17763 r17835  
    447447    if (RT_FAILURE(rc))
    448448    {
    449         LogRel(("Failed to EnableStaticIpConfigV6 with rc=%Vrc\n", rc));
     449        LogRel(("Failed to EnableDynamicIpConfig with rc=%Vrc\n", rc));
    450450        return rc == VERR_NOT_IMPLEMENTED ? E_NOTIMPL : E_FAIL;
    451451    }
     
    454454}
    455455
     456STDMETHODIMP HostNetworkInterface::DhcpRediscover ()
     457{
     458#ifndef VBOX_WITH_HOSTNETIF_API
     459    return E_NOTIMPL;
     460#else
     461    AutoCaller autoCaller (this);
     462    CheckComRCReturnRC (autoCaller.rc());
     463
     464    int rc = NetIfDhcpRediscover(mVBox, this);
     465    if (RT_FAILURE(rc))
     466    {
     467        LogRel(("Failed to DhcpRediscover with rc=%Vrc\n", rc));
     468        return rc == VERR_NOT_IMPLEMENTED ? E_NOTIMPL : E_FAIL;
     469    }
     470    return S_OK;
     471#endif
     472}
     473
    456474HRESULT HostNetworkInterface::setVirtualBox(VirtualBox *pVBox)
    457475{
  • trunk/src/VBox/Main/generic/NetIf-generic.cpp

    r17764 r17835  
    118118    return VERR_NOT_IMPLEMENTED;
    119119}
     120
     121int NetIfDhcpRediscover(VirtualBox *pVbox, HostNetworkInterface * pIf)
     122{
     123    return VERR_NOT_IMPLEMENTED;
     124}
     125
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r17827 r17835  
    65376537  <interface
    65386538     name="IHostNetworkInterface" extends="$unknown"
    6539      uuid="09de36e8-2588-4050-a791-655240b556e0"
     6539     uuid="bcc99385-71ad-4887-90fc-15a3f2cad0a5"
    65406540     wsmap="managed"
    65416541     >
     
    66246624    <method name="enableDynamicIpConfig">
    66256625      <desc>enables the dynamic IP configuration.</desc>
     6626    </method>
     6627
     6628    <method name="dhcpRediscover">
     6629      <desc>refreshes the IP configuration for dhcp-enabled interface.</desc>
    66266630    </method>
    66276631
  • trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h

    r17759 r17835  
    8484    STDMETHOD(EnableStaticIpConfigV6) (IN_BSTR aIPV6Address, ULONG aIPV6MaskPrefixLength);
    8585    STDMETHOD(EnableDynamicIpConfig) ();
     86    STDMETHOD(DhcpRediscover) ();
    8687
    8788    // for VirtualBoxSupportErrorInfoImpl
  • trunk/src/VBox/Main/include/netif.h

    r17713 r17835  
    8484int NetIfRemoveHostOnlyNetworkInterface (VirtualBox *pVbox, IN_GUID aId, IHostNetworkInterface **aHostNetworkInterface, IProgress **aProgress);
    8585int NetIfGetConfig(HostNetworkInterface * pIf, NETIFINFO *);
     86int NetIfDhcpRediscover(VirtualBox *pVbox, HostNetworkInterface * pIf);
    8687
    8788DECLINLINE(Bstr) composeIPv6Address(PRTNETADDRIPV6 aAddrPtr)
  • trunk/src/VBox/Main/os2/NetIfList-os2.cpp

    r17710 r17835  
    5353}
    5454
     55
     56int NetIfDhcpRediscover(VirtualBox *pVbox, HostNetworkInterface * pIf)
     57{
     58    return VERR_NOT_IMPLEMENTED;
     59}
  • trunk/src/VBox/Main/win/NetIfList-win.cpp

    r17811 r17835  
    567567                        hr = HRESULT_FROM_WIN32( winEr );
    568568                        break;
     569                    }
     570                }
     571            }
     572        }
     573        SysFreeString(ClassName);
     574    }
     575    else
     576    {
     577        DWORD dwError = GetLastError();
     578        Assert(0);
     579        hr = HRESULT_FROM_WIN32( dwError );
     580    }
     581
     582    return hr;
     583}
     584
     585static HRESULT netIfWinDhcpRediscover(IWbemServices * pSvc, BSTR ObjPath)
     586{
     587    ComPtr<IWbemClassObject> pClass;
     588    BSTR ClassName = SysAllocString(L"Win32_NetworkAdapterConfiguration");
     589    HRESULT hr;
     590    if(ClassName)
     591    {
     592        hr = pSvc->GetObject(ClassName, 0, NULL, pClass.asOutParam(), NULL);
     593        if(SUCCEEDED(hr))
     594        {
     595            ComPtr<IWbemClassObject> pOutParams;
     596
     597            hr = netIfExecMethod(pSvc, pClass, ObjPath,
     598                                bstr_t(L"ReleaseDHCPLease"), NULL, NULL, 0, pOutParams.asOutParam());
     599            if(SUCCEEDED(hr))
     600            {
     601                VARIANT varReturnValue;
     602                hr = pOutParams->Get(bstr_t(L"ReturnValue"), 0,
     603                    &varReturnValue, NULL, 0);
     604                Assert(SUCCEEDED(hr));
     605                if(SUCCEEDED(hr))
     606                {
     607//                    Assert(varReturnValue.vt == VT_UINT);
     608                    int winEr = varReturnValue.uintVal;
     609                    if(winEr == 0)
     610                    {
     611                        hr = netIfExecMethod(pSvc, pClass, ObjPath,
     612                                            bstr_t(L"RenewDHCPLease"), NULL, NULL, 0, pOutParams.asOutParam());
     613                        if(SUCCEEDED(hr))
     614                        {
     615                            VARIANT varReturnValue;
     616                            hr = pOutParams->Get(bstr_t(L"ReturnValue"), 0,
     617                                &varReturnValue, NULL, 0);
     618                            Assert(SUCCEEDED(hr));
     619                            if(SUCCEEDED(hr))
     620                            {
     621            //                    Assert(varReturnValue.vt == VT_UINT);
     622                                int winEr = varReturnValue.uintVal;
     623                                if(winEr == 0)
     624                                {
     625                                    hr = S_OK;
     626                                }
     627                                else
     628                                {
     629                                    hr = HRESULT_FROM_WIN32( winEr );
     630                                }
     631                            }
     632                        }
     633                    }
     634                    else
     635                    {
     636                        hr = HRESULT_FROM_WIN32( winEr );
    569637                    }
    570638                }
     
    832900}
    833901
     902static HRESULT netIfDhcpRediscover(const Guid &guid)
     903{
     904    HRESULT hr;
     905        ComPtr <IWbemServices> pSvc;
     906        hr = netIfWinCreateIWbemServices(pSvc.asOutParam());
     907        if(SUCCEEDED(hr))
     908        {
     909            ComPtr <IWbemClassObject> pAdapterConfig;
     910            hr = netIfWinFindAdapterClassById(pSvc, guid, pAdapterConfig.asOutParam());
     911            if(SUCCEEDED(hr))
     912            {
     913                BSTR ObjPath;
     914                hr = netIfWinAdapterConfigPath(pAdapterConfig, &ObjPath);
     915                if(SUCCEEDED(hr))
     916                {
     917                    hr = netIfWinEnableDHCP(pSvc, ObjPath);
     918                    if(SUCCEEDED(hr))
     919                    {
     920//                        hr = netIfWinUpdateConfig(pIf);
     921                    }
     922                    SysFreeString(ObjPath);
     923                }
     924            }
     925        }
     926
     927
     928    return hr;
     929}
     930
    834931/* svc helper func */
    835932
     
    11311228            if (RT_FAILURE (vrc)) break;
    11321229            vrc = aClient->write (d->u.StaticIPV6.IPV6NetMaskLength);
     1230            if (RT_FAILURE (vrc)) break;
     1231
     1232            /* wait for a reply */
     1233            bool endLoop = false;
     1234            while (!endLoop)
     1235            {
     1236                SVCHlpMsg::Code reply = SVCHlpMsg::Null;
     1237
     1238                vrc = aClient->read (reply);
     1239                if (RT_FAILURE (vrc)) break;
     1240
     1241                switch (reply)
     1242                {
     1243                    case SVCHlpMsg::OK:
     1244                    {
     1245                        /* no parameters */
     1246                        rc = d->iface->updateConfig();
     1247                        endLoop = true;
     1248                        break;
     1249                    }
     1250                    case SVCHlpMsg::Error:
     1251                    {
     1252                        /* read the error message */
     1253                        Utf8Str errMsg;
     1254                        vrc = aClient->read (errMsg);
     1255                        if (RT_FAILURE (vrc)) break;
     1256
     1257                        rc = E_FAIL; // TODO: setError (E_FAIL, errMsg);
     1258                        endLoop = true;
     1259                        break;
     1260                    }
     1261                    default:
     1262                    {
     1263                        endLoop = true;
     1264                        rc = E_FAIL; // TODO: ComAssertMsgFailedBreak ((
     1265                            //"Invalid message code %d (%08lX)\n",
     1266                            //reply, reply),
     1267                            //rc = E_FAIL);
     1268                    }
     1269                }
     1270            }
     1271
     1272            break;
     1273        }
     1274        case SVCHlpMsg::DhcpRediscover: /* see usage in code */
     1275        {
     1276            LogFlowFunc (("DhcpRediscover:\n"));
     1277            LogFlowFunc (("Network connection name = '%ls'\n", d->name.raw()));
     1278
     1279            /* write message and parameters */
     1280            vrc = aClient->write (d->msgCode);
     1281            if (RT_FAILURE (vrc)) break;
     1282            vrc = aClient->write (d->guid);
    11331283            if (RT_FAILURE (vrc)) break;
    11341284
     
    19392089            break;
    19402090        }
     2091        case SVCHlpMsg::DhcpRediscover:
     2092        {
     2093            LogFlowFunc (("DhcpRediscover:\n"));
     2094
     2095            Guid guid;
     2096            vrc = aClient->read (guid);
     2097            if (RT_FAILURE (vrc)) break;
     2098
     2099            Utf8Str errMsg;
     2100            vrc = netIfDhcpRediscover (guid);
     2101
     2102            if (RT_SUCCESS (vrc))
     2103            {
     2104                /* write success followed by GUID */
     2105                vrc = aClient->write (SVCHlpMsg::OK);
     2106                if (RT_FAILURE (vrc)) break;
     2107            }
     2108            else
     2109            {
     2110                /* write failure followed by error message */
     2111                if (errMsg.isEmpty())
     2112                    errMsg = Utf8StrFmt ("Unspecified error (%Rrc)", vrc);
     2113                vrc = aClient->write (SVCHlpMsg::Error);
     2114                if (RT_FAILURE (vrc)) break;
     2115                vrc = aClient->write (errMsg);
     2116                if (RT_FAILURE (vrc)) break;
     2117            }
     2118
     2119            break;
     2120        }
    19412121        default:
    19422122            AssertMsgFailedBreakStmt (
     
    23532533
    23542534int NetIfEnableDynamicIpConfig(VirtualBox *vBox, HostNetworkInterface * pIf)
     2535{
     2536    HRESULT rc;
     2537    GUID guid;
     2538    rc = pIf->COMGETTER(Id) (&guid);
     2539    if(SUCCEEDED(rc))
     2540    {
     2541//        ComPtr<VirtualBox> vBox;
     2542//        rc = pIf->getVirtualBox (vBox.asOutParam());
     2543//        if(SUCCEEDED(rc))
     2544        {
     2545            /* create a progress object */
     2546            ComObjPtr <Progress> progress;
     2547            progress.createObject();
     2548//            ComPtr<IHost> host;
     2549//            HRESULT rc = vBox->COMGETTER(Host)(host.asOutParam());
     2550//            if(SUCCEEDED(rc))
     2551            {
     2552                rc = progress->init (vBox, (IHostNetworkInterface*)pIf,
     2553                                    Bstr ("Enabling Dynamic Ip Configuration"),
     2554                                    FALSE /* aCancelable */);
     2555                if(SUCCEEDED(rc))
     2556                {
     2557                    CheckComRCReturnRC (rc);
     2558//                    progress.queryInterfaceTo (aProgress);
     2559
     2560                    /* create the networkInterfaceHelperClient() argument */
     2561                    std::auto_ptr <NetworkInterfaceHelperClientData>
     2562                        d (new NetworkInterfaceHelperClientData());
     2563                    AssertReturn (d.get(), E_OUTOFMEMORY);
     2564
     2565                    d->msgCode = SVCHlpMsg::EnableDynamicIpConfig;
     2566                    d->guid = guid;
     2567                    d->iface = pIf;
     2568
     2569                    rc = vBox->startSVCHelperClient (
     2570                        IsUACEnabled() == TRUE /* aPrivileged */,
     2571                        netIfNetworkInterfaceHelperClient,
     2572                        static_cast <void *> (d.get()),
     2573                        progress);
     2574
     2575                    if (SUCCEEDED (rc))
     2576                    {
     2577                        /* d is now owned by netIfNetworkInterfaceHelperClient(), so release it */
     2578                        d.release();
     2579
     2580                        progress->WaitForCompletion(-1);
     2581                    }
     2582                }
     2583            }
     2584        }
     2585    }
     2586
     2587    return SUCCEEDED(rc) ? VINF_SUCCESS : VERR_GENERAL_FAILURE;
     2588}
     2589
     2590int NetIfDhcpRediscover(VirtualBox *vBox, HostNetworkInterface * pIf)
    23552591{
    23562592    HRESULT rc;
  • trunk/src/VBox/Main/win/svchlp.cpp

    r17494 r17835  
    280280            case SVCHlpMsg::EnableStaticIpConfig:
    281281            case SVCHlpMsg::EnableStaticIpConfigV6:
     282            case SVCHlpMsg::DhcpRediscover:
    282283            {
    283284                vrc = netIfNetworkInterfaceHelperServer (this, msgCode);
  • trunk/src/VBox/Main/win/svchlp.h

    r17494 r17835  
    4444        EnableStaticIpConfig, /* see usage in code */
    4545        EnableStaticIpConfigV6, /* see usage in code */
     46        DhcpRediscover, /* see usage in code */
    4647    };
    4748};
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