VirtualBox

Changeset 75568 in vbox for trunk/src


Ignore:
Timestamp:
Nov 19, 2018 11:52:10 AM (6 years ago)
Author:
vboxsync
Message:

Main/DHCPD: bugref:9288 Use new implementation of DHCP server (VCC 10 and older GCC support).

Location:
trunk/src/VBox
Files:
2 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp

    r75513 r75568  
    5252    OP_ADD = 1000,
    5353    OP_REMOVE,
    54     OP_MODIFY
     54    OP_MODIFY,
     55    OP_RESTART
    5556} OPCODE;
    5657
     
    319320
    320321    if(   enmCode != OP_REMOVE
     322       && enmCode != OP_RESTART
    321323       && GlobalDhcpOptions.empty()
    322324       && VmSlot2Options.empty())
     
    374376    }
    375377
    376     if(enmCode != OP_REMOVE)
     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
    377391    {
    378392        if (pIp || pNetmask || pLowerIp || pUpperIp)
     
    425439        }
    426440    }
    427     else
    428     {
    429         CHECK_ERROR(a->virtualBox, RemoveDHCPServer(svr));
    430         if(FAILED(rc))
    431             return errorArgument("Failed to remove server");
    432     }
    433441
    434442    return RTEXITCODE_SUCCESS;
     
    448456    else if (strcmp(a->argv[0], "remove") == 0)
    449457        rcExit = handleOp(a, OP_REMOVE, 1);
     458    else if (strcmp(a->argv[0], "restart") == 0)
     459        rcExit = handleOp(a, OP_RESTART, 1);
    450460    else
    451461        rcExit = errorSyntax(USAGE_DHCPSERVER, "Invalid parameter '%s'", Utf8Str(a->argv[0]).c_str());
  • trunk/src/VBox/Main/Makefile.kmk

    r75513 r75568  
    7979        $(if $(VBOX_WITH_HGCM),VBOX_WITH_HGCM,) \
    8080        $(if $(VBOX_WITH_HOSTNETIF_API),VBOX_WITH_HOSTNETIF_API,) \
     81        $(if $(VBOX_WITH_DHCPD),VBOX_WITH_DHCPD,) \
    8182        $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \
    8283        $(if $(VBOX_WITH_MIDL_PROXY_STUB),VBOX_WITH_MIDL_PROXY_STUB,) \
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r75513 r75568  
    17911791  <interface
    17921792    name="IDHCPServer" extends="$unknown"
    1793     uuid="00c8f974-92c5-44a1-8f3f-702469fdd04b"
     1793    uuid="197717d2-a742-4966-a529-d1467e903feb"
    17941794    wsmap="managed"
    17951795    reservedMethods="2" reservedAttributes="6"
     
    19531953        <result name="E_FAIL">
    19541954          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.
    19551964        </result>
    19561965      </desc>
  • trunk/src/VBox/Main/include/DHCPServerImpl.h

    r75513 r75568  
    5050    static const std::string kDsrKeyLowerIp;
    5151    static const std::string kDsrKeyUpperIp;
     52    static const std::string kDsrKeyConfig;
    5253};
    5354
     
    125126                  const com::Utf8Str &aTrunkType);
    126127    HRESULT stop();
     128    HRESULT restart();
    127129
    128130    struct Data;
  • trunk/src/VBox/Main/include/NetworkServiceRunner.h

    r75513 r75568  
    3636
    3737    int setOption(const std::string& key, const std::string& val);
     38    void clearOptions();
    3839
    3940    int  start(bool aKillProcOnStop);
  • trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp

    r75513 r75568  
    2525
    2626#include <iprt/asm.h>
     27#include <iprt/file.h>
    2728#include <iprt/net.h>
     29#include <iprt/path.h>
    2830#include <iprt/cpp/utils.h>
     31#include <iprt/cpp/xml.h>
    2932
    3033#include <VBox/com/array.h>
     
    3841const std::string DHCPServerRunner::kDsrKeyLowerIp = "--lower-ip";
    3942const std::string DHCPServerRunner::kDsrKeyUpperIp = "--upper-ip";
     43const std::string DHCPServerRunner::kDsrKeyConfig  = "--config";
    4044
    4145
     
    4549        : enabled(FALSE)
    4650        , router(false)
    47     {}
     51    {
     52        tempConfigFileName[0] = '\0';
     53    }
    4854
    4955    Utf8Str IPAddress;
     
    5763    settings::DhcpOptionMap GlobalDhcpOptions;
    5864    settings::VmSlot2OptionsMap VmSlot2Options;
     65
     66    char tempConfigFileName[RTPATH_MAX];
     67    com::Utf8Str networkName;
     68    com::Utf8Str trunkName;
     69    com::Utf8Str trunkType;
    5970};
    6071
     
    98109    if (autoUninitSpan.uninitDone())
    99110        return;
     111
     112    if (m->dhcp.isRunning())
     113        stop();
    100114
    101115    unconst(mVirtualBox) = NULL;
     
    599613
    600614
     615DECLINLINE(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
     624HRESULT 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
    601639HRESULT DHCPServer::start(const com::Utf8Str &aNetworkName,
    602640                          const com::Utf8Str &aTrunkName,
     
    607645        return S_OK;
    608646
     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_DHCPD
     657    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 */
    609748    /* Commmon Network Settings */
    610749    m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, aNetworkName.c_str());
     
    628767    m->dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m->lowerIP).c_str());
    629768    m->dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m->upperIP).c_str());
     769#endif /* !VBOX_WITH_DHCPD */
    630770
    631771    /* XXX: This parameters Dhcp Server will fetch via API */
     
    637777HRESULT DHCPServer::stop (void)
    638778{
     779#ifdef VBOX_WITH_DHCPD
     780    if (m->tempConfigFileName[0])
     781    {
     782        RTFileDelete(m->tempConfigFileName);
     783        m->tempConfigFileName[0] = 0;
     784    }
     785#endif /* VBOX_WITH_DHCPD */
    639786    return RT_FAILURE(m->dhcp.stop()) ? E_FAIL : S_OK;
    640787}
  • trunk/src/VBox/Main/src-server/NetworkServiceRunner.cpp

    r75513 r75568  
    6666    m->mOptions.insert(std::map<std::string, std::string>::value_type(key, val));
    6767    return VINF_SUCCESS;
     68}
     69
     70
     71void NetworkServiceRunner::clearOptions()
     72{
     73    m->mOptions.clear();
    6874}
    6975
  • trunk/src/VBox/NetworkServices/Dhcpd/ClientId.h

    r70836 r75568  
    3535    ClientId()
    3636      : m_mac(), m_id() {}
    37     ClientId(const RTMAC &mac, const OptClientId &id)
    38       : m_mac(mac), m_id(id) {}
     37    ClientId(const RTMAC &macParam, const OptClientId &idParam)
     38      : m_mac(macParam), m_id(idParam) {}
    3939
    4040    const RTMAC &mac() const { return m_mac; }
  • trunk/src/VBox/NetworkServices/Dhcpd/Config.cpp

    r71749 r75568  
    589589    /** @todo r=bird: Visual C++ 2010 does not grok this use of 'auto'. */
    590590    // XXX: debug
    591     for (auto it: m_GlobalOptions) {
    592         std::shared_ptr<DhcpOption> opt(it.second);
     591    for (optmap_t::iterator it = m_GlobalOptions.begin(); it != m_GlobalOptions.end(); ++it) {
     592        std::shared_ptr<DhcpOption> opt(it->second);
    593593
    594594        octets_t data;
     
    596596
    597597        bool space = false;
    598         for (auto c: data) {
     598        for (octets_t::iterator c = data.begin(); c != data.end(); ++c) {
    599599            if (space)
    600600                std::cout << " ";
    601601            else
    602602                space = true;
    603             std::cout << (int)c;
     603            std::cout << (int)*c;
    604604        }
    605605        std::cout << std::endl;
     
    854854    optmap << new OptSubnetMask(m_IPv4Netmask);
    855855
    856     for (auto optreq: reqOpts.value())
    857     {
    858         std::cout << ">>> requested option " << (int)optreq << std::endl;
    859 
    860         if (optreq == OptSubnetMask::optcode)
     856    const OptParameterRequest::value_t& reqValue = reqOpts.value();
     857    for (octets_t::const_iterator optreq = reqValue.begin(); optreq != reqValue.end(); ++optreq)
     858    {
     859        std::cout << ">>> requested option " << (int)*optreq << std::endl;
     860
     861        if (*optreq == OptSubnetMask::optcode)
    861862        {
    862863            std::cout << "... always supplied" << std::endl;
     
    866867        if (vmopts != NULL)
    867868        {
    868             optmap_t::const_iterator it( vmopts->find(optreq) );
     869            optmap_t::const_iterator it( vmopts->find(*optreq) );
    869870            if (it != vmopts->end())
    870871            {
     
    875876        }
    876877
    877         optmap_t::const_iterator it( m_GlobalOptions.find(optreq) );
     878        optmap_t::const_iterator it( m_GlobalOptions.find(*optreq) );
    878879        if (it != m_GlobalOptions.end())
    879880        {
     
    890891    if (vmopts != NULL)
    891892    {
    892         for (auto it: *vmopts) {
    893             std::shared_ptr<DhcpOption> opt(it.second);
     893        for (optmap_t::const_iterator it = vmopts->begin(); it != vmopts->end(); ++it) {
     894            std::shared_ptr<DhcpOption> opt(it->second);
    894895            if (optmap.count(opt->optcode()) == 0 && opt->optcode() > 127)
    895896            {
     
    900901    }
    901902
    902     for (auto it: m_GlobalOptions) {
    903         std::shared_ptr<DhcpOption> opt(it.second);
     903    for (optmap_t::const_iterator it = m_GlobalOptions.begin(); it != m_GlobalOptions.end(); ++it) {
     904        std::shared_ptr<DhcpOption> opt(it->second);
    904905        if (optmap.count(opt->optcode()) == 0 && opt->optcode() > 127)
    905906        {
  • trunk/src/VBox/NetworkServices/Dhcpd/Db.cpp

    r75513 r75568  
    291291     */
    292292    const xml::ElementNode *ndTime = ndLease->findChildElement("Time");
    293     if (time == NULL)
     293    if (ndTime == NULL)
    294294        return NULL;
    295295
  • trunk/src/VBox/NetworkServices/Dhcpd/Db.h

    r73076 r75568  
    5151    Binding(const Binding &);
    5252
    53     explicit Binding(RTNETADDRIPV4 addr)
    54       : m_addr(addr), m_state(FREE),
     53    explicit Binding(RTNETADDRIPV4 addrParam)
     54      : m_addr(addrParam), m_state(FREE),
    5555        m_issued(), m_secLease() {}
    5656
    57     Binding(RTNETADDRIPV4 addr, const ClientId &id)
    58       : m_addr(addr), m_state(FREE), m_id(id),
     57    Binding(RTNETADDRIPV4 addrParam, const ClientId &idParam)
     58      : m_addr(addrParam), m_state(FREE), m_id(idParam),
    5959        m_issued(), m_secLease() {}
    6060
     
    7070    TimeStamp issued() const { return m_issued; }
    7171
    72     Binding &setState(State state)
     72    Binding &setState(State stateParam)
    7373    {
    74         m_state = state;
     74        m_state = stateParam;
    7575        return *this;
    7676    }
     
    8585    }
    8686
    87     Binding &giveTo(const ClientId &id)
     87    Binding &giveTo(const ClientId &idParam)
    8888    {
    89         m_id = id;
     89        m_id = idParam;
    9090        m_state = FREE;
    9191        return *this;
  • trunk/src/VBox/NetworkServices/Dhcpd/Defs.h

    r75513 r75568  
    2727#include <vector>
    2828
     29#ifdef _MSC_VER
     30# define __func__ __FUNCTION__
     31#endif
     32
    2933typedef std::vector<uint8_t> octets_t;
    3034
     
    3236
    3337class DhcpOption;
    34 typedef std::map<uint8_t, std::shared_ptr<DhcpOption>> optmap_t;
     38typedef std::map<uint8_t, std::shared_ptr<DhcpOption> > optmap_t;
    3539
    3640inline bool operator==(const RTMAC &l, const RTMAC &r)
  • trunk/src/VBox/NetworkServices/Dhcpd/DhcpMessage.cpp

    r70836 r75568  
    323323
    324324DhcpServerMessage::DhcpServerMessage(const DhcpClientMessage &req,
    325                                      uint8_t messageType, RTNETADDRIPV4 serverAddr)
     325                                     uint8_t messageTypeParam, RTNETADDRIPV4 serverAddr)
    326326  : DhcpMessage(),
    327327    m_optServerId(serverAddr)
     
    329329    m_dst.u = 0xffffffff;       /* broadcast */
    330330
    331     m_optMessageType = OptMessageType(messageType);
     331    m_optMessageType = OptMessageType(messageTypeParam);
    332332
    333333    /* copy values from the request (cf. RFC2131 Table 3) */
  • trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.cpp

    r75513 r75568  
    3636optmap_t &operator<<(optmap_t &optmap, const std::shared_ptr<DhcpOption> &option)
    3737{
    38     if (option == NULL)
     38    if (option == nullptr)
    3939        return optmap;
    4040
  • trunk/src/VBox/NetworkServices/Dhcpd/Makefile.kmk

    r75513 r75568  
    2929 ifdef VBOX_WITH_HARDENING
    3030  PROGRAMS += VBoxNetDhcpdHardened
    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
     31  DLLS += VBoxNetDhcpd
    3732 else
    3833  PROGRAMS += VBoxNetDhcpd
    3934 endif
    4035
    41  VBoxNetDhcpd_TEMPLATE := $(if-expr defined(VBOX_WITH_HARDENING),VBOXMAINDLL,VBOXMAINCLIENTEXE)
    42  VBoxNetDhcpd_NAME     := VBoxNetDhcpd
     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 VBoxNetDhcpd_TEMPLATE := $(if-expr defined(VBOX_WITH_HARDENING),VBoxR3Dll,VBOXR3EXE)
     44 VBoxNetDhcpd_NAME      = VBoxNetDHCP
    4345 # VBoxNetDhcpd_DEFS      = IPv6
    44  # VBoxNetLwipNAT_DEFS.linux = WITH_VALGRIND
    45  VBoxNetDhcpd_DEFS.win  = VBOX_COM_OUTOFPROC_MODULE _WIN32_WINNT=0x501 # Windows XP
     46 # VBoxNetDhcpd_DEFS.linux = WITH_VALGRIND
     47 #VBoxNetDhcpd_DEFS.win  = VBOX_COM_OUTOFPROC_MODULE _WIN32_WINNT=0x501 # Windows XP
    4648
    4749 # (current dir is for for lwipopts.h)
    4850 VBoxNetDhcpd_INCS += . $(addprefix ../../Devices/Network/lwip-new/,$(LWIP_INCS))
    4951
    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))
     52 VBoxNetDhcpd_DEFS    = KBUILD_TYPE=\"$(KBUILD_TYPE)\"
     53 ifneq ($(KBUILD_TARGET),win)
     54  VBoxNetDhcpd_DEFS     += VBOX_WITH_XPCOM
     55  VBoxNetDhcpd_INCS     += $(VBOX_XPCOM_INCS)
     56  VBoxNetDhcpd_CXXFLAGS += $(VBOX_GCC_std)
     57 endif
     58 VBoxNetDhcpd_SOURCES = ../../Main/glue/VBoxLogRelCreate.cpp \
     59                        ../../Main/glue/GetVBoxUserHomeDirectory.cpp \
     60                        ClientId.cpp \
     61                        Config.cpp \
     62                        DHCPD.cpp \
     63                        Db.cpp \
     64                        DhcpMessage.cpp \
     65                        DhcpOptions.cpp \
     66                        IPv4Pool.cpp \
     67                        TimeStamp.cpp \
     68                        VBoxNetDhcpd.cpp \
     69                        $(addprefix ../../Devices/Network/lwip-new/,$(LWIP_SOURCES))
    6170
    62  VBoxNetLwipNAT_LIBS = $(LIB_RUNTIME)
     71 VBoxNetDhcpd_LIBS = $(LIB_RUNTIME)
    6372
    64  VBoxNetLwipNAT_LIBS.solaris += socket nsl
    65  VBoxNetLwipNAT_LDFLAGS.win = /SUBSYSTEM:windows
     73 VBoxNetDhcpd_LIBS.solaris += socket nsl
     74 VBoxNetDhcpd_LDFLAGS.win = /SUBSYSTEM:windows
    6675
    6776 ifeq ($(KBUILD_TARGET),win)
  • trunk/src/VBox/NetworkServices/Dhcpd/VBoxNetDhcpd.cpp

    r75513 r75568  
    5252#include <memory>
    5353
     54#ifdef RT_OS_WINDOWS /* WinMain */
     55#undef htonl
     56#undef ntohl
     57# include <iprt/win/windows.h>
     58#endif
    5459
    5560struct delete_pbuf
     
    448453                                                     i, cSegs,
    449454                                                     &cbSegFrame);
    450                 ifInput(pvSegFrame, cbFrame);
     455                ifInput(pvSegFrame, (uint32_t)cbFrame);
    451456            }
    452457        }
     
    738743
    739744    unique_ptr_pbuf q ( pbuf_alloc(PBUF_RAW, (u16_t)data.size(), PBUF_RAM) );
    740     if (q == NULL)
    741         return;
    742 
    743     error = pbuf_take(q.get(), &data.front(), data.size());
     745    if (q == nullptr)
     746        return;
     747
     748    error = pbuf_take(q.get(), &data.front(), (u16_t)data.size());
    744749    if (error != ERR_OK)
    745750        return;
  • trunk/src/VBox/NetworkServices/Makefile.kmk

    r75513 r75568  
    2222ifdef VBOX_WITH_MAIN
    2323 # Include sub-makefiles.
    24  include $(PATH_SUB_CURRENT)/DHCP/Makefile.kmk
     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
    2529 ifdef VBOX_WITH_NAT_SERVICE
    2630  include $(PATH_SUB_CURRENT)/NAT/Makefile.kmk
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