VirtualBox

Changeset 12683 in vbox for trunk/src


Ignore:
Timestamp:
Sep 24, 2008 12:12:13 PM (16 years ago)
Author:
vboxsync
Message:

Solaris/vboxnetflt: bits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c

    r12672 r12683  
    793793    vboxnetflt_stream_t **ppPrevStream = NULL;
    794794
     795    qprocsoff(pQueue);
     796
    795797    /*
    796798     * Get instance data.
     
    806808    PVBOXNETFLTINS pThis = ASMAtomicUoReadPtr((void * volatile *)&pStream->pThis);
    807809    RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
    808 
    809     qprocsoff(pQueue);
    810810
    811811    /*
     
    859859     * Yes, I'm paranoid.
    860860     */
    861     if (!pMsg || !pQueue)
     861    if (!pMsg)
    862862    {
    863863        LogRel((DEVICE_NAME ":VBoxNetFltSolarisModReadPut huh?? Invalid parameters.\n"));
     
    884884        {
    885885            /*
    886              * Retain the instance if we're actively filtering.
     886             * Retain the instance if we're filtering regardless of we are active or not
     887             * The reason being even when we are inactive we reference the instance (e.g
     888             * the promiscuous OFF acknowledgement case).
    887889             */
    888890            RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
     
    23962398            if (!pPromiscStream->pHead)
    23972399            {
    2398                 pCur = RTMemAllocZ(sizeof(VBOXNETFLTPACKETID));
     2400                pCur = RTMemAlloc(sizeof(VBOXNETFLTPACKETID));
    23992401                if (RT_UNLIKELY(!pCur))
    24002402                {
     
    24072409                pPromiscStream->pHead = pCur;
    24082410                pPromiscStream->pTail = pCur;
    2409                 pCur->pNext = NULL;
    24102411                pPromiscStream->cLoopback++;
    24112412
     
    24142415                break;
    24152416            }
    2416 
    2417             if (   pPromiscStream->pTail
    2418                 && pPromiscStream->pTail->cbPacket == 0)
     2417            else if (   pPromiscStream->pTail
     2418                     && pPromiscStream->pTail->cbPacket == 0)
    24192419            {
    24202420                pCur = pPromiscStream->pTail;
     
    24262426                break;
    24272427            }
    2428 
    2429             AssertRelease(pPromiscStream->pTail);
    2430 
    2431             pCur = RTMemAllocZ(sizeof(VBOXNETFLTPACKETID));
    2432             if (RT_UNLIKELY(!pCur))
     2428            else
    24332429            {
    2434                 rc = VERR_NO_MEMORY;
     2430                Assert(pPromiscStream->pTail);
     2431                pCur = RTMemAlloc(sizeof(VBOXNETFLTPACKETID));
     2432                if (RT_UNLIKELY(!pCur))
     2433                {
     2434                    rc = VERR_NO_MEMORY;
     2435                    break;
     2436                }
     2437
     2438                vboxNetFltSolarisInitPacketId(pCur, pMsg);
     2439
     2440                pPromiscStream->pTail->pNext = pCur;
     2441                pPromiscStream->pTail = pCur;
     2442                pPromiscStream->cLoopback++;
     2443
     2444                LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback added tail checksum=%u cLoopback=%d.\n", pCur->Checksum,
     2445                        pPromiscStream->cLoopback));
    24352446                break;
    24362447            }
    2437 
    2438             vboxNetFltSolarisInitPacketId(pCur, pMsg);
    2439             pPromiscStream->pTail->pNext = pCur;
    2440             pPromiscStream->pTail = pCur;
    2441             pCur->pNext = NULL;
    2442             pPromiscStream->cLoopback++;
    2443 
    2444             LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback added tail checksum=%u cLoopback=%d.\n", pCur->Checksum,
    2445                     pPromiscStream->cLoopback));
    2446             break;
    24472448        } while (0);
    24482449    }
     
    24602461        pPromiscStream->pTail = pCur;
    24612462
    2462         pCur->pNext = NULL;
    24632463        vboxNetFltSolarisInitPacketId(pCur, pMsg);
    24642464        LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback recycled head!! checksum=%u cLoopback=%d\n", pCur->Checksum,
     
    26082608            pMsg = pCorrectedMsg;
    26092609    }
    2610 
    26112610    vboxNetFltSolarisAnalyzeMBlk(pMsg);
     2611
    26122612#endif
    26132613
     
    28092809                    && RT_BE2H_U16(pUdpHdr->uh_dport) == 68)
    28102810                {
    2811                     LogFlow((DEVICE_NAME ":UDP bootp ack D=%.6Rhxs S=%.6Rhxs UDP_CheckSum=%04x Computex=%04x\n", pb, pb + 6,
     2811                    LogRel((DEVICE_NAME ":UDP bootp ack D=%.6Rhxs S=%.6Rhxs UDP_CheckSum=%04x Computex=%04x\n", pb, pb + 6,
    28122812                                RT_BE2H_U16(pUdpHdr->uh_sum), RT_BE2H_U16(RTNetIPv4UDPChecksum(pIpHdr, pUdpHdr, pUdpHdr + 1))));
    28132813                }
     
    29842984    }
    29852985
    2986 
    29872986    /*
    29882987     * Create a message block and send it up the host stack (upstream).
     
    29972996
    29982997            /*
    2999              * Construct a DL_UNITDATA_IND style message.
     2998             * Send message up ARP stream.
    30002999             */
    3001             mblk_t *pDlpiMsg;
    3002             int rc = vboxNetFltSolarisRawToUnitData(pMsg, &pDlpiMsg);
    3003             if (RT_SUCCESS(rc))
     3000            if (fArp)
    30043001            {
    3005                 pMsg = pDlpiMsg;
    3006 
    3007                 if (fArp)
     3002                LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST ARP\n"));
     3003
     3004                /*
     3005                 * Construct a DL_UNITDATA_IND style message for ARP as it doesn't understand fast path.
     3006                 */
     3007                mblk_t *pDlpiMsg;
     3008                int rc = vboxNetFltSolarisRawToUnitData(pMsg, &pDlpiMsg);
     3009                if (RT_SUCCESS(rc))
    30083010                {
    3009                     LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST ARP\n"));
    3010 
    3011                     /*
    3012                      * Send message up ARP stream.
    3013                      */
    3014                     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
     3011                    pMsg = pDlpiMsg;
    30153012
    30163013                    vboxnetflt_stream_t *pArpStream = ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pvArpStream);
     
    30183015                    {
    30193016                        queue_t *pArpReadQueue = pArpStream->pReadQueue;
    3020                         Assert(pArpReadQueue);
    3021 
    3022                         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
    3023 
    30243017                        putnext(pArpReadQueue, pMsg);
    30253018                    }
    30263019                    else
    3027                     {
    3028                         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
    30293020                        rc = VERR_INVALID_POINTER;
    3030                     }
    30313021                }
    30323022                else
    30333023                {
    3034                     LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST\n"));
    3035 
    3036                     /*
    3037                      * Send messages up IP stream.
    3038                      */
    3039                     RTSpinlockAcquire(pThis->hSpinlock, &Tmp);
    3040 
    3041                     vboxnetflt_stream_t *pIpStream = ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pvIpStream);
    3042                     if (RT_LIKELY(pIpStream))
    3043                     {
    3044                         queue_t *pIpReadQueue = pIpStream->pReadQueue;
    3045                         Assert(pIpReadQueue);
    3046    
    3047                         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
    3048                         putnext(pIpReadQueue, pMsg);
    3049                     }
    3050                     else
    3051                     {
    3052                         RTSpinlockRelease(pThis->hSpinlock, &Tmp);
    3053                         rc = VERR_INVALID_POINTER;                   
    3054                     }
     3024                    LogRel((DEVICE_NAME ":vboxNetFltSolarisRawToUnitData failed! rc=%d\n", rc));
     3025                    freemsg(pMsg);
     3026                    rc = VERR_NO_MEMORY;
    30553027                }
    30563028            }
    30573029            else
    30583030            {
    3059                 LogRel((DEVICE_NAME ":vboxNetFltSolarisRawToUnitData failed! rc=%d\n", rc));
    3060                 freemsg(pMsg);
    3061                 rc = VERR_NO_MEMORY;
     3031                /*
     3032                 * Send messages up IP stream.
     3033                 */
     3034                LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST\n"));
     3035
     3036                pMsg->b_rptr += sizeof(RTNETETHERHDR);
     3037
     3038                vboxnetflt_stream_t *pIpStream = ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pvIpStream);
     3039                if (RT_LIKELY(pIpStream))
     3040                {
     3041                    queue_t *pIpReadQueue = pIpStream->pReadQueue;
     3042                    putnext(pIpReadQueue, pMsg);
     3043                }
     3044                else
     3045                    rc = VERR_INVALID_POINTER;                   
    30623046            }
    30633047        }
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