VirtualBox

Changeset 49542 in vbox for trunk


Ignore:
Timestamp:
Nov 19, 2013 1:50:30 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
90725
Message:

DHCP/NetworkManager hides internals in implementation.

Location:
trunk/src/VBox/NetworkServices/DHCP
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/DHCP/Config.cpp

    r49328 r49542  
    692692 * Network manager
    693693 */
     694struct NetworkManager::Data
     695{
     696    Data()
     697    {
     698        RT_ZERO(BootPReplyMsg);
     699        cbBooPReplyMsg = 0;
     700       
     701        m_pSession = NIL_RTR0PTR;
     702        m_pIfBuf = NULL;
     703        m_OurAddress.u = 0;
     704        m_OurNetmask.u = 0;
     705        RT_ZERO(m_OurMac);
     706    }
     707
     708    union {
     709        RTNETBOOTP BootPHeader;
     710        uint8_t au8Storage[1024];
     711    } BootPReplyMsg;
     712    int cbBooPReplyMsg;
     713
     714    /* XXX: artifacts should be hidden or removed from here. */
     715    PSUPDRVSESSION m_pSession;
     716    INTNETIFHANDLE m_hIf;
     717    PINTNETBUF m_pIfBuf;
     718
     719    RTNETADDRIPV4 m_OurAddress;
     720    RTNETADDRIPV4 m_OurNetmask;
     721    RTMAC m_OurMac;
     722};
     723
     724
     725NetworkManager::NetworkManager():m(NULL)
     726{
     727    m = new NetworkManager::Data();
     728}
     729
     730
     731NetworkManager::~NetworkManager()
     732{
     733    delete m;
     734    m = NULL;
     735}
     736
     737
    694738NetworkManager *NetworkManager::getNetworkManager()
    695739{
     
    711755
    712756    RTNETADDRIPV4 address = l.getAddress();
    713     BootPReplyMsg.BootPHeader.bp_yiaddr =  address;
     757    m->BootPReplyMsg.BootPHeader.bp_yiaddr =  address;
    714758
    715759    /* Ubuntu ???*/
    716     BootPReplyMsg.BootPHeader.bp_ciaddr =  address;
     760    m->BootPReplyMsg.BootPHeader.bp_ciaddr =  address;
    717761
    718762    /* options:
     
    758802    Lease l = client.lease();
    759803    address = l.getAddress();
    760     BootPReplyMsg.BootPHeader.bp_ciaddr =  address;
     804    m->BootPReplyMsg.BootPHeader.bp_ciaddr =  address;
    761805
    762806
     
    765809     * XXX: Using addressHint is not correct way to initialize [cy]iaddress...
    766810     */
    767     BootPReplyMsg.BootPHeader.bp_ciaddr = address;
    768     BootPReplyMsg.BootPHeader.bp_yiaddr = address;
    769 
    770     Assert(BootPReplyMsg.BootPHeader.bp_yiaddr.u);
     811    m->BootPReplyMsg.BootPHeader.bp_ciaddr = address;
     812    m->BootPReplyMsg.BootPHeader.bp_yiaddr = address;
     813
     814    Assert(m->BootPReplyMsg.BootPHeader.bp_yiaddr.u);
    771815
    772816    /* options:
     
    814858     * RFC 2131 require to have it zero fo NAK.
    815859     */
    816     BootPReplyMsg.BootPHeader.bp_yiaddr.u = 0;
     860    m->BootPReplyMsg.BootPHeader.bp_yiaddr.u = 0;
    817861
    818862    /* options:
     
    832876
    833877
     878const RTNETADDRIPV4& NetworkManager::getOurAddress() const
     879{
     880    return m->m_OurAddress;
     881}
     882
     883
     884const RTNETADDRIPV4& NetworkManager::getOurNetmask() const
     885{
     886    return m->m_OurNetmask;
     887}
     888
     889
     890const RTMAC& NetworkManager::getOurMac() const
     891{
     892    return m->m_OurMac;
     893}
     894
     895
     896void NetworkManager::setOurAddress(const RTNETADDRIPV4& aAddress)
     897{
     898    m->m_OurAddress = aAddress;
     899}
     900
     901
     902void NetworkManager::setOurNetmask(const RTNETADDRIPV4& aNetmask)
     903{
     904    m->m_OurNetmask = aNetmask;
     905}
     906
     907
     908void NetworkManager::setOurMac(const RTMAC& aMac)
     909{
     910    m->m_OurMac = aMac;
     911}
     912
     913
     914void NetworkManager::setSession(PSUPDRVSESSION aSession)
     915{
     916    m->m_pSession = aSession;
     917}
     918
     919
     920void NetworkManager::setInterface(INTNETIFHANDLE aIf)
     921{
     922    m->m_hIf = aIf;
     923}
     924
     925
     926void NetworkManager::setRingBuffer(PINTNETBUF aBuf)
     927{
     928    m->m_pIfBuf = aBuf;
     929}
     930
    834931/**
    835932 *
     
    837934int NetworkManager::prepareReplyPacket4Client(const Client& client, uint32_t u32Xid)
    838935{
    839     memset(&BootPReplyMsg, 0, sizeof(BootPReplyMsg));
    840 
    841     BootPReplyMsg.BootPHeader.bp_op     = RTNETBOOTP_OP_REPLY;
    842     BootPReplyMsg.BootPHeader.bp_htype  = RTNET_ARP_ETHER;
    843     BootPReplyMsg.BootPHeader.bp_hlen   = sizeof(RTMAC);
    844     BootPReplyMsg.BootPHeader.bp_hops   = 0;
    845     BootPReplyMsg.BootPHeader.bp_xid    = u32Xid;
    846     BootPReplyMsg.BootPHeader.bp_secs   = 0;
     936    RT_ZERO(m->BootPReplyMsg);
     937
     938    m->BootPReplyMsg.BootPHeader.bp_op     = RTNETBOOTP_OP_REPLY;
     939    m->BootPReplyMsg.BootPHeader.bp_htype  = RTNET_ARP_ETHER;
     940    m->BootPReplyMsg.BootPHeader.bp_hlen   = sizeof(RTMAC);
     941    m->BootPReplyMsg.BootPHeader.bp_hops   = 0;
     942    m->BootPReplyMsg.BootPHeader.bp_xid    = u32Xid;
     943    m->BootPReplyMsg.BootPHeader.bp_secs   = 0;
    847944    /* XXX: bp_flags should be processed specially */
    848     BootPReplyMsg.BootPHeader.bp_flags  = 0;
    849     BootPReplyMsg.BootPHeader.bp_ciaddr.u = 0;
    850     BootPReplyMsg.BootPHeader.bp_giaddr.u = 0;
    851 
    852     BootPReplyMsg.BootPHeader.bp_chaddr.Mac = client.getMacAddress();
     945    m->BootPReplyMsg.BootPHeader.bp_flags  = 0;
     946    m->BootPReplyMsg.BootPHeader.bp_ciaddr.u = 0;
     947    m->BootPReplyMsg.BootPHeader.bp_giaddr.u = 0;
     948
     949    m->BootPReplyMsg.BootPHeader.bp_chaddr.Mac = client.getMacAddress();
    853950
    854951    const Lease l = client.lease();
    855     BootPReplyMsg.BootPHeader.bp_yiaddr = l.getAddress();
    856     BootPReplyMsg.BootPHeader.bp_siaddr.u = 0;
    857 
    858 
    859     BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_cookie = RT_H2N_U32_C(RTNET_DHCP_COOKIE);
    860 
    861     memset(&BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_opts[0],
     952    m->BootPReplyMsg.BootPHeader.bp_yiaddr = l.getAddress();
     953    m->BootPReplyMsg.BootPHeader.bp_siaddr.u = 0;
     954
     955
     956    m->BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_cookie = RT_H2N_U32_C(RTNET_DHCP_COOKIE);
     957
     958    memset(&m->BootPReplyMsg.BootPHeader.bp_vend.Dhcp.dhcp_opts[0],
    862959           '\0',
    863960           RTNET_DHCP_OPT_SIZE);
     
    874971      Options....
    875972     */
    876     VBoxNetDhcpWriteCursor Cursor(&BootPReplyMsg.BootPHeader, RTNET_DHCP_NORMAL_SIZE);
     973    VBoxNetDhcpWriteCursor Cursor(&m->BootPReplyMsg.BootPHeader, RTNET_DHCP_NORMAL_SIZE);
    877974
    878975    /* The basics */
    879976
    880     Cursor.optIPv4Addr(RTNET_DHCP_OPT_SERVER_ID, m_OurAddress);
     977    Cursor.optIPv4Addr(RTNET_DHCP_OPT_SERVER_ID, m->m_OurAddress);
    881978
    882979    const Lease l = client.lease();
     
    9221019    else
    9231020#endif
    924         rc = VBoxNetUDPBroadcast(m_pSession,
    925                                  m_hIf,
    926                                  m_pIfBuf,
    927                                  m_OurAddress,
    928                                  &m_OurMac,
     1021        rc = VBoxNetUDPBroadcast(m->m_pSession,
     1022                                 m->m_hIf,
     1023                                 m->m_pIfBuf,
     1024                                 m->m_OurAddress,
     1025                                 &m->m_OurMac,
    9291026                                 RTNETIPV4_PORT_BOOTPS,               /* sender */
    9301027                                 RTNETIPV4_PORT_BOOTPC,
    931                                  &BootPReplyMsg, RTNET_DHCP_NORMAL_SIZE);
     1028                                 &m->BootPReplyMsg, RTNET_DHCP_NORMAL_SIZE);
    9321029
    9331030    AssertRCReturn(rc,rc);
  • trunk/src/VBox/NetworkServices/DHCP/Config.h

    r49328 r49542  
    495495    int nak(const Client& lease, uint32_t u32Xid);
    496496
    497     const RTNETADDRIPV4& getOurAddress(){ return m_OurAddress;}
    498     const RTNETADDRIPV4& getOurNetmask(){ return m_OurNetmask;}
    499     const RTMAC& getOurMac() {return m_OurMac;}
    500 
    501     void setOurAddress(const RTNETADDRIPV4& aAddress){ m_OurAddress = aAddress;}
    502     void setOurNetmask(const RTNETADDRIPV4& aNetmask){ m_OurNetmask = aNetmask;}
    503     void setOurMac(const RTMAC& aMac) {m_OurMac = aMac;}
    504 
    505     /* XXX: artifacts should be hidden or removed from here. */
    506     PSUPDRVSESSION m_pSession;
    507     INTNETIFHANDLE m_hIf;
    508     PINTNETBUF m_pIfBuf;
     497    const RTNETADDRIPV4& getOurAddress() const;
     498    const RTNETADDRIPV4& getOurNetmask() const;
     499    const RTMAC& getOurMac() const;
     500
     501    void setOurAddress(const RTNETADDRIPV4& aAddress);
     502    void setOurNetmask(const RTNETADDRIPV4& aNetmask);
     503    void setOurMac(const RTMAC& aMac);
     504
     505    void setSession(PSUPDRVSESSION);
     506    void setInterface(INTNETIFHANDLE);
     507    void setRingBuffer(PINTNETBUF);
    509508
    510509private:
    511     NetworkManager(){}
    512     virtual ~NetworkManager(){}
     510    NetworkManager();
     511    ~NetworkManager();
    513512
    514513    int prepareReplyPacket4Client(const Client& client, uint32_t u32Xid);
     
    516515    int processParameterReqList(const Client& client, uint8_t *pu8ReqList, int cReqList);
    517516
    518     union {
    519         RTNETBOOTP BootPHeader;
    520         uint8_t au8Storage[1024];
    521     } BootPReplyMsg;
    522     int cbBooPReplyMsg;
    523 
    524     RTNETADDRIPV4 m_OurAddress;
    525     RTNETADDRIPV4 m_OurNetmask;
    526     RTMAC m_OurMac;
     517private:
     518    struct Data;
     519    Data *m;
     520
    527521};
    528522
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette