Changeset 22217 in vbox
- Timestamp:
- Aug 13, 2009 3:57:05 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 51018
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DrvNAT.cpp
r22216 r22217 62 62 #define VBOX_NAT_DELAY_HACK 63 63 #if 0 64 #define SLIRP_CAN_SAND_IN_PDM 165 #endif66 64 #define SLIRP_SPLIT_CAN_OUTPUT 1 65 #endif 67 66 68 67 #define GET_EXTRADATA(pthis, node, name, rc, type, type_name, var) \ … … 227 226 /** The core part owned by the queue manager. */ 228 227 PDMQUEUEITEMCORE Core; 229 SLIRP_EVENT enmType;230 int *pStatus;231 228 /** The buffer for output to guest. */ 232 229 const uint8_t *pu8Buf; … … 592 589 { 593 590 #ifdef SLIRP_SPLIT_CAN_OUTPUT 594 # ifdef SLIRP_CAN_SAND_IN_PDM595 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 # else611 PDRVNAT pThis = (PDRVNAT)pvUser;612 591 return pThis->output_flag; 613 # endif614 592 #else 615 593 return 1; … … 637 615 if (pItem) 638 616 { 639 pItem->enmType = SLIRP_SEND;640 617 pItem->pu8Buf = pu8Buf; 641 618 pItem->cb = cb; … … 675 652 Log(("drvNATQueueConsumer(pItem:%p, pu8Buf:%p, cb:%d)\n", pItem, pItem->pu8Buf, pItem->cb)); 676 653 Log2(("drvNATQueueConsumer: pu8Buf:\n%.Rhxd\n", pItem->pu8Buf)); 677 switch (pItem->enmType) {678 case SLIRP_SEND:679 654 #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); 693 660 return true; 694 661 695 #if 0696 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 #else705 /*Copy buffer again, till seeking good way of syncronization with slirp mbuf management code*/706 662 AssertRelease(pItem->mbuf == NULL); 707 #endif708 663 return RT_SUCCESS(rc); 709 664 }
Note:
See TracChangeset
for help on using the changeset viewer.