Changeset 49673 in vbox for trunk/src/VBox/Main
- Timestamp:
- Nov 27, 2013 3:11:49 AM (11 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/DHCPServerImpl.h
r49644 r49673 129 129 HRESULT stop(); 130 130 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; 148 133 /** weak VirtualBox parent */ 149 134 VirtualBox * const mVirtualBox; -
trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp
r49672 r49673 38 38 39 39 40 struct 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 40 56 DHCPServer::DHCPServer() 41 : mVirtualBox(NULL) 42 { 57 : m(NULL), mVirtualBox(NULL) 58 { 59 m = new DHCPServer::Data(); 43 60 } 44 61 … … 46 63 DHCPServer::~DHCPServer() 47 64 { 65 if (m) 66 { 67 delete m; 68 m = NULL; 69 } 48 70 } 49 71 … … 85 107 86 108 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"; 93 115 94 116 /* Confirm a successful initialization */ … … 110 132 111 133 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(), 119 141 data.GlobalDhcpOptions.end()); 120 142 121 m .VmSlot2Options.clear();122 m .VmSlot2Options.insert(data.VmSlot2OptionsM.begin(),143 m->VmSlot2Options.clear(); 144 m->VmSlot2Options.insert(data.VmSlot2OptionsM.begin(), 123 145 data.VmSlot2OptionsM.end()); 124 146 … … 137 159 138 160 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; 144 166 145 167 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()); 148 170 149 171 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()); 152 174 153 175 return S_OK; … … 164 186 HRESULT DHCPServer::getEnabled(BOOL *aEnabled) 165 187 { 166 *aEnabled = m .enabled;188 *aEnabled = m->enabled; 167 189 168 190 return S_OK; … … 173 195 { 174 196 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 175 m .enabled = aEnabled;197 m->enabled = aEnabled; 176 198 177 199 // save the global settings; for that we should hold only the VirtualBox lock … … 186 208 HRESULT DHCPServer::getIPAddress(com::Utf8Str &aIPAddress) 187 209 { 188 aIPAddress = Utf8Str(m .IPAddress);210 aIPAddress = Utf8Str(m->IPAddress); 189 211 190 212 return S_OK; … … 194 216 HRESULT DHCPServer::getNetworkMask(com::Utf8Str &aNetworkMask) 195 217 { 196 aNetworkMask = m .GlobalDhcpOptions[DhcpOpt_SubnetMask];218 aNetworkMask = m->GlobalDhcpOptions[DhcpOpt_SubnetMask]; 197 219 198 220 return S_OK; … … 202 224 HRESULT DHCPServer::getLowerIP(com::Utf8Str &aIPAddress) 203 225 { 204 aIPAddress = Utf8Str(m .lowerIP);226 aIPAddress = Utf8Str(m->lowerIP); 205 227 206 228 return S_OK; … … 210 232 HRESULT DHCPServer::getUpperIP(com::Utf8Str &aIPAddress) 211 233 { 212 aIPAddress = Utf8Str(m .upperIP);234 aIPAddress = Utf8Str(m->upperIP); 213 235 214 236 return S_OK; … … 227 249 228 250 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; 234 256 235 257 // save the global settings; for that we should hold only the VirtualBox lock … … 244 266 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 245 267 246 m .GlobalDhcpOptions.insert(DhcpOptValuePair(aOption, aValue));268 m->GlobalDhcpOptions.insert(DhcpOptValuePair(aOption, aValue)); 247 269 248 270 /* Indirect way to understand that we're on NAT network */ 249 271 if (aOption == DhcpOpt_Router) 250 m .dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");272 m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on"); 251 273 252 274 alock.release(); … … 260 282 { 261 283 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 262 aValue.resize(m .GlobalDhcpOptions.size());284 aValue.resize(m->GlobalDhcpOptions.size()); 263 285 DhcpOptionMap::const_iterator it; 264 286 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) 266 288 { 267 289 aValue[i] = Utf8StrFmt("%d:%s", (*it).first, (*it).second.c_str()); … … 274 296 { 275 297 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 276 aValue.resize(m .VmSlot2Options.size());298 aValue.resize(m->VmSlot2Options.size()); 277 299 VmSlot2OptionsMap::const_iterator it; 278 300 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) 280 302 { 281 303 aValue[i] = Utf8StrFmt("[%s]:%d", it->first.VmName.c_str(), it->first.Slot); … … 292 314 { 293 315 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; 295 317 alock.release(); 296 318 … … 341 363 ComPtr<INetworkAdapter> nic; 342 364 VmSlot2OptionsIterator it; 343 for(it = m .VmSlot2Options.begin(); it != m.VmSlot2Options.end(); ++it)365 for(it = m->VmSlot2Options.begin(); it != m->VmSlot2Options.end(); ++it) 344 366 { 345 367 alock.release(); … … 386 408 { 387 409 /* Silently ignore attempts to run disabled servers. */ 388 if (!m .enabled)410 if (!m->enabled) 389 411 return S_OK; 390 412 391 413 /* Commmon Network Settings */ 392 m .dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str());414 m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str()); 393 415 394 416 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()); 398 420 399 421 /* XXX: should this MAC default initialization moved to NetworkServiceRunner? */ … … 405 427 guid.raw()->au8[1], 406 428 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()); 412 434 413 435 /* 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 */ 416 438 } 417 439 … … 419 441 HRESULT DHCPServer::stop (void) 420 442 { 421 return RT_FAILURE(m .dhcp.stop()) ? E_FAIL : S_OK;443 return RT_FAILURE(m->dhcp.stop()) ? E_FAIL : S_OK; 422 444 } 423 445 … … 426 448 LONG aSlot) 427 449 { 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.