VirtualBox

Changeset 22217 in vbox


Ignore:
Timestamp:
Aug 13, 2009 3:57:05 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51018
Message:

NAT: remove RX-check via PDM Queue experiment

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DrvNAT.cpp

    r22216 r22217  
    6262#define VBOX_NAT_DELAY_HACK
    6363#if 0
    64 #define SLIRP_CAN_SAND_IN_PDM 1
    65 #endif
    6664#define SLIRP_SPLIT_CAN_OUTPUT 1
     65#endif
    6766
    6867#define GET_EXTRADATA(pthis, node, name, rc, type, type_name, var)                                  \
     
    227226    /** The core part owned by the queue manager. */
    228227    PDMQUEUEITEMCORE    Core;
    229     SLIRP_EVENT enmType;
    230     int *pStatus;
    231228    /** The buffer for output to guest. */
    232229    const uint8_t       *pu8Buf;
     
    592589{
    593590#ifdef SLIRP_SPLIT_CAN_OUTPUT
    594 # ifdef SLIRP_CAN_SAND_IN_PDM
    595     int status = 0;
    596     int rc = 0;
    597     PDRVNAT pThis = (PDRVNAT)pvUser;
    598 
    599     PDRVNATQUEUITEM pItem = (PDRVNATQUEUITEM)PDMQueueAlloc(pThis->pSendQueue);
    600     if (pItem)
    601     {
    602         pItem->enmType = SLIRP_CHECK;
    603         pItem->pStatus = &status;
    604         PDMQueueInsert(pThis->pSendQueue, &pItem->Core);
    605         rc = RTSemEventWait(pThis->semStatus, RT_INDEFINITE_WAIT);
    606         AssertRC(rc);
    607         return status & pThis->output_flag;
    608     }
    609     return 0;
    610 # else
    611    PDRVNAT pThis = (PDRVNAT)pvUser;
    612591   return pThis->output_flag;
    613 # endif
    614592#else
    615593    return 1;
     
    637615    if (pItem)
    638616    {
    639         pItem->enmType = SLIRP_SEND;
    640617        pItem->pu8Buf = pu8Buf;
    641618        pItem->cb = cb;
     
    675652    Log(("drvNATQueueConsumer(pItem:%p, pu8Buf:%p, cb:%d)\n", pItem, pItem->pu8Buf, pItem->cb));
    676653    Log2(("drvNATQueueConsumer: pu8Buf:\n%.Rhxd\n", pItem->pu8Buf));
    677     switch (pItem->enmType) {
    678         case SLIRP_SEND:
    679654#ifndef SLIRP_SPLIT_CAN_OUTPUT
    680             if (RT_FAILURE(pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0)))
    681                 return false;
    682 #endif
    683             rc = pThis->pPort->pfnReceive(pThis->pPort, pItem->pu8Buf, pItem->cb);
    684             RTMemFree((void *)pItem->pu8Buf);
    685             break;
    686         case SLIRP_CHECK:
    687            
    688             *pItem->pStatus = (RT_SUCCESS(pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0))? 1 : 0);
    689              rc = RTSemEventSignal(pThis->semStatus);
    690              AssertRC(rc);
    691             break;
    692     }
     655    if (RT_FAILURE(pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, 0)))
     656        return false;
     657#endif
     658    rc = pThis->pPort->pfnReceive(pThis->pPort, pItem->pu8Buf, pItem->cb);
     659    RTMemFree((void *)pItem->pu8Buf);
    693660    return true;
    694661
    695 #if 0
    696     rc = RTReqAlloc(pThis->pReqQueue, &pReq, RTREQTYPE_INTERNAL);
    697     AssertReleaseRC(rc);
    698     pReq->u.Internal.pfn      = (PFNRT)slirp_post_sent;
    699     pReq->u.Internal.cArgs    = 2;
    700     pReq->u.Internal.aArgs[0] = (uintptr_t)pThis->pNATState;
    701     pReq->u.Internal.aArgs[1] = (uintptr_t)pItem->mbuf;
    702     pReq->fFlags              = RTREQFLAGS_VOID;
    703     AssertRC(rc);
    704 #else
    705     /*Copy buffer again, till seeking good way of syncronization with slirp mbuf management code*/
    706662    AssertRelease(pItem->mbuf == NULL);
    707 #endif
    708663    return RT_SUCCESS(rc);
    709664}
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