VirtualBox

Changeset 39410 in vbox


Ignore:
Timestamp:
Nov 24, 2011 3:30:16 PM (13 years ago)
Author:
vboxsync
Message:

NAT/service: some delayed fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/NAT/VBoxNetNAT.cpp

    r38636 r39410  
    151151    m_MacAddress.au8[4]     = 0x41;
    152152    m_MacAddress.au8[5]     = 0x42;
    153     m_Ipv4Address.u         = RT_H2N_U32_C(RT_BSWAP_U32_C(RT_MAKE_U32_FROM_U8( 10,  0,  2,  1)));
    154     m_Ipv4Netmask.u         = 0xffff0000;
     153    m_Ipv4Address.u         = RT_H2N_U32_C(RT_BSWAP_U32_C(RT_MAKE_U32_FROM_U8( 10,  0,  2,  2)));
     154    m_Ipv4Netmask.u         = RT_H2N_U32_C(0xffffff);
    155155    cPkt = 0;
    156156    cUrgPkt = 0;
     
    161161{
    162162    int rc;
     163#if 0
     164    using namespace com;
     165    HRESULT hrc = com::Initialize();
     166    if (FAILED(hrc))
     167        return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to initialize COM!");
     168#endif
    163169
    164170    /*
    165171     * Initialize slirp.
    166172     */
    167     rc = slirp_init(&m_pNATState, m_Ipv4Address.u, m_Ipv4Netmask.u, m_fPassDomain, false, 0, this);
     173    rc = slirp_init(&m_pNATState, RT_H2N_U32_C(RT_BSWAP_U32_C(RT_MAKE_U32_FROM_U8( 10,  0,  2,  0))), m_Ipv4Netmask.u, m_fPassDomain, false, 0x40, 100, this);
    168174    AssertReleaseRC(rc);
    169175
     
    238244        {
    239245            uint16_t const u16Type = pHdr->u16Type;
    240             if (RT_LIKELY(   u16Type == INTNETHDR_TYPE_FRAME
    241                           || u16Type == INTNETHDR_TYPE_GSO))
     246            size_t       cbFrame = pHdr->cbFrame;
     247            size_t       cbIgnored;
     248            void        *pvSlirpFrame;
     249            struct mbuf *m;
     250            switch (u16Type)
    242251            {
    243                 size_t       cbFrame = pHdr->cbFrame;
    244                 size_t       cbIgnored;
    245                 void        *pvSlirpFrame;
    246                 struct mbuf *m;
    247                 if (u16Type == INTNETHDR_TYPE_FRAME)
    248                 {
     252                case INTNETHDR_TYPE_FRAME:
    249253                    m = slirp_ext_m_get(g_pNAT->m_pNATState, cbFrame, &pvSlirpFrame, &cbIgnored);
    250254                    if (!m)
     
    260264                                     (PFNRT)SendWorker, 2, m, cbFrame);
    261265                    AssertReleaseRC(rc);
    262                 }
    263                 else
     266                break;
     267                case INTNETHDR_TYPE_GSO:
    264268                {
    265269                    /** @todo pass these unmodified. */
     
    282286                        if (!m)
    283287                        {
    284                             LogRel(("NAT: Can't allocate send buffer cbSegFrame=%u seg=%u/%u\n", cbSegFrame, iSeg, cSegs));
     288                            LogRel(("NAT: Can't allocate send buffer cbSegFrame=%u seg=%u/%u\n",
     289                                    cbSegFrame, iSeg, cSegs));
    285290                            break;
    286291                        }
    287292                        memcpy(pvSlirpFrame, pvSegFrame, cbFrame);
    288293
    289                         rc = RTReqCallEx(m_pReqQueue, NULL /*ppReq*/, 0 /*cMillies*/, RTREQFLAGS_VOID | RTREQFLAGS_NO_WAIT,
     294                        rc = RTReqCallEx(m_pReqQueue, NULL /*ppReq*/, 0 /*cMillies*/,
     295                                         RTREQFLAGS_VOID | RTREQFLAGS_NO_WAIT,
    290296                                         (PFNRT)SendWorker, 2, m, cbSegFrame);
    291297                        AssertReleaseRC(rc);
     
    293299                    IntNetRingSkipFrame(&m_pIfBuf->Recv);
    294300                }
     301                break;
     302                case INTNETHDR_TYPE_PADDING:
     303                    IntNetRingSkipFrame(&m_pIfBuf->Recv);
     304                break;
     305                default:
     306                    IntNetRingSkipFrame(&m_pIfBuf->Recv);
     307                    STAM_REL_COUNTER_INC(&m_pIfBuf->cStatBadFrames);
     308                break;
     309                }
    295310
    296311#ifndef RT_OS_WINDOWS
    297312                /* kick select() */
    298                 size_t cbIgnored;
    299313                rc = RTPipeWrite(m_hPipeWrite, "", 1, &cbIgnored);
    300314                AssertRC(rc);
     
    305319#endif
    306320            }
    307             else if (u16Type == INTNETHDR_TYPE_PADDING)
    308                 IntNetRingSkipFrame(&m_pIfBuf->Recv);
    309             else
    310             {
    311                 IntNetRingSkipFrame(&m_pIfBuf->Recv);
    312                 STAM_REL_COUNTER_INC(&m_pIfBuf->cStatBadFrames);
    313             }
    314         }
     321            natNotifyNATThread();
    315322
    316323    }
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