VirtualBox

忽略:
時間撮記:
2009-3-5 下午02:49:41 (16 年 以前)
作者:
vboxsync
訊息:

VBoxNetDHCP: fixes and logging.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp

    r17374 r17403  
    201201    int                 run(void);
    202202
    203     static const char  *dhcpMsgName(uint8_t MsgType);
    204 
    205203protected:
    206     int             addConfig(VBoxNetDhcpCfg *pCfg);
    207     bool            handleDhcpMsg(uint8_t uMsgType, PCRTNETBOOTP pDhcpMsg, size_t cb);
    208 
    209     inline void     debugPrint( int32_t iMinLevel, bool fMsg,  const char *pszFmt, ...) const;
    210     void            debugPrintV(int32_t iMinLevel, bool fMsg,  const char *pszFmt, va_list va) const;
     204    int                 addConfig(VBoxNetDhcpCfg *pCfg);
     205    bool                handleDhcpMsg(uint8_t uMsgType, PCRTNETBOOTP pDhcpMsg, size_t cb);
     206
     207    inline void         debugPrint( int32_t iMinLevel, bool fMsg,  const char *pszFmt, ...) const;
     208    void                debugPrintV(int32_t iMinLevel, bool fMsg,  const char *pszFmt, va_list va) const;
     209    static const char  *debugDhcpName(uint8_t uMsgType);
    211210
    212211protected:
     
    217216    RTMAC               m_MacAddress;
    218217    RTNETADDRIPV4       m_IpAddress;
    219     int32_t             m_cVerbosity;
    220218    /** @} */
    221219
     
    235233    /** @} */
    236234
    237     /** @name The current packet (for debugPrint)
     235    /** @name Debug stuff
    238236     * @{  */
     237    int32_t             m_cVerbosity;
    239238    uint8_t             m_uCurMsgType;
    240239    uint16_t            m_cbCurMsg;
     
    274273    m_pIfBuf                = NULL;
    275274
     275    m_cVerbosity            = 0;
    276276    m_uCurMsgType           = UINT8_MAX;
    277277    m_cbCurMsg              = 0;
    278278    m_pCurMsg               = NULL;
    279279    memset(&m_CurHdrs, '\0', sizeof(m_CurHdrs));
    280 
    281280
    282281#if 1 /* while hacking. */
     
    376375    RTGETOPTSTATE State;
    377376    int rc = RTGetOptInit(&State, argc, argv, &s_aOptionDefs[0], RT_ELEMENTS(s_aOptionDefs), 0, 0);
    378     AssertReturn(rc, 49);
     377    AssertRCReturn(rc, 49);
    379378
    380379    VBoxNetDhcpCfg *pCurCfg = NULL;
     
    494493    {
    495494        m_pSession = NULL;
    496         RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: SUPR3Init -> %Rrc\n", rc);
     495        RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: SUPR3Init -> %Rrc", rc);
    497496        return 1;
    498497    }
     
    502501    if (RT_FAILURE(rc))
    503502    {
    504         RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: RTPathProgram -> %Rrc\n", rc);
     503        RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: RTPathProgram -> %Rrc", rc);
    505504        return 1;
    506505    }
     
    509508    if (RT_FAILURE(rc))
    510509    {
    511         RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: SUPLoadVMM(\"%s\") -> %Rrc\n", szPath, rc);
     510        RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: SUPLoadVMM(\"%s\") -> %Rrc", szPath, rc);
    512511        return 1;
    513512    }
     
    531530     * Issue the request.
    532531     */
    533     if (m_cVerbosity >= 2)
    534         RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: attempting to open/create network \"%s\"...\n", OpenReq.szNetwork);
     532    debugPrint(2, false, "attempting to open/create network \"%s\"...", OpenReq.szNetwork);
    535533    rc = SUPCallVMMR0Ex(NIL_RTR0PTR, VMMR0_DO_INTNET_OPEN, 0, &OpenReq.Hdr);
    536534    if (RT_SUCCESS(rc))
    537535    {
    538536        m_hIf = OpenReq.hIf;
    539         if (m_cVerbosity >= 1)
    540             RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: successfully opened/created \"%s\" - hIf=%#x\n",
    541                          OpenReq.szNetwork, m_hIf);
     537        debugPrint(1, false, "successfully opened/created \"%s\" - hIf=%#x", OpenReq.szNetwork, m_hIf);
    542538
    543539        /*
     
    554550        {
    555551            PINTNETBUF pBuf = GetRing3BufferReq.pRing3Buf;
    556             if (m_cVerbosity >= 1)
    557                 RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: pBuf=%p cbBuf=%d cbSend=%d cbRecv=%d\n",
    558                              pBuf, pBuf->cbBuf, pBuf->cbSend, pBuf->cbRecv);
     552            debugPrint(1, false, "pBuf=%p cbBuf=%d cbSend=%d cbRecv=%d",
     553                       pBuf, pBuf->cbBuf, pBuf->cbSend, pBuf->cbRecv);
    559554            m_pIfBuf = pBuf;
    560555
     
    607602        WaitReq.pSession = m_pSession;
    608603        WaitReq.hIf = m_hIf;
    609         WaitReq.cMillies = RT_INDEFINITE_WAIT;
     604        WaitReq.cMillies = 2000; /* 2 secs - the sleep is for some reason uninterruptible... */  /** @todo fix interruptability in SrvIntNet! */
    610605        int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, VMMR0_DO_INTNET_IF_WAIT, 0, &WaitReq.Hdr);
    611606        if (RT_FAILURE(rc))
    612607        {
     608            if (rc == VERR_TIMEOUT)
     609                continue;
    613610            RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: VMMR0_DO_INTNET_IF_WAIT returned %Rrc\n", rc);
    614611            return 1;
     
    620617        while (INTNETRingGetReadable(pRingBuf) > 0)
    621618        {
    622             size_t          cb;
    623             void           *pv = VBoxNetUDPMatch(m_pIfBuf, 67 /* bootps */, &m_MacAddress,
    624                                                  VBOXNETUDP_MATCH_UNICAST | VBOXNETUDP_MATCH_BROADCAST | VBOXNETUDP_MATCH_CHECKSUM
    625                                                  | (m_cVerbosity > 2 ? VBOXNETUDP_MATCH_PRINT_STDERR : 0),
    626                                                  &m_CurHdrs, &cb);
     619            size_t  cb;
     620            void   *pv = VBoxNetUDPMatch(m_pIfBuf, 67 /* bootps */, &m_MacAddress,
     621                                         VBOXNETUDP_MATCH_UNICAST | VBOXNETUDP_MATCH_BROADCAST | VBOXNETUDP_MATCH_CHECKSUM
     622                                         | (m_cVerbosity > 2 ? VBOXNETUDP_MATCH_PRINT_STDERR : 0),
     623                                         &m_CurHdrs, &cb);
    627624            if (pv && cb)
    628625            {
     
    638635                    m_uCurMsgType = UINT8_MAX;
    639636                }
    640                 else if (m_cVerbosity >= 1)
    641                     RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: Skipping invalid DHCP packet.\n");
     637                else
     638                    debugPrint(1, true, "VBoxNetDHCP: Skipping invalid DHCP packet.\n");
    642639
    643640                m_pCurMsg = NULL;
     
    664661bool VBoxNetDhcp::handleDhcpMsg(uint8_t uMsgType, PCRTNETBOOTP pDhcpMsg, size_t cb)
    665662{
     663    debugPrint(0, true, "todo");
    666664    return false;
    667665}
     
    678676inline void VBoxNetDhcp::debugPrint(int32_t iMinLevel, bool fMsg, const char *pszFmt, ...) const
    679677{
    680     if (iMinLevel >= m_cVerbosity)
     678    if (iMinLevel <= m_cVerbosity)
    681679    {
    682680        va_list va;
     
    698696void VBoxNetDhcp::debugPrintV(int iMinLevel, bool fMsg, const char *pszFmt, va_list va) const
    699697{
    700     if (iMinLevel >= m_cVerbosity)
     698    if (iMinLevel <= m_cVerbosity)
    701699    {
    702700        va_list vaCopy;                 /* This dude is *very* special, thus the copy. */
     
    709707            &&  m_pCurMsg)
    710708        {
    711             if (m_uCurMsgType != UINT8_MAX)
    712             {
    713 //                const char *pszMsg = dhcpMsgName(m_uCurMsgType);
    714 //                RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: debug: \n",
    715 //                                //m_pCurMsg->bp_chaddr
    716             }
    717             else
    718             {
    719             }
     709            const char *pszMsg = m_uCurMsgType != UINT8_MAX ? debugDhcpName(m_uCurMsgType) : "";
     710            RTStrmPrintf(g_pStdErr, "VBoxNetDHCP: debug: %8s chaddr=%.6Rhxs ciaddr=%d.%d.%d.%d yiaddr=%d.%d.%d.%d siaddr=%d.%d.%d.%d\n",
     711                         pszMsg,
     712                         &m_pCurMsg->bp_chaddr,
     713                         m_pCurMsg->bp_ciaddr.au8[0], m_pCurMsg->bp_ciaddr.au8[1], m_pCurMsg->bp_ciaddr.au8[2], m_pCurMsg->bp_ciaddr.au8[3],
     714                         m_pCurMsg->bp_yiaddr.au8[0], m_pCurMsg->bp_yiaddr.au8[1], m_pCurMsg->bp_yiaddr.au8[2], m_pCurMsg->bp_yiaddr.au8[3],
     715                         m_pCurMsg->bp_siaddr.au8[0], m_pCurMsg->bp_siaddr.au8[1], m_pCurMsg->bp_siaddr.au8[2], m_pCurMsg->bp_siaddr.au8[3]);
    720716        }
     717    }
     718}
     719
     720
     721/**
     722 * Gets the name of given DHCP message type.
     723 *
     724 * @returns Readonly name.
     725 * @param   uMsgType        The message number.
     726 */
     727/* static */ const char *VBoxNetDhcp::debugDhcpName(uint8_t uMsgType)
     728{
     729    switch (uMsgType)
     730    {
     731        case 0:                         return "MT_00";
     732        case RTNET_DHCP_MT_DISCOVER:    return "DISCOVER";
     733        case RTNET_DHCP_MT_OFFER:       return "OFFER";
     734        case RTNET_DHCP_MT_REQUEST:     return "REQUEST";
     735        case RTNET_DHCP_MT_DECLINE:     return "DECLINE";
     736        case RTNET_DHCP_MT_ACK:         return "ACK";
     737        case RTNET_DHCP_MT_NAC:         return "NAC";
     738        case RTNET_DHCP_MT_RELEASE:     return "RELEASE";
     739        case RTNET_DHCP_MT_INFORM:      return "INFORM";
     740        case 9:                         return "MT_09";
     741        case 10:                        return "MT_0a";
     742        case 11:                        return "MT_0b";
     743        case 12:                        return "MT_0c";
     744        case 13:                        return "MT_0d";
     745        case 14:                        return "MT_0e";
     746        case 15:                        return "MT_0f";
     747        case 16:                        return "MT_10";
     748        case 17:                        return "MT_11";
     749        case 18:                        return "MT_12";
     750        case 19:                        return "MT_13";
     751        case UINT8_MAX:                 return "MT_ff";
     752        default:                        return "UNKNOWN";
    721753    }
    722754}
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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