- Timestamp:
- Nov 16, 2018 11:57:04 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 126671
- Location:
- trunk/src/VBox
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp
r75512 r75513 52 52 OP_ADD = 1000, 53 53 OP_REMOVE, 54 OP_MODIFY, 55 OP_RESTART 54 OP_MODIFY 56 55 } OPCODE; 57 56 … … 320 319 321 320 if( enmCode != OP_REMOVE 322 && enmCode != OP_RESTART323 321 && GlobalDhcpOptions.empty() 324 322 && VmSlot2Options.empty()) … … 376 374 } 377 375 378 if (enmCode == OP_RESTART) 379 { 380 CHECK_ERROR(svr, Restart()); 381 if(FAILED(rc)) 382 return errorArgument("Failed to restart server"); 383 } 384 else if (enmCode == OP_REMOVE) 385 { 386 CHECK_ERROR(a->virtualBox, RemoveDHCPServer(svr)); 387 if(FAILED(rc)) 388 return errorArgument("Failed to remove server"); 389 } 390 else 376 if(enmCode != OP_REMOVE) 391 377 { 392 378 if (pIp || pNetmask || pLowerIp || pUpperIp) … … 439 425 } 440 426 } 427 else 428 { 429 CHECK_ERROR(a->virtualBox, RemoveDHCPServer(svr)); 430 if(FAILED(rc)) 431 return errorArgument("Failed to remove server"); 432 } 441 433 442 434 return RTEXITCODE_SUCCESS; … … 456 448 else if (strcmp(a->argv[0], "remove") == 0) 457 449 rcExit = handleOp(a, OP_REMOVE, 1); 458 else if (strcmp(a->argv[0], "restart") == 0)459 rcExit = handleOp(a, OP_RESTART, 1);460 450 else 461 451 rcExit = errorSyntax(USAGE_DHCPSERVER, "Invalid parameter '%s'", Utf8Str(a->argv[0]).c_str()); -
trunk/src/VBox/Main/Makefile.kmk
r75512 r75513 79 79 $(if $(VBOX_WITH_HGCM),VBOX_WITH_HGCM,) \ 80 80 $(if $(VBOX_WITH_HOSTNETIF_API),VBOX_WITH_HOSTNETIF_API,) \ 81 $(if $(VBOX_WITH_DHCPD),VBOX_WITH_DHCPD,) \82 81 $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \ 83 82 $(if $(VBOX_WITH_MIDL_PROXY_STUB),VBOX_WITH_MIDL_PROXY_STUB,) \ -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r75512 r75513 1791 1791 <interface 1792 1792 name="IDHCPServer" extends="$unknown" 1793 uuid=" 197717d2-a742-4966-a529-d1467e903feb"1793 uuid="00c8f974-92c5-44a1-8f3f-702469fdd04b" 1794 1794 wsmap="managed" 1795 1795 reservedMethods="2" reservedAttributes="6" … … 1953 1953 <result name="E_FAIL"> 1954 1954 Failed to stop the process. 1955 </result>1956 </desc>1957 </method>1958 1959 <method name="restart">1960 <desc>1961 Restart running DHCP server process.1962 <result name="E_FAIL">1963 Failed to restart the process.1964 1955 </result> 1965 1956 </desc> -
trunk/src/VBox/Main/include/DHCPServerImpl.h
r75512 r75513 50 50 static const std::string kDsrKeyLowerIp; 51 51 static const std::string kDsrKeyUpperIp; 52 static const std::string kDsrKeyConfig;53 52 }; 54 53 … … 126 125 const com::Utf8Str &aTrunkType); 127 126 HRESULT stop(); 128 HRESULT restart();129 127 130 128 struct Data; -
trunk/src/VBox/Main/include/NetworkServiceRunner.h
r75512 r75513 36 36 37 37 int setOption(const std::string& key, const std::string& val); 38 void clearOptions();39 38 40 39 int start(bool aKillProcOnStop); -
trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp
r75512 r75513 25 25 26 26 #include <iprt/asm.h> 27 #include <iprt/file.h>28 27 #include <iprt/net.h> 29 #include <iprt/path.h>30 28 #include <iprt/cpp/utils.h> 31 #include <iprt/cpp/xml.h>32 29 33 30 #include <VBox/com/array.h> … … 41 38 const std::string DHCPServerRunner::kDsrKeyLowerIp = "--lower-ip"; 42 39 const std::string DHCPServerRunner::kDsrKeyUpperIp = "--upper-ip"; 43 const std::string DHCPServerRunner::kDsrKeyConfig = "--config";44 40 45 41 … … 49 45 : enabled(FALSE) 50 46 , router(false) 51 { 52 tempConfigFileName[0] = '\0'; 53 } 47 {} 54 48 55 49 Utf8Str IPAddress; … … 63 57 settings::DhcpOptionMap GlobalDhcpOptions; 64 58 settings::VmSlot2OptionsMap VmSlot2Options; 65 66 char tempConfigFileName[RTPATH_MAX];67 com::Utf8Str networkName;68 com::Utf8Str trunkName;69 com::Utf8Str trunkType;70 59 }; 71 60 … … 109 98 if (autoUninitSpan.uninitDone()) 110 99 return; 111 112 if (m->dhcp.isRunning())113 stop();114 100 115 101 unconst(mVirtualBox) = NULL; … … 613 599 614 600 615 DECLINLINE(void) addOptionChild(xml::ElementNode *pParent, uint32_t OptCode, const settings::DhcpOptValue &OptValue)616 {617 xml::ElementNode *pOption = pParent->createChild("Option");618 pOption->setAttribute("name", OptCode);619 pOption->setAttribute("encoding", OptValue.encoding);620 pOption->setAttribute("value", OptValue.text.c_str());621 }622 623 624 HRESULT DHCPServer::restart()625 {626 if (!m->dhcp.isRunning())627 return E_FAIL;628 /*629 * Disabled servers will be brought down, but won't be restarted.630 * (see DHCPServer::start)631 */632 HRESULT hrc = stop();633 if (SUCCEEDED(hrc))634 hrc = start(m->networkName, m->trunkName, m->trunkType);635 return hrc;636 }637 638 639 601 HRESULT DHCPServer::start(const com::Utf8Str &aNetworkName, 640 602 const com::Utf8Str &aTrunkName, … … 645 607 return S_OK; 646 608 647 /*648 * @todo: the existing code cannot handle concurrent attempts to start DHCP server.649 * Note that technically it may receive different parameters from different callers.650 */651 m->networkName = aNetworkName;652 m->trunkName = aTrunkName;653 m->trunkType = aTrunkType;654 655 m->dhcp.clearOptions();656 #ifdef VBOX_WITH_DHCPD657 int rc = RTPathTemp(m->tempConfigFileName, sizeof(m->tempConfigFileName));658 if (RT_FAILURE(rc))659 return E_FAIL;660 rc = RTPathAppend(m->tempConfigFileName, sizeof(m->tempConfigFileName), "dhcp-config-XXXXX.xml");661 if (RT_FAILURE(rc))662 {663 m->tempConfigFileName[0] = '\0';664 return E_FAIL;665 }666 rc = RTFileCreateTemp(m->tempConfigFileName, 0600);667 if (RT_FAILURE(rc))668 {669 m->tempConfigFileName[0] = '\0';670 return E_FAIL;671 }672 673 xml::Document doc;674 xml::ElementNode *pElmRoot = doc.createRootElement("DHCPServer");675 pElmRoot->setAttribute("networkName", m->networkName.c_str());676 if (!m->trunkName.isEmpty())677 pElmRoot->setAttribute("trunkName", m->trunkName.c_str());678 pElmRoot->setAttribute("trunkType", m->trunkType.c_str());679 pElmRoot->setAttribute("IPAddress", Utf8Str(m->IPAddress).c_str());680 pElmRoot->setAttribute("networkMask", Utf8Str(m->GlobalDhcpOptions[DhcpOpt_SubnetMask].text).c_str());681 pElmRoot->setAttribute("lowerIP", Utf8Str(m->lowerIP).c_str());682 pElmRoot->setAttribute("upperIP", Utf8Str(m->upperIP).c_str());683 684 /* Process global options */685 xml::ElementNode *pOptions = pElmRoot->createChild("Options");686 // settings::DhcpOptionMap::const_iterator itGlobal;687 for (settings::DhcpOptionMap::const_iterator it = m->GlobalDhcpOptions.begin();688 it != m->GlobalDhcpOptions.end();689 ++it)690 addOptionChild(pOptions, (*it).first, (*it).second);691 692 /* Process network-adapter-specific options */693 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);694 HRESULT hrc = S_OK;695 ComPtr<IMachine> machine;696 ComPtr<INetworkAdapter> nic;697 settings::VmSlot2OptionsIterator it;698 for(it = m->VmSlot2Options.begin(); it != m->VmSlot2Options.end(); ++it)699 {700 alock.release();701 hrc = mVirtualBox->FindMachine(Bstr(it->first.VmName).raw(), machine.asOutParam());702 alock.acquire();703 704 if (FAILED(hrc))705 continue;706 707 alock.release();708 hrc = machine->GetNetworkAdapter(it->first.Slot, nic.asOutParam());709 alock.acquire();710 711 if (FAILED(hrc))712 continue;713 714 com::Bstr mac;715 716 alock.release();717 hrc = nic->COMGETTER(MACAddress)(mac.asOutParam());718 alock.acquire();719 720 if (FAILED(hrc)) /* no MAC address ??? */721 continue;722 723 /* Convert MAC address from XXXXXXXXXXXX to XX:XX:XX:XX:XX:XX */724 Utf8Str strMacWithoutColons(mac);725 const char *pszSrc = strMacWithoutColons.c_str();726 RTMAC binaryMac;727 if (RTStrConvertHexBytes(pszSrc, &binaryMac, sizeof(binaryMac), 0) != VINF_SUCCESS)728 continue;729 char szMac[18]; /* "XX:XX:XX:XX:XX:XX" */730 if (RTStrPrintHexBytes(szMac, sizeof(szMac), &binaryMac, sizeof(binaryMac), RTSTRPRINTHEXBYTES_F_SEP_COLON) != VINF_SUCCESS)731 continue;732 733 xml::ElementNode *pMacConfig = pElmRoot->createChild("Config");734 pMacConfig->setAttribute("MACAddress", szMac);735 736 com::Utf8Str encodedOption;737 settings::DhcpOptionMap &map = i_findOptMapByVmNameSlot(it->first.VmName, it->first.Slot);738 settings::DhcpOptionMap::const_iterator itAdapterOption;739 for (itAdapterOption = map.begin(); itAdapterOption != map.end(); ++itAdapterOption)740 addOptionChild(pMacConfig, (*itAdapterOption).first, (*itAdapterOption).second);741 }742 743 xml::XmlFileWriter writer(doc);744 writer.write(m->tempConfigFileName, true);745 746 m->dhcp.setOption(DHCPServerRunner::kDsrKeyConfig, m->tempConfigFileName);747 #else /* !VBOX_WITH_DHCPD */748 609 /* Commmon Network Settings */ 749 610 m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str()); … … 767 628 m->dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m->lowerIP).c_str()); 768 629 m->dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m->upperIP).c_str()); 769 #endif /* !VBOX_WITH_DHCPD */770 630 771 631 /* XXX: This parameters Dhcp Server will fetch via API */ … … 777 637 HRESULT DHCPServer::stop (void) 778 638 { 779 #ifdef VBOX_WITH_DHCPD780 if (m->tempConfigFileName[0])781 {782 RTFileDelete(m->tempConfigFileName);783 m->tempConfigFileName[0] = 0;784 }785 #endif /* VBOX_WITH_DHCPD */786 639 return RT_FAILURE(m->dhcp.stop()) ? E_FAIL : S_OK; 787 640 } -
trunk/src/VBox/Main/src-server/NetworkServiceRunner.cpp
r75512 r75513 66 66 m->mOptions.insert(std::map<std::string, std::string>::value_type(key, val)); 67 67 return VINF_SUCCESS; 68 }69 70 71 void NetworkServiceRunner::clearOptions()72 {73 m->mOptions.clear();74 68 } 75 69 -
trunk/src/VBox/NetworkServices/Dhcpd/Db.cpp
r75512 r75513 291 291 */ 292 292 const xml::ElementNode *ndTime = ndLease->findChildElement("Time"); 293 if ( ndTime == NULL)293 if (time == NULL) 294 294 return NULL; 295 295 -
trunk/src/VBox/NetworkServices/Dhcpd/Defs.h
r75512 r75513 27 27 #include <vector> 28 28 29 #ifdef _MSC_VER30 # define __func__ __FUNCTION__31 #endif32 33 29 typedef std::vector<uint8_t> octets_t; 34 30 … … 36 32 37 33 class DhcpOption; 38 typedef std::map<uint8_t, std::shared_ptr<DhcpOption> 34 typedef std::map<uint8_t, std::shared_ptr<DhcpOption>> optmap_t; 39 35 40 36 inline bool operator==(const RTMAC &l, const RTMAC &r) -
trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.cpp
r75512 r75513 36 36 optmap_t &operator<<(optmap_t &optmap, const std::shared_ptr<DhcpOption> &option) 37 37 { 38 if (option == nullptr)38 if (option == NULL) 39 39 return optmap; 40 40 -
trunk/src/VBox/NetworkServices/Dhcpd/Makefile.kmk
r75512 r75513 29 29 ifdef VBOX_WITH_HARDENING 30 30 PROGRAMS += VBoxNetDhcpdHardened 31 DLLS += VBoxNetDhcpd 31 VBoxNetDhcpdHardened_TEMPLATE = VBOXR3HARDENEDEXE 32 VBoxNetDhcpdHardened_NAME = VBoxNetDhcpd 33 VBoxNetDhcpdHardened_DEFS = SERVICE_NAME=\"VBoxNetDhcpd\" 34 VBoxNetDhcpdHardened_SOURCES = VBoxNetDhcpdHardened.cpp 35 VBoxNetDhcpdHardened_SOURCES.win = $(VBoxNetLwipNAT_0_OUTDIR)/VBoxNetDhcpd-icon.rc 36 VBoxNetDhcpdHardened_LDFLAGS.win = /SUBSYSTEM:windows 32 37 else 33 38 PROGRAMS += VBoxNetDhcpd 34 39 endif 35 40 36 VBoxNetDhcpdHardened_TEMPLATE = VBOXR3HARDENEDEXE 37 VBoxNetDhcpdHardened_NAME = VBoxNetDHCP 38 VBoxNetDhcpdHardened_DEFS = SERVICE_NAME=\"VBoxNetDhcpd\" 39 VBoxNetDhcpdHardened_SOURCES = VBoxNetDhcpdHardened.cpp 40 VBoxNetDhcpdHardened_SOURCES.win = $(VBoxNetDhcpd_0_OUTDIR)/VBoxNetDhcpd-icon.rc 41 VBoxNetDhcpdHardened_LDFLAGS.win = /SUBSYSTEM:windows 42 43 if1of ($(KBUILD_TARGET),win linux solaris) 44 VBoxNetDhcpd_TEMPLATE := $(if-expr defined(VBOX_WITH_HARDENING),VBoxR3DllDhcpd,VBoxR3ExeDhcpd) 45 else 46 VBoxNetDhcpd_TEMPLATE := $(if-expr defined(VBOX_WITH_HARDENING),VBoxR3Dll,VBOXR3EXE) 47 endif 48 VBoxNetDhcpd_NAME = VBoxNetDHCP 41 VBoxNetDhcpd_TEMPLATE := $(if-expr defined(VBOX_WITH_HARDENING),VBOXMAINDLL,VBOXMAINCLIENTEXE) 42 VBoxNetDhcpd_NAME := VBoxNetDhcpd 49 43 # VBoxNetDhcpd_DEFS = IPv6 50 # VBoxNet Dhcpd_DEFS.linux = WITH_VALGRIND51 #VBoxNetDhcpd_DEFS.win = VBOX_COM_OUTOFPROC_MODULE _WIN32_WINNT=0x501 # Windows XP44 # VBoxNetLwipNAT_DEFS.linux = WITH_VALGRIND 45 VBoxNetDhcpd_DEFS.win = VBOX_COM_OUTOFPROC_MODULE _WIN32_WINNT=0x501 # Windows XP 52 46 53 47 # (current dir is for for lwipopts.h) 54 48 VBoxNetDhcpd_INCS += . $(addprefix ../../Devices/Network/lwip-new/,$(LWIP_INCS)) 55 49 56 VBoxNetDhcpd_DEFS = KBUILD_TYPE=\"$(KBUILD_TYPE)\" 57 ifneq ($(KBUILD_TARGET),win) 58 VBoxNetDhcpd_DEFS += VBOX_WITH_XPCOM 59 VBoxNetDhcpd_INCS += $(VBOX_XPCOM_INCS) 60 VBoxNetDhcpd_CXXFLAGS += -std=c++11 61 endif 62 VBoxNetDhcpd_SOURCES = ../../Main/glue/VBoxLogRelCreate.cpp \ 63 ../../Main/glue/GetVBoxUserHomeDirectory.cpp \ 64 ClientId.cpp \ 65 Config.cpp \ 66 DHCPD.cpp \ 67 Db.cpp \ 68 DhcpMessage.cpp \ 69 DhcpOptions.cpp \ 70 IPv4Pool.cpp \ 71 TimeStamp.cpp \ 72 VBoxNetDhcpd.cpp \ 73 $(addprefix ../../Devices/Network/lwip-new/,$(LWIP_SOURCES)) 50 VBoxNetDhcpd_SOURCES = 51 VBoxNetDhcpd_SOURCES += ClientId.cpp 52 VBoxNetDhcpd_SOURCES += Config.cpp 53 VBoxNetDhcpd_SOURCES += DHCPD.cpp 54 VBoxNetDhcpd_SOURCES += Db.cpp 55 VBoxNetDhcpd_SOURCES += DhcpMessage.cpp 56 VBoxNetDhcpd_SOURCES += DhcpOptions.cpp 57 VBoxNetDhcpd_SOURCES += IPv4Pool.cpp 58 VBoxNetDhcpd_SOURCES += TimeStamp.cpp 59 VBoxNetDhcpd_SOURCES += VBoxNetDhcpd.cpp 60 VBoxNetDhcpd_SOURCES += $(addprefix ../../Devices/Network/lwip-new/,$(LWIP_SOURCES)) 74 61 75 VBoxNet Dhcpd_LIBS = $(LIB_RUNTIME)62 VBoxNetLwipNAT_LIBS = $(LIB_RUNTIME) 76 63 77 VBoxNet Dhcpd_LIBS.solaris += socket nsl78 VBoxNet Dhcpd_LDFLAGS.win = /SUBSYSTEM:windows64 VBoxNetLwipNAT_LIBS.solaris += socket nsl 65 VBoxNetLwipNAT_LDFLAGS.win = /SUBSYSTEM:windows 79 66 80 67 ifeq ($(KBUILD_TARGET),win) -
trunk/src/VBox/NetworkServices/Dhcpd/VBoxNetDhcpd.cpp
r75512 r75513 52 52 #include <memory> 53 53 54 #ifdef RT_OS_WINDOWS /* WinMain */55 #undef htonl56 #undef ntohl57 # include <iprt/win/windows.h>58 #endif59 54 60 55 struct delete_pbuf … … 453 448 i, cSegs, 454 449 &cbSegFrame); 455 ifInput(pvSegFrame, (uint32_t)cbFrame);450 ifInput(pvSegFrame, cbFrame); 456 451 } 457 452 } … … 743 738 744 739 unique_ptr_pbuf q ( pbuf_alloc(PBUF_RAW, (u16_t)data.size(), PBUF_RAM) ); 745 if (q == nullptr)746 return; 747 748 error = pbuf_take(q.get(), &data.front(), (u16_t)data.size());740 if (q == NULL) 741 return; 742 743 error = pbuf_take(q.get(), &data.front(), data.size()); 749 744 if (error != ERR_OK) 750 745 return; -
trunk/src/VBox/NetworkServices/Makefile.kmk
r75512 r75513 22 22 ifdef VBOX_WITH_MAIN 23 23 # Include sub-makefiles. 24 ifndef VBOX_WITH_DHCPD 25 include $(PATH_SUB_CURRENT)/DHCP/Makefile.kmk 26 else 27 include $(PATH_SUB_CURRENT)/Dhcpd/Makefile.kmk 28 endif 24 include $(PATH_SUB_CURRENT)/DHCP/Makefile.kmk 29 25 ifdef VBOX_WITH_NAT_SERVICE 30 26 include $(PATH_SUB_CURRENT)/NAT/Makefile.kmk
Note:
See TracChangeset
for help on using the changeset viewer.