VirtualBox

Changeset 6001 in vbox


Ignore:
Timestamp:
Dec 7, 2007 3:29:01 PM (17 years ago)
Author:
vboxsync
Message:

Add configuration option to activate an IntNet interface early, before
the VM is about to be powered up. Needed by lwIP.

File:
1 edited

Legend:

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

    r5999 r6001  
    8787     * When the link is down all incoming packets will be dropped. */
    8888    bool volatile           fLinkDown;
     89    /** Set if data transmission should start immediately. */
     90    bool                    fActivateEarly;
    8991
    9092#ifdef VBOX_WITH_STATISTICS
     
    629631    LogFlow(("drvIntNetPowerOn\n"));
    630632    PDRVINTNET pThis = PDMINS2DATA(pDrvIns, PDRVINTNET);
    631     ASMAtomicXchgSize(&pThis->enmState, ASYNCSTATE_RUNNING);
    632     RTSemEventSignal(pThis->EventSuspended);
     633    if (!pThis->fActivateEarly)
     634    {
     635        ASMAtomicXchgSize(&pThis->enmState, ASYNCSTATE_RUNNING);
     636        RTSemEventSignal(pThis->EventSuspended);
     637    }
    633638}
    634639
     
    718723    pThis->EventOutOfSpace              = NIL_RTSEMEVENT;
    719724    pThis->enmState                     = ASYNCSTATE_SUSPENDED;
     725    pThis->fActivateEarly               = false;
    720726    /* IBase */
    721727    pDrvIns->IBase.pfnQueryInterface    = drvIntNetQueryInterface;
     
    729735     * Validate the config.
    730736     */
    731     if (!CFGMR3AreValuesValid(pCfgHandle, "Network\0ReceiveBufferSize\0SendBufferSize\0RestrictAccess\0"))
     737    if (!CFGMR3AreValuesValid(pCfgHandle, "Network\0ReceiveBufferSize\0SendBufferSize\0RestrictAccess\0IsService\0"))
    732738        return VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES;
    733739
     
    791797        return PDMDRV_SET_ERROR(pDrvIns, rc,
    792798                                N_("Configuration error: Failed to get the \"RestrictAccess\" value"));
     799
     800    rc = CFGMR3QueryBool(pCfgHandle, "IsService", &pThis->fActivateEarly);
     801    if (rc == VERR_CFGM_VALUE_NOT_FOUND)
     802        pThis->fActivateEarly = false;
     803    else if (VBOX_FAILURE(rc))
     804        return PDMDRV_SET_ERROR(pDrvIns, rc,
     805                                N_("Configuration error: Failed to get the \"IsService\" value"));
    793806
    794807    /*
     
    863876    pDrvIns->pDrvHlp->pfnSTAMRegister(pDrvIns, &pThis->StatTransmit,            STAMTYPE_PROFILE, szStatName,   STAMUNIT_TICKS_PER_CALL, "Profiling packet transmit runs.");
    864877#endif
     878
     879    /*
     880     * Activate data transmission as early as possible
     881     */
     882    if (pThis->fActivateEarly)
     883    {
     884        ASMAtomicXchgSize(&pThis->enmState, ASYNCSTATE_RUNNING);
     885        RTSemEventSignal(pThis->EventSuspended);
     886    }
    865887
    866888    LogRel(("IntNet#%u: cbRecv=%u cbSend=%u fRestrictAccess=%d\n", pDrvIns->iInstance, OpenReq.cbRecv, OpenReq.cbSend, OpenReq.fRestrictAccess));
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