- Timestamp:
- Nov 22, 2013 2:05:57 AM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 90836
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/DHCPServerImpl.h
r49494 r49618 125 125 126 126 private: 127 struct Data; 128 Data *m; 127 129 /** weak VirtualBox parent */ 128 130 VirtualBox * const mVirtualBox; 129 130 131 const Bstr mName; 131 132 struct Data133 {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 } m;146 132 147 133 DhcpOptionMap& findOptMapByVmNameSlot(const com::Utf8Str& aVmName, -
trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp
r49516 r49618 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; … … 175 197 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 176 198 177 *aEnabled = m .enabled;199 *aEnabled = m->enabled; 178 200 179 201 return S_OK; … … 187 209 188 210 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 189 m .enabled = aEnabled;211 m->enabled = aEnabled; 190 212 191 213 // save the global settings; for that we should hold only the VirtualBox lock … … 205 227 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 206 228 207 m .IPAddress.cloneTo(aIPAddress);229 m->IPAddress.cloneTo(aIPAddress); 208 230 209 231 return S_OK; … … 218 240 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 219 241 220 m .GlobalDhcpOptions[DhcpOpt_SubnetMask].cloneTo(aNetworkMask);242 m->GlobalDhcpOptions[DhcpOpt_SubnetMask].cloneTo(aNetworkMask); 221 243 222 244 return S_OK; … … 231 253 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 232 254 233 m .lowerIP.cloneTo(aIPAddress);255 m->lowerIP.cloneTo(aIPAddress); 234 256 235 257 return S_OK; … … 244 266 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 245 267 246 m .upperIP.cloneTo(aIPAddress);268 m->upperIP.cloneTo(aIPAddress); 247 269 248 270 return S_OK; … … 261 283 262 284 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 263 m .IPAddress = aIPAddress;264 m .GlobalDhcpOptions[DhcpOpt_SubnetMask] = aNetworkMask;265 266 m .lowerIP = aLowerIP;267 m .upperIP = aUpperIP;285 m->IPAddress = aIPAddress; 286 m->GlobalDhcpOptions[DhcpOpt_SubnetMask] = aNetworkMask; 287 288 m->lowerIP = aLowerIP; 289 m->upperIP = aUpperIP; 268 290 269 291 // save the global settings; for that we should hold only the VirtualBox lock … … 283 305 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 284 306 285 m .GlobalDhcpOptions.insert(307 m->GlobalDhcpOptions.insert( 286 308 DhcpOptValuePair(aOption, Utf8Str(aValue))); 287 309 288 310 /* Indirect way to understand that we're on NAT network */ 289 311 if (aOption == DhcpOpt_Router) 290 m .dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");312 m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on"); 291 313 292 314 alock.release(); … … 306 328 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 307 329 308 SafeArray<BSTR> sf(m .GlobalDhcpOptions.size());330 SafeArray<BSTR> sf(m->GlobalDhcpOptions.size()); 309 331 int i = 0; 310 332 311 for (DhcpOptIterator it = m .GlobalDhcpOptions.begin();312 it != m .GlobalDhcpOptions.end(); ++it)333 for (DhcpOptIterator it = m->GlobalDhcpOptions.begin(); 334 it != m->GlobalDhcpOptions.end(); ++it) 313 335 { 314 336 Bstr(Utf8StrFmt("%d:%s", (*it).first, (*it).second.c_str())).detachTo(&sf[i]); … … 331 353 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 332 354 333 SafeArray<BSTR> sf(m .VmSlot2Options.size());334 VmSlot2OptionsIterator it = m .VmSlot2Options.begin();355 SafeArray<BSTR> sf(m->VmSlot2Options.size()); 356 VmSlot2OptionsIterator it = m->VmSlot2Options.begin(); 335 357 int i = 0; 336 for (;it != m .VmSlot2Options.end(); ++it)358 for (;it != m->VmSlot2Options.end(); ++it) 337 359 { 338 360 Bstr(Utf8StrFmt("[%s]:%d", … … 354 376 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 355 377 356 m .VmSlot2Options[settings::VmNameSlotKey(378 m->VmSlot2Options[settings::VmNameSlotKey( 357 379 com::Utf8Str(aVmName), 358 380 aSlot)][aOption] = com::Utf8Str(aValue); … … 428 450 429 451 VmSlot2OptionsIterator it; 430 for(it = m .VmSlot2Options.begin();431 it != m .VmSlot2Options.end();452 for(it = m->VmSlot2Options.begin(); 453 it != m->VmSlot2Options.end(); 432 454 ++it) 433 455 { … … 476 498 { 477 499 /* Silently ignore attempts to run disabled servers. */ 478 if (!m .enabled)500 if (!m->enabled) 479 501 return S_OK; 480 502 481 503 /* Commmon Network Settings */ 482 m .dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, Utf8Str(aNetworkName).c_str());504 m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, Utf8Str(aNetworkName).c_str()); 483 505 484 506 Bstr tmp(aTrunkName); 485 507 486 508 if (!tmp.isEmpty()) 487 m .dhcp.setOption(NetworkServiceRunner::kNsrTrunkName, Utf8Str(tmp).c_str());488 m .dhcp.setOption(NetworkServiceRunner::kNsrKeyTrunkType, Utf8Str(aTrunkType).c_str());509 m->dhcp.setOption(NetworkServiceRunner::kNsrTrunkName, Utf8Str(tmp).c_str()); 510 m->dhcp.setOption(NetworkServiceRunner::kNsrKeyTrunkType, Utf8Str(aTrunkType).c_str()); 489 511 490 512 /* XXX: should this MAC default initialization moved to NetworkServiceRunner? */ … … 496 518 guid.raw()->au8[1], 497 519 guid.raw()->au8[2]); 498 m .dhcp.setOption(NetworkServiceRunner::kNsrMacAddress, strMAC);499 m .dhcp.setOption(NetworkServiceRunner::kNsrIpAddress, Utf8Str(m.IPAddress).c_str());500 m .dhcp.setOption(NetworkServiceRunner::kNsrIpNetmask, Utf8Str(m.GlobalDhcpOptions[DhcpOpt_SubnetMask]).c_str());501 m .dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m.lowerIP).c_str());502 m .dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m.upperIP).c_str());520 m->dhcp.setOption(NetworkServiceRunner::kNsrMacAddress, strMAC); 521 m->dhcp.setOption(NetworkServiceRunner::kNsrIpAddress, Utf8Str(m->IPAddress).c_str()); 522 m->dhcp.setOption(NetworkServiceRunner::kNsrIpNetmask, Utf8Str(m->GlobalDhcpOptions[DhcpOpt_SubnetMask]).c_str()); 523 m->dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m->lowerIP).c_str()); 524 m->dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m->upperIP).c_str()); 503 525 504 526 /* XXX: This parameters Dhcp Server will fetch via API */ 505 return RT_FAILURE(m .dhcp.start()) ? E_FAIL : S_OK;506 //m .dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */527 return RT_FAILURE(m->dhcp.start()) ? E_FAIL : S_OK; 528 //m->dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */ 507 529 } 508 530 … … 510 532 STDMETHODIMP DHCPServer::Stop (void) 511 533 { 512 return RT_FAILURE(m .dhcp.stop()) ? E_FAIL : S_OK;534 return RT_FAILURE(m->dhcp.stop()) ? E_FAIL : S_OK; 513 535 } 514 536 … … 517 539 LONG aSlot) 518 540 { 519 return m .VmSlot2Options[settings::VmNameSlotKey(541 return m->VmSlot2Options[settings::VmNameSlotKey( 520 542 com::Utf8Str(aVmName), 521 543 aSlot)];
Note:
See TracChangeset
for help on using the changeset viewer.