VirtualBox

Changeset 49673 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Nov 27, 2013 3:11:49 AM (11 years ago)
Author:
vboxsync
Message:

DHCPServerImpl: re-inroduce r90836 cancelled in r90887.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/DHCPServerImpl.h

    r49644 r49673  
    129129    HRESULT stop();
    130130
    131 
    132     struct Data
    133     {
    134         Data() : enabled(FALSE) {}
    135 
    136         Bstr IPAddress;
    137         Bstr lowerIP;
    138         Bstr upperIP;
    139 
    140         BOOL enabled;
    141         DHCPServerRunner dhcp;
    142 
    143         DhcpOptionMap GlobalDhcpOptions;
    144         VmSlot2OptionsMap VmSlot2Options;
    145     };
    146 
    147     Data m;
     131    struct Data;
     132    Data *m;
    148133    /** weak VirtualBox parent */
    149134    VirtualBox * const      mVirtualBox;
  • trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp

    r49672 r49673  
    3838
    3939
     40struct DHCPServer::Data
     41{
     42    Data() : enabled(FALSE) {}
     43
     44    Bstr IPAddress;
     45    Bstr lowerIP;
     46    Bstr upperIP;
     47
     48    BOOL enabled;
     49    DHCPServerRunner dhcp;
     50
     51    DhcpOptionMap GlobalDhcpOptions;
     52    VmSlot2OptionsMap VmSlot2Options;
     53};
     54
     55
    4056DHCPServer::DHCPServer()
    41     : mVirtualBox(NULL)
    42 {
     57  : m(NULL), mVirtualBox(NULL)
     58{
     59    m = new DHCPServer::Data();
    4360}
    4461
     
    4663DHCPServer::~DHCPServer()
    4764{
     65    if (m)
     66    {
     67        delete m;
     68        m = NULL;
     69    }
    4870}
    4971
     
    85107
    86108    unconst(mName) = aName;
    87     m.IPAddress = "0.0.0.0";
    88     m.GlobalDhcpOptions.insert(DhcpOptValuePair(DhcpOpt_SubnetMask, Bstr("0.0.0.0")));
    89     m.enabled = FALSE;
    90 
    91     m.lowerIP = "0.0.0.0";
    92     m.upperIP = "0.0.0.0";
     109    m->IPAddress = "0.0.0.0";
     110    m->GlobalDhcpOptions.insert(DhcpOptValuePair(DhcpOpt_SubnetMask, Bstr("0.0.0.0")));
     111    m->enabled = FALSE;
     112
     113    m->lowerIP = "0.0.0.0";
     114    m->upperIP = "0.0.0.0";
    93115
    94116    /* Confirm a successful initialization */
     
    110132
    111133    unconst(mName) = data.strNetworkName;
    112     m.IPAddress = data.strIPAddress;
    113     m.enabled = data.fEnabled;
    114     m.lowerIP = data.strIPLower;
    115     m.upperIP = data.strIPUpper;
    116 
    117     m.GlobalDhcpOptions.clear();
    118     m.GlobalDhcpOptions.insert(data.GlobalDhcpOptions.begin(),
     134    m->IPAddress = data.strIPAddress;
     135    m->enabled = data.fEnabled;
     136    m->lowerIP = data.strIPLower;
     137    m->upperIP = data.strIPUpper;
     138
     139    m->GlobalDhcpOptions.clear();
     140    m->GlobalDhcpOptions.insert(data.GlobalDhcpOptions.begin(),
    119141                               data.GlobalDhcpOptions.end());
    120142
    121     m.VmSlot2Options.clear();
    122     m.VmSlot2Options.insert(data.VmSlot2OptionsM.begin(),
     143    m->VmSlot2Options.clear();
     144    m->VmSlot2Options.insert(data.VmSlot2OptionsM.begin(),
    123145                            data.VmSlot2OptionsM.end());
    124146
     
    137159
    138160    data.strNetworkName = mName;
    139     data.strIPAddress = m.IPAddress;
    140 
    141     data.fEnabled = !!m.enabled;
    142     data.strIPLower = m.lowerIP;
    143     data.strIPUpper = m.upperIP;
     161    data.strIPAddress = m->IPAddress;
     162
     163    data.fEnabled = !!m->enabled;
     164    data.strIPLower = m->lowerIP;
     165    data.strIPUpper = m->upperIP;
    144166
    145167    data.GlobalDhcpOptions.clear();
    146     data.GlobalDhcpOptions.insert(m.GlobalDhcpOptions.begin(),
    147                                   m.GlobalDhcpOptions.end());
     168    data.GlobalDhcpOptions.insert(m->GlobalDhcpOptions.begin(),
     169                                  m->GlobalDhcpOptions.end());
    148170
    149171    data.VmSlot2OptionsM.clear();
    150     data.VmSlot2OptionsM.insert(m.VmSlot2Options.begin(),
    151                                 m.VmSlot2Options.end());
     172    data.VmSlot2OptionsM.insert(m->VmSlot2Options.begin(),
     173                                m->VmSlot2Options.end());
    152174
    153175    return S_OK;
     
    164186HRESULT DHCPServer::getEnabled(BOOL *aEnabled)
    165187{
    166     *aEnabled = m.enabled;
     188    *aEnabled = m->enabled;
    167189
    168190    return S_OK;
     
    173195{
    174196    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    175     m.enabled = aEnabled;
     197    m->enabled = aEnabled;
    176198
    177199    // save the global settings; for that we should hold only the VirtualBox lock
     
    186208HRESULT DHCPServer::getIPAddress(com::Utf8Str &aIPAddress)
    187209{
    188     aIPAddress = Utf8Str(m.IPAddress);
     210    aIPAddress = Utf8Str(m->IPAddress);
    189211
    190212    return S_OK;
     
    194216HRESULT DHCPServer::getNetworkMask(com::Utf8Str &aNetworkMask)
    195217{
    196     aNetworkMask = m.GlobalDhcpOptions[DhcpOpt_SubnetMask];
     218    aNetworkMask = m->GlobalDhcpOptions[DhcpOpt_SubnetMask];
    197219
    198220    return S_OK;
     
    202224HRESULT DHCPServer::getLowerIP(com::Utf8Str &aIPAddress)
    203225{
    204     aIPAddress = Utf8Str(m.lowerIP);
     226    aIPAddress = Utf8Str(m->lowerIP);
    205227
    206228    return S_OK;
     
    210232HRESULT DHCPServer::getUpperIP(com::Utf8Str &aIPAddress)
    211233{
    212     aIPAddress = Utf8Str(m.upperIP);
     234    aIPAddress = Utf8Str(m->upperIP);
    213235
    214236    return S_OK;
     
    227249
    228250    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    229     m.IPAddress = aIPAddress;
    230     m.GlobalDhcpOptions[DhcpOpt_SubnetMask] = aNetworkMask;
    231 
    232     m.lowerIP = aLowerIP;
    233     m.upperIP = aUpperIP;
     251    m->IPAddress = aIPAddress;
     252    m->GlobalDhcpOptions[DhcpOpt_SubnetMask] = aNetworkMask;
     253
     254    m->lowerIP = aLowerIP;
     255    m->upperIP = aUpperIP;
    234256
    235257    // save the global settings; for that we should hold only the VirtualBox lock
     
    244266    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    245267
    246     m.GlobalDhcpOptions.insert(DhcpOptValuePair(aOption, aValue));
     268    m->GlobalDhcpOptions.insert(DhcpOptValuePair(aOption, aValue));
    247269   
    248270    /* Indirect way to understand that we're on NAT network */
    249271    if (aOption == DhcpOpt_Router)
    250         m.dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");
     272        m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");
    251273   
    252274    alock.release();
     
    260282{
    261283    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    262     aValue.resize(m.GlobalDhcpOptions.size());
     284    aValue.resize(m->GlobalDhcpOptions.size());
    263285    DhcpOptionMap::const_iterator it;
    264286    size_t i = 0;
    265     for (it = m.GlobalDhcpOptions.begin(); it != m.GlobalDhcpOptions.end(); ++it, ++i)
     287    for (it = m->GlobalDhcpOptions.begin(); it != m->GlobalDhcpOptions.end(); ++it, ++i)
    266288    {
    267289        aValue[i] = Utf8StrFmt("%d:%s", (*it).first, (*it).second.c_str());
     
    274296{
    275297    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    276     aValue.resize(m.VmSlot2Options.size());
     298    aValue.resize(m->VmSlot2Options.size());
    277299    VmSlot2OptionsMap::const_iterator it;
    278300    size_t i = 0;
    279     for (it = m.VmSlot2Options.begin(); it != m.VmSlot2Options.end(); ++it, ++i)
     301    for (it = m->VmSlot2Options.begin(); it != m->VmSlot2Options.end(); ++it, ++i)
    280302    {
    281303        aValue[i] = Utf8StrFmt("[%s]:%d", it->first.VmName.c_str(), it->first.Slot);
     
    292314{
    293315    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    294     m.VmSlot2Options[settings::VmNameSlotKey(aVmName, aSlot)][aOption] = aValue;
     316    m->VmSlot2Options[settings::VmNameSlotKey(aVmName, aSlot)][aOption] = aValue;
    295317    alock.release();
    296318
     
    341363    ComPtr<INetworkAdapter> nic;
    342364    VmSlot2OptionsIterator it;
    343     for(it = m.VmSlot2Options.begin(); it != m.VmSlot2Options.end(); ++it)
     365    for(it = m->VmSlot2Options.begin(); it != m->VmSlot2Options.end(); ++it)
    344366    {
    345367        alock.release();
     
    386408{
    387409    /* Silently ignore attempts to run disabled servers. */
    388     if (!m.enabled)
     410    if (!m->enabled)
    389411        return S_OK;
    390412
    391413    /* Commmon Network Settings */
    392     m.dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str());
     414    m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str());
    393415
    394416    if (!aTrunkName.isEmpty())
    395         m.dhcp.setOption(NetworkServiceRunner::kNsrTrunkName, aTrunkName.c_str());
    396 
    397     m.dhcp.setOption(NetworkServiceRunner::kNsrKeyTrunkType, aTrunkType.c_str());
     417        m->dhcp.setOption(NetworkServiceRunner::kNsrTrunkName, aTrunkName.c_str());
     418
     419    m->dhcp.setOption(NetworkServiceRunner::kNsrKeyTrunkType, aTrunkType.c_str());
    398420
    399421    /* XXX: should this MAC default initialization moved to NetworkServiceRunner? */
     
    405427                 guid.raw()->au8[1],
    406428                 guid.raw()->au8[2]);
    407     m.dhcp.setOption(NetworkServiceRunner::kNsrMacAddress, strMAC);
    408     m.dhcp.setOption(NetworkServiceRunner::kNsrIpAddress,  Utf8Str(m.IPAddress).c_str());
    409     m.dhcp.setOption(NetworkServiceRunner::kNsrIpNetmask, Utf8Str(m.GlobalDhcpOptions[DhcpOpt_SubnetMask]).c_str());
    410     m.dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m.lowerIP).c_str());
    411     m.dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m.upperIP).c_str());
     429    m->dhcp.setOption(NetworkServiceRunner::kNsrMacAddress, strMAC);
     430    m->dhcp.setOption(NetworkServiceRunner::kNsrIpAddress,  Utf8Str(m->IPAddress).c_str());
     431    m->dhcp.setOption(NetworkServiceRunner::kNsrIpNetmask, Utf8Str(m->GlobalDhcpOptions[DhcpOpt_SubnetMask]).c_str());
     432    m->dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m->lowerIP).c_str());
     433    m->dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m->upperIP).c_str());
    412434
    413435    /* XXX: This parameters Dhcp Server will fetch via API */
    414     return RT_FAILURE(m.dhcp.start()) ? E_FAIL : S_OK;
    415     //m.dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */
     436    return RT_FAILURE(m->dhcp.start()) ? E_FAIL : S_OK;
     437    //m->dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */
    416438}
    417439
     
    419441HRESULT DHCPServer::stop (void)
    420442{
    421     return RT_FAILURE(m.dhcp.stop()) ? E_FAIL : S_OK;
     443    return RT_FAILURE(m->dhcp.stop()) ? E_FAIL : S_OK;
    422444}
    423445
     
    426448                                                  LONG aSlot)
    427449{
    428     return m.VmSlot2Options[settings::VmNameSlotKey(aVmName, aSlot)];
    429 }
     450    return m->VmSlot2Options[settings::VmNameSlotKey(aVmName, aSlot)];
     451}
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